<?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>110330</bug_id>
          
          <creation_ts>2013-02-20 05:20:24 -0800</creation_ts>
          <short_desc>[GTK] Move GTK-specific platform files from WebCore to Platform</short_desc>
          <delta_ts>2022-06-28 01:16:45 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110579</dependson>
    
    <dependson>111738</dependson>
    
    <dependson>112546</dependson>
          <blocked>75664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jesus</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>mkwst+watchlist</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rego+ews</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>837368</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-20 05:20:24 -0800</bug_when>
    <thetext>[GTK] Move GTK-specific platform files from WebCore to Platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837405</commentid>
    <comment_count>1</comment_count>
      <attachid>189303</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-20 06:14:47 -0800</bug_when>
    <thetext>Created attachment 189303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837420</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 06:34:30 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837422</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 06:34:56 -0800</bug_when>
    <thetext>Attachment 189303 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;GNUmakefile.am&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platform/GNUmakefile.am&apos;, u&apos;Source/Platform/GNUmakefile.list.am&apos;, u&apos;Source/Platform/gtk/AsyncFileSystemGtk.cpp&apos;, u&apos;Source/Platform/gtk/AsyncFileSystemGtk.h&apos;, u&apos;Source/Platform/gtk/ClipboardGtk.cpp&apos;, u&apos;Source/Platform/gtk/ClipboardGtk.h&apos;, u&apos;Source/Platform/gtk/ClipboardUtilitiesGtk.cpp&apos;, u&apos;Source/Platform/gtk/ClipboardUtilitiesGtk.h&apos;, u&apos;Source/Platform/gtk/CompositionResults.h&apos;, u&apos;Source/Platform/gtk/ContextMenuGtk.cpp&apos;, u&apos;Source/Platform/gtk/ContextMenuItemGtk.cpp&apos;, u&apos;Source/Platform/gtk/CursorGtk.cpp&apos;, u&apos;Source/Platform/gtk/CursorGtk.h&apos;, u&apos;Source/Platform/gtk/DataObjectGtk.cpp&apos;, u&apos;Source/Platform/gtk/DataObjectGtk.h&apos;, u&apos;Source/Platform/gtk/DragDataGtk.cpp&apos;, u&apos;Source/Platform/gtk/DragIcon.cpp&apos;, u&apos;Source/Platform/gtk/DragIcon.h&apos;, u&apos;Source/Platform/gtk/DragImageGtk.cpp&apos;, u&apos;Source/Platform/gtk/ErrorsGtk.cpp&apos;, u&apos;Source/Platform/gtk/ErrorsGtk.h&apos;, u&apos;Source/Platform/gtk/EventLoopGtk.cpp&apos;, u&apos;Source/Platform/gtk/FileSystemGtk.cpp&apos;, u&apos;Source/Platform/gtk/GOwnPtrGtk.cpp&apos;, u&apos;Source/Platform/gtk/GOwnPtrGtk.h&apos;, u&apos;Source/Platform/gtk/GRefPtrGtk.cpp&apos;, u&apos;Source/Platform/gtk/GRefPtrGtk.h&apos;, u&apos;Source/Platform/gtk/GamepadsGtk.cpp&apos;, u&apos;Source/Platform/gtk/GtkAuthenticationDialog.cpp&apos;, u&apos;Source/Platform/gtk/GtkAuthenticationDialog.h&apos;, u&apos;Source/Platform/gtk/GtkClickCounter.cpp&apos;, u&apos;Source/Platform/gtk/GtkClickCounter.h&apos;, u&apos;Source/Platform/gtk/GtkDragAndDropHelper.cpp&apos;, u&apos;Source/Platform/gtk/GtkDragAndDropHelper.h&apos;, u&apos;Source/Platform/gtk/GtkInputMethodFilter.cpp&apos;, u&apos;Source/Platform/gtk/GtkInputMethodFilter.h&apos;, u&apos;Source/Platform/gtk/GtkPluginWidget.cpp&apos;, u&apos;Source/Platform/gtk/GtkPluginWidget.h&apos;, u&apos;Source/Platform/gtk/GtkPopupMenu.cpp&apos;, u&apos;Source/Platform/gtk/GtkPopupMenu.h&apos;, u&apos;Source/Platform/gtk/GtkUtilities.cpp&apos;, u&apos;Source/Platform/gtk/GtkUtilities.h&apos;, u&apos;Source/Platform/gtk/GtkVersioning.c&apos;, u&apos;Source/Platform/gtk/GtkVersioning.h&apos;, u&apos;Source/Platform/gtk/GtkWidgetBackingStoreX11.cpp&apos;, u&apos;Source/Platform/gtk/KURLGtk.cpp&apos;, u&apos;Source/Platform/gtk/KeyBindingTranslator.cpp&apos;, u&apos;Source/Platform/gtk/KeyBindingTranslator.h&apos;, u&apos;Source/Platform/gtk/LanguageGtk.cpp&apos;, u&apos;Source/Platform/gtk/LocalizedStringsGtk.cpp&apos;, u&apos;Source/Platform/gtk/LoggingGtk.cpp&apos;, u&apos;Source/Platform/gtk/MIMETypeRegistryGtk.cpp&apos;, u&apos;Source/Platform/gtk/MainFrameScrollbarGtk.cpp&apos;, u&apos;Source/Platform/gtk/MainFrameScrollbarGtk.h&apos;, u&apos;Source/Platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/Platform/gtk/PasteboardHelper.cpp&apos;, u&apos;Source/Platform/gtk/PasteboardHelper.h&apos;, u&apos;Source/Platform/gtk/PlatformKeyboardEventGtk.cpp&apos;, u&apos;Source/Platform/gtk/PlatformMouseEventGtk.cpp&apos;, u&apos;Source/Platform/gtk/PlatformScreenGtk.cpp&apos;, u&apos;Source/Platform/gtk/PlatformWheelEventGtk.cpp&apos;, u&apos;Source/Platform/gtk/PopupMenuGtk.cpp&apos;, u&apos;Source/Platform/gtk/PopupMenuGtk.h&apos;, u&apos;Source/Platform/gtk/RedirectedXCompositeWindow.cpp&apos;, u&apos;Source/Platform/gtk/RedirectedXCompositeWindow.h&apos;, u&apos;Source/Platform/gtk/RenderThemeGtk.cpp&apos;, u&apos;Source/Platform/gtk/RenderThemeGtk.h&apos;, u&apos;Source/Platform/gtk/RenderThemeGtk2.cpp&apos;, u&apos;Source/Platform/gtk/RenderThemeGtk3.cpp&apos;, u&apos;Source/Platform/gtk/RunLoopGtk.cpp&apos;, u&apos;Source/Platform/gtk/ScrollViewGtk.cpp&apos;, u&apos;Source/Platform/gtk/ScrollbarThemeGtk.cpp&apos;, u&apos;Source/Platform/gtk/ScrollbarThemeGtk.h&apos;, u&apos;Source/Platform/gtk/ScrollbarThemeGtk2.cpp&apos;, u&apos;Source/Platform/gtk/ScrollbarThemeGtk3.cpp&apos;, u&apos;Source/Platform/gtk/SearchPopupMenuGtk.cpp&apos;, u&apos;Source/Platform/gtk/SearchPopupMenuGtk.h&apos;, u&apos;Source/Platform/gtk/SharedBufferGtk.cpp&apos;, u&apos;Source/Platform/gtk/SharedTimerGtk.cpp&apos;, u&apos;Source/Platform/gtk/SoundGtk.cpp&apos;, u&apos;Source/Platform/gtk/TemporaryLinkStubs.cpp&apos;, u&apos;Source/Platform/gtk/UserAgentGtk.cpp&apos;, u&apos;Source/Platform/gtk/UserAgentGtk.h.in&apos;, u&apos;Source/Platform/gtk/WidgetGtk.cpp&apos;, u&apos;Source/Platform/gtk/WidgetRenderingContext.cpp&apos;, u&apos;Source/Platform/gtk/WidgetRenderingContext.h&apos;, u&apos;Source/Platform/gtk/audio/AudioBusGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/ColorGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/FullscreenVideoControllerGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/FullscreenVideoControllerGtk.h&apos;, u&apos;Source/Platform/gtk/graphics/GdkCairoUtilities.cpp&apos;, u&apos;Source/Platform/gtk/graphics/GdkCairoUtilities.h&apos;, u&apos;Source/Platform/gtk/graphics/IconGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/ImageBufferGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/ImageGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/IntPointGtk.cpp&apos;, u&apos;Source/Platform/gtk/graphics/IntRectGtk.cpp&apos;, u&apos;Source/Platform/gtk/network/CredentialBackingStore.cpp&apos;, u&apos;Source/Platform/gtk/network/CredentialBackingStore.h&apos;, u&apos;Source/Platform/gtk/text/TextBreakIteratorInternalICUGtk.cpp&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.am&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/bindings/gobject/GNUmakefile.am&apos;, u&apos;Source/WebCore/platform/audio/gtk/AudioBusGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/ColorGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/FullscreenVideoControllerGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/FullscreenVideoControllerGtk.h&apos;, u&apos;Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/GdkCairoUtilities.h&apos;, u&apos;Source/WebCore/platform/graphics/gtk/IconGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/ImageGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/IntPointGtk.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gtk/IntRectGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/AsyncFileSystemGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/AsyncFileSystemGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/ClipboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ClipboardGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ClipboardUtilitiesGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/CompositionResults.h&apos;, u&apos;Source/WebCore/platform/gtk/ContextMenuGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/CursorGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/CursorGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/DataObjectGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DataObjectGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/DragDataGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DragIcon.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DragIcon.h&apos;, u&apos;Source/WebCore/platform/gtk/DragImageGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ErrorsGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ErrorsGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/EventLoopGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/FileSystemGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GOwnPtrGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GOwnPtrGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/GRefPtrGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GRefPtrGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/GamepadsGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkAuthenticationDialog.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkClickCounter.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkClickCounter.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkInputMethodFilter.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkInputMethodFilter.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkPluginWidget.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkPluginWidget.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkPopupMenu.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkPopupMenu.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkUtilities.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkUtilities.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkVersioning.c&apos;, u&apos;Source/WebCore/platform/gtk/GtkVersioning.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkWidgetBackingStoreX11.cpp&apos;, u&apos;Source/WebCore/platform/gtk/KURLGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/KeyBindingTranslator.cpp&apos;, u&apos;Source/WebCore/platform/gtk/KeyBindingTranslator.h&apos;, u&apos;Source/WebCore/platform/gtk/LanguageGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/LocalizedStringsGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/LoggingGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/MainFrameScrollbarGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardHelper.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardHelper.h&apos;, u&apos;Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PlatformMouseEventGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PlatformScreenGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PopupMenuGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PopupMenuGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp&apos;, u&apos;Source/WebCore/platform/gtk/RedirectedXCompositeWindow.h&apos;, u&apos;Source/WebCore/platform/gtk/RenderThemeGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/RenderThemeGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/RenderThemeGtk2.cpp&apos;, u&apos;Source/WebCore/platform/gtk/RenderThemeGtk3.cpp&apos;, u&apos;Source/WebCore/platform/gtk/RunLoopGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ScrollViewGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ScrollbarThemeGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ScrollbarThemeGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/ScrollbarThemeGtk2.cpp&apos;, u&apos;Source/WebCore/platform/gtk/ScrollbarThemeGtk3.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SearchPopupMenuGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SearchPopupMenuGtk.h&apos;, u&apos;Source/WebCore/platform/gtk/SharedBufferGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SharedTimerGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/SoundGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/TemporaryLinkStubs.cpp&apos;, u&apos;Source/WebCore/platform/gtk/UserAgentGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/UserAgentGtk.h.in&apos;, u&apos;Source/WebCore/platform/gtk/WidgetGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/WidgetRenderingContext.cpp&apos;, u&apos;Source/WebCore/platform/gtk/WidgetRenderingContext.h&apos;, u&apos;Source/WebCore/platform/network/gtk/CredentialBackingStore.cpp&apos;, u&apos;Source/WebCore/platform/network/gtk/CredentialBackingStore.h&apos;, u&apos;Source/WebCore/platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/GNUmakefile.am&apos;, u&apos;Source/WebKit/gtk/po/ChangeLog&apos;, u&apos;Source/WebKit/gtk/po/POTFILES.in&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.am&apos;, u&apos;Source/WebKit2/Scripts/generate-forwarding-headers.pl&apos;, u&apos;Source/WebKit2/Shared/Downloads/gtk/DownloadSoupErrorsGtk.cpp&apos;, u&apos;Source/WebKit2/Shared/NativeWebKeyboardEvent.h&apos;, u&apos;Source/WebKit2/Shared/NativeWebMouseEvent.h&apos;, u&apos;Source/WebKit2/Shared/NativeWebWheelEvent.h&apos;, u&apos;Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp&apos;, u&apos;Source/WebKit2/Shared/gtk/WebEventFactory.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitError.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitPrintOperation.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitUIClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebInspectorProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebPageProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.cpp&apos;, u&apos;Source/WebKit2/UIProcess/gtk/WebPopupMenuProxyGtk.h&apos;, u&apos;Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/gtk/WebPageGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/GNUmakefile.am&apos;, u&apos;Tools/TestWebKitAPI/GNUmakefile.am&apos;, u&apos;Tools/TestWebKitAPI/gtk/PlatformWebViewGtk.cpp&apos;, u&apos;configure.ac&apos;]&quot; exit_code: 1
Source/Platform/gtk/GtkVersioning.c:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h&quot;
Total errors found: 1 in 147 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>837559</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-20 10:32:14 -0800</bug_when>
    <thetext>Couple questions: We can&apos;t we totally replace libWebCoreGTK+ with PlatformGTK? So this means that ClipboardGtk will be in platform, but the superclass, Clipboard, will be in WebCore? Isn&apos;t it a bit odd that a subclass is defined in the dependency?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837632</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-20 12:04:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Couple questions: We can&apos;t we totally replace libWebCoreGTK+ with PlatformGTK?

This patch only moves GTK-specific source files to Source/Platform. There are still other files that are built into libWebCoreGtk that are used by other ports as well, for instance geoclue geolocation provider, gstreamer-based media player etc.

The libWebCoreGtk library could potentially be replaced completely by libPlatformGtk, also building those sources that are still located in Source/WebCore/platform. Given that there&apos;s intention to move everything under Source/WebCore/platform to Source/Platform perhaps sources that are currently built into libWebCorePlatform could also be built into libPlatformGtk (perhaps the name simplified into libPlatform). Sources that are still placed in Source/WebCore/platform could still be listed in Source/WebCore/GNUmakefile.list.am just so people adding new files wouldn&apos;t have to go edit the Source/Platform/GNUmakefile.list.am.

So yeah, I&apos;d support replacing libWebCoreGtk completely with libPlatformGtk (and possibly replacing libWebCorePlatform as well), if the outlined plan is OK with everyone.

&gt; So this means that ClipboardGtk will be in platform, but the superclass, Clipboard, will be in WebCore? Isn&apos;t it a bit odd that a subclass is defined in the dependency?

I assume it is. Diminishing libWebCoreGtk in favor of a libPlatformGtk library would fix most of these issues. Note, however, that the Clipboard class is defined in Source/WebCore/dom/Clipboard.h and is as such currently built into libWebCoreDOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837652</commentid>
    <comment_count>6</comment_count>
      <attachid>189303</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-20 12:26:26 -0800</bug_when>
    <thetext>Comment on attachment 189303
Patch

The patch will build with a clean build. Unfortunately, with all the style fixes, a small error got into one of the theming source files, causing problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838289</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-21 03:27:34 -0800</bug_when>
    <thetext>Right, I&apos;d recommend doing this change in three parts:
- renaming libWebCoreGtk to libPlatform(Gtk?), defining the build rules in Source/Platform/GNUmakefile.am,
- rolling libWebCorePlatform into libPlatform,
- moving GTK-specific source files into Source/Platform/gtk.

The last part can be done under this bug, I&apos;ll upload patches for the other two into new ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839426</commentid>
    <comment_count>8</comment_count>
      <attachid>189734</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-22 03:01:34 -0800</bug_when>
    <thetext>Created attachment 189734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839440</commentid>
    <comment_count>9</comment_count>
      <attachid>189739</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-22 03:46:10 -0800</bug_when>
    <thetext>Created attachment 189739
Patch

Commit #3 from the platform-gtk branch I&apos;ve set up on GitHub.
https://github.com/zdobersek/webkit/commits/platform-gtk

Will most likely not apply. The branch builds and works as a whole.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839446</commentid>
    <comment_count>10</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-22 03:52:57 -0800</bug_when>
    <thetext>I haven&apos;t included any style fixes to avoid any (additional? :&gt;) regressions. Since the patch doesn&apos;t apply yet the style bot will not dump the complete list of all the 500+ style issues the files on the move contain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839816</commentid>
    <comment_count>11</comment_count>
      <attachid>189734</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-22 12:32:04 -0800</bug_when>
    <thetext>Comment on attachment 189734
Patch

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

Looks like this patch might include a few changelog entries.

&gt; Source/WebKit2/GNUmakefile.am:-582
&gt; -	libWebCorePlatform.la \
&gt; -	libWebCoreGtk2.la \

I&apos;m not sure I understand how we can get rid of libWebCorePlatform here. I probably need to see a high-level overview of what&apos;s going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839834</commentid>
    <comment_count>12</comment_count>
      <attachid>189734</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-22 12:53:21 -0800</bug_when>
    <thetext>Comment on attachment 189734
Patch

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

&gt;&gt; Source/WebKit2/GNUmakefile.am:-582
&gt;&gt; -	libWebCoreGtk2.la \
&gt; 
&gt; I&apos;m not sure I understand how we can get rid of libWebCorePlatform here. I probably need to see a high-level overview of what&apos;s going on.

This patch[1] relies on the patch that removes libWebCorePlatform.la and builds its sources into libPlatform.la. libPlatformGtk2.la is built in the same way as libPlatform.la but uses GTK2.

[1] I incorrectly diffed out this patch from the branch. I&apos;ll upload a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839837</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-22 12:54:05 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 189734 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=189734&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/GNUmakefile.am:-582
&gt; &gt;&gt; -	libWebCoreGtk2.la \
&gt; &gt; 
&gt; &gt; I&apos;m not sure I understand how we can get rid of libWebCorePlatform here. I probably need to see a high-level overview of what&apos;s going on.
&gt; 
&gt; This patch[1] relies on the patch that removes libWebCorePlatform.la and builds its sources into libPlatform.la. libPlatformGtk2.la is built in the same way as libPlatform.la but uses GTK2.
&gt; 
&gt; [1] I incorrectly diffed out this patch from the branch. I&apos;ll upload a new one.

Thanks. Once I saw the other patch it made a lot more sense. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840624</commentid>
    <comment_count>14</comment_count>
      <attachid>189979</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-24 10:49:37 -0800</bug_when>
    <thetext>Created attachment 189979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840625</commentid>
    <comment_count>15</comment_count>
      <attachid>189979</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-24 10:53:05 -0800</bug_when>
    <thetext>Comment on attachment 189979
Patch

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

&gt; configure.ac:40
&gt; +AC_CONFIG_FILES([DerivedSources/WebCore/UserAgentGtk.h:Source/Platform/gtk/UserAgentGtk.h.in])

The patch in bug #110582 removes the UserAgentGtk.h header generation, so this doesn&apos;t really apply anymore. I can remove related changes to this file when landing if I don&apos;t close bug #110582 first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840635</commentid>
    <comment_count>16</comment_count>
      <attachid>189982</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-02-24 11:40:38 -0800</bug_when>
    <thetext>Created attachment 189982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841064</commentid>
    <comment_count>17</comment_count>
      <attachid>189982</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-25 10:08:11 -0800</bug_when>
    <thetext>Comment on attachment 189982
Patch

Maybe we should wait on this part until all the platform files move? It feels weird to only move some of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854211</commentid>
    <comment_count>18</comment_count>
      <attachid>189982</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-03-13 05:11:03 -0700</bug_when>
    <thetext>Comment on attachment 189982
Patch

Removing from the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1878695</commentid>
    <comment_count>19</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2022-06-28 01:16:45 -0700</bug_when>
    <thetext>Perhaps this bug can be closed now?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189303</attachid>
            <date>2013-02-20 06:14:47 -0800</date>
            <delta_ts>2013-02-22 03:01:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110330-20130220151107.patch</filename>
            <type>text/plain</type>
            <size>1260030</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBiZTllYWVjNTk2YjNh
NzlmOWRmNjk0YzcyOGY2MWE4YzkxOThiOTg4Li4zMmFhZjU5YzdiMjJkZWM3MzQ5OTMxMDFkNzdj
MzQ2MWU1NWMzOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMy0wMi0yMCAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92
ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEdUSy1z
cGVjaWZpYyBXZWJDb3JlIHNvdXJjZSBmaWxlcyBoZXJlLCBpbnRvIFNvdXJjZS9QbGF0Zm9ybS9n
dGsuCisgICAgICAgIEFsbCB0aGVzZSBmaWxlcyBhcmUgYWRqdXN0ZWQgd2hlcmUgbmVjZXNzYXJ5
IHRvIGJyaW5nIHRoZW0gaW4gbGluZSB3aXRoCisgICAgICAgIHRoZSBzdHlsZSBndWlsZGVsaW5l
cy4KKworICAgICAgICBUaGVzZSBmaWxlcyBhcmUgYnVpbHQgaW50byB0aGUgbGliUGxhdGZvcm1H
dGsgc3RhdGljIGxpYnJhcnkgd2hpY2ggaXMgYnVpbHQKKyAgICAgICAgdmVyeSBtdWNoIGxpa2Ug
dGhlIGxpYldlYkNvcmVHdGsgc3RhdGljIGxpYnJhcnkuIE5vdGUgdGhhdCB0aGlzIHBhdGNoIG9u
bHkKKyAgICAgICAgYnJpbmdzIHRoZSBHVEstc3BlY2lmaWMgZmlsZXMgb3ZlciBmcm9tIFdlYkNv
cmUgaW50byBQbGF0Zm9ybS4gVGhlIGxpYldlYkNvcmVHdGsKKyAgICAgICAgbGlicmFyeSBpcyBz
dGlsbCBidWlsdCBmcm9tIG90aGVyIHNvdXJjZSBmaWxlcyB0aGF0IHJlbHkgb24gZGVwZW5kZW5j
aWVzIGxpa2UKKyAgICAgICAgR1N0cmVhbWVyIG9yIExpYnNvdXAsIGJ1dCBhcmUgbm90IHBhcnQg
b2YgdGhpcyBjaGFuZ2UgZHVlIHRvIGJlaW5nIHVzZWQgYnkgb3RoZXIKKyAgICAgICAgcG9ydHMg
d2hvIGFyZSBub3QgbWFraW5nIHRoZSB0cmFuc2l0aW9uIHlldC4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZC4K
KyAgICAgICAgKiBndGsvOiBNb3ZlZCBzb3VyY2UgZmlsZXMgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsgaGVyZS4KKyAgICAgICAgKiBndGsvYXVkaW8vOiBNb3ZlZCBzb3VyY2UgZmls
ZXMgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsgaGVyZS4KKyAgICAgICAg
KiBndGsvZ3JhcGhpY3MvOiBNb3ZlZCBzb3VyY2UgZmlsZXMgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsgaGVyZS4KKyAgICAgICAgKiBndGsvbmV0d29yay86IE1vdmVk
IHNvdXJjZSBmaWxlcyBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrIGhl
cmUuCisgICAgICAgICogZ3RrL3RleHQvOiBNb3ZlZCBzb3VyY2UgZmlsZXMgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ayBoZXJlLgorCiAyMDEzLTAyLTE5ICBBZHJpZW5uZSBX
YWxrZXIgIDxlbm5lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTQzMzgyIGFuZCByMTQzNDAxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA3ZTI3NThjYWIyZTUzNjc1
ZWUxYWQ2MmVhNDRlZGE4YTA3MmYyOTYuLjFkOTA2NjZiYTU5YTk4MDM5YWQ5NDg4NzBlZmVkN2Zk
ZmM3ZmQxNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wMi0yMCAgWmFuIERv
YmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEst
c3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBu
byBuZXcgZnVuY3Rpb25hbGl0eSwgbWVyZWx5IG1vdmluZyBzb3VyY2UgZmlsZXMgdG8gUGxhdGZv
cm0uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVtb3ZlIG5vbi1leGlzdGluZyBwYXRo
cyBmcm9tIENQUEZMQUdTLiBBZGQgcGxhdGZvcm0gbGlicmFyeSBjcHBmbGFncworICAgICAgICB0
byBDUFBGTEFHUyBvZiB2YXJpb3VzIGxpYnJhcmllcy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOiBSZW1vdmUgYnVpbGQgdGFyZ2V0cyB0aGF0IHdlcmUgbW92ZWQgdG8gdGhlIHBsYXRm
b3JtIGxpYnJhcnkuCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbTog
QWRkIHBsYXRmb3JtIGNwcGZsYWcgdG8gdGhlIGxpYldlYkNvcmVET00ubGEgbGlicmFyeSBjcHBm
bGFncy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvOiBNb3ZlZCBzb3VyY2UgZmlsZXMgdG8gU291
cmNlL1BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9ndGsvOiBNb3ZlZCBz
b3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvOiBNb3ZlZCBzb3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3Jt
L2d0ay9ncmFwaGljcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2d0ay86IE1vdmVkIHNv
dXJjZSBmaWxlcyB0byBTb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsuCisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9ndGsvOiBNb3ZlZCBzb3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3JtL2d0
ay90ZXh0LgorCiAyMDEzLTAyLTIwICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW50cm9kdWNlIFNlY3VyaXR5T3JpZ2lu
QWRkZWQgYW5kIFNlY3VyaXR5T3JpZ2luUmVtb3ZlZCBldmVudHMgaW50byBSZXNvdXJjZVRyZWVN
b2RlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDEzOWY4YmNkMzg0NGRiMjE2Nzg0MDAyOTczZDVkY2U3
YWM1OWE5ZjYuLmM2NDI0M2QxMzBlMTI3YzI2NWIwOTgxOWIzNWQwZTQ3YTE3MjMxZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMi0yMCAgWmFuIERvYmVyc2VrICA8
emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMg
cGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgcGxh
dGZvcm0gY3BwZmxhZ3MgdG8gdGhlIENQUEZMQUdTIHRoZSBsaWJ3ZWJraXRndGsgc2hhcmVkCisg
ICAgICAgIGxpYnJhcnkgdXNlcy4gQWRkIHRoZSBzdGF0aWMgbGliUGxhdGZvcm1HdGsubGEgbGli
cmFyeSB0byB0aGUgbGlid2Via2l0Z3RrIHNoYXJlZAorICAgICAgICBsaWJyYXJ5LiBBZGp1c3Qg
dGhlIHBhdGggdG8gR3RrVmVyc2lvbmluZy5jLCBpdCBub3cgbGl2ZXMgaW4gU291cmNlL1BsYXRm
b3JtL2d0ay4KKwogMjAxMy0wMi0xNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gU3ByZWFkIHRoZSBneXAgYnVpbGQgZmlsZXMgdGhyb3Vn
aG91dCB0aGUgdHJlZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvcG8vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvcG8vQ2hhbmdlTG9nCmluZGV4IDhkZDNkZDhhMTBiNmVlN2Zi
ZjA5YTJlYTE2YWIyZDRlNTZhYTBlMzguLjc5ODYwNWQxZDU0NzI0Njc0Y2ZlMTRlN2MzNDc0ODJi
Y2RkMTZlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0w
Mi0yMCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRm
b3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAz
MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBP
VEZJTEVTLmluOiBBZGp1c3QgdGhlIHBhdGhzIHRvIHZhcmlvdXMgR1RLLXNwZWNpZmljIHBsYXRm
b3JtIHNvdXJjZSBmaWxlcywKKyAgICAgICAgdGhleSBub3cgbGl2ZSB1bmRlciBTb3VyY2UvUGxh
dGZvcm0vZ3RrLgorCiAyMDEzLTAyLTE5ICBNaciZdSBNb2xkb3ZhbiAgPGR1bW9sQGdub21lLm9y
Zz4KIAogICAgICAgICBSb21hbmlhbiB0cmFuc2xhdGlvbiBmb3IgV2ViS2l0R3RrKyBIRUFECmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggMzY0NGNkMmFmOTIyYTU0OTFhMDg1ZDMwNmM4MTJlMjRhOTAwNmQ0Ni4uMTVi
YzY0ZjFjOTViNTgxZDhhN2JhZmFiZGE3ZTk2ZGYzZjIyMDA5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ5IEBACisyMDEzLTAyLTIwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZpYyBwbGF0Zm9ybSBmaWxlcyBmcm9t
IFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBmb3J3YXJkaW5nIGhlYWRlciBnZW5lcmF0aW9uIHRvb2wgbXVzdCBu
b3cgYWxzbyB0YWtlIHRoZSBQbGF0Zm9ybSBmcmFtZXdvcmsKKyAgICAgICAgaW50byBhY2NvdW50
IGFzIHRoYXQncyB3aGVyZSB0aGUgR1RLLXNwZWNpZmljIHNvdXJjZSBmaWxlcyBhcmUgcGxhY2Vk
IG5vdy4KKyAgICAgICAgSW5jbHVzaW9ucyBvZiBoZWFkZXJzIHRoYXQgYXJlIG5vdyBsb2NhdGVk
IHRoZXJlIGFyZSBhZGp1c3RlZCB0byBpbmNsdWRlIGZyb20KKyAgICAgICAgUGxhdGZvcm0gaW5z
dGVhZCBvZiBXZWJDb3JlLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEluY2x1ZGUgcGxh
dGZvcm0gY3BwZmxhZ3MgaW4gQ1BQRkxBR1MgbGlzdHMgZm9yIHRoZSBsaWJ3ZWJraXQyZ3RrCisg
ICAgICAgIGxpYnJhcnksIHRoZSBsaWJXZWJLaXRHdGsyIHN0YXRpYyBsaWJyYXJ5IGFuZCB0aGUg
V2ViS2l0UGx1Z2luUHJvY2Vzcy4gQWRkIHRoZQorICAgICAgICBsaWJQbGF0Zm9ybUd0ayBsaWJy
YXJ5IHRvIHRoZSBsaWJ3ZWJraXQyZ3RrIGxpYnJhcnkuIFNpbWlsYXJseSB0byBsaWJXZWJLaXRH
dGsyLAorICAgICAgICBsaWJQbGF0Zm9ybUd0azIgaXMgYnVpbHQgYW5kIHVzZWQgYnkgdGhlIFdl
YktpdFBsdWdpblByb2Nlc3MuCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5n
LWhlYWRlcnMucGw6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3Vw
RXJyb3JzR3RrLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5o
OgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50Lmg6CisgICAgICAgICogU2hh
cmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50
Q29kZXJzR3RrLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZXR0aW5ncy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VUlDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmls
dGVyLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0
ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwOgorCiAyMDEzLTAy
LTIwICBDaHJpc3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5nLmNvbT4KIAogICAg
ICAgICBbRUZMXVtXSzJdIFBvcnQgRXdrUG9wdXBNZW51SXRlbSB0byB0aGUgQyBBUEkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9QbGF0Zm9ybS9H
TlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmUzZTNlOTQyYTgxOGIxMGU1MjgyNzFmYWFjYzMw
ZTJmOWY3ZDlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxl
LmFtCkBAIC0wLDAgKzEsNTkgQEAKK2luY2x1ZGUgJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9ybS9H
TlVtYWtlZmlsZS5saXN0LmFtCisKK3BsYXRmb3JtZ3RrX2NwcGZsYWdzICs9IFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL2F1ZGlvIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzIFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsgXAorCS1JJChzcmNkaXIp
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4dCBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNv
dXJjZXMvUGxhdGZvcm0KKworbm9pbnN0X0xUTElCUkFSSUVTICs9IFwKKwlsaWJQbGF0Zm9ybUd0
ay5sYQorCitub2Rpc3RfbGliUGxhdGZvcm1HdGtfbGFfU09VUkNFUyA9IFwKKwkkKHBsYXRmb3Jt
Z3RrX2J1aWx0X3NvdXJjZXMpCisKK2xpYlBsYXRmb3JtR3RrX2xhX1NPVVJDRVMgPSBcCisJJChw
bGF0Zm9ybWd0a19zb3VyY2VzKQorCitsaWJQbGF0Zm9ybUd0a19sYV9DWFhGTEFHUyA9IFwKKwkk
KFNZTUJPTF9WSVNJQklMSVRZX0lOTElORVMpIFwKKwkkKGdsb2JhbF9jeHhmbGFncykKKworbGli
UGxhdGZvcm1HdGtfbGFfQ0ZMQUdTID0gXAorCSQoU1lNQk9MX1ZJU0lCTElUWSkgXAorCSQoZ2xv
YmFsX2NmbGFncykKKworbGliUGxhdGZvcm1HdGtfbGFfQ1BQRkxBR1MgPSBcCisJLURCVUlMRElO
R19XZWJDb3JlIFwKKwktREJVSUxESU5HX1dFQktJVCBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwK
KwkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKKwkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBs
YXRmb3JtZ3RrX2NwcGZsYWdzKSBcCisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1m
bm8tc3RyaWN0LWFsaWFzaW5nIFwKKwkkKEhJTERPTl9DUFBGTEFHUykgXAorCSQoQ0FJUk9fQ0ZM
QUdTKSBcCisJJChDTFVUVEVSX0NGTEFHUykgXAorCSQoQ09WRVJBR0VfQ0ZMQUdTKSBcCisJJChF
TkNIQU5UX0NGTEFHUykgXAorCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCisJJChHQUlMX0NGTEFHUykg
XAorCSQoR0FNRVBBRF9DRkxBR1MpIFwKKwkkKEdFT0NMVUVfQ0ZMQUdTKSBcCisJJChHTElCX0NG
TEFHUykgXAorCSQoR1NUUkVBTUVSX0NGTEFHUykgXAorCSQoR1RLX0NGTEFHUykgXAorCSQoSElM
RE9OX0NGTEFHUykgXAorCSQoTElCU0VDUkVUX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1Mp
IFwKKwkkKExJQlhNTF9DRkxBR1MpIFwKKwkkKExJQlhTTFRfQ0ZMQUdTKSBcCisJJChTUUxJVEUz
X0NGTEFHUykgXAorCSQoVU5JQ09ERV9DRkxBR1MpIFwKKwkkKFhDT01QT1NJVEVfQ0ZMQUdTKSBc
CisJJChYREFNQUdFX0NGTEFHUykgXAorCSQoWFJFTkRFUl9DRkxBR1MpIFwKKwkkKFhUX0NGTEFH
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE1ZjM3MGMxNWJl
MjlkMGI5ODk3YmU5ZGZiOGM5ZjBmM2ZkYTIxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0wLDAgKzEsMTA4IEBACitwbGF0Zm9ybWd0
a19idWlsdF9zb3VyY2VzICs9IFwKKwlEZXJpdmVkU291cmNlcy9QbGF0Zm9ybS9Vc2VyQWdlbnRH
dGsuaAorCitwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2F1
ZGlvL0F1ZGlvQnVzR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9Db2xv
ckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRp
ZXMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVz
LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ljb25H
dGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlQnVmZmVyR3RrLmNw
cCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUd0ay5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL2dyYXBoaWNzL0ludFJlY3RHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL25l
dHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
bmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
dGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0Fz
eW5jRmlsZVN5c3RlbUd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5j
cHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRVdGlsaXRpZXMuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Db21wb3NpdGlv
blJlc3VsdC5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3Rr
LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdE
YXRhR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSW1h
Z2VHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRXZlbnRM
b29wR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvR3RrQ2xpY2tDb3VudGVyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtDbGlja0Nv
dW50ZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtV
dGlsaXRpZXMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0dPd25QdHJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lk
Z2V0LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1BvcHVwTWVudS5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYyBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvS1VSTEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5z
bGF0b3IuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0xv
Z2dpbmdHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsu
Y3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAgXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmggXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEhlbHBlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Q
b3B1cE1lbnVHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrMi5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyVGhlbWVHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIu
Y3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAgXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQ
b3B1cE1lbnVHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oCisKK2lmIFRBUkdFVF9YMTEKK3dlYmNvcmVndGtfc291cmNl
cyArPSBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3Bw
CitpZiBVU0VfT1BFTkdMCit3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKK2VuZGlmICMgRU5EIFVTRV9PUEVOR0wK
K2VuZGlmICMgRU5EIFRBUkdFVF9YMTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
QXN5bmNGaWxlU3lzdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lz
dGVtR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGZiZGEwODczNDBjMGJmNjFiMWRiMWQ3NzBjODljN2Vk
ODMwMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVT
eXN0ZW1HdGsuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNp
bmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1HdGsuaCIKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgQXN5bmNGaWxlU3lz
dGVtOjppc0F2YWlsYWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1Bhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVTeXN0ZW06
OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1HdGso
KSk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5c3RlbShjb25zdCBTdHJp
bmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyLCBGaWxlU3lzdGVt
VHlwZSwgYm9vbCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNr
cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNhbGxiYWNrcy0+ZGlkRmFpbChOT1Rf
U1VQUE9SVEVEX0VSUik7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtOjpkZWxldGVGaWxlU3lz
dGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZp
ZXIsIEZpbGVTeXN0ZW1UeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjYWxsYmFja3Mt
PmRpZEZhaWwoTk9UX1NVUFBPUlRFRF9FUlIpOworfQorCitBc3luY0ZpbGVTeXN0ZW1HdGs6OkFz
eW5jRmlsZVN5c3RlbUd0aygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQXN5bmNG
aWxlU3lzdGVtR3RrOjp+QXN5bmNGaWxlU3lzdGVtR3RrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6bW92ZShjb25zdCBLVVJMJiBzb3Vy
Y2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNvcHkoY29uc3QgS1VSTCYgc291cmNlUGF0aCwg
Y29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
QXN5bmNGaWxlU3lzdGVtR3RrOjpyZW1vdmUoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVtb3ZlUmVjdXJzaXZlbHkoY29u
c3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3Rl
bUd0azo6cmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZUZpbGUoY29uc3QgS1VSTCYgcGF0aCwg
Ym9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0
ZW1HdGs6OmNyZWF0ZURpcmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6ZmlsZUV4aXN0
cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxl
U3lzdGVtR3RrOjpkaXJlY3RvcnlFeGlzdHMoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVhZERpcmVjdG9yeShjb25zdCBL
VVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tz
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwordm9pZCBBc3luY0ZpbGVTeXN0ZW1H
dGs6OmNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgS1VS
TCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1H
dGsuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzlmNTczNzA4MWNhNjg0ZjAxMTMyMWM3NWJhOGRmZTVkYTY1NWM3MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmgKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlk
b3dAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiAgQXN5bmNGaWxl
U3lzdGVtR3RrX2gKKyNkZWZpbmUgIEFzeW5jRmlsZVN5c3RlbUd0a19oCisKKyNpZiBFTkFCTEUo
RklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrczsKKworY2xhc3MgQXN5bmNGaWxlU3lzdGVtR3RrIDogcHVibGljIEFz
eW5jRmlsZVN5c3RlbSB7CitwdWJsaWM6CisgICAgQXN5bmNGaWxlU3lzdGVtR3RrKCk7CisgICAg
dmlydHVhbCB+QXN5bmNGaWxlU3lzdGVtR3RrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZShj
b25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGNvcHko
Y29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmUoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgS1VSTCYgcGF0aCwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUZpbGUoY29uc3QgS1VSTCYgcGF0
aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZURpcmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBib29s
IGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmlsZUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBkaXJlY3RvcnlFeGlzdHMo
Y29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVhZERpcmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVX
cml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiwgY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyAgQXN5bmNGaWxlU3lzdGVtR3RrX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZWVjYTE2NzAzMzYxMGU0Mzg4N2Uz
MjA2YWY0NWU1Y2NhZDY3ZDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRHdGsuY3BwCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkR3Rr
LmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisj
aW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZpbGVM
aXN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFz
dGVib2FyZC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJtYXJrdXAuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitlbnVtIENsaXBib2FyZERhdGFUeXBlIHsKKyAgICBDbGlwYm9hcmREYXRhVHlw
ZVRleHQsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCisgICAgQ2xpcGJvYXJkRGF0YVR5
cGVVUklMaXN0LAorICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAorICAgIENsaXBib2FyZERhdGFU
eXBlSW1hZ2UsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duCit9OworCitQYXNzUmVmUHRy
PENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1Bv
bGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gQ2xpcGJvYXJkR3RrOjpj
cmVhdGUocG9saWN5LCBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCksIGZyYW1lKTsKK30KKworUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVy
biBDbGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSwg
RHJhZ0FuZERyb3AsIGZyYW1lKTsKK30KKworQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1l
KiBmcmFtZSkKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIENvcHlBbmRQYXN0ZSkKKyAgICAsIG1f
ZGF0YU9iamVjdChEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKSkKKyAgICAs
IG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK0Ns
aXBib2FyZEd0azo6Q2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIFBh
c3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9h
cmRUeXBlLCBGcmFtZSogZnJhbWUpCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBjbGlwYm9hcmRU
eXBlKQorICAgICwgbV9kYXRhT2JqZWN0KGRhdGFPYmplY3QpCisgICAgLCBtX2NsaXBib2FyZCgw
KQorICAgICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKworQ2xpcGJvYXJkR3RrOjp+Q2xpcGJvYXJk
R3RrKCkKK3sKKyAgICBpZiAobV9kcmFnSW1hZ2UpCisgICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1v
dmVDbGllbnQodGhpcyk7Cit9CisKK3N0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBkYXRhT2JqZWN0
VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShjb25zdCBTdHJpbmcmIHJhd1R5cGUpCit7CisgICAg
U3RyaW5nIHR5cGUocmF3VHlwZS5zdHJpcFdoaXRlU3BhY2UoKSk7CisKKyAgICAvLyBUd28gc3Bl
Y2lhbCBjYXNlcyBmb3IgSUUgY29tcGF0aWJpbGl0eQorICAgIGlmICh0eXBlID09ICJUZXh0IiB8
fCB0eXBlID09ICJ0ZXh0IikKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dDsK
KyAgICBpZiAodHlwZSA9PSAiVVJMIikKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBl
VVJMOworCisgICAgLy8gRnJvbSB0aGUgTWFjIHBvcnQ6IElnbm9yZSBhbnkgdHJhaWxpbmcgY2hh
cnNldCAtIEpTIHN0cmluZ3MgYXJlCisgICAgLy8gVW5pY29kZSwgd2hpY2ggZW5jYXBzdWxhdGVz
IHRoZSBjaGFyc2V0IGlzc3VlLgorICAgIGlmICh0eXBlID09ICJ0ZXh0L3BsYWluIiB8fCB0eXBl
LnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCisgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZVRleHQ7CisgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZS5zdGFydHNXaXRo
KCJ0ZXh0L2h0bWw7IikpCisgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cDsK
KyAgICBpZiAodHlwZSA9PSAiRmlsZXMiIHx8IHR5cGUgPT0gInRleHQvdXJpLWxpc3QiIHx8IHR5
cGUuc3RhcnRzV2l0aCgidGV4dC91cmktbGlzdDsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2Fy
ZERhdGFUeXBlVVJJTGlzdDsKKworICAgIC8vIE5vdCBhIGtub3duIHR5cGUsIHNvIGp1c3QgZGVm
YXVsdCB0byB1c2luZyB0aGUgdGV4dCBwb3J0aW9uLgorICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZVVua25vd247Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjpjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlU3RyaW5nKQoreworICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFP
YmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgorICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVVUkw6CisgICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJVUklMaXN0KCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXA6CisgICAg
ICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJNYXJrdXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6CisgICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJUZXh0
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZToKKyAg
ICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckltYWdlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFy
QWxsKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAg
ICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVD
bGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Cit9CisKKwordm9pZCBDbGlwYm9hcmRHdGs6
OmNsZWFyQWxsRGF0YSgpCit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBkbyBub3QgY2xlYXIgZmlsZW5hbWVzLiBB
Y2NvcmRpbmcgdG8gdGhlIHNwZWM6ICJUaGUgY2xlYXJEYXRhKCkgbWV0aG9kCisgICAgLy8gZG9l
cyBub3QgYWZmZWN0IHdoZXRoZXIgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcs
IHNvIHRoZSB0eXBlcworICAgIC8vIGF0dHJpYnV0ZSdzIGxpc3QgbWlnaHQgc3RpbGwgbm90IGJl
IGVtcHR5IGFmdGVyIGNhbGxpbmcgY2xlYXJEYXRhKCkgKGl0IHdvdWxkIAorICAgIC8vIHN0aWxs
IGNvbnRhaW4gdGhlICJGaWxlcyIgc3RyaW5nIGlmIGFueSBmaWxlcyB3ZXJlIGluY2x1ZGVkIGlu
IHRoZSBkcmFnKS4iCisgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygp
OworCisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJk
KTsKK30KKworU3RyaW5nIENsaXBib2FyZEd0azo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGVT
dHJpbmcpIGNvbnN0Cit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8
ICFtX2RhdGFPYmplY3QpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChtX2Ns
aXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworCisgICAgQ2xpcGJvYXJk
RGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVT
dHJpbmcpOworICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCkKKyAgICAg
ICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJpTGlzdCgpOworICAgIGlmICh0eXBlID09IENsaXBi
b2FyZERhdGFUeXBlVVJMKQorICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmwoKTsKKyAg
ICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCkKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+bWFya3VwKCk7CisgICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVU
ZXh0KQorICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50ZXh0KCk7CisKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkR3RrOjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7CisgICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RUeXBl
RnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOworICAgIGlmICh0eXBlID09IENsaXBi
b2FyZERhdGFUeXBlVVJJTGlzdCB8fCB0eXBlID09IENsaXBib2FyZERhdGFUeXBlVVJMKSB7Cisg
ICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VVJJTGlzdChkYXRhKTsKKyAgICAgICAgc3VjY2VzcyA9
IHRydWU7CisgICAgfSBlbHNlIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlTWFya3VwKSB7
CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGRhdGEpOworICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0KSB7
CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChkYXRhKTsKKyAgICAgICAgc3VjY2VzcyA9
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK0xpc3RIYXNoU2V0PFN0
cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0Cit7CisgICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUp
CisgICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisKKyAgICBpZiAobV9jbGlw
Ym9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKKworICAgIExpc3RIYXNoU2V0
PFN0cmluZz4gdHlwZXM7CisgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAg
ICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICB0eXBlcy5hZGQoIlRleHQiKTsK
KyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7CisgICAgfQorCisgICAgaWYgKG1fZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpCisgICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7CisKKyAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKKyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0
L3VyaS1saXN0Iik7CisgICAgICAgIHR5cGVzLmFkZCgiVVJMIik7CisgICAgfQorCisgICAgaWYg
KG1fZGF0YU9iamVjdC0+aGFzRmlsZW5hbWVzKCkpCisgICAgICAgIHR5cGVzLmFkZCgiRmlsZXMi
KTsKKworICAgIHJldHVybiB0eXBlczsKK30KKworUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJv
YXJkR3RrOjpmaWxlcygpIGNvbnN0Cit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJl
YWRhYmxlKQorICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOworCisgICAgaWYgKG1f
Y2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CisKKyAgICBSZWZQdHI8
RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOworICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKQorICAgICAgICBmaWxl
TGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXNbaV0sIEZpbGU6OkFsbENvbnRlbnRU
eXBlcykpOworICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQ2xpcGJv
YXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
bG9jYXRpb24pCit7CisgICAgc2V0RHJhZ0ltYWdlKGltYWdlLCAwLCBsb2NhdGlvbik7Cit9CisK
K3ZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqIGVsZW1lbnQsIGNv
bnN0IEludFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBzZXREcmFnSW1hZ2UoMCwgZWxlbWVudCwg
bG9jYXRpb24pOworfQorCit2b2lkIENsaXBib2FyZEd0azo6c2V0RHJhZ0ltYWdlKENhY2hlZElt
YWdlKiBpbWFnZSwgTm9kZSogZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQorewor
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRJbWFnZVdyaXRhYmxlICYmIHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kcmFnSW1h
Z2UpCisgICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgbV9kcmFn
SW1hZ2UgPSBpbWFnZTsKKyAgICBpZiAobV9kcmFnSW1hZ2UpCisgICAgICAgIG1fZHJhZ0ltYWdl
LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICBtX2RyYWdMb2MgPSBsb2NhdGlvbjsKKyAgICBtX2Ry
YWdJbWFnZUVsZW1lbnQgPSBlbGVtZW50OworfQorCitEcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkR3Rr
OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdAoreworICAgIGxvY2F0
aW9uID0gbV9kcmFnTG9jOworCisgICAgaWYgKG1fZHJhZ0ltYWdlKQorICAgICAgICByZXR1cm4g
Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKG1fZHJhZ0ltYWdlLT5pbWFnZSgpKTsKKyAgICBpZiAo
bV9kcmFnSW1hZ2VFbGVtZW50ICYmIG1fZnJhbWUpCisgICAgICAgIHJldHVybiBtX2ZyYW1lLT5u
b2RlSW1hZ2UobV9kcmFnSW1hZ2VFbGVtZW50LmdldCgpKTsKKworICAgIHJldHVybiAwOyAvLyBX
ZSBkbyBub3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgZHJhZyBpbWFnZSwg
dXNlIHRoZSBkZWZhdWx0IGljb24uCit9CisKK3N0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVk
SW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIHB1bGwgQ2FjaGVk
SW1hZ2UgZnJvbSBlbGVtZW50CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIgfHwg
IXJlbmRlcmVyLT5pc0ltYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVySW1h
Z2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcik7CisgICAgaWYg
KGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JPY2N1
cnJlZCgpKQorICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CisKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKKyAg
ICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5v
ZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CisKKyAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBnZXRD
YWNoZWRJbWFnZShlbGVtZW50KTsKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNMb2FkZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFk
b3B0R1JlZihpbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+Z2V0
R2RrUGl4YnVmKCkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2RhdGFPYmplY3QtPnNldEltYWdlKHBpeGJ1Zi5nZXQoKSk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJk
R3RrOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1l
KikKK3sKKyAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKKyAgICBpZiAobV9j
bGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVs
cGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworfQorCit2b2lkIENs
aXBib2FyZEd0azo6d3JpdGVSYW5nZShSYW5nZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBBU1NFUlQocmFuZ2UpOworCisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0
b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0
ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVO
b25Mb2NhbFVSTHMpKTsKKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50
cyhtX2NsaXBib2FyZCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjp3cml0ZVBsYWluVGV4dChj
b25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHRleHQpOwor
CisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
K30KKworYm9vbCBDbGlwYm9hcmRHdGs6Omhhc0RhdGEoKQoreworICAgIGlmIChtX2NsaXBib2Fy
ZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworCisgICAgcmV0dXJuIG1fZGF0YU9i
amVjdC0+aGFzVGV4dCgpIHx8IG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkKKyAgICAgICAgfHwg
bV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNJbWFnZSgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjY2MmZiNWJm
MGYwMDk4YTM1ZjE0NDJlOWI2MjRlM2Y0OTgwMmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENsaXBib2FyZEd0a19oCisjZGVmaW5lIENsaXBib2FyZEd0a19oCisKKyNp
bmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2lu
Y2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2Fj
aGVkSW1hZ2U7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhc3RlYm9hcmRIZWxwZXI7CisKKy8vIFN0
YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNv
cHkvcGFzdGUKKy8vIENyZWF0ZWQgZnJvbSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQg
YnkgdGhlIGRvbQorY2xhc3MgQ2xpcGJvYXJkR3RrIDogcHVibGljIENsaXBib2FyZCwgcHVibGlj
IENhY2hlZEltYWdlQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRHdGsocG9saWN5
LCBjbGlwYm9hcmQsIGZyYW1lKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xp
cGJvYXJkR3RrPiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgUGFzc1JlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUs
IEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJv
YXJkR3RrKHBvbGljeSwgZGF0YU9iamVjdCwgY2xpcGJvYXJkVHlwZSwgZnJhbWUpKTsKKyAgICB9
CisgICAgdmlydHVhbCB+Q2xpcGJvYXJkR3RrKCk7CisKKyAgICB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsZWFyQWxsRGF0YSgpOworICAgIFN0cmluZyBnZXREYXRh
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKKworICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygp
IGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsK
KworICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsK
KyAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBvaW50Jik7Cisg
ICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQm
KTsKKworICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIHdy
aXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOworCisgICAgdmlydHVhbCBib29sIGhhc0RhdGEo
KTsKKworICAgIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCgpIHsgcmV0dXJu
IG1fZGF0YU9iamVjdDsgfQorICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKCkgeyByZXR1cm4g
bV9jbGlwYm9hcmQ7IH0KKworcHJpdmF0ZToKKyAgICBDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LCBHdGtDbGlwYm9hcmQqLCBGcmFtZSopOworICAgIENsaXBib2FyZEd0ayhDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3ksIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4sIENsaXBib2FyZFR5
cGUsIEZyYW1lKik7CisKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gbV9kYXRhT2JqZWN0Owor
ICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwor
ICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRVdGlsaXRpZXNHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGls
aXRpZXNHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4NGUzN2JiOTZhODM1MWUzOTFmNTI2YzlkYjI3OGYx
ODNmOTAyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZFV0aWxpdGllc0d0ay5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitHZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdB
Y3Rpb25zKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBHZGtEcmFnQWN0aW9uIGdk
a0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KDApOworICAgIGlmIChjb3JlQWN0
aW9uID09IERyYWdPcGVyYXRpb25Ob25lKQorICAgICAgICByZXR1cm4gZ2RrQWN0aW9uOworCisg
ICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAgICAgZ2RrQWN0aW9u
ID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9DT1BZIHwgZ2RrQWN0aW9u
KTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Nb3ZlKQorICAgICAgICBnZGtB
Y3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX01PVkUgfCBnZGtB
Y3Rpb24pOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkxpbmspCisgICAgICAg
IGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTElOSyB8
IGdka0FjdGlvbik7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uUHJpdmF0ZSkK
KyAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElP
Tl9QUklWQVRFIHwgZ2RrQWN0aW9uKTsKKworICAgIHJldHVybiBnZGtBY3Rpb247Cit9CisKK0dk
a0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0
aW9uIGNvcmVBY3Rpb24pCit7CisgICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJhdGlvbkV2
ZXJ5IHx8IGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAgICAgcmV0dXJuIEdE
S19BQ1RJT05fQ09QWTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Nb3ZlKQor
ICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9NT1ZFOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJh
Z09wZXJhdGlvbkxpbmspCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX0xJTks7CisgICAgaWYg
KGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIEdES19B
Q1RJT05fUFJJVkFURTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7
Cit9CisKK0RyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFn
QWN0aW9uIGdka0FjdGlvbikKK3sKKyAgICAvLyBXZSBoYXZlIG5vIGdvb2Qgd2F5IHRvIGRldGVj
dCBEcmFnT3BlcmF0aW9uRXZlcnkgb3RoZXIgdGhhbgorICAgIC8vIHRvIHVzZSBpdCB3aGVuIGFs
bCBhcHBsaWNhYmxlIGZsYWdzIGFyZSBvbi4KKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElP
Tl9DT1BZICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTU9WRQorICAgICAgICAmJiBnZGtBY3Rp
b24gJiBHREtfQUNUSU9OX0xJTksgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9QUklWQVRFKQor
ICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkV2ZXJ5OworCisgICAgdW5zaWduZWQgYWN0aW9u
ID0gRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09Q
WSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Db3B5OworICAgIGlmIChnZGtBY3Rp
b24gJiBHREtfQUNUSU9OX01PVkUpCisgICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTW92
ZTsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LKQorICAgICAgICBhY3Rpb24g
fD0gRHJhZ09wZXJhdGlvbkxpbms7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJ
VkFURSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Qcml2YXRlOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihhY3Rpb24pOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmY2MzQ2OWUy
YjhkZTQ1YzAxNzc3NWYwYjQyOTJiZDZiYWM0NzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApAQCAtMCwwICsxLDMzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAorI2RlZmluZSBD
bGlwYm9hcmRVdGlsaXRpZXNHdGtfaAorCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2RrRHJhZ0FjdGlvbiBk
cmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsKK0dka0RyYWdBY3Rp
b24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9uKTsKK0Ry
YWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFnQWN0aW9uKTsK
KworfQorCisjZW5kaWYgLy8gQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NWYyM2JiNTk2ZThjMmVhZWIz
Mjk3MTBkZjQ4ZTQ3NGM3ZWM0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGlvblJlc3Vs
dHNfaAorI2RlZmluZSBDb21wb3NpdGlvblJlc3VsdHNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENvbXBvc2l0aW9u
UmVzdWx0cyB7CisgICAgQ29tcG9zaXRpb25SZXN1bHRzKCkKKyAgICAgICAgOiBhc3NvY2lhdGVk
V2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAg
Q29tcG9zaXRpb25SZXN1bHRzKFN0cmluZyBzaW1wbGVTdHJpbmcpCisgICAgICAgIDogc2ltcGxl
U3RyaW5nKHNpbXBsZVN0cmluZykKKyAgICAgICAgLCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21w
b3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgZW51bSBSZXN1bHRzSW5k
aWNhdG9yIHsgV2lsbFNlbmRDb21wb3NpdGlvblJlc3VsdHNTb29uIH07CisgICAgQ29tcG9zaXRp
b25SZXN1bHRzKFJlc3VsdHNJbmRpY2F0b3IpCisgICAgICAgIDogYXNzb2NpYXRlZFdpdGhQZW5k
aW5nQ29tcG9zaXRpb25VcGRhdGUodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjb21w
b3NpdGlvblVwZGF0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc29jaWF0ZWRX
aXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOworICAgIH0KKworICAgIC8vIFNvbWUgc2ltcGxl
IGlucHV0IG1ldGhvZHMgcmV0dXJuIGEgc3RyaW5nIGZvciBhbGwga2V5Ym9hcmQgZXZlbnRzLiBU
aGlzCisgICAgLy8gdmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0aGUga2V5Y29kZS4KKyAgICBTdHJpbmcgc2ltcGxlU3RyaW5nOworCisgICAg
Ym9vbCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKK307CisKK30KKwor
I2VuZGlmIC8vIENvbXBvc2l0aW9uUmVzdWx0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1l
bnVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjMDAyYzRkOWZkNzgyZjkyNzA0YzQ5NzZjNDM3ZWExZjll
NWRkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShD
T05URVhUX01FTlVTKQorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKworI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRleHRNZW51
OjpDb250ZXh0TWVudSgpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlUo
Z3RrX21lbnVfbmV3KCkpOworfQorCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbiht
ZW51KQoreworfQorCitDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKK3sKKyAgICBpZiAobV9w
bGF0Zm9ybURlc2NyaXB0aW9uKQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdF
VChtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKK30KKwordm9pZCBDb250ZXh0TWVudTo6YXBwZW5k
SXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbik7CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZvcm1JdGVtID0gR1RLX1dJ
REdFVChpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAgIEFTU0VSVChwbGF0
Zm9ybUl0ZW0pOworCisgICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRf
cGFyZW50KHBsYXRmb3JtSXRlbS5nZXQoKSkpCisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3Zl
KEdUS19DT05UQUlORVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgpKTsKKworICAgIGd0a19t
ZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBw
bGF0Zm9ybUl0ZW0uZ2V0KCkpOworICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybUl0ZW0uZ2V0
KCkpOworfQorCit2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCit7CisgICAgQVNTRVJUKG1lbnUpOworICAgIGlmICht
X3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lE
R0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworCisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9u
ID0gbWVudTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRm
b3JtRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRp
b247Cit9CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpCit7CisgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9u
ID0gMDsKKworICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKwordW5zaWduZWQgQ29udGV4dE1l
bnU6Oml0ZW1Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlv
bik7CisKKyAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGls
ZHJlbihHVEtfQ09OVEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpKTsKKyAgICByZXR1cm4g
Z19saXN0X2xlbmd0aChjaGlsZHJlbi5nZXQoKSk7Cit9CisKK1ZlY3RvcjxDb250ZXh0TWVudUl0
ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBt
ZW51KQoreworICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJdGVtVmVjdG9yOworCisg
ICAgR093blB0cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RL
X0NPTlRBSU5FUihtZW51KSkpOworICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNo
aWxkcmVuLmdldCgpKTsKKyAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNv
dW50KTsKKworICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5nZXQoKTsgaXRlbTsgaXRl
bSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gc3Rh
dGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIGlmICghR1RLX0lTX01F
TlVfSVRFTSh3aWRnZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1lbnVJdGVt
VmVjdG9yLmFwcGVuZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOworICAgIH0KKworICAgIHJldHVy
biBtZW51SXRlbVZlY3RvcjsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKK3sK
KyAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEd0
a1dpZGdldCogcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51SXRlbXNbaV0ucmVsZWFz
ZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChH
VEtfTUVOVV9TSEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKKyAgICAgICAgZ3RrX3dpZGdldF9z
aG93KHBsYXRmb3JtSXRlbSk7CisgICAgfQorICAgIHJldHVybiBtZW51OworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4
dE1lbnVJdGVtR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2M5MWNlZmQ3MDYzYzBhYWNiYmFlNjExZTFj
ZWM5NDAzOWI2MDYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Db250
ZXh0TWVudUl0ZW1HdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5V
UykKKworI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1l
bnUuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04gIndlYmtp
dC1jb250ZXh0LW1lbnUiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgQ29udGV4dE1lbnVBY3Rp
b24mIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1l
ZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19DT1BZOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFn
ZUluTmV3V2luZG93OgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3c6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoK
KyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRJbWFnZVRvRGlzazoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TQVZFOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JB
Q0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NVVDsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X1BBU1RFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX0RFTEVURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFs
bDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19OTzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfT0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoK
KyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGlnaHQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
RklORDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19GSU5EOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhE
ZWZhdWx0QXBwbGljYXRpb246CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVBERlpvb21JbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19a
T09NX0lOOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19aT09NX09VVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9T
aXplOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklUOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FS
RDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19HT19CQUNLOworICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX09QRU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgor
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnRm9udE1lbnU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7
CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOgor
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdJdGFsaWM6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOworICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVS
TElORTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfU0VMRUNUX0NPTE9SOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1l
ZGlhTG9vcDoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJv
YXJkOgorICAgICAgICAvLyBObyBpY29uIGZvciB0aGlzLgorICAgICAgICByZXR1cm4gMDsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgorICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX0ZVTExTQ1JFRU47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCitzdGF0aWMgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGNyZWF0
ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENv
bnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVk
LCBib29sIGNoZWNrZWQpCit7CisgICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKKyAgICAg
ICAgcmV0dXJuIEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOwor
CisgICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigiY29udGV4dC1t
ZW51LWFjdGlvbi0lZCIsIGFjdGlvbikpOworICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBwbGF0Zm9y
bUFjdGlvbjsKKworICAgIGlmICh0eXBlID09IENoZWNrYWJsZUFjdGlvblR5cGUpIHsKKyAgICAg
ICAgcGxhdGZvcm1BY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlv
bl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJ
REZyb21Db250ZXh0TWVudUFjdGlvbihhY3Rpb24pKSkpOworICAgICAgICBndGtfdG9nZ2xlX2Fj
dGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9uLmdldCgpKSwg
Y2hlY2tlZCk7CisgICAgfSBlbHNlCisgICAgICAgIHBsYXRmb3JtQWN0aW9uID0gYWRvcHRHUmVm
KGd0a19hY3Rpb25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAs
IGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpOworICAgIGd0a19hY3Rp
b25fc2V0X3NlbnNpdGl2ZShwbGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5hYmxlZCk7CisKKyAgICBH
dGtNZW51SXRlbSogaXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9p
dGVtKHBsYXRmb3JtQWN0aW9uLmdldCgpKSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoaXRlbSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0
aW9uKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLy8gRXh0cmFjdCB0aGUgQWN0aW9uVHlw
ZSBmcm9tIHRoZSBtZW51IGl0ZW0KK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBs
YXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0
aW9uKGl0ZW0pCit7CisgICAgLy8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJlbHMgaW4gY29udGV4dCBt
ZW51IGl0ZW1zLgorICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgaWYg
KCFhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3RrX2FjdGlvbl9nZXRfYWNj
ZWxfcGF0aChhY3Rpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIGNoaWxk
ID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihpdGVtKSk7CisgICAgaWYgKEdUS19JU19BQ0NF
TF9MQUJFTChjaGlsZCkpCisgICAgICAgIGd0a19hY2NlbF9sYWJlbF9zZXRfYWNjZWxfY2xvc3Vy
ZShHVEtfQUNDRUxfTEFCRUwoY2hpbGQpLCAwKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250
ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCit7CisgICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfbWVudV9pdGVtX25ldygpKTsKKyAgICBpZiAoc3Vi
TWVudSkKKyAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKK30KKworQ29udGV4dE1lbnVJdGVt
OjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFj
dGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQor
eworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNj
cmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7CisgICAgaWYgKHN1Yk1l
bnUpCisgICAgICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6
Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rp
b24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tl
ZCkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24odHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7Cit9CisK
K0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51QWN0aW9uIGFjdGlv
biwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQsIFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCit7CisgICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKFN1Ym1lbnVUeXBlLCBh
Y3Rpb24sIHRpdGxlLCBlbmFibGVkLCBjaGVja2VkKTsKKyAgICBzZXRTdWJNZW51KHN1Yk1lbnVJ
dGVtcyk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCit7Cit9CisK
K1BsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0
Zm9ybURlc2NyaXB0aW9uKCkKK3sKKyAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gcGxh
dGZvcm1EZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSAwOworICAgIHJldHVybiBwbGF0Zm9ybURlc2NyaXB0aW9uOworfQorCitD
b250ZXh0TWVudUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAg
aWYgKEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisg
ICAgICAgIHJldHVybiBTZXBhcmF0b3JUeXBlOworICAgIGlmIChHVEtfSVNfQ0hFQ0tfTUVOVV9J
VEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBDaGVja2FibGVBY3Rp
b25UeXBlOworICAgIGlmIChndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNj
cmlwdGlvbikpCisgICAgICAgIHJldHVybiBTdWJtZW51VHlwZTsKKyAgICByZXR1cm4gQWN0aW9u
VHlwZTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJdGVt
VHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCisgICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0
ZW1fbmV3KCkpOworfQorCitDb250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPihH
UE9JTlRFUl9UT19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04pKSk7Cit9CisKK3ZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Cit9CisKK1N0cmlu
ZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICBHdGtBY3Rpb24qIGFjdGlv
biA9IGd0a0FjdGlvbigpOworICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZyb21VVEY4KGd0
a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2Fj
dGlvbl9zZXRfbGFiZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKK30KKworUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25z
dAoreworICAgIEd0a1dpZGdldCogc3ViTWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUo
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gc3ViTWVudSA/IEdUS19NRU5VKHN1
Yk1lbnUpIDogMDsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4
dE1lbnUqIG1lbnUpCit7CisgICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3BsYXRmb3Jt
RGVzY3JpcHRpb24sIEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24o
KSkpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4
dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQoreworICAgIENvbnRleHRNZW51IG1lbnUocGxhdGZv
cm1NZW51RGVzY3JpcHRpb24oc3ViTWVudUl0ZW1zKSk7CisgICAgc2V0U3ViTWVudSgmbWVudSk7
Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2sp
Cit7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9u
ICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIGd0a190b2dnbGVfYWN0
aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwgc2hvdWxkQ2hlY2spOwor
fQorCitib29sIENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0Cit7CisgICAgR3RrQWN0
aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dH
TEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRf
YWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAoreworICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgcmV0dXJuIGFjdGlvbiA/IGd0a19hY3Rpb25f
Z2V0X3NlbnNpdGl2ZShhY3Rpb24pIDogZmFsc2U7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVt
OjpzZXRFbmFibGVkKGJvb2wgc2hvdWxkRW5hYmxlKQoreworICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRf
c2Vuc2l0aXZlKGFjdGlvbiwgc2hvdWxkRW5hYmxlKTsKK30KKworR3RrQWN0aW9uKiBDb250ZXh0
TWVudUl0ZW06Omd0a0FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGd0a19hY3RpdmF0YWJs
ZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlv
bikpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvQ3Vyc29yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTVjZTZjY2VjODRiZmVkNTQxM2M3MjUxMjA0
MDVjNmUwMDFkNzI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJz
b3JHdGsuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
aHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAxMiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vyc29yR3RrLmgiCisKKyNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5o
IgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlTmFtZWRDdXJzb3Io
Q3VzdG9tQ3Vyc29yVHlwZSBjdXJzb3JUeXBlKQoreworICAgIEN1c3RvbUN1cnNvciBjdXJzb3Ig
PSBDdXN0b21DdXJzb3JzW2N1cnNvclR5cGVdOworICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjID0g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fbmFtZShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpLCBjdXJzb3IubmFtZSkpOworICAgIGlmIChjKQorICAgICAgICByZXR1cm4gYzsKKworICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNvdXJjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGN1cnNvci5i
aXRzKSwgQ0FJUk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBtYXNrID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY3Vyc29yLm1hc2tfYml0cyksIENBSVJPX0ZP
Uk1BVF9BMSwgMzIsIDMyLCA0KSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BMSwg
MzIsIDMyKSk7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQo
KSwgc291cmNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IuZ2V0KCks
IG1hc2suZ2V0KCksIDAsIDApOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFk
b3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZS5nZXQoKSwgMCwgMCwg
MzIsIDMyKSk7CisgICAgcmV0dXJuIGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1
ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYuZ2V0KCksIGN1cnNvci5ob3RfeCwg
Y3Vyc29yLmhvdF95KSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlQ3Vz
dG9tQ3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCit7CisgICAg
SW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1hZ2UsIGhvdFNw
b3QpOworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdl
dEdka1BpeGJ1ZigpKTsKKyAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21f
cGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwgZWZmZWN0aXZl
SG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgpKSk7Cit9CisKK3ZvaWQgQ3Vyc29yOjpl
bnN1cmVQbGF0Zm9ybUN1cnNvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1DdXJzb3Ig
fHwgbV90eXBlID09IEN1cnNvcjo6UG9pbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEN1cnNvcjo6UG9pbnRlcjoKKyAgICAgICAgLy8gQSBu
dWxsIEdka0N1cnNvciBpcyB0aGUgZGVmYXVsdCBjdXJzb3IgZm9yIHRoZSB3aW5kb3cuCisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNv
cjo6Q3Jvc3M6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXcoR0RLX0NST1NTKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpIYW5k
OgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdE
S19IQU5EMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1hURVJN
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpXYWl0OgorICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19XQVRDSCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6SGVscDoKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJST1cpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok1vdmU6CisgICAgY2FzZSBDdXJzb3I6Ok1p
ZGRsZVBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXcoR0RLX0ZMRVVSKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpF
YXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUklHSFRfU0lERSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgY2FzZSBD
dXJzb3I6Ok5vcnRoUGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1NJREUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDdXJzb3I6Ok5vcnRoRWFzdFJlc2l6ZToKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFu
bmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfVE9QX1JJR0hUX0NPUk5FUikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNv
cjo6Tm9ydGhXZXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nOgor
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19U
T1BfTEVGVF9DT1JORVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRo
UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9TSURFKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemU6CisgICAgY2Fz
ZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBh
ZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9SSUdIVF9DT1JORVIpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAgICBjYXNlIEN1
cnNvcjo6U291dGhXZXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0
R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX0xFRlRfQ09STkVSKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgorICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoU291dGhSZXNpemU6CisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9URUUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgorICAgIGNhc2Ug
Q3Vyc29yOjpXZXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ3Vyc29yOjpOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0
R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0laSU5HKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NCX0hfRE9VQkxFX0FSUk9XKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NCX1ZfRE9VQkxFX0FSUk9XKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpWZXJ0aWNhbFRleHQ6CisgICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JWZXJ0aWNhbFRl
eHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q2VsbDoKKyAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUExVUykpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q29udGV4dE1lbnU6CisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JDb250ZXh0TWVudSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpBbGlhczoKKyAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckFsaWFzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlByb2dyZXNzOgorICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3MpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9Ecm9wOgorICAgIGNhc2UgQ3Vyc29yOjpOb3RB
bGxvd2VkOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3Vz
dG9tQ3Vyc29yTm9Ecm9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkNvcHk6
CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJz
b3JDb3B5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JOb25lKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Olpvb21JbjoKKyAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclpvb21Jbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yWm9vbU91dCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpHcmFiOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ3Vyc29yOjpHcmFiYmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNy
ZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckdyYWJiaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDdXJzb3I6OkN1c3RvbToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0
ZUN1c3RvbUN1cnNvcihtX2ltYWdlLmdldCgpLCBtX2hvdFNwb3QpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBt
X3R5cGUob3RoZXIubV90eXBlKQorICAgICwgbV9pbWFnZShvdGhlci5tX2ltYWdlKQorICAgICwg
bV9ob3RTcG90KG90aGVyLm1faG90U3BvdCkKKyAgICAsIG1fcGxhdGZvcm1DdXJzb3Iob3RoZXIu
bV9wbGF0Zm9ybUN1cnNvcikKK3sKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25z
dCBDdXJzb3ImIG90aGVyKQoreworICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICBtX2hvdFNwb3QgPSBvdGhlci5tX2hvdFNwb3Q7Cisg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCitDdXJzb3I6On5DdXJzb3IoKQoreworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJz
b3JHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZjQ2NGZjZTY1ZDdhMzM1MjRjNDhkNThjMGJlM2RhMDcwMDZj
NWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApA
QCAtMCwwICsxLDM4MyBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
VmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3Jn
IGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBUaW0gQ29wcGVyZmllbGQuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0
aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAxCisgKiB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAg
IFRpbSBDb3BwZXJmaWVsZCA8dGltZWNvcEBuZXR3b3JrLmVtYWlsLm5lLmpwPgorICogICBDaHJp
c3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgorICogQWx0ZXJuYXRpdmVs
eSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMg
b2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9y
IGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBj
YXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUg
aW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRo
ZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVz
ZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBp
bmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92
ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lv
bnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUK
KyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEws
IHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioq
KiogKi8KKworI2lmbmRlZiBDdXJzb3JHdGtfaAorI2RlZmluZSBDdXJzb3JHdGtfaAorCisjaW5j
bHVkZSAiQ3Vyc29yLmgiCisKKy8qCisgVGhlc2UgY3Vyc29ycyBhcmUgY29waWVkIGZyb20gTW96
aWxsYSBjb2RlOgorICBodHRwOi8vbHhyLm1vemlsbGEub3JnL21vemlsbGExLjgvc291cmNlL3dp
ZGdldC9zcmMvZ3RrMi9uc0d0a0N1cnNvcnMuaAorKi8KKworLyogTU9aX0NVUlNPUl9WRVJUSUNB
TF9URVhUICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4dF9i
aXRzW10gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwg
MHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwKKyAgICAweDA2LCAweDYwLCAweDAwLCAweDAw
LCAweGZjLCAweDNmLCAweDAwLCAweDAwLCAweDA2LCAweDYwLCAweDAwLCAweDAwLAorICAgIDB4
MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel92ZXJ0aWNhbF90ZXh0X21hc2tfYml0c1tdID0geworICAgIDB4MDcsIDB4
ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZjAsIDB4MDAs
IDB4MDAsCisgICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgw
MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgICAweDBmLCAweGYwLCAweDAwLCAweDAwLCAw
eDA3LCAweGUwLCAweDAwLCAweDAwLCAweDA3LCAweGUwLCAweDAwLCAweDAwLAorICAgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0NPTlRFWFRfTUVOVSAqLworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgbW96X21lbnVfYml0c1tdID0geworICAgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAs
CisgICAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgz
YywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAw
eDAwLCAweDAwLCAweDAwLCAweGZjLCAweGZkLCAweDAwLCAweDAwLAorICAgIDB4ZmMsIDB4ZmYs
IDB4MDAsIDB4MDAsIDB4N2MsIDB4ODQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZmMsIDB4MDAsIDB4
MDAsCisgICAgMHhjNCwgMHg4NCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwg
MHg4MCwgMHg4NSwgMHgwMCwgMHgwMCwKKyAgICAweDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbWVudV9tYXNrX2JpdHNb
XSA9IHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAw
LCAweDBlLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
M2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHhmZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZiwgMHgw
MSwgMHgwMCwKKyAgICAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAw
eDAwLCAweGZlLCAweGZlLCAweDAxLCAweDAwLAorICAgIDB4ZWUsIDB4ZmYsIDB4MDEsIDB4MDAs
IDB4ZTQsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDEsIDB4MDAsCisgICAgMHhj
MCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworLyogTU9aX0NVUlNPUl9DT1BZICov
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfY29weV9iaXRzW10gPSB7CisgICAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAw
LCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4N2MsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAg
MHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHg3YywgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgz
MCwgMHgwMCwgMHgwMCwKKyAgICAweGM0LCAweGZjLCAweDAwLCAweDAwLCAweGMwLCAweGZjLCAw
eDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLAorICAgIDB4ODAsIDB4MzEsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
ICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5
X21hc2tfYml0c1tdID0geworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgxZSwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZl
LCAweDAzLCAweDAwLCAweDAwLAorICAgIDB4ZmUsIDB4MzcsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4
N2IsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmMsIDB4MDAsIDB4MDAsCisgICAgMHhlZSwgMHhmZiwg
MHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgw
MCwKKyAgICAweGMwLCAweDdiLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VS
U09SX0FMSUFTICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfYWxpYXNfYml0c1td
ID0geworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgx
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDdjLCAw
eDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAw
LCAweDAwLAorICAgIDB4ZmMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ZjAsIDB4MDAsIDB4
MDAsIDB4NmMsIDB4ZTAsIDB4MDAsIDB4MDAsCisgICAgMHhjNCwgMHhmMCwgMHgwMCwgMHgwMCwg
MHhjMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOSwgMHgwMCwgMHgwMCwKKyAgICAweDgw
LCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBtb3pfYWxpYXNfbWFza19iaXRzW10gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAw
eDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAw
LCAweDAwLCAweDAwLAorICAgIDB4ZmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDEsIDB4
MDAsIDB4MDAsIDB4ZmUsIDB4MDMsIDB4MDAsIDB4MDAsCisgICAgMHhmZSwgMHhmNywgMHgwMCwg
MHgwMCwgMHhmZSwgMHhmYiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwMSwgMHgwMCwKKyAg
ICAweGVlLCAweGY5LCAweDAxLCAweDAwLCAweGU0LCAweGY5LCAweDAxLCAweDAwLCAweGMwLCAw
eGJmLCAweDAwLCAweDAwLAorICAgIDB4YzAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTks
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07
CisKKy8qIE1PWl9DVVJTT1JfWk9PTV9JTiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
bW96X3pvb21faW5fYml0c1tdID0geworICAgIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMs
IDB4MDMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsCisgICAgMHg2MiwgMHgw
NCwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwOSwgMHgwMCwg
MHgwMCwKKyAgICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAw
LCAweDYyLCAweDA0LCAweDAwLCAweDAwLAorICAgIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4
MGMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwg
MHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgw
MCwgMHgwMCwKKyAgICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9pbl9tYXNrX2JpdHNbXSA9IHsKKyAgICAw
eGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweGZlLCAweDA3
LCAweDAwLCAweDAwLAorICAgIDB4ZmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MGYsIDB4
MDAsIDB4MDAsIDB4ZmYsIDB4MGYsIDB4MDAsIDB4MDAsCisgICAgMHhmZiwgMHgwZiwgMHgwMCwg
MHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAg
ICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAw
eDFjLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHg0MCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAgfTsKKworLyogTU9aX0NVUlNPUl9aT09NX09VVCAqLworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0X2JpdHNbXSA9IHsKKyAgICAweGYwLCAw
eDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAw
LCAweDAwLAorICAgIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDAsIDB4
MDAsIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsCisgICAgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwg
MHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwKKyAgICAweDAy
LCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAw
eDAwLCAweDAwLAorICAgIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHg0MCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0
X21hc2tfYml0c1tdID0geworICAgIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDMs
IDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhmZSwgMHgwNywgMHgw
MCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwK
KyAgICAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZl
LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4ZmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4
MGYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgzOCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgw
MCwKKyAgICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VS
U09SX05PVF9BTExPV0VEICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm90X2Fs
bG93ZWRfYml0c1tdID0geworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MWYs
IDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCisgICAgMHhmMCwgMHhmMCwgMHgw
MCwgMHgwMCwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg4MCwgMHgwMywgMHgwMCwK
KyAgICAweGVjLCAweDAwLCAweDAzLCAweDAwLCAweGNlLCAweDAxLCAweDA3LCAweDAwLCAweDg2
LCAweDAzLCAweDA2LCAweDAwLAorICAgIDB4MDYsIDB4MDcsIDB4MDYsIDB4MDAsIDB4MDYsIDB4
MGUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MWMsIDB4MDYsIDB4MDAsCisgICAgMHgwZSwgMHgzOCwg
MHgwNywgMHgwMCwgMHgwYywgMHg3MCwgMHgwMywgMHgwMCwgMHgxYywgMHhlMCwgMHgwMywgMHgw
MCwKKyAgICAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAw
eGUwLCAweDdmLCAweDAwLCAweDAwLAorICAgIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfbm90X2FsbG93ZWRfbWFza19iaXRzW10gPSB7CisgICAgMHg4
MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwg
MHgwMCwgMHgwMCwKKyAgICAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGZjLCAweGYwLCAweDAz
LCAweDAwLCAweGZlLCAweGMwLCAweDA3LCAweDAwLAorICAgIDB4ZmUsIDB4ODEsIDB4MDcsIDB4
MDAsIDB4ZmYsIDB4ODMsIDB4MGYsIDB4MDAsIDB4Y2YsIDB4MDcsIDB4MGYsIDB4MDAsCisgICAg
MHg4ZiwgMHgwZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgxZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgz
ZSwgMHgwZiwgMHgwMCwKKyAgICAweDFmLCAweGZjLCAweDBmLCAweDAwLCAweDFlLCAweGY4LCAw
eDA3LCAweDAwLCAweDNlLCAweGYwLCAweDA3LCAweDAwLAorICAgIDB4ZmMsIDB4ZjAsIDB4MDMs
IDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4MDAsCisg
ICAgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfU1BJTk5JTkcgKi8KK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19iaXRzW10gPSB7CisgICAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAw
LCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCisgICAgMHhmYywg
MHgzYiwgMHgwMCwgMHgwMCwgMHg3YywgMHgzOCwgMHgwMCwgMHgwMCwgMHg2YywgMHg1NCwgMHgw
MCwgMHgwMCwKKyAgICAweGM0LCAweGRjLCAweDAwLCAweDAwLCAweGMwLCAweDQ0LCAweDAwLCAw
eDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLAorICAgIDB4ODAsIDB4MzksIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19t
YXNrX2JpdHNbXSA9IHsKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAw
eDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MWUsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MDAsCisg
ICAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwg
MHgzYiwgMHgwMCwgMHgwMCwKKyAgICAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweGZlLCAweDdm
LCAweDAwLCAweDAwLCAweGZlLCAweGZlLCAweDAwLCAweDAwLAorICAgIDB4ZWUsIDB4ZmYsIDB4
MDEsIDB4MDAsIDB4ZTQsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2YsIDB4MDAsIDB4MDAs
CisgICAgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworLyogTU9aX0NVUlNP
Ul9OT05FICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm9uZV9iaXRzW10gPSB7
CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
IG1vel9ub25lX21hc2tfYml0c1tdID0geworICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
ICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisv
KiBNT1pfQ1VSU09SX0hBTkRfR1JBQiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96
X2hhbmRfZ3JhYl9iaXRzW10gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKyAgICAweDYwLCAweDM5
LCAweDAwLCAweDAwLCAweDkwLCAweDQ5LCAweDAwLCAweDAwLCAweDkwLCAweDQ5LCAweDAxLCAw
eDAwLAorICAgIDB4MjAsIDB4YzksIDB4MDIsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDIsIDB4MDAs
IDB4NTgsIDB4NDAsIDB4MDIsIDB4MDAsCisgICAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0
NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKKyAgICAweDEwLCAw
eDAwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAw
LCAweDAwLAorICAgIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4
MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9oYW5kX2dyYWJfbWFza19iaXRzW10gPSB7CisgICAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgz
ZiwgMHgwMCwgMHgwMCwKKyAgICAweGYwLCAweDdmLCAweDAwLCAweDAwLCAweGY4LCAweGZmLCAw
eDAxLCAweDAwLCAweGY4LCAweGZmLCAweDAzLCAweDAwLAorICAgIDB4ZjAsIDB4ZmYsIDB4MDcs
IDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4ZmMsIDB4ZmYsIDB4MDcsIDB4MDAsCisg
ICAgMHhmZSwgMHhmZiwgMHgwNywgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMywgMHgwMCwgMHhmYywg
MHhmZiwgMHgwMywgMHgwMCwKKyAgICAweGY4LCAweGZmLCAweDAzLCAweDAwLCAweGY4LCAweGZm
LCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAxLCAweDAwLAorICAgIDB4ZTAsIDB4ZmYsIDB4
MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAs
CisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfSEFORF9HUkFCQklORyAqLwor
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdfYml0c1tdID0gewor
ICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweGMwLCAweDM2LCAw
eDAwLCAweDAwLCAweDIwLCAweGM5LCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAxLCAweDAw
LAorICAgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MTAsIDB4MDAsIDB4MDEsIDB4MDAsCisgICAgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwg
MHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKKyAgICAweDQwLCAweDQw
LCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAw
eDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgIHVuc2lnbmVkIGNoYXIg
bW96X2hhbmRfZ3JhYmJpbmdfbWFza19iaXRzW10gPSB7CisgICAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAw
eDM2LCAweDAwLCAweDAwLAorICAgIDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZmYs
IDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4MDAsCisgICAgMHhlMCwgMHhmZiwgMHgw
MywgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwK
KyAgICAweGY4LCAweGZmLCAweDAzLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYw
LCAweGZmLCAweDAxLCAweDAwLAorICAgIDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4
ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2YsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
IH07CisKK2VudW0gQ3VzdG9tQ3Vyc29yVHlwZSB7CisgICAgQ3VzdG9tQ3Vyc29yQ29weSA9IDAs
CisgICAgQ3VzdG9tQ3Vyc29yQWxpYXMsCisgICAgQ3VzdG9tQ3Vyc29yQ29udGV4dE1lbnUsCisg
ICAgQ3VzdG9tQ3Vyc29yWm9vbUluLAorICAgIEN1c3RvbUN1cnNvclpvb21PdXQsCisgICAgQ3Vz
dG9tQ3Vyc29yVmVydGljYWxUZXh0LAorICAgIEN1c3RvbUN1cnNvck5vRHJvcCwKKyAgICBDdXN0
b21DdXJzb3JQcm9ncmVzcywKKyAgICBDdXN0b21DdXJzb3JOb25lLAorICAgIEN1c3RvbUN1cnNv
ckdyYWIsCisgICAgQ3VzdG9tQ3Vyc29yR3JhYmJpbmcsCit9OworCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBiaXRzOwor
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1hc2tfYml0czsKKyAgICBpbnQgaG90X3g7CisgICAg
aW50IGhvdF95OworfSBDdXN0b21DdXJzb3I7CisKKy8vIGNyZWF0ZSBjdXN0b20gcGl4bWFwIGN1
cnNvciBmcm9tIGN1cnNvcnMgaW4gbnNHVEtDdXJzb3JEYXRhLmgKK3N0YXRpYyBjb25zdCBDdXN0
b21DdXJzb3IgQ3VzdG9tQ3Vyc29yc1tdID0geworICAgIHsgImNvcHkiLCBtb3pfY29weV9iaXRz
LCBtb3pfY29weV9tYXNrX2JpdHMsIDIsIDIgfSwKKyAgICB7ICJhbGlhcyIsIG1vel9hbGlhc19i
aXRzLCBtb3pfYWxpYXNfbWFza19iaXRzLCAyLCAyIH0sCisgICAgeyAiY29udGV4dC1tZW51Iiwg
bW96X21lbnVfYml0cywgbW96X21lbnVfbWFza19iaXRzLCAyLCAyIH0sCisgICAgeyAiem9vbS1p
biIsIG1vel96b29tX2luX2JpdHMsIG1vel96b29tX2luX21hc2tfYml0cywgNiwgNiB9LAorICAg
IHsgInpvb20tb3V0IiwgbW96X3pvb21fb3V0X2JpdHMsIG1vel96b29tX291dF9tYXNrX2JpdHMs
IDYsIDYgfSwKKyAgICB7ICJ2ZXJ0aWNhbC10ZXh0IiwgbW96X3ZlcnRpY2FsX3RleHRfYml0cywg
bW96X3ZlcnRpY2FsX3RleHRfbWFza19iaXRzLCA4LCA0IH0sCisgICAgeyAiZG5kLW5vLWRyb3Ai
LCBtb3pfbm90X2FsbG93ZWRfYml0cywgbW96X25vdF9hbGxvd2VkX21hc2tfYml0cywgOSwgIDkg
fSwKKyAgICB7ICJsZWZ0X3B0cl93YXRjaCIsIG1vel9zcGlubmluZ19iaXRzLCBtb3pfc3Bpbm5p
bmdfbWFza19iaXRzLCAyLCAgMn0sCisgICAgeyAibm9uZSIsIG1vel9ub25lX2JpdHMsIG1vel9u
b25lX21hc2tfYml0cywgMCwgMCB9LAorICAgIHsgImdyYWIiLCBtb3pfaGFuZF9ncmFiX2JpdHMs
IG1vel9oYW5kX2dyYWJfbWFza19iaXRzLCAxMCwgMTAgfSwKKyAgICB7ICJncmFiYmluZyIsIG1v
el9oYW5kX2dyYWJiaW5nX2JpdHMsIG1vel9oYW5kX2dyYWJiaW5nX21hc2tfYml0cywgMTAsIDEw
IH0KK307CisKKyNlbmRpZiAvLyBDdXJzb3JHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVj
dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRmYzY2ZTAxNWU1MDIyNjc4OGMyMTQ3NjhhMTViMjkxMzY4
NDNiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnRp
biBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKworI2luY2x1ZGUgIm1hcmt1cC5o
IgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmlu
ZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFj
dGVyID0gMHhBMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgU3BhY2VDaGFyYWN0ZXIgPSAnICc7
CisgICAgc3RyLnJlcGxhY2UoTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VDaGFyYWN0
ZXIpOworfQorCitTdHJpbmcgRGF0YU9iamVjdEd0azo6dGV4dCgpIGNvbnN0Cit7CisgICAgaWYg
KG1fcmFuZ2UpCisgICAgICAgIHJldHVybiBtX3JhbmdlLT50ZXh0KCk7CisgICAgcmV0dXJuIG1f
dGV4dDsKK30KKworU3RyaW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fcmFuZ2UpCisgICAgICAgIHJldHVybiBjcmVhdGVNYXJrdXAobV9yYW5nZS5nZXQoKSwg
MCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpOwor
ICAgIHJldHVybiBtX21hcmt1cDsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRUZXh0KGNv
bnN0IFN0cmluZyYgbmV3VGV4dCkKK3sKKyAgICBtX3JhbmdlID0gMDsKKyAgICBtX3RleHQgPSBu
ZXdUZXh0OworICAgIHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKG1fdGV4dCk7Cit9
CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6c2V0TWFya3VwKGNvbnN0IFN0cmluZyYgbmV3TWFya3Vw
KQoreworICAgIG1fcmFuZ2UgPSAwOworICAgIG1fbWFya3VwID0gbmV3TWFya3VwOworfQorCit2
b2lkIERhdGFPYmplY3RHdGs6OnNldFVSSUxpc3QoY29uc3QgU3RyaW5nJiB1cmlMaXN0U3RyaW5n
KQoreworICAgIG1fdXJpTGlzdCA9IHVyaUxpc3RTdHJpbmc7CisKKyAgICAvLyBUaGlzIGNvZGUg
aXMgb3JpZ2luYWxseSBmcm9tOiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvZGUgY3Jvc3MtcGxhdGZv
cm0gZXZlbnR1YWxseS4KKworICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAy
NDgzIC0gaG93ZXZlciwgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAvLyByZWFzb25zIHdlIGFsc28g
YWxsb3cganVzdCBcbiBoZXJlLgorICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7CisgICAgdXJp
TGlzdFN0cmluZy5zcGxpdCgnXG4nLCB1cmlMaXN0KTsKKworICAgIC8vIFByb2Nlc3MgdGhlIGlu
cHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4KKyAg
ICAvLyBJbiBjYXNlIG5vIFVSTHMgY2FuIGJlIGZvdW5kLCBzdWJzZXF1ZW50IGNhbGxzIHRvIGdl
dERhdGEoIlVSTCIpCisgICAgLy8gd2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGlu
IGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlCisgICAgLy8gIlRoZSBEcmFnRXZlbnQgYW5k
IERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuIEFsc28gZXh0cmFjdCBhbGwgZmlsZW5hbWVzCisg
ICAgLy8gZnJvbSB0aGUgVVJJIGxpc3QuCisgICAgYm9vbCBzZXRVUkwgPSBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNw
YWNlKCk7CisgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAobGluZVswXSA9PSAnIycpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBLVVJMIHVybCA9IEtVUkwoS1VSTCgpLCBsaW5lKTsKKyAgICAgICAgaWYgKHVybC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmICghc2V0VVJMKSB7CisgICAgICAgICAgICAgICAg
bV91cmwgPSB1cmw7CisgICAgICAgICAgICAgICAgc2V0VVJMID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICAgICAgR093
blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19maWxlbmFtZV9mcm9tX3VyaShsaW5lLnV0ZjgoKS5kYXRh
KCksIDAsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKCFlcnJvciAmJiBmaWxl
bmFtZSkKKyAgICAgICAgICAgICAgICBtX2ZpbGVuYW1lcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChmaWxlbmFtZS5nZXQoKSkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIERhdGFPYmpl
Y3RHdGs6OnNldFVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit7Cisg
ICAgbV91cmwgPSB1cmw7CisgICAgbV91cmlMaXN0ID0gdXJsOworICAgIHNldFRleHQodXJsLnN0
cmluZygpKTsKKworICAgIFN0cmluZyBhY3R1YWxMYWJlbChsYWJlbCk7CisgICAgaWYgKGFjdHVh
bExhYmVsLmlzRW1wdHkoKSkKKyAgICAgICAgYWN0dWFsTGFiZWwgPSB1cmw7CisKKyAgICBTdHJp
bmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7CisgICAg
bWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOworICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIpOwor
ICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWQoZ19tYXJrdXBfZXNjYXBlX3RleHQoYWN0dWFsTGFi
ZWwudXRmOCgpLmRhdGEoKSwgLTEpKTsKKyAgICBtYXJrdXAuYXBwZW5kKFN0cmluZzo6ZnJvbVVU
RjgoZXNjYXBlZC5nZXQoKSkpOworICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKKyAgICBzZXRN
YXJrdXAobWFya3VwLnRvU3RyaW5nKCkpOworfQorCit2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFy
VGV4dCgpCit7CisgICAgbV9yYW5nZSA9IDA7CisgICAgbV90ZXh0ID0gIiI7Cit9CisKK3ZvaWQg
RGF0YU9iamVjdEd0azo6Y2xlYXJNYXJrdXAoKQoreworICAgIG1fcmFuZ2UgPSAwOworICAgIG1f
bWFya3VwID0gIiI7Cit9CisKK1N0cmluZyBEYXRhT2JqZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0
Cit7CisgICAgaWYgKGhhc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIHRleHQoKTsKKworICAgIGlm
IChoYXNVUkwoKSkKKyAgICAgICAgcmV0dXJuIHVybCgpOworCisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCit2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCkKK3sK
KyAgICBtX3RleHQgPSAiIjsKKyAgICBtX21hcmt1cCA9ICIiOworICAgIG1fdXJpTGlzdCA9ICIi
OworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1faW1hZ2UgPSAwOworICAgIG1fcmFuZ2UgPSAw
OworfQorCit2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyQWxsKCkKK3sKKyAgICBjbGVhckFsbEV4
Y2VwdEZpbGVuYW1lcygpOworICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7Cit9CisKK0RhdGFPYmpl
Y3RHdGsqIERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxHdGtDbGlwYm9hcmQqLCBSZWZQdHI8RGF0YU9iamVj
dEd0az4gPiBvYmplY3RNYXA7CisKKyAgICBpZiAoIW9iamVjdE1hcC5jb250YWlucyhjbGlwYm9h
cmQpKSB7CisgICAgICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0gRGF0YU9i
amVjdEd0azo6Y3JlYXRlKCk7CisgICAgICAgIG9iamVjdE1hcC5zZXQoY2xpcGJvYXJkLCBkYXRh
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGRhdGFPYmplY3QuZ2V0KCk7CisgICAgfQorCisgICAg
SGFzaE1hcDxHdGtDbGlwYm9hcmQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPjo6aXRlcmF0b3Ig
aXQgPSBvYmplY3RNYXAuZmluZChjbGlwYm9hcmQpOworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0
KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI4
MWIxZTE3OGJmOTQ3ZGEyYzA4MGQzODNlYWE1MDZiNmE2Mzk4MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBEYXRhT2JqZWN0R3RrX2gKKyNkZWZpbmUgRGF0YU9i
amVjdEd0a19oCisKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRGF0YU9iamVjdEd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFPYmplY3RHdGs+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2JqZWN0R3RrKCkpOworICAg
IH0KKworICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAg
Y29uc3QgU3RyaW5nJiB1cmlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV91cmlMaXN0OyB9CisgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5h
bWVzOyB9CisgICAgR2RrUGl4YnVmKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlKSB7IG1f
cmFuZ2UgPSBuZXdSYW5nZTsgfQorICAgIHZvaWQgc2V0SW1hZ2UoR2RrUGl4YnVmKiBuZXdJbWFn
ZSkgeyBtX2ltYWdlID0gbmV3SW1hZ2U7IH0KKyAgICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzTWFya3VwKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNVUklM
aXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhh
c1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYgbV91cmwuaXNWYWxpZCgp
OyB9CisgICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxlbmFtZXMu
aXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KKyAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0gIiI7IH0KKyAgICB2b2lk
IGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsgfQorICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsg
bV9pbWFnZSA9IDA7IH0KKworICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CisgICAgU3RyaW5nIG1h
cmt1cCgpIGNvbnN0OworICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IHNldE1hcmt1cChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFVSSUxpc3QoY29uc3QgU3Ry
aW5nJik7CisgICAgU3RyaW5nIHVybExhYmVsKCkgY29uc3Q7CisKKyAgICB2b2lkIGNsZWFyQWxs
RXhjZXB0RmlsZW5hbWVzKCk7CisgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgY2xlYXJU
ZXh0KCk7CisgICAgdm9pZCBjbGVhck1hcmt1cCgpOworCisgICAgc3RhdGljIERhdGFPYmplY3RH
dGsqIGZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQqKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcg
bV90ZXh0OworICAgIFN0cmluZyBtX21hcmt1cDsKKyAgICBLVVJMIG1fdXJsOworICAgIFN0cmlu
ZyBtX3VyaUxpc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CisgICAgR1JlZlB0
cjxHZGtQaXhidWY+IG1faW1hZ2U7CisgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOworfTsKKwor
fQorCisjZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0RyYWdEYXRhR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAyYTQ3NDlkMzNjYmIyOTljOGRkNjZlMzVjMDA5MWFiMjhmMTBhZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApA
QCAtMCwwICsxLDEwNCBAQAorLyoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisKKyNpbmNsdWRlICJDbGlwYm9h
cmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIm1hcmt1cC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0RhdGE6OmNh
blNtYXJ0UmVwbGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERy
YWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmhhc0ZpbGVuYW1lcygpOworfQorCit1bnNpZ25lZCBEcmFnRGF0YTo6
bnVtYmVyT2ZGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+
ZmlsZW5hbWVzKCkuc2l6ZSgpOworfQorCit2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0
b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAoreworICAgIHJlc3VsdCA9IG1fcGxhdGZvcm1EcmFn
RGF0YS0+ZmlsZW5hbWVzKCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNUZXh0KCk7Cit9
CisKK1N0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoRnJhbWUqKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHQoKTsKK30KKworQ29sb3IgRHJhZ0RhdGE6OmFz
Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigpOworfQorCitib29sIERyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFp
bnNQbGFpblRleHQoKSB8fCBjb250YWluc1VSTCgwKSB8fCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmhh
c01hcmt1cCgpIHx8IGNvbnRhaW5zQ29sb3IoKSB8fCBjb250YWluc0ZpbGVzKCk7Cit9CisKK2Jv
b2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZyYW1lKiBmcmFtZSwgRmlsZW5hbWVDb252ZXJzaW9u
UG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zdAoreworICAgIHJldHVybiAhYXNVUkwoZnJhbWUs
IGZpbGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7Cit9CisKK1N0cmluZyBEcmFnRGF0YTo6YXNVUkwo
RnJhbWUqLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3ksIFN0cmluZyog
dGl0bGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1VSTCgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKGZpbGVuYW1lUG9saWN5ICE9IENvbnZl
cnRGaWxlbmFtZXMpIHsKKyAgICAgICAgS1VSTCB1cmwoS1VSTCgpLCBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPnVybCgpKTsKKyAgICAgICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFN0cmluZyB1cmwobV9wbGF0Zm9ybURyYWdE
YXRhLT51cmwoKSk7CisgICAgaWYgKHRpdGxlKQorICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPnVybExhYmVsKCk7CisgICAgcmV0dXJuIHVybDsKK30KKworCitQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFz
c1JlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBjb25zdAoreworICAgIGlmICghbV9wbGF0Zm9y
bURyYWdEYXRhLT5oYXNNYXJrdXAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtX3BsYXRmb3JtRHJh
Z0RhdGEtPm1hcmt1cCgpLCAiIik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvRHJhZ0ljb24uY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGUyODQ4NDVmNjUxZGI4YzRhZWU4MDBiMmU0ZTcwMGQyMDhmZTIxNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwCkBAIC0wLDAgKzEs
MTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnSWNvbi5oIgorCisjaW5jbHVkZSAi
R2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgZ2Jvb2xlYW4gZHJh
Z0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEV4cG9zZSog
ZXZlbnQsIERyYWdJY29uKiBpY29uKQoreworICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0g
YWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KSk7CisgICAgaWNvbi0+ZHJh
dyhjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbHNlCitzdGF0aWMgZ2Jv
b2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBjYWlyb190
KiBjb250ZXh0LCBEcmFnSWNvbiogaWNvbikKK3sKKyAgICBpZiAoIWdka19jYWlyb19nZXRfY2xp
cF9yZWN0YW5nbGUoY29udGV4dCwgMCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpY29u
LT5kcmF3KGNvbnRleHQpOworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIEdUS19BUElf
VkVSU0lPTl8yCisKK0RyYWdJY29uOjpEcmFnSWNvbigpCisgICAgOiBpc0NvbXBvc2l0ZWQoZ2Rr
X3NjcmVlbl9pc19jb21wb3NpdGVkKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkpCisgICAgLCBt
X3dpbmRvdygwKQoreworICAgIGlmICghaXNDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCisgICAgZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImV4cG9z
ZS1ldmVudCIsIEdfQ0FMTEJBQ0soZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRo
aXMpOworI2Vsc2UKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiZHJhdyIsIEdfQ0FM
TEJBQ0soZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCisK
KyAgICAvLyBUaGlzIHN0cmF0ZWd5IG9yaWdpbmFsbHkgY29tZXMgZnJvbSBDaHJvbWl1bTogc3Jj
L2Nocm9tZS9icm93c2VyL2d0ay90YWJfY29udGVudHNfZHJhZ19zb3VyY2UuY2MKKyAgICBHZGtT
Y3JlZW4qIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihtX3dpbmRvdyk7CisjaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtDb2xvcm1hcCogcmdiYSA9IGdka19zY3JlZW5fZ2V0
X3JnYmFfY29sb3JtYXAoc2NyZWVuKTsKKyAgICBpZiAocmdiYSkKKyAgICAgICAgZ3RrX3dpZGdl
dF9zZXRfY29sb3JtYXAobV93aW5kb3csIHJnYmEpOworI2Vsc2UKKyAgICBHZGtWaXN1YWwqIHZp
c3VhbCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfdmlzdWFsKHNjcmVlbik7CisgICAgaWYgKCF2aXN1
YWwpCisgICAgICAgIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVu
KTsKKyAgICBndGtfd2lkZ2V0X3NldF92aXN1YWwobV93aW5kb3csIHZpc3VhbCk7CisjZW5kaWYg
Ly8gR1RLX0FQSV9WRVJTSU9OXzIKK30KKworRHJhZ0ljb246On5EcmFnSWNvbigpCit7CisgICAg
aWYgKG1fd2luZG93KQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cpOworfQor
Cit2b2lkIERyYWdJY29uOjpkcmF3KGNhaXJvX3QqIGNvbnRleHQpCit7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNvbnRleHQsIDAsIDAsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKG1faW1hZ2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWln
aHQobV9pbWFnZS5nZXQoKSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LCBDQUlS
T19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0
LCBtX2ltYWdlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19maWxsKGNvbnRleHQpOworfQorCit2
b2lkIERyYWdJY29uOjpzZXRJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdlKQoreworICAgIEFT
U0VSVChpbWFnZSk7CisgICAgbV9pbWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VTaXplID0gSW50
U2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChpbWFnZSkpOworICAgIGlmIChpc0NvbXBvc2l0ZWQpIHsKKyAgICAg
ICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dpbmRvdyksIG1faW1hZ2VTaXplLndp
ZHRoKCksIG1faW1hZ2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgbV9waXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9J
bWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihpbWFnZSkpOworI2VuZGlmCit9CisKK3ZvaWQgRHJhZ0lj
b246OnVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSW50UG9pbnQg
aG90c3BvdChtX2ltYWdlU2l6ZSk7CisgICAgaG90c3BvdC5zY2FsZSgwLjUsIDAuNSk7CisgICAg
dXNlRm9yRHJhZyhjb250ZXh0LCBob3RzcG90KTsKK30KKwordm9pZCBEcmFnSWNvbjo6dXNlRm9y
RHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpCit7
CisgICAgaWYgKGlzQ29tcG9zaXRlZCkgeworICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl93aWRn
ZXQoY29udGV4dCwgbV93aW5kb3csIGhvdHNwb3QueCgpLCBob3RzcG90LnkoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfZHJhZ19z
ZXRfaWNvbl9waXhidWYoY29udGV4dCwgbV9waXhidWYuZ2V0KCksIGhvdHNwb3QueCgpLCBob3Rz
cG90LnkoKSk7CisjZWxzZQorICAgIGd0a19kcmFnX3NldF9pY29uX3N1cmZhY2UoY29udGV4dCwg
bV9pbWFnZS5nZXQoKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9EcmFnSWNvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZTQzNWRjYmRhMjBlMmVkZDdiZmMyNmY3YjBm
ZjA5YTI4Yjg4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJ
Y29uLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERyYWdJY29uX2gKKyNkZWZpbmUgRHJhZ0ljb25faAor
CisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxSZWZQdHJDYWlyby5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEcmFnSWNvbiB7CitwdWJsaWM6CisgICAgRHJhZ0ljb24oKTsKKyAgICB2aXJ0dWFsIH5EcmFn
SWNvbigpOworCisgICAgdm9pZCBkcmF3KGNhaXJvX3QqKTsKKyAgICB2b2lkIHNldEltYWdlKGNh
aXJvX3N1cmZhY2VfdCopOworICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCopOwor
ICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBvaW50JiBob3Rz
cG90KTsKKworcHJpdmF0ZToKKyAgICBib29sIGlzQ29tcG9zaXRlZDsKKyAgICBHdGtXaWRnZXQq
IG1fd2luZG93OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2U7CisgICAgSW50
U2l6ZSBtX2ltYWdlU2l6ZTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdSZWZQdHI8
R2RrUGl4YnVmPiBtX3BpeGJ1ZjsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYgLy8gRHJhZ0lj
b25faApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiN2M0YzE0
MmUxY2VmMzlkMjRmM2JlZTlmMzRjYjJlYWQyYmQ3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IDIwMTAgSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgorCisjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJlZiBpbWFnZSkKK3sKKyAg
ICBpZiAoaW1hZ2UpCisgICAgICAgIHJldHVybiBJbnRTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKSk7
CisKKyAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKK30KKwordm9pZCBkZWxldGVEcmFnSW1hZ2Uo
RHJhZ0ltYWdlUmVmIGltYWdlKQoreworICAgIGlmIChpbWFnZSkKKyAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KGltYWdlKTsKK30KKworRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERy
YWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplIHNjYWxlKQoreworICAgIGlmICghaW1hZ2UpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaW50IG5ld1dpZHRoID0gc2NhbGUud2lkdGgoKSAqIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKTsKKyAgICBpbnQgbmV3SGVpZ2h0ID0g
c2NhbGUuaGVpZ2h0KCkgKiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2UpOwor
ICAgIGNhaXJvX3N1cmZhY2VfdCogc2NhbGVkU3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfY3JlYXRl
X3NpbWlsYXIoaW1hZ2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG5ld1dpZHRoLCBuZXdI
ZWlnaHQpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUoc2NhbGVkU3VyZmFjZSkpOworICAgIGNhaXJvX3NjYWxlKGNvbnRleHQuZ2V0KCksIHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRl
bmQoY2Fpcm9fZ2V0X3NvdXJjZShjb250ZXh0LmdldCgpKSwgQ0FJUk9fRVhURU5EX1BBRCk7Cisg
ICAgY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKGNhaXJvX2dldF9zb3VyY2UoY29udGV4dC5nZXQo
KSksIENBSVJPX0ZJTFRFUl9CRVNUKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY29udGV4dC5n
ZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UoY29udGV4dC5nZXQoKSwgaW1hZ2UsIDAsIDApOworICAgIGNhaXJvX3BhaW50KGNvbnRleHQu
Z2V0KCkpOworCisgICAgZGVsZXRlRHJhZ0ltYWdlKGltYWdlKTsKKyAgICByZXR1cm4gc2NhbGVk
U3VyZmFjZTsKK30KKworRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihE
cmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0IGZyYWN0aW9uKQoreworICAgIGlmICghaW1hZ2UpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFnZGtfc2NyZWVuX2lzX2NvbXBvc2l0ZWQoZ2Rr
X3NjcmVlbl9nZXRfZGVmYXVsdCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgUmVm
UHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoaW1hZ2UpKTsKKyAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY29udGV4dC5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfREVTVF9J
Tik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQuZ2V0KCksIDAsIDAsIDAsIGZy
YWN0aW9uKTsKKyAgICBjYWlyb19wYWludChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gaW1h
Z2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGlt
YWdlLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0pCit7CisgICAgTmF0aXZlSW1hZ2VDYWly
byogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICByZXR1cm4gbmF0aXZlSW1hZ2UgPyBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShuYXRpdmVJbWFn
ZS0+c3VyZmFjZSgpKSA6IDA7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29u
Rm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQoreworICAgIHJldHVybiAwOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM4YWMyMTRjYjI1ODZjNmQwZmU1
MWZjNWI5YjMyZWZjNGZjYTljZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvRXJyb3JzR3RrLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXJyb3JzR3Rr
LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
KyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
c291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluTmV0d29yaywgTmV0d29y
a0Vycm9yQ2FuY2VsbGVkLAorICAgICAgICByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBfKCJMb2Fk
IHJlcXVlc3QgY2FuY2VsbGVkIikpOworfQorCitSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQs
CisgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxvd2VkIHRvIHVzZSBy
ZXN0cmljdGVkIG5ldHdvcmsgcG9ydCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93
VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkws
CisgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIlVSTCBjYW5ub3QgYmUgc2hvd24i
KSk7Cit9CisKK1Jlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBv
bGljeUNoYW5nZSwKKyAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiRnJhbWUgbG9h
ZCB3YXMgaW50ZXJydXB0ZWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVU
eXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yQ2Fubm90U2hvd01p
bWVUeXBlLAorICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVudCB3aXRo
IHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3Vy
Y2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBO
ZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0LAorICAgICAgICByZXNwb25zZS51cmwoKS5zdHJp
bmcoKSwgXygiRmlsZSBkb2VzIG5vdCBleGlzdCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBwbHVn
aW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUGx1Z2luLCBQbHVnaW5FcnJv
cldpbGxIYW5kbGVMb2FkLAorICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiUGx1
Z2luIHdpbGwgaGFuZGxlIGxvYWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWROZXR3
b3JrRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgbmV0d29ya0Vycm9yKQoreworICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQsIERvd25sb2FkRXJyb3JOZXR3b3Jr
LAorICAgICAgICBuZXR3b3JrRXJyb3IuZmFpbGluZ1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxp
emVkRGVzY3JpcHRpb24oKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRC
eVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2Vs
bGVkQnlVc2VyLAorICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiVXNlciBjYW5j
ZWxsZWQgdGhlIGRvd25sb2FkIikpOworfQorCitSZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGlu
YXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5E
b3dubG9hZCwgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9uLAorICAgICAgICByZXNwb25zZS51cmwo
KS5zdHJpbmcoKSwgZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmludEVycm9y
KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRl
eHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JHZW5lcmFsLAorICAgICAgICBk
b2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwgZXJyb3JNZXNz
YWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmlu
dENvbnRleHQqIHByaW50Q29udGV4dCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
OworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JQ
cmludGVyTm90Rm91bmQsCisgICAgICAgIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXIt
PnVybCgpIDogS1VSTCgpLCBfKCJQcmludGVyIG5vdCBmb3VuZCIpKTsKK30KKworUmVzb3VyY2VF
cnJvciBpbnZhbGlkUGFnZVJhbmdlVG9QcmludChjb25zdCBQcmludENvbnRleHQqIHByaW50Q29u
dGV4dCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRl
eHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JJbnZhbGlkUGFnZVJhbmdlLAor
ICAgICAgICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwg
XygiSW52YWxpZCBwYWdlIHJhbmdlIikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9FcnJvcnNHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODJjYzk5ZmJmMjkyZTRjYmNkNzNkNmVm
MDljZmM0YzJjOTQ4NmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9F
cnJvcnNHdGsuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgRXJyb3JzR3RrX2gKKyNkZWZpbmUgRXJyb3JzR3RrX2gKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFByaW50Q29udGV4dDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZVJl
cXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitjb25zdCBjaGFyKiBjb25zdCBlcnJv
ckRvbWFpbk5ldHdvcmsgPSAiV2ViS2l0TmV0d29ya0Vycm9yIjsKK2NvbnN0IGNoYXIqIGNvbnN0
IGVycm9yRG9tYWluUG9saWN5ID0gIldlYktpdFBvbGljeUVycm9yIjsKK2NvbnN0IGNoYXIqIGNv
bnN0IGVycm9yRG9tYWluUGx1Z2luID0gIldlYktpdFBsdWdpbkVycm9yIjsKK2NvbnN0IGNoYXIq
IGNvbnN0IGVycm9yRG9tYWluRG93bmxvYWQgPSAiV2ViS2l0RG93bmxvYWRFcnJvciI7Citjb25z
dCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblByaW50ID0gIldlYktpdFByaW50RXJyb3IiOworCitl
bnVtIE5ldHdvcmtFcnJvciB7CisgICAgTmV0d29ya0Vycm9yRmFpbGVkID0gMzk5LAorICAgIE5l
dHdvcmtFcnJvclRyYW5zcG9ydCA9IDMwMCwKKyAgICBOZXR3b3JrRXJyb3JVbmtub3duUHJvdG9j
b2wgPSAzMDEsCisgICAgTmV0d29ya0Vycm9yQ2FuY2VsbGVkID0gMzAyLAorICAgIE5ldHdvcmtF
cnJvckZpbGVEb2VzTm90RXhpc3QgPSAzMDMKK307CisKKy8vIFN5bmMnZCB3aXRoIE1hYydzIFdl
YktpdCBFcnJvcnMuCitlbnVtIFBvbGljeUVycm9yIHsKKyAgICBQb2xpY3lFcnJvckZhaWxlZCA9
IDE5OSwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSA9IDEwMCwKKyAgICBQb2xp
Y3lFcnJvckNhbm5vdFNob3dVUkwgPSAxMDEsCisgICAgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRl
cnJ1cHRlZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAorICAgIFBvbGljeUVycm9yQ2Fubm90VXNlUmVz
dHJpY3RlZFBvcnQgPSAxMDMKK307CisKK2VudW0gUGx1Z2luRXJyb3IgeworICAgIFBsdWdpbkVy
cm9yRmFpbGVkID0gMjk5LAorICAgIFBsdWdpbkVycm9yQ2Fubm90RmluZFBsdWdpbiA9IDIwMCwK
KyAgICBQbHVnaW5FcnJvckNhbm5vdExvYWRQbHVnaW4gPSAyMDEsCisgICAgUGx1Z2luRXJyb3JK
YXZhVW5hdmFpbGFibGUgPSAyMDIsCisgICAgUGx1Z2luRXJyb3JDb25uZWN0aW9uQ2FuY2VsbGVk
ID0gMjAzLAorICAgIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQgPSAyMDQKK307CisKK2VudW0g
RG93bmxvYWRFcnJvciB7CisgICAgRG93bmxvYWRFcnJvck5ldHdvcmsgPSA0OTksCisgICAgRG93
bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlciA9IDQwMCwKKyAgICBEb3dubG9hZEVycm9yRGVzdGlu
YXRpb24gPSA0MDEKK307CisKK2VudW0gUHJpbnRFcnJvciB7CisgICAgUHJpbnRFcnJvckdlbmVy
YWwgPSA1OTksCisgICAgUHJpbnRFcnJvclByaW50ZXJOb3RGb3VuZCA9IDUwMCwKKyAgICBQcmlu
dEVycm9ySW52YWxpZFBhZ2VSYW5nZSA9IDUwMQorfTsKKworUmVzb3VyY2VFcnJvciBjYW5jZWxs
ZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgYmxvY2tlZEVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJM
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGludGVycnVwdGVk
Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVy
cm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKK1Jl
c291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKK1Jlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKK1Jlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJv
cihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGlu
YXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOworUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNvbnN0IFByaW50Q29udGV4dCosIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5k
RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0Kik7CitSZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFu
Z2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCopOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9FdmVudExvb3BHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlZjdiNWNiNzdiOTQ0ZmJlMDU4MTg0
Zjg2MTQ0MDUyYWU2YTUyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0V2ZW50TG9vcEd0ay5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOdWFudGkgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMb29w
LmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBF
dmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwg
RkFMU0UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9GaWxl
U3lzdGVtR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDI4MGI0YzM4YjMwZTFiODg1ZDkwN2FiMTEwYThl
MmUyZjg1MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lz
dGVtR3RrLmNwcApAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgorI2luY2x1
ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
bGliVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qIE9uIGxp
bnV4IGZpbGUgbmFtZXMgYXJlIGp1c3QgcmF3IGJ5dGVzLCBzbyBhbHNvIHN0cmluZ3MgdGhhdCBj
YW5ub3QgYmUgZW5jb2RlZCBpbiBhbnkgd2F5CisgKiBhcmUgdmFsaWQgZmlsZSBuYW1lcy4gVGhp
cyBtZWFuIHRoYXQgd2UgY2Fubm90IGp1c3Qgc3RvcmUgYSBmaWxlIG5hbWUgYXMtaXMgaW4gYSBT
dHJpbmcKKyAqIGJ1dCB3ZSBoYXZlIHRvIGVzY2FwZSBpdC4KKyAqIE9uIFdpbmRvd3MgdGhlIEdM
aWIgZmlsZSBuYW1lIGVuY29kaW5nIGlzIGFsd2F5cyBVVEYtOCBzbyB3ZSBjYW4gb3B0aW1pemUg
dGhpcyBjYXNlLiAqLworU3RyaW5nIGZpbGVuYW1lVG9TdHJpbmcoY29uc3QgY2hhciogZmlsZW5h
bWUpCit7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisj
aWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSk7Cisj
ZWxzZQorICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWRTdHJpbmcoZ191cmlfZXNjYXBlX3N0cmlu
ZyhmaWxlbmFtZSwgIi86IiwgZmFsc2UpKTsKKyAgICByZXR1cm4gZXNjYXBlZFN0cmluZy5nZXQo
KTsKKyNlbmRpZgorfQorCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gcGF0aC51dGY4KCk7
CisjZWxzZQorICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1lKGdfdXJpX3VuZXNjYXBlX3N0cmlu
ZyhwYXRoLnV0ZjgoKS5kYXRhKCksIDApKTsKKyAgICByZXR1cm4gZmlsZW5hbWUuZ2V0KCk7Cisj
ZW5kaWYKK30KKworLy8gQ29udmVydHMgYSBzdHJpbmcgdG8gc29tZXRoaW5nIHN1aXRhYmxlIHRv
IGJlIGRpc3BsYXllZCB0byB0aGUgdXNlci4KK1N0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gc3RyaW5n
OworI2Vsc2UKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHN0cmluZyk7CisgICAgR093blB0cjxnY2hhcj4gZGlzcGxheShnX2ZpbGVuYW1lX3RvX3V0Zjgo
ZmlsZW5hbWUuZGF0YSgpLCAwLCAwLCAwLCAwKSk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAg
ICByZXR1cm4gc3RyaW5nOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlzcGxheS5n
ZXQoKSk7CisjZW5kaWYKK30KKworYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgp
KQorICAgICAgICByZXN1bHQgPSBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9U
RVNUX0VYSVNUUyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQ1N0
cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlm
ICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9ICFnX3JlbW92ZShmaWxlbmFt
ZS5kYXRhKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBkZWxldGVFbXB0eURp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
KyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwor
CisgICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmVzdWx0ID0gIWdfcm1kaXIo
ZmlsZW5hbWUuZGF0YSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZ2V0Rmls
ZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCit7CisgICAg
Q1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBp
ZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdTdGF0
QnVmIHN0YXRSZXN1bHQ7CisgICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgp
LCAmc3RhdFJlc3VsdCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRp
bWVfdCYgbW9kaWZpZWRUaW1lKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVz
dWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1
bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1vZGlmaWVkVGltZSA9IHN0YXRSZXN1
bHQuc3RfbXRpbWU7CisgICAgcmV0dXJuIHRydWU7CisKK30KKworYm9vbCBnZXRGaWxlTWV0YWRh
dGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIENT
dHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYg
KGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3Qg
c3RhdCBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEo
KSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOwor
ICAgIG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKKyAgICBtZXRhZGF0YS50
eXBlID0gU19JU0RJUihzdGF0UmVzdWx0LnN0X21vZGUpID8gRmlsZU1ldGFkYXRhOjpUeXBlRGly
ZWN0b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKKyAgICByZXR1cm4gdHJ1ZTsKKworfQor
CitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoR19ESVJfU0VQ
QVJBVE9SX1MpKQorICAgICAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudDsKKworICAgIHJldHVy
biBwYXRoICsgR19ESVJfU0VQQVJBVE9SX1MgKyBjb21wb25lbnQ7Cit9CisKK2Jvb2wgbWFrZUFs
bERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1l
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2ludCByZXN1bHQgPSBnX21rZGly
X3dpdGhfcGFyZW50cyhmaWxlbmFtZS5kYXRhKCksIFNfSVJXWFUpOworCisgICAgcmV0dXJuICFy
ZXN1bHQ7Cit9CisKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCit7CisgICAgcmV0dXJuIGZp
bGVuYW1lVG9TdHJpbmcoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRoR2V0Rmls
ZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBpZiAocGF0aE5hbWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gcGF0aE5hbWU7CisKKyAgICBDU3RyaW5nIHRtcEZpbGVuYW1l
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGhOYW1lKTsKKyAgICBHT3duUHRyPGdjaGFy
PiBiYXNlTmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKHRtcEZpbGVuYW1lLmRhdGEoKSkpOworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGJhc2VOYW1lLmdldCgpKTsKK30KKworQ1N0cmluZyBh
cHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKQoreworICAgIENTdHJpbmcgcGF0aCA9IGdldEN1cnJl
bnRFeGVjdXRhYmxlUGF0aCgpOworICAgIGlmICghcGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIHBhdGg7CisKKyAgICAvLyBJZiB0aGUgYWJvdmUgZmFpbHMsIGNoZWNrIHRoZSBQQVRIIGVu
diB2YXJpYWJsZS4KKyAgICBHT3duUHRyPGNoYXI+IGN1cnJlbnRFeGVQYXRoKGdfZmluZF9wcm9n
cmFtX2luX3BhdGgoZ19nZXRfcHJnbmFtZSgpKSk7CisgICAgaWYgKCFjdXJyZW50RXhlUGF0aC5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIEdPd25QdHI8Y2hhcj4gZGly
bmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoY3VycmVudEV4ZVBhdGguZ2V0KCkpKTsKKyAgICByZXR1
cm4gZGlybmFtZS5nZXQoKTsKK30KKworQ1N0cmluZyBzaGFyZWRSZXNvdXJjZXNQYXRoKCkKK3sK
KyAgICBzdGF0aWMgQ1N0cmluZyBjYWNoZWRQYXRoOworICAgIGlmICghY2FjaGVkUGF0aC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFBhdGg7CisKKyNpZiBPUyhXSU5ET1dTKQorICAg
IEhNT0RVTEUgaG1vZHVsZSA9IDA7CisgICAgR2V0TW9kdWxlSGFuZGxlRXhBKEdFVF9NT0RVTEVf
SEFORExFX0VYX0ZMQUdfRlJPTV9BRERSRVNTLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzaGFy
ZWRSZXNvdXJjZXNQYXRoKSwgJmhtb2R1bGUpOworCisgICAgR093blB0cjxnY2hhcj4gcnVudGlt
ZURpcihnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9kdWxl
KGhtb2R1bGUpKTsKKyAgICBHT3duUHRyPGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1l
KHJ1bnRpbWVEaXIuZ2V0KCksICJzaGFyZSIsICJ3ZWJraXRndGstIldFQktJVEdUS19BUElfVkVS
U0lPTl9TVFJJTkcsIE5VTEwpKTsKKyNlbHNlCisgICAgR093blB0cjxnY2hhcj4gZGF0YVBhdGgo
Z19idWlsZF9maWxlbmFtZShEQVRBX0RJUiwgIndlYmtpdGd0ay0iV0VCS0lUR1RLX0FQSV9WRVJT
SU9OX1NUUklORywgTlVMTCkpOworI2VuZGlmCisKKyAgICBjYWNoZWRQYXRoID0gZGF0YVBhdGgu
Z2V0KCk7CisgICAgcmV0dXJuIGNhY2hlZFBhdGg7Cit9CisKK3VpbnQ2NF90IGdldFZvbHVtZUZy
ZWVTaXplRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIEdSZWZQdHI8R0ZpbGU+IGZp
bGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoKSk7CisgICAgR1JlZlB0cjxH
RmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2lu
Zm8oZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIDAsIDApKTsK
KyAgICBpZiAoIWZpbGVJbmZvKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBnX2Zp
bGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FUVFJJ
QlVURV9GSUxFU1lTVEVNX0ZSRUUpOworfQorCitTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgLyogTm8gbnVsbCBjaGVja2luZyBuZWVkZWQgKi8KKyAgICBH
T3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJu
YW1lLmdldCgpKTsKK30KKworVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGVu
dHJpZXM7CisKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOworICAgIEdEaXIqIGRpciA9IGdfZGlyX29wZW4oZmlsZW5hbWUuZGF0YSgpLCAwLCAw
KTsKKyAgICBpZiAoIWRpcikKKyAgICAgICAgcmV0dXJuIGVudHJpZXM7CisKKyAgICBHUGF0dGVy
blNwZWMqIHBzcGVjID0gZ19wYXR0ZXJuX3NwZWNfbmV3KChmaWx0ZXIudXRmOCgpKS5kYXRhKCkp
OworICAgIHdoaWxlIChjb25zdCBjaGFyKiBuYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcikpIHsK
KyAgICAgICAgaWYgKCFnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nKHBzcGVjLCBuYW1lKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGVudHJ5KGdfYnVpbGRf
ZmlsZW5hbWUoZmlsZW5hbWUuZGF0YSgpLCBuYW1lLCBOVUxMKSk7CisgICAgICAgIGVudHJpZXMu
YXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoZW50cnkuZ2V0KCkpKTsKKyAgICB9CisgICAgZ19wYXR0
ZXJuX3NwZWNfZnJlZShwc3BlYyk7CisgICAgZ19kaXJfY2xvc2UoZGlyKTsKKworICAgIHJldHVy
biBlbnRyaWVzOworfQorCitTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBw
cmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIEdPd25QdHI8Z2NoYXI+
IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIEdPd25QdHI8
Z2NoYXI+IHRlbXBQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCBmaWxlbmFt
ZS5nZXQoKSwgTlVMTCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19m
aWxlX25ld19mb3JfcGF0aCh0ZW1wUGF0aC5nZXQoKSkpOworCisgICAgaGFuZGxlID0gZ19maWxl
X2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsK
KyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKK30KKworUGxh
dGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUpCit7CisgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKKyAgICBpZiAoZnNSZXAuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBpbnZhbGlkUGxh
dGZvcm1GaWxlSGFuZGxlOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl9wYXRoKGZzUmVwLmRhdGEoKSkpOworICAgIEdGaWxlSU9TdHJlYW0qIGlv
U3RyZWFtID0gMDsKKyAgICBpZiAobW9kZSA9PSBPcGVuRm9yUmVhZCkKKyAgICAgICAgaW9TdHJl
YW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwgMCk7CisgICAgZWxzZSBp
ZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpIHsKKyAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZzUmVw
LmRhdGEoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJ
TEVfVEVTVF9JU19SRUdVTEFSKSkpCisgICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVu
X3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aW9TdHJlYW0gPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JF
QVRFX05PTkUsIDAsIDApOworICAgIH0KKworICAgIHJldHVybiBpb1N0cmVhbTsKK30KKwordm9p
ZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdfaW9fc3RyZWFtX2Ns
b3NlKEdfSU9fU1RSRUFNKGhhbmRsZSksIDAsIDApOworICAgIGdfb2JqZWN0X3VucmVmKGhhbmRs
ZSk7CisgICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKK30KKworbG9uZyBs
b25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKK3sKKyAgICBHU2Vla1R5cGUgc2Vla1R5cGUgPSBHX1NF
RUtfU0VUOworICAgIHN3aXRjaCAob3JpZ2luKSB7CisgICAgY2FzZSBTZWVrRnJvbUJlZ2lubmlu
ZzoKKyAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfU0VUOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNlZWtGcm9tQ3VycmVudDoKKyAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfQ1VSOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNlZWtGcm9tRW5kOgorICAgICAgICBzZWVrVHlwZSA9IEdf
U0VFS19FTkQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghZ19zZWVrYWJsZV9zZWVrKEdfU0VFS0FC
TEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSksIG9m
ZnNldCwgc2Vla1R5cGUsIDAsIDApKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGdf
c2Vla2FibGVfdGVsbChHX1NFRUtBQkxFKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19J
T19TVFJFQU0oaGFuZGxlKSkpKTsKK30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgZ3NpemUg
Ynl0ZXNXcml0dGVuOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGwoZ19pb19zdHJlYW1f
Z2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSksCisgICAgICAgIGRhdGEsIGxl
bmd0aCwgJmJ5dGVzV3JpdHRlbiwgMCwgMCk7CisgICAgcmV0dXJuIGJ5dGVzV3JpdHRlbjsKK30K
KworaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkbyB7Cisg
ICAgICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkKGdfaW9fc3RyZWFt
X2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSksCisgICAgICAgICAgICBkYXRh
LCBsZW5ndGgsIDAsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgPj0g
MCkKKyAgICAgICAgICAgIHJldHVybiBieXRlc1JlYWQ7CisgICAgfSB3aGlsZSAoZXJyb3IgJiYg
ZXJyb3ItPmNvZGUgPT0gR19GSUxFX0VSUk9SX0lOVFIpOworICAgIHJldHVybiAtMTsKK30KKwor
Ym9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworI2lmIE9TKFdJTkRP
V1MpCisgICAgcmV0dXJuIDo6RnJlZUxpYnJhcnkobW9kdWxlKTsKKyNlbHNlCisgICAgcmV0dXJu
IGdfbW9kdWxlX2Nsb3NlKG1vZHVsZSk7CisjZW5kaWYKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25Q
dHJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliNjkzZjQxNWU5NzgyNDdmZDNjOTM4NGQ0ZWQyNTFlZTA0
OWI4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsu
Y3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBT
LkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50PihH
ZGtFdmVudCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdka19ldmVudF9mcmVlKHB0
cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHdGtJY29uSW5mbz4oR3Rr
SWNvbkluZm8qIGluZm8pCit7CisgICAgaWYgKGluZm8pCisgICAgICAgIGd0a19pY29uX2luZm9f
ZnJlZShpbmZvKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HT3du
UHRyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZDVlODM3MWVkMzY4ZjQxNWQ4OTc0MzI0ZWU2MmQ3MWZlYjdhMmQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmgKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBH
T3duUHRyR3RrX2gKKyNkZWZpbmUgR093blB0ckd0a19oCisKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVP
d25lZEdQdHI8R2RrRXZlbnQ+KEdka0V2ZW50Kik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25l
ZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25JbmZvKik7CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTUwNmRmOTAwN2QyNGNjMDc2Nzc2OGRl
ZmQxMDU2NjJmYzM5YjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9H
UmVmUHRyR3RrLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisKKyNkZWZpbmUgU0VDUkVUX1dJVEhfVU5TVEFCTEUgMQor
I2RlZmluZSBTRUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKKworI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic2VjcmV0L3NlY3JldC5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmR1B0cihH
dGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3RrX3RhcmdldF9s
aXN0X3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBndGtf
dGFyZ2V0X2xpc3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gU2VjcmV0VmFsdWUqIHJl
ZkdQdHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzZWNyZXRf
dmFsdWVfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzZWNy
ZXRfdmFsdWVfdW5yZWYocHRyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0ZW1w
bGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ2RrX2N1cnNvcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9CisjZW5kaWYKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0dSZWZQdHJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTkyODY0YTkyMjlkYWI4ODNiZWZhNTYyYjIz
NWFkOGFjMzk2ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgR1JlZlB0ckd0a19oCisjZGVmaW5lIEdSZWZQdHJHdGtfaAorCisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfU2VjcmV0VmFs
dWUgU2VjcmV0VmFsdWU7CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBHdGtUYXJn
ZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOworCit0ZW1wbGF0ZSA8PiBTZWNyZXRWYWx1ZSog
cmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNl
Y3JldFZhbHVlKiBwdHIpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3RlbXBsYXRlIDw+
IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHZGtDdXJzb3IqIHB0cik7CisjZW5kaWYKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9HYW1lcGFkc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE3NWY4MGY3M2RlNDc1MjhhYjIwMzQ0
YjUxMDQ0NDkzOWE1ZTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R2FtZXBhZHNHdGsuY3BwCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2FtZXBhZHMuaCIKKworI2lmIEVOQUJMRShHQU1F
UEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCisjaW5jbHVkZSAiR2FtZXBh
ZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRz
dHJlYW0uaD4KKyNpbmNsdWRlIDxndWRldi9ndWRldi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZERldmljZUd0ayA6IHB1YmxpYyBHYW1l
cGFkRGV2aWNlTGludXggeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdhbWVwYWRE
ZXZpY2VHdGs+IGNyZWF0ZShTdHJpbmcgZGV2aWNlRmlsZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgR2FtZXBhZERldmljZUd0ayhkZXZpY2VGaWxlKSk7CisgICAgfQorICAg
IH5HYW1lcGFkRGV2aWNlR3RrKCk7CisKK3ByaXZhdGU6CisgICAgR2FtZXBhZERldmljZUd0ayhT
dHJpbmcgZGV2aWNlRmlsZSk7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVhZENhbGxiYWNrKEdP
YmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKTsKKyAgICBHUmVmUHRyPEdJbnB1
dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwor
fTsKKworR2FtZXBhZERldmljZUd0azo6R2FtZXBhZERldmljZUd0ayhTdHJpbmcgZGV2aWNlRmls
ZSkKKyAgICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZpY2VGaWxlKQoreworICAgIGlmIChtX2Zp
bGVEZXNjcmlwdG9yID09IC0xKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJlYW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZB
TFNFKSk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1f
Y3JlYXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgp
KSwgMCkpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgZ19z
b3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAwKTsKK30KKworR2FtZXBhZERldmljZUd0azo6
fkdhbWVwYWREZXZpY2VHdGsoKQoreworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgZ19zb3Vy
Y2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Cit9CisKK2dib29sZWFuIEdhbWVwYWREZXZpY2VH
dGs6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gcmVpbnRlcnByZXRfY2Fz
dDxHYW1lcGFkRGV2aWNlR3RrKj4oZGF0YSk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKKworICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxhYmxl
X2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5nKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKHBv
bGxhYmxlU3RyZWFtKSwKKyAgICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iu
b3V0UHRyKCkpOworCisgICAgLy8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCisgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgR19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJV
RSB0byB3YWl0IHVudGlsCisgICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWlu
IGFuZCBGQUxTRSBvdGhlcndpc2UuCisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZ19l
cnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JM
T0NLKTsKKworICAgIEFTU0VSVF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7Cisg
ICAgZ2FtZXBhZERldmljZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBUUlVF
OworfQorCitjbGFzcyBHYW1lcGFkc0d0ayB7CitwdWJsaWM6CisgICAgR2FtZXBhZHNHdGsodW5z
aWduZWQgbGVuZ3RoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZp
bGUpOworICAgIHZvaWQgdW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7CisKKyAg
ICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7CisKK3ByaXZhdGU6CisgICAg
fkdhbWVwYWRzR3RrKCk7CisgICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNs
aWVudCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7CisgICAg
c3RhdGljIGdib29sZWFuIGlzR2FtZXBhZERldmljZShHVWRldkRldmljZSopOworCisgICAgVmVj
dG9yPE93blB0cjxHYW1lcGFkRGV2aWNlR3RrPiA+IG1fc2xvdHM7CisgICAgSGFzaE1hcDxTdHJp
bmcsIEdhbWVwYWREZXZpY2VHdGsqPiBtX2RldmljZU1hcDsKKworICAgIEdSZWZQdHI8R1VkZXZD
bGllbnQ+IG1fZ3VkZXZDbGllbnQ7Cit9OworCitHYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5z
aWduZWQgbGVuZ3RoKQorICAgIDogbV9zbG90cyhsZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsgImlucHV0IiwgMCB9OworICAgIG1fZ3VkZXZDbGllbnQg
PSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9ndWRldkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZl
bnRDYWxsYmFjayksIHRoaXMpOworCisgICAgR093blB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191
ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lz
dGVtc1swXSkpOworICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7
IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgeworICAgICAgICBH
VWRldkRldmljZSogZGV2aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7CisgICAg
ICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dl
dF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKKyAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZp
Y2UpKQorICAgICAgICAgICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7CisgICAgICAgIGdf
b2JqZWN0X3VucmVmKGRldmljZSk7CisgICAgfQorfQorCitHYW1lcGFkc0d0azo6fkdhbWVwYWRz
R3RrKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRl
dkNsaWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Cit9
CisKK3ZvaWQgR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQor
eworICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2
aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlu
cyhkZXZpY2VGaWxlKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBt
X3Nsb3RzLnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7
CisgICAgICAgICAgICBtX3Nsb3RzW2luZGV4XSA9IEdhbWVwYWREZXZpY2VHdGs6OmNyZWF0ZShk
ZXZpY2VGaWxlKTsKKyAgICAgICAgICAgIG1fZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Ns
b3RzW2luZGV4XS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBHYW1lcGFkc0d0azo6dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmls
ZSkKK3sKKyAgICBMT0coR2FtZXBhZCwgIkdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlICVz
IiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNv
bnRhaW5zKGRldmljZUZpbGUpKTsKKworICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZp
Y2UgPSBtX2RldmljZU1hcC50YWtlKGRldmljZUZpbGUpOworICAgIHNpemVfdCBpbmRleCA9IG1f
c2xvdHMuZmluZChnYW1lcGFkRGV2aWNlKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQp
OworCisgICAgbV9zbG90c1tpbmRleF0uY2xlYXIoKTsKK30KKwordm9pZCBHYW1lcGFkc0d0azo6
dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAgQVNTRVJUKG1fc2xv
dHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgp
ICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNl
R3RrKiBnYW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKKyAgICAgICAgICAgIFJlZlB0
cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICghZ2Ft
ZXBhZCkKKyAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7CisKKyAg
ICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2Ft
ZXBhZERldmljZS0+aWQoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBh
ZERldmljZS0+dGltZXN0YW1wKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFk
RGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisgICAgICAg
ICAgICBnYW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1l
cGFkRGV2aWNlLT5idXR0b25zRGF0YSgpKTsKKworICAgICAgICAgICAgaW50by0+c2V0KGksIGdh
bWVwYWQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAg
ICB9Cit9CisKK3ZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQq
IHVkZXZDbGllbnQsIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgaWYgKCFpc0dhbWVwYWREZXZpY2UoZGV2aWNlKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR2FtZXBhZHNHdGsqIGdhbWVwYWRzR3RrID0gcmVpbnRlcnByZXRfY2FzdDxH
YW1lcGFkc0d0ayo+KGRhdGEpOworICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9t
VVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKKworICAgIGlmICgh
Z19zdHJjbXAwKGFjdGlvbiwgImFkZCIpKQorICAgICAgICBnYW1lcGFkc0d0ay0+cmVnaXN0ZXJE
ZXZpY2UoZGV2aWNlRmlsZSk7CisgICAgZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1v
dmUiKSkKKyAgICAgICAgZ2FtZXBhZHNHdGstPnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7
Cit9CisKK2dib29sZWFuIEdhbWVwYWRzR3RrOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2Uq
IGRldmljZSkKK3sKKyAgICBjb25zdCBnY2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2Vf
Z2V0X2RldmljZV9maWxlKGRldmljZSk7CisgICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdf
dWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGgoZGV2aWNlKTsKKyAgICBpZiAoIWRldmljZUZpbGUg
fHwgIXN5c2ZzUGF0aCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnX3VkZXZf
ZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNl
X2hhc19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVF9KT1lTVElDSyIpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICByZXR1cm4gZ19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rl
di9pbnB1dC9qcyIpOworfQorCit2b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRv
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAo
aW50by0+bGVuZ3RoKCkpKTsKKyAgICBnYW1lcGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRv
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQ
QUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk2Mzk1NzNiYjlhMGZkNDIzYzA2YzBjY2M4YTAwNjFlYmM3OGE0NjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuaCIKKworI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBpbnQgZ0xheW91dENvbHVtblNwYWNp
bmcgPSAxMjsKK3N0YXRpYyBjb25zdCBpbnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2Oworc3RhdGlj
IGNvbnN0IGludCBnQnV0dG9uU3BhY2luZyA9IDU7CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKKyAgICA6IG1fZGlhbG9nKDAp
CisgICAgLCBtX2xvZ2luRW50cnkoMCkKKyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwg
bV9yZW1lbWJlckNoZWNrQnV0dG9uKDApCisgICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisg
ICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZShtb2RlKQoreworfQorCitHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5k
b3csIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxT
dG9yYWdlTW9kZSBtb2RlKQorICAgIDogbV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKKyAgICAs
IG1fbG9naW5FbnRyeSgwKQorICAgICwgbV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVt
YmVyQ2hlY2tCdXR0b24oMCkKKyAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAgICAsIG1f
Y3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1vZGUpCit7CisgICAgR3RrV2lkZ2V0KiBjb250ZW50QXJl
YSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShHVEtfRElBTE9HKG1fZGlhbG9nKSk7Cisg
ICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoR1RLX0RJQUxP
RyhtX2RpYWxvZykpLCA1KTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goY29udGVu
dEFyZWEpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KKworICAgIEd0a1dpbmRvdyogd2luZG93
ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdp
bmRvdywgRkFMU0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAg
IGd0a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVO
VElDQVRJT04pOworCisgICAgaWYgKHBhcmVudFdpbmRvdykKKyAgICAgICAgZ3RrX3dpbmRvd19z
ZXRfdHJhbnNpZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRvdyk7CisKKyAgICBjcmVhdGVDb250
ZW50c0luQ29udGFpbmVyKGNvbnRlbnRBcmVhKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCitzdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gs
IC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVu
dExpc3QsIGJveCk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAy
LCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxl
KSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdz
KEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKworICAgIEd0a1dpZGdldCog
Zmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAg
ICBpbnQgcm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAg
ICAgICAgaWYgKHJvd051bWJlcikKKyAgICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RB
QkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZWNv
bmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAg
ICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNo
T3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFj
aChHVEtfVEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKKyAgICAgICAgICAgIDAsIHNl
Y29uZENvbHVtbldpZGdldCA/IDEgOiAyLAorICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1i
ZXIgKyAxLAorICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKKyAgICAg
ICAgICAgIDAsIDApOworCisgICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCisgICAgICAg
ICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENv
bHVtbldpZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsKKworICAgICAgICBm
aXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAg
ICAgICByb3dOdW1iZXIrKzsKKyAgICB9CisKKyAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKKwor
ICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0Us
IDApOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtX
aWRnZXQqIGJveCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0OworICAgIHZhX3N0
YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsKKworICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlk
X25ldygpOworICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwg
Z0xheW91dFJvd1NwYWNpbmcpOworICAgIGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJ
RChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOworICAgIGd0a19ncmlkX3NldF9jb2x1bW5faG9t
b2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCksIFRSVUUpOworCisgICAgR3RrV2lkZ2V0KiBmaXJzdENv
bHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgIGludCBy
b3dOdW1iZXIgPSAwOworICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgeworICAgICAgICBH
dGtXaWRnZXQqIHNlY29uZENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dp
ZGdldCopOworICAgICAgICBpbnQgZmlyc3RXaWRnZXRXaWR0aCA9IHNlY29uZENvbHVtbldpZGdl
dCA/IDEgOiAyOworCisgICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgZmly
c3RDb2x1bW5XaWRnZXQsIDAsIHJvd051bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwgMSk7CisgICAg
ICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOworICAg
ICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKKwor
ICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KSB7CisgICAgICAgICAgICBndGtfZ3JpZF9h
dHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlY29uZENvbHVtbldpZGdldCwgMSwgcm93TnVtYmVyLCAx
LCAxKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25kQ29sdW1uV2lk
Z2V0LCBUUlVFKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2Vjb25kQ29s
dW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0
ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisr
OworICAgIH0KKworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKK30KKyNlbmRpZgor
CitzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dMYWJlbChjb25zdCBjaGFyKiBsYWJlbFN0
cmluZywgaW50IGhvcml6b250YWxQYWRkaW5nID0gMCkKK3sKKyAgICBHdGtXaWRnZXQqIGxhYmVs
ID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0cmluZyk7CisgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVu
dChHVEtfTUlTQyhsYWJlbCksIDAsIDAuNSk7CisgICAgaWYgKGhvcml6b250YWxQYWRkaW5nKQor
ICAgICAgICBndGtfbWlzY19zZXRfcGFkZGluZyhHVEtfTUlTQyhsYWJlbCksIDAsIGhvcml6b250
YWxQYWRkaW5nKTsKKyAgICByZXR1cm4gbGFiZWw7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGNy
ZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdldCoqIG1lbWJlcikKK3sKKyAgICAqbWVtYmVyID0gZ3Rr
X2VudHJ5X25ldygpOworICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VO
VFJZKCptZW1iZXIpLCBUUlVFKTsKKyAgICByZXR1cm4gKm1lbWJlcjsKK30KKwordm9pZCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQq
IGNvbnRhaW5lcikKK3sKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCog
aEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworI2Vsc2UK
KyAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpP
TlRBTCwgZ0xheW91dENvbHVtblNwYWNpbmcpOworI2VuZGlmCisgICAgZ3RrX2NvbnRhaW5lcl9z
ZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaEJveCksIGdCdXR0b25TcGFjaW5nKTsKKyAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5lciksIGhCb3gpOworCisg
ICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19E
SUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlz
Y19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDApOworICAgIGd0a19ib3hfcGFj
a19zdGFydChHVEtfQk9YKGhCb3gpLCBpY29uLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgR093
blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJkdXBfcHJpbnRmKAorICAgICAgICBfKCJUaGUgc2l0ZSAl
czolaSByZXF1ZXN0cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCIpLAorICAgICAgICBtX2NoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9j
aGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKSk7CisKKyAgICBtX3JlbWVtYmVyQ2hl
Y2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJl
ciBwYXNzd29yZCIpKTsKKyAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZ3Rr
X2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOwor
ICAgIGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgbV9j
cmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7CisKKwor
ICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhlIGJ1dHRvbiBib3ggaGVyZSBtYW51YWxseSBpbnN0ZWFk
IG9mIHVzaW5nIHRoZSByZWFkeS1tYWRlIEd0a0RpYWxvZyBidXR0b25zLgorICAgIC8vIFRoaXMg
aXMgc28gdGhhdCB3ZSBjYW4gc2hhcmUgdGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhh
dCBkbyBub3QgdXNlIEd0a0RpYWxvZy4KKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0
a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2hidXR0b25fYm94X25ldygpOworI2Vsc2UKKyAgICBH
dGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0a19idXR0b25fYm94X25ldyhHVEtfT1JJRU5UQVRJT05f
SE9SSVpPTlRBTCk7CisjZW5kaWYKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0
dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19idXR0b25fYm94X3NldF9sYXlvdXQo
R1RLX0JVVFRPTl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRPTkJPWF9FTkQpOworCisgICAgbV9v
a2F5QnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAg
IG1fY2FuY2VsQnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FO
Q0VMKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX2NhbmNl
bEJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KGJ1dHRvbkJveCksIG1fb2theUJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9va2F5QnV0dG9uLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NhbmNlbEJ1dHRvbiwg
ImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOworCisg
ICAgU3RyaW5nIHJlYWxtID0gbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsK
KyAgICBpZiAoIXJlYWxtLmlzRW1wdHkoKSkgeworICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0
SW5Cb3goaEJveCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwg
Z0xheW91dFJvd1NwYWNpbmcpLCAwLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygi
U2VydmVyIG1lc3NhZ2U6IikpLCBjcmVhdGVEaWFsb2dMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgp
KSwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRl
RGlhbG9nRW50cnkoJm1fbG9naW5FbnRyeSksCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJl
bChfKCJQYXNzd29yZDoiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAor
ICAgICAgICAgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uLCAwLAorICAgICAgICAgICAgYnV0dG9u
Qm94LCAwLCAwKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJ
bkJveChoQm94LAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBn
TGF5b3V0Um93U3BhY2luZyksIDAsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJV
c2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAorICAgICAgICAg
ICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgm
bV9wYXNzd29yZEVudHJ5KSwKKyAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgMCwg
MCwKKyAgICAgICAgICAgIGJ1dHRvbkJveCwgMCwgMCk7CisgICAgfQorCisgICAgZ3RrX2VudHJ5
X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7CisgICAg
Y29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IG1fY2hh
bGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOworICAgIGlmICghY3JlZGVudGlhbEZyb21QZXJz
aXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdU
S19FTlRSWShtX2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnVz
ZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRS
WShtX3Bhc3N3b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnBhc3N3
b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3Rp
dmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7CisgICAg
fQorfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKK3sKKyAgICBndGtf
d2lkZ2V0X3NldF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24sIFRSVUUpOworICAgIGd0a193aWRn
ZXRfZ3JhYl9kZWZhdWx0KG1fb2theUJ1dHRvbik7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3Vz
KG1fbG9naW5FbnRyeSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsKK30K
Kwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCit7CisgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRl
bnRpYWwpCit7CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2NoYWxs
ZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0
aG91dENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGFsbGVu
Z2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxlbmdl
LCBjcmVkZW50aWFsKTsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YnV0dG9u
Q2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyogZGlhbG9nKQoreworICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICBpZiAoYnV0dG9u
ID09IGRpYWxvZy0+bV9va2F5QnV0dG9uKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1l
ID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRyeSkpOwor
ICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5U
UlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKKyAgICAgICAgYm9vbCByZW1lbWJlclBhc3N3
b3JkID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihkaWFs
b2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpOworICAgICAgICBDcmVkZW50aWFsUGVyc2lzdGVu
Y2UgcGVyc2lzdGVuY2U7CisKKyAgICAgICAgaWYgKHJlbWVtYmVyUGFzc3dvcmQgJiYgZGlhbG9n
LT5tX2NyZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlKQorICAg
ICAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlRm9yU2Vzc2lvbjsKKworICAgICAgICBjcmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJpbmc6
OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNpc3Rl
bmNlKTsKKyAgICB9CisKKyAgICBkaWFsb2ctPmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsKKyAg
ICBkaWFsb2ctPmRlc3Ryb3koKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3
N2M4MWFkZmVmYmQxOTI2OTc1OWE5ODcxNjYxZWY0ODE1YmEzNmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKKyNkZWZpbmUgR3RrQXV0aGVudGljYXRpb25E
aWFsb2dfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRl
ICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGlj
OgorICAgIGVudW0gQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIHsKKyAgICAgICAgQWxsb3dQZXJzaXN0
ZW50U3RvcmFnZSwgLy8gVGhlIHVzZXIgaXMgYXNrZWQgd2hldGhlciB0byBzdG9yZSBjcmVkZW50
aWFsIGluZm9ybWF0aW9uLgorICAgICAgICBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlIC8vIENy
ZWRlbnRpYWwgaW5mb3JtYXRpb24gaXMgb25seSBrZXB0IGluIHRoZSBzZXNzaW9uLgorICAgIH07
CisKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFs
b2coR3RrV2luZG93KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFs
U3RvcmFnZU1vZGUpOworICAgIHZpcnR1YWwgfkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCkgeyB9
CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250YWluZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3QgQ3JlZGVudGlhbCYpOworICAgIEd0
a1dpZGdldCogbV9kaWFsb2c7CisgICAgR3RrV2lkZ2V0KiBtX2xvZ2luRW50cnk7CisgICAgR3Rr
V2lkZ2V0KiBtX3Bhc3N3b3JkRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hlY2tC
dXR0b247CisgICAgR3RrV2lkZ2V0KiBtX29rYXlCdXR0b247CisgICAgR3RrV2lkZ2V0KiBtX2Nh
bmNlbEJ1dHRvbjsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBidXR0b25DbGlja2VkQ2Fs
bGJhY2soR3RrV2lkZ2V0KiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqKTsKKyAgICBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUg
bV9jcmVkZW50aWFsU3RvcmFnZU1vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a0NsaWNrQ291bnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRmYjgzYjg5NGQ3ZGQ1MTJkM2ZhMDEyMjE2
NDY5NDE2MjI5M2IxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
Q2xpY2tDb3VudGVyLmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a0NsaWNrQ291bnRlci5oIgorCisjaW5j
bHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHdGtDbGlja0NvdW50ZXI6Okd0a0NsaWNrQ291bnRlcigpCisgICAgOiBtX2N1
cnJlbnRDbGlja0NvdW50KDApCisgICAgLCBtX3ByZXZpb3VzQ2xpY2tCdXR0b24oMCkKKyAgICAs
IG1fcHJldmlvdXNDbGlja1RpbWUoMCkKK3sKK30KKwordm9pZCBHdGtDbGlja0NvdW50ZXI6OnJl
c2V0KCkKK3sKKyAgICBtX2N1cnJlbnRDbGlja0NvdW50ID0gMDsKKyAgICBtX3ByZXZpb3VzQ2xp
Y2tQb2ludCA9IEludFBvaW50KCk7CisgICAgbV9wcmV2aW91c0NsaWNrVGltZSA9IDA7CisgICAg
bV9wcmV2aW91c0NsaWNrQnV0dG9uID0gMDsKK30KKworYm9vbCBHdGtDbGlja0NvdW50ZXI6OnNo
b3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCit7Cisg
ICAgLy8gRm9yIGRvdWJsZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5vcm1h
bCBidXR0b24gcHJlc3MgZXZlbnQKKyAgICAvLyBhbmQgYSBzcGVjaWZpYyB0eXBlIChsaWtlIEdE
S18yQlVUVE9OX1BSRVNTKS4gSWYgd2UgZGV0ZWN0IGEgc3BlY2lhbCBwcmVzcworICAgIC8vIGNv
bWluZyB1cCwgaWdub3JlIHRoaXMgZXZlbnQgYXMgaXQgY2VydGFpbmx5IGdlbmVyYXRlZCB0aGUg
ZG91YmxlIG9yIHRyaXBsZQorICAgIC8vIGNsaWNrLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90IGVh
dGluZyB0aGlzIGV2ZW50IGlzIHR3byBET00gYnV0dG9uIHByZXNzIGV2ZW50cworICAgIC8vIGFy
ZSBnZW5lcmF0ZWQuCisgICAgR093blB0cjxHZGtFdmVudD4gbmV4dEV2ZW50KGdka19ldmVudF9w
ZWVrKCkpOworICAgIGlmICghbmV4dEV2ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0RXZlbnQt
PmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBndWludDMyIGdldEV2ZW50VGltZShHZGtFdmVu
dCogZXZlbnQpCit7CisgICAgZ3VpbnQzMiB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50
KTsKKyAgICBpZiAodGltZSkKKyAgICAgICAgcmV0dXJuIHRpbWU7CisKKyAgICAvLyBSZWFsIGV2
ZW50cyBhbHdheXMgaGF2ZSBhIG5vbi16ZXJvIHRpbWUsIGJ1dCBldmVudHMgc3ludGhlc2l6ZWQK
KyAgICAvLyBieSB0aGUgRFJUIGRvIG5vdCBhbmQgd2UgbXVzdCBjYWxjdWxhdGUgYSB0aW1lIG1h
bnVhbGx5LiBUaGlzIHRpbWUKKyAgICAvLyBpcyBub3QgY2FsY3VsYXRlZCBpbiB0aGUgRFJULCBi
ZWNhdXNlIEdUSysgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGgKKyAgICAvLyBhbnl0aGluZyBvdGhl
ciB0aGFuIEdES19DVVJSRU5UX1RJTUUgb24gc3ludGhlc2l6ZWQgZXZlbnRzLgorICAgIEdUaW1l
VmFsIHRpbWVWYWx1ZTsKKyAgICBnX2dldF9jdXJyZW50X3RpbWUoJnRpbWVWYWx1ZSk7CisgICAg
cmV0dXJuICh0aW1lVmFsdWUudHZfc2VjICogMTAwMCkgKyAodGltZVZhbHVlLnR2X3VzZWMgLyAx
MDAwKTsKK30KKworaW50IEd0a0NsaWNrQ291bnRlcjo6Y2xpY2tDb3VudEZvckdka0J1dHRvbkV2
ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCit7Cisg
ICAgZ2ludCBkb3VibGVDbGlja0Rpc3RhbmNlID0gMjUwOworICAgIGdpbnQgZG91YmxlQ2xpY2tU
aW1lID0gNTsKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2Zv
cl9zY3JlZW4oZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkpOworICAgIGdfb2JqZWN0X2dl
dChzZXR0aW5ncywKKyAgICAgICAgImd0ay1kb3VibGUtY2xpY2stZGlzdGFuY2UiLCAmZG91Ymxl
Q2xpY2tEaXN0YW5jZSwKKyAgICAgICAgImd0ay1kb3VibGUtY2xpY2stdGltZSIsICZkb3VibGVD
bGlja1RpbWUsIDApOworCisgICAgLy8gR1RLKyBvbmx5IGNvdW50cyB1cCB0byB0cmlwbGUgY2xp
Y2tzLCBidXQgV2ViQ29yZSB3YW50cyB0byBrbm93IGFib3V0CisgICAgLy8gcXVhZHJ1cGxlIGNs
aWNrcywgcXVpbnR1cGxlIGNsaWNrcywgYWQgaW5maW5pdHVtLiBIZXJlLCB3ZSByZXBsaWNhdGUg
dGhlCisgICAgLy8gR0RLIGxvZ2ljIGZvciBjb3VudGluZyBjbGlja3MuCisgICAgR2RrRXZlbnQq
IGV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihidXR0b25FdmVudCkpOworICAgIGd1
aW50MzIgZXZlbnRUaW1lID0gZ2V0RXZlbnRUaW1lKGV2ZW50KTsKKworICAgIGlmICgoZXZlbnQt
PnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05f
UFJFU1MpCisgICAgICAgIHx8ICgoYWJzKGJ1dHRvbkV2ZW50LT54IC0gbV9wcmV2aW91c0NsaWNr
UG9pbnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAoYWJzKGJ1
dHRvbkV2ZW50LT55IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJsZUNsaWNrRGlz
dGFuY2UpCisgICAgICAgICAgICAmJiAoZXZlbnRUaW1lIC0gbV9wcmV2aW91c0NsaWNrVGltZSA8
IHN0YXRpY19jYXN0PGd1aW50Pihkb3VibGVDbGlja1RpbWUpKQorICAgICAgICAgICAgJiYgKGJ1
dHRvbkV2ZW50LT5idXR0b24gPT0gbV9wcmV2aW91c0NsaWNrQnV0dG9uKSkpCisgICAgICAgIG1f
Y3VycmVudENsaWNrQ291bnQrKzsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudENsaWNrQ291
bnQgPSAxOworCisgICAgZ2RvdWJsZSB4LCB5OworICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2
ZW50LCAmeCwgJnkpOworICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoeCwgeSk7
CisgICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gYnV0dG9uRXZlbnQtPmJ1dHRvbjsKKyAgICBt
X3ByZXZpb3VzQ2xpY2tUaW1lID0gZXZlbnRUaW1lOworCisgICAgcmV0dXJuIG1fY3VycmVudENs
aWNrQ291bnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a0NsaWNrQ291bnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyYmQ0MzFmZmIzZjU4OWYxZWFiYmJjOTk3NGFi
NzQ5MzEzMjhlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0Ns
aWNrQ291bnRlci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5k
ZWYgR3RrQ2xpY2tDb3VudGVyX2gKKyNkZWZpbmUgR3RrQ2xpY2tDb3VudGVyX2gKKworI2luY2x1
ZGUgIkludFBvaW50LmgiCisKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVu
dEJ1dHRvbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtDbGlja0NvdW50ZXIg
eworcHVibGljOgorICAgIEd0a0NsaWNrQ291bnRlcigpOworICAgIHZvaWQgcmVzZXQoKTsKKyAg
ICBib29sIHNob3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiopOworICAgIGlu
dCBjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24q
KTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9jdXJyZW50Q2xpY2tDb3VudDsKKyAgICBJbnRQb2lu
dCBtX3ByZXZpb3VzQ2xpY2tQb2ludDsKKyAgICB1bnNpZ25lZCBtX3ByZXZpb3VzQ2xpY2tCdXR0
b247CisgICAgaW50IG1fcHJldmlvdXNDbGlja1RpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0Ry
YWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BI
ZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNmQyYWVlOWUzODg5MmJhY2E5ZWZjY2NlYTlkZmZhZWUy
ZDkzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmRE
cm9wSGVscGVyLmNwcApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtEcmFnQW5kRHJvcEhlbHBlci5oIgorCisjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNs
dWRlICJHdGtVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVk
ZSAiUGFzdGVib2FyZEhlbHBlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0IHsKKyAgICBEcm9wcGluZ0NvbnRl
eHQoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikK
KyAgICAgICAgOiBnZGtDb250ZXh0KGdka0NvbnRleHQpCisgICAgICAgICwgZGF0YU9iamVjdChE
YXRhT2JqZWN0R3RrOjpjcmVhdGUoKSkKKyAgICAgICAgLCBsYXN0TW90aW9uUG9zaXRpb24ocG9z
aXRpb24pCisgICAgICAgICwgZHJvcEhhcHBlbmVkKGZhbHNlKQorICAgICAgICAsIGV4aXRlZENh
bGxiYWNrKDApCisgICAgeworICAgIH0KKworICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0
OworICAgIFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OworICAgIFdl
YkNvcmU6OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBpbnQgcGVuZGluZ0RhdGFS
ZXF1ZXN0czsKKyAgICBib29sIGRyb3BIYXBwZW5lZDsKKyAgICBEcmFnRXhpdGVkQ2FsbGJhY2sg
ZXhpdGVkQ2FsbGJhY2s7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBE
cm9wcGluZ0NvbnRleHQqPiBEcm9wcGluZ0NvbnRleHRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8R2Rr
RHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBEcmFnZ2luZ0RhdGFPYmplY3Rz
TWFwOworCitHdGtEcmFnQW5kRHJvcEhlbHBlcjo6fkd0a0RyYWdBbmREcm9wSGVscGVyKCkKK3sK
KyAgICBkZWxldGVBbGxWYWx1ZXMobV9kcm9wcGluZ0NvbnRleHRzKTsKK30KKworYm9vbCBHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCogZHJhZ0NvbnRl
eHQpCit7CisgICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBt
X2RyYWdnaW5nRGF0YU9iamVjdHMuZmluZChkcmFnQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9y
ID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9kcmFnZ2luZ0RhdGFPYmplY3RzLnJlbW92ZShpdGVyYXRvcik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERyYWdEYXRh
KEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRh
LCBndWludCBpbmZvKQoreworICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0
ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0
ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxl
Y3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7Cit9
CisKK3N0cnVjdCBIYW5kbGVEcmFnTGF0ZXJEYXRhIHsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGNv
bnRleHQ7CisgICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIqIGdsdWU7Cit9OworCitzdGF0aWMgZ2Jv
b2xlYW4gaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayhIYW5kbGVEcmFnTGF0ZXJEYXRhKiBk
YXRhKQoreworICAgIGRhdGEtPmdsdWUtPmhhbmRsZURyYWdMZWF2ZUxhdGVyKGRhdGEtPmNvbnRl
eHQpOworICAgIGRlbGV0ZSBkYXRhOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBpbmdDb250ZXh0KiBj
b250ZXh0KQoreworICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBt
X2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0LT5nZGtDb250ZXh0KTsKKyAgICBpZiAoaXRl
cmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBJZiB0aGUgdmlldyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0aGVyZSBh
cmUgc3RpbGwgcGVuZGluZyBkYXRhKQorICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1cGRhdGUgaXQg
d2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZy4KKyAgICBpZiAoY29udGV4dC0+cGVuZGlu
Z0RhdGFSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uID0gY29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOworICAgIERyYWdEYXRhIGRyYWdE
YXRhKGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLAorICAgICAgICBjb252ZXJ0
V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgIERy
YWdPcGVyYXRpb25Ob25lKTsKKyAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dpZGdldCwg
JmRyYWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOworCisgICAgbV9kcm9wcGluZ0NvbnRl
eHRzLnJlbW92ZShpdGVyYXRvcik7CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisKK3ZvaWQgR3Rr
RHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29u
dGV4dCwgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrKQoreworICAgIERyb3BwaW5n
Q29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChn
ZGtDb250ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJl
IGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBkcmFn
LWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBl
biBhZnRlcgorICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8g
aGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCisgICAgSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0
YSA9IG5ldyBIYW5kbGVEcmFnTGF0ZXJEYXRhOworICAgIGRhdGEtPmNvbnRleHQgPSBpdGVyYXRv
ci0+dmFsdWU7CisgICAgZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxs
YmFjazsKKyAgICBkYXRhLT5nbHVlID0gdGhpczsKKyAgICBnX3RpbWVvdXRfYWRkKDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2spLCBk
YXRhKTsKK30KKworc3RhdGljIHZvaWQgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoRHJvcHBpbmdD
b250ZXh0KiBkcm9wQ29udGV4dCwgR3RrV2lkZ2V0KiB3aWRnZXQsIGd1aW50IHRpbWUpCit7Cisg
ICAgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQgPSBkcm9wQ29udGV4dC0+Z2RrQ29udGV4dDsK
KyAgICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZHJvcEF0b21zRm9yQ29udGV4dCh3aWRnZXQsIGdk
a0NvbnRleHQpKTsKKyAgICBkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2Vw
dGFibGVUYXJnZXRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjY2VwdGFi
bGVUYXJnZXRzLnNpemUoKTsgaSsrKQorICAgICAgICBndGtfZHJhZ19nZXRfZGF0YSh3aWRnZXQs
IGdka0NvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0aW1lKTsKK30KKworRGF0YU9i
amVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkK
K3sKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IDA7CisgICAgRHJvcHBp
bmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5k
KGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkp
IHsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gbmV3IERyb3BwaW5nQ29udGV4dChjb250ZXh0
LCBwb3NpdGlvbik7CisgICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJv
cHBpbmdDb250ZXh0KTsKKyAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdD
b250ZXh0LCBtX3dpZGdldCwgdGltZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHJvcHBpbmdD
b250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOworICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RN
b3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIH0KKworICAgIC8vIERvbid0IHNlbmQgYW55
IGRyYWcgaW5mb3JtYXRpb24gdG8gV2ViQ29yZSB1bnRpbCB3ZSd2ZSByZXRyaWV2ZWQgYWxsCisg
ICAgLy8gdGhlIGRhdGEgZm9yIHRoaXMgZHJhZyBvcGVyYXRpb24uIE90aGVyd2lzZSB3ZSdkIGhh
dmUgdG8gYmxvY2sgdG8gd2FpdAorICAgIC8vIGZvciB0aGUgZHJhZydzIGRhdGEuCisgICAgQVNT
RVJUKGRyb3BwaW5nQ29udGV4dCk7CisgICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0Rh
dGFSZXF1ZXN0cyA+IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGRyb3BwaW5n
Q29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKK30KKworRGF0YU9iamVjdEd0ayogR3RrRHJhZ0Fu
ZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQqIGNvbnRl
eHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8sIEludFBv
aW50JiBwb3NpdGlvbikKK3sKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJh
dG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9y
ID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBE
cm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICBk
cm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKKyAgICBQYXN0ZWJvYXJkSGVs
cGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0
YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkp
OworCisgICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIGRyYWctZGF0
YS1yZWNlaXZlZCBzaWduYWwgYXJlIHNvbWV0aW1lcworICAgIC8vIGluYWNjdXJhdGUgaW4gRFJU
LCBzbyB1c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBldmVudC4KKyAgICBw
b3NpdGlvbiA9IGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOworCisgICAgLy8g
SWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1ZXN0cywgc3RhcnQgc2VuZGluZyBkcmFn
Z2luZyBkYXRhIHRvIFdlYkNvcmUuCisgICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9i
amVjdC5nZXQoKTsKK30KKworRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6Omhh
bmRsZURyYWdEcm9wKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQoreworICAgIERyb3BwaW5nQ29u
dGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250
ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0g
aXRlcmF0b3ItPnZhbHVlOworICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1
ZTsKKworICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Cit9CisK
K3ZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OnN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiBj
b250ZXh0LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQoreworICAgIG1fZHJhZ2dpbmdEYXRh
T2JqZWN0cy5zZXQoY29udGV4dCwgZGF0YU9iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNTRiMDJjNGI3YTNmODczMDEzNWNkZjYxNjRhZTA2OWZhZTNkNTk3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxpYSBTLkwuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEd0a0RyYWdBbmREcm9wSGVscGVy
X2gKKyNkZWZpbmUgR3RrRHJhZ0FuZERyb3BIZWxwZXJfaAorCisjaW5jbHVkZSAiRGF0YU9iamVj
dEd0ay5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBEcm9wcGluZ0NvbnRleHQ7CitjbGFzcyBEcmFnRGF0YTsKKwor
dHlwZWRlZiB2b2lkICgqRHJhZ0V4aXRlZENhbGxiYWNrKShHdGtXaWRnZXQqLCBEcmFnRGF0YSos
IGJvb2wgZHJvcEhhcHBlbmVkKTsKKworY2xhc3MgR3RrRHJhZ0FuZERyb3BIZWxwZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0RyYWdBbmREcm9wSGVscGVyKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEd0a0RyYWdBbmREcm9wSGVscGVyKCkK
KyAgICAgICAgOiBtX3dpZGdldCgwKQorICAgIHsKKyAgICB9CisgICAgfkd0a0RyYWdBbmREcm9w
SGVscGVyKCk7CisKKyAgICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqIHdpZGdldCkgeyBtX3dp
ZGdldCA9IHdpZGdldDsgfQorICAgIGJvb2wgaGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCop
OworICAgIHZvaWQgaGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqLCBHdGtTZWxlY3Rp
b25EYXRhKiwgZ3VpbnQgaW5mbyk7CisgICAgdm9pZCBoYW5kbGVEcmFnTGVhdmUoR2RrRHJhZ0Nv
bnRleHQqLCBEcmFnRXhpdGVkQ2FsbGJhY2spOworICAgIHZvaWQgaGFuZGxlRHJhZ0xlYXZlTGF0
ZXIoRHJvcHBpbmdDb250ZXh0Kik7CisgICAgRGF0YU9iamVjdEd0ayogaGFuZGxlRHJhZ01vdGlv
bihHZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgdW5zaWduZWQgdGltZSk7CisgICAg
RGF0YU9iamVjdEd0ayogaGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChHZGtEcmFnQ29udGV4dCosIEd0
a1NlbGVjdGlvbkRhdGEqLCB1bnNpZ25lZCBpbmZvLCBJbnRQb2ludCYpOworICAgIERhdGFPYmpl
Y3RHdGsqIGhhbmRsZURyYWdEcm9wKEdka0RyYWdDb250ZXh0Kik7CisgICAgdm9pZCBzdGFydGVk
RHJhZyhHZGtEcmFnQ29udGV4dCosIERhdGFPYmplY3RHdGsqKTsKKworcHJpdmF0ZToKKyAgICBH
dGtXaWRnZXQqIG1fd2lkZ2V0OworICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9wcGlu
Z0NvbnRleHQqPiBtX2Ryb3BwaW5nQ29udGV4dHM7CisgICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4
dCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+IG1fZHJhZ2dpbmdEYXRhT2JqZWN0czsKK307CisK
K30KKworI2VuZGlmIC8vIERhdGFPYmplY3RHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a0lucHV0TWV0aG9kRmlsdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDkwZmJmM2Q4NTQ2ODY2NjhlYzBk
OGE0NGMwZjdkYzVkZTQ5NzRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrSW5wdXRNZXRob2RGaWx0ZXIu
aCIKKworI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworLy8gVGhlIFdpbmRvd3MgY29tcG9zaXRpb24ga2V5
IGV2ZW50IGNvZGUgaXMgMjk5IG9yIFZLX1BST0NFU1NLRVkuIFdlIG5lZWQgdG8KKy8vIGVtaXQg
dGhpcyBjb2RlIGZvciB3ZWIgY29tcGF0aWJpbGl0eSByZWFzb25zIHdoZW4ga2V5IGV2ZW50cyB0
cmlnZ2VyCisvLyBjb21wb3NpdGlvbiByZXN1bHRzLiBHREsgZG9lc24ndCBoYXZlIGFuIGVxdWl2
YWxlbnQsIHNvIHdlIHNlbmQgVm9pZFN5bWJvbAorLy8gaGVyZSB0byBXZWJDb3JlLiBQbGF0Zm9y
bUtleUV2ZW50IGtub3dzIHRvIGNvbnZlcnQgdGhpcyBjb2RlIGludG8KKy8vIFZLX1BST0NFU1NL
RVkuCitjb25zdCBpbnQgZ0NvbXBvc2l0aW9uRXZlbnRLZXlDb2RlID0gR0RLX0tFWV9Wb2lkU3lt
Ym9sOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGhhbmRsZUNvbW1pdENh
bGxiYWNrKEd0a0lNQ29udGV4dCosIGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nLCBHdGtJ
bnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlQ29tbWl0KGNv
bXBvc2l0aW9uU3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdFN0YXJ0Q2Fs
bGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAg
ICBmaWx0ZXItPmhhbmRsZVByZWVkaXRTdGFydCgpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVQ
cmVlZGl0Q2hhbmdlZENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVy
KiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOworfQorCitz
dGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5w
dXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRFbmQo
KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlV2lkZ2V0UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdl
dCwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworICAgIEFTU0VSVCh3aW5kb3cpOwor
ICAgIGd0a19pbV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KGZpbHRlci0+Y29udGV4dCgpLCB3
aW5kb3cpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRXaWRnZXQoR3RrV2lk
Z2V0KiB3aWRnZXQpCit7CisgICAgQVNTRVJUKCFtX3dpZGdldCk7CisKKyAgICBtX3dpZGdldCA9
IHdpZGdldDsKKyAgICBpZiAoZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2lkZ2V0KSkKKyAgICAg
ICAgaGFuZGxlV2lkZ2V0UmVhbGl6ZShtX3dpZGdldCwgdGhpcyk7CisgICAgZWxzZQorICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKHdpZGdldCwgInJlYWxpemUiLCBHX0NBTExCQUNLKGhh
bmRsZVdpZGdldFJlYWxpemUpLCB0aGlzKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRl
cjo6c2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBjdXJzb3JSZWN0KQoreworICAgIC8vIERv
bid0IG1vdmUgdGhlIHdpbmRvdyB1bmxlc3MgdGhlIGN1cnNvciBhY3R1YWxseSBtb3ZlcyBtb3Jl
IHRoYW4gMTAKKyAgICAvLyBwaXhlbHMuIFRoaXMgcHJldmVudHMgdXMgZnJvbSBtYWtpbmcgdGhl
IHdpbmRvdyBmbGFzaCBkdXJpbmcgbWlub3IKKyAgICAvLyBjdXJzb3IgYWRqdXN0bWVudHMuCisg
ICAgc3RhdGljIGNvbnN0IGludCB3aW5kb3dNb3ZlbWVudFRocmVzaG9sZCA9IDEwICogMTA7Cisg
ICAgaWYgKGN1cnNvclJlY3QubG9jYXRpb24oKS5kaXN0YW5jZVNxdWFyZWRUb1BvaW50KG1fbGFz
dENhcmVMb2NhdGlvbikgPCB3aW5kb3dNb3ZlbWVudFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9sYXN0Q2FyZUxvY2F0aW9uID0gY3Vyc29yUmVjdC5sb2NhdGlvbigpOworICAg
IEludFJlY3QgdHJhbnNsYXRlZFJlY3QgPSBjdXJzb3JSZWN0OworCisgICAgQVNTRVJUKG1fd2lk
Z2V0KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGlvbihtX3dpZGdldCwgJmFsbG9jYXRpb24pOworICAgIHRyYW5zbGF0ZWRSZWN0Lm1v
dmUoYWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnkpOworCisgICAgR2RrUmVjdGFuZ2xlIGdka0N1
cnNvclJlY3QgPSBjdXJzb3JSZWN0OworICAgIGd0a19pbV9jb250ZXh0X3NldF9jdXJzb3JfbG9j
YXRpb24obV9jb250ZXh0LmdldCgpLCAmZ2RrQ3Vyc29yUmVjdCk7Cit9CisKK0d0a0lucHV0TWV0
aG9kRmlsdGVyOjpHdGtJbnB1dE1ldGhvZEZpbHRlcigpCisgICAgOiBtX2N1cnNvck9mZnNldCgw
KQorICAgICwgbV9jb250ZXh0KGFkb3B0R1JlZihndGtfaW1fbXVsdGljb250ZXh0X25ldygpKSkK
KyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX2VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkoZmFsc2UpCisgICAgLCBtX2ZpbHRlcmluZ0tleUV2ZW50KGZhbHNl
KQorICAgICwgbV9wcmVlZGl0Q2hhbmdlZChmYWxzZSkKKyAgICAsIG1fcHJldmVudE5leHRDb21t
aXQoZmFsc2UpCisgICAgLCBtX2p1c3RTZW50RmFrZUtleVVwKGZhbHNlKQorICAgICwgbV9sYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzKEdES19LRVlfVm9pZFN5bWJvbCkKK3sK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgImNvbW1pdCIsIEdfQ0FMTEJB
Q0soaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
Y29udGV4dC5nZXQoKSwgInByZWVkaXQtc3RhcnQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRT
dGFydENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0
KCksICJwcmVlZGl0LWNoYW5nZWQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInBy
ZWVkaXQtZW5kIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsK
K30KKworR3RrSW5wdXRNZXRob2RGaWx0ZXI6On5HdGtJbnB1dE1ldGhvZEZpbHRlcigpCit7Cisg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayksIHRoaXMp
OworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250
ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0RW5kQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV93
aWRnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVdpZGdldFJlYWxpemUpLCB0aGlz
KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKyAgICBpZiAoZW5hYmxlZCkKKyAgICAg
ICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4obV9jb250ZXh0LmdldCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOworfQorCiti
b29sIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSogZXZl
bnQpCit7CisgICAgaWYgKCFjYW5FZGl0KCkgfHwgIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
IHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7CisKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gZmFs
c2U7CisgICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IHRydWU7CisKKyAgICB1bnNpZ25lZCBsYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVz
c0NvZGVXaXRoTm9SZXN1bHRzOworICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5v
UmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKKworICAgIGJvb2wgZmlsdGVyZWQgPSBndGtf
aW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7CisgICAg
bV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOworCisgICAgYm9vbCBqdXN0U2VudEZha2VLZXlV
cCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNl
OworICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JF
TEVBU0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gU2ltcGxlIGlucHV0IG1ldGhv
ZHMgd29yayBzdWNoIHRoYXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZQorICAgIC8v
IGNvbW1pdCBzaWduYWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25zIGFuZCB0cmVhdCB0aGVt
IGFzIG5vcm1hbAorICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0IHN0cmlu
ZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KKyAgICBpZiAoZmlsdGVyZWQgJiYgIW1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uLmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kU2ltcGxlS2V5
RXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24pOworICAgICAgICBtX2NvbmZpcm1l
ZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1MpIHsKKyAg
ICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRydWU7Cisg
ICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBldmVu
dC0+a2V5dmFsOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHJlc3VsdCA9IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoZXZlbnQp
OworICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAgICAgIG1f
Y29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZmlsdGVyZWQgYSBr
ZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3VwcHJlc3MKKyAgICAv
LyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9pZCBjb25mdXNpbmcg
dGhlIHdlYiBjb250ZW50LgorICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
JiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBldmVudC0+a2V5dmFs
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBrZXlzdHJv
a2Ugd2FzIGVpdGhlcjoKKyAgICAvLyAxLiBVbmZpbHRlcmVkCisgICAgLy8gMi4gQSBmaWx0ZXJl
ZCBrZXl1cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRvZXNuJ3QK
KyAgICAvLyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBjb21wb3Np
dGlvbiByZXN1bHRzIGJlZm9yZQorICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCisgICAgLy8gQm90
aCBtaWdodCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgorICAgIC8vCisgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUgdGhl
IGV2ZW50CisgICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0IHdheS4g
Rm9yIGV4YW1wbGUgKHRha2VuIGZyb20KKyAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNlKSwgdGhl
IGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKKyAgICAvLyB3aGVu
IHlvdSBwcmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgorICAgIC8vICAxLiBrZXlkb3duICdh
JyAoZmlsdGVyZWQpCisgICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKKyAgICAvLyAg
My4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQorICAgIC8vICA0LiBrZXlkb3duIEJhY2tzcGFjZSAo
dW5maWx0ZXJlZCkKKyAgICAvLyAgNS4gY29tbWl0ICJhIgorICAgIC8vICA2LiBwcmVlZGl0IGVu
ZAorICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIGNv
bmZpcm1Db21wb3NpdGlvbigpOworICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQorICAgICAgICB1
cGRhdGVQcmVlZGl0KCk7CisgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7Cit9
CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKQor
eworICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEgc2VsZWN0
aW9uIGNoYW5nZSwgd2hpY2gKKyAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53YW50ZWQg
YWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVudAorICAgIC8vIHRoYXQgYnkgc2V0
dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCisgICAgaWYgKG1fY29tcG9z
aW5nVGV4dEN1cnJlbnRseSkKKyAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOwor
ICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOworICAgIGNhbmNlbENvbnRleHRD
b21wb3NpdGlvbigpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNldENvbnRl
eHQoKQoreworCisgICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJDb3JlIGNv
bXBvc2l0aW9uIGhlcmUsIGluIGNhc2UgdGhlCisgICAgLy8gY29tcG9zaXRpb24gd2FzIHNldCBv
dXRzaWRlIHRoZSBHVEsrIElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgorICAgIC8vIGluc3Rh
bmNlKSBhbmQgd2UgYXJlbid0IHRyYWNraW5nIGl0LgorICAgIGNhbmNlbEN1cnJlbnRDb21wb3Np
dGlvbigpOworCisgICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBjYW5jZWxD
b250ZXh0Q29tcG9zaXRpb24oKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6Y2Fu
Y2VsQ29udGV4dENvbXBvc2l0aW9uKCkKK3sKKyAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gIW1f
cHJlZWRpdC5pc0VtcHR5KCk7CisKKyAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2NvbnRleHQu
Z2V0KCkpOworCisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAgbV9q
dXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOworICAg
IG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBHdGtJbnB1dE1l
dGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZEluKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0cnVlOwor
ICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQoreworICAgIGlmICghbV9l
bmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb21wb3NpbmdUZXh0Q3VycmVu
dGx5KQorICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgY2FuY2VsQ29u
dGV4dENvbXBvc2l0aW9uKCk7CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4
dC5nZXQoKSk7CisgICAgbV9lbmFibGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7CisgICAgY29uZmlybUNvbXBvc2l0aW9u
VGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9u
ID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVk
aXQoKQoreworICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7CisgICAg
bV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVy
OjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2Vu
ZCByZXN1bHRzVG9TZW5kKQoreworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5U
X1RJTUU7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNvZGU7
CisgICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwgcmVz
dWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0g
U3RyaW5nKCk7CisgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikKKyAgICAgICAg
bV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisKKyAgICBldmVudC0+dHlwZSA9IEdE
S19LRVlfUkVMRUFTRTsKKyAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXksIFN0cmlu
ZygpLCBFdmVudEZha2VkKTsKKyAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gdHJ1ZTsKK30KKwor
dm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNvbXBv
c2l0aW9uU3RyaW5nKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAg
IG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5nKSk7CisK
KyAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtleSBldmVu
dCwganVzdCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBoYW5kbGlu
ZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8gbGF0ZXIgaG93IHRvIGhhbmRsZSB0
aGlzLgorICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgc2VuZENvbXBvc2l0
aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKK30KKwordm9pZCBH
dGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKK3sKKyAgICBpZiAobV9w
cmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9w
cmVlZGl0Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0ID0gIiI7Cit9CisKK3ZvaWQgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1f
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRp
dDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0LmdldCgp
LCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKKworICAgIGlmICht
X3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRpdC5nZXQo
KSkgPiAwKQorICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0ID0gU3Ry
aW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKKyAgICBtX2N1cnNvck9mZnNldCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50PihtX3By
ZWVkaXQubGVuZ3RoKCkpKTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9ICFtX3By
ZWVkaXQuaXNFbXB0eSgpOworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOworCisgICAgaWYg
KCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0
V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0
ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8
ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJlZWRpdCA9IFN0cmluZygp
OworICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsK
KworICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgdXBkYXRlUHJlZWRpdCgp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDFjYzM3OTU3ZGYxMTM2MmMxYTYyZjZlZmM2NDgyOWVhNmU4ZmUxMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaApA
QCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAorI2RlZmluZSBHdGtJbnB1dE1ldGhvZEZpbHRl
cl9oCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgX0d0a0lNQ29udGV4dCBHdGtJTUNvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBf
R3RrV2lkZ2V0IEd0a1dpZGdldDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtJ
bnB1dE1ldGhvZEZpbHRlciB7CitwdWJsaWM6CisgICAgR3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsK
KyAgICB+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKKworICAgIGJvb2wgZmlsdGVyS2V5RXZlbnQo
R2RrRXZlbnRLZXkqKTsKKyAgICB2b2lkIG5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsKKyAgICB2
b2lkIG5vdGlmeUZvY3VzZWRJbigpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOworICAg
IHZvaWQgcmVzZXRDb250ZXh0KCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisgICAg
dm9pZCBoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpOworICAgIHZv
aWQgaGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKKyAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFydCgp
OworICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOworCisgICAgdm9pZCBjb25maXJtQ29tcG9z
aXRpb24oKTsKKyAgICB2b2lkIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworICAgIHZvaWQg
dXBkYXRlUHJlZWRpdCgpOworICAgIHZvaWQgc2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhdGlvbik7CisKKyAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRl
eHQuZ2V0KCk7IH0KKworICAgIGVudW0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIHsKKyAgICAg
ICAgRXZlbnRGYWtlZCwKKyAgICAgICAgRXZlbnROb3RGYWtlZAorICAgIH07CisKK3Byb3RlY3Rl
ZDoKKyAgICBlbnVtIFJlc3VsdHNUb1NlbmQgeworICAgICAgICBQcmVlZGl0ID0gMSA8PCAxLAor
ICAgICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKKyAgICAgICAgUHJlZWRpdEFuZENvbXBvc2l0
aW9uID0gUHJlZWRpdCArIENvbXBvc2l0aW9uCisgICAgfTsKKworICAgIHZvaWQgc2V0V2lkZ2V0
KEd0a1dpZGdldCopOworICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0cmluZyBldmVu
dFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZh
a2VkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJl
c3VsdHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0aW9u
LCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nIGNvbXBvc2l0aW9uKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JPZmZzZXQpID0gMDsKKworICAgIFdU
Rjo6U3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9wcmVl
ZGl0OworICAgIGludCBtX2N1cnNvck9mZnNldDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsKKwor
ICAgIEdSZWZQdHI8R3RrSU1Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgR3RrV2lkZ2V0KiBtX3dp
ZGdldDsKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBib29sIG1fY29tcG9zaW5nVGV4dEN1cnJl
bnRseTsKKyAgICBib29sIG1fZmlsdGVyaW5nS2V5RXZlbnQ7CisgICAgYm9vbCBtX3ByZWVkaXRD
aGFuZ2VkOworICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbW1pdDsKKyAgICBib29sIG1fanVzdFNl
bnRGYWtlS2V5VXA7CisgICAgdW5zaWduZWQgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRo
Tm9SZXN1bHRzOworICAgIEludFBvaW50IG1fbGFzdENhcmVMb2NhdGlvbjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEd0a0lucHV0TWV0aG9kRmlsdGVyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Y2YxYjY4MGRi
YWJhMzYxZmQxYzUwM2Q0YjY2ZmM5YTFhOWNlMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0
a1BsdWdpbldpZGdldC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHdGtQbHVnaW5XaWRnZXQ6Okd0
a1BsdWdpbldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKKyAgICA6IFdpZGdldCh3aWRnZXQpCit7
CisgICAgZ3RrX3dpZGdldF9oaWRlKHdpZGdldCk7Cit9CisKK0d0a1BsdWdpbldpZGdldDo6fkd0
a1BsdWdpbldpZGdldCgpCit7CisgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5F
UihndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZvcm1XaWRnZXQoKSkpLCBwbGF0Zm9ybVdpZGdl
dCgpKTsKK30KKwordm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIGNvcmVSZWN0KQoreworICAgIC8qIG5vIG5lZWQgdG8gKi8KKyAgICBpZiAoIWd0a193
aWRnZXRfZ2V0X2hhc193aW5kb3cocGxhdGZvcm1XaWRnZXQoKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHBsYXRmb3Jt
V2lkZ2V0KCkpOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBHZGtS
ZWN0YW5nbGUgcmVjdCA9IGNvcmVSZWN0OworICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0
KHdpbmRvdywgJnJlY3QsIEZBTFNFKTsKK30KKwordm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmZyYW1l
UmVjdHNDaGFuZ2VkKCkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZVJlY3QoKTsKKyAgICBJ
bnRQb2ludCBsb2MgPSBwYXJlbnQoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
OworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3Jl
cXVlc3QocGxhdGZvcm1XaWRnZXQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1XaWRnZXQoKSwgJmFsbG9jYXRpb24p
OworICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY4N2NiMGZmNzM4NWVmMGY0
NzJjODkxN2U5ZmY0MTFmNmMxZDJhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEd0a1BsdWdpbldpZGdldF9oCisjZGVmaW5lIEd0a1BsdWdp
bldpZGdldF9oCisKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHdGtQbHVnaW5XaWRnZXQgOiBwdWJsaWMgV2lkZ2V0IHsKK3B1YmxpYzoKKyAgICBH
dGtQbHVnaW5XaWRnZXQoR3RrV2lkZ2V0Kik7CisgICAgdmlydHVhbCB+R3RrUGx1Z2luV2lkZ2V0
KCk7CisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBm
cmFtZVJlY3RzQ2hhbmdlZCgpOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
UG9wdXBNZW51LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWEyMjEyMWM1NGI0ODhiMTM2MTQ4ZGMyYjU2NTEy
MWM0ODg3YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1
cE1lbnUuY3BwCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdl
YkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1BvcHVwTWVudS5oIgorCisjaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnU2VhcmNoVGltZW91
dE1zID0gMTAwMDsKKworR3RrUG9wdXBNZW51OjpHdGtQb3B1cE1lbnUoKQorICAgIDogbV9wb3B1
cChndGtfbWVudV9uZXcoKSkKKyAgICAsIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcigwKQor
ICAgICwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKDApCit7CisgICAgbV9rZXlQcmVzc0hh
bmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgImtleS1wcmVzcy1ldmVu
dCIsIEdfQ0FMTEJBQ0soR3RrUG9wdXBNZW51OjprZXlQcmVzc0V2ZW50Q2FsbGJhY2spLCB0aGlz
KTsKK30KKworR3RrUG9wdXBNZW51Ojp+R3RrUG9wdXBNZW51KCkKK3sKKyAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgbV9rZXlQcmVzc0hhbmRsZXJJRCk7Cit9
CisKK3ZvaWQgR3RrUG9wdXBNZW51OjpjbGVhcigpCit7CisgICAgZ3RrX2NvbnRhaW5lcl9mb3Jl
YWNoKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrQ2Fs
bGJhY2s+KG1lbnVSZW1vdmVJdGVtKSwgdGhpcyk7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51Ojph
cHBlbmRTZXBhcmF0b3IoKQoreworICAgIEd0a1dpZGdldCogbWVudUl0ZW0gPSBndGtfc2VwYXJh
dG9yX21lbnVfaXRlbV9uZXcoKTsKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVf
U0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobWVu
dUl0ZW0pOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6YXBwZW5kSXRlbShHdGtBY3Rpb24qIGFj
dGlvbikKK3sKKyAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVu
dV9pdGVtKGFjdGlvbik7CisgICAgZ3RrX3dpZGdldF9zZXRfdG9vbHRpcF90ZXh0KG1lbnVJdGVt
LCBndGtfYWN0aW9uX2dldF90b29sdGlwKGFjdGlvbikpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bWVudUl0ZW0sICJzZWxlY3QiLCBHX0NBTExCQUNLKEd0a1BvcHVwTWVudTo6c2VsZWN0SXRlbUNh
bGxiYWNrKSwgdGhpcyk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxM
KG1fcG9wdXAuZ2V0KCkpLCBtZW51SXRlbSk7CisKKyAgICBpZiAoZ3RrX2FjdGlvbl9pc192aXNp
YmxlKGFjdGlvbikpCisgICAgICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Cit9CisKK3Zv
aWQgR3RrUG9wdXBNZW51Ojpwb3BVcChjb25zdCBJbnRTaXplJiBtZW51U2l6ZSwgY29uc3QgSW50
UG9pbnQmIG1lbnVQb3NpdGlvbiwgaW50IGl0ZW1Db3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29u
c3QgR2RrRXZlbnQqIGV2ZW50KQoreworICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Cisg
ICAgbV9tZW51UG9zaXRpb24gPSBtZW51UG9zaXRpb247CisgICAgZ3RrX21lbnVfc2V0X2FjdGl2
ZShHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgc2VsZWN0ZWRJdGVtKTsKKworICAgIC8vIFRoaXMg
YXBwcm9hY2ggZm9sbG93cyB0aGUgb25lIGluIGd0a2NvbWJvYm94LmMuCisgICAgR3RrUmVxdWlz
aXRpb24gcmVxdWlzaXRpb247CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1fcG9w
dXAuZ2V0KCksIC0xLCAtMSk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfd2lk
Z2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRpb24pOworI2Vsc2UKKyAg
ICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRp
b24sIDApOworI2VuZGlmCisKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QobV9wb3B1
cC5nZXQoKSwgc3RkOjptYXgobWVudVNpemUud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAt
MSk7CisKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihH
VEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICBHTGlzdCogcCA9IGNoaWxkcmVuOwor
ICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtQ291
bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiBzZWxlY3RlZEl0ZW0pCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIEd0a1dpZGdldCogaXRlbSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R3RrV2lkZ2V0Kj4ocC0+ZGF0YSk7CisgICAgICAgICAgICBHdGtSZXF1aXNpdGlvbiBp
dGVtUmVxdWlzaXRpb247CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAgICAgICAgIGd0
a193aWRnZXRfZ2V0X2NoaWxkX3JlcXVpc2l0aW9uKGl0ZW0sICZpdGVtUmVxdWlzaXRpb24pOwor
I2Vsc2UKKyAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKGl0ZW0sICZp
dGVtUmVxdWlzaXRpb24sIDApOworI2VuZGlmCisgICAgICAgICAgICBtX21lbnVQb3NpdGlvbi5z
ZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIGl0ZW1SZXF1aXNpdGlvbi5oZWlnaHQpOworCisgICAg
ICAgICAgICBwID0gZ19saXN0X25leHQocCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBDZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJv
eCBhcmVhLgorICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAt
IG1lbnVTaXplLmhlaWdodCgpIC8gMik7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGNoaWxkcmVu
KTsKKworICAgIGd1aW50IGJ1dHRvbjsKKyAgICBndWludDMyIGFjdGl2YXRlVGltZTsKKyAgICBp
ZiAoZXZlbnQpIHsKKyAgICAgICAgYnV0dG9uID0gZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9Q
UkVTUyA/IGV2ZW50LT5idXR0b24uYnV0dG9uIDogMTsKKyAgICAgICAgYWN0aXZhdGVUaW1lID0g
Z2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBidXR0b24g
PSAxOworICAgICAgICBhY3RpdmF0ZVRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIH0KKwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX21lbnVfcG9wdXAoR1RLX01FTlUobV9w
b3B1cC5nZXQoKSksIDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4o
bWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCBidXR0b24sIGFjdGl2YXRlVGltZSk7CisjZWxz
ZQorICAgIGd0a19tZW51X3BvcHVwX2Zvcl9kZXZpY2UoR1RLX01FTlUobV9wb3B1cC5nZXQoKSks
IGV2ZW50ID8gZ2RrX2V2ZW50X2dldF9kZXZpY2UoZXZlbnQpIDogMCwgMCwgMCwKKyAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlv
biksIHRoaXMsIDAsIGJ1dHRvbiwgYWN0aXZhdGVUaW1lKTsKKyNlbmRpZgorfQorCit2b2lkIEd0
a1BvcHVwTWVudTo6cG9wRG93bigpCit7CisgICAgZ3RrX21lbnVfcG9wZG93bihHVEtfTUVOVSht
X3BvcHVwLmdldCgpKSk7CisgICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKK30KKwordm9p
ZCBHdGtQb3B1cE1lbnU6Om1lbnVSZW1vdmVJdGVtKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtQb3B1
cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICBBU1NFUlQocG9wdXBNZW51LT5tX3BvcHVwKTsKKyAg
ICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBvcHVwTWVudS0+bV9wb3B1cC5n
ZXQoKSksIHdpZGdldCk7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjptZW51UG9zaXRpb25GdW5j
dGlvbihHdGtNZW51KiwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgR3RrUG9w
dXBNZW51KiBwb3B1cE1lbnUpCit7CisgICAgKnggPSBwb3B1cE1lbnUtPm1fbWVudVBvc2l0aW9u
LngoKTsKKyAgICAqeSA9IHBvcHVwTWVudS0+bV9tZW51UG9zaXRpb24ueSgpOworICAgICpwdXNo
SW4gPSB0cnVlOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6cmVzZXRUeXBlQWhlYWRGaW5kU3Rh
dGUoKQoreworICAgIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7CisgICAgbV9wcmV2
aW91c0tleUV2ZW50Q2hhcmFjdGVyID0gMDsKKyAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSAi
IjsKK30KKworYm9vbCBHdGtQb3B1cE1lbnU6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqIGV2
ZW50KQoreworICAgIC8vIElmIHdlIHdlcmUgZ2l2ZW4gYSBub24tcHJpbnRhYmxlIGNoYXJhY3Rl
ciBqdXN0IHNraXAgaXQuCisgICAgZ3VuaWNoYXIgdW5pY29kZUNoYXJhY3RlciA9IGdka19rZXl2
YWxfdG9fdW5pY29kZShldmVudC0+a2V5dmFsKTsKKyAgICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50
KHVuaWNvZGVDaGFyYWN0ZXIpKSB7CisgICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBnbG9uZyBjaGFyYWN0ZXJzV3Jp
dHRlbjsKKyAgICBHT3duUHRyPGd1bmljaGFyMj4gdXRmMTZTdHJpbmcoZ191Y3M0X3RvX3V0ZjE2
KCZ1bmljb2RlQ2hhcmFjdGVyLCAxLCAwLCAmY2hhcmFjdGVyc1dyaXR0ZW4sIDApKTsKKyAgICBp
ZiAoIXV0ZjE2U3RyaW5nKSB7CisgICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGlz
IHRoZSBzYW1lIGFzIHRoZSBsYXN0IGNoYXJhY3RlciwgdGhlIHVzZXIgaXMgcHJvYmFibHkgdHJ5
aW5nIHRvCisgICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgbWVudWxpc3QgZW50cmllcy4gVGhpcyBt
YXRjaGVzIHRoZSBXZWJDb3JlIGJlaGF2aW9yIGZvciBjb2xsYXBzZWQKKyAgICAvLyBtZW51bGlz
dHMuCisgICAgYm9vbCByZXBlYXRpbmdDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyICE9IG1f
cHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKKyAgICBpZiAoZXZlbnQtPnRpbWUgLSBtX3ByZXZp
b3VzS2V5RXZlbnRUaW1lc3RhbXAgPiBnU2VhcmNoVGltZW91dE1zKQorICAgICAgICBtX2N1cnJl
bnRTZWFyY2hTdHJpbmcgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0ZjE2U3Ry
aW5nLmdldCgpKSwgY2hhcmFjdGVyc1dyaXR0ZW4pOworICAgIGVsc2UgaWYgKHJlcGVhdGluZ0No
YXJhY3RlcikKKyAgICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nLmFwcGVuZChTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVyc1dyaXR0
ZW4pKTsKKworICAgIG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcCA9IGV2ZW50LT50aW1lOwor
ICAgIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXI7CisKKyAg
ICAvLyBMaWtlIHRoZSBDaHJvbWl1bSBwb3J0LCB3ZSBjYXNlIGZvbGQgYmVmb3JlIHNlYXJjaGlu
ZywgYmVjYXVzZSAKKyAgICAvLyBzdHJuY21wIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgY2hh
cmFjdGVycy4KKyAgICBHT3duUHRyPGdjaGFyPiBzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZChn
X3V0ZjhfY2FzZWZvbGQobV9jdXJyZW50U2VhcmNoU3RyaW5nLnV0ZjgoKS5kYXRhKCksIC0xKSk7
CisgICAgc2l6ZV90IHByZWZpeExlbmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmdXaXRoQ2FzZUZv
bGRlZC5nZXQoKSk7CisKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICBpZiAoIWNoaWxkcmVu
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIGEgbWVudSBpdGVtIGhhcyBhbHJl
YWR5IGJlZW4gc2VsZWN0ZWQsIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50CisgICAg
Ly8gaXRlbSBkb3duIHRoZSBsaXN0LiBUaGlzIHdpbGwgbWFrZSBtdWx0aXBsZSBrZXkgcHJlc3Nl
cyBvZiB0aGUgc2FtZSBjaGFyYWN0ZXIKKyAgICAvLyBhZHZhbmNlIHRoZSBzZWxlY3Rpb24uCisg
ICAgR0xpc3QqIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworICAgIGlmIChtX2N1cnJlbnRseVNl
bGVjdGVkTWVudUl0ZW0pIHsKKyAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X2ZpbmQoY2hp
bGRyZW4sIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSk7CisgICAgICAgIGlmICghY3VycmVu
dENoaWxkKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSAwOwor
ICAgICAgICAgICAgY3VycmVudENoaWxkID0gY2hpbGRyZW47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBSZXBlYXRpbmcgY2hhcmFjdGVycyBzaG91bGQgaXRlcmF0ZS4KKyAgICAgICAgaWYgKHJl
cGVhdGluZ0NoYXJhY3RlcikgeworICAgICAgICAgICAgaWYgKEdMaXN0KiBuZXh0Q2hpbGQgPSBn
X2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9
IG5leHRDaGlsZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMaXN0KiBmaXJzdENoaWxkID0g
Y3VycmVudENoaWxkOworICAgIGRvIHsKKyAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X25l
eHQoY3VycmVudENoaWxkKTsKKyAgICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpCisgICAgICAgICAg
ICBjdXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsKKworICAgICAgICBHT3duUHRyPGdjaGFyPiBpdGVt
VGV4dChnX3V0ZjhfY2FzZWZvbGQoZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR1RLX01FTlVfSVRF
TShjdXJyZW50Q2hpbGQtPmRhdGEpKSwgLTEpKTsKKyAgICAgICAgaWYgKCFzdHJuY21wKHNlYXJj
aFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpLCBpdGVtVGV4dC5nZXQoKSwgcHJlZml4TGVuZ3Ro
KSkgeworICAgICAgICAgICAgZ3RrX21lbnVfc2hlbGxfc2VsZWN0X2l0ZW0oR1RLX01FTlVfU0hF
TEwobV9wb3B1cC5nZXQoKSksIEdUS19XSURHRVQoY3VycmVudENoaWxkLT5kYXRhKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnJlbnRDaGlsZCAhPSBm
aXJzdENoaWxkKTsKKworICAgIGdfbGlzdF9mcmVlKGNoaWxkcmVuKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayhHdGtNZW51SXRl
bSogaXRlbSwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCit7CisgICAgcG9wdXBNZW51LT5tX2N1
cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0pOworfQorCitnYm9vbGVh
biBHdGtQb3B1cE1lbnU6OmtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRLZXkqIGV2ZW50LCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICByZXR1
cm4gcG9wdXBNZW51LT50eXBlQWhlYWRGaW5kKGV2ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdiZTYzNzk1
YTc3ZDg3NGM0NjU4ZTQ2NmM2MGIxNmVmNmViNzI2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHdGtQb3B1
cE1lbnVfaAorI2RlZmluZSBHdGtQb3B1cE1lbnVfaAorCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEd0a1BvcHVwTWVudSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoR3RrUG9wdXBNZW51KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEd0a1BvcHVwTWVudT4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3RrUG9wdXBNZW51KCkpOworICAgIH0KKworICAg
IH5HdGtQb3B1cE1lbnUoKTsKKworICAgIEd0a1dpZGdldCogcGxhdGZvcm1NZW51KCkgY29uc3Qg
eyByZXR1cm4gbV9wb3B1cC5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIGFw
cGVuZFNlcGFyYXRvcigpOworICAgIHZvaWQgYXBwZW5kSXRlbShHdGtBY3Rpb24qKTsKKyAgICB2
b2lkIHBvcFVwKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRQb2ludCYsIGludCBpdGVtc0NvdW50
LCBpbnQgc2VsZWN0ZWRJdGVtLCBjb25zdCBHZGtFdmVudCopOworICAgIHZvaWQgcG9wRG93bigp
OworCitwcml2YXRlOgorICAgIEd0a1BvcHVwTWVudSgpOworCisgICAgdm9pZCByZXNldFR5cGVB
aGVhZEZpbmRTdGF0ZSgpOworICAgIGJvb2wgdHlwZUFoZWFkRmluZChHZGtFdmVudEtleSopOwor
CisgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrTWVudUl0ZW0qLCBHdGtQb3B1
cE1lbnUqKTsKKyAgICBzdGF0aWMgdm9pZCBtZW51UG9zaXRpb25GdW5jdGlvbihHdGtNZW51Kiwg
Z2ludCosIGdpbnQqLCBnYm9vbGVhbiosIEd0a1BvcHVwTWVudSopOworICAgIHN0YXRpYyB2b2lk
IG1lbnVSZW1vdmVJdGVtKEd0a1dpZGdldCosIEd0a1BvcHVwTWVudSopOworICAgIHN0YXRpYyB2
b2lkIHNlbGVjdEl0ZW1DYWxsYmFjayhHdGtNZW51SXRlbSosIEd0a1BvcHVwTWVudSopOworICAg
IHN0YXRpYyBnYm9vbGVhbiBrZXlQcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZl
bnRLZXkqLCBHdGtQb3B1cE1lbnUqKTsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX3BvcHVw
OworICAgIEludFBvaW50IG1fbWVudVBvc2l0aW9uOworICAgIFN0cmluZyBtX2N1cnJlbnRTZWFy
Y2hTdHJpbmc7CisgICAgdWludDMyX3QgbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wOworICAg
IHVuc2lnbmVkIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKKyAgICBHdGtXaWRnZXQqIG1f
Y3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbTsKKyAgICB1bnNpZ25lZCBtX2tleVByZXNzSGFuZGxl
cklEOworfTsKKworfQorCisjZW5kaWYgLy8gR3RrUG9wdXBNZW51X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOThiNWJhMzYyODRkOGMxNzlhZGY0MWNkNDYy
MGUzOWRlZGE5ODBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJJbnRQb2lu
dC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRQ
b2ludCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEd0a1dpZGdldCogd2lkZ2V0LCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYWN0dWFsbHkg
YSB2ZXJ5IHRyaWNreSBvcGVyYXRpb24gYW5kIHRoZSByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24g
c2hvdWxkCisgICAgLy8gb25seSBiZSB0aG91Z2h0IG9mIGFzIGEgZ3Vlc3MuIEZvciBpbnN0YW5j
ZSwgc29tZXRpbWVzIGl0IG1heSBub3QgY29ycmVjdGx5IHRha2UgaW50bworICAgIC8vIGFjY291
bnQgd2luZG93IGRlY29yYXRpb25zLgorCisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbFdpZGdldCA9
IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7CisgICAgaWYgKCF0b3BsZXZlbFdpZGdl
dCB8fCAhZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbFdpZGdldCkgfHwgIUdUS19JU19X
SU5ET1codG9wbGV2ZWxXaWRnZXQpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisKKyAgICBHZGtX
aW5kb3cqIGdka1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh0b3BsZXZlbFdpZGdldCk7
CisgICAgaWYgKCFnZGtXaW5kb3cpCisgICAgICAgIHJldHVybiBwb2ludDsKKworICAgIGludCB4
SW5XaW5kb3csIHlJbldpbmRvdzsKKyAgICBndGtfd2lkZ2V0X3RyYW5zbGF0ZV9jb29yZGluYXRl
cyh3aWRnZXQsIHRvcGxldmVsV2lkZ2V0LCBwb2ludC54KCksIHBvaW50LnkoKSwgJnhJbldpbmRv
dywgJnlJbldpbmRvdyk7CisKKyAgICBpbnQgd2luZG93T3JpZ2luWCwgd2luZG93T3JpZ2luWTsK
KyAgICBnZGtfd2luZG93X2dldF9vcmlnaW4oZ2RrV2luZG93LCAmd2luZG93T3JpZ2luWCwgJndp
bmRvd09yaWdpblkpOworCisgICAgcmV0dXJuIEludFBvaW50KHdpbmRvd09yaWdpblggKyB4SW5X
aW5kb3csIHdpbmRvd09yaWdpblkgKyB5SW5XaW5kb3cpOworfQorCitib29sIHdpZGdldElzT25z
Y3JlZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4gZ3Rr
X3dpZGdldF9pc190b3BsZXZlbCh3aWRnZXQpICYmIEdUS19JU19XSU5ET1cod2lkZ2V0KSAmJiAh
R1RLX0lTX09GRlNDUkVFTl9XSU5ET1cod2lkZ2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjliZGRlNjU5OGYw
MmQzMzU3YTAwYTcxMzM4OTZiYWM1NGMyZGEyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2lmbmRlZiBHdGtVdGlsaXRpZXNfaCAKKyNkZWZpbmUgR3RrVXRpbGl0aWVzX2gg
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50UG9pbnQ7CisKK0ludFBvaW50IGNv
bnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQoR3RrV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQm
KTsKK2Jvb2wgd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KEd0a1dpZGdldCopOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHdGtVdGlsaXRpZXNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTQ4ZjMzZWM0ZGYzMmI5MWJlYWNj
YTJjZTdkMGQwNWViZmMyMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtWZXJzaW9uaW5nLmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKworI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisjaW5jbHVkZSA8WDExL1hhdG9tLmg+
CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDE0LCAwKQordm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0bWVudCog
YWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKQoreworICAgIG1fYWRqdXN0bWVudC0+dmFsdWUgPSBt
X2N1cnJlbnRQb3M7CisgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChtX2FkanVzdG1l
bnQpOworfQorCit2b2lkIGd0a19hZGp1c3RtZW50X2NvbmZpZ3VyZShHdGtBZGp1c3RtZW50KiBh
ZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxvd2VyLCBnZG91YmxlIHVwcGVyLAor
ICAgIGdkb3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50LCBnZG91Ymxl
IHBhZ2VTaXplKQoreworICAgIGdfb2JqZWN0X2ZyZWV6ZV9ub3RpZnkoR19PQkpFQ1QoYWRqdXN0
bWVudCkpOworCisgICAgZ19vYmplY3Rfc2V0KGFkanVzdG1lbnQsCisgICAgICAgICJsb3dlciIs
IGxvd2VyLAorICAgICAgICAidXBwZXIiLCB1cHBlciwKKyAgICAgICAgInN0ZXAtaW5jcmVtZW50
Iiwgc3RlcEluY3JlbWVudCwKKyAgICAgICAgInBhZ2UtaW5jcmVtZW50IiwgcGFnZUluY3JlbWVu
dCwKKyAgICAgICAgInBhZ2Utc2l6ZSIsIHBhZ2VTaXplLCAwKTsKKworICAgIGdfb2JqZWN0X3Ro
YXdfbm90aWZ5KEdfT0JKRUNUKGFkanVzdG1lbnQpKTsKKworICAgIGd0a19hZGp1c3RtZW50X2No
YW5nZWQoYWRqdXN0bWVudCk7CisgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChhZGp1
c3RtZW50KTsKK30KKyNlbmRpZgorCitHZGtEZXZpY2UgKmdldERlZmF1bHRHREtQb2ludGVyRGV2
aWNlKEdka1dpbmRvdyogd2luZG93KQoreworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAg
IEdka0RldmljZU1hbmFnZXIgKm1hbmFnZXIgPSAgZ2RrX2Rpc3BsYXlfZ2V0X2RldmljZV9tYW5h
Z2VyKGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2luZG93KSk7CisgICAgcmV0dXJuIGdka19kZXZp
Y2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIobWFuYWdlcik7CisjZWxzZQorICAgIHJldHVy
biBnZGtfZGV2aWNlX2dldF9jb3JlX3BvaW50ZXIoKTsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJ
T05fMgorfQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQordm9pZCBnZGtfd2lu
ZG93X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4LCBnaW50IHksIGdp
bnQqIHJvb3RYLCBnaW50KiByb290WSkKK3sKKyAgICBnZGtfd2luZG93X2dldF9yb290X29yaWdp
bih3aW5kb3csIHJvb3RYLCByb290WSk7CisgICAgKnJvb3RYID0gKnJvb3RYICsgeDsKKyAgICAq
cm9vdFkgPSAqcm9vdFkgKyB5OworfQorI2VuZGlmCisKK0dka0N1cnNvciAqIGJsYW5rQ3Vyc29y
KCkKK3sKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKKyAgICByZXR1cm4gZ2RrX2N1
cnNvcl9uZXcoR0RLX0JMQU5LX0NVUlNPUik7CisjZWxzZQorICAgIEdka0N1cnNvciAqIGN1cnNv
cjsKKyAgICBHZGtQaXhtYXAgKiBzb3VyY2U7CisgICAgR2RrUGl4bWFwICogbWFzazsKKyAgICBH
ZGtDb2xvciBmb3JlZ3JvdW5kID0geyAwLCA2NTUzNSwgMCwgMCB9OyAvLyBSZWQuCisgICAgR2Rr
Q29sb3IgYmFja2dyb3VuZCA9IHsgMCwgMCwgMCwgNjU1MzUgfTsgLy8gQmx1ZS4KKyAgICBzdGF0
aWMgZ2NoYXIgY3Vyc29yQml0c1tdID0gezB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4
MCwgMHgwfTsKKworICAgIHNvdXJjZSA9IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgwLCBj
dXJzb3JCaXRzLCA4LCA4KTsKKyAgICBtYXNrID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRh
KDAsIGN1cnNvckJpdHMsIDgsIDgpOworICAgIGN1cnNvciA9IGdka19jdXJzb3JfbmV3X2Zyb21f
cGl4bWFwKHNvdXJjZSwgbWFzaywgJmZvcmVncm91bmQsICZiYWNrZ3JvdW5kLCA4LCA4KTsKKyAg
ICBnZGtfcGl4bWFwX3VucmVmKHNvdXJjZSk7CisgICAgZ2RrX3BpeG1hcF91bnJlZihtYXNrKTsK
KyAgICByZXR1cm4gY3Vyc29yOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAw
KQorfQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorY29uc3QgZ2NoYXIqIGd0
a19tZW51X2l0ZW1fZ2V0X2xhYmVsKEd0a01lbnVJdGVtKiBtZW51SXRlbSkKK3sKKyAgICBHdGtX
aWRnZXQgKiBsYWJlbCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obWVudUl0ZW0pKTsKKyAg
ICBpZiAoR1RLX0lTX0xBQkVMKGxhYmVsKSkKKyAgICAgICAgcmV0dXJuIGd0a19sYWJlbF9nZXRf
dGV4dChHVEtfTEFCRUwobGFiZWwpKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0
aWMgY2Fpcm9fZm9ybWF0X3QKK2dka19jYWlyb19mb3JtYXRfZm9yX2NvbnRlbnQoY2Fpcm9fY29u
dGVudF90IGNvbnRlbnQpCit7CisgICAgc3dpdGNoIChjb250ZW50KSB7CisgICAgY2FzZSBDQUlS
T19DT05URU5UX0NPTE9SOgorICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX1JHQjI0OworICAg
IGNhc2UgQ0FJUk9fQ09OVEVOVF9BTFBIQToKKyAgICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9B
ODsKKyAgICBjYXNlIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEE6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9BUkdCMzI7CisgICAgfQorfQorCitzdGF0aWMgY2Fp
cm9fc3VyZmFjZV90KgorZ2RrX2NhaXJvX3N1cmZhY2VfY29lcmNlX3RvX2ltYWdlKGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSwgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsIGludCB3aWR0aCwgaW50
IGhlaWdodCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QgKiBjb3B5OworICAgIGNhaXJvX3QgKiBj
cjsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NV
UkZBQ0VfVFlQRV9JTUFHRQorICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1
cmZhY2UpID09IGNvbnRlbnQKKyAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lk
dGgoc3VyZmFjZSkgPj0gd2lkdGgKKyAgICAgICAgJiYgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KHN1cmZhY2UpID49IGhlaWdodCkKKyAgICAgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2Vf
cmVmZXJlbmNlKHN1cmZhY2UpOworCisgICAgY29weSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlKGdka19jYWlyb19mb3JtYXRfZm9yX2NvbnRlbnQoY29udGVudCksIHdpZHRoLCBoZWlnaHQp
OworCisgICAgY3IgPSBjYWlyb19jcmVhdGUoY29weSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgc3VyZmFjZSwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIGNhaXJvX2Rl
c3Ryb3koY3IpOworCisgICAgcmV0dXJuIGNvcHk7Cit9CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0
X2FscGhhKGd1Y2hhciAqIGRlc3REYXRhLCBpbnQgZGVzdFN0cmlkZSwgZ3VjaGFyICogc3JjRGF0
YSwgaW50IHNyY1N0cmlkZSwgaW50IHNyY1gsIGludCBzcmNZLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBzcmNEYXRhICs9IHNyY1N0cmlkZSAqIHNyY1kg
KyBzcmNZICogNDsKKworICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAg
ICBndWludDMyICogc3JjID0gKGd1aW50MzIgKikgc3JjRGF0YTsKKworICAgICAgICBmb3IgKHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgZ3VpbnQgYWxwaGEgPSBzcmNbeF0g
Pj4gMjQ7CisKKyAgICAgICAgICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgICAgICAgICBkZXN0
RGF0YVt4ICogNCArIDBdID0gMDsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDFd
ID0gMDsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0gMDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAwXSA9ICgoKHNy
Y1t4XSAmIDB4ZmYwMDAwKSA+PiAxNikgKiAyNTUgKyBhbHBoYSAvIDIpIC8gYWxwaGE7CisgICAg
ICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAxXSA9ICgoKHNyY1t4XSAmIDB4MDBmZjAwKSA+
PiAgOCkgKiAyNTUgKyBhbHBoYSAvIDIpIC8gYWxwaGE7CisgICAgICAgICAgICAgICAgZGVzdERh
dGFbeCAqIDQgKyAyXSA9ICgoKHNyY1t4XSAmIDB4MDAwMGZmKSA+PiAgMCkgKiAyNTUgKyBhbHBo
YSAvIDIpIC8gYWxwaGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0RGF0YVt4ICog
NCArIDNdID0gYWxwaGE7CisgICAgICAgIH0KKworICAgICAgICBzcmNEYXRhICs9IHNyY1N0cmlk
ZTsKKyAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkCitjb252ZXJ0X25vX2FscGhhKGd1Y2hhciAqIGRlc3REYXRhLCBpbnQgZGVzdFN0cmlkZSwg
Z3VjaGFyICogc3JjRGF0YSwgaW50IHNyY1N0cmlkZSwgaW50IHNyY1gsIGludCBzcmNZLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBzcmNEYXRhICs9IHNy
Y1N0cmlkZSAqIHNyY1kgKyBzcmNYICogNDsKKworICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykgeworICAgICAgICBndWludDMyICogc3JjID0gKGd1aW50MzIgKikgc3JjRGF0YTsKKwor
ICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgZGVzdERh
dGFbeCAqIDMgKyAwXSA9IHNyY1t4XSA+PiAxNjsKKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiAz
ICsgMV0gPSBzcmNbeF0gPj4gIDg7CisgICAgICAgICAgICBkZXN0RGF0YVt4ICogMyArIDJdID0g
c3JjW3hdOworICAgICAgICB9CisKKyAgICAgICAgc3JjRGF0YSArPSBzcmNTdHJpZGU7CisgICAg
ICAgIGRlc3REYXRhICs9IGRlc3RTdHJpZGU7CisgICAgfQorfQorCisvKioKKyAqIGdka19waXhi
dWZfZ2V0X2Zyb21fc3VyZmFjZToKKyAqIEBzdXJmYWNlOiBzdXJmYWNlIHRvIGNvcHkgZnJvbQor
ICogQHNyY194OiBTb3VyY2UgWCBjb29yZGluYXRlIHdpdGhpbiBAc3VyZmFjZQorICogQHNyY195
OiBTb3VyY2UgWSBjb29yZGluYXRlIHdpdGhpbiBAc3VyZmFjZQorICogQHdpZHRoOiBXaWR0aCBp
biBwaXhlbHMgb2YgcmVnaW9uIHRvIGdldAorICogQGhlaWdodDogSGVpZ2h0IGluIHBpeGVscyBv
ZiByZWdpb24gdG8gZ2V0CisgKgorICogVHJhbnNmZXJzIGltYWdlIGRhdGEgZnJvbSBhICNjYWly
b19zdXJmYWNlX3QgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIFJHQihBKQorICogcmVwcmVzZW50YXRp
b24gaW5zaWRlIGEgI0dka1BpeGJ1Zi4gVGhpcyBhbGxvd3MgeW91IHRvIGVmZmljaWVudGx5IHJl
YWQKKyAqIGluZGl2aWR1YWwgcGl4ZWxzIGZyb20gY2Fpcm8gc3VyZmFjZXMuIEZvciAjR2RrV2lu
ZG93cywgdXNlCisgKiBnZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdygpIGluc3RlYWQuCisgKgor
ICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhbiBSR0IgcGl4YnVmIHdpdGggOCBiaXRzIHBl
ciBjaGFubmVsLiBUaGUgcGl4YnVmCisgKiB3aWxsIGNvbnRhaW4gYW4gYWxwaGEgY2hhbm5lbCBp
ZiB0aGUgQHN1cmZhY2UgY29udGFpbnMgb25lLgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5z
ZmVyIGZ1bGwpOiBBIG5ld2x5LWNyZWF0ZWQgcGl4YnVmIHdpdGggYSByZWZlcmVuY2UgY291bnQK
KyAqIG9mIDEsIG9yICVOVUxMIG9uIGVycm9yCisgKiovCitHZGtQaXhidWYqCitnZGtfcGl4YnVm
X2dldF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90ICogc3VyZmFjZSwgaW50IHNyY1gsIGlu
dCBzcmNZLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgY2Fpcm9fY29udGVudF90IGNv
bnRlbnQ7CisgICAgR2RrUGl4YnVmICogZGVzdDsKKworICAgIC8qIEdlbmVyYWwgc2FuaXR5IGNo
ZWNrcyAqLworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN1cmZhY2UsIE5VTEwpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNyY1ggPj0gMCAmJiBzcmNZID49IDAsIE5VTEwpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBOVUxMKTsKKworICAg
IGNvbnRlbnQgPSBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpIHwgQ0FJUk9fQ09O
VEVOVF9DT0xPUjsKKyAgICBkZXN0ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0VfUkdC
LCAhIShjb250ZW50ICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSksIDgsIHdpZHRoLCBoZWlnaHQpOwor
CisgICAgc3VyZmFjZSA9IGdka19jYWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShzdXJmYWNl
LCBjb250ZW50LCBzcmNYICsgd2lkdGgsIHNyY1kgKyBoZWlnaHQpOworICAgIGNhaXJvX3N1cmZh
Y2VfZmx1c2goc3VyZmFjZSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2Up
IHx8ICFkZXN0KSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGdka19waXhidWZfZ2V0X2hhc19h
bHBoYShkZXN0KSkKKyAgICAgICAgY29udmVydF9hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMo
ZGVzdCksCisgICAgICAgICAgICBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoZGVzdCksCisgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAorICAgICAgICAgICAg
c3JjWCwgc3JjWSwgd2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBjb252ZXJ0X25v
X2FscGhhKGdka19waXhidWZfZ2V0X3BpeGVscyhkZXN0KSwKKyAgICAgICAgICAgIGdka19waXhi
dWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKKyAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoc3VyZmFjZSksCisgICAgICAgICAgICBzcmNYLCBzcmNZLCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICByZXR1cm4gZGVzdDsK
K30KKworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQordm9pZCBnZXRHZGtEcmF3YWJs
ZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKEdES19JU19QSVhNQVAoZHJhd2FibGUpIHx8IEdES19JU19X
SU5ET1coZHJhd2FibGUpKTsKKworICAgIGlmIChHREtfSVNfUElYTUFQKGRyYXdhYmxlKSkgewor
ICAgICAgICBnZGtfcGl4bWFwX2dldF9zaXplKEdES19QSVhNQVAoZHJhd2FibGUpLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdka1dpbmRvdyAqd2luZG93
ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7CisgICAgKndpZHRoID0gZ2RrX3dpbmRvd19nZXRfd2lk
dGgod2luZG93KTsKKyAgICAqaGVpZ2h0ID0gZ2RrX3dpbmRvd19nZXRfaGVpZ2h0KHdpbmRvdyk7
Cit9CisjZWxzZQordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxl
LCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKK3sKKyAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUo
ZHJhd2FibGUsIHdpZHRoLCBoZWlnaHQpOworfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9O
KDIsIDI0LCAwKQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworI2lmICFHTElCX0NI
RUNLX1ZFUlNJT04oMiwgMjcsIDEpCitnYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9maXJz
dF93aW5zKEdTaWduYWxJbnZvY2F0aW9uSGludCAqaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSAqcmV0
dXJuQWNjdW11bGF0b3IsIGNvbnN0IEdWYWx1ZSAqaGFuZGxlclJldHVybiwgZ3BvaW50ZXIgZGF0
YSkKK3sKKyAgICBnX3ZhbHVlX2NvcHkoaGFuZGxlclJldHVybiwgcmV0dXJuQWNjdW11bGF0b3Ip
OworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDIyLCAwKQorY2Fpcm9fc3VyZmFjZV90ICpnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1
cmZhY2UoR2RrV2luZG93ICp3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCit7CisgICAgY2Fpcm9fdCAqY2Fpcm9Db250ZXh0ID0gZ2RrX2NhaXJv
X2NyZWF0ZSh3aW5kb3cpOworICAgIGNhaXJvX3N1cmZhY2VfdCAqY2Fpcm9TdXJmYWNlID0gY2Fp
cm9fZ2V0X3RhcmdldChjYWlyb0NvbnRleHQpOworICAgIGNhaXJvX3N1cmZhY2VfdCAqbmV3U3Vy
ZmFjZSA9IGNhaXJvX3N1cmZhY2VfY3JlYXRlX3NpbWlsYXIoY2Fpcm9TdXJmYWNlLCBjb250ZW50
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBjYWlyb19kZXN0cm95KGNhaXJvQ29udGV4dCk7CisgICAg
cmV0dXJuIG5ld1N1cmZhY2U7Cit9CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIs
IDApCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKKyNpZmRlZiBHREtfV0lORE9X
SU5HX1gxMQorc3RhdGljIGludCBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChHZGtTY3JlZW4gKnNj
cmVlbikKK3sKKyAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2Rr
X3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhS
b290V2luZG93KGRpc3BsYXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKKyAgICBBdG9t
IGN1cnJlbnREZXNrdG9wID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfQ1VSUkVOVF9ERVNL
VE9QIiwgVHJ1ZSk7CisKKyAgICBBdG9tIHR5cGU7CisgICAgaW50IGZvcm1hdDsKKyAgICB1bnNp
Z25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7CisgICAgdW5zaWduZWQgY2hhciAqcmV0
dXJuZWREYXRhID0gTlVMTDsKKyAgICBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdp
bmRvdywgY3VycmVudERlc2t0b3AsIDAsIEdfTUFYTE9ORywgRmFsc2UsIFhBX0NBUkRJTkFMLAor
ICAgICAgICAmdHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVyLCAmcmV0dXJu
ZWREYXRhKTsKKworICAgIGludCB3b3Jrc3BhY2UgPSAwOworICAgIGlmICh0eXBlID09IFhBX0NB
UkRJTkFMICYmIGZvcm1hdCA9PSAzMiAmJiBpdGVtc0NvdW50ID4gMCkKKyAgICAgICAgd29ya3Nw
YWNlID0gKGludClyZXR1cm5lZERhdGFbMF07CisKKyAgICBpZiAocmV0dXJuZWREYXRhKQorICAg
ICAgICBYRnJlZShyZXR1cm5lZERhdGEpOworCisgICAgcmV0dXJuIHdvcmtzcGFjZTsKK30KKwor
c3RhdGljIHZvaWQgZ2V0U2NyZWVuV29ya0FyZWEoR2RrU2NyZWVuICpzY3JlZW4sIEdka1JlY3Rh
bmdsZSAqYXJlYSkKK3sKKyAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BM
QVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKKyAgICBBdG9tIHdvcmtBcmVhID0g
WEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfV09SS0FSRUEiLCBUcnVlKTsKKworICAgIC8qIERl
ZmF1bHRzIGluIGNhc2Ugb2YgZXJyb3IuICovCisgICAgYXJlYS0+eCA9IDA7CisgICAgYXJlYS0+
eSA9IDA7CisgICAgYXJlYS0+d2lkdGggPSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pOwor
ICAgIGFyZWEtPmhlaWdodCA9IGdka19zY3JlZW5fZ2V0X2hlaWdodChzY3JlZW4pOworCisgICAg
aWYgKHdvcmtBcmVhID09IE5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIFdpbmRvdyByb290
V2luZG93ID0gWFJvb3RXaW5kb3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVNQkVSKHNjcmVlbikp
OworICAgIEF0b20gdHlwZTsKKyAgICBpbnQgZm9ybWF0OworICAgIHVuc2lnbmVkIGxvbmcgaXRl
bXNDb3VudCwgYnl0ZXNBZnRlcjsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXR1cm5lZERhdGEgPSAw
OworICAgIGludCByZXN1bHQgPSBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRv
dywgd29ya0FyZWEsIDAsIDQgKiAzMiAvKiBNYXggbGVuZ3RoICovLCBGYWxzZSwgQW55UHJvcGVy
dHlUeXBlLAorICAgICAgICAmdHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVy
LCAmcmV0dXJuZWREYXRhKTsKKyAgICBpZiAocmVzdWx0ICE9IFN1Y2Nlc3MgfHwgdHlwZSA9PSBO
b25lIHx8ICFmb3JtYXQgfHwgYnl0ZXNBZnRlciB8fCBpdGVtc0NvdW50ICUgNCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW50IGRlc2t0b3AgPSBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChzY3Jl
ZW4pOworICAgIGxvbmcgKndvcmtBcmVhcyA9IChsb25nICopcmV0dXJuZWREYXRhOworICAgIGFy
ZWEtPnggPSB3b3JrQXJlYXNbZGVza3RvcCAqIDRdOworICAgIGFyZWEtPnkgPSB3b3JrQXJlYXNb
ZGVza3RvcCAqIDQgKyAxXTsKKyAgICBhcmVhLT53aWR0aCA9IHdvcmtBcmVhc1tkZXNrdG9wICog
NCArIDJdOworICAgIGFyZWEtPmhlaWdodCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCArIDNdOwor
CisgICAgWEZyZWUocmV0dXJuZWREYXRhKTsKK30KKyNlbmRpZiAvLyBHREtfV0lORE9XSU5HX1gx
MQorCit2b2lkIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICpzY3Jl
ZW4sIGludCBtb25pdG9yLCBHZGtSZWN0YW5nbGUgKmFyZWEpCit7CisgICAgZ2RrX3NjcmVlbl9n
ZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsIGFyZWEpOworCisjaWZkZWYgR0RL
X1dJTkRPV0lOR19YMTEKKyAgICBHZGtSZWN0YW5nbGUgd29ya0FyZWE7CisgICAgZ2V0U2NyZWVu
V29ya0FyZWEoc2NyZWVuLCAmd29ya0FyZWEpOworICAgIGdka19yZWN0YW5nbGVfaW50ZXJzZWN0
KCZ3b3JrQXJlYSwgYXJlYSwgYXJlYSk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAzLCA2KQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NmRhMWNmY2JiZjg2YTNlNmYyNzk3ODNlZmIyMjhkNjAyNTJjMzZiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgKQEAgLTAsMCArMSwxMjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHdGtWZXJzaW9uaW5n
X2gKKyNkZWZpbmUgR3RrVmVyc2lvbmluZ19oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNp
Zm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy1jb21wYXQu
aD4KKyNlbmRpZgorCitHX0JFR0lOX0RFQ0xTCisKKy8vIE1hY3JvcyB0byBhdm9pZCBkZXByZWNh
dGlvbiBjaGVja2luZyBjaHVybgorI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorI2RlZmluZSBH
REtfV0lORE9XX1hXSU5ET1cod2luZG93KSAoZ2RrX3gxMV93aW5kb3dfZ2V0X3hpZCh3aW5kb3cp
KQorI2Vsc2UKK0dka1BpeGJ1ZiogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKGNhaXJvX3N1
cmZhY2VfdCosIGludCBzcmNYLCBpbnQgc3JjWSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3Zv
aWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlKiwgaW50KiB3aWR0aCwgaW50KiBoZWln
aHQpOworI2VuZGlmCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQpCisjZGVmaW5l
IGdka19waXhtYXBfZ2V0X3NpemUgZ2RrX2RyYXdhYmxlX2dldF9zaXplCisjZW5kaWYgLy8gR1RL
X0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQpCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMs
IDApCisjZGVmaW5lIGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2luZG93KSBnZGtfZHJhd2FibGVf
Z2V0X2Rpc3BsYXkod2luZG93KQorI2RlZmluZSBnZGtfd2luZG93X2dldF92aXN1YWwgZ2RrX2Ry
YXdhYmxlX2dldF92aXN1YWwKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkK
KworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKK2NhaXJvX3N1cmZhY2VfdCogZ2Rr
X3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRvdyosIGNhaXJvX2NvbnRlbnRf
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAyMiwgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKKyNkZWZpbmUgZ2Rr
X3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKSAodmlzdWFsKS0+ZGVwdGgKKyNkZWZpbmUgZ2RrX3Zp
c3VhbF9nZXRfYml0c19wZXJfcmdiKHZpc3VhbCkgKHZpc3VhbCktPmJpdHNfcGVyX3JnYgorI2Rl
ZmluZSBnZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkgKGNvbnRl
eHQpLT5hY3Rpb24KKyNkZWZpbmUgZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0
KSAoY29udGV4dCktPmFjdGlvbnMKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwg
MikKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdl
dF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkKKyNkZWZp
bmUgZ3RrX3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9G
TEFHUygod2lkZ2V0KSwgR1RLX1JFQUxJWkVEKQorI2RlZmluZSBndGtfcmFuZ2VfZ2V0X21pbl9z
bGlkZXJfc2l6ZShyYW5nZSkgKHJhbmdlKS0+bWluX3NsaWRlcl9zaXplCisjZW5kaWYgLy8gR1RL
X0NIRUNLX1ZFUlNJT04oMiwgMjAsIDApCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTks
IDApCisjZGVmaW5lIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSBHVEtfV0lER0VUX1RP
UExFVkVMKHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBH
VEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfaGFzX3dp
bmRvdyh3aWRnZXQpICFHVEtfV0lER0VUX05PX1dJTkRPVyh3aWRnZXQpCisjZGVmaW5lIGd0a193
aWRnZXRfZ2V0X2Nhbl9mb2N1cyh3aWRnZXQpIEdUS19XSURHRVRfQ0FOX0ZPQ1VTKHdpZGdldCkK
KyNkZWZpbmUgZ3RrX3dpZGdldF9pc19zZW5zaXRpdmUod2lkZ2V0KSBHVEtfV0lER0VUX0lTX1NF
TlNJVElWRSh3aWRnZXQpCisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCisK
KyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDApCisjZGVmaW5lIGd0a193aWRnZXRfc2V0
X3Zpc2libGUod2lkZ2V0LCBGQUxTRSkgR1RLX1dJREdFVF9VTlNFVF9GTEFHUygod2lkZ2V0KSwg
R1RLX1ZJU0lCTEUpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X3Zpc2libGUod2lkZ2V0KSAoR1RL
X1dJREdFVF9GTEFHUyh3aWRnZXQpICYgR1RLX1ZJU0lCTEUpCisKKyNkZWZpbmUgZ3RrX3dpZGdl
dF9zZXRfd2luZG93KHdpZGdldCwgbmV3X3dpbmRvdykgKHdpZGdldCktPndpbmRvdyA9IChuZXdf
d2luZG93KQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMod2lkZ2V0LCBUUlVFKSBH
VEtfV0lER0VUX1NFVF9GTEFHUygod2lkZ2V0KSwgR1RLX0NBTl9GT0NVUykKKyNkZWZpbmUgZ3Rr
X3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9jKSAoKihhbGxvYykgPSAod2lkZ2V0
KS0+YWxsb2NhdGlvbikKKyNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQs
IGFsbG9jKSAoKHdpZGdldCktPmFsbG9jYXRpb24gPSAqKGFsbG9jKSkKKyNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywg
MykKK3ZvaWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93KiwgZ2ludCB4LCBn
aW50IHksIGdpbnQqIHJvb3RYLCBnaW50KiByb290WSk7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZF
UlNJT04oMiwgMTcsIDMpCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCitjb25z
dCBnY2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKKyNlbmRpZiAv
LyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKKworCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDE0LCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAod2lkZ2V0
KS0+d2luZG93CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChhZGopLT52
YWx1ZQorI2RlZmluZSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAoZGlhbG9n
KS0+dmJveAorI2RlZmluZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpIChkaWFs
b2cpLT5hY3Rpb25fYXJlYQorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChk
YXRhKSAoZGF0YSktPmxlbmd0aAorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEo
ZGF0YSkgKGRhdGEpLT5kYXRhCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFyZ2V0
KGRhdGEpIChkYXRhKS0+dGFyZ2V0CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3Np
emUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKKyNkZWZpbmUg
Z3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFsdWUgPSBu
ZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3VmFsdWUp
ICgoYWRqKS0+bG93ZXIgPSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3Vw
cGVyKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKKwordm9pZCBndGtf
YWRqdXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0bWVudCosIGdkb3VibGUgdmFsdWUsIGdkb3Vi
bGUgbG93ZXIsIGdkb3VibGUgdXBwZXIsCisgICAgZ2RvdWJsZSBzdGVwSW5jcmVtZW50LCBnZG91
YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUpOworCit2b2lkIGd0a19hZGp1c3Rt
ZW50X3NldF92YWx1ZShHdGtBZGp1c3RtZW50KiBhZGp1c21lbnQsIGdkb3VibGUgdmFsdWUpOwor
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQorCitHZGtEZXZpY2UqIGdldERl
ZmF1bHRHREtQb2ludGVyRGV2aWNlKEdka1dpbmRvdyopOworR2RrQ3Vyc29yKiBibGFua0N1cnNv
cigpOworCisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNywgMSkKK2dib29sZWFuIGdfc2ln
bmFsX2FjY3VtdWxhdG9yX2ZpcnN0X3dpbnMoR1NpZ25hbEludm9jYXRpb25IaW50KiwgR1ZhbHVl
KiByZXR1cm5BY2N1bXVsYXRvciwgY29uc3QgR1ZhbHVlKiBoYW5kbGVyUmV0dXJuLCBncG9pbnRl
ciBkYXRhKTsKKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCit2b2lk
IGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICosIGludCBtb25pdG9y
LCBHZGtSZWN0YW5nbGUgKmFyZWEpOworI2VuZGlmCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
LyBHdGtWZXJzaW9uaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lk
Z2V0QmFja2luZ1N0b3JlWDExLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFj
a2luZ1N0b3JlWDExLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjFkZjRiYjdjMDUwZDg2NGVjYWExM2MxY2Vl
ZmUxNTM1ZWU4OWIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtX
aWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldEJhY2tpbmdTdG9yZS5oIgor
CisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisj
aW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+CisjaW5jbHVkZSA8
Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCitwdWJsaWM6CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIFBpeG1hcCBtX3Bp
eG1hcDsKKyAgICBHQyBtX2djOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFj
ZTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGU+IGNy
ZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSh3aWRnZXQs
IHNpemUpKTsKKyAgICB9CisKKyAgICB+V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSgpCisgICAg
eworICAgICAgICBYRnJlZVBpeG1hcChtX2Rpc3BsYXksIG1fcGl4bWFwKTsKKyAgICAgICAgWEZy
ZWVHQyhtX2Rpc3BsYXksIG1fZ2MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBXZSBrZWVw
IHR3byBjb3BpZXMgb2YgdGhlIHN1cmZhY2UgaGVyZSwgd2hpY2ggd2lsbCBkb3VibGUgdGhlIG1l
bW9yeSB1c2FnZSwgYnV0IGluY3JlYXNlCisgICAgLy8gc2Nyb2xsaW5nIHBlcmZvcm1hbmNlIHNp
bmNlIHdlIGRvIG5vdCBoYXZlIHRvIGtlZXAgcmVhbGxvY2F0aW5nIGEgbWVtb3J5IHJlZ2lvbiBk
dXJpbmcKKyAgICAvLyBxdWljayBzY3JvbGxpbmcgcmVxdWVzdHMuCisgICAgV2lkZ2V0QmFja2lu
Z1N0b3JlUHJpdmF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAg
ICB7CisgICAgICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdp
ZGdldCk7CisgICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3Zpc3VhbF9nZXRfc2NyZWVu
KHZpc3VhbCk7CisgICAgICAgIG1fZGlzcGxheSA9IEdES19TQ1JFRU5fWERJU1BMQVkoc2NyZWVu
KTsKKyAgICAgICAgbV9waXhtYXAgPSBYQ3JlYXRlUGl4bWFwKG1fZGlzcGxheSwKKyAgICAgICAg
ICAgIEdES19XSU5ET1dfWElEKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAor
ICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBnZGtfdmlzdWFsX2dldF9k
ZXB0aCh2aXN1YWwpKTsKKyAgICAgICAgbV9nYyA9IFhDcmVhdGVHQyhtX2Rpc3BsYXksIG1fcGl4
bWFwLCAwLCAwKTsKKworICAgICAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1
cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbV9waXhtYXAsCisgICAgICAgICAgICBHREtfVklTVUFM
X1hWSVNVQUwodmlzdWFsKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgfQor
fTsKKworUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IFdpZGdldEJhY2tpbmdTdG9yZTo6
Y3JlYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlKHdpZGdldCwgc2l6ZSkpOworfQor
CitXaWRnZXRCYWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdpZGdl
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fcHJpdmF0ZShXaWRnZXRCYWNraW5nU3Rv
cmVQcml2YXRlOjpjcmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQorewor
fQorCitXaWRnZXRCYWNraW5nU3RvcmU6On5XaWRnZXRCYWNraW5nU3RvcmUoKQoreworfQorCitj
YWlyb19zdXJmYWNlX3QqIFdpZGdldEJhY2tpbmdTdG9yZTo6Y2Fpcm9TdXJmYWNlKCkKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgV2lkZ2V0QmFj
a2luZ1N0b3JlOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6
ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIEludFJlY3QgdGFyZ2V0UmVjdChzY3JvbGxSZWN0KTsK
KyAgICB0YXJnZXRSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KTsKKyAgICB0YXJnZXRSZWN0LmludGVy
c2VjdChzY3JvbGxSZWN0KTsKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9wcml2YXRlLT5tX3N1cmZhY2Uu
Z2V0KCkpOworICAgIFhDb3B5QXJlYShtX3ByaXZhdGUtPm1fZGlzcGxheSwgbV9wcml2YXRlLT5t
X3BpeG1hcCwgbV9wcml2YXRlLT5tX3BpeG1hcCwgbV9wcml2YXRlLT5tX2djLCAKKyAgICAgICAg
dGFyZ2V0UmVjdC54KCkgLSBzY3JvbGxPZmZzZXQud2lkdGgoKSwgdGFyZ2V0UmVjdC55KCkgLSBz
Y3JvbGxPZmZzZXQuaGVpZ2h0KCksCisgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0
UmVjdC5oZWlnaHQoKSwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpKTsKKyAgICBjYWly
b19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgp
LAorICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0tVUkxHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2ZTgyMWQxY2I3MzRkYjQyOWJiNjQ3
YTQ1NmE0ZTEyMjhhMzJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0tVUkxHdGsuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJp
bmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8
ICFpc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBHUmVmUHRy
PEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aCgpLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICBHT3duUHRyPGNoYXI+IGZpbGVuYW1lKGdfZmlsZV9nZXRfcGF0aChm
aWxlLmdldCgpKSk7CisgICAgcmV0dXJuIGZpbGVuYW1lVG9TdHJpbmcoZmlsZW5hbWUuZ2V0KCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5
QmluZGluZ1RyYW5zbGF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0MmUwZjY4OTY4YTFmZjExNjdiZWU4
YmY2ZTdmNjY4MWUwMmNjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleUJpbmRpbmdUcmFuc2xh
dG9yLmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSA8Z2RrL2dka2tl
eXN5bXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiBJbnRDb25zdENoYXJIYXNoTWFw
OworCitzdGF0aWMgdm9pZCBiYWNrc3BhY2VDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5
QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlz
c2lvbl9ieV9uYW1lKHdpZGdldCwgImJhY2tzcGFjZSIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKCJEZWxldGVCYWNrd2FyZCIpOworfQorCitzdGF0aWMgdm9pZCBz
ZWxlY3RBbGxDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gc2VsZWN0LCBLZXlC
aW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNz
aW9uX2J5X25hbWUod2lkZ2V0LCAic2VsZWN0LWFsbCIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKHNlbGVjdCA/ICJTZWxlY3RBbGwiIDogIlVuc2VsZWN0Iik7Cit9
CisKK3N0YXRpYyB2b2lkIGN1dENsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBL
ZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2Vt
aXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY3V0LWNsaXBib2FyZCIpOworICAgIHRyYW5zbGF0b3It
PmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJDdXQiKTsKK30KKworc3RhdGljIHZvaWQgY29weUNs
aXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciog
dHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0
LCAiY29weS1jbGlwYm9hcmQiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZCgiQ29weSIpOworfQorCitzdGF0aWMgdm9pZCBwYXN0ZUNsaXBib2FyZENhbGxiYWNrKEd0
a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAg
ICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAicGFzdGUtY2xpcGJvYXJk
Iik7CisgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIlBhc3RlIik7Cit9
CisKK3N0YXRpYyB2b2lkIHRvZ2dsZU92ZXJ3cml0ZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0
LCBLZXlCaW5kaW5nVHJhbnNsYXRvciopCit7CisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0b2dn
bGluZyB0aGUgb3ZlcndyaXRlIG1vZGUsIGJ1dCB0aGUgZGVmYXVsdCBjYWxsYmFjayBleHBlY3Rz
CisgICAgLy8gdGhlIEd0a1RleHRWaWV3IHRvIGhhdmUgYSBsYXlvdXQsIHNvIHdlIGhhbmRsZSB0
aGlzIHNpZ25hbCBqdXN0IHRvIHN0b3AgaXQuCisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9i
eV9uYW1lKHdpZGdldCwgInRvZ2dsZS1vdmVyd3JpdGUiKTsKK30KKworLy8gR1RLKyB3aWxsIHN0
aWxsIHNlbmQgdGhlc2Ugc2lnbmFscyB0byB0aGUgd2ViIHZpZXcuIFNvIHdlIGNhbiBzYWZlbHkg
c3RvcCBzaWduYWwKKy8vIGVtaXNzaW9uIHdpdGhvdXQgYnJlYWtpbmcgYWNjZXNzaWJpbGl0eS4K
K3N0YXRpYyB2b2lkIHBvcHVwTWVudUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5k
aW5nVHJhbnNsYXRvciopCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdp
ZGdldCwgInBvcHVwLW1lbnUiKTsKK30KKworc3RhdGljIHZvaWQgc2hvd0hlbHBDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQoreworICAgIGdfc2lnbmFs
X3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJzaG93LWhlbHAiKTsKK30KKworc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGd0a0RlbGV0ZUNvbW1hbmRzW11bMl0gPSB7CisgICAgeyAiRGVs
ZXRlQmFja3dhcmQiLCAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAg
ICAgICAgICAgIH0sIC8vIENoYXJhY3RlcnMKKyAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQiLCAg
ICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gV29y
ZCBlbmRzCisgICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3Jk
Rm9yd2FyZCIgICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmRzCisgICAgeyAiRGVsZXRlVG9C
ZWdpbm5pbmdPZkxpbmUiLCAgICAgICJEZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAg
ICAgIH0sIC8vIExpbmVzCisgICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICJE
ZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgIH0sIC8vIExpbmUgZW5kcworICAg
IHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFw
aCIgICAgICAgICAgICAgICB9LCAvLyBQYXJhZ3JhcGggZW5kcworICAgIHsgIkRlbGV0ZVRvQmVn
aW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAgICAg
ICB9LCAvLyBQYXJhZ3JhcGhzCisgICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gV2hpdGVzcGFjZSAo
TS1cIGluIEVtYWNzKQorfTsKKworc3RhdGljIHZvaWQgZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNr
KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtEZWxldGVUeXBlIGRlbGV0ZVR5cGUsIGdpbnQgY291bnQs
IEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3Bf
ZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJkZWxldGUtZnJvbS1jdXJzb3IiKTsKKyAgICBpbnQg
ZGlyZWN0aW9uID0gY291bnQgPiAwID8gMSA6IDA7CisKKyAgICAvLyBFbnN1cmluZyB0aGF0IGRl
bGV0ZVR5cGUgPD0gR19OX0VMRU1FTlRTIGhlcmUgcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5p
bmcKKyAgICAvLyB0aGF0IHRoZSBjb25kaXRpb24gaXMgYWx3YXlzIHRydWUuCisKKyAgICBpZiAo
ZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1dPUkRTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9u
KSB7CisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92
ZVdvcmRGb3J3YXJkIik7CisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQi
KTsKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3Zl
V29yZEZvcndhcmQiKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlwZSA9PSBH
VEtfREVMRVRFX0RJU1BMQVlfTElORVMpIHsKKyAgICAgICAgaWYgKCFkaXJlY3Rpb24pCisgICAg
ICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVnaW5u
aW5nT2ZMaW5lIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZkxpbmUiKTsKKyAgICB9IGVsc2UgaWYgKGRl
bGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9QQVJBR1JBUEhTKSB7CisgICAgICAgIGlmICghZGlyZWN0
aW9uKQorICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1v
dmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRy
YW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9FbmRPZlBhcmFncmFwaCIp
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtEZWxldGVDb21tYW5k
c1tkZWxldGVUeXBlXVtkaXJlY3Rpb25dOworICAgIGlmICghcmF3Q29tbWFuZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCisgICAg
ICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOworfQor
CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZ3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7CisgICAg
eyAgICJNb3ZlQmFja3dhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1v
dmVGb3J3YXJkIiwKKyAgICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAg
ICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
IH0sIC8vIEZvcndhcmQvYmFja3dhcmQgZ3JhcGhlbWUKKyAgICB7ICAgIk1vdmVMZWZ0IiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiwKKyAgICAgICAg
Ik1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZv
cndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8vIExlZnQvcmlnaHQgZ3Jh
cGhlbWUKKyAgICB7ICAgIk1vdmVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTW92ZVdvcmRGb3J3YXJkIiwKKyAgICAgICAgIk1vdmVXb3JkQmFja3dhcmRBbmRN
b2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgIH0sIC8vIEZvcndhcmQvYmFja3dhcmQgd29yZAorICAgIHsgICAiTW92
ZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIs
CisgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAg
ICAgIk1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LCAvLyBVcC9k
b3duIGxpbmUKKyAgICB7ICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgICAgICAgICAg
ICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiwKKyAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09m
TGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRzCisgICAgeyAgICJNb3Zl
UGFyYWdyYXBoRm9yd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYXJhZ3Jh
cGhCYWNrd2FyZCIsCisgICAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVj
dGlvbiIsICAgICAgICAgIk1vdmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIg
ICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaHMKKyAgICB7ICAgIk1vdmVUb0JlZ2lubmluZ09mUGFy
YWdyYXBoIiwgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiLAorICAg
ICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICJN
b3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93biBw
YXJhZ3JhcGggZW5kcy4KKyAgICB7ICAgIk1vdmVQYWdlVXAiLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiwKKyAgICAgICAgIk1vdmVQYWdlVXBBbmRN
b2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gcGFnZQorICAgIHsgICAiTW92ZVRv
QmVnaW5uaW5nT2ZEb2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRv
Y3VtZW50IiwKKyAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxl
Y3Rpb24iLCAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgIH0s
IC8vIEJlZ2luL2VuZCBvZiBidWZmZXIKKyAgICB7ICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKK307CisKK3N0
YXRpYyB2b2lkIG1vdmVDdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92ZW1l
bnRTdGVwIHN0ZXAsIGdpbnQgY291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgS2V5Qmlu
ZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgIm1vdmUtY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9IGNv
dW50ID4gMCA/IDEgOiAwOworICAgIGlmIChleHRlbmRTZWxlY3Rpb24pCisgICAgICAgIGRpcmVj
dGlvbiArPSAyOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBHX05f
RUxFTUVOVFMoZ3RrTW92ZUNvbW1hbmRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
Y2hhciogcmF3Q29tbWFuZCA9IGd0a01vdmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOworICAg
IGlmICghcmF3Q29tbWFuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhYnMoY291bnQpOyBpKyspCisgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0
b3JDb21tYW5kKHJhd0NvbW1hbmQpOworfQorCitLZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5Qmlu
ZGluZ1RyYW5zbGF0b3IoKQorICAgIDogbV9uYXRpdmVXaWRnZXQoZ3RrX3RleHRfdmlld19uZXco
KSkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFja3Nw
YWNlIiwgR19DQUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxMQkFD
SyhjdXRDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9u
YXRpdmVXaWRnZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNsaXBi
b2FyZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdl
dC5nZXQoKSwgInBhc3RlLWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCks
ICJzZWxlY3QtYWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIsIEdf
Q0FMTEJBQ0sobW92ZUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJBQ0so
ZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X25hdGl2ZVdpZGdldC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRvZ2ds
ZU92ZXJ3cml0ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2
ZVdpZGdldC5nZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInNo
b3ctaGVscCIsIEdfQ0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOworfQorCitzdHJ1
Y3QgS2V5Q29tYmluYXRpb25FbnRyeSB7CisgICAgdW5zaWduZWQgZ2RrS2V5Q29kZTsKKyAgICB1
bnNpZ25lZCBzdGF0ZTsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0
IEtleUNvbWJpbmF0aW9uRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7IEdES19iLCAg
ICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgIH0s
CisgICAgeyBHREtfaSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJU
b2dnbGVJdGFsaWMiICB9LAorICAgIHsgR0RLX0VzY2FwZSwgICAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQ2FuY2VsIiAgICAgICAgfSwKKyAgICB7IEdES19ncmVhdGVyLCAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCit9OworCisv
LyBUaGVzZSBjb21tYW5kcyBhcmUgdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIHNvIHNob3VsZCB0
YWtlIHBsYWNlCisvLyB3aGlsZSBoYW5kbGluZyB0aGUgS2V5UHJlc3MgZXZlbnQuCitzdGF0aWMg
Y29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7IEdE
S19UYWIsICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIg
ICAgIH0sCisgICAgeyBHREtfVGFiLCAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAg
ICAgICJJbnNlcnRCYWNrdGFiIiB9LAorfTsKKwordm9pZCBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6
Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIEV2ZW50VHlw
ZSB0eXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBjb21tYW5kTGlzdCkKK3sKKyAgICBtX3BlbmRp
bmdFZGl0b3JDb21tYW5kcy5jbGVhcigpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAg
ICBndGtfYmluZGluZ3NfYWN0aXZhdGVfZXZlbnQoR1RLX09CSkVDVChtX25hdGl2ZVdpZGdldC5n
ZXQoKSksIGV2ZW50KTsKKyNlbHNlCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdf
T0JKRUNUKG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgZXZlbnQpOworI2VuZGlmCisKKyAgICBpZiAo
IW1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmlzRW1wdHkoKSkgeworICAgICAgICBjb21tYW5kTGlz
dC5hcHBlbmQobV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlEb3du
Q29tbWFuZHNNYXAsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhh
c2hNYXAsIGtleVByZXNzQ29tbWFuZHNNYXAsICgpKTsKKworICAgIGlmIChrZXlEb3duQ29tbWFu
ZHNNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05f
RUxFTUVOVFMoa2V5RG93bkVudHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29tbWFu
ZHNNYXAuc2V0KGtleURvd25FbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5RG93bkVudHJpZXNb
aV0uZ2RrS2V5Q29kZSwga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKyspCisg
ICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0uc3Rh
dGUgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uZ2RrS2V5Q29kZSwga2V5UHJlc3NFbnRyaWVz
W2ldLm5hbWUpOworICAgIH0KKworICAgIC8vIFNwZWNpYWwtY2FzZSBlbnRlciBrZXlzIGZvciB3
ZSB3YW50IHRoZW0gdG8gd29yayByZWdhcmRsZXNzIG9mIG1vZGlmaWVyLgorICAgIGlmICgoZXZl
bnQtPmtleXZhbCA9PSBHREtfUmV0dXJuIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0tQX0VudGVy
IHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0lTT19FbnRlcikgJiYgdHlwZSA9PSBLZXlQcmVzcykg
eworICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQoIkluc2VydE5ld0xpbmUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdhbnQgY2hh
ckNvZGUoKSwgYnV0IGtleUNvZGUoKSBkb2VzIHRoYXQuCisgICAgaW50IG1hcEtleSA9IGV2ZW50
LT5zdGF0ZSA8PCAxNiB8IGV2ZW50LT5rZXl2YWw7CisgICAgaWYgKG1hcEtleSkgeworICAgICAg
ICBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBjb21tYW5kTWFwID0gdHlwZSA9PSBLZXlEb3du
ID8gICZrZXlEb3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKKyAgICAgICAg
aWYgKGNvbnN0IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5KSkg
eworICAgICAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKGNvbW1hbmRTdHJpbmcpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzY0MzZkZTZjYjg2M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEtleUJpbmRpbmdUcmFuc2xh
dG9yX2gKKyNkZWZpbmUgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAorCisjaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleUJpbmRpbmdUcmFuc2xhdG9yIHsKK3B1Ymxp
YzoKKyAgICBLZXlCaW5kaW5nVHJhbnNsYXRvcigpOworCisgICAgZW51bSBFdmVudFR5cGUgeyBL
ZXlEb3duLCBLZXlQcmVzcyB9OworICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVu
dChHZGtFdmVudEtleSosIEV2ZW50VHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYpOworICAgIHZv
aWQgYWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkgeyBtX3BlbmRp
bmdFZGl0b3JDb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7IH0KKworcHJpdmF0ZToKKyAgICBHUmVm
UHRyPEd0a1dpZGdldD4gbV9uYXRpdmVXaWRnZXQ7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBt
X3BlbmRpbmdFZGl0b3JDb21tYW5kczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjJm
NDljNWRiYTNjOTg2YWRhNmU3YTNjYTI3NWZhYjJiZjIzODVlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBVc2luZyBwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdCgpIGhlcmUgaXMgbm90IGFuIG9wdGlv
biwgYmVjYXVzZQorLy8gaXQgZG9lc24ndCBzdXBwb3J0IGNoYW5naW5nIHRoZSBsb2NhbGUgaW4g
cnVudGltZSwgc28gaXQgcmV0dXJucworLy8gYWx3YXlzIHRoZSBzYW1lIHZhbHVlLgorc3RhdGlj
IFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkKK3sKKyAgICBjaGFyKiBsb2NhbGVEZWZhdWx0ID0g
c2V0bG9jYWxlKExDX0NUWVBFLCAwKTsKKworICAgIGlmICghbG9jYWxlRGVmYXVsdCkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygiYyIpOworCisgICAgR093blB0cjxnY2hhcj4gbm9ybWFsaXplZERl
ZmF1bHQoZ19hc2NpaV9zdHJkb3duKGxvY2FsZURlZmF1bHQsIC0xKSk7CisgICAgY2hhciogcHRy
ID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpLCAnXycpOworCisgICAgaWYgKHB0cikK
KyAgICAgICAgKnB0ciA9ICctJzsKKworICAgIHB0ciA9IHN0cmNocihub3JtYWxpemVkRGVmYXVs
dC5nZXQoKSwgJy4nKTsKKworICAgIGlmIChwdHIpCisgICAgICAgICpwdHIgPSAnXDAnOworCisg
ICAgcmV0dXJuIFN0cmluZyhub3JtYWxpemVkRGVmYXVsdC5nZXQoKSk7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcygpCit7CisgICAgVmVjdG9yPFN0
cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKKyAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
LmFwcGVuZChwbGF0Zm9ybUxhbmd1YWdlKCkpOworICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFu
Z3VhZ2VzOworfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2Nh
bGl6ZWRTdHJpbmdzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5n
c0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM3NTE4MjdmOGVlNTIwMjg2OTdhMmRhMzllM2IwZTdhZWVm
ZDFlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3Ry
aW5nc0d0ay5jcHAKQEAgLTAsMCArMSw3ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
aHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBndGtTdG9ja0xhYmVs
KGNvbnN0IGNoYXIqIHN0b2NrSUQpCit7CisgICAgR3RrU3RvY2tJdGVtIGl0ZW07CisgICAgaWYg
KCFndGtfc3RvY2tfbG9va3VwKHN0b2NrSUQsICZpdGVtKSkKKyAgICAgICAgcmV0dXJuIHN0b2Nr
SUQ7CisgICAgcmV0dXJuIGl0ZW0ubGFiZWw7Cit9CisKK1N0cmluZyBzdWJtaXRCdXR0b25EZWZh
dWx0TGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlN1Ym1pdCIpKTsK
K30KKworU3RyaW5nIGlucHV0RWxlbWVudEFsdFRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIlN1Ym1pdCIpKTsKK30KKworU3RyaW5nIHJlc2V0QnV0dG9uRGVmYXVsdExh
YmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSZXNldCIpKTsKK30KKwor
U3RyaW5nIGRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkRldGFpbHMiKSk7Cit9CisKK1N0cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRy
b2R1Y3Rpb24oKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlRoaXMgaXMgYSBz
ZWFyY2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICIpKTsKK30KKworU3RyaW5n
IGZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIkNob29zZSBGaWxlIikpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZU11bHRp
cGxlRmlsZXNMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3Nl
IEZpbGVzIikpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIihOb25lKSIpKTsKK30KKworU3RyaW5n
IGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiKE5vbmUpIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Bl
bkxpbmtJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3Bl
biBMaW5rIGluIE5ldyBfV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
RG93bmxvYWRMaW5rVG9EaXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJf
RG93bmxvYWQgTGlua2VkIEZpbGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdD
b3B5TGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJD
b3B5IExpbmsgTG9jX2F0aW9uIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Bl
bkltYWdlSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9w
ZW4gX0ltYWdlIGluIE5ldyBXaW5kb3ciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZEltYWdlVG9EaXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJTYV92ZSBJbWFnZSBBcyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJ
bWFnZVRvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3Bf
eSBJbWFnZSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRv
Q2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3B5IEltYWdl
IF9BZGRyZXNzIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVvSW5O
ZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX1ZpZGVv
IGluIE5ldyBXaW5kb3ciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuQXVk
aW9Jbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBf
QXVkaW8gaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Nv
cHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiQ29wX3kgVmlkZW8gTGluayBMb2NhdGlvbiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0NvcHlBdWRpb0xpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiQ29wX3kgQXVkaW8gTGluayBMb2NhdGlvbiIpKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIl9Ub2dnbGUgTWVkaWEgQ29udHJvbHMiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIlRvZ2dsZSBNZWRpYSBfTG9vcCBQbGF5YmFjayIpKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJTd2l0Y2ggVmlkZW8gdG8gX0Z1bGxzY3JlZW4iKSk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIl9QbGF5IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
TWVkaWFQYXVzZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1BhdXNlIikp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfTXV0ZSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJPcGVuIF9GcmFtZSBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnQ29weSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3Ry
aW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19DT1BZKSk7CisgICAgcmV0dXJu
IHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKQorewor
ICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tM
YWJlbChHVEtfU1RPQ0tfREVMRVRFKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKQoreworICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfU0VM
RUNUX0FMTCkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0lu
c2VydCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnSW5wdXRNZXRob2RzKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJJbnB1dCBfTWV0aG9kcyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFj
aygpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChn
dGtTdG9ja0xhYmVsKEdUS19TVE9DS19HT19CQUNLKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7
Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKQoreworICAgIHN0YXRp
YyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtf
U1RPQ0tfR09fRk9SV0FSRCkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnU3RvcCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVs
ID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19TVE9QKSk7CisgICAg
cmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9SZWxvYWQiKSk7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDdXQoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tM
YWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ1VUKSk7Cisg
ICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdQYXN0
ZSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChn
dGtTdG9ja0xhYmVsKEdUS19TVE9DS19QQVNURSkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk5vIEd1ZXNzZXMgRm91bmQiKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiX0lnbm9yZSBTcGVsbGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIl9MZWFybiBTcGVsbGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nl
YXJjaFdlYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1NlYXJjaCB0aGUg
V2ViIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5
KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0xvb2sg
VXAgaW4gRGljdGlvbmFyeSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3BlbiBMaW5rIikpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiSWdub3JlIF9HcmFtbWFyIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJTcGVsbGluZyBhbmQgX0dyYW1tYXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChib29sIHNob3cpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoc2hvdyA/IF8oIl9TaG93IFNwZWxsaW5nIGFuZCBHcmFtbWFyIikgOiBf
KCJfSGlkZSBTcGVsbGluZyBhbmQgR3JhbW1hciIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
Il9DaGVjayBEb2N1bWVudCBOb3ciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIkNoZWNrIFNwZWxsaW5nIFdoaWxlIF9UeXBpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIkNoZWNrIF9HcmFtbWFyIFdpdGggU3BlbGxpbmciKSk7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiX0ZvbnQiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xk
KCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0
a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0JPTEQpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpCit7CisgICAgc3RhdGljIFN0cmlu
ZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19J
VEFMSUMpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1VuZGVybGluZSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3Ry
aW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19VTkRFUkxJTkUpKTsKKyAgICBy
ZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUo
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9PdXRsaW5lIikpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkluc3BlY3QgX0VsZW1lbnQiKSk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJNTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiTFJNIF9MZWZ0LXRvLXJpZ2h0IG1hcmsiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxNTWFyaygpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiUkxNIF9SaWdodC10by1sZWZ0IG1hcmsiKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyaygpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiTFJFIExlZnQtdG8tcmlnaHQgX2VtYmVkZGluZyIpKTsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTEVNYXJrKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTEUgUmlnaHQtdG8tbGVmdCBlX21iZWRkaW5n
IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcmso
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSTyBMZWZ0LXRvLXJpZ2h0IF9v
dmVycmlkZSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRS
TE9NYXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTE8gUmlnaHQtdG8t
bGVmdCBvX3ZlcnJpZGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2Rl
SW5zZXJ0UERGTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUERGIF9Q
b3AgZGlyZWN0aW9uYWwgZm9ybWF0dGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1VuaWNvZGVJbnNlcnRaV1NNYXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJaV1MgX1plcm8gd2lkdGggc3BhY2UiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0WldKTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiWldKIFplcm8gd2lkdGggX2pvaW5lciIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV05KTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiWldOSiBaZXJvIHdpZHRoIF9ub24tam9pbmVyIikpOworfQorCitTdHJpbmcgc2Vh
cmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJObyByZWNlbnQgc2VhcmNoZXMiKSk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51UmVj
ZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSZWNl
bnQgc2VhcmNoZXMiKSk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hl
c1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9DbGVhciByZWNlbnQg
c2VhcmNoZXMiKSk7Cit9CisKK1N0cmluZyBBWERlZmluaXRpb25UZXh0KCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJkZWZpbml0aW9uIikpOworfQorCitTdHJpbmcgQVhEZXNj
cmlwdGlvbkxpc3RUZXJtVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
dGVybSIpKTsKK30KKworU3RyaW5nIEFYRGVzY3JpcHRpb25MaXN0RGV0YWlsVGV4dCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZGVzY3JpcHRpb24iKSk7Cit9CisKK1N0cmlu
ZyBBWEZvb3RlclJvbGVEZXNjcmlwdGlvblRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oImZvb3RlciIpKTsKK30KKworU3RyaW5nIEFYQnV0dG9uQWN0aW9uVmVyYigpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicHJlc3MiKSk7Cit9CisKK1N0cmluZyBB
WFJhZGlvQnV0dG9uQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Xygic2VsZWN0IikpOworfQorCitTdHJpbmcgQVhUZXh0RmllbGRBY3Rpb25WZXJiKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJhY3RpdmF0ZSIpKTsKK30KKworU3RyaW5nIEFY
Q2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygidW5jaGVjayIpKTsKK30KKworU3RyaW5nIEFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rpb25W
ZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJjaGVjayIpKTsKK30KKwor
U3RyaW5nIEFYTGlua0FjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oImp1bXAiKSk7Cit9CisKK1N0cmluZyBBWE1lbnVMaXN0UG9wdXBBY3Rpb25WZXJiKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBBWE1lbnVMaXN0QWN0aW9uVmVyYigp
Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorICAgIAorU3RyaW5nIG1pc3NpbmdQbHVnaW5U
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJNaXNzaW5nIFBsdWctaW4i
KSk7Cit9CisKK1N0cmluZyBjcmFzaGVkUGx1Z2luVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJQbHVnLWluIEZhaWx1cmUiKSk7
Cit9CisKK1N0cmluZyBibG9ja2VkUGx1Z2luQnlDb250ZW50U2VjdXJpdHlQb2xpY3lUZXh0KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIGluc2VjdXJlUGx1Z2luVmVyc2lvblRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgaW5hY3RpdmVQbHVnaW5UZXh0KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIG11bHRpcGxlRmlsZVVwbG9hZFRleHQodW5zaWduZWQgbnVtYmVyT2ZGaWxlcykKK3sKKyAg
ICAvLyBGSVhNRTogSWYgdGhpcyBmaWxlIGdldHMgbG9jYWxpemVkLCB0aGlzIHNob3VsZCByZWFs
bHkgYmUgbG9jYWxpemVkIGFzIG9uZSBzdHJpbmcgd2l0aCBhIHdpbGRjYXJkIGZvciB0aGUgbnVt
YmVyLgorICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXJPZkZpbGVzKSArIFN0cmluZzo6
ZnJvbVVURjgoXygiIGZpbGVzIikpOworfQorCitTdHJpbmcgdW5rbm93bkZpbGVTaXplVGV4dCgp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVW5rbm93biIpKTsKK30KKworU3Ry
aW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKENfKCJUaXRs
ZSBzdHJpbmcgZm9yIGltYWdlcyIsICIlcyAgKCVkeCVkIHBpeGVscykiKSwKKyAgICAgICAgZmls
ZW5hbWUudXRmOCgpLmRhdGEoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworfQorCisKKyNpZiBFTkFC
TEUoVklERU8pCisKK1N0cmluZyBtZWRpYUVsZW1lbnRMb2FkaW5nU3RhdGVUZXh0KCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMb2FkaW5nLi4uIikpOworfQorCitTdHJpbmcg
bWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiTGl2ZSBCcm9hZGNhc3QiKSk7Cit9CisKK1N0cmluZyBsb2NhbGl6ZWRN
ZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
bmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiYXVkaW8gZWxlbWVudCBjb250cm9sbGVyIikpOworICAgIGlmIChuYW1lID09ICJWaWRlb0Vs
ZW1lbnQiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2aWRlbyBlbGVtZW50
IGNvbnRyb2xsZXIiKSk7CisgICAgaWYgKG5hbWUgPT0gIk11dGVCdXR0b24iKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtdXRlIikpOworICAgIGlmIChuYW1lID09ICJVbk11
dGVCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bm11dGUiKSk7
CisgICAgaWYgKG5hbWUgPT0gIlBsYXlCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJwbGF5IikpOworICAgIGlmIChuYW1lID09ICJQYXVzZUJ1dHRvbiIpCisgICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBhdXNlIikpOworICAgIGlmIChuYW1lID09
ICJTbGlkZXIiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1l
IikpOworICAgIGlmIChuYW1lID09ICJTbGlkZXJUaHVtYiIpCisgICAgICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInRpbWVsaW5lIHNsaWRlciB0aHVtYiIpKTsKKyAgICBpZiAobmFtZSA9
PSAiUmV3aW5kQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYmFj
ayAzMCBzZWNvbmRzIikpOworICAgIGlmIChuYW1lID09ICJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9u
IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmV0dXJuIHRvIHJlYWx0aW1l
IikpOworICAgIGlmIChuYW1lID09ICJDdXJyZW50VGltZURpc3BsYXkiKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbGFwc2VkIHRpbWUiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlRpbWVSZW1haW5pbmdEaXNwbGF5IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygicmVtYWluaW5nIHRpbWUiKSk7CisgICAgaWYgKG5hbWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGF0dXMiKSk7CisgICAgaWYgKG5h
bWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oImVudGVyIGZ1bGxzY3JlZW4iKSk7CisgICAgaWYgKG5hbWUgPT0gIkV4aXRGdWxs
c2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZXhpdCBm
dWxsc2NyZWVuIikpOworICAgIGlmIChuYW1lID09ICJTZWVrRm9yd2FyZEJ1dHRvbiIpCisgICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImZhc3QgZm9yd2FyZCIpKTsKKyAgICBpZiAo
bmFtZSA9PSAiU2Vla0JhY2tCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJmYXN0IHJldmVyc2UiKSk7CisgICAgaWYgKG5hbWUgPT0gIlNob3dDbG9zZWRDYXB0aW9u
c0J1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInNob3cgY2xvc2Vk
IGNhcHRpb25zIikpOworICAgIGlmIChuYW1lID09ICJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24i
KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJoaWRlIGNsb3NlZCBjYXB0aW9u
cyIpKTsKKyAgICBpZiAobmFtZSA9PSAiQ29udHJvbHNQYW5lbCIpCisgICAgICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIm1lZGlhIGNvbnRyb2xzIikpOworCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgbG9jYWxpemVkTWVk
aWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
bmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiYXVkaW8gZWxlbWVudCBwbGF5YmFjayBjb250cm9scyBhbmQgc3RhdHVzIGRpc3BsYXkiKSk7
CisgICAgaWYgKG5hbWUgPT0gIlZpZGVvRWxlbWVudCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oInZpZGVvIGVsZW1lbnQgcGxheWJhY2sgY29udHJvbHMgYW5kIHN0YXR1cyBk
aXNwbGF5IikpOworICAgIGlmIChuYW1lID09ICJNdXRlQnV0dG9uIikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygibXV0ZSBhdWRpbyB0cmFja3MiKSk7CisgICAgaWYgKG5hbWUg
PT0gIlVuTXV0ZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInVu
bXV0ZSBhdWRpbyB0cmFja3MiKSk7CisgICAgaWYgKG5hbWUgPT0gIlBsYXlCdXR0b24iKQorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJiZWdpbiBwbGF5YmFjayIpKTsKKyAgICBp
ZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJwYXVzZSBwbGF5YmFjayIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2xpZGVyIikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGltZSBzY3J1YmJlciIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiU2xpZGVyVGh1bWIiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJtb3ZpZSB0aW1lIHNjcnViYmVyIHRodW1iIikpOworICAgIGlmIChuYW1lID09ICJS
ZXdpbmRCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIG1v
dmllIGJhY2sgMzAgc2Vjb25kcyIpKTsKKyAgICBpZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJldHVybiBzdHJl
YW1pbmcgbW92aWUgdG8gcmVhbCB0aW1lIikpOworICAgIGlmIChuYW1lID09ICJDdXJyZW50VGlt
ZURpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJjdXJyZW50IG1v
dmllIHRpbWUgaW4gc2Vjb25kcyIpKTsKKyAgICBpZiAobmFtZSA9PSAiVGltZVJlbWFpbmluZ0Rp
c3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJudW1iZXIgb2Ygc2Vj
b25kcyBvZiBtb3ZpZSByZW1haW5pbmciKSk7CisgICAgaWYgKG5hbWUgPT0gIlN0YXR1c0Rpc3Bs
YXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJjdXJyZW50IG1vdmllIHN0
YXR1cyIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgYmFjayIpKTsKKyAgICBpZiAobmFt
ZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJzZWVrIHF1aWNrbHkgZm9yd2FyZCIpKTsKKyAgICBpZiAobmFtZSA9PSAiRW50ZXJGdWxs
c2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGxheSBt
b3ZpZSBpbiBmdWxsc2NyZWVuIG1vZGUiKSk7CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNj
cmVlbkJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkV4aXQgZnVs
bHNjcmVlbiBtb2RlIikpOworICAgIGlmIChuYW1lID09ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0
b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGFydCBkaXNwbGF5aW5n
IGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBpZiAobmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25z
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RvcCBkaXNwbGF5
aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0
aW9uKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHRpbWUpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJpbmRlZmluaXRlIHRpbWUiKSk7CisKKyAgICBp
bnQgc2Vjb25kcyA9IHN0YXRpY19jYXN0PGludD4oYWJzKHRpbWUpKTsKKyAgICBpbnQgZGF5cyA9
IHNlY29uZHMgLyAoNjAgKiA2MCAqIDI0KTsKKyAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYw
ICogNjApOworICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2MCkgJSA2MDsKKyAgICBzZWNv
bmRzICU9IDYwOworCisgICAgaWYgKGRheXMpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gc3Ry
aW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgZGF5cyAlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29u
ZHMiLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcykpOworICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworICAgIH0KKworICAgIGlmIChob3Vycykgewor
ICAgICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBob3VycyAl
ZCBtaW51dGVzICVkIHNlY29uZHMiLCBob3VycywgbWludXRlcywgc2Vjb25kcykpOworICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworICAgIH0KKworICAgIGlm
IChtaW51dGVzKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmlu
dGYoIiVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIsIG1pbnV0ZXMsIHNlY29uZHMpKTsKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKKyAgICB9CisKKyAgICBHT3du
UHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBzZWNvbmRzIiwgc2Vjb25kcykp
OworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdU
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2YWx1ZSBtaXNzaW5nIikp
OworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JDaGVja2JveFRl
eHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVmFsdWVNaXNzaW5nVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1
ZU1pc3NpbmdGb3JGaWxlVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmlsZVRleHQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5n
VGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JSYWRp
b1RleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25N
ZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VW
YWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0eXBlIG1pc21hdGNoIikpOwor
fQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JFbWFpbFRleHQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlw
ZU1pc21hdGNoVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0
Y2hGb3JNdWx0aXBsZUVtYWlsVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Cit9CisKK1N0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvclVSTFRleHQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgp
OworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VQYXR0ZXJuTWlzbWF0Y2hUZXh0KCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXR0ZXJuIG1pc21hdGNoIikpOworfQor
CitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChpbnQsIGludCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0b28gbG9uZyIpKTsKK30KKworU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmFuZ2UgdW5kZXJmbG93IikpOworfQorCitTdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChjb25zdCBTdHJpbmcmKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJhbmdlIG92ZXJmbG93IikpOworfQorCitTdHJp
bmcgdmFsaWRhdGlvbk1lc3NhZ2VTdGVwTWlzbWF0Y2hUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RlcCBtaXNtYXRj
aCIpKTsKK30KKworU3RyaW5nIHVuYWNjZXB0YWJsZVRMU0NlcnRpZmljYXRlKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJVbmFjY2VwdGFibGUgVExTIGNlcnRpZmljYXRlIikp
OworfQorCitTdHJpbmcgbG9jYWxpemVkU3RyaW5nKGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChrZXksIHN0cmxlbihrZXkpKTsKK30KKworU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlQmFkSW5wdXRGb3JOdW1iZXJUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsK
K30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK1N0cmluZyB0ZXh0VHJhY2tDbG9zZWRDYXB0
aW9uc1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJDbG9zZWQgQ2Fw
dGlvbnMiLCAiTWVudSBzZWN0aW9uIGhlYWRpbmcgZm9yIGNsb3NlZCBjYXB0aW9ucyIpKTsKK30K
KworU3RyaW5nIHRleHRUcmFja1N1YnRpdGxlc1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KENfKCJTdWJ0aXRsZXMiLCAiTWVudSBzZWN0aW9uIGhlYWRpbmcgZm9yIHN1YnRp
dGxlcyIpKTsKK30KKworU3RyaW5nIHRleHRUcmFja09mZlRleHQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KENfKCJPZmYiLCAiTWVudSBpdGVtIGxhYmVsIGZvciB0aGUgdHJhY2sg
dGhhdCByZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlvbnMiKSk7Cit9CisKK1N0cmlu
ZyB0ZXh0VHJhY2tOb0xhYmVsVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Q18oIk5vIGxhYmVsIiwgIk1lbnUgaXRlbSBsYWJlbCBmb3IgYSBjbG9zZWQgY2FwdGlvbnMgdHJh
Y2sgdGhhdCBoYXMgbm8gb3RoZXIgbmFtZSIpKTsKK30KKyNlbmRpZgorCitTdHJpbmcgc25hcHNo
b3R0ZWRQbHVnSW5MYWJlbFRpdGxlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChD
XygiU25hcHNob3R0ZWQgUGx1Zy1JbiIsICJUaXRsZSBvZiB0aGUgbGFiZWwgdG8gc2hvdyBvbiBh
IHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Cit9CisKK1N0cmluZyBzbmFwc2hvdHRlZFBsdWdJbkxh
YmVsU3VidGl0bGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJDbGljayB0
byByZXN0YXJ0IiwgIlN1YnRpdGxlIG9mIHRoZSBsYWJlbCB0byBzaG93IG9uIGEgc25hcHNob3R0
ZWQgcGx1Zy1pbiIpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9M
b2dnaW5nR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWQ5MDVkNzY3MmVhMTk0MWJlYjM3MjZkMWY1ZjQzYjk2NjRiNGU5ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21l
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2lmICFM
T0dfRElTQUJMRUQKKworI2luY2x1ZGUgIkluaXRpYWxpemVMb2dnaW5nLmgiCisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEluc3BpcmVkIGJ5IHRoZSBjb2RlIHVz
ZWQgYnkgdGhlIFF0IHBvcnQKKwordm9pZCBpbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNl
c3NhcnkoKQoreworICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMg
PSBmYWxzZTsKKyAgICBpZiAoZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscykKKyAgICAgICAg
cmV0dXJuOworCisgICAgZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscyA9IHRydWU7CisKKyAg
ICBjaGFyKiBsb2dFbnYgPSBnZXRlbnYoIldFQktJVF9ERUJVRyIpOworICAgIGlmICghbG9nRW52
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyB3ZSBzZXQgdXAgdGhlIGxvZ3MgYW55d2F5IGJl
Y2F1c2Ugc29tZSBvZiBvdXIgbG9nZ2luZywgc3VjaCBhcworICAgIC8vIHNvdXAncyBpcyBhdmFp
bGFibGUgaW4gcmVsZWFzZSBidWlsZHMKKyNpZiBkZWZpbmVkKE5ERUJVRykKKyAgICBnX3dhcm5p
bmcoIldFQktJVF9ERUJVRyBpcyBub3QgZW1wdHksIGJ1dCB0aGlzIGlzIGEgcmVsZWFzZSBidWls
ZC4gTm90aWNlIHRoYXQgbWFueSBsb2cgbWVzc2FnZXMgd2lsbCBvbmx5IGFwcGVhciBpbiBhIGRl
YnVnIGJ1aWxkLiIpOworI2VuZGlmCisKKyAgICBjaGFyKiogbG9ndiA9IGdfc3Ryc3BsaXQobG9n
RW52LCAiICIsIC0xKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBsb2d2W2ldOyBpKyspIHsKKyAg
ICAgICAgaWYgKFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBnZXRDaGFubmVsRnJvbU5hbWUobG9n
dltpXSkpCisgICAgICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKKyAg
ICB9CisKKyAgICBnX3N0cmZyZWV2KGxvZ3YpOworCisgICAgLy8gdG8gZGlzYWJsZSBsb2dnaW5n
IG5vdEltcGxlbWVudGVkIHNldCB0aGUgRElTQUJMRV9OSV9XQVJOSU5HCisgICAgLy8gZW52aXJv
bm1lbnQgdmFyaWFibGUgdG8gMQorICAgIExvZ05vdFlldEltcGxlbWVudGVkLnN0YXRlID0gV1RG
TG9nQ2hhbm5lbE9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAh
TE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVn
aXN0cnlHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MTQ3NzNiNWRjZTVmZjc0NjBhM2RlNDlmYTE5NGIzMjE1NjY3OGRkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3Rr
LmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNvbnN0IGNoYXIqIGV4dGVu
c2lvbjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CisKK3N0YXRpYyBjb25zdCBFeHRl
bnNpb25NYXAgZXh0ZW5zaW9uTWFwW10gPSB7CisgICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwK
KyAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwK
KyAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9LAorICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9
LAorICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBlZyIsICJpbWFnZS9q
cGVnIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpzIiwgImFwcGxp
Y2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJwZGYiLCAiYXBwbGljYXRpb24vcGRmIiB9
LAorICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0sCisgICAgeyAicnNzIiwgImFwcGxpY2F0aW9u
L3Jzcyt4bWwiIH0sCisgICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwiIH0sCisgICAgeyAidGV4
dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsg
InhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1sIiB9LAor
ICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKKyAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94
aHRtbCt4bWwiIH0sCisgICAgeyAid21sIiwgInRleHQvdm5kLndhcC53bWwiIH0sCisgICAgeyAi
d21sYyIsICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiIH0sCisgICAgeyAwLCAwIH0KK307CisK
K1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBT
dHJpbmcgJmV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgU3RyaW5n
IHMgPSBleHQubG93ZXIoKTsKKyAgICBjb25zdCBFeHRlbnNpb25NYXAgKmUgPSBleHRlbnNpb25N
YXA7CisgICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgeworICAgICAgICBpZiAocyA9PSBlLT5leHRl
bnNpb24pCisgICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7CisgICAgICAgICsrZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgTUlNRVR5cGVSZWdpc3RyeTo6
aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFt
ZVNjcm9sbGJhckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJh
ckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjFjMWNjODNhMDIzNDk4YzFhYjJiODRkYzEwOWU5YTljNWY4
NTBjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Ny
b2xsYmFyR3RrLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZworICog
IENvcHlyaWdodCAoQykgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgi
CisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworUGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+IE1h
aW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNYWluRnJhbWVTY3JvbGxiYXJHdGsoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9u
KSk7Cit9CisKKy8vIEEgTWFpbkZyYW1lU2Nyb2xsYmFyIGlzIGp1c3QgYSBub24tcGFpbnRpbmcg
c2Nyb2xsYmFyLiBPdGhlcndpc2UgaXQgaXMgZnVsbHkKKy8vIGZ1bmN0aW9uYWwuIEEgbm9uLXBh
aW50aW5nIHNjcm9sbGJhciBhbGxvd3MgYSBtYWluLWZyYW1lIFNjcm9sbFZpZXcgdG8gdXNlCisv
LyBhIGNvbnRhaW5pbmcgR3RrU2Nyb2xsZWRXaW5kb3cgYXMgaXRzIHVzZXIgaW50ZXJmYWNlLiBU
aGUgQ2hyb21lQ2xpZW50IGluIHRoZQorLy8gV2ViS2l0IGxheWVyIGp1c3QgbGlzdGVucyBmb3Ig
c2Nyb2xsaW5nIGFuZCBzaXppbmcgY2hhbmdlcyBhbmQgdXBkYXRlcyBpdHMKKy8vIGNvbnRhaW5l
ciAodGhlIEd0a1Njcm9sbGVkV2luZG93KSBhY2NvcmRpbmdseS4gVGhlIFNjcm9sbFZpZXcgaXMg
cmVzcG9uc2libGUKKy8vIGZvciBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBN
YWluRnJhbWVTY3JvbGxiYXIgb3IgbmF0aXZlIHNjcm9sbGJhci4KK01haW5GcmFtZVNjcm9sbGJh
ckd0azo6TWFpbkZyYW1lU2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgOiBTY3JvbGxiYXIoc2Ny
b2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKQoreworICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gdGFrZSB1cCBhbnkgc3BhY2UuCisgICAgcmVzaXplKDAsIDApOworfQor
Cit2b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIE1haW4gZnJhbWUgc2Nyb2xsYmFy
cyBhcmUgbm90IHBhaW50ZWQgYnkgV2ViQ29yZS4KKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjhjYjYzOGZk
YWNjOWIwYzI1YzYwNDgxODVkNzUwYTcwZjU0MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaApAQCAtMCwwICsxLDM5IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworCisjaWZuZGVmIE1haW5GcmFtZVNjcm9sbGJhckd0a19oCisjZGVmaW5l
IE1haW5GcmFtZVNjcm9sbGJhckd0a19oCisKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1h
aW5GcmFtZVNjcm9sbGJhckd0ayA6IHB1YmxpYyBTY3JvbGxiYXIgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1haW5GcmFtZVNjcm9sbGJhckd0az4gY3JlYXRlKFNjcm9sbGFibGVB
cmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgTWFpbkZyYW1l
U2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOworfTsK
KworfQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkN2ZmMjEzMmVjNTUzYTAzMTEyNzU1YThkMTk1Mzg0NGY0
N2E1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRH
dGsuY3BwCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKworI2luY2x1ZGUgIkNsaXBi
b2FyZEd0ay5oIgorI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgor
I2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJh
bFBhc3RlYm9hcmQoKQoreworICAgIHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3
IFBhc3RlYm9hcmQoKTsKKyAgICByZXR1cm4gcGFzdGVib2FyZDsKK30KKworUGFzdGVib2FyZDo6
UGFzdGVib2FyZCgpCit7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFu
Z2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOworICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0g
aGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKKworICAgIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAg
ICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOworCisgICAgZGF0YU9iamVjdC0+c2V0VGV4dChmcmFt
ZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKKyAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAo
Y3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZh
bHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CisgICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKGNsaXBib2FyZCwgY2FuU21hcnRDb3B5T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVy
OjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0
UGFzdGUpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlvbikKK3sKKyAgICBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKKyAgICBE
YXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNs
aXBib2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKworICAgIGRhdGFPYmplY3Qt
PnNldFRleHQodGV4dCk7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsCisgICAgICAgIChzbWFy
dFJlcGxhY2VPcHRpb24gPT0gQ2FuU21hcnRSZXBsYWNlKSA/IFBhc3RlYm9hcmRIZWxwZXI6Oklu
Y2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0
ZSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOworCisgICAg
RGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChj
bGlwYm9hcmQpOworICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBkYXRhT2JqZWN0
LT5zZXRVUkwodXJsLCBsYWJlbCk7CisgICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENvbnRlbnRz
KGNsaXBib2FyZCk7Cit9CisKK3N0YXRpYyBLVVJMIGdldFVSTEZvckltYWdlTm9kZShOb2RlKiBu
b2RlKQoreworICAgIC8vIEZJWE1FOiBMYXRlciB0aGlzIGNvZGUgc2hvdWxkIGJlIHNoYXJlZCB3
aXRoIENocm9taXVtIHNvbWVob3cuIENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9ybXMgd2FudCBpdC4K
KyAgICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW1nVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcp
KQorICAgICAgICB1cmxTdHJpbmcgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOworI2lmIEVOQUJMRShTVkcpCisgICAgZWxzZSBp
ZiAobm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQorICAgICAgICB1cmxTdHJp
bmcgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVz
OjpocmVmQXR0cik7CisjZW5kaWYKKyAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZW1iZWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcp
KSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSk7CisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShlbGVtZW50LT5p
bWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSk7CisgICAgfQorICAgIHJldHVybiB1cmxTdHJpbmcu
aXNFbXB0eSgpID8gS1VSTCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBM
ZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOworfQorCit2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
dGl0bGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworCisgICAgaWYgKCEobm9kZS0+cmVuZGVyZXIo
KSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkp
OworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgp
OworICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZv
clJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBBU1NFUlQoaW1hZ2UpOworCisgICAgR3RrQ2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7CisgICAgRGF0YU9iamVj
dEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQp
OworICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBLVVJMIHVybCA9IGdldFVSTEZv
ckltYWdlTm9kZShub2RlKTsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0
YU9iamVjdC0+c2V0VVJMKHVybCwgdGl0bGUpOworCisgICAgICAgIGRhdGFPYmplY3QtPnNldE1h
cmt1cChjcmVhdGVNYXJrdXAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLCBJbmNsdWRlTm9k
ZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7CisgICAgZGF0YU9iamVj
dC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKKworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsK
K30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNsaXBib2FyZChDbGlwYm9hcmQqIGNsaXBib2Fy
ZCkKK3sKKyAgICBHdGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCA9IHN0YXRpY19jYXN0PENsaXBi
b2FyZEd0ayo+KGNsaXBib2FyZCktPmNsaXBib2FyZCgpOworICAgIGlmIChndGtDbGlwYm9hcmQp
CisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndy
aXRlQ2xpcGJvYXJkQ29udGVudHMoZ3RrQ2xpcGJvYXJkKTsKK30KKwordm9pZCBQYXN0ZWJvYXJk
OjpjbGVhcigpCit7CisgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihndGtfY2xpcGJvYXJkX2dldF9m
b3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBC
T0FSRCkpOworfQorCitib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCit7CisgICAg
cmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmNsaXBi
b2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZSgKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9n
ZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9D
TElQQk9BUkQpKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJk
Ojpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4
dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCit7CisgICAgUGFz
dGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKTsKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0Q3Vy
cmVudENsaXBib2FyZChmcmFtZSk7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERh
dGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOworICAgIGhlbHBlci0+Z2V0Q2xp
cGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKKworICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpIHsKKyAgICAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1l
LT5kb2N1bWVudCgpLCBkYXRhT2JqZWN0LT5tYXJrdXAoKSwgIiIsIERpc2FsbG93U2NyaXB0aW5n
QW5kUGx1Z2luQ29udGVudElmTmVlZGVkKTsKKyAgICAgICAgaWYgKGZyYWdtZW50KQorICAgICAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAoIWFsbG93
UGxhaW5UZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNU
ZXh0KCkpIHsKKyAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOworICAgICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRl
eHQuZ2V0KCksIGRhdGFPYmplY3QtPnRleHQoKSk7CisgICAgICAgIGlmIChmcmFnbWVudCkKKyAg
ICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZyYW1lKQorewor
ICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQ
YXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXIt
PmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmpl
Y3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKworICAgIGhlbHBl
ci0+Z2V0Q2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKKyAgICByZXR1cm4gZGF0YU9iamVj
dC0+dGV4dCgpOworfQorCitib29sIFBhc3RlYm9hcmQ6OmlzU2VsZWN0aW9uTW9kZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCktPnVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJk
OjpzZXRTZWxlY3Rpb25Nb2RlKGJvb2wgc2VsZWN0aW9uTW9kZSkKK3sKKyAgICBQYXN0ZWJvYXJk
SGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5zZXRVc2VQcmltYXJ5U2VsZWN0aW9u
Q2xpcGJvYXJkKHNlbGVjdGlvbk1vZGUpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkSGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NmE5NzU0MzcwNzhjYmViNjgxMTE5OWYxZGVj
MjUwOTE4YmE4MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkSGVscGVyLmNwcApAQCAtMCwwICsxLDMzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgorCisjaW5jbHVkZSAiQ2hyb21l
LmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYXN0
ZWJvYXJkLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIEdka0F0b20gdGV4dFBsYWluQXRvbTsKK3N0YXRpYyBHZGtBdG9t
IG1hcmt1cEF0b207CitzdGF0aWMgR2RrQXRvbSBuZXRzY2FwZVVSTEF0b207CitzdGF0aWMgR2Rr
QXRvbSB1cmlMaXN0QXRvbTsKK3N0YXRpYyBHZGtBdG9tIHNtYXJ0UGFzdGVBdG9tOworc3RhdGlj
IFN0cmluZyBnTWFya3VwUHJlZml4OworCitzdGF0aWMgdm9pZCByZW1vdmVNYXJrdXBQcmVmaXgo
U3RyaW5nJiBtYXJrdXApCit7CisgICAgLy8gVGhlIG1hcmt1cCBwcmVmaXggaXMgbm90IGhhcm1m
dWwsIGJ1dCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgc3RyaW5nIGFueXdheSwgc28gdGhhdAorICAg
IC8vIHdlIGNhbiBoYXZlIGNvbnNpc3RlbnQgcmVzdWx0cyB3aXRoIG90aGVyIHBvcnRzIGR1cmlu
ZyB0aGUgbGF5b3V0IHRlc3RzLgorICAgIGlmIChtYXJrdXAuc3RhcnRzV2l0aChnTWFya3VwUHJl
Zml4KSkKKyAgICAgICAgbWFya3VwLnJlbW92ZSgwLCBnTWFya3VwUHJlZml4Lmxlbmd0aCgpKTsK
K30KKworc3RhdGljIHZvaWQgaW5pdEdka0F0b21zKCkKK3sKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
aW5pdGlhbGl6ZWQgPSBGQUxTRTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW5pdGlhbGl6ZWQgPSBUUlVFOworCisgICAgdGV4dFBsYWluQXRvbSA9IGdk
a19hdG9tX2ludGVybigidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IiwgRkFMU0UpOworICAgIG1h
cmt1cEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNFKTsKKyAgICBuZXRz
Y2FwZVVSTEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oIl9ORVRTQ0FQRV9VUkwiLCBGQUxTRSk7Cisg
ICAgdXJpTGlzdEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvdXJpLWxpc3QiLCBGQUxTRSk7
CisgICAgc21hcnRQYXN0ZUF0b20gPSBnZGtfYXRvbV9pbnRlcm4oImFwcGxpY2F0aW9uL3ZuZC53
ZWJraXRndGsuc21hcnRwYXN0ZSIsIEZBTFNFKTsKKyAgICBnTWFya3VwUHJlZml4ID0gIjxtZXRh
IGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0
PXV0Zi04XCI+IjsKK30KKworUGFzdGVib2FyZEhlbHBlciogUGFzdGVib2FyZEhlbHBlcjo6ZGVm
YXVsdFBhc3RlYm9hcmRIZWxwZXIoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGFzdGVi
b2FyZEhlbHBlciwgZGVmYXVsdEhlbHBlciwgKCkpOworICAgIHJldHVybiAmZGVmYXVsdEhlbHBl
cjsKK30KKworUGFzdGVib2FyZEhlbHBlcjo6UGFzdGVib2FyZEhlbHBlcigpCisgICAgOiBtX3Rh
cmdldExpc3QoZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKSkKKyAgICAsIG1fdXNlUHJpbWFyeVNl
bGVjdGlvbkNsaXBib2FyZChmYWxzZSkKK3sKKyAgICBpbml0R2RrQXRvbXMoKTsKKworICAgIGd0
a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKG1fdGFyZ2V0TGlzdCwgUGFzdGVib2FyZEhl
bHBlcjo6VGFyZ2V0VHlwZVRleHQpOworICAgIGd0a190YXJnZXRfbGlzdF9hZGQobV90YXJnZXRM
aXN0LCBtYXJrdXBBdG9tLCAwLCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlTWFya3VwKTsK
KyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKG1fdGFyZ2V0TGlzdCwgUGFzdGVi
b2FyZEhlbHBlcjo6VGFyZ2V0VHlwZVVSSUxpc3QpOworICAgIGd0a190YXJnZXRfbGlzdF9hZGQo
bV90YXJnZXRMaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdl
dFR5cGVOZXRzY2FwZVVSTCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9pbWFnZV90YXJnZXRz
KG1fdGFyZ2V0TGlzdCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZUltYWdlLCBUUlVFKTsK
K30KKworUGFzdGVib2FyZEhlbHBlcjo6flBhc3RlYm9hcmRIZWxwZXIoKQoreworICAgIGd0a190
YXJnZXRfbGlzdF91bnJlZihtX3RhcmdldExpc3QpOworfQorCitzdGF0aWMgaW5saW5lIEdka0Rp
c3BsYXkqIGRpc3BsYXlGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVChmcmFt
ZSk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgQVNTRVJUKHBhZ2UpOwor
ICAgIENocm9tZSogY2hyb21lID0gcGFnZS0+Y2hyb21lKCk7CisgICAgQVNTRVJUKGNocm9tZSk7
CisgICAgUGxhdGZvcm1QYWdlQ2xpZW50IGNsaWVudCA9IGNocm9tZS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCk7CisgICAgcmV0dXJuIGNsaWVudCA/IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkoY2xpZW50
KSA6IGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCk7Cit9CisKK0d0a0NsaXBib2FyZCogUGFzdGVi
b2FyZEhlbHBlcjo6Z2V0Q3VycmVudENsaXBib2FyZChGcmFtZSogZnJhbWUpCit7CisgICAgaWYg
KG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCkKKyAgICAgICAgcmV0dXJuIGdldFByaW1h
cnlTZWxlY3Rpb25DbGlwYm9hcmQoZnJhbWUpOworICAgIHJldHVybiBnZXRDbGlwYm9hcmQoZnJh
bWUpOworfQorCitHdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxwZXI6OmdldENsaXBib2FyZChG
cmFtZSogZnJhbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9k
aXNwbGF5KGRpc3BsYXlGcm9tRnJhbWUoZnJhbWUpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7
Cit9CisKK0d0a0NsaXBib2FyZCogUGFzdGVib2FyZEhlbHBlcjo6Z2V0UHJpbWFyeVNlbGVjdGlv
bkNsaXBib2FyZChGcmFtZSogZnJhbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGd0a19jbGlwYm9h
cmRfZ2V0X2Zvcl9kaXNwbGF5KGRpc3BsYXlGcm9tRnJhbWUoZnJhbWUpLCBHREtfU0VMRUNUSU9O
X1BSSU1BUlkpOworfQorCitHdGtUYXJnZXRMaXN0KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRM
aXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXRMaXN0OworfQorCitzdGF0aWMgU3Ry
aW5nIHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSkKK3sK
KyAgICAvLyBnX3N0cm5kdXAgZ3VhcmRzIGFnYWluc3Qgc2VsZWN0aW9uIGRhdGEgdGhhdCBpcyBu
b3QgbnVsbC10ZXJtaW5hdGVkLgorICAgIEdPd25QdHI8Z2NoYXI+IG1hcmt1cFN0cmluZyhnX3N0
cm5kdXAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ3RrX3NlbGVjdGlvbl9kYXRhX2dl
dF9kYXRhKGRhdGEpKSwgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoZGF0YSkpKTsKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChtYXJrdXBTdHJpbmcuZ2V0KCkpOworfQorCit2b2lk
IFBhc3RlYm9hcmRIZWxwZXI6OmdldENsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xp
cGJvYXJkKQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3Rr
Ojpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBBU1NFUlQoZGF0YU9iamVjdCk7CisKKyAg
ICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKGNsaXBib2FyZCkpIHsK
KyAgICAgICAgR093blB0cjxnY2hhcj4gdGV4dERhdGEoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90
ZXh0KGNsaXBib2FyZCkpOworICAgICAgICBpZiAodGV4dERhdGEpCisgICAgICAgICAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dERhdGEuZ2V0KCkpKTsKKyAgICB9
CisKKyAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJv
YXJkLCBtYXJrdXBBdG9tKSkgeworICAgICAgICBpZiAoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSA9
IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCBtYXJrdXBBdG9tKSkg
eworICAgICAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRh
dGEpKTsKKyAgICAgICAgICAgIHJlbW92ZU1hcmt1cFByZWZpeChtYXJrdXApOworICAgICAgICAg
ICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKG1hcmt1cCk7CisgICAgICAgICAgICBndGtfc2VsZWN0
aW9uX2RhdGFfZnJlZShkYXRhKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChndGtfY2xp
cGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlwYm9hcmQsIHVyaUxpc3RBdG9tKSkg
eworICAgICAgICBpZiAoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSA9IGd0a19jbGlwYm9hcmRfd2Fp
dF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCB1cmlMaXN0QXRvbSkpIHsKKyAgICAgICAgICAgIGRh
dGFPYmplY3QtPnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Cisg
ICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZnJlZShkYXRhKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxl
Y3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0KQoreworICAgIGlmIChpbmZvID09IFRhcmdldFR5cGVUZXh0KQorICAgICAgICBndGtf
c2VsZWN0aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uRGF0YSwgZGF0YU9iamVjdC0+dGV4dCgp
LnV0ZjgoKS5kYXRhKCksIC0xKTsKKworICAgIGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZU1h
cmt1cCkgeworICAgICAgICAvLyBTb21lIExpbnV4IGFwcGxpY2F0aW9ucyByZWZ1c2UgdG8gYWNj
ZXB0IHBhc3RlZCBtYXJrdXAgdW5sZXNzIGl0IGlzCisgICAgICAgIC8vIHByZWZpeGVkIGJ5IGEg
Y29udGVudC10eXBlIG1ldGEgdGFnLgorICAgICAgICBDU3RyaW5nIG1hcmt1cCA9IFN0cmluZyhn
TWFya3VwUHJlZml4ICsgZGF0YU9iamVjdC0+bWFya3VwKCkpLnV0ZjgoKTsKKyAgICAgICAgZ3Rr
X3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRhLCBtYXJrdXBBdG9tLCA4LAorICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJrdXAuZGF0YSgpKSwgbWFy
a3VwLmxlbmd0aCgpICsgMSk7CisKKyAgICB9IGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZVVS
SUxpc3QpIHsKKyAgICAgICAgQ1N0cmluZyB1cmlMaXN0ID0gZGF0YU9iamVjdC0+dXJpTGlzdCgp
LnV0ZjgoKTsKKyAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRhLCB1
cmlMaXN0QXRvbSwgOCwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFy
Kj4odXJpTGlzdC5kYXRhKCkpLCB1cmlMaXN0Lmxlbmd0aCgpICsgMSk7CisKKyAgICB9IGVsc2Ug
aWYgKGluZm8gPT0gVGFyZ2V0VHlwZU5ldHNjYXBlVVJMICYmIGRhdGFPYmplY3QtPmhhc1VSTCgp
KSB7CisgICAgICAgIFN0cmluZyB1cmwoZGF0YU9iamVjdC0+dXJsKCkpOworICAgICAgICBTdHJp
bmcgcmVzdWx0KHVybCk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7CisKKyAgICAgICAg
aWYgKGRhdGFPYmplY3QtPmhhc1RleHQoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGF0
YU9iamVjdC0+dGV4dCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh1cmwpOworCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHJlc3VsdERhdGEoZ19zdHJkdXAocmVz
dWx0LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxl
Y3Rpb25EYXRhLCBuZXRzY2FwZVVSTEF0b20sIDgsCisgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PGNvbnN0IGd1Y2hhcio+KHJlc3VsdERhdGEuZ2V0KCkpLCBzdHJsZW4ocmVzdWx0RGF0YS5n
ZXQoKSkgKyAxKTsKKworICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlSW1hZ2UpCisg
ICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfcGl4YnVmKHNlbGVjdGlvbkRhdGEsIGRhdGFP
YmplY3QtPmltYWdlKCkpOworCisgICAgZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlU21hcnRQ
YXN0ZSkKKyAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbkRhdGEs
ICIiLCAtMSk7Cit9CisKK0d0a1RhcmdldExpc3QqIFBhc3RlYm9hcmRIZWxwZXI6OnRhcmdldExp
c3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QsIFNtYXJ0UGFzdGVJbmNs
dXNpb24gc2hvdWxkSW5sdWRlU21hcnRQYXN0ZSkKK3sKKyAgICBHdGtUYXJnZXRMaXN0KiBsaXN0
ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKTsKKworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNU
ZXh0KCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3QsIFRh
cmdldFR5cGVUZXh0KTsKKworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKKyAgICAg
ICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCBtYXJrdXBBdG9tLCAwLCBUYXJnZXRUeXBlTWFy
a3VwKTsKKworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKKyAgICAgICAgZ3Rr
X3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlVVJJTGlzdCk7Cisg
ICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgbmV0c2NhcGVVUkxBdG9tLCAwLCBUYXJn
ZXRUeXBlTmV0c2NhcGVVUkwpOworICAgIH0KKworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNJbWFn
ZSgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobGlzdCwgVGFy
Z2V0VHlwZUltYWdlLCBUUlVFKTsKKworICAgIGlmIChzaG91bGRJbmx1ZGVTbWFydFBhc3RlID09
IEluY2x1ZGVTbWFydFBhc3RlKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QsIHNt
YXJ0UGFzdGVBdG9tLCAwLCBUYXJnZXRUeXBlU21hcnRQYXN0ZSk7CisKKyAgICByZXR1cm4gbGlz
dDsKK30KKwordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0
YShHdGtTZWxlY3Rpb25EYXRhKiBkYXRhLCBndWludCBpbmZvLCBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0KQoreworICAgIGlmICghZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHZGtBdG9tIHRhcmdldCA9IGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfdGFyZ2V0KGRhdGEpOworICAgIGlmICh0YXJnZXQgPT0gdGV4dFBsYWluQXRvbSkKKyAg
ICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEp
KTsKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gbWFya3VwQXRvbSkgeworICAgICAgICBTdHJpbmcg
bWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAgICAgICByZW1vdmVN
YXJrdXBQcmVmaXgobWFya3VwKTsKKyAgICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKG1hcmt1
cCk7CisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gdXJpTGlzdEF0b20pIHsKKyAgICAgICAgZGF0
YU9iamVjdC0+c2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKKyAg
ICB9IGVsc2UgaWYgKHRhcmdldCA9PSBuZXRzY2FwZVVSTEF0b20pIHsKKyAgICAgICAgU3RyaW5n
IHVybFdpdGhMYWJlbChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gcGllY2VzOworICAgICAgICB1cmxXaXRoTGFiZWwuc3BsaXQoIlxuIiwg
cGllY2VzKTsKKworICAgICAgICAvLyBHaXZlIHByZWZlcmVuY2UgdG8gdGV4dC91cmktbGlzdCBo
ZXJlLCBhcyBpdCBjYW4gaG9sZCBtb3JlCisgICAgICAgIC8vIHRoYW4gb25lIFVSSSBidXQgc3Rp
bGwgdGFrZSAgdGhlIGxhYmVsIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgaWYgKCFkYXRhT2Jq
ZWN0LT5oYXNVUklMaXN0KCkpCisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHBp
ZWNlc1swXSk7CisgICAgICAgIGlmIChwaWVjZXMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIGRh
dGFPYmplY3QtPnNldFRleHQocGllY2VzWzFdKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxHZGtBdG9t
PiBQYXN0ZWJvYXJkSGVscGVyOjpkcm9wQXRvbXNGb3JDb250ZXh0KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCkKK3sKKyAgICAvLyBBbHdheXMgc2VhcmNoIGZvciB0
aGVzZSBjb21tb24gYXRvbXMuCisgICAgVmVjdG9yPEdka0F0b20+IGRyb3BBdG9tczsKKyAgICBk
cm9wQXRvbXMuYXBwZW5kKHRleHRQbGFpbkF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQobWFy
a3VwQXRvbSk7CisgICAgZHJvcEF0b21zLmFwcGVuZCh1cmlMaXN0QXRvbSk7CisgICAgZHJvcEF0
b21zLmFwcGVuZChuZXRzY2FwZVVSTEF0b20pOworCisgICAgLy8gRm9yIGltYWdlcywgdHJ5IHRv
IGZpbmQgdGhlIG1vc3QgYXBwbGljYWJsZSBpbWFnZSB0eXBlLgorICAgIEdSZWZQdHI8R3RrVGFy
Z2V0TGlzdD4gbGlzdCA9IGFkb3B0R1JlZihndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApKTsKKyAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobGlzdC5nZXQoKSwgVGFyZ2V0VHlw
ZUltYWdlLCBUUlVFKTsKKyAgICBHZGtBdG9tIGF0b20gPSBndGtfZHJhZ19kZXN0X2ZpbmRfdGFy
Z2V0KHdpZGdldCwgY29udGV4dCwgbGlzdC5nZXQoKSk7CisgICAgaWYgKGF0b20gIT0gR0RLX05P
TkUpCisgICAgICAgIGRyb3BBdG9tcy5hcHBlbmQoYXRvbSk7CisKKyAgICByZXR1cm4gZHJvcEF0
b21zOworfQorCitzdGF0aWMgRGF0YU9iamVjdEd0ayogc2V0dGluZ0NsaXBib2FyZERhdGFPYmpl
Y3QgPSAwOworCitzdGF0aWMgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0Ns
aXBib2FyZCogY2xpcGJvYXJkLCBHdGtTZWxlY3Rpb25EYXRhICpzZWxlY3Rpb25EYXRhLCBndWlu
dCBpbmZvLCBncG9pbnRlciBkYXRhKQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3Qg
PSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBBU1NFUlQoZGF0
YU9iamVjdCk7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZGF0YU9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayhHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgQVNT
RVJUKGRhdGFPYmplY3QpOworCisgICAgLy8gT25seSBjbGVhciB0aGUgRGF0YU9iamVjdCBmb3Ig
dGhpcyBjbGlwYm9hcmQgaWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgc2V0dGluZyBpdC4KKyAgICBp
ZiAoZGF0YU9iamVjdCAhPSBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCkKKyAgICAgICAgZGF0
YU9iamVjdC0+Y2xlYXJBbGwoKTsKKworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR0Nsb3N1cmUqIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8R0Nsb3N1cmUqPihkYXRhKTsK
KyAgICBHVmFsdWUgZmlyc3RBcmd1bWVudCA9IHswLCB7ezB9fX07CisgICAgZ192YWx1ZV9pbml0
KCZmaXJzdEFyZ3VtZW50LCBHX1RZUEVfUE9JTlRFUik7CisgICAgZ192YWx1ZV9zZXRfcG9pbnRl
cigmZmlyc3RBcmd1bWVudCwgY2xpcGJvYXJkKTsKKyAgICBnX2Nsb3N1cmVfaW52b2tlKGNhbGxi
YWNrLCAwLCAxLCAmZmlyc3RBcmd1bWVudCwgMCk7CisgICAgZ19jbG9zdXJlX3VucmVmKGNhbGxi
YWNrKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjp3cml0ZUNsaXBib2FyZENvbnRlbnRz
KEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBTbWFydFBhc3RlSW5jbHVzaW9uIGluY2x1ZGVTbWFy
dFBhc3RlLCBHQ2xvc3VyZSogY2FsbGJhY2spCit7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOworICAgIEd0a1Rh
cmdldExpc3QqIGxpc3QgPSB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LCBpbmNs
dWRlU21hcnRQYXN0ZSk7CisKKyAgICBpbnQgbnVtYmVyT2ZUYXJnZXRzOworICAgIEd0a1Rhcmdl
dEVudHJ5KiB0YWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdChsaXN0LCAmbnVt
YmVyT2ZUYXJnZXRzKTsKKworICAgIGlmIChudW1iZXJPZlRhcmdldHMgPiAwICYmIHRhYmxlKSB7
CisgICAgICAgIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0gZGF0YU9iamVjdDsKKworICAg
ICAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoY2xpcGJvYXJkLCB0YWJsZSwgbnVtYmVy
T2ZUYXJnZXRzLAorICAgICAgICAgICAgZ2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjaywgY2xl
YXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBjYWxsYmFjayk7CisgICAgICAgIGd0a19jbGlw
Ym9hcmRfc2V0X2Nhbl9zdG9yZShjbGlwYm9hcmQsIDAsIDApOworCisgICAgICAgIHNldHRpbmdD
bGlwYm9hcmREYXRhT2JqZWN0ID0gMDsKKworICAgIH0gZWxzZQorICAgICAgICBndGtfY2xpcGJv
YXJkX2NsZWFyKGNsaXBib2FyZCk7CisKKyAgICBpZiAodGFibGUpCisgICAgICAgIGd0a190YXJn
ZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKKyAgICBndGtfdGFyZ2V0X2xp
c3RfdW5yZWYobGlzdCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZEhlbHBlcjo6Y2xpcGJvYXJkQ29u
dGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAg
IHJldHVybiBndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlwYm9hcmQs
IHNtYXJ0UGFzdGVBdG9tKTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhl
bHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQyMzhmODBkZDgxZmNlNmY3NGY5ZWQyNTY3NDFjNDZiZjg3ZDg5
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxw
ZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEx1Y2EgQnJ1
bm8gPGxldGhhbG1hbjg4QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNv
biA8bXJvYmluc29uQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFBhc3RlYm9hcmRIZWxwZXJf
aAorI2RlZmluZSBQYXN0ZWJvYXJkSGVscGVyX2gKKworI2luY2x1ZGUgIkZyYW1lLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0YU9iamVjdEd0azsKKworY2xhc3MgUGFzdGVi
b2FyZEhlbHBlciB7CitwdWJsaWM6CisgICAgUGFzdGVib2FyZEhlbHBlcigpOworICAgIHZpcnR1
YWwgflBhc3RlYm9hcmRIZWxwZXIoKTsKKyAgICBzdGF0aWMgUGFzdGVib2FyZEhlbHBlciogZGVm
YXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKKworICAgIHZvaWQgc2V0VXNlUHJpbWFyeVNlbGVjdGlv
bkNsaXBib2FyZChib29sIHVzZVByaW1hcnkpIHsgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJv
YXJkID0gdXNlUHJpbWFyeTsgfQorICAgIGJvb2wgdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2Fy
ZCgpIHsgcmV0dXJuIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsgfQorCisgICAgZW51
bSBTbWFydFBhc3RlSW5jbHVzaW9uIHsgSW5jbHVkZVNtYXJ0UGFzdGUsIERvTm90SW5jbHVkZVNt
YXJ0UGFzdGUgfTsKKworICAgIEd0a0NsaXBib2FyZCogZ2V0Q3VycmVudENsaXBib2FyZChGcmFt
ZSopOworICAgIEd0a0NsaXBib2FyZCogZ2V0Q2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7CisgICAg
R3RrQ2xpcGJvYXJkKiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7
CisgICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCgpIGNvbnN0OworICAgIEd0a1RhcmdldExp
c3QqIHRhcmdldExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqLCBTbWFydFBhc3RlSW5j
bHVzaW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CisgICAgdm9pZCBmaWxsU2VsZWN0aW9u
RGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKKyAgICB2b2lk
IGZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCwgRGF0
YU9iamVjdEd0ayopOworICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXNGb3JDb250ZXh0KEd0
a1dpZGdldCosIEdka0RyYWdDb250ZXh0Kik7CisgICAgdm9pZCB3cml0ZUNsaXBib2FyZENvbnRl
bnRzKEd0a0NsaXBib2FyZCosIFNtYXJ0UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1ZGVTbWFy
dFBhc3RlLCBHQ2xvc3VyZSogPSAwKTsKKyAgICB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzKEd0
a0NsaXBib2FyZCopOworCisgICAgZW51bSBQYXN0ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5
cGVNYXJrdXAsIFRhcmdldFR5cGVUZXh0LCBUYXJnZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklM
aXN0LCBUYXJnZXRUeXBlTmV0c2NhcGVVUkwsIFRhcmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRU
eXBlVW5rbm93biB9OworICAgIGJvb2wgY2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBs
YWNlKEd0a0NsaXBib2FyZCopOworCitwcml2YXRlOgorICAgIEd0a1RhcmdldExpc3QqIG1fdGFy
Z2V0TGlzdDsKKyAgICBib29sIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsKK307CisK
K30KKworI2VuZGlmIC8vIFBhc3RlYm9hcmRIZWxwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4ZmU2MmI1ZjA1
ZmVlNTA2M2Y4YjNmZGRjOWYxOTRlOGY4YWYxYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKQEAgLTAsMCArMSw2MzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIkd0
a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRl
eHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisKKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhp
cyBpcyBpbmNvbXBsZXRlLiBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gbWlycm9yCisvLyBtb3Jl
IGxpa2Ugd2hhdCBGaXJlZm94IGRvZXMsIGFuZCBnZW5lcmF0ZSB0aGVzZSBzd2l0Y2ggc3RhdGVt
ZW50cworLy8gYXQgYnVpbGQgdGltZS4KK1N0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Omtl
eUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKHVuc2lnbmVkIGtleUNvZGUpCit7CisgICAgc3dpdGNo
IChrZXlDb2RlKSB7CisgICAgY2FzZSBHREtfTWVudToKKyAgICBjYXNlIEdES19BbHRfTDoKKyAg
ICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgcmV0dXJuICJBbHQiOworICAgIGNhc2UgR0RLX0Ns
ZWFyOgorICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAgICBjYXNlIEdES19Eb3duOgorICAgICAg
ICByZXR1cm4gIkRvd24iOworICAgICAgICAvLyAiRW5kIgorICAgIGNhc2UgR0RLX0VuZDoKKyAg
ICAgICAgcmV0dXJuICJFbmQiOworICAgICAgICAvLyAiRW50ZXIiCisgICAgY2FzZSBHREtfSVNP
X0VudGVyOgorICAgIGNhc2UgR0RLX0tQX0VudGVyOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAg
ICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgY2FzZSBHREtfRXhlY3V0ZToKKyAgICAgICAgcmV0
dXJuICJFeGVjdXRlIjsKKyAgICBjYXNlIEdES19GMToKKyAgICAgICAgcmV0dXJuICJGMSI7Cisg
ICAgY2FzZSBHREtfRjI6CisgICAgICAgIHJldHVybiAiRjIiOworICAgIGNhc2UgR0RLX0YzOgor
ICAgICAgICByZXR1cm4gIkYzIjsKKyAgICBjYXNlIEdES19GNDoKKyAgICAgICAgcmV0dXJuICJG
NCI7CisgICAgY2FzZSBHREtfRjU6CisgICAgICAgIHJldHVybiAiRjUiOworICAgIGNhc2UgR0RL
X0Y2OgorICAgICAgICByZXR1cm4gIkY2IjsKKyAgICBjYXNlIEdES19GNzoKKyAgICAgICAgcmV0
dXJuICJGNyI7CisgICAgY2FzZSBHREtfRjg6CisgICAgICAgIHJldHVybiAiRjgiOworICAgIGNh
c2UgR0RLX0Y5OgorICAgICAgICByZXR1cm4gIkY5IjsKKyAgICBjYXNlIEdES19GMTA6CisgICAg
ICAgIHJldHVybiAiRjEwIjsKKyAgICBjYXNlIEdES19GMTE6CisgICAgICAgIHJldHVybiAiRjEx
IjsKKyAgICBjYXNlIEdES19GMTI6CisgICAgICAgIHJldHVybiAiRjEyIjsKKyAgICBjYXNlIEdE
S19GMTM6CisgICAgICAgIHJldHVybiAiRjEzIjsKKyAgICBjYXNlIEdES19GMTQ6CisgICAgICAg
IHJldHVybiAiRjE0IjsKKyAgICBjYXNlIEdES19GMTU6CisgICAgICAgIHJldHVybiAiRjE1IjsK
KyAgICBjYXNlIEdES19GMTY6CisgICAgICAgIHJldHVybiAiRjE2IjsKKyAgICBjYXNlIEdES19G
MTc6CisgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICBjYXNlIEdES19GMTg6CisgICAgICAgIHJl
dHVybiAiRjE4IjsKKyAgICBjYXNlIEdES19GMTk6CisgICAgICAgIHJldHVybiAiRjE5IjsKKyAg
ICBjYXNlIEdES19GMjA6CisgICAgICAgIHJldHVybiAiRjIwIjsKKyAgICBjYXNlIEdES19GMjE6
CisgICAgICAgIHJldHVybiAiRjIxIjsKKyAgICBjYXNlIEdES19GMjI6CisgICAgICAgIHJldHVy
biAiRjIyIjsKKyAgICBjYXNlIEdES19GMjM6CisgICAgICAgIHJldHVybiAiRjIzIjsKKyAgICBj
YXNlIEdES19GMjQ6CisgICAgICAgIHJldHVybiAiRjI0IjsKKyAgICBjYXNlIEdES19IZWxwOgor
ICAgICAgICByZXR1cm4gIkhlbHAiOworICAgIGNhc2UgR0RLX0hvbWU6CisgICAgICAgIHJldHVy
biAiSG9tZSI7CisgICAgY2FzZSBHREtfSW5zZXJ0OgorICAgICAgICByZXR1cm4gIkluc2VydCI7
CisgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgcmV0dXJuICJMZWZ0IjsKKyAgICBjYXNlIEdE
S19QYWdlX0Rvd246CisgICAgICAgIHJldHVybiAiUGFnZURvd24iOworICAgIGNhc2UgR0RLX1Bh
Z2VfVXA6CisgICAgICAgIHJldHVybiAiUGFnZVVwIjsKKyAgICBjYXNlIEdES19QYXVzZToKKyAg
ICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAgY2FzZSBHREtfMzI3MF9QcmludFNjcmVlbjoKKyAg
ICBjYXNlIEdES19QcmludDoKKyAgICAgICAgcmV0dXJuICJQcmludFNjcmVlbiI7CisgICAgY2Fz
ZSBHREtfUmlnaHQ6CisgICAgICAgIHJldHVybiAiUmlnaHQiOworICAgIGNhc2UgR0RLX1NlbGVj
dDoKKyAgICAgICAgcmV0dXJuICJTZWxlY3QiOworICAgIGNhc2UgR0RLX1VwOgorICAgICAgICBy
ZXR1cm4gIlVwIjsKKyAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUr
MDA3Ri4KKyAgICBjYXNlIEdES19EZWxldGU6CisgICAgICAgIHJldHVybiAiVSswMDdGIjsKKyAg
ICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiAiVSswMDA4IjsKKyAgICBjYXNl
IEdES19JU09fTGVmdF9UYWI6CisgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgorICAgIGNhc2Ug
R0RLX1RhYjoKKyAgICAgICAgcmV0dXJuICJVKzAwMDkiOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmljb2RlKGdk
a19rZXl2YWxfdG9fdXBwZXIoa2V5Q29kZSkpKTsKKyAgICB9Cit9CisKK2ludCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBrZXljb2Rl
KQoreworICAgIHN3aXRjaCAoa2V5Y29kZSkgeworICAgIGNhc2UgR0RLX0tQXzA6CisgICAgICAg
IHJldHVybiBWS19OVU1QQUQwOyAvLyAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5CisgICAgY2Fz
ZSBHREtfS1BfMToKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7IC8vICg2MSkgTnVtZXJpYyBr
ZXlwYWQgMSBrZXkKKyAgICBjYXNlIEdES19LUF8yOgorICAgICAgICByZXR1cm4gVktfTlVNUEFE
MjsgLy8gKDYyKSBOdW1lcmljIGtleXBhZCAyIGtleQorICAgIGNhc2UgR0RLX0tQXzM6CisgICAg
ICAgIHJldHVybiBWS19OVU1QQUQzOyAvLyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5CisgICAg
Y2FzZSBHREtfS1BfNDoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJp
YyBrZXlwYWQgNCBrZXkKKyAgICBjYXNlIEdES19LUF81OgorICAgICAgICByZXR1cm4gVktfTlVN
UEFENTsgLy8gKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQorICAgIGNhc2UgR0RLX0tQXzY6Cisg
ICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Cisg
ICAgY2FzZSBHREtfS1BfNzoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVt
ZXJpYyBrZXlwYWQgNyBrZXkKKyAgICBjYXNlIEdES19LUF84OgorICAgICAgICByZXR1cm4gVktf
TlVNUEFEODsgLy8gKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgIGNhc2UgR0RLX0tQXzk6
CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5
CisgICAgY2FzZSBHREtfS1BfTXVsdGlwbHk6CisgICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsg
Ly8gKDZBKSBNdWx0aXBseSBrZXkKKyAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgIHJldHVy
biBWS19BREQ7IC8vICg2QikgQWRkIGtleQorICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgorICAg
ICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5CisgICAgY2FzZSBH
REtfS1BfRGVjaW1hbDoKKyAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1h
bCBrZXkKKyAgICBjYXNlIEdES19LUF9EaXZpZGU6CisgICAgICAgIHJldHVybiBWS19ESVZJREU7
IC8vICg2RikgRGl2aWRlIGtleQorCisgICAgY2FzZSBHREtfS1BfUGFnZV9VcDoKKyAgICAgICAg
cmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgY2FzZSBHREtfS1BfUGFn
ZV9Eb3duOgorICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5Cisg
ICAgY2FzZSBHREtfS1BfRW5kOgorICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBr
ZXkKKyAgICBjYXNlIEdES19LUF9Ib21lOgorICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0
KSBIT01FIGtleQorICAgIGNhc2UgR0RLX0tQX0xlZnQ6CisgICAgICAgIHJldHVybiBWS19MRUZU
OyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgY2FzZSBHREtfS1BfVXA6CisgICAgICAgIHJl
dHVybiBWS19VUDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19LUF9SaWdodDoK
KyAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgIGNh
c2UgR0RLX0tQX0Rvd246CisgICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJS
T1cga2V5CisKKyAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiBWS19CQUNL
OyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKKyAgICBjYXNlIEdES19JU09fTGVmdF9UYWI6CisgICAg
Y2FzZSBHREtfMzI3MF9CYWNrVGFiOgorICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgcmV0dXJu
IFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5CisgICAgY2FzZSBHREtfQ2xlYXI6CisgICAgICAgIHJl
dHVybiBWS19DTEVBUjsgLy8gKDBDKSBDTEVBUiBrZXkKKyAgICBjYXNlIEdES19JU09fRW50ZXI6
CisgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICBy
ZXR1cm4gVktfUkVUVVJOOyAvLyAoMEQpIFJldHVybiBrZXkKKworICAgICAgICAvLyBWS19TSElG
VCAoMTApIFNISUZUIGtleQorICAgICAgICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKKwor
ICAgIGNhc2UgR0RLX01lbnU6CisgICAgICAgIHJldHVybiBWS19BUFBTOyAvLyAoNUQpIEFwcGxp
Y2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisKKyAgICAgICAgLy8gVktfTUVOVSAoMTIp
IEFMVCBrZXkKKworICAgIGNhc2UgR0RLX1BhdXNlOgorICAgICAgICByZXR1cm4gVktfUEFVU0U7
IC8vICgxMykgUEFVU0Uga2V5CisgICAgY2FzZSBHREtfQ2Fwc19Mb2NrOgorICAgICAgICByZXR1
cm4gVktfQ0FQSVRBTDsgLy8gKDE0KSBDQVBTIExPQ0sga2V5CisgICAgY2FzZSBHREtfS2FuYV9M
b2NrOgorICAgIGNhc2UgR0RLX0thbmFfU2hpZnQ6CisgICAgICAgIHJldHVybiBWS19LQU5BOyAv
LyAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCisgICAgY2FzZSBHREtf
SGFuZ3VsOgorICAgICAgICByZXR1cm4gVktfSEFOR1VMOyAvLyBWS19IQU5HVUwgKDE1KSBJTUUg
SGFuZ3VsIG1vZGUKKyAgICAgICAgLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQorICAg
ICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCisgICAgY2FzZSBHREtfSGFuZ3Vs
X0hhbmphOgorICAgICAgICByZXR1cm4gVktfSEFOSkE7IC8vICgxOSkgSU1FIEhhbmphIG1vZGUK
KyAgICBjYXNlIEdES19LYW5qaToKKyAgICAgICAgcmV0dXJuIFZLX0tBTkpJOyAvLyAoMTkpIElN
RSBLYW5qaSBtb2RlCisgICAgY2FzZSBHREtfRXNjYXBlOgorICAgICAgICByZXR1cm4gVktfRVND
QVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252
ZXJ0CisgICAgICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAorICAgICAg
ICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0CisgICAgICAgIC8vIFZLX01PREVDSEFOR0Ug
KDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorICAgIGNhc2UgR0RLX3NwYWNlOgorICAgICAg
ICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAgICBjYXNlIEdES19QYWdlX1Vw
OgorICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKKyAgICBjYXNl
IEdES19QYWdlX0Rvd246CisgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9X
TiBrZXkKKyAgICBjYXNlIEdES19FbmQ6CisgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykg
RU5EIGtleQorICAgIGNhc2UgR0RLX0hvbWU6CisgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAo
MjQpIEhPTUUga2V5CisgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgcmV0dXJuIFZLX0xFRlQ7
IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19VcDoKKyAgICAgICAgcmV0dXJu
IFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX1JpZ2h0OgorICAgICAg
ICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5CisgICAgY2FzZSBHREtf
RG93bjoKKyAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKKyAg
ICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VM
RUNUIGtleQorICAgIGNhc2UgR0RLX1ByaW50OgorICAgICAgICByZXR1cm4gVktfU05BUFNIT1Q7
IC8vICgyQykgUFJJTlQgU0NSRUVOIGtleQorICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAg
IHJldHVybiBWS19FWEVDVVRFOyAvLyAoMkIpIEVYRUNVVEUga2V5CisgICAgY2FzZSBHREtfSW5z
ZXJ0OgorICAgIGNhc2UgR0RLX0tQX0luc2VydDoKKyAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsg
Ly8gKDJEKSBJTlMga2V5CisgICAgY2FzZSBHREtfRGVsZXRlOgorICAgIGNhc2UgR0RLX0tQX0Rl
bGV0ZToKKyAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5CisgICAgY2Fz
ZSBHREtfSGVscDoKKyAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVMUCBrZXkKKyAg
ICBjYXNlIEdES18wOgorICAgIGNhc2UgR0RLX3BhcmVucmlnaHQ6CisgICAgICAgIHJldHVybiBW
S18wOyAvLyAgKDMwKSAwKSBrZXkKKyAgICBjYXNlIEdES18xOgorICAgIGNhc2UgR0RLX2V4Y2xh
bToKKyAgICAgICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkKKyAgICBjYXNlIEdES18y
OgorICAgIGNhc2UgR0RLX2F0OgorICAgICAgICByZXR1cm4gVktfMjsgLy8gICgzMikgMiAmIGtl
eQorICAgIGNhc2UgR0RLXzM6CisgICAgY2FzZSBHREtfbnVtYmVyc2lnbjoKKyAgICAgICAgcmV0
dXJuIFZLXzM7IC8vIGNhc2UgJzMnOiBjYXNlICcjJzsKKyAgICBjYXNlIEdES180OgorICAgIGNh
c2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOworICAgICAgICByZXR1cm4gVktfNDsK
KyAgICBjYXNlIEdES181OgorICAgIGNhc2UgR0RLX3BlcmNlbnQ6CisgICAgICAgIHJldHVybiBW
S181OyAvLyAgKDM1KSA1IGtleSAgJyUnCisgICAgY2FzZSBHREtfNjoKKyAgICBjYXNlIEdES19h
c2NpaWNpcmN1bToKKyAgICAgICAgcmV0dXJuIFZLXzY7IC8vICAoMzYpIDYga2V5ICAnXicKKyAg
ICBjYXNlIEdES183OgorICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoKKyAgICAgICAgcmV0dXJuIFZL
Xzc7IC8vICAoMzcpIDcga2V5ICBjYXNlICcmJworICAgIGNhc2UgR0RLXzg6CisgICAgY2FzZSBH
REtfYXN0ZXJpc2s6CisgICAgICAgIHJldHVybiBWS184OyAvLyAgKDM4KSA4IGtleSAgJyonCisg
ICAgY2FzZSBHREtfOToKKyAgICBjYXNlIEdES19wYXJlbmxlZnQ6CisgICAgICAgIHJldHVybiBW
S185OyAvLyAgKDM5KSA5IGtleSAnKCcKKyAgICBjYXNlIEdES19hOgorICAgIGNhc2UgR0RLX0E6
CisgICAgICAgIHJldHVybiBWS19BOyAvLyAgKDQxKSBBIGtleSBjYXNlICdhJzogY2FzZSAnQSc6
IHJldHVybiAweDQxOworICAgIGNhc2UgR0RLX2I6CisgICAgY2FzZSBHREtfQjoKKyAgICAgICAg
cmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2InOiBjYXNlICdCJzogcmV0dXJuIDB4
NDI7CisgICAgY2FzZSBHREtfYzoKKyAgICBjYXNlIEdES19DOgorICAgICAgICByZXR1cm4gVktf
QzsgLy8gICg0MykgQyBrZXkgY2FzZSAnYyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKKyAgICBj
YXNlIEdES19kOgorICAgIGNhc2UgR0RLX0Q6CisgICAgICAgIHJldHVybiBWS19EOyAvLyAgKDQ0
KSBEIGtleSBjYXNlICdkJzogY2FzZSAnRCc6IHJldHVybiAweDQ0OworICAgIGNhc2UgR0RLX2U6
CisgICAgY2FzZSBHREtfRToKKyAgICAgICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNh
c2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7CisgICAgY2FzZSBHREtfZjoKKyAgICBjYXNl
IEdES19GOgorICAgICAgICByZXR1cm4gVktfRjsgLy8gICg0NikgRiBrZXkgY2FzZSAnZic6IGNh
c2UgJ0YnOiByZXR1cm4gMHg0NjsKKyAgICBjYXNlIEdES19nOgorICAgIGNhc2UgR0RLX0c6Cisg
ICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3KSBHIGtleSBjYXNlICdnJzogY2FzZSAnRyc6IHJl
dHVybiAweDQ3OworICAgIGNhc2UgR0RLX2g6CisgICAgY2FzZSBHREtfSDoKKyAgICAgICAgcmV0
dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7
CisgICAgY2FzZSBHREtfaToKKyAgICBjYXNlIEdES19JOgorICAgICAgICByZXR1cm4gVktfSTsg
Ly8gICg0OSkgSSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0OTsKKyAgICBjYXNl
IEdES19qOgorICAgIGNhc2UgR0RLX0o6CisgICAgICAgIHJldHVybiBWS19KOyAvLyAgKDRBKSBK
IGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAweDRBOworICAgIGNhc2UgR0RLX2s6Cisg
ICAgY2FzZSBHREtfSzoKKyAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAoNEIpIEsga2V5IGNhc2Ug
J2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7CisgICAgY2FzZSBHREtfbDoKKyAgICBjYXNlIEdE
S19MOgorICAgICAgICByZXR1cm4gVktfTDsgLy8gICg0QykgTCBrZXkgY2FzZSAnbCc6IGNhc2Ug
J0wnOiByZXR1cm4gMHg0QzsKKyAgICBjYXNlIEdES19tOgorICAgIGNhc2UgR0RLX006CisgICAg
ICAgIHJldHVybiBWS19NOyAvLyAgKDREKSBNIGtleSBjYXNlICdtJzogY2FzZSAnTSc6IHJldHVy
biAweDREOworICAgIGNhc2UgR0RLX246CisgICAgY2FzZSBHREtfTjoKKyAgICAgICAgcmV0dXJu
IFZLX047IC8vICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7Cisg
ICAgY2FzZSBHREtfbzoKKyAgICBjYXNlIEdES19POgorICAgICAgICByZXR1cm4gVktfTzsgLy8g
ICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKKyAgICBjYXNlIEdE
S19wOgorICAgIGNhc2UgR0RLX1A6CisgICAgICAgIHJldHVybiBWS19QOyAvLyAgKDUwKSBQIGtl
eSBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOworICAgIGNhc2UgR0RLX3E6CisgICAg
Y2FzZSBHREtfUToKKyAgICAgICAgcmV0dXJuIFZLX1E7IC8vICAoNTEpIFEga2V5IGNhc2UgJ3En
OiBjYXNlICdRJzogcmV0dXJuIDB4NTE7CisgICAgY2FzZSBHREtfcjoKKyAgICBjYXNlIEdES19S
OgorICAgICAgICByZXR1cm4gVktfUjsgLy8gICg1MikgUiBrZXkgY2FzZSAncic6IGNhc2UgJ1In
OiByZXR1cm4gMHg1MjsKKyAgICBjYXNlIEdES19zOgorICAgIGNhc2UgR0RLX1M6CisgICAgICAg
IHJldHVybiBWS19TOyAvLyAgKDUzKSBTIGtleSBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAw
eDUzOworICAgIGNhc2UgR0RLX3Q6CisgICAgY2FzZSBHREtfVDoKKyAgICAgICAgcmV0dXJuIFZL
X1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7CisgICAg
Y2FzZSBHREtfdToKKyAgICBjYXNlIEdES19VOgorICAgICAgICByZXR1cm4gVktfVTsgLy8gICg1
NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4gMHg1NTsKKyAgICBjYXNlIEdES192
OgorICAgIGNhc2UgR0RLX1Y6CisgICAgICAgIHJldHVybiBWS19WOyAvLyAgKDU2KSBWIGtleSBj
YXNlICd2JzogY2FzZSAnVic6IHJldHVybiAweDU2OworICAgIGNhc2UgR0RLX3c6CisgICAgY2Fz
ZSBHREtfVzoKKyAgICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2UgJ3cnOiBj
YXNlICdXJzogcmV0dXJuIDB4NTc7CisgICAgY2FzZSBHREtfeDoKKyAgICBjYXNlIEdES19YOgor
ICAgICAgICByZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiBy
ZXR1cm4gMHg1ODsKKyAgICBjYXNlIEdES195OgorICAgIGNhc2UgR0RLX1k6CisgICAgICAgIHJl
dHVybiBWS19ZOyAvLyAgKDU5KSBZIGtleSBjYXNlICd5JzogY2FzZSAnWSc6IHJldHVybiAweDU5
OworICAgIGNhc2UgR0RLX3o6CisgICAgY2FzZSBHREtfWjoKKyAgICAgICAgcmV0dXJuIFZLX1o7
IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBjYXNlICdaJzogcmV0dXJuIDB4NUE7CisgICAgY2Fz
ZSBHREtfTWV0YV9MOgorICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRv
d3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICBjYXNlIEdES19NZXRhX1I6
CisgICAgICAgIHJldHVybiBWS19SV0lOOyAvLyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1
cmFsIGtleWJvYXJkKQorICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtl
eQorICAgICAgICAvLyBWS19TRVBBUkFUT1IgKDZDKSBTZXBhcmF0b3Iga2V5CisgICAgICAgIC8v
IFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5CisgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZF
KSBEZWNpbWFsIGtleQorICAgICAgICAvLyBWS19ESVZJREUgKDZGKSBEaXZpZGUga2V5CisgICAg
ICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKworICAgIGNhc2UgR0RLX051bV9Mb2Nr
OgorICAgICAgICByZXR1cm4gVktfTlVNTE9DSzsgLy8gKDkwKSBOVU0gTE9DSyBrZXkKKworICAg
IGNhc2UgR0RLX1Njcm9sbF9Mb2NrOgorICAgICAgICByZXR1cm4gVktfU0NST0xMOyAvLyAoOTEp
IFNDUk9MTCBMT0NLIGtleQorCisgICAgY2FzZSBHREtfU2hpZnRfTDoKKyAgICAgICAgcmV0dXJu
IFZLX0xTSElGVDsgLy8gKEEwKSBMZWZ0IFNISUZUIGtleQorICAgIGNhc2UgR0RLX1NoaWZ0X1I6
CisgICAgICAgIHJldHVybiBWS19SU0hJRlQ7IC8vIChBMSkgUmlnaHQgU0hJRlQga2V5CisgICAg
Y2FzZSBHREtfQ29udHJvbF9MOgorICAgICAgICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikg
TGVmdCBDT05UUk9MIGtleQorICAgIGNhc2UgR0RLX0NvbnRyb2xfUjoKKyAgICAgICAgcmV0dXJu
IFZLX1JDT05UUk9MOyAvLyAoQTMpIFJpZ2h0IENPTlRST0wga2V5CisgICAgY2FzZSBHREtfQWx0
X0w6CisgICAgICAgIHJldHVybiBWS19MTUVOVTsgLy8gKEE0KSBMZWZ0IE1FTlUga2V5CisgICAg
Y2FzZSBHREtfQWx0X1I6CisgICAgICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1KSBSaWdodCBN
RU5VIGtleQorCisgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRvd3MgMjAwMC9Y
UDogQnJvd3NlciBCYWNrIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NF
Ul9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5CisgICAg
ICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9w
IGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDog
QnJvd3NlciBTZWFyY2gga2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikg
V2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICAgICAgLy8gVktfQlJP
V1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtl
eQorICAgICAgICAvLyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1l
IE11dGUga2V5CisgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQ
OiBWb2x1bWUgRG93biBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2luZG93cyAy
MDAwL1hQOiBWb2x1bWUgVXAga2V5CisgICAgICAgIC8vIFZLX01FRElBX05FWFRfVFJBQ0sgKEIw
KSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5CisgICAgICAgIC8vIFZLX01FRElBX1BS
RVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorICAgICAg
ICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQor
ICAgICAgICAvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5
L1BhdXNlIE1lZGlhIGtleQorICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3Mg
MjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX01FRElBX1NFTEVD
VCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQorICAgICAgICAvLyBWS19M
QVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkK
KyAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFw
cGxpY2F0aW9uIDIga2V5CisKKyAgICAgICAgLy8gVktfT0VNXzEgKEJBKSBVc2VkIGZvciBtaXNj
ZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIw
MDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnOzonIGtleQorICAgIGNh
c2UgR0RLX3NlbWljb2xvbjoKKyAgICBjYXNlIEdES19jb2xvbjoKKyAgICAgICAgcmV0dXJuIFZL
X09FTV8xOyAvLyBjYXNlICc7JzogY2FzZSAnOic6IHJldHVybiAweEJBOworICAgICAgICAvLyBW
S19PRU1fUExVUyAoQkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwg
dGhlICcrJyBrZXkKKyAgICBjYXNlIEdES19wbHVzOgorICAgIGNhc2UgR0RLX2VxdWFsOgorICAg
ICAgICByZXR1cm4gVktfT0VNX1BMVVM7IC8vIGNhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4
QkI7CisgICAgICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFu
eSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKKyAgICBjYXNlIEdES19jb21tYToKKyAgICBj
YXNlIEdES19sZXNzOgorICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1BOyAvLyBjYXNlICcsJzog
Y2FzZSAnPCc6IHJldHVybiAweEJDOworICAgICAgICAvLyBWS19PRU1fTUlOVVMgKEJEKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLScga2V5CisgICAgY2Fz
ZSBHREtfbWludXM6CisgICAgY2FzZSBHREtfdW5kZXJzY29yZToKKyAgICAgICAgcmV0dXJuIFZL
X09FTV9NSU5VUzsgLy8gY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4gMHhCRDsKKyAgICAgICAg
Ly8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3Jl
Z2lvbiwgdGhlICcuJyBrZXkKKyAgICBjYXNlIEdES19wZXJpb2Q6CisgICAgY2FzZSBHREtfZ3Jl
YXRlcjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7IC8vIGNhc2UgJy4nOiBjYXNlICc+
JzogcmV0dXJuIDB4QkU7CisgICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAgICBjYXNl
IEdES19zbGFzaDoKKyAgICBjYXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgcmV0dXJuIFZLX09F
TV8yOyAvLyBjYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgICAgICAvLyBWS19P
RU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICdgficga2V5CisgICAgY2FzZSBHREtfYXNjaWl0aWxkZToKKyAgICBjYXNlIEdES19x
dW90ZWxlZnQ6CisgICAgICAgIHJldHVybiBWS19PRU1fMzsgLy8gY2FzZSAnYCc6IGNhc2UgJ34n
OiByZXR1cm4gMHhDMDsKKyAgICAgICAgLy8gVktfT0VNXzQgKERCKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAv
WFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnW3snIGtleQorICAgIGNhc2Ug
R0RLX2JyYWNrZXRsZWZ0OgorICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoKKyAgICAgICAgcmV0dXJu
IFZLX09FTV80OyAvLyBjYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAweERCOworICAgICAgICAv
LyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAgY2FzZSBHREtfYmFja3NsYXNoOgorICAgIGNhc2Ug
R0RLX2JhcjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV81OyAvLyBjYXNlICdcXCc6IGNhc2UgJ3wn
OiByZXR1cm4gMHhEQzsKKyAgICAgICAgLy8gVktfT0VNXzYgKEREKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAv
WFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXX0nIGtleQorICAgIGNhc2Ug
R0RLX2JyYWNrZXRyaWdodDoKKyAgICBjYXNlIEdES19icmFjZXJpZ2h0OgorICAgICAgICByZXR1
cm4gVktfT0VNXzY7IC8vIGNhc2UgJ10nOiBjYXNlICd9JzogcmV0dXJuIDB4REQ7CisgICAgICAg
IC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQorICAgIGNhc2Ug
R0RLX3F1b3RlcmlnaHQ6CisgICAgY2FzZSBHREtfcXVvdGVkYmw6CisgICAgICAgIHJldHVybiBW
S19PRU1fNzsgLy8gY2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4REU7CisgICAgICAgIC8v
IFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4KKyAgICAgICAgLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAw
MC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBv
biB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAorICAgICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkg
V2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBS
T0NFU1Mga2V5CisgICAgICAgIC8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNl
ZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4g
VGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5
IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZv
cm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwg
YW5kIFdNX0tFWVVQCisgICAgICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorICAgICAgICAv
LyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQorICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2Vs
IGtleQorICAgICAgICAvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKKyAgICAgICAgLy8g
VktfUExBWSAoRkEpIFBsYXkga2V5CisgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQor
ICAgICAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICAgICAg
ICAvLyBWS19QQTEgKEZEKSBQQTEga2V5CisgICAgICAgIC8vIFZLX09FTV9DTEVBUiAoRkUpIENs
ZWFyIGtleQorICAgIGNhc2UgR0RLX0YxOgorICAgIGNhc2UgR0RLX0YyOgorICAgIGNhc2UgR0RL
X0YzOgorICAgIGNhc2UgR0RLX0Y0OgorICAgIGNhc2UgR0RLX0Y1OgorICAgIGNhc2UgR0RLX0Y2
OgorICAgIGNhc2UgR0RLX0Y3OgorICAgIGNhc2UgR0RLX0Y4OgorICAgIGNhc2UgR0RLX0Y5Ogor
ICAgIGNhc2UgR0RLX0YxMDoKKyAgICBjYXNlIEdES19GMTE6CisgICAgY2FzZSBHREtfRjEyOgor
ICAgIGNhc2UgR0RLX0YxMzoKKyAgICBjYXNlIEdES19GMTQ6CisgICAgY2FzZSBHREtfRjE1Ogor
ICAgIGNhc2UgR0RLX0YxNjoKKyAgICBjYXNlIEdES19GMTc6CisgICAgY2FzZSBHREtfRjE4Ogor
ICAgIGNhc2UgR0RLX0YxOToKKyAgICBjYXNlIEdES19GMjA6CisgICAgY2FzZSBHREtfRjIxOgor
ICAgIGNhc2UgR0RLX0YyMjoKKyAgICBjYXNlIEdES19GMjM6CisgICAgY2FzZSBHREtfRjI0Ogor
ICAgICAgICByZXR1cm4gVktfRjEgKyAoa2V5Y29kZSAtIEdES19GMSk7CisgICAgY2FzZSBHREtf
S0VZX1ZvaWRTeW1ib2w6CisgICAgICAgIHJldHVybiBWS19QUk9DRVNTS0VZOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworfQorCitTdHJpbmcgUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5zaWduZWQgdmFsKQoreworICAgIHN3
aXRjaCAodmFsKSB7CisgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgIGNhc2UgR0RLX0tQX0Vu
dGVyOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiXHIiKTsK
KyAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlx4OCIpOwor
ICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiXHQiKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7Cisg
ICAgICAgIGdsb25nIG53YzsKKyAgICAgICAgZ3VuaWNoYXIyKiB1Y2hhcjE2ID0gZ191Y3M0X3Rv
X3V0ZjE2KCZjLCAxLCAwLCAmbndjLCAwKTsKKworICAgICAgICBTdHJpbmcgcmV0VmFsOworICAg
ICAgICBpZiAodWNoYXIxNikKKyAgICAgICAgICAgIHJldFZhbCA9IFN0cmluZygoVUNoYXIqKXVj
aGFyMTYsIG53Yyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldFZhbCA9IFN0cmluZygp
OworCisgICAgICAgIGdfZnJlZSh1Y2hhcjE2KTsKKworICAgICAgICByZXR1cm4gcmV0VmFsOwor
ICAgIH0KK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5
RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBH
REtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6Oktl
eURvd247Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9y
R2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVy
cyA9IDA7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLIHx8IGV2ZW50LT5r
ZXl2YWwgPT0gR0RLXzMyNzBfQmFja1RhYikKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3Jt
RXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNL
KQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6Q3RybEtleTsKKyAgICBpZiAo
ZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRm
b3JtRXZlbnQ6OkFsdEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykK
KyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKTsKK30KKwor
Ly8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3Ry
dWN0b3JzCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtF
dmVudEtleSogZXZlbnQsIGNvbnN0IENvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1
bHRzKQorICAgIDogUGxhdGZvcm1FdmVudChldmVudFR5cGVGb3JHZGtLZXlFdmVudChldmVudCks
IG1vZGlmaWVyc0Zvckdka0tleUV2ZW50KGV2ZW50KSwgY3VycmVudFRpbWUoKSkKKyAgICAsIG1f
dGV4dChjb21wb3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nLmxlbmd0aCgpID8gY29tcG9zaXRp
b25SZXN1bHRzLnNpbXBsZVN0cmluZyA6IHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5
dmFsKSkKKyAgICAsIG1fdW5tb2RpZmllZFRleHQobV90ZXh0KQorICAgICwgbV9rZXlJZGVudGlm
aWVyKGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpKQorICAgICwgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUod2luZG93c0tleUNvZGVGb3JHZGtLZXlDb2RlKGV2ZW50LT5r
ZXl2YWwpKQorICAgICwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZShldmVudC0+a2V5dmFsKQorICAg
ICwgbV9tYWNDaGFyQ29kZSgwKQorICAgICwgbV9hdXRvUmVwZWF0KGZhbHNlKQorICAgICwgbV9p
c0tleXBhZChldmVudC0+a2V5dmFsID49IEdES19LUF9TcGFjZSAmJiBldmVudC0+a2V5dmFsIDw9
IEdES19LUF85KQorICAgICwgbV9pc1N5c3RlbUtleShmYWxzZSkKKyAgICAsIG1fZ2RrRXZlbnRL
ZXkoZXZlbnQpCisgICAgLCBtX2NvbXBvc2l0aW9uUmVzdWx0cyhjb21wb3NpdGlvblJlc3VsdHMp
Cit7CisgICAgLy8gVG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIElFLCB3ZSByZXR1cm4gVktfUFJP
Q0VTU0tFWSBmb3Iga2V5cyB0aGF0IHRyaWdnZXJlZCBjb21wb3NpdGlvbiByZXN1bHRzLgorICAg
IGlmIChjb21wb3NpdGlvblJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVkKCkpCisgICAgICAgIG1f
d2luZG93c1ZpcnR1YWxLZXlDb2RlID0gVktfUFJPQ0VTU0tFWTsKK30KKwordm9pZCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wg
YmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkKK3sKKyAgICAvLyBDYW4gb25seSBjaGFuZ2UgdHlw
ZSBmcm9tIEtleURvd24gdG8gUmF3S2V5RG93biBvciBDaGFyLCBhcyB3ZSBsYWNrIGluZm9ybWF0
aW9uIGZvciBvdGhlciBjb252ZXJzaW9ucy4KKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24p
OworICAgIG1fdHlwZSA9IHR5cGU7CisKKyAgICBpZiAoYmFja3dhcmRDb21wYXRpYmlsaXR5TW9k
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6UmF3
S2V5RG93bikgeworICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlm
aWVkVGV4dCA9IFN0cmluZygpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50
OjpDaGFyICYmIG1fY29tcG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKSB7Cisg
ICAgICAgIC8vIEhhdmluZyBlbXB0eSB0ZXh0LCBwcmV2ZW50cyB0aGlzIENoYXIgKHdoaWNoIGlz
IGEgRE9NIGtleXByZXNzKSBldmVudAorICAgICAgICAvLyBmcm9tIGdvaW5nIHRvIHRoZSBET00u
IEtleXMgdGhhdCB0cmlnZ2VyIGNvbXBvc2l0aW9uIGV2ZW50cyBzaG91bGQgbm90CisgICAgICAg
IC8vIGZpcmUga2V5cHJlc3MuCisgICAgICAgIG1fdGV4dCA9IFN0cmluZygpOworICAgICAgICBt
X3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9rZXlJ
ZGVudGlmaWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0g
MDsKKyAgICB9Cit9CisKK2Jvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xv
Y2tTdGF0ZSgpCit7CisgICAgcmV0dXJuIGdka19rZXltYXBfZ2V0X2NhcHNfbG9ja19zdGF0ZShn
ZGtfa2V5bWFwX2dldF9kZWZhdWx0KCkpOworfQorCit2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoYm9vbCYgc2hpZnRLZXksIGJvb2wmIGN0cmxLZXks
IGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0YUtleSkKK3sKKyAgICBHZGtNb2RpZmllclR5cGUgc3Rh
dGU7CisgICAgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3N0YXRlKCZzdGF0ZSk7CisKKyAgICBzaGlm
dEtleSA9IHN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgY3RybEtleSA9IHN0YXRlICYgR0RL
X0NPTlRST0xfTUFTSzsKKyAgICBhbHRLZXkgPSBzdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAg
bWV0YUtleSA9IHN0YXRlICYgR0RLX01FVEFfTUFTSzsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5NjdiNWQ1MDNk
NDNiMzNiMzJmODExOWU1YTM2MWYyMTEyN2Y5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAKQEAgLTAsMCArMSwxMTYgQEAK
Ky8qCisqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogV291bGQgYmUgZXZlbiBi
ZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdh
eXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KKworLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUg
b3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBs
YXRmb3JtTW91c2VFdmVudChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgbV90aW1lc3Rh
bXAgPSBldmVudC0+dGltZTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+
eCwgKGludClldmVudC0+eSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+eV9yb290KTsKKworICAgIG1fbW9kaWZpZXJzID0g
MDsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIG1fbW9k
aWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9N
QVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlmIChldmVudC0+c3Rh
dGUgJiBHREtfTU9EMV9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBBbHRLZXk7CisgICAg
aWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9
IE1ldGFLZXk7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVU
VE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JV
VFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgbV90eXBl
ID0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUg
PT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2
ZW50OjpNb3VzZVJlbGVhc2VkOworICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAg
ICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICAg
ICAgbV9jbGlja0NvdW50ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RL
XzJCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOworICAgICAgICBl
bHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1f
Y2xpY2tDb3VudCA9IDM7CisKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAg
ICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1
dHRvbiA9PSAyKQorICAgICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAg
IGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKKyAgICAgICAgICAgIG1fYnV0dG9uID0gUmln
aHRCdXR0b247CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9y
bU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKK3sKKyAgICBtX3RpbWVzdGFtcCA9
IG1vdGlvbi0+dGltZTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPngs
IChpbnQpbW90aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClt
b3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7CisKKyAgICBtX21vZGlmaWVycyA9
IDA7CisgICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9t
b2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJP
TF9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5Owor
ICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmll
cnMgfD0gTWV0YUtleTsKKworICAgIHN3aXRjaCAobW90aW9uLT50eXBlKSB7CisgICAgY2FzZSBH
REtfTU9USU9OX05PVElGWToKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VN
b3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlja0NvdW50
ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfTsKKworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFf
TUFTSykKKyAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgIGVsc2UgaWYgKG1vdGlv
bi0+c3RhdGUgJiBHREtfQlVUVE9OMl9NQVNLKQorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1
dHRvbjsKKyAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAg
ICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Q
bGF0Zm9ybVNjcmVlbkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2
MTcyMzI0YTBjNWY5MTZjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
UGxhdGZvcm1TY3JlZW5HdGsuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5o
IgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNp
bmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgR3RrV2lkZ2V0KiBnZXRUb3BsZXZlbChHdGtXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwo
d2lkZ2V0KTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgPyB0
b3BsZXZlbCA6IDA7Cit9CisKK3N0YXRpYyBHZGtWaXN1YWwqIGdldFZpc3VhbChXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQo
d2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsK
KyAgICBpZiAoIWNvbnRhaW5lcikgeworICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19z
Y3JlZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICAgICAgcmV0dXJuIHNjcmVlbiA/IGdka19zY3JlZW5f
Z2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKSA6IDA7CisgICAgfQorCisgICAgaWYgKCFndGtfd2lk
Z2V0X2dldF9yZWFsaXplZChjb250YWluZXIpKQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3Bs
ZXZlbChjb250YWluZXIpOworICAgIHJldHVybiBjb250YWluZXIgPyBnZGtfd2luZG93X2dldF92
aXN1YWwoZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKK30KKworaW50IHNj
cmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0
VmlzdWFsKHdpZGdldCk7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiAyNDsKKyAg
ICByZXR1cm4gZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKTsKK30KKworaW50IHNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFs
ID0gZ2V0VmlzdWFsKHdpZGdldCk7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiA4
OworCisgICAgcmV0dXJuIGdka192aXN1YWxfZ2V0X2JpdHNfcGVyX3JnYih2aXN1YWwpOworfQor
Citib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4g
c2NyZWVuRGVwdGgod2lkZ2V0KSA8IDI7Cit9CisKKworc3RhdGljIEdka1NjcmVlbiogZ2V0U2Ny
ZWVuKEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3Jl
ZW4od2lkZ2V0KSA/IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9n
ZXRfZGVmYXVsdCgpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkK
K3sKKyAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0
LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBp
ZiAoY29udGFpbmVyKQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIp
OworCisgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFp
bmVyKSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNjcmVlbikKKyAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8g
Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93
aW5kb3coY29udGFpbmVyKSkgOiAwOworCisgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OworICAg
IGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0
cnkpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9t
ZXRyeS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0KTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWls
YWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3
aWRnZXQgPyBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpKSA6IDA7CisgICAgaWYgKGNvbnRhaW5lciAmJiAhZ3RrX3dpZGdldF9nZXRf
cmVhbGl6ZWQoY29udGFpbmVyKSkKKyAgICAgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsK
KworICAgIEdka1NjcmVlbiogc2NyZWVuID0gY29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5l
cikgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdk
a19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KGNvbnRhaW5lcikpIDogMDsKKworICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBn
ZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmthcmVhKHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVh
KTsKKworICAgIHJldHVybiBGbG9hdFJlY3Qod29ya0FyZWEueCwgd29ya0FyZWEueSwgd29ya0Fy
ZWEud2lkdGgsIHdvcmtBcmVhLmhlaWdodCk7CisKK30KKwordm9pZCBzY3JlZW5Db2xvclByb2Zp
bGUoQ29sb3JQcm9maWxlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
V2hlZWxFdmVudEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVu
dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhjZTEyNGM4MjRkMjEyZmY5ZTczNzY1ODJjMWI1YzZiOWYx
YmE0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVl
bEV2ZW50R3RrLmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8Z2Rr
L2dkay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRo
ZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25zdHJ1Y3RvcnMKK1BsYXRmb3JtV2hlZWxFdmVudDo6
UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgZGVsdGEgPSAxOworCisgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hl
ZWw7CisgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOworCisgICAgbV9tb2RpZmllcnMg
PSAwOworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9t
b2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9M
X01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IEN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5z
dGF0ZSAmIEdES19NT0QxX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAg
ICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMg
fD0gTWV0YUtleTsKKworICAgIG1fZGVsdGFYID0gMDsKKyAgICBtX2RlbHRhWSA9IDA7CisKKyAg
ICAvLyBEb2NzIHNheSBhbiB1cHdhcmRzIHNjcm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMg
YSBwb3NpdGl2ZSBkZWx0YQorICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgIGNh
c2UgR0RLX1NDUk9MTF9VUDoKKyAgICAgICAgbV9kZWx0YVkgPSBkZWx0YTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHREtfU0NST0xMX0RPV046CisgICAgICAgIG1fZGVsdGFZID0gLWRlbHRh
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoKKyAgICAgICAgbV9k
ZWx0YVggPSBkZWx0YTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMX1JJR0hU
OgorICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YTsKKyAgICAgICAgYnJlYWs7CisjaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMywgMTgpCisgICAgY2FzZSBHREtfU0NST0xMX1NNT09USDogeworICAg
ICAgICBnZG91YmxlIGRlbHRhWCwgZGVsdGFZOworICAgICAgICBnZGtfZXZlbnRfZ2V0X3Njcm9s
bF9kZWx0YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmRlbHRhWCwgJmRl
bHRhWSk7CisgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhWDsKKyAgICAgICAgbV9kZWx0YVkgPSAt
ZGVsdGFZOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorICAgIG1f
d2hlZWxUaWNrc1ggPSBtX2RlbHRhWDsKKyAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7CisK
KyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eCksIHN0
YXRpY19jYXN0PGludD4oZXZlbnQtPnkpKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9p
bnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eF9yb290KSwgc3RhdGljX2Nhc3Q8aW50PihldmVu
dC0+eV9yb290KSk7CisgICAgbV9ncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50
OworICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gZmFsc2U7CisKKyAgICAvLyBG
SVhNRTogcmV0cmlldmUgdGhlIHVzZXIgc2V0dGluZyBmb3IgdGhlIG51bWJlciBvZiBsaW5lcyB0
byBzY3JvbGwgb24gZWFjaCB3aGVlbCBldmVudAorICAgIG1fZGVsdGFYICo9IHN0YXRpY19jYXN0
PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgIG1fZGVsdGFZICo9
IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwY2NlYzM1
MzA4ZjhlMGUxMjViNGYwY2QyMWFiY2Q4ZTQ2ZTI1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8
c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBN
ZW51R3RrLmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHdGtVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdTZWFy
Y2hUaW1lb3V0TXMgPSAxMDAwOworCitQb3B1cE1lbnVHdGs6OlBvcHVwTWVudUd0ayhQb3B1cE1l
bnVDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQoreworfQorCitQ
b3B1cE1lbnVHdGs6On5Qb3B1cE1lbnVHdGsoKQoreworICAgIGlmIChtX3BvcHVwKSB7CisgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLT5wbGF0Zm9y
bU1lbnUoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAg
IGhpZGUoKTsKKyAgICB9Cit9CisKK0d0a0FjdGlvbiogUG9wdXBNZW51R3RrOjpjcmVhdGVHdGtB
Y3Rpb25Gb3JNZW51SXRlbShpbnQgaXRlbUluZGV4KQoreworICAgIEdPd25QdHI8Y2hhcj4gYWN0
aW9uTmFtZShnX3N0cmR1cF9wcmludGYoInBvcHVwLW1lbnUtYWN0aW9uLSVkIiwgaXRlbUluZGV4
KSk7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdl
dCgpLCBjbGllbnQoKS0+aXRlbVRleHQoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCBjbGllbnQo
KS0+aXRlbVRvb2xUaXAoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCAwKTsKKyAgICBnX29iamVj
dF9zZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiLCBH
SU5UX1RPX1BPSU5URVIoaXRlbUluZGV4KSk7CisgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24s
ICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0sobWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKKyAgICAv
LyBGSVhNRTogQXBwbHkgdGhlIFBvcHVwTWVudVN0eWxlIGZyb20gY2xpZW50KCktPml0ZW1TdHls
ZShpKQorICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCAhY2xpZW50KCktPml0ZW1T
dHlsZShpdGVtSW5kZXgpLmlzRGlzcGxheU5vbmUoKSk7CisgICAgZ3RrX2FjdGlvbl9zZXRfc2Vu
c2l0aXZlKGFjdGlvbiwgY2xpZW50KCktPml0ZW1Jc0VuYWJsZWQoaXRlbUluZGV4KSk7CisKKyAg
ICByZXR1cm4gYWN0aW9uOworfQorCit2b2lkIFBvcHVwTWVudUd0azo6c2hvdyhjb25zdCBJbnRS
ZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoY2xp
ZW50KCkpOworCisgICAgaWYgKCFtX3BvcHVwKSB7CisgICAgICAgIG1fcG9wdXAgPSBHdGtQb3B1
cE1lbnU6OmNyZWF0ZSgpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAtPnBsYXRm
b3JtTWVudSgpLCAidW5tYXAiLCBHX0NBTExCQUNLKFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVk
KSwgdGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcG9wdXAtPmNsZWFyKCk7CisKKyAgICBj
b25zdCBpbnQgc2l6ZSA9IGNsaWVudCgpLT5saXN0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChjbGllbnQoKS0+aXRlbUlzU2VwYXJhdG9y
KGkpKQorICAgICAgICAgICAgbV9wb3B1cC0+YXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihj
cmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpKSk7CisgICAgICAgICAgICBtX3BvcHVwLT5hcHBl
bmRJdGVtKGFjdGlvbi5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJbnRQb2ludCBt
ZW51UG9zaXRpb24gPSBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEdUS19XSURHRVQo
dmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHZpZXctPmNvbnRlbnRz
VG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7CisgICAgbWVudVBvc2l0aW9uLm1vdmUoMCwgcmVj
dC5oZWlnaHQoKSk7CisKKyAgICBtX3BvcHVwLT5wb3BVcChyZWN0LnNpemUoKSwgbWVudVBvc2l0
aW9uLCBzaXplLCBpbmRleCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkpOworCisgICAgLy8gR1RL
IGNhbiByZWZ1c2UgdG8gYWN0dWFsbHkgb3BlbiB0aGUgbWVudSB3aGVuIG1vdXNlIGdyYWJzIGZh
aWxzLgorICAgIC8vIEVuc3VyZSBXZWJDb3JlIGRvZXMgbm90IGdvIGludG8gc29tZSBwZXNreSBz
dGF0ZS4KKyAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3Zpc2libGUobV9wb3B1cC0+cGxhdGZvcm1N
ZW51KCkpKQorICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKCk7Cit9CisKK3ZvaWQgUG9w
dXBNZW51R3RrOjpoaWRlKCkKK3sKKyAgICBBU1NFUlQobV9wb3B1cCk7CisgICAgbV9wb3B1cC0+
cG9wRG93bigpOworfQorCit2b2lkIFBvcHVwTWVudUd0azo6dXBkYXRlRnJvbUVsZW1lbnQoKQor
eworICAgIGNsaWVudCgpLT5zZXRUZXh0RnJvbUl0ZW0oY2xpZW50KCktPnNlbGVjdGVkSW5kZXgo
KSk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjpkaXNjb25uZWN0Q2xpZW50KCkKK3sKKyAgICBt
X3BvcHVwQ2xpZW50ID0gMDsKK30KKwordm9pZCBQb3B1cE1lbnVHdGs6Om1lbnVJdGVtQWN0aXZh
dGVkKEd0a0FjdGlvbiogYWN0aW9uLCBQb3B1cE1lbnVHdGsqIHRoYXQpCit7CisgICAgQVNTRVJU
KHRoYXQtPmNsaWVudCgpKTsKKyAgICB0aGF0LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKEdQT0lO
VEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVu
dS1hY3Rpb24taW5kZXgiKSkpOworfQorCit2b2lkIFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVk
KEd0a1dpZGdldCosIFBvcHVwTWVudUd0ayogdGhhdCkKK3sKKyAgICBBU1NFUlQodGhhdC0+Y2xp
ZW50KCkpOworICAgIHRoYXQtPmNsaWVudCgpLT5wb3B1cERpZEhpZGUoKTsKK30KKworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDgxMWZiZjVmZTM5ZjdkNGY0
YzJjMmNiMGI4MDM1MmE2ZDkwODllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9Qb3B1cE1lbnVHdGsuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBQb3B1cE1lbnVHdGtfaAorI2RlZmluZSBQb3B1cE1lbnVHdGtfaAorCisjaW5jbHVkZSAi
R3RrUG9wdXBNZW51LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBvcHVwTWVu
dS5oIgorI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZyYW1lVmlldzsKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3MgUG9wdXBNZW51
R3RrIDogcHVibGljIFBvcHVwTWVudSB7CitwdWJsaWM6CisgICAgUG9wdXBNZW51R3RrKFBvcHVw
TWVudUNsaWVudCopOworICAgIH5Qb3B1cE1lbnVHdGsoKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
aG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQgaW5kZXgpOworICAgIHZpcnR1YWwg
dm9pZCBoaWRlKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RDbGllbnQoKTsKKworcHJpdmF0ZToKKyAgICBQb3B1cE1l
bnVDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBDbGllbnQ7IH0KKyAgICBH
dGtBY3Rpb24qIGNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGludCBpdGVtSW5kZXgpOworCisg
ICAgc3RhdGljIHZvaWQgbWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVwTWVudUd0ayopOwor
ICAgIHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlvbiosIFBvcHVwTWVudUd0
ayopOworCisgICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OworICAgIE93blB0cjxH
dGtQb3B1cE1lbnU+IG1fcG9wdXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVHdGtf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zOTEyMzFlZDQzMjEzYTVkNWQ0ZjIwNGI2MDRkNzkwZDZlMWI2MjU4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCisKKyNp
ZiBVU0UoR0xYKQorCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4KKyNpbmNsdWRlIDxjYWlyby14bGliLmg+
CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiBIYXNoTWFwPFdpbmRvdywgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqPiBX
aW5kb3dIYXNoTWFwOworc3RhdGljIFdpbmRvd0hhc2hNYXAmIGdldFdpbmRvd0hhc2hNYXAoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2luZG93SGFzaE1hcCwgd2luZG93SGFzaE1hcCwg
KCkpOworICAgIHJldHVybiB3aW5kb3dIYXNoTWFwOworfQorCitzdGF0aWMgaW50IGdEYW1hZ2VF
dmVudEJhc2U7CitzdGF0aWMgR2RrRmlsdGVyUmV0dXJuIGZpbHRlclhEYW1hZ2VFdmVudChHZGtY
RXZlbnQqIGdka1hFdmVudCwgR2RrRXZlbnQqIGV2ZW50LCB2b2lkKikKK3sKKyAgICBYRXZlbnQq
IHhFdmVudCA9IHN0YXRpY19jYXN0PFhFdmVudCo+KGdka1hFdmVudCk7CisgICAgaWYgKHhFdmVu
dC0+dHlwZSAhPSBnRGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5vdGlmeSkKKyAgICAgICAgcmV0
dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAgICBYRGFtYWdlTm90aWZ5RXZlbnQqIGRhbWFn
ZUV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPih4RXZlbnQpOwor
ICAgIFdpbmRvd0hhc2hNYXAmIHdpbmRvd0hhc2hNYXAgPSBnZXRXaW5kb3dIYXNoTWFwKCk7Cisg
ICAgV2luZG93SGFzaE1hcDo6aXRlcmF0b3IgaSA9IHdpbmRvd0hhc2hNYXAuZmluZChkYW1hZ2VF
dmVudC0+ZHJhd2FibGUpOworICAgIGlmIChpID09IHdpbmRvd0hhc2hNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisgICAgaS0+dmFsdWUtPmNhbGxEYW1h
Z2VOb3RpZnlDYWxsYmFjaygpOworICAgIFhEYW1hZ2VTdWJ0cmFjdChHREtfRElTUExBWV9YRElT
UExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9u
ZSwgTm9uZSk7CisgICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworfQorCitzdGF0aWMgYm9v
bCBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIGhhc0V4dGVuc2lvbnMgPSBmYWxzZTsK
KworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIGhhc0V4dGVuc2lvbnM7CisK
KyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpbnQgZXJyb3JCYXNlOworICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKKyAgICBpZiAoIVhEYW1hZ2VRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZ0RhbWFnZUV2
ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBl
dmVudEJhc2U7CisgICAgaWYgKCFYQ29tcG9zaXRlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJmV2
ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdl
IG5lZWQgdG8gc3VwcG9ydCBYQ29tcG9zaXRlIHZlcnNpb24gMC4yLgorICAgIGludCBtYWpvciwg
bWlub3I7CisgICAgWENvbXBvc2l0ZVF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAmbWFqb3IsICZtaW5v
cik7CisgICAgaWYgKG1ham9yIDwgMCB8fCAoIW1ham9yICYmIG1pbm9yIDwgMikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGhhc0V4dGVuc2lvbnMgPSB0cnVlOworICAgIHJldHVybiB0
cnVlOworfQorCitQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdMQ29udGV4
dE5lZWRlZCBuZWVkc0NvbnRleHQpCit7CisgICAgcmV0dXJuIHN1cHBvcnRzWERhbWFnZUFuZFhD
b21wb3NpdGUoKSA/IGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhzaXpl
LCBuZWVkc0NvbnRleHQpKSA6IG51bGxwdHI7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBzaXplLCBHTENv
bnRleHROZWVkZWQgbmVlZHNDb250ZXh0KQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX3dp
bmRvdygwKQorICAgICwgbV9wYXJlbnRXaW5kb3coMCkKKyAgICAsIG1fcGl4bWFwKDApCisgICAg
LCBtX25lZWRzQ29udGV4dChuZWVkc0NvbnRleHQpCisgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAs
IG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKKyAgICAsIG1fZGFtYWdlKDApCisg
ICAgLCBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKDApCisgICAgLCBtX2RhbWFnZU5vdGlmeURhdGEo
MCkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgU2NyZWVuKiBzY3JlZW4gPSBEZWZhdWx0U2NyZWVu
T2ZEaXNwbGF5KGRpc3BsYXkpOworCisgICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBjb2RlIGZyb20g
Q2hyb21pdW06IHNyYy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2VfdHJhbnNwb3J0X3N1cmZhY2Vf
bGludXguY2MKKyAgICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAg
IHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBUcnVlOworICAgIG1fcGFyZW50
V2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAgICAgICBSb290V2luZG93T2ZTY3Jl
ZW4oc2NyZWVuKSwKKyAgICAgICAgV2lkdGhPZlNjcmVlbihzY3JlZW4pICsgMSwgMCwgMSwgMSwK
KyAgICAgICAgMCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgIElucHV0T3V0cHV0
LAorICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgQ1dPdmVycmlkZVJlZGlyZWN0LAor
ICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX3Bh
cmVudFdpbmRvdyk7CisKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBTdHJ1Y3R1
cmVOb3RpZnlNYXNrOworICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBG
YWxzZTsKKyAgICBtX3dpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5k
b3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwKKyAgICAgICAgQ29weUZy
b21QYXJlbnQsIElucHV0T3V0cHV0LCBDb3B5RnJvbVBhcmVudCwgQ1dFdmVudE1hc2ssICZ3aW5k
b3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKKworICAg
IGlmIChnZXRXaW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgpKQorICAgICAgICBnZGtfd2luZG93X2Fk
ZF9maWx0ZXIoMCwgcmVpbnRlcnByZXRfY2FzdDxHZGtGaWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdl
RXZlbnQpLCAwKTsKKyAgICBnZXRXaW5kb3dIYXNoTWFwKCkuYWRkKG1fd2luZG93LCB0aGlzKTsK
KworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFhFdmVudCBldmVudDsKKyAgICAgICAgWFdpbmRv
d0V2ZW50KGRpc3BsYXksIG1fd2luZG93LCBTdHJ1Y3R1cmVOb3RpZnlNYXNrLCAmZXZlbnQpOwor
ICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBNYXBOb3RpZnkgJiYgZXZlbnQueG1hcC53aW5kb3cg
PT0gbV93aW5kb3cpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgWFNlbGVjdElucHV0
KGRpc3BsYXksIG1fd2luZG93LCBOb0V2ZW50TWFzayk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0
V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAg
bV9kYW1hZ2UgPSBYRGFtYWdlQ3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0
Tm9uRW1wdHkpOworfQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93KCkKK3sKKyAgICBBU1NFUlQobV9kYW1hZ2UpOworICAgIEFTU0VSVCht
X3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFyZW50V2luZG93KTsKKworICAgIGdldFdpbmRvd0hh
c2hNYXAoKS5yZW1vdmUobV93aW5kb3cpOworICAgIGlmIChnZXRXaW5kb3dIYXNoTWFwKCkuaXNF
bXB0eSgpKQorICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIoMCwgcmVpbnRlcnByZXRf
Y2FzdDxHZGtGaWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZlbnQpLCAwKTsKKworICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpKTsKKyAgICBYRGFtYWdlRGVzdHJveShkaXNwbGF5LCBtX2RhbWFnZSk7CisgICAgWERlc3Ry
b3lXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXks
IG1fcGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwor
fQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVko
Z2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBt
X3dpbmRvdywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIFhGbHVzaChkaXNw
bGF5KTsKKworICAgIGlmIChtX25lZWRzQ29udGV4dCA9PSBDcmVhdGVHTENvbnRleHQpIHsKKyAg
ICAgICAgY29udGV4dCgpLT53YWl0TmF0aXZlKCk7CisgICAgICAgIC8vIFRoaXMgc3dhcCBpcyBi
YXNlZCBvbiBjb2RlIGluIENocm9taXVtLiBJdCB0cmllcyB0byB3b3JrLWFyb3VuZCBhIGJ1ZyBp
biB0aGUgSW50ZWwgZHJpdmVycworICAgICAgICAvLyB3aGVyZSBhIHN3YXAgaXMgbmVjZXNzYXJ5
IHRvIGVuc3VyZSB0aGUgZnJvbnQgYW5kIGJhY2sgYnVmZmVycyBhcmUgcHJvcGVybHkgcmVzaXpl
ZC4KKyAgICAgICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6OmdldEN1cnJlbnQoKSkKKyAg
ICAgICAgICAgIGNvbnRleHQoKS0+c3dhcEJ1ZmZlcnMoKTsKKyAgICB9CisKKyAgICBtX3NpemUg
PSBzaXplOworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSA9IHRydWU7Cit9CisKK0dM
Q29udGV4dCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNvbnRleHQoKQoreworICAgIEFT
U0VSVChtX25lZWRzQ29udGV4dCA9PSBDcmVhdGVHTENvbnRleHQpOworCisgICAgaWYgKG1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKKworICAgIEFTU0VSVChtX3dp
bmRvdyk7CisgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93
KG1fd2luZG93LCBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOworICAgIHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNsZWFu
dXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCkKK3sKKyAgICBpZiAoIW1fcGl4bWFwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBYRnJlZVBpeG1hcChjYWlyb194bGliX3N1cmZhY2VfZ2V0X2Rpc3Bs
YXkobV9zdXJmYWNlLmdldCgpKSwgbV9waXhtYXApOworICAgIG1fcGl4bWFwID0gMDsKKyAgICBt
X3N1cmZhY2UgPSBudWxscHRyOworfQorCitjYWlyb19zdXJmYWNlX3QqIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7
CisgICAgaWYgKCFtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgJiYgbV9zdXJmYWNlKQorICAg
ICAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworCisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVy
UmVzaXplID0gZmFsc2U7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBuZXcgcGl4
bWFwIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBEaXNwbGF5IHBvaW50ZXIgYXMgdGhlIHRhcmdl
dAorICAgIC8vIHdpZGdldCBvciBlbHNlIGRyYXdpbmcgc3BlZWQgY2FuIGJlIDEwMHggc2xvd2Vy
LgorICAgIERpc3BsYXkqIG5ld1BpeG1hcERpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShn
dGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpOworICAgIFBpeG1hcCBuZXdQaXhtYXAgPSBY
Q29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdyk7Cisg
ICAgaWYgKCFuZXdQaXhtYXApIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZh
Y2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgWFdpbmRvd0F0dHJpYnV0ZXMg
d2luZG93QXR0cmlidXRlczsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKG5ld1BpeG1h
cERpc3BsYXksIG1fd2luZG93LCAmd2luZG93QXR0cmlidXRlcykpIHsKKyAgICAgICAgY2xlYW51
cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgWEZyZWVQaXhtYXAobmV3UGl4bWFw
RGlzcGxheSwgbmV3UGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3Vy
ZmFjZV9jcmVhdGUobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwLAorICAgICAgICB3aW5kb3dB
dHRyaWJ1dGVzLnZpc3VhbCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisg
ICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2lu
ZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8v
IG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJl
c2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4
bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQu
IFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAg
dG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJm
YWNlKSB7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdl
dCgpLCAxLCAxLCAxKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7
CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4
bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1f
c3VyZmFjZSA9IG5ld1N1cmZhY2U7CisKKyAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworfQor
Cit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJh
Y2soKQoreworICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQorICAgICAgICBtX2RhbWFn
ZU5vdGlmeUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc3Njg0MDRjZjUwZWNl
YWYxNmZhZDgxMzBkZjJlNjllYWYzMzk3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsxLDg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVm
aW5lICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisKKyNpZiBVU0UoR0xYKQorCisjaW5j
bHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0
ckNhaXJvLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgV2luZG93OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKK3R5cGVkZWYg
dm9pZCAoKkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2b2lkKik7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworcHVibGljOgorICAgIGVu
dW0gR0xDb250ZXh0TmVlZGVkIHsgQ3JlYXRlR0xDb250ZXh0LCBEb05vdENyZWF0ZUdMQ29udGV4
dCB9OworICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBj
cmVhdGUoY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCA9IENyZWF0ZUdMQ29udGV4dCk7
CisgICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKTsKKyAgICBjb25zdCBJ
bnRTaXplJiBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHJlc2l6ZShjb25z
dCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQoKTsKKyAgICBjYWly
b19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqKTsKKyAgICBXaW5k
b3cgd2luZG93SWQoKSB7IHJldHVybiBtX3dpbmRvdzsgfQorICAgIHZvaWQgY2FsbERhbWFnZU5v
dGlmeUNhbGxiYWNrKCk7CisKKyAgICB2b2lkIHNldERhbWFnZU5vdGlmeUNhbGxiYWNrKERhbWFn
ZU5vdGlmeUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgbV9k
YW1hZ2VOb3RpZnlDYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgICBtX2RhbWFnZU5vdGlmeURh
dGEgPSBkYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdyhjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0TmVlZGVkKTsKKyAgICB2b2lkIGNsZWFudXBQ
aXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBXaW5k
b3cgbV93aW5kb3c7CisgICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBtX3Bp
eG1hcDsKKyAgICBHTENvbnRleHROZWVkZWQgbV9uZWVkc0NvbnRleHQ7CisgICAgT3duUHRyPEdM
Q29udGV4dD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFj
ZTsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZDsKKyAgICBib29sIG1fbmVl
ZHNOZXdQaXhtYXBBZnRlclJlc2l6ZTsKKworICAgIERhbWFnZSBtX2RhbWFnZTsKKyAgICBEYW1h
Z2VOb3RpZnlDYWxsYmFjayBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrOworICAgIHZvaWQqIG1fZGFt
YWdlTm90aWZ5RGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShHTFgpCisKKyNlbmRpZiAvLyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjYmU4ZmM2ZWE4MmU5
OWNhZDI1ZDNmOTViMzA0NmI2YmJmMzYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcApAQCAtMCwwICsxLDczMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIkZpbGVM
aXN0LmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNpbmNsdWRlICJQYWludEluZm8u
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRv
ci5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNo
ZWV0cy5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKKyNp
bmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVGhpcyB3b3VsZCBiZSBhIHN0YXRpYyBtZXRob2QsIGV4Y2VwdCB0aGF0IGZvcndhcmQg
ZGVjbGFyaW5nIEdUeXBlIGlzIHRyaWNreSwgc2luY2UgaXRzCisvLyBkZWZpbml0aW9uIGRlcGVu
ZHMgb24gaW5jbHVkaW5nIGdsaWIuaCwgbmVnYXRpbmcgdGhlIGJlbmVmaXQgb2YgdXNpbmcgYSBm
b3J3YXJkIGRlY2xhcmF0aW9uLgorZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0lj
b25Gb3JXaWRnZXRUeXBlKEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rp
b24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCisjaWYgRU5BQkxFKFZJREVPKQorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1l
ZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQoreworICAgIE5vZGUq
IG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNo
YWRvd0hvc3QoKSA6IDA7CisgICAgaWYgKCFtZWRpYU5vZGUpCisgICAgICAgIG1lZGlhTm9kZSA9
IG5vZGU7CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgIW1lZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgp
IHx8ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obWVkaWFOb2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxl
bWVudCo+KG1lZGlhTm9kZSk7Cit9CisKK3N0YXRpYyBHdGtJY29uU2l6ZSBnZXRNZWRpYUJ1dHRv
bkljb25TaXplKGludCBtZWRpYUljb25TaXplKQoreworICAgIEd0a0ljb25TaXplIGljb25TaXpl
ID0gZ3RrX2ljb25fc2l6ZV9mcm9tX25hbWUoIndlYmtpdC1tZWRpYS1idXR0b24tc2l6ZSIpOwor
ICAgIGlmICghaWNvblNpemUpCisgICAgICAgIGljb25TaXplID0gZ3RrX2ljb25fc2l6ZV9yZWdp
c3Rlcigid2Via2l0LW1lZGlhLWJ1dHRvbi1zaXplIiwgbWVkaWFJY29uU2l6ZSwgbWVkaWFJY29u
U2l6ZSk7CisgICAgcmV0dXJuIGljb25TaXplOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpp
bml0TWVkaWFCdXR0b25zKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpY29uc0luaXRpYWxpemVkID0g
ZmFsc2U7CisKKyAgICBpZiAoaWNvbnNJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1JlZlB0cjxHdGtJY29uRmFjdG9yeT4gaWNvbkZhY3RvcnkgPSBhZG9wdEdSZWYoZ3RrX2lj
b25fZmFjdG9yeV9uZXcoKSk7CisgICAgR3RrSWNvblNvdXJjZSogaWNvblNvdXJjZSA9IGd0a19p
Y29uX3NvdXJjZV9uZXcoKTsKKyAgICBjb25zdCBjaGFyKiBpY29uc1tdID0geyAiYXVkaW8tdm9s
dW1lLWhpZ2giLCAiYXVkaW8tdm9sdW1lLW11dGVkIiB9OworCisgICAgZ3RrX2ljb25fZmFjdG9y
eV9hZGRfZGVmYXVsdChpY29uRmFjdG9yeS5nZXQoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IEdfTl9FTEVNRU5UUyhpY29ucyk7ICsraSkgeworICAgICAgICBndGtfaWNvbl9zb3Vy
Y2Vfc2V0X2ljb25fbmFtZShpY29uU291cmNlLCBpY29uc1tpXSk7CisgICAgICAgIEd0a0ljb25T
ZXQqIGljb25TZXQgPSBndGtfaWNvbl9zZXRfbmV3KCk7CisgICAgICAgIGd0a19pY29uX3NldF9h
ZGRfc291cmNlKGljb25TZXQsIGljb25Tb3VyY2UpOworICAgICAgICBndGtfaWNvbl9mYWN0b3J5
X2FkZChpY29uRmFjdG9yeS5nZXQoKSwgaWNvbnNbaV0sIGljb25TZXQpOworICAgICAgICBndGtf
aWNvbl9zZXRfdW5yZWYoaWNvblNldCk7CisgICAgfQorCisgICAgZ3RrX2ljb25fc291cmNlX2Zy
ZWUoaWNvblNvdXJjZSk7CisKKyAgICBpY29uc0luaXRpYWxpemVkID0gdHJ1ZTsKK30KKyNlbmRp
ZgorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lR3RrKCkpOworfQorCitQYXNzUmVm
UHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7
CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUoKS5s
ZWFrUmVmKCk7CisgICAgcmV0dXJuIHJ0OworfQorCitSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhl
bWVHdGsoKQorICAgIDogbV9wYW5lbENvbG9yKENvbG9yOjp3aGl0ZSkKKyAgICAsIG1fc2xpZGVy
Q29sb3IoQ29sb3I6OndoaXRlKQorICAgICwgbV9zbGlkZXJUaHVtYkNvbG9yKENvbG9yOjp3aGl0
ZSkKKyAgICAsIG1fbWVkaWFJY29uU2l6ZSgxNikKKyAgICAsIG1fbWVkaWFTbGlkZXJIZWlnaHQo
MTQpCisgICAgLCBtX21lZGlhU2xpZGVyVGh1bWJXaWR0aCgxMikKKyAgICAsIG1fbWVkaWFTbGlk
ZXJUaHVtYkhlaWdodCgxMikKK3sKKyAgICBwbGF0Zm9ybUluaXQoKTsKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgaW5pdE1lZGlhQnV0dG9ucygpOworI2Vu
ZGlmCit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5j
ZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2Fz
ZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBNZW51
bGlzdFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6Cisg
ICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFy
dDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBzdXBwb3J0c0Zv
Y3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzRW5hYmxlZChvKTsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBvc2l0
aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBpZiAoIW8tPmlzQm94KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFRoaXMgc3RyYXRlZ3kgaXMgcG9z
c2libHkgaW5jb3JyZWN0IGZvciB0aGUgR1RLKyBwb3J0LgorICAgIGlmIChvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0CisgICAgICAgIHx8IG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0
b1JlbmRlckJveChvKTsKKyAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhl
aWdodCgpIC0gMjsKKyAgICB9CisKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9z
aXRpb24obyk7Cit9CisKKy8vIFRoaXMgaXMgdXNlZCBpbiBSZW5kZXJUaGVtZUd0azIgYW5kIFJl
bmRlclRoZW1lR3RrMy4gTm9ybWFsbHksIGl0IHdvdWxkIGJlIGluCisvLyB0aGUgUmVuZGVyVGhl
bWVHdGsgaGVhZGVyIChwZXJoYXBzIGFzIGEgc3RhdGljIG1ldGhvZCksIGJ1dCB3ZSB3YW50IHRv
IGF2b2lkCisvLyBoYXZpbmcgdG8gaW5jbHVkZSBHVEsrIGhlYWRlcnMgb25seSBmb3IgdGhlIEd0
a1RleHREaXJlY3Rpb24gZW51bS4KK0d0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
IGNhc2UgUlRMOgorICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JUTDsKKyAgICBjYXNlIExU
UjoKKyAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9MVFI7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIEdUS19URVhUX0RJUl9OT05FOworICAgIH0KK30KKworc3RhdGljIEd0a1N0YXRl
VHlwZSBndGtJY29uU3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCkKK3sKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKKyAg
ICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBpZiAodGhlbWUtPmlzUHJl
c3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsKKyAg
ICBpZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICByZXR1cm4gR1RL
X1NUQVRFX1BSRUxJR0hUOworCisgICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFNvbWUg
bGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhl
aWdodC4KKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKKyAg
ICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8v
IFRoZSB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBpZ25v
cmUgbGluZSBoZWlnaHQuCisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCkpOworCisgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVu
ZGVyaW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCisgICAg
c3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkanVzdE1lbnVMaXN0
U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVudUxp
c3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRU
ZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3N0YXRp
YyB2b2lkIHBhaW50R2RrUGl4YnVmKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR2Rr
UGl4YnVmKiBpY29uLCBjb25zdCBJbnRSZWN0JiBpY29uUmVjdCkKK3sKKyAgICBJbnRTaXplIGlj
b25TaXplKGdka19waXhidWZfZ2V0X3dpZHRoKGljb24pLCBnZGtfcGl4YnVmX2dldF9oZWlnaHQo
aWNvbikpOworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBzY2FsZWRJY29uOworICAgIGlmIChpY29u
UmVjdC5zaXplKCkgIT0gaWNvblNpemUpIHsKKyAgICAgICAgLy8gV2UgY291bGQgdXNlIGNhaXJv
X3NjYWxlKCkgaGVyZSBidXQgY2Fpcm8vcGl4bWFuIGRvd25zY2FsZSBxdWFsaXR5IGlzIHF1aXRl
IGJhZC4KKyAgICAgICAgc2NhbGVkSWNvbiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX3NjYWxlX3Np
bXBsZShpY29uLCBpY29uUmVjdC53aWR0aCgpLCBpY29uUmVjdC5oZWlnaHQoKSwgR0RLX0lOVEVS
UF9CSUxJTkVBUikpOworICAgICAgICBpY29uID0gc2NhbGVkSWNvbi5nZXQoKTsKKyAgICB9CisK
KyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAg
IGNhaXJvX3NhdmUoY3IpOworICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgaWNv
biwgaWNvblJlY3QueCgpLCBpY29uUmVjdC55KCkpOworICAgIGNhaXJvX3BhaW50KGNyKTsKKyAg
ICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKworLy8gRGVmaW5lZCBpbiBHVEsrIChndGsvZ3RraWNv
bmZhY3RvcnkuYykKK3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplTWVudSA9IDE2Oworc3Rh
dGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVTbWFsbFRvb2xiYXIgPSAxODsKK3N0YXRpYyBjb25z
dCBnaW50IGd0a0ljb25TaXplQnV0dG9uID0gMjA7CitzdGF0aWMgY29uc3QgZ2ludCBndGtJY29u
U2l6ZUxhcmdlVG9vbGJhciA9IDI0Oworc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVEbmQg
PSAzMjsKK3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplRGlhbG9nID0gNDg7CisKK3N0YXRp
YyBHdGtJY29uU2l6ZSBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShnaW50IHBpeGVsU2l6ZSkKK3sK
KyAgICBpZiAocGl4ZWxTaXplIDwgZ3RrSWNvblNpemVTbWFsbFRvb2xiYXIpCisgICAgICAgIHJl
dHVybiBHVEtfSUNPTl9TSVpFX01FTlU7CisgICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6
ZVNtYWxsVG9vbGJhciAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUJ1dHRvbikKKyAgICAgICAg
cmV0dXJuIEdUS19JQ09OX1NJWkVfU01BTExfVE9PTEJBUjsKKyAgICBpZiAocGl4ZWxTaXplID49
IGd0a0ljb25TaXplQnV0dG9uICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplTGFyZ2VUb29sYmFy
KQorICAgICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9CVVRUT047CisgICAgaWYgKHBpeGVsU2l6
ZSA+PSBndGtJY29uU2l6ZUxhcmdlVG9vbGJhciAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZURu
ZCkKKyAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfTEFSR0VfVE9PTEJBUjsKKyAgICBpZiAo
cGl4ZWxTaXplID49IGd0a0ljb25TaXplRG5kICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplRGlh
bG9nKQorICAgICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9ETkQ7CisKKyAgICByZXR1cm4gR1RL
X0lDT05fU0laRV9ESUFMT0c7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
cmV0dXJuIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihvLCBpLCByZWN0KTsKK30K
Kworc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVuZGVyU3R5bGUqIHN0
eWxlKQoreworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRp
bmcoKTsKKworICAgIC8vIEdldCB0aGUgaWNvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUu
CisgICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaWYgKGZvbnRTaXpl
IDwgZ3RrSWNvblNpemVNZW51KSB7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZm9u
dFNpemUsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXpl
LCBGaXhlZCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGdpbnQgd2lkdGggPSAwLCBo
ZWlnaHQgPSAwOworICAgIGd0a19pY29uX3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxT
aXplKGZvbnRTaXplKSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwg
Rml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAoreworICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsK
K30KKworc3RhdGljIEludFJlY3QgY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxl
bWVudChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KKyAgICBOb2RlKiBp
bnB1dCA9IHJlbmRlck9iamVjdC0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7CisgICAgaWYgKCFpbnB1
dCkKKyAgICAgICAgaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIWlucHV0
LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAg
Ly8gSWYgcG9zc2libGUgY2VudGVyIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHJlY3QgdmVydGlj
YWxseSBpbiB0aGUgcGFyZW50IGlucHV0IGVsZW1lbnQuCisgICAgLy8gV2UgYWxzbyBhZGQgb25l
IHBpeGVsIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIHkgY29vcmRpbmF0ZSBpcyByb3VuZGVkIHVw
IGZvciBib3ggaGVpZ2h0cworICAgIC8vIHRoYXQgYXJlIGV2ZW4sIHdoaWNoIGxvb2tzIGluIHJl
bGF0aW9uIHRvIHRoZSBib3ggdGV4dC4KKyAgICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IHRv
UmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKS0+YWJzb2x1dGVDb250ZW50Qm94KCk7CisKKyAg
ICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2ls
bCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KKyAgICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihp
bnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgp
LCByZWN0LmhlaWdodCgpKSk7CisgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QueCgpLCBpbnB1
dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGljb25TaXplICsg
MSkgLyAyLCBpY29uU2l6ZSwgaWNvblNpemUpOworICAgIHJldHVybiBzY2FsZWRSZWN0OworfQor
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0
VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CisgICAg
aWYgKGljb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1Jl
ZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBF
X0VOVFJZLCBHVEtfU1RPQ0tfRklORCwKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJP
YmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwKKyAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMs
IHJlbmRlck9iamVjdCksIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVpZ2h0KCkpKTsK
KyAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJl
Y3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHls
ZShzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3QgaWNvblJlY3QgPSBj
ZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVj
dCk7CisgICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBl
KEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIsCisgICAgICAgIGd0a1RleHREaXJlY3Rp
b24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisgICAgICAgIGd0a0ljb25T
dGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0Lmhl
aWdodCgpKSk7CisgICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0
KCksIGljb25SZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIg
cmVuZGVyaW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCisg
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQo
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworfQorCitib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBp
LCByZWN0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDYXBzTG9ja0luZGljYXRv
cihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMg
ZG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2Ug
UmVuZGVyVGhlbWUgYWxyZWFkeSBjaGVja3MgaXQKKyAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVt
LCBidXQgcGFpbnRDYXBzTG9ja0luZGljYXRvcigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUgd2hpY2ggZG9lc24ndCBjaGVjayBpdC4KKyAgICBpZiAocGFpbnRJbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
ICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShH
VEtfVFlQRV9FTlRSWSwgR1RLX1NUT0NLX0NBUFNfTE9DS19XQVJOSU5HLAorICAgICAgICBndGtU
ZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLCAwLCBnZXRJ
Y29uU2l6ZUZvclBpeGVsU2l6ZShpY29uU2l6ZSkpOworCisgICAgLy8gT25seSByZS1zY2FsZSB0
aGUgaWNvbiB3aGVuIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGljb24gc2l6ZS4KKyAg
ICBpZiAoaWNvblNpemUgPj0gZ3RrSWNvblNpemVNZW51KQorICAgICAgICBpY29uU2l6ZSA9IGdk
a19waXhidWZfZ2V0X2hlaWdodChpY29uLmdldCgpKTsKKworICAgIC8vIEdUSysgbG9jYXRlcyB0
aGUgaWNvbiByaWdodCBhbGlnbmVkIGluIHRoZSBlbnRyeS4gVGhlIGdpdmVuIHJlY3RhbmdsZSBp
cyBhbHJlYWR5CisgICAgLy8gY2VudGVyZWQgdmVydGljYWxseSBieSBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuCisgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgo
KSAtIGljb25TaXplLAorICAgICAgICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaWNvblNp
emUpIC8gMiwgaWNvblNpemUsIGljb25TaXplKTsKKyAgICBwYWludEdka1BpeGJ1ZihwYWludElu
Zm8uY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6
OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdz
ID0gZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7CisKKyAgICBnYm9vbGVhbiBzaG91bGRCbGlu
azsKKyAgICBnaW50IHRpbWU7CisKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstY3Vy
c29yLWJsaW5rIiwgJnNob3VsZEJsaW5rLCAiZ3RrLWN1cnNvci1ibGluay10aW1lIiwgJnRpbWUs
IE5VTEwpOworCisgICAgaWYgKCFzaG91bGRCbGluaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gdGltZSAvIDIwMDAuOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmdldFNj
cmVlbkRQSSgpCit7CisgICAgLy8gRklYTUU6IFJlYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgd2lk
Z2V0J3Mgc2NyZWVuLgorICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVm
YXVsdCgpOworICAgIGlmICghc2NyZWVuKQorICAgICAgICByZXR1cm4gOTY7IC8vIERlZmF1bHQg
dG8gOTYgRFBJLgorCisgICAgZmxvYXQgZHBpID0gZ2RrX3NjcmVlbl9nZXRfcmVzb2x1dGlvbihz
Y3JlZW4pOworICAgIGlmIChkcGkgPD0gMCkKKyAgICAgICAgcmV0dXJuIDk2OworICAgIHJldHVy
biBkcGk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUZvbnQoaW50LCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBHdGtTZXR0aW5ncyogc2V0
dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNldHRpbmdzKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBmb250IHNlbGVjdGlvbiBz
dHJpbmcgbGlrZSAiU2FucyAxMCIgc28gd2UgY2Fubm90IHVzZSBpdCBhcyB0aGUgZmFtaWx5IG5h
bWUuCisgICAgR093blB0cjxnY2hhcj4gZm9udE5hbWU7CisgICAgZ19vYmplY3RfZ2V0KHNldHRp
bmdzLCAiZ3RrLWZvbnQtbmFtZSIsICZmb250TmFtZS5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICBQ
YW5nb0ZvbnREZXNjcmlwdGlvbiogcGFuZ29EZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fZnJvbV9zdHJpbmcoZm9udE5hbWUuZ2V0KCkpOworICAgIGlmICghcGFuZ29EZXNjcmlw
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkuc2V0RmFtaWx5KHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShwYW5nb0Rlc2Ny
aXB0aW9uKSk7CisKKyAgICBpbnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3Np
emUocGFuZ29EZXNjcmlwdGlvbikgLyBQQU5HT19TQ0FMRTsKKyAgICAvLyBJZiB0aGUgc2l6ZSBv
ZiB0aGUgZm9udCBpcyBpbiBwb2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMu
CisgICAgaWYgKCFwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29sdXRlKHBh
bmdvRGVzY3JpcHRpb24pKQorICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5EUEkoKSAv
IDcyLjApOworCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9m
cmVlKHBhbmdvRGVzY3JpcHRpb24pOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9y
bUNvbG9yc0RpZENoYW5nZSgpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIGluaXRNZWRpYUNv
bG9ycygpOworI2VuZGlmCisgICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitTdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJh
TWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250
cm9sc0d0a1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzR3RrVXNlckFn
ZW50U3R5bGVTaGVldCkpOworfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorU3RyaW5n
IFJlbmRlclRoZW1lR3RrOjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEFTU0VS
VChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsKKyAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKG1fbWVkaWFTbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1fbWVkaWFTbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQp
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBjaGFyKiBpY29uTmFtZSkKK3sKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
aWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfQ09OVEFJTkVSLCBpY29u
TmFtZSwKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRp
cmVjdGlvbigpKSwKKyAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGdl
dE1lZGlhQnV0dG9uSWNvblNpemUobV9tZWRpYUljb25TaXplKSk7CisgICAgSW50UmVjdCBpY29u
UmVjdChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKKyAg
ICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAor
ICAgICAgICBtX21lZGlhSWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgY29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6Omhhc093bkRpc2Fi
bGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAoreworICAgIHJldHVy
biAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3Qo
cmVuZGVyT2JqZWN0KTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludElu
Zm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gImF1ZGlvLXZvbHVtZS1t
dXRlZCIgOiAiYXVkaW8tdm9sdW1lLWhpZ2giKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIE5vZGUqIG5v
ZGUgPSByZW5kZXJPYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIW5vZGUtPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmpl
Y3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2Rl
KSA9PSBNZWRpYVBsYXlCdXR0b24gPyBHVEtfU1RPQ0tfTUVESUFfUExBWSA6IEdUS19TVE9DS19N
RURJQV9QQVVTRSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrQmFj
a0J1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0
b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgR1RLX1NUT0NLX01FRElB
X1JFV0lORCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0
b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgR1RLX1NUT0NLX01FRElB
X0ZPUldBUkQpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29u
dGV4dDsKKworICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyKSwgbV9wYW5lbENvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3Qo
SW50UmVjdChyLngoKSwgci55KCkgKyAoci5oZWlnaHQoKSAtIG1fbWVkaWFTbGlkZXJIZWlnaHQp
IC8gMiwKKyAgICAgICAgci53aWR0aCgpLCBtX21lZGlhU2xpZGVySGVpZ2h0KSksIG1fc2xpZGVy
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
by0+c3R5bGUoKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVu
dE1lZGlhRWxlbWVudChvKTsKKworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBEcmF3IHRoZSBidWZmZXJlZCByYW5nZXMuIFRoaXMgY29kZSBp
cyBoaWdobHkgaW5zcGlyZWQgZnJvbQorICAgIC8vIENocm9tZSBmb3IgdGhlIGdyYWRpZW50IGNv
ZGUuCisgICAgZmxvYXQgbWVkaWFEdXJhdGlvbiA9IG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsK
KyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IG1lZGlhRWxlbWVudC0+YnVmZmVy
ZWQoKTsKKyAgICBJbnRSZWN0IHRyYWNrUmVjdCA9IHI7CisgICAgaW50IHRvdGFsV2lkdGggPSB0
cmFja1JlY3Qud2lkdGgoKTsKKworICAgIHRyYWNrUmVjdC5pbmZsYXRlKC1zdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCkpOworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShOb1N0cm9rZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCB0aW1lUmFuZ2VzLT5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAgICBmbG9hdCBzdGFydCA9
IHRpbWVSYW5nZXMtPnN0YXJ0KGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZmxv
YXQgZW5kID0gdGltZVJhbmdlcy0+ZW5kKGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgaW50IHdpZHRoID0gKChlbmQgLSBzdGFydCkgKiB0b3RhbFdpZHRoKSAvIG1lZGlhRHVyYXRp
b247CisgICAgICAgIEludFJlY3QgcmFuZ2VSZWN0OworICAgICAgICBpZiAoIWluZGV4KSB7Cisg
ICAgICAgICAgICByYW5nZVJlY3QgPSB0cmFja1JlY3Q7CisgICAgICAgICAgICByYW5nZVJlY3Qu
c2V0V2lkdGgod2lkdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2VSZWN0
LnNldExvY2F0aW9uKEludFBvaW50KHRyYWNrUmVjdC54KCkgKyBzdGFydCAvIG1lZGlhRHVyYXRp
b24qIHRvdGFsV2lkdGgsIHRyYWNrUmVjdC55KCkpKTsKKyAgICAgICAgICAgIHJhbmdlUmVjdC5z
ZXRTaXplKEludFNpemUod2lkdGgsIHRyYWNrUmVjdC5oZWlnaHQoKSkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRG9uJ3QgYm90aGVyIGRyYXdpbmcgZW1wdHkgcmFuZ2UuCisgICAgICAgIGlm
IChyYW5nZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
SW50UG9pbnQgc2xpZGVyVG9wTGVmdCA9IHJhbmdlUmVjdC5sb2NhdGlvbigpOworICAgICAgICBJ
bnRQb2ludCBzbGlkZXJUb3BSaWdodCA9IHNsaWRlclRvcExlZnQ7CisgICAgICAgIHNsaWRlclRv
cFJpZ2h0Lm1vdmUoMCwgcmFuZ2VSZWN0LmhlaWdodCgpKTsKKworICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShzbGlkZXJUb3BMZWZ0LCBzbGlkZXJU
b3BSaWdodCk7CisgICAgICAgIENvbG9yIHN0YXJ0Q29sb3IgPSBtX3BhbmVsQ29sb3I7CisgICAg
ICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBzdGFydENvbG9yKTsKKyAgICAgICAgZ3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFy
dENvbG9yLmdyZWVuKCkgLyAyLCBzdGFydENvbG9yLmJsdWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxw
aGEoKSkpOworCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7Cisg
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHJhbmdlUmVjdCk7CisgICAgfQorCisgICAgY29udGV4
dC0+cmVzdG9yZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgLy8gTWFrZSB0aGUgdGh1bWIg
bmljZXIgd2l0aCByb3VuZGVkIGNvcm5lcnMuCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxS
b3VuZGVkUmVjdChyLCBJbnRTaXplKDMsIDMpLCBJbnRTaXplKDMsIDMpLCBJbnRTaXplKDMsIDMp
LCBJbnRTaXplKDMsIDMpLCBtX3NsaWRlclRodW1iQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQgPSBwYWludEluZm8uY29udGV4dDsKKyAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJl
Y3QocmVjdCksIG1fcGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludFNsaWRlclRyYWNr
KHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICByZXR1cm4gcGFpbnRTbGlkZXJUaHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUd0azo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRU
aW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1
cm4gZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRN
ZWRpYUNvbnRyb2xzVGltZShkdXJhdGlvbik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisKKyAgICBjb250ZXh0LT5maWxs
UmVjdChGbG9hdFJlY3QocmVjdCksIG1fcGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxF
TUVOVCkKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5
bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKK30KKworLy8gVGhlc2UgdmFsdWVzIGhhdmUgYmVl
biBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKK3N0YXRpYyBjb25zdCBp
bnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7CitzdGF0aWMgY29uc3QgaW50IHByb2dyZXNz
QW5pbWF0aW9uRnJhbWVzID0gMTA7CitzdGF0aWMgY29uc3QgZG91YmxlIHByb2dyZXNzQW5pbWF0
aW9uSW50ZXJ2YWwgPSAwLjEyNTsKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Cit7CisgICAg
cmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK2RvdWJsZSBSZW5kZXJUaGVt
ZUd0azo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgKiBwcm9ncmVzc0Fu
aW1hdGlvbkZyYW1lcyAqIDI7IC8vICIyIiBmb3IgYmFjayBhbmQgZm9ydGg7Cit9CisKK0ludFJl
Y3QgUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgZnVsbEJhclJlY3QpCit7CisgICAgSW50UmVjdCBw
cm9ncmVzc1JlY3QoZnVsbEJhclJlY3QpOworICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9n
cmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAocmVuZGVyUHJv
Z3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgeworICAgICAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHBy
b2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CisgICAgICAg
IGlmIChyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAg
ICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyBwcm9ncmVzc1JlY3Qud2lk
dGgoKSAtIHByb2dyZXNzV2lkdGgpOworICAgICAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgocHJv
Z3Jlc3NXaWR0aCk7CisgICAgICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7CisgICAgfQorCisgICAg
ZG91YmxlIGFuaW1hdGlvblByb2dyZXNzID0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dy
ZXNzKCk7CisKKyAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dyZXNzIHJlY3Qgc2hyaW5rIHNtYWxs
ZXIgdGhhbiAyIHBpeGVscy4KKyAgICBpbnQgbmV3V2lkdGggPSBtYXgoMiwgcHJvZ3Jlc3NSZWN0
LndpZHRoKCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzKTsKKyAgICBpbnQgbW92YWJsZVdpZHRo
ID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBuZXdXaWR0aDsKKyAgICBwcm9ncmVzc1JlY3Quc2V0
V2lkdGgobmV3V2lkdGgpOworCisgICAgLy8gV2Ugd2FudCB0aGUgZmlyc3QgMC41IHVuaXRzIG9m
IHRoZSBhbmltYXRpb24gcHJvZ3Jlc3MgdG8gcmVwcmVzZW50IHRoZQorICAgIC8vIGZvcndhcmQg
bW90aW9uIGFuZCB0aGUgc2Vjb25kIDAuNSB1bml0cyB0byByZXByZXNlbnQgdGhlIGJhY2t3YXJk
IG1vdGlvbiwKKyAgICAvLyB0aHVzIHdlIG11bHRpcGx5IGJ5IHR3byBoZXJlIHRvIGdldCB0aGUg
ZnVsbCBzd2VlcCBvZiB0aGUgcHJvZ3Jlc3MgYmFyIHdpdGgKKyAgICAvLyBlYWNoIGRpcmVjdGlv
bi4KKyAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPCAwLjUpCisgICAgICAgIHByb2dyZXNzUmVj
dC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoYW5pbWF0aW9uUHJvZ3Jlc3MgKiAyICogbW92YWJs
ZVdpZHRoKSk7CisgICAgZWxzZQorICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1Jl
Y3QueCgpICsgKCgxLjAgLSBhbmltYXRpb25Qcm9ncmVzcykgKiAyICogbW92YWJsZVdpZHRoKSk7
CisgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKK30KKyNlbmRpZgorCitTdHJpbmcgUmVuZGVyVGhl
bWVHdGs6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29u
c3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25z
dAoreworICAgIGlmICh3aWR0aCA8PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBpZiAoZmlsZUxpc3QtPmxlbmd0aCgpID4gMSkKKyAgICAgICAgcmV0dXJuIFN0cmluZ1RydW5j
YXRvcjo6cmlnaHRUcnVuY2F0ZShtdWx0aXBsZUZpbGVVcGxvYWRUZXh0KGZpbGVMaXN0LT5sZW5n
dGgoKSksIHdpZHRoLCBmb250LCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3Mp
OworCisgICAgU3RyaW5nIHN0cmluZzsKKyAgICBpZiAoZmlsZUxpc3QtPmxlbmd0aCgpKQorICAg
ICAgICBzdHJpbmcgPSBwYXRoR2V0RmlsZU5hbWUoZmlsZUxpc3QtPml0ZW0oMCktPnBhdGgoKSk7
CisgICAgZWxzZSBpZiAobXVsdGlwbGVGaWxlc0FsbG93ZWQpCisgICAgICAgIHN0cmluZyA9IGZp
bGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5n
ID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKKworICAgIHJldHVybiBTdHJpbmdU
cnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKHN0cmluZywgd2lkdGgsIGZvbnQsIFN0cmluZ1RydW5j
YXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7Cit9CisKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxF
TUVOVCkKK0ludFNpemUgUmVuZGVyVGhlbWVHdGs6OnNsaWRlclRpY2tTaXplKCkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBzZXQgdGhpcyB0byB0aGUgc2l6ZSBvZiBvbmUgdGlj
ayBtYXJrLgorICAgIHJldHVybiBJbnRTaXplKDAsIDApOworfQorCitpbnQgUmVuZGVyVGhlbWVH
dGs6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIHNldCB0aGlzIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGljayBtYXJr
cy4KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDcyNWJiYjg4YmZkODc2NGQxYjM0MGE4ZWI4NTRkYzE5ZWE3
Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuaApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBSZW5kZXJUaGVtZUd0a19oCisjZGVmaW5lIFJlbmRlclRoZW1lR3RrX2gKKworI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
Cit0eXBlZGVmIHN0cnVjdCBfR2RrQ29sb3JtYXAgR2RrQ29sb3JtYXA7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVGhlbWVHdGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewor
cHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZUd0aygpOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1l
R3RrKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3Jl
YXRlKCk7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMg
YWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxl
IHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNS
aW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcg
aWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3Vz
IG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBh
bnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3Qm
KTsKKworICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9y
IGEgImxlYWYiIGNvbnRyb2wuIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQor
ICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBj
b250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgorICAg
IC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgorICAgIHZpcnR1YWwgaW50IGJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICAvLyBUaGUgcGxh
dGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKKyAgICB2aXJ0dWFs
IENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9yc0Rp
ZENoYW5nZSgpOworCisgICAgLy8gU3lzdGVtIGZvbnRzIGFuZCBjb2xvcnMuCisgICAgdmlydHVh
bCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Cisg
ICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiB0cnVlOyB9CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcg
ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1h
dE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRp
b24pIGNvbnN0OworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZpcnR1YWwgU3Ry
aW5nIGV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKKyAgICAvLyBSZXR1cm5zIHNpemUgb2Ygb25lIHNsaWRl
ciB0aWNrIG1hcmsgZm9yIGEgaG9yaXpvbnRhbCB0cmFjay4KKyAgICAvLyBGb3IgdmVydGljYWwg
dHJhY2tzIHdlIHJvdGF0ZSBpdCBhbmQgdXNlIGl0LiBpLmUuIFdpZHRoIGlzIGFsd2F5cyBsZW5n
dGggYWxvbmcgdGhlIHRyYWNrLgorICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgp
IGNvbnN0OworICAgIC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIG9mIHNsaWRlciB0aWNrIG9yaWdp
biBmcm9tIHRoZSBzbGlkZXIgdHJhY2sgY2VudGVyLgorICAgIHZpcnR1YWwgaW50IHNsaWRlclRp
Y2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdDsKKyNlbmRpZgorCisjaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKyAgICBHdGtXaWRnZXQqIGd0a0NvbnRhaW5lcigpIGNvbnN0OworICAgIEd0
a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1ZTY3JvbGxiYXIo
KSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0hTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBzdGF0
aWMgdm9pZCBnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNp
emUsIGludCYgaW5kaWNhdG9yU3BhY2luZyk7CisjZWxzZQorICAgIEd0a1N0eWxlQ29udGV4dCog
Z3RrU2Nyb2xsYmFyU3R5bGUoKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBi
b29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFk
aW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJT
dHlsZSopIGNvbnN0OworCisgICAgLy8gVGhlIE1hYyBwb3J0IGRpZmZlcmVudGlhdGVzIGJldHdl
ZW4gdGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBidXR0b24uIgorICAgIC8vIFRo
ZSBmb3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRvbiBoYXMgYmVlbiBzdHlsZWQu
IFRoaXMgaXMgdXNlZCB0byBlbnN1cmUKKyAgICAvLyBBcXVhIHRoZW1lZCBjb250cm9scyB3aGVu
ZXZlciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdUSysgdGhlbWluZywgc28KKyAg
ICAvLyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlhdGlvbi4KKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAg
dm9pZCBpbml0TWVkaWFCdXR0b25zKCk7CisgICAgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxl
ZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vl
a0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1
bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRv
cihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludElu
bmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lk
dGgoY29uc3QgRmlsZUxpc3QqLCBjb25zdCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxl
RmlsZXNBbGxvd2VkKSBjb25zdCBPVkVSUklERTsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7
CisgICAgc3RhdGljIHZvaWQgc2V0VGV4dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSopOworICAg
IHN0YXRpYyBkb3VibGUgZ2V0U2NyZWVuRFBJKCk7CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
Ym9vbCBwYWludE1lZGlhQnV0dG9uKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBjaGFyKiBpY29uTmFtZSk7CisjZW5kaWYKKworI2lmIEVOQUJM
RShQUk9HUkVTU19FTEVNRU5UKQorICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNz
UmVjdChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIG11dGFi
bGUgQ29sb3IgbV9wYW5lbENvbG9yOworICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJDb2xvcjsK
KyAgICBtdXRhYmxlIENvbG9yIG1fc2xpZGVyVGh1bWJDb2xvcjsKKyAgICBjb25zdCBpbnQgbV9t
ZWRpYUljb25TaXplOworICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVpZ2h0OworICAgIGNv
bnN0IGludCBtX21lZGlhU2xpZGVyVGh1bWJXaWR0aDsKKyAgICBjb25zdCBpbnQgbV9tZWRpYVNs
aWRlclRodW1iSGVpZ2h0OworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICB2b2lkIHNl
dHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiwgR3RrV2lkZ2V0KikgY29uc3Q7
CisgICAgdm9pZCByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0OworICAgIHZvaWQgZ2V0
Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiBy
aWdodCwgaW50JiBib3R0b20pIGNvbnN0OworICAgIGludCBnZXRDb21ib0JveFNlcGFyYXRvcldp
ZHRoKCkgY29uc3Q7CisgICAgaW50IGNvbWJvQm94QXJyb3dTaXplKFJlbmRlclN0eWxlKikgY29u
c3Q7CisKKyAgICBHdGtXaWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0OworICAgIEd0a1dpZGdldCog
Z3RrVHJlZVZpZXcoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1ZTY2FsZSgpIGNvbnN0Owor
ICAgIEd0a1dpZGdldCogZ3RrSFNjYWxlKCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtSYWRp
b0J1dHRvbigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ2hlY2tCdXR0b24oKSBjb25zdDsK
KyAgICBHdGtXaWRnZXQqIGd0a1Byb2dyZXNzQmFyKCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBn
dGtDb21ib0JveCgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ29tYm9Cb3hCdXR0b24oKSBj
b25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94QXJyb3coKSBjb25zdDsKKyAgICBHdGtX
aWRnZXQqIGd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtT
cGluQnV0dG9uKCkgY29uc3Q7CisKKyAgICBHZGtDb2xvcm1hcCogbV9jb2xvcm1hcDsKKyAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1f
Z3RrQ29udGFpbmVyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0J1dHRvbjsKKyAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtFbnRyeTsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtUcmVlVmlldzsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtWU2NhbGU7CisgICAgbXV0
YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNjYWxlOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a1JhZGlvQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NoZWNrQnV0dG9uOwor
ICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1Byb2dyZXNzQmFyOworICAgIG11dGFibGUgR3Rr
V2lkZ2V0KiBtX2d0a0NvbWJvQm94OworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJv
Qm94QnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94QXJyb3c7Cisg
ICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3I7CisgICAgbXV0YWJs
ZSBHdGtXaWRnZXQqIG1fZ3RrVlNjcm9sbGJhcjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtIU2Nyb2xsYmFyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1NwaW5CdXR0b247Cisg
ICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworICAgIGZyaWVuZCBjbGFzcyBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0OworI2VuZGlmCit9OworCit9CisKKyNlbmRpZiAvLyBSZW5k
ZXJUaGVtZUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDE3ZmU3MmNhOWRmMmRkNWJlMDg2MmUwMGE0M2QxN2M5ZThmZTJlMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcApAQCAtMCww
ICsxLDk2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorCisjaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKKworLy8gV2UgbmVlZCB0aGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdo
aWxlIHVzaW5nIEdUS19XSURHRVRfU0VUX0ZMQUdTLiBJdCdzIGRlcHJlY2F0ZWQKKy8vIGJ1dCBz
b21lIHRoZW1lIGVuZ2luZXMgcmVxdWlyZSBpdCB0byBlbnN1cmUgcHJvcGVyIHJlbmRlcmluZyBv
ZiBmb2N1cyBpbmRpY2F0b3JzLgorI3VuZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKworI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCisjaW5jbHVk
ZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiVGV4
dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVk
ZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0aGUg
ZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1J
Tl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCitzdGF0aWMgY29uc3QgaW50IG1pblNw
aW5CdXR0b25BcnJvd1NpemUgPSA2OworCisvLyBUaGlzIGlzIG5vdCBhIHN0YXRpYyBtZXRob2Qs
IGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RLKyBoZWFkZXJzIGluIFJlbmRlclRo
ZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHRE
aXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluaXQoKQoreworICAg
IG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSB0cnVlOworICAgIG1fZ3RrV2luZG93ID0g
MDsKKyAgICBtX2d0a0NvbnRhaW5lciA9IDA7CisgICAgbV9ndGtCdXR0b24gPSAwOworICAgIG1f
Z3RrRW50cnkgPSAwOworICAgIG1fZ3RrVHJlZVZpZXcgPSAwOworICAgIG1fZ3RrVlNjYWxlID0g
MDsKKyAgICBtX2d0a0hTY2FsZSA9IDA7CisgICAgbV9ndGtSYWRpb0J1dHRvbiA9IDA7CisgICAg
bV9ndGtDaGVja0J1dHRvbiA9IDA7CisgICAgbV9ndGtQcm9ncmVzc0JhciA9IDA7CisgICAgbV9n
dGtDb21ib0JveCA9IDA7CisgICAgbV9ndGtDb21ib0JveEJ1dHRvbiA9IDA7CisgICAgbV9ndGtD
b21ib0JveEFycm93ID0gMDsKKyAgICBtX2d0a0NvbWJvQm94U2VwYXJhdG9yID0gMDsKKyAgICBt
X2d0a1ZTY3JvbGxiYXIgPSAwOworICAgIG1fZ3RrSFNjcm9sbGJhciA9IDA7CisgICAgbV9ndGtT
cGluQnV0dG9uID0gMDsKKworICAgIG1fY29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX2Nv
bG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgaWYgKCFtX2NvbG9ybWFwKSB7
CisgICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBmYWxzZTsKKyAgICAgICAg
bV9jb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRfY29sb3JtYXAoZ2RrX3NjcmVlbl9n
ZXRfZGVmYXVsdCgpKTsKKyAgICB9Cit9CisKK1JlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVH
dGsoKQoreworICAgIGlmIChtX2d0a1dpbmRvdykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KG1fZ3RrV2luZG93KTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmluaXRNZWRpYUNvbG9ycygpCit7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdl
dF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250YWluZXIoKSkpOworICAgIG1fcGFuZWxDb2xv
ciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXTsKKyAgICBtX3NsaWRlckNvbG9yID0gc3R5
bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVdOworICAgIG1fc2xpZGVyVGh1bWJDb2xvciA9IHN0eWxl
LT5iZ1tHVEtfU1RBVEVfU0VMRUNURURdOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFkanVz
dFJlY3RGb3JGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgSW50UmVjdCYgcmVjdCwgYm9vbCBpZ25v
cmVJbnRlcmlvckZvY3VzUHJvcGVydHkgPSBmYWxzZSkKK3sKKyAgICBnaW50IGZvY3VzV2lkdGgs
IGZvY3VzUGFkOworICAgIGdib29sZWFuIGludGVyaW9yRm9jdXMgPSAwOworICAgIGd0a193aWRn
ZXRfc3R5bGVfZ2V0KHdpZGdldCwKKyAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9y
Rm9jdXMsCisgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAg
ICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCAwKTsKKyAgICBpZiAoIWlnbm9yZUludGVyaW9y
Rm9jdXNQcm9wZXJ0eSAmJiBpbnRlcmlvckZvY3VzKQorICAgICAgICByZXR1cm47CisgICAgcmVj
dC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBJ
bnRSZWN0JiByZWN0KQoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0
eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICBjYXNlIENoZWNr
Ym94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICAvLyBXZSBpZ25vcmUgdGhl
IGludGVyaW9yIGZvY3VzIHByb3BlcnR5IGFuZCBhbHdheXMgZXhwYW5kIHRoZSBmb2N1cyByZWN0
LiBJbiBHVEsrLCB0aGUKKyAgICAgICAgLy8gZm9jdXMgaW5kaWNhdG9yIGlzIHVzdWFsbHkgb24g
dGhlIHRleHQgbmV4dCB0byBhIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbiwgYnV0IHRoYXQgZG9l
c24ndAorICAgICAgICAvLyBoYXBwZW4gaW4gV2ViQ29yZS4gQnkgZXhwYW5kaW5nIHRoZSBmb2N1
cyByZWN0YW5nbGUgdW5jb25kaXRpb25hbGx5IHdlIGluY3JlYXNlIGl0cyBwcm9taW5lbmNlLgor
ICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMocGFydCA9PSBDaGVja2JveFBhcnQgPyBndGtDaGVj
a0J1dHRvbigpIDogZ3RrUmFkaW9CdXR0b24oKSwgcmVjdCwgdHJ1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgorICAgICAgICAvLyBTZWUg
cGFpbnRJbm5lclNwaW5CdXR0b24gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB3ZSBleHBhbmQg
dGhlIHBhaW50aW5nIHJlY3QuCisgICAgICAgIHJlY3QuaW5mbGF0ZVkoMik7CisgICAgICAgIHJl
Y3Quc2V0V2lkdGgocmVjdC53aWR0aCgpICsgMik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworc3RhdGljIEd0a1N0YXRlVHlwZSBnZXRHdGtTdGF0ZVR5cGUoUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIXRo
ZW1lLT5pc0VuYWJsZWQob2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wob2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBpZiAodGhlbWUt
PmlzUHJlc3NlZChvYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsKKyAg
ICBpZiAodGhlbWUtPmlzSG92ZXJlZChvYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRF
X1BSRUxJR0hUOworICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOworfQorCitzdGF0aWMgdm9p
ZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KKyAgICBp
ZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQo
KS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2ludCBpbmRpY2F0b3JTaXplOwor
ICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwgImluZGljYXRvci1zaXplIiwgJmluZGlj
YXRvclNpemUsIE5VTEwpOworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVk
KSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKK30KKworc3RhdGljIHZvaWQg
cGFpbnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCkKK3sKKyAgICAvLyBXZSBkbyBub3QgY2FsbCBndGtfdG9nZ2xlX2J1dHRvbl9z
ZXRfYWN0aXZlIGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVtZXMgYmVnaW4gYSBzZXJpZXMgb2YKKyAg
ICAvLyBhbmltYXRpb24gZnJhbWVzIGluIGEgInRvZ2dsZWQiIHNpZ25hbCBoYW5kbGVyLiBUaGlz
IHB1dHMgc29tZSBjaGVja2JveGVzIGluIGEgaGFsZi13YXkKKyAgICAvLyBjaGVja2VkIHN0YXRl
LiBFdmVyeSBHVEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVseSBsb29rcyBhdCB0aGUgc2hhZG93IHR5
cGUgKGFuZCBub3QgdGhlCisgICAgLy8gJ2FjdGl2ZScgcHJvcGVydHkpIHRvIGRldGVybWluZSB3
aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBjaGVjay4KKyAgICBndGtfd2lkZ2V0X3NldF9zZW5z
aXRpdmUod2lkZ2V0LCB0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYgIXRoZW1lLT5p
c1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJl
Y3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkpKTsKKworICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9IHRoZW1lLT5pc0luZGV0ZXJt
aW5hdGUocmVuZGVyT2JqZWN0KTsKKyAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfaW5jb25zaXN0
ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGluZGV0ZXJtaW5hdGUpOworCisgICAgR3Rr
U2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19PVVQ7CisgICAgaWYgKGluZGV0ZXJt
aW5hdGUpIC8vIFRoaXMgb3JpZ2luYXRlcyBmcm9tIHRoZSBNb3ppbGxhIGNvZGUuCisgICAgICAg
IHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hFRF9JTjsKKyAgICBlbHNlIGlmICh0aGVtZS0+
aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9X
X0lOOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29u
dGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6
ZSgpKTsKKyAgICBHdGtTdGF0ZVR5cGUgdG9nZ2xlU3RhdGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhl
bWUsIHJlbmRlck9iamVjdCk7CisgICAgY29uc3QgY2hhciogZGV0YWlsID0gMDsKKyAgICBpZiAo
R1RLX0lTX1JBRElPX0JVVFRPTih3aWRnZXQpKSB7CisgICAgICAgIGRldGFpbCA9ICJyYWRpb2J1
dHRvbiI7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRPcHRpb24oYnV0dG9uUmVjdCwg
d2lkZ2V0LCB0b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkZXRhaWwgPSAiY2hlY2tidXR0b24iOworICAgICAgICB3aWRnZXRDb250ZXh0Lmd0
a1BhaW50Q2hlY2soYnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwg
ZGV0YWlsKTsKKyAgICB9CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
KSB7CisgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KGJ1dHRvblJlY3QpOworICAgICAgICBhZGp1
c3RSZWN0Rm9yRm9jdXMod2lkZ2V0LCBmb2N1c1JlY3QsIHRydWUpOworICAgICAgICB3aWRnZXRD
b250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0LCB3aWRnZXQsIHRvZ2dsZVN0YXRlLCBkZXRh
aWwpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBzZXRUb2dnbGVTaXplKHRoaXMsIHN0eWxl
LCBndGtDaGVja0J1dHRvbigpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVj
a2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBhaW50VG9nZ2xlKHRoaXMsIHJlbmRlck9iamVj
dCwgaW5mbywgcmVjdCwgZ3RrQ2hlY2tCdXR0b24oKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoreworICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0a1JhZGlvQnV0dG9uKCkp
OworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0LCBpbmZvLCByZWN0LCBndGtSYWRp
b0J1dHRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpZGdl
dEhhc0ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBoYXNGb2N1cykKK3sKKyAgICBn
X29iamVjdF9zZXQod2lkZ2V0LCAiaGFzLWZvY3VzIiwgaGFzRm9jdXMsIE5VTEwpOworCisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGluIEdUSysgMi4yMiwgeWV0IHRoZW1l
IGVuZ2luZXMgc3RpbGwgbG9vaworICAgIC8vIGF0IHRoZXNlIGZsYWdzIHdoZW4gZGV0ZXJtaW5p
bmcgaWYgYSB3aWRnZXQgaGFzIGZvY3VzLCBzbyB3ZSBtdXN0IHVzZSB0aGVtLgorICAgIGlmICho
YXNGb2N1cykKKyAgICAgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZP
Q1VTKTsKKyAgICBlbHNlCisgICAgICAgIEdUS19XSURHRVRfVU5TRVRfRkxBR1Mod2lkZ2V0LCBH
VEtfSEFTX0ZPQ1VTKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrQnV0dG9uKCk7
CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBJ
bnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKKworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZSA9
IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOworICAgIGd0a193aWRnZXRfc2V0X3N0YXRl
KHdpZGdldCwgc3RhdGUpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0
a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgaWYg
KGlzRm9jdXNlZChvYmplY3QpKSB7CisgICAgICAgIHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwg
VFJVRSk7CisKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1cyA9IDAsIGZvY3VzV2lkdGgg
PSAwLCBmb2N1c1BhZGRpbmcgPSAwOworICAgICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRn
ZXQsCisgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAg
ICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAiZm9j
dXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIDApOworICAgICAgICAvLyBJZiB3ZSBhcmUgdXNp
bmcgZXh0ZXJpb3IgZm9jdXMsIHdlIHNocmluayB0aGUgYnV0dG9uIHJlY3QgZG93biBiZWZvcmUK
KyAgICAgICAgLy8gZHJhd2luZy4gSWYgd2UgYXJlIHVzaW5nIGludGVyaW9yIGZvY3VzIHdlIHNo
cmluayB0aGUgZm9jdXMgcmVjdC4gVGhpcworICAgICAgICAvLyBhcHByb2FjaCBvcmlnaW5hdGVz
IGZyb20gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIChndGsyZHJhd2luZy5jKS4KKyAg
ICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgICAgIEd0a1N0eWxlKiBzdHlsZSA9
IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgICAgICAgICBmb2N1c1JlY3QuaW5m
bGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5nKTsKKyAgICAgICAgICAgIGZv
Y3VzUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MgLSBmb2N1c1BhZGRpbmcpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlWCgtZm9jdXNXaWR0
aCAtIGZvY3VzUGFkZGluZyk7CisgICAgICAgICAgICBidXR0b25SZWN0LmluZmxhdGVZKC1mb2N1
c1BhZGRpbmcgLSBmb2N1c1BhZGRpbmcpOworICAgICAgICB9CisgICAgfQorCisgICAgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAg
R3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gc3RhdGUgPT0gR1RLX1NUQVRFX0FDVElWRSA/IEdU
S19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50
Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGUsIHNoYWRvd1R5cGUsICJidXR0b24iKTsKKyAg
ICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRG
b2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgc3RhdGUsICJidXR0b24iKTsKKworICAgIHNldFdpZGdl
dEhhc0ZvY3VzKHdpZGdldCwgRkFMU0UpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJl
bmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3QKK3sKKyAgICBH
dGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2VwYXJhdG9yKCk7CisgICAgaWYgKCFz
ZXBhcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2Jvb2xlYW4gaGFzV2lkZVNlcGFy
YXRvcnMgPSBGQUxTRTsKKyAgICBnaW50IHNlcGFyYXRvcldpZHRoID0gMDsKKyAgICBndGtfd2lk
Z2V0X3N0eWxlX2dldChzZXBhcmF0b3IsCisgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmaGFz
V2lkZVNlcGFyYXRvcnMsCisgICAgICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lk
dGgsIDApOworICAgIGlmIChoYXNXaWRlU2VwYXJhdG9ycykKKyAgICAgICAgcmV0dXJuIHNlcGFy
YXRvcldpZHRoOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZShzZXBhcmF0b3IpLT54
dGhpY2tuZXNzOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OmNvbWJvQm94QXJyb3dTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBUYWtpbmcgdGhlIGZvbnQgc2l6ZSBh
bmQgcmV2ZXJzaW5nIHRoZSBEUEkgY29udmVyc2lvbiBzZWVtcyB0byBtYXRjaAorICAgIC8vIEdU
SysgcmVuZGVyaW5nIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuCisgICAgcmV0dXJuIHN0eWxlLT5m
b250KCkuc2l6ZSgpICogKDcyLjAgLyBSZW5kZXJUaGVtZUd0azo6Z2V0U2NyZWVuRFBJKCkpOwor
fQorCitzdGF0aWMgdm9pZCBnZXRCdXR0b25Jbm5lckJvcmRlcihHdGtXaWRnZXQqIGJ1dHRvbiwg
aW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pCit7CisgICAgR3Rr
U3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoYnV0dG9uKTsKKyAgICBpbnQgb3V0
ZXJCb3JkZXIgPSBndGtfY29udGFpbmVyX2dldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihi
dXR0b24pKTsKKyAgICBzdGF0aWMgR3RrQm9yZGVyIGRlZmF1bHRJbm5lckJvcmRlciA9IHsxLCAx
LCAxLCAxfTsKKyAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyOworICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0KGJ1dHRvbiwgImlubmVyLWJvcmRlciIsICZpbm5lckJvcmRlciwgTlVMTCk7CisgICAg
aWYgKCFpbm5lckJvcmRlcikKKyAgICAgICAgaW5uZXJCb3JkZXIgPSAmZGVmYXVsdElubmVyQm9y
ZGVyOworCisgICAgbGVmdCA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3JkZXItPmxlZnQgKyBzdHls
ZS0+eHRoaWNrbmVzczsKKyAgICByaWdodCA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3JkZXItPnJp
Z2h0ICsgc3R5bGUtPnh0aGlja25lc3M7CisgICAgdG9wID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJv
cmRlci0+dG9wICsgc3R5bGUtPnl0aGlja25lc3M7CisgICAgYm90dG9tID0gb3V0ZXJCb3JkZXIg
KyBpbm5lckJvcmRlci0+Ym90dG9tICsgc3R5bGUtPnl0aGlja25lc3M7CisKKyAgICBpZiAoaW5u
ZXJCb3JkZXIgIT0gJmRlZmF1bHRJbm5lckJvcmRlcikKKyAgICAgICAgZ3RrX2JvcmRlcl9mcmVl
KGlubmVyQm9yZGVyKTsKK30KKworCit2b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFBh
ZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0
LCBpbnQmIGJvdHRvbSkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGlzIG1lbnUgbGlzdCBidXR0b24g
aXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVtZSwgd2UKKyAgICAvLyBkb24ndCBhZGQg
YW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2ViQ29yZSBhbHJlYWR5IHVzZXMuCisgICAg
aWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQSBjb21ibyBib3ggYnV0dG9uIGlzIGEgYnV0dG9uIHdpdGggd2lkZ2V0cyBw
YWNrZWQgaW50byBpdC4KKyAgICBHdGtTdHlsZSogYnV0dG9uV2lkZ2V0U3R5bGUgPSBndGtfd2lk
Z2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsKKyAgICBnZXRCdXR0b25Jbm5lckJv
cmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisg
ICAgLy8gQWRkIHh0aGlja25lc3MgYW1vdW50IG9mIHBhZGRpbmcgZm9yIGVhY2ggc2lkZSBvZiB0
aGUgc2VwYXJhdG9yLiBUaGlzIGVuc3VyZXMKKyAgICAvLyB0aGF0IHRoZSB0ZXh0IGRvZXMgbm90
IGJ1bXAgdXAgYWdhaW5zdCB0aGUgc2VwYXJhdG9yLgorICAgIGludCBhcnJvd0FuZFNlcGVyYXRv
ckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCisgICAgICAgIGdldENvbWJvQm94
U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUtPnh0aGlja25lc3MpOwor
CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGxlZnQgKz0gYXJy
b3dBbmRTZXBlcmF0b3JMZW5ndGg7CisgICAgZWxzZQorICAgICAgICByaWdodCArPSBhcnJvd0Fu
ZFNlcGVyYXRvckxlbmd0aDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFs
UGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGludCBsZWZ0ID0g
MCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOworICAgIGdldENvbWJvQm94UGFkZGlu
ZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICByZXR1cm4gbGVmdDsKK30K
KworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0g
MCwgYm90dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCitpbnQgUmVuZGVyVGhlbWVH
dGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKKyAgICBn
ZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAg
cmV0dXJuIHRvcDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGlu
Z0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSAwLCB0
b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CisgICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0
eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIHJldHVybiBib3R0b207Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
cGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBNZW51IGxpc3QgYnV0dG9uIHBhaW50aW5nIHN0cmF0ZWd5LgorICAgIC8vIEZvciBi
dXR0b25zIHdpdGggYXBwZWFycy1hcy1saXN0IHNldCB0byBmYWxzZSAoaGF2aW5nIGEgc2VwYXJh
dG9yKToKKyAgICAvLyB8IGxlZnQgYm9yZGVyIHwgQnV0dG9uIHRleHQgfCB4dGhpY2tuZXNzIHwg
dnNlcGFyYXRvciB8IHh0aGlja25lc3MgfCBhcnJvdyB8IHh0aGlja25lc3MgfCByaWdodCBib3Jk
ZXIgfAorICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1saXN0IHNldCB0byB0cnVl
IChub3QgaGF2aW5nIGEgc2VwYXJhdG9yKToKKyAgICAvLyB8IGxlZnQgYm9yZGVyIHwgQnV0dG9u
IHRleHQgfCBhcnJvdyB8IHh0aGlja25lc3MgfCByaWdodCBib3JkZXIgfAorCisgICAgaW50IGxl
ZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJvdHRvbUJvcmRlciA9IDAsIHRvcEJvcmRl
ciA9IDA7CisgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29tYm9Cb3hCdXR0b24oKSwgbGVm
dEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwgYm90dG9tQm9yZGVyKTsKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgaW50IGFycm93U2l6ZSA9IGNv
bWJvQm94QXJyb3dTaXplKHN0eWxlKTsKKyAgICBHdGtTdHlsZSogYnV0dG9uU3R5bGUgPSBndGtf
d2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsKKworICAgIEludFJlY3QgYXJy
b3dSZWN0KDAsIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAvIDIsIGFycm93U2l6ZSwgYXJy
b3dTaXplKTsKKyAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgYXJy
b3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzKTsKKyAgICBl
bHNlCisgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAtIHJpZ2h0Qm9yZGVyIC0g
YnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOworICAgIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSA9IGlzUHJlc3NlZChvYmplY3QpID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFE
T1dfT1VUOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8u
Y29udGV4dCwgcmVjdCk7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IGdldEd0a1N0YXRl
VHlwZSh0aGlzLCBvYmplY3QpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJv
d1JlY3QsIGd0a0NvbWJvQm94QXJyb3coKSwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJS
T1dfRE9XTiwgImFycm93Iik7CisKKyAgICAvLyBTb21lIGNvbWJvIGJveGVzIGRvIG5vdCBoYXZl
IGEgc2VwYXJhdG9yLgorICAgIEd0a1dpZGdldCogc2VwYXJhdG9yID0gZ3RrQ29tYm9Cb3hTZXBh
cmF0b3IoKTsKKyAgICBpZiAoIXNlcGFyYXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gV2Ugd2FudCB0byBkZWNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRoZSBzZXBhcmF0b3IgYmFz
ZWQgb24gdGhlIGZvY3VzIHBhZGRpbmcgb2YgdGhlIGJ1dHRvbi4KKyAgICBnaW50IGZvY3VzUGFk
ZGluZyA9IDAsIGZvY3VzV2lkdGggPSAwOyAKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChndGtD
b21ib0JveEJ1dHRvbigpLAorICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRo
LAorICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIDApOworICAgIHRvcEJv
cmRlciArPSBmb2N1c1BhZGRpbmcgKyBmb2N1c1dpZHRoOworICAgIGJvdHRvbUJvcmRlciArPSBm
b2N1c1BhZGRpbmcgKyBmb2N1c1dpZHRoOworICAgIGludCBzZXBhcmF0b3JXaWR0aCA9IGdldENv
bWJvQm94U2VwYXJhdG9yV2lkdGgoKTsKKyAgICBJbnRSZWN0IHNlcGFyYXRvclJlY3QoMCwgdG9w
Qm9yZGVyLCBzZXBhcmF0b3JXaWR0aCwgcmVjdC5oZWlnaHQoKSAtIHRvcEJvcmRlciAtIGJvdHRv
bUJvcmRlcik7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIHNl
cGFyYXRvclJlY3Quc2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0
b25TdHlsZS0+eHRoaWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKKyAgICBlbHNlCisgICAgICAg
IHNlcGFyYXRvclJlY3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25l
c3MgLSBzZXBhcmF0b3JXaWR0aCk7CisKKyAgICBnYm9vbGVhbiBoYXNXaWRlU2VwYXJhdG9ycyA9
IEZBTFNFOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHNlcGFyYXRvciwgIndpZGUtc2VwYXJh
dG9ycyIsICZoYXNXaWRlU2VwYXJhdG9ycywgTlVMTCk7CisgICAgaWYgKGhhc1dpZGVTZXBhcmF0
b3JzKQorICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHNlcGFyYXRvclJlY3QsIHNl
cGFyYXRvciwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19FVENIRURfT1VULCAidnNlcGFy
YXRvciIpOworICAgIGVsc2UKKyAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFZMaW5lKHNl
cGFyYXRvclJlY3QsIHNlcGFyYXRvciwgR1RLX1NUQVRFX05PUk1BTCwgInZzZXBhcmF0b3IiKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5
KCk7CisKKyAgICBib29sIGVuYWJsZWQgPSBpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSAmJiAhaXNS
ZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KTsKKyAgICBHdGtTdGF0ZVR5cGUgYmFja2dyb3Vu
ZFN0YXRlID0gZW5hYmxlZCA/IEdUS19TVEFURV9OT1JNQUwgOiBHVEtfU1RBVEVfSU5TRU5TSVRJ
VkU7CisgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHdpZGdldCwgZW5hYmxlZCk7CisgICAg
Z3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJP
YmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisgICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lk
Z2V0LCBpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250
ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKKyAgICBJbnRSZWN0IHRleHRG
aWVsZFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOworCisgICAgLy8gVGhlIGVudHJ5IGJh
Y2tncm91bmQgaXMgb25seSBwYWludGVkIG92ZXIgdGhlIGludGVyaW9yIHBhcnQgb2YgdGhlIEdU
SysgZW50cnksIG5vdAorICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUuIFRoaXMgaGFwcGVucyBpbiB0
aGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUgYXMgd2VsbC4KKyAgICBJbnRSZWN0IGludGVy
aW9yUmVjdCh0ZXh0RmllbGRSZWN0KTsKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZSh3aWRnZXQpOworICAgIGludGVyaW9yUmVjdC5pbmZsYXRlWCgtc3R5bGUtPnh0
aGlja25lc3MpOworICAgIGludGVyaW9yUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3Mp
OworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRGbGF0Qm94KGludGVyaW9yUmVjdCwgd2lkZ2V0
LCBiYWNrZ3JvdW5kU3RhdGUsIEdUS19TSEFET1dfTk9ORSwgImVudHJ5X2JnIik7CisKKyAgICAv
LyBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBkcmF3aW5nIHRoZSBhY3R1YWwgZnJhbWUuCisgICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludFNoYWRvdyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19T
VEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOworCisgICAgZ2Jvb2xlYW4gaW50
ZXJpb3JGb2N1czsKKyAgICBnaW50IGZvY3VzV2lkdGg7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9n
ZXQod2lkZ2V0LAorICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAg
ICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgIDApOworICAgIGlmIChpc0Zv
Y3VzZWQocmVuZGVyT2JqZWN0KSAmJiAhaW50ZXJpb3JGb2N1cykgeworICAgICAgICAvLyBXaGVu
IEdUSysgcGFpbnRzIGEgdGV4dCBlbnRyeSB3aXRoIGZvY3VzLCBpdCBzaHJpbmtzIHRoZSBzaXpl
IG9mIHRoZSBmcmFtZSBhcmVhIGJ5IHRoZQorICAgICAgICAvLyBmb2N1cyB3aWR0aCBhbmQgcGFp
bnRzIG92ZXIgdGhlIHByZXZpb3VzbHkgdW5mb2N1c2VkIHRleHQgZW50cnkuIFdlIG5lZWQgdG8g
ZW11bGF0ZSB0aGF0CisgICAgICAgIC8vIGJ5IGRyYXdpbmcgYm90aCB0aGUgdW5mb2N1c2VkIGZy
YW1lIGFib3ZlIGFuZCB0aGUgZm9jdXNlZCBmcmFtZSBoZXJlLgorICAgICAgICBJbnRSZWN0IHNo
YWRvd1JlY3QodGV4dEZpZWxkUmVjdCk7CisgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZSgtZm9j
dXNXaWR0aCk7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTaGFkb3coc2hhZG93UmVj
dCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50cnkiKTsKKwor
ICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXModGV4dEZpZWxkUmVjdCwgd2lkZ2V0
LCBHVEtfU1RBVEVfTk9STUFMLCAiZW50cnkiKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvYmplY3QtPnN0eWxlKCktPmFwcGVh
cmFuY2UoKTsKKyAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBwYXJ0
ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCk7
CisKKyAgICAvLyBXZSBzaHJpbmsgdGhlIHRyb3VnaCByZWN0IHNsaWdodGx5IHRvIG1ha2Ugcm9v
bSBmb3IgdGhlIGZvY3VzIGluZGljYXRvci4KKyAgICBJbnRSZWN0IHRyb3VnaFJlY3QoSW50UG9p
bnQoKSwgcmVjdC5zaXplKCkpOyAvLyBUaGlzIGlzIHJlbGF0aXZlIHRvIHJlY3QuCisgICAgR3Rr
V2lkZ2V0KiB3aWRnZXQgPSAwOworICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0
KSB7CisgICAgICAgIHdpZGdldCA9IGd0a0hTY2FsZSgpOworICAgICAgICB0cm91Z2hSZWN0Lmlu
ZmxhdGVYKC1ndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT54dGhpY2tuZXNzKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB3aWRnZXQgPSBndGtWU2NhbGUoKTsKKyAgICAgICAgdHJvdWdoUmVj
dC5pbmZsYXRlWSgtZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+eXRoaWNrbmVzcyk7Cisg
ICAgfQorICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rp
b24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgd2lkZ2V0Q29u
dGV4dC5ndGtQYWludEJveCh0cm91Z2hSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9BQ1RJVkUsIEdU
S19TSEFET1dfT1VULCAidHJvdWdoIik7CisgICAgaWYgKGlzRm9jdXNlZChvYmplY3QpKQorICAg
ICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoSW50UmVjdChJbnRQb2ludCgpLCByZWN0
LnNpemUoKSksIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCksICJ0cm91Z2gi
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29udHJvbFBhcnQgcGFydCA9
IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIEFTU0VSVChwYXJ0ID09IFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8
fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKKworICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gMDsKKyAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAwOworICAgIEd0a09yaWVudGF0
aW9uIG9yaWVudGF0aW9uOworICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBh
cnQpIHsKKyAgICAgICAgd2lkZ2V0ID0gZ3RrSFNjYWxlKCk7CisgICAgICAgIGRldGFpbCA9ICJo
c2NhbGUiOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFM
OworICAgIH0gZWxzZSB7CisgICAgICAgIHdpZGdldCA9IGd0a1ZTY2FsZSgpOworICAgICAgICBk
ZXRhaWwgPSAidnNjYWxlIjsKKyAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05f
VkVSVElDQUw7CisgICAgfQorICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0
a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgLy8g
T25seSBzb21lIHRoZW1lcyBoYXZlIHNsaWRlciB0aHVtYnMgcmVzcG9uZCB0byBjbGlja3MgYW5k
IHNvbWUgZG9uJ3QuIFRoaXMgaW5mb3JtYXRpb24gaXMKKyAgICAvLyBnYXRoZXJlZCB2aWEgdGhl
ICdhY3RpdmF0ZS1zbGlkZXInIHByb3BlcnR5LCBidXQgaXQncyBkZXByZWNhdGVkIGluIEdUSysg
Mi4yMiBhbmQgcmVtb3ZlZCBpbgorICAgIC8vIEdUSysgMy54LiBUaGUgZHJhd2JhY2sgb2Ygbm90
IGhvbm9yaW5nIGl0IGlzIHRoYXQgc2xpZGVyIHRodW1icyBjaGFuZ2UgY29sb3Igd2hlbiB5b3Ug
Y2xpY2sKKyAgICAvLyBvbiB0aGVtLiAKKyAgICBJbnRSZWN0IHRodW1iUmVjdChJbnRQb2ludCgp
LCByZWN0LnNpemUoKSk7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0
KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNsaWRlcih0
aHVtYlJlY3QsIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCksIEdUS19TSEFE
T1dfT1VULCBkZXRhaWwsIG9yaWVudGF0aW9uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBw
ZWFyYW5jZSgpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBpZiAocGFydCA9PSBNZWRpYVNsaWRl
clRodW1iUGFydCkgeworICAgICAgICBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShzdHlsZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEd0a1dpZGdldCogd2lkZ2V0
ID0gcGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gZ3RrSFNjYWxlKCkgOiBndGtW
U2NhbGUoKTsKKyAgICBpbnQgbGVuZ3RoID0gMCwgd2lkdGggPSAwOworICAgIGd0a193aWRnZXRf
c3R5bGVfZ2V0KHdpZGdldCwKKyAgICAgICAgInNsaWRlcl9sZW5ndGgiLCAmbGVuZ3RoLAorICAg
ICAgICAic2xpZGVyX3dpZHRoIiwgJndpZHRoLCAwKTsKKworICAgIGlmIChwYXJ0ID09IFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChs
ZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHdpZHRoLCBG
aXhlZCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChwYXJ0ID09IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQp
OworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworfQorCisjaWYgRU5BQkxFKFBST0dS
RVNTX0VMRU1FTlQpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1Byb2dyZXNzQmFy
KCk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOworICAg
IEludFJlY3QgZnVsbFByb2dyZXNzQmFyUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Cisg
ICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsUHJvZ3Jlc3NCYXJSZWN0LCB3aWRnZXQs
IEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJ0cm91Z2giKTsKKworICAgIEd0a1N0
eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgSW50UmVjdCBw
cm9ncmVzc1JlY3QoZnVsbFByb2dyZXNzQmFyUmVjdCk7CisgICAgcHJvZ3Jlc3NSZWN0LmluZmxh
dGVYKC1zdHlsZS0+eHRoaWNrbmVzcyk7CisgICAgcHJvZ3Jlc3NSZWN0LmluZmxhdGVZKC1zdHls
ZS0+eXRoaWNrbmVzcyk7CisgICAgcHJvZ3Jlc3NSZWN0ID0gUmVuZGVyVGhlbWVHdGs6OmNhbGN1
bGF0ZVByb2dyZXNzUmVjdChyZW5kZXJPYmplY3QsIHByb2dyZXNzUmVjdCk7CisKKyAgICBpZiAo
IXByb2dyZXNzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRC
b3gocHJvZ3Jlc3NSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9QUkVMSUdIVCwgR1RLX1NIQURPV19P
VVQsICJiYXIiKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBHdGtTdHlsZSogZ3RrU3R5
bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtTcGluQnV0dG9uKCkpOworICAgIGNvbnN0IFBh
bmdvRm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNj
OworICAgIGdpbnQgZm9udFNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKGZv
bnREZXNjcmlwdGlvbik7CisKKyAgICAvLyBGb3JjZSBhbiBvZGQgYXJyb3cgc2l6ZSBoZXJlLiBH
VEsrIDMueCBmb3JjZXMgZXZlbiBpbiB0aGlzIGNhc2UsIGJ1dAorICAgIC8vIE5vZG9rYS1iYXNl
ZCB0aGVtZXMgbG9vayBpbmNvcnJlY3Qgd2l0aCBhbiBldmVuIGFycm93IHNpemUuCisgICAgaW50
IHdpZHRoID0gbWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1Np
emUpOworICAgIHdpZHRoICs9IC0oKHdpZHRoICUgMikgLSAxKSArIGd0a1N0eWxlLT54dGhpY2tu
ZXNzOworCisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBz
dHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworfQorCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgLy8gV2UgZXhwYW5kIHRoZSBwYWludGVkIGFyZWEgYnkgMiBwaXhlbHMgb24gdGhlIHRvcCBh
bmQgYm90dG9tIGFuZCAyIHBpeGVscyBvbiB0aGUgcmlnaHQuIFRoaXMKKyAgICAvLyBpcyBiZWNh
dXNlIEdUSysgdGhlbWVzIHdhbnQgdG8gZHJhdyBvdmVyIHRoZSB0ZXh0IGJveCBib3JkZXJzLCBi
dXQgV2ViQ29yZSByZW5kZXJzIHRoZSBpbm5lcgorICAgIC8vIHNwaW4gYnV0dG9uIGluc2lkZSB0
aGUgdGV4dCBib3guCisgICAgSW50UmVjdCBleHBhbmRlZFJlY3QocmVjdCk7CisgICAgZXhwYW5k
ZWRSZWN0LmluZmxhdGVZKDIpOworICAgIGV4cGFuZGVkUmVjdC5zZXRXaWR0aChyZWN0LndpZHRo
KCkgKyAyKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChwYWlu
dEluZm8uY29udGV4dCwgZXhwYW5kZWRSZWN0KTsKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0
a1NwaW5CdXR0b24oKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtU
ZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKworICAg
IEludFJlY3QgZnVsbFNwaW5CdXR0b25SZWN0KEludFBvaW50KCksIGV4cGFuZGVkUmVjdC5zaXpl
KCkpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFNwaW5CdXR0b25SZWN0LCB3
aWRnZXQsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJzcGluYnV0dG9uIik7CisK
KyAgICBib29sIHVwUHJlc3NlZCA9IGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2Jq
ZWN0KTsKKyAgICBib29sIHVwSG92ZXJlZCA9IGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVu
ZGVyT2JqZWN0KTsKKyAgICBib29sIGNvbnRyb2xBY3RpdmUgPSBpc0VuYWJsZWQocmVuZGVyT2Jq
ZWN0KSAmJiAhaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KTsKKyAgICBHdGtTaGFkb3dU
eXBlIHNoYWRvd1R5cGUgPSB1cFByZXNzZWQgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19P
VVQ7CisKKyAgICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0lOU0VOU0lUSVZF
OworICAgIGlmIChjb250cm9sQWN0aXZlKSB7CisgICAgICAgIGlmIChpc1ByZXNzZWQocmVuZGVy
T2JqZWN0KSAmJiB1cFByZXNzZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVf
QUNUSVZFOworICAgICAgICBlbHNlIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAmJiB1cEhv
dmVyZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9OT1JNQUw7CisgICAg
fQorICAgIEludFJlY3QgdG9wUmVjdChJbnRQb2ludCgpLCBleHBhbmRlZFJlY3Quc2l6ZSgpKTsK
KyAgICB0b3BSZWN0LnNldEhlaWdodChleHBhbmRlZFJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICB3
aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRvcFJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCAic3BpbmJ1dHRvbl91cCIpOworCisgICAgLy8gVGhlIGFycm93IHNpemUvcG9zaXRp
b24gY2FsY3VsYXRpb24gaGVyZSBpcyBiYXNlZCBvbiB0aGUgYXJiaXRyYXJ5IGd5bW5hc3RpY3Mg
dGhhdCBoYXBwZW4KKyAgICAvLyBpbiBndGtzcGluYnV0dG9uLmMuIEl0IGlzbid0IHByZXR0eSB0
aGVyZSBhbmQgaXQgaXNuJ3QgcHJldHR5IGhlcmUuIFRoaXMgbWFuYWdlcyB0byBtYWtlCisgICAg
Ly8gdGhlIGJ1dHRvbiBsb29rIG5hdGl2ZSBmb3IgbWFueSB0aGVtZXMgdGhvdWdoLgorICAgIElu
dFJlY3QgYXJyb3dSZWN0OworICAgIGludCBhcnJvd1NpemUgPSAoZXhwYW5kZWRSZWN0LndpZHRo
KCkgLSAzKSAvIDI7CisgICAgYXJyb3dTaXplIC09IChhcnJvd1NpemUgJSAyKSAtIDE7IC8vIEZv
cmNlIG9kZC4KKyAgICBhcnJvd1JlY3Quc2V0V2lkdGgoYXJyb3dTaXplKTsKKyAgICBhcnJvd1Jl
Y3Quc2V0SGVpZ2h0KGFycm93U2l6ZSk7CisgICAgYXJyb3dSZWN0Lm1vdmUoKGV4cGFuZGVkUmVj
dC53aWR0aCgpIC0gYXJyb3dSZWN0LndpZHRoKCkpIC8gMiwKKyAgICAgICAgKHRvcFJlY3QuaGVp
Z2h0KCkgLSBhcnJvd1JlY3QuaGVpZ2h0KCkpIC8gMiArIDEpOworICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBH
VEtfQVJST1dfVVAsICJzcGluYnV0dG9uIik7CisKKyAgICBzaGFkb3dUeXBlID0gaXNQcmVzc2Vk
KHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9X
X09VVDsKKyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAgICAgICBpZiAoaXNQcmVzc2VkKHJl
bmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCkKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19T
VEFURV9BQ1RJVkU7CisgICAgICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpICYm
ICF1cEhvdmVyZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9OT1JNQUw7
CisgICAgfQorICAgIEludFJlY3QgYm90dG9tUmVjdChJbnRQb2ludCgwLCBleHBhbmRlZFJlY3Qu
aGVpZ2h0KCkgLyAyKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7CisgICAgYm90dG9tUmVjdC5zZXRI
ZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC0gYm90dG9tUmVjdC55KCkpOworICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRCb3goYm90dG9tUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRv
d1R5cGUsICJzcGluYnV0dG9uX2Rvd24iKTsKKworICAgIGFycm93UmVjdC5zZXRZKGFycm93UmVj
dC55KCkgKyBib3R0b21SZWN0LnkoKSAtIDEpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRB
cnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1df
RE9XTiwgInNwaW5idXR0b24iKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworR1JlZlB0cjxH
ZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29u
c3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25T
aXplKQoreworICAgIEFTU0VSVCh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NPTlRBSU5FUiB8fCB3
aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKTsKKworICAgIFJlbmRlclRoZW1lR3RrKiB0aGVt
ZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLmdldCgpKTsKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHdpZGdldFR5cGUgPT0gR1RLX1RZ
UEVfQ09OVEFJTkVSID8gR1RLX1dJREdFVCh0aGVtZS0+Z3RrQ29udGFpbmVyKCkpIDogdGhlbWUt
Pmd0a0VudHJ5KCk7CisKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHls
ZSh3aWRnZXQpOworICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfc3R5bGVfbG9va3VwX2lj
b25fc2V0KHN0eWxlLCBpY29uTmFtZSk7CisgICAgcmV0dXJuIGFkb3B0R1JlZihndGtfaWNvbl9z
ZXRfcmVuZGVyX2ljb24oaWNvblNldCwgc3R5bGUsCisgICAgICAgIHN0YXRpY19jYXN0PEd0a1Rl
eHREaXJlY3Rpb24+KGRpcmVjdGlvbiksCisgICAgICAgIHN0YXRpY19jYXN0PEd0a1N0YXRlVHlw
ZT4oc3RhdGUpLAorICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpLCAw
LCAwKSk7Cit9CisKKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0
a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2Vb
R1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3Jt
SW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUo
d2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKworQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1
cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXco
KTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RB
VEVfU0VMRUNURURdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjph
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtX
aWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKworQ29sb3IgUmVu
ZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOworICAgIHJldHVy
biBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdOwor
fQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7CisgICAgY2FzZSBDU1NWYWx1ZUJ1dHRv
bnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0X2dldF9zdHlsZShndGtCdXR0
b24oKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsKKyAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRl
eHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0X2dldF9zdHlsZShndGtFbnRyeSgp
KS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBS
ZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJl
dmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKK3sKKyAgICAvLyBGSVhNRTogTWFrZSBz
dXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkgdGltZXMgZm9yIGEgc2lu
Z2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KKyAgICByZW5kZXJUaGVtZS0+cGxhdGZvcm1D
b2xvcnNEaWRDaGFuZ2UoKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBXaWRnZXQoR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9yZWFsaXplKHdpZGdldCk7CisgICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5U
X1RPX1BPSU5URVIoVFJVRSkpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXR1cFdpZGdl
dEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtXaWRnZXQqIHdpbmRvdykg
Y29uc3QKK3sKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdp
ZGdldCk7CisgICAgc2V0dXBXaWRnZXQod2lkZ2V0KTsKKworICAgIC8vIEZJWE1FOiBQZXJoYXBz
IHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB0aGUgY29udGFpbmluZyB3aW5kb3cgb3Ig
cGFyZW50IGNvbnRhaW5lci4KKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpZGdldCwgInN0eWxlLXNl
dCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhl
bWVHdGsqPih0aGlzKSk7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbnRh
aW5lcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29udGFpbmVyKQorICAgICAgICByZXR1cm4g
bV9ndGtDb250YWluZXI7CisKKyAgICBtX2d0a1dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19X
SU5ET1dfUE9QVVApOworICAgIGd0a193aWRnZXRfc2V0X2NvbG9ybWFwKG1fZ3RrV2luZG93LCBt
X2NvbG9ybWFwKTsKKyAgICBzZXR1cFdpZGdldChtX2d0a1dpbmRvdyk7CisgICAgZ3RrX3dpZGdl
dF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemlsbGFHdGtXaWRnZXQiKTsKKworICAgIG1fZ3Rr
Q29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250
YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2luZG93KTsKKyAgICByZXR1cm4gbV9ndGtDb250
YWluZXI7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0J1dHRvbigpIGNvbnN0
Cit7CisgICAgaWYgKG1fZ3RrQnV0dG9uKQorICAgICAgICByZXR1cm4gbV9ndGtCdXR0b247Cisg
ICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOworICAgIHNldHVwV2lkZ2V0QW5kQWRk
VG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9n
dGtCdXR0b247Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0VudHJ5KCkgY29u
c3QKK3sKKyAgICBpZiAobV9ndGtFbnRyeSkKKyAgICAgICAgcmV0dXJuIG1fZ3RrRW50cnk7Cisg
ICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRv
Q29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtF
bnRyeTsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVHJlZVZpZXcoKSBjb25z
dAoreworICAgIGlmIChtX2d0a1RyZWVWaWV3KQorICAgICAgICByZXR1cm4gbV9ndGtUcmVlVmll
dzsKKyAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3RyZWVfdmlld19uZXcoKTsKKyAgICBzZXR1cFdp
ZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJlZVZpZXcsIGd0a0NvbnRhaW5lcigpKTsKKyAg
ICByZXR1cm4gbV9ndGtUcmVlVmlldzsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6
Z3RrVlNjYWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtWU2NhbGUpCisgICAgICAgIHJldHVy
biBtX2d0a1ZTY2FsZTsKKyAgICBtX2d0a1ZTY2FsZSA9IGd0a192c2NhbGVfbmV3KDApOworICAg
IHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtWU2NhbGUsIGd0a0NvbnRhaW5lcigp
KTsKKyAgICByZXR1cm4gbV9ndGtWU2NhbGU7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVH
dGs6Omd0a0hTY2FsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrSFNjYWxlKQorICAgICAgICBy
ZXR1cm4gbV9ndGtIU2NhbGU7CisgICAgbV9ndGtIU2NhbGUgPSBndGtfaHNjYWxlX25ldygwKTsK
KyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrSFNjYWxlLCBndGtDb250YWlu
ZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrSFNjYWxlOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRo
ZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrUmFkaW9CdXR0
b24pCisgICAgICAgIHJldHVybiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG1fZ3RrUmFkaW9CdXR0
b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldygwKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29u
dGFpbmVyKG1fZ3RrUmFkaW9CdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9n
dGtSYWRpb0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ2hlY2tC
dXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a0NoZWNrQnV0dG9uKQorICAgICAgICByZXR1
cm4gbV9ndGtDaGVja0J1dHRvbjsKKyAgICBtX2d0a0NoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1
dHRvbl9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrQ2hlY2tC
dXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKK30K
KworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrUHJvZ3Jlc3NCYXIoKSBjb25zdAorewor
ICAgIGlmIChtX2d0a1Byb2dyZXNzQmFyKQorICAgICAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0Jh
cjsKKyAgICBtX2d0a1Byb2dyZXNzQmFyID0gZ3RrX3Byb2dyZXNzX2Jhcl9uZXcoKTsKKyAgICBz
ZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUHJvZ3Jlc3NCYXIsIGd0a0NvbnRhaW5l
cigpKTsKKyAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsKK30KKworc3RhdGljIHZvaWQgZ2V0
R3RrQ29tYm9Cb3hCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIHRhcmdldCkKK3sK
KyAgICBpZiAoIUdUS19JU19UT0dHTEVfQlVUVE9OKHdpZGdldCkpCisgICAgICAgIHJldHVybjsK
KyAgICBHdGtXaWRnZXQqKiB3aWRnZXRUYXJnZXQgPSBzdGF0aWNfY2FzdDxHdGtXaWRnZXQqKj4o
dGFyZ2V0KTsKKyAgICAqd2lkZ2V0VGFyZ2V0ID0gd2lkZ2V0OworfQorCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgR3RrV2lkZ2V0KiBhcnJvdzsKKyAgICBHdGtXaWRnZXQqIHNlcGFyYXRvcjsKK30g
Q29tYm9Cb3hXaWRnZXRQaWVjZXM7CisKK3N0YXRpYyB2b2lkIGdldEd0a0NvbWJvQm94UGllY2Vz
KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChHVEtfSVNfQVJS
T1cod2lkZ2V0KSkgeworICAgICAgICBzdGF0aWNfY2FzdDxDb21ib0JveFdpZGdldFBpZWNlcyo+
KGRhdGEpLT5hcnJvdyA9IHdpZGdldDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
R1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSAKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hX
aWRnZXRQaWVjZXMqPihkYXRhKS0+c2VwYXJhdG9yID0gd2lkZ2V0OworfQorCitHdGtXaWRnZXQq
IFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29t
Ym9Cb3gpCisgICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94OworICAgIG1fZ3RrQ29tYm9Cb3gg
PSBndGtfY29tYm9fYm94X25ldygpOworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIo
bV9ndGtDb21ib0JveCwgZ3RrQ29udGFpbmVyKCkpOworICAgIHJldHVybiBtX2d0a0NvbWJvQm94
OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpyZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNv
bnN0Cit7CisgICAgZ3RrQ29tYm9Cb3goKTsgLy8gRW5zdXJlIHRoYXQgd2UndmUgaW5pdGlhbGl6
ZWQgdGhlIGNvbWJvIGJveC4KKworICAgIC8vIFNvbWUgdGhlbWVzIGxvb2sgYXQgd2lkZ2V0IGFu
Y2VzdHJ5IHRvIGRldGVybWluZSBob3cgdG8gcmVuZGVyIHdpZGdldHMsIHNvCisgICAgLy8gZ2V0
IHRoZSBHdGtCdXR0b24gdGhhdCBpcyB0aGUgYWN0dWFsIGNoaWxkIG9mIHRoZSBjb21ibyBib3gu
CisgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihtX2d0a0NvbWJvQm94KSwg
Z2V0R3RrQ29tYm9Cb3hCdXR0b24sICZtX2d0a0NvbWJvQm94QnV0dG9uKTsKKyAgICBBU1NFUlQo
bV9ndGtDb21ib0JveEJ1dHRvbik7CisgICAgc2V0dXBXaWRnZXQobV9ndGtDb21ib0JveEJ1dHRv
bik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94
QnV0dG9uKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94QnV0dG9u
KSk7CisKKyAgICBDb21ib0JveFdpZGdldFBpZWNlcyBwaWVjZXMgPSB7IDAsIDAgfTsKKyAgICBH
dGtXaWRnZXQqIGJ1dHRvbkNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihndGtDb21i
b0JveEJ1dHRvbigpKSk7CisgICAgaWYgKEdUS19JU19IQk9YKGJ1dHRvbkNoaWxkKSkKKyAgICAg
ICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihidXR0b25DaGlsZCksIGdldEd0
a0NvbWJvQm94UGllY2VzLCAmcGllY2VzKTsKKyAgICBlbHNlIGlmIChHVEtfSVNfQVJST1coYnV0
dG9uQ2hpbGQpKQorICAgICAgICBwaWVjZXMuYXJyb3cgPSBidXR0b25DaGlsZDsKKworICAgIEFT
U0VSVChwaWVjZXMuYXJyb3cpOworICAgIG1fZ3RrQ29tYm9Cb3hBcnJvdyA9IHBpZWNlcy5hcnJv
dzsKKyAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94QXJyb3cpOworICAgIC8vIFdoZW4gdGhl
IHN0eWxlIGNoYW5nZXMsIHRoZSBjb21ibyBib3ggbWF5IGRlc3Ryb3kgaXRzIGNoaWxkcmVuLgor
ICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtDb21ib0JveEFycm93
KSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94QXJyb3cpKTsKKwor
ICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSBwaWVjZXMuc2VwYXJhdG9yOworICAgIGlmICht
X2d0a0NvbWJvQm94U2VwYXJhdG9yKSB7CisgICAgICAgIHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9C
b3hTZXBhcmF0b3IpOworICAgICAgICAvLyBXaGVuIHRoZSBzdHlsZSBjaGFuZ2VzLCB0aGUgY29t
Ym8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4KKyAgICAgICAgZ19vYmplY3RfYWRkX3dl
YWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSwgcmVpbnRlcnByZXRf
Y2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSk7CisgICAgfQorfQorCitH
dGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveEJ1dHRvbigpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fZ3RrQ29tYm9Cb3hCdXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94
QnV0dG9uOworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAgQVNTRVJUKG1fZ3Rr
Q29tYm9Cb3hCdXR0b24pOworICAgIHJldHVybiBtX2d0a0NvbWJvQm94QnV0dG9uOworfQorCitH
dGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveEFycm93KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9ndGtDb21ib0JveEFycm93KQorICAgICAgICByZXR1cm4gbV9ndGtDb21ib0JveEFy
cm93OworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAgQVNTRVJUKG1fZ3RrQ29t
Ym9Cb3hBcnJvdyk7CisgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hBcnJvdzsKK30KKworR3RrV2lk
Z2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hTZXBhcmF0b3IoKSBjb25zdAoreworICAg
IC8vIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgbWF5IGJlIG51bGwgZWl0aGVyIGJlY2F1c2Ugd2Ug
aGF2ZW4ndCBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94CisgICAgLy8gb3IgYmVjYXVzZSB0aGUg
Y29tYm8gYm94ZXMgaW4gdGhpcyB0aGVtZSBkb24ndCBoYXZlIHNlcGFyYXRvcnMuIElmIG1fZ3Rr
Q29tYm9Cb3hBcnJvdworICAgIC8vIGFycm93IGlzbid0IG51bGwsIHdlIGRlZmluaXRlbHkgaGF2
ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94LgorICAgIGlmIChtX2d0a0NvbWJvQm94QXJyb3cg
fHwgbV9ndGtDb21ib0JveEJ1dHRvbikKKyAgICAgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hTZXBh
cmF0b3I7CisgICAgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKTsKKyAgICByZXR1cm4gbV9ndGtD
b21ib0JveFNlcGFyYXRvcjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrSFNj
cm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrSFNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuIG1fZ3RrSFNjcm9sbGJhcjsKKyAgICBtX2d0a0hTY3JvbGxiYXIgPSBndGtfaHNjcm9sbGJh
cl9uZXcoMCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0hTY3JvbGxi
YXIsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtIU2Nyb2xsYmFyOworfQorCitH
dGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtWU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9ndGtWU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9ndGtWU2Nyb2xsYmFyOworICAg
IG1fZ3RrVlNjcm9sbGJhciA9IGd0a192c2Nyb2xsYmFyX25ldygwKTsKKyAgICBzZXR1cFdpZGdl
dEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjcm9sbGJhciwgZ3RrQ29udGFpbmVyKCkpOworICAg
IHJldHVybiBtX2d0a1ZTY3JvbGxiYXI7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6
Omd0a1NwaW5CdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a1NwaW5CdXR0b24pCisgICAg
ICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247CisgICAgbV9ndGtTcGluQnV0dG9uID0gZ3RrX3Nw
aW5fYnV0dG9uX25ld193aXRoX3JhbmdlKDAsIDEwLCAxKTsKKyAgICBzZXR1cFdpZGdldEFuZEFk
ZFRvQ29udGFpbmVyKG1fZ3RrU3BpbkJ1dHRvbiwgZ3RrQ29udGFpbmVyKCkpOworICAgIHJldHVy
biBtX2d0a1NwaW5CdXR0b247Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWEwODRkNjg4N2M2ZTQwMzZlMjg0M2ExNTU2NTA5Y2YwNzE1NmU0Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNw
cApAQCAtMCwwICsxLDk2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtl
bm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgor
CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRz
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRz
LmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGlzIHRoZSBkZWZhdWx0
IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9X
X1NJWkUgaW4gZ3RrYXJyb3cuYy4KK3N0YXRpYyBjb25zdCBpbnQgbWluQXJyb3dTaXplID0gMTU7
CisvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQg
d2FzIGRlZmluZWQgYXMgTUlOX0FSUk9XX1dJRFRIIGluIGd0a3NwaW5idXR0b24uYy4KK3N0YXRp
YyBjb25zdCBpbnQgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDY7CisKK3R5cGVkZWYgSGFzaE1h
cDxHVHlwZSwgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+ID4gU3R5bGVDb250ZXh0TWFwOworc3Rh
dGljIFN0eWxlQ29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCk7CisKK3N0YXRpYyB2b2lkIGd0
a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKK3sKKyAgICBTdHls
ZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgpLmVuZCgp
OworICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3R5bGVD
b250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT52YWx1ZS5nZXQoKSk7CisKKyAgICBQYWdlOjpz
Y2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRm9yQWxsUGFnZXMoKTsKK30KKworc3RhdGljIFN0eWxl
Q29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0eWxlQ29udGV4dE1hcCwgbWFwLCAoKSk7CisKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgR3RrU2V0dGluZ3Mq
IHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6Omd0ay10aGVtZS1uYW1lIiwgR19DQUxMQkFDSyhn
dGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIDApOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNl
dHRpbmdzLCAibm90aWZ5OjpndGstY29sb3Itc2NoZW1lIiwgR19DQUxMQkFDSyhndGtTdHlsZUNo
YW5nZWRDYWxsYmFjayksIDApOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfQor
ICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29u
dGV4dChHVHlwZSB3aWRnZXRUeXBlKQoreworICAgIFN0eWxlQ29udGV4dE1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgpLmFkZCh3aWRnZXRUeXBlLCAwKTsKKyAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKKworICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3
KCk7CisgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwor
CisgICAgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0NST0xMQkFSKQorICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9M
TEJBUik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9FTlRSWSkKKyAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFT
U19FTlRSWSk7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9BUlJPVykKKyAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsICJhcnJvdyIpOwor
ICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQlVUVE9OKQorICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRP
Tik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TQ0FMRSkKKyAgICAgICAg
Z3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19T
Q0FMRSk7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TRVBBUkFUT1IpCisg
ICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVf
Q0xBU1NfU0VQQVJBVE9SKTsKKyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1BS
T0dSRVNTX0JBUikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgs
IDAsIEdUS19TVFlMRV9DTEFTU19QUk9HUkVTU0JBUik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlw
ZSA9PSBHVEtfVFlQRV9TUElOX0JVVFRPTikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJf
YWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TUElOQlVUVE9OKTsKKyAgICBlbHNl
IGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1RSRUVfVklFVykKKyAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19WSUVXKTsKKyAg
ICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTikKKyAgICAgICAg
Z3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19D
SEVDSyk7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9SQURJT19CVVRUT04p
CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZ
TEVfQ0xBU1NfUkFESU8pOworCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpOworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOworICAgIGd0a193aWRnZXRfcGF0aF9m
cmVlKHBhdGgpOworCisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbnRleHQ7CisgICAg
cmV0dXJuIGNvbnRleHQuZ2V0KCk7Cit9CisKK0d0a1N0eWxlQ29udGV4dCogUmVuZGVyVGhlbWVH
dGs6Omd0a1Njcm9sbGJhclN0eWxlKCkKK3sKKyAgICByZXR1cm4gZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX1NDUk9MTEJBUik7Cit9CisKKy8vIFRoaXMgaXMgbm90IGEgc3RhdGljIG1ldGhvZCwg
YmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBHVEsrIGhlYWRlcnMgaW4gUmVuZGVyVGhl
bWVHdGsuaC4KK2V4dGVybiBHdGtUZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERp
cmVjdGlvbik7CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisK
K1JlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQoreworfQorCisjaWYgRU5BQkxFKFZJ
REVPKQordm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29sb3JzKCkKK3sKKyAgICBHZGtS
R0JBIGNvbG9yOworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGFpbmVyQ29udGV4dCA9IGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9DT05UQUlORVIpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfTk9S
TUFMLCAmY29sb3IpOworICAgIG1fcGFuZWxDb2xvciA9IGNvbG9yOworICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9G
TEFHX0FDVElWRSwgJmNvbG9yKTsKKyAgICBtX3NsaWRlckNvbG9yID0gY29sb3I7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RL
X1NUQVRFX0ZMQUdfU0VMRUNURUQsICZjb2xvcik7CisgICAgbV9zbGlkZXJUaHVtYkNvbG9yID0g
Y29sb3I7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWRqdXN0UmVjdEZvckZvY3VzKEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCwgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBnaW50IGZvY3VzV2lk
dGgsIGZvY3VzUGFkOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAor
ICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAiZm9jdXMt
cGFkZGluZyIsICZmb2N1c1BhZCwgMCk7CisgICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBm
b2N1c1BhZCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNv
bnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCA9IDA7CisgICAgYm9vbCBjaGVja0ludGVyaW9yRm9jdXMg
PSBmYWxzZTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCk7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBDaGVja2JveFBhcnQ6
CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQo
cGFydCA9PSBDaGVja2JveFBhcnQgPyBHVEtfVFlQRV9DSEVDS19CVVRUT04gOiBHVEtfVFlQRV9S
QURJT19CVVRUT04pOworCisgICAgICAgIGdpbnQgaW5kaWNhdG9yU3BhY2luZzsKKyAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc3BhY2luZyIs
ICZpbmRpY2F0b3JTcGFjaW5nLCBOVUxMKTsKKyAgICAgICAgcmVjdC5pbmZsYXRlKGluZGljYXRv
clNwYWNpbmcpOworCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFy
dDoKKyAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgorICAgICAgICBjb250ZXh0ID0gZ2V0
U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
dXR0b25QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVudWxp
c3RQYXJ0OgorICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRP
Tik7CisgICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1cyA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRBcmVhUGFydDoKKyAgICAgICAg
Y29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSk7CisgICAgICAgIGNoZWNr
SW50ZXJpb3JGb2N1cyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKGNoZWNr
SW50ZXJpb3JGb2N1cykgeworICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOworICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImludGVyaW9yLWZvY3VzIiwg
JmludGVyaW9yRm9jdXMsIE5VTEwpOworICAgICAgICBpZiAoaW50ZXJpb3JGb2N1cykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRqdXN0UmVjdEZvckZvY3VzKGNvbnRleHQsIHJl
Y3QpOworfQorCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4dCogY29u
dGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgorICAgIGlm
ICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdGhlciBwb3J0cyBoYXJkLWNv
ZGUgdGhpcyB0byAxMyB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkg
R1RLKy4KKyAgICAvLyBHVEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5kIHRoZSBuYXRpdmUgbG9vay4K
KyAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdmFsdWVzIG90
aGVyIHRoYW4gMTMgYWN0dWFsbHkgYnJlYWsgc2l0ZSBjb21wYXRpYmlsaXR5LgorICAgIGdpbnQg
aW5kaWNhdG9yU2l6ZTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwg
ImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOworCisgICAgaWYgKHN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKKworICAgIGlmIChzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUs
IEZpeGVkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1l
R3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBmdWxsUmVjdCkKK3sK
KyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlw
ZSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIC8vIFNvbWUg
dGhlbWVzIGRvIG5vdCByZW5kZXIgbGFyZ2UgdG9nZ2xlIGJ1dHRvbnMgcHJvcGVybHksIHNvIHdl
IHNpbXBseQorICAgIC8vIHNocmluayB0aGUgcmVjdGFuZ2xlIGJhY2sgZG93biB0byB0aGUgZGVm
YXVsdCBzaXplIGFuZCB0aGVuIGNlbnRlciBpdAorICAgIC8vIGluIHRoZSBmdWxsIHRvZ2dsZSBi
dXR0b24gcmVnaW9uLiBUaGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IGZvcmNpbmcgdG9nZ2xlCisg
ICAgLy8gYnV0dG9ucyB0byBiZSBhIHNtYWxsZXIgc2l6ZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQg
dG8gYnJlYWsgc2l0ZSBsYXlvdXRzLgorICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1zaXplIiwgJmluZGlj
YXRvclNpemUsIE5VTEwpOworICAgIEludFJlY3QgcmVjdChmdWxsUmVjdCk7CisgICAgaWYgKHJl
Y3Qud2lkdGgoKSA+IGluZGljYXRvclNpemUpIHsKKyAgICAgICAgcmVjdC5pbmZsYXRlWCgtKHJl
Y3Qud2lkdGgoKSAtIGluZGljYXRvclNpemUpIC8gMik7CisgICAgICAgIHJlY3Quc2V0V2lkdGgo
aW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2UgcmVjdC53aWR0aCgpIHdhcyBlcXVhbCB0byBpbmRp
Y2F0b3JTaXplICsgMS4KKyAgICB9CisKKyAgICBpZiAocmVjdC5oZWlnaHQoKSA+IGluZGljYXRv
clNpemUpIHsKKyAgICAgICAgcmVjdC5pbmZsYXRlWSgtKHJlY3QuaGVpZ2h0KCkgLSBpbmRpY2F0
b3JTaXplKSAvIDIpOworICAgICAgICByZWN0LnNldEhlaWdodChpbmRpY2F0b3JTaXplKTsgLy8g
SW4gY2FzZSByZWN0LmhlaWdodCgpIHdhcyBlcXVhbCB0byBpbmRpY2F0b3JTaXplICsgMS4KKyAg
ICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Mo
Y29udGV4dCwgd2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04gPyBHVEtfU1RZTEVf
Q0xBU1NfQ0hFQ0sgOiBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOworCisgICAgZ3VpbnQgZmxhZ3Mg
PSAwOworICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IHRoZW1lLT5p
c1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19JTlNFTlNJVElWRTsKKyAgICBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRl
ck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAg
IGlmICh0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdz
IHw9IEdUS19TVEFURV9GTEFHX0lOQ09OU0lTVEVOVDsKKyAgICBlbHNlIGlmICh0aGVtZS0+aXND
aGVja2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FD
VElWRTsKKyAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKwor
ICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTikKKyAgICAgICAgZ3Rr
X3JlbmRlcl9jaGVjayhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKKyAgICBlbHNlCisgICAgICAgIGd0a19yZW5kZXJfb3B0aW9uKGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQo
cmVuZGVyT2JqZWN0KSkgeworICAgICAgICBJbnRSZWN0IGluZGljYXRvclJlY3QocmVjdCk7Cisg
ICAgICAgIGdpbnQgaW5kaWNhdG9yU3BhY2luZzsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5n
LCBOVUxMKTsKKyAgICAgICAgaW5kaWNhdG9yUmVjdC5pbmZsYXRlKGluZGljYXRvclNwYWNpbmcp
OworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaW5kaWNhdG9yUmVjdC54KCksIGluZGljYXRvclJlY3Qu
eSgpLAorICAgICAgICAgICAgaW5kaWNhdG9yUmVjdC53aWR0aCgpLCBpbmRpY2F0b3JSZWN0Lmhl
aWdodCgpKTsKKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQp
OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX0NIRUNLX0JVVFRPTiksIHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRDaGVja2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywg
R1RLX1RZUEVfQ0hFQ0tfQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX1JBRElPX0JVVFRPTiksIHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dn
bGUodGhpcywgR1RLX1RZUEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywg
cmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJCdXR0b24o
UmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CisKKyAgICBndWludCBm
bGFncyA9IDA7CisgICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhl
bWUtPmlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQo
cmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7
CisgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0
ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgaWYg
KHRoZW1lLT5pc0RlZmF1bHQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBHdGtCb3JkZXIqIGJv
cmRlclB0ciA9IDA7CisgICAgICAgIEd0a0JvcmRlciBib3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsK
KworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImRlZmF1bHQt
Ym9yZGVyIiwgJmJvcmRlclB0ciwgTlVMTCk7CisgICAgICAgIGlmIChib3JkZXJQdHIpIHsKKyAg
ICAgICAgICAgIGJvcmRlciA9ICpib3JkZXJQdHI7CisgICAgICAgICAgICBndGtfYm9yZGVyX2Zy
ZWUoYm9yZGVyUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1dHRvblJlY3QubW92ZShib3Jk
ZXIubGVmdCwgYm9yZGVyLnRvcCk7CisgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYnV0dG9u
UmVjdC53aWR0aCgpIC0gKGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0KSk7CisgICAgICAgIGJ1
dHRvblJlY3Quc2V0SGVpZ2h0KGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoYm9yZGVyLnRvcCArIGJv
cmRlci5ib3R0b20pKTsKKworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgR1RLX1NUWUxFX0NMQVNTX0RFRkFVTFQpOworICAgIH0KKworICAgIGd0a19yZW5kZXJf
YmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgp
LCBidXR0b25SZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCks
IGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkp
OworCisgICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBn
aW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBnYm9vbGVhbiBkaXNwbGFjZUZvY3Vz
LCBpbnRlcmlvckZvY3VzOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwKKyAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAg
ICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKKyAgICAgICAgICAgICJpbnRlcmlv
ci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAorICAgICAgICAgICAgImRpc3BsYWNlLWZvY3VzIiwg
JmRpc3BsYWNlRm9jdXMsIDApOworCisgICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7CisgICAg
ICAgICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7CisgICAgICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdz
KSwgJmJvcmRlcldpZHRoKTsKKworICAgICAgICAgICAgYnV0dG9uUmVjdCA9IEludFJlY3QoYnV0
dG9uUmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNQYWQsIGJ1dHRvblJlY3QueSgp
ICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNQYWQsCisgICAgICAgICAgICAgICAgYnV0dG9uUmVj
dC53aWR0aCgpIC0gKDIgKiBmb2N1c1BhZCArIGJvcmRlcldpZHRoLmxlZnQgKyBib3JkZXJXaWR0
aC5yaWdodCksCisgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC5oZWlnaHQoKSAtICgyICogZm9j
dXNQYWQgKyBib3JkZXJXaWR0aC50b3AgKyBib3JkZXJXaWR0aC5ib3R0b20pKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBidXR0b25SZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3Vz
UGFkKTsKKworICAgICAgICBpZiAoZGlzcGxhY2VGb2N1cyAmJiB0aGVtZS0+aXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpIHsKKyAgICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOworICAg
ICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFk7CisgICAgICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxh
Y2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAorICAgICAgICAgICAgICAgICJjaGlsZC1k
aXNwbGFjZW1lbnQteSIsICZjaGlsZERpc3BsYWNlbWVudFksIDApOworICAgICAgICAgICAgYnV0
dG9uUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1lbnRZKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVj
dC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisgICAgfQor
fQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQ
RV9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1Rl
eHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICByZW5kZXJCdXR0b24odGhpcywgY29udGV4dCwg
cmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
cmVzdG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQg
Z2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIs
IGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQoreworICAgIC8vIElmIHRoaXMgbWVudSBsaXN0
IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQorICAgIC8vIGRv
bid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNl
cy4KKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRl
eHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlM
RV9DTEFTU19CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29u
dGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHls
ZS0+ZGlyZWN0aW9uKCkpKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsKKworICAgIGdi
b29sZWFuIGludGVyaW9yRm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgImludGVyaW9y
LWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCisgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsCisgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCAwKTsKKyAgICBm
b2N1cyA9IGludGVyaW9yRm9jdXMgPyBmb2N1c1dpZHRoICsgZm9jdXNQYWQgOiAwOworCisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOworCisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24o
KSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0
aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRv
ciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7CisgICAgZ2ludCBzZXBhcmF0b3JX
aWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAg
IndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgInNlcGFyYXRvci13
aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwgMCk7CisKKyAgICAvLyBHVEsrIGFsd2F5cyB1c2VzIGJv
cmRlci5sZWZ0LCByZWdhcmRsZXNzIG9mIHRleHQgZGlyZWN0aW9uLiBTZWUgZ3Rrc2VwZXJhdG9y
LmMuCisgICAgaWYgKCF3aWRlU2VwYXJhdG9ycykKKyAgICAgICAgc2VwYXJhdG9yV2lkdGggPSBi
b3JkZXIubGVmdDsKKworICAgIHNlcGFyYXRvciA9IHNlcGFyYXRvcldpZHRoOworCisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKK30KKworaW50IFJlbmRlclRoZW1lR3Rr
Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorewor
ICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1
c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhz
dHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQg
bGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoOworICAgIGlmIChzdHlsZS0+ZGly
ZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJy
b3dTaXplOworICAgIHJldHVybiBsZWZ0OworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEd0
a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRo
ID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwg
Ym9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgcmlnaHQg
PSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rp
b24oKSA9PSBMVFIpCisgICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dT
aXplOworICAgIHJldHVybiByaWdodDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cElu
dGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgR3RrQm9y
ZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAw
LCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3Jk
ZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVybiBib3JkZXJX
aWR0aC50b3AgKyBmb2N1c1dpZHRoOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBHdGtC
b3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9
IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJv
cmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAgcmV0dXJuIGJvcmRl
cldpZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGNhaXJvX3QqIGNhaXJvQ29u
dGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBH
dGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+
KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwor
CisgICAgLy8gUGFpbnQgdGhlIGJ1dHRvbi4KKyAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0
eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NhdmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfZGlyZWN0aW9uKGJ1dHRvblN0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVf
Q0xBU1NfQlVUVE9OKTsKKyAgICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0
LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisKKyAgICAvLyBHZXQgdGhlIGlubmVy
IHJlY3RhbmdsZS4KKyAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIEd0a0JvcmRl
ciogaW5uZXJCb3JkZXJQdHIgPSAwOworICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwg
MSwgMSwgMSB9OworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNv
bnRleHQsCisgICAgICAgICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXJQdHIsCisgICAgICAg
ICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICJmb2N1cy1wYWRkaW5n
IiwgJmZvY3VzUGFkLCAwKTsKKyAgICBpZiAoaW5uZXJCb3JkZXJQdHIpIHsKKyAgICAgICAgaW5u
ZXJCb3JkZXIgPSAqaW5uZXJCb3JkZXJQdHI7CisgICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5l
ckJvcmRlclB0cik7CisgICAgfQorCisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOworICAgIEd0
a1N0YXRlRmxhZ3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5
bGVDb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGJ1dHRvblN0eWxl
Q29udGV4dCwgc3RhdGUsICZib3JkZXJXaWR0aCk7CisKKyAgICBmb2N1c1dpZHRoICs9IGZvY3Vz
UGFkOworICAgIEludFJlY3QgaW5uZXJSZWN0KHJlY3QueCgpICsgaW5uZXJCb3JkZXIubGVmdCAr
IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoLAorICAgICAgICByZWN0LnkoKSArIGlubmVy
Qm9yZGVyLnRvcCArIGJvcmRlcldpZHRoLnRvcCArIGZvY3VzV2lkdGgsCisgICAgICAgIHJlY3Qu
d2lkdGgoKSAtIGJvcmRlcldpZHRoLmxlZnQgLSBib3JkZXJXaWR0aC5yaWdodCAtIGlubmVyQm9y
ZGVyLmxlZnQgLSBpbm5lckJvcmRlci5yaWdodCAtICgyICogZm9jdXNXaWR0aCksCisgICAgICAg
IHJlY3QuaGVpZ2h0KCkgLSBib3JkZXJXaWR0aC50b3AgLSBib3JkZXJXaWR0aC5ib3R0b20gLSBp
bm5lckJvcmRlci50b3AgLSBpbm5lckJvcmRlci5ib3R0b20gLSAoMiAqIGZvY3VzV2lkdGgpKTsK
KworICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBnaW50IGNoaWxk
RGlzcGxhY2VtZW50WDsKKyAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFk7CisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCisgICAgICAg
ICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAorICAgICAg
ICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwgMCk7Cisg
ICAgICAgIGlubmVyUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1l
bnRZKTsKKyAgICB9CisgICAgaW5uZXJSZWN0LnNldFdpZHRoKG1heCgxLCBpbm5lclJlY3Qud2lk
dGgoKSkpOworICAgIGlubmVyUmVjdC5zZXRIZWlnaHQobWF4KDEsIGlubmVyUmVjdC5oZWlnaHQo
KSkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShidXR0b25TdHlsZUNvbnRleHQp
OworCisgICAgLy8gUGFpbnQgdGhlIGFycm93LgorICAgIEd0a1N0eWxlQ29udGV4dCogYXJyb3dT
dHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQVJST1cpOworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NhdmUoYXJyb3dTdHlsZUNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihhcnJvd1N0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdyIpOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShhcnJvd1N0eWxlQ29udGV4dCwgImFycm93LXNjYWxpbmci
LCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKKworICAgIEludFNpemUgYXJyb3dTaXplKG1pbkFycm93
U2l6ZSwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICBGbG9hdFBvaW50IGFycm93UG9zaXRpb24o
aW5uZXJSZWN0LmxvY2F0aW9uKCkpOworICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElS
X0xUUikKKyAgICAgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKGlubmVyUmVjdC53aWR0aCgpIC0gYXJy
b3dTaXplLndpZHRoKCksIDApOworCisgICAgLy8gR1RLKyBhY3R1YWxseSBmZXRjaGVzIHRoZSB4
YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgZnJvbSB0aGUgd2lkZ2V0LCBidXQgc2luY2Ugd2UKKyAg
ICAvLyBkb24ndCBoYXZlIGEgd2lkZ2V0IGhlcmUsIHdlIGFyZSBqdXN0IHVzaW5nIHRoZSBkZWZh
dWx0IHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBvZiAwLjUuCisgICAgZ2ludCBleHRlbnQgPSBz
dGQ6Om1pbihhcnJvd1NpemUud2lkdGgoKSwgYXJyb3dTaXplLmhlaWdodCgpKSAqIGFycm93U2Nh
bGluZzsKKyAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoKGFycm93U2l6ZS53aWR0aCgpIC0gZXh0ZW50
KSAvIDIsIChhcnJvd1NpemUuaGVpZ2h0KCkgLSBleHRlbnQpIC8gMik7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoYXJyb3dTdHlsZUNvbnRleHQsIHN0YXRlKTsKKyAgICBndGtf
cmVuZGVyX2Fycm93KGFycm93U3R5bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsIEdfUEksIGFycm93
UG9zaXRpb24ueCgpLCBhcnJvd1Bvc2l0aW9uLnkoKSwgZXh0ZW50KTsKKworICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUoYXJyb3dTdHlsZUNvbnRleHQpOworCisgICAgLy8gUGFpbnQgdGhl
IHNlcGFyYXRvciBpZiBuZWVkZWQuCisgICAgR3RrU3R5bGVDb250ZXh0KiBzZXBhcmF0b3JTdHls
ZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgZGlyZWN0aW9u
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc2VwYXJhdG9yU3R5bGVDb250ZXh0
LCAic2VwYXJhdG9yIik7CisKKyAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsKKyAgICBnaW50
IHNlcGFyYXRvcldpZHRoOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShzZXBhcmF0
b3JTdHlsZUNvbnRleHQsCisgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRv
cnMsCisgICAgICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsIDApOworICAg
IGlmICh3aWRlU2VwYXJhdG9ycyAmJiAhc2VwYXJhdG9yV2lkdGgpIHsKKyAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfcmVzdG9yZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKHNlcGFy
YXRvclN0eWxlQ29udGV4dCwgc3RhdGUpOworICAgIEludFBvaW50IHNlcGFyYXRvclBvc2l0aW9u
KGFycm93UG9zaXRpb24ueCgpLCBpbm5lclJlY3QueSgpKTsKKyAgICBpZiAod2lkZVNlcGFyYXRv
cnMpIHsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAg
ICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgtc2VwYXJhdG9yV2lkdGgsIDApOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0
aCgpLCAwKTsKKworICAgICAgICBndGtfcmVuZGVyX2ZyYW1lKHNlcGFyYXRvclN0eWxlQ29udGV4
dCwgY2Fpcm9Db250ZXh0LAorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBh
cmF0b3JQb3NpdGlvbi55KCksCisgICAgICAgICAgICBzZXBhcmF0b3JXaWR0aCwgaW5uZXJSZWN0
LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVDb250ZXh0
LCBzdGF0ZSwgJnBhZGRpbmcpOworICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOworICAgICAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUs
ICZib3JkZXIpOworCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikK
KyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQgKyBib3Jk
ZXIubGVmdCksIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlv
bi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgICAgICBjYWlyb19zYXZlKGNhaXJv
Q29udGV4dCk7CisKKyAgICAgICAgLy8gQW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0aGUgc2VwYXJh
dG9yIGJsZWVkaW5nIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgYmVjYXVzZSBv
ZiBzdWJwaXhlbCBwb3NpdGlvbmluZy4KKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29u
dGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksIGJvcmRl
ci5sZWZ0LCBpbm5lclJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19jbGlwKGNhaXJvQ29u
dGV4dCk7CisgICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNh
aXJvQ29udGV4dCwKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9y
UG9zaXRpb24ueSgpLAorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBpbm5lclJl
Y3QubWF4WSgpKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOworICAgIH0K
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKKworICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQorICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OworCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJ
bmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAoaXNGb2N1c2VkKHJlbmRl
ck9iamVjdCkgJiYgaXNFbmFibGVkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgZ2Jvb2xlYW4g
aW50ZXJpb3JGb2N1czsKKyAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAgICAiaW50
ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICJmb2N1cy1saW5lLXdp
ZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1Bh
ZCwgMCk7CisgICAgICAgIGlmICghaW50ZXJpb3JGb2N1cykgeworICAgICAgICAgICAgSW50UmVj
dCBmb2N1c1JlY3QocmVjdCk7CisgICAgICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShmb2N1c1dp
ZHRoICsgZm9jdXNQYWQpOworICAgICAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgICAgICAg
ICAgZm9jdXNSZWN0LngoKSwgZm9jdXNSZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3Vz
UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4
dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9p
ZCBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0
LCBDb250cm9sUGFydCBwYXJ0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhj
b250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0NBTEUpOworICAgIGlmIChwYXJ0ID09IFNsaWRlckhv
cml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19I
T1JJWk9OVEFMKTsKKyAgICBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBw
YXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpOworICAgIEFTU0VSVF9VTlVTRUQocGFydCwgcGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFy
dCB8fCBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xp
ZGVyUGFydCk7CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfU0NBTEUpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGd0a1RleHRE
aXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIGFwcGx5
U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7CisKKyAg
ICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRl
ck9iamVjdCkpCisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBH
VEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSk7CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAorICAg
ICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cisg
ICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCksCisgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKworICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewor
ICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwg
JmZvY3VzV2lkdGgsCisgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgMCk7
CisgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICBmb2N1c1JlY3QuaW5m
bGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNv
bnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKKyAgICAg
ICAgICAgIGZvY3VzUmVjdC54KCksIGZvY3VzUmVjdC55KCksIGZvY3VzUmVjdC53aWR0aCgpLCBm
b2N1c1JlY3QuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoY29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBDb250cm9sUGFy
dCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgQVNTRVJU
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOworCisg
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1ND
QUxFKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKyAgICBhcHBseVNsaWRlclN0eWxlQ29u
dGV4dENsYXNzZXMoY29udGV4dCwgcGFydCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2Ns
YXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TTElERVIpOworCisgICAgZ3VpbnQgZmxhZ3Mg
PSAwOworICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRy
b2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5T
SVRJVkU7CisgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZs
YWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgIGlmIChpc1ByZXNzZWQocmVuZGVy
T2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZs
YWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9zbGlkZXIoY29udGV4dCwgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwKKyAgICAgICAgcGFydCA9PSBTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0ID8gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwgOiBHVEtfT1JJRU5UQVRJ
T05fVkVSVElDQUwpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAg
Q29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIGlmIChwYXJ0ID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAgIGFkanVz
dE1lZGlhU2xpZGVyVGh1bWJTaXplKHN0eWxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorCisgICAgZ2ludCBzbGlkZXJXaWR0aCwgc2xpZGVyTGVuZ3RoOworICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpLAorICAg
ICAgICAic2xpZGVyLXdpZHRoIiwgJnNsaWRlcldpZHRoLAorICAgICAgICAic2xpZGVyLWxlbmd0
aCIsICZzbGlkZXJMZW5ndGgsIDApOworICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgs
IEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBG
aXhlZCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChwYXJ0ID09IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQp
OworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworfQorCisjaWYg
RU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dy
ZXNzQmFyKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQ
cm9ncmVzcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9QUk9HUkVTU19CQVIpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7CisKKyAgICBndGtfcmVu
ZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwor
CisKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFk
ZGluZyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwor
ICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KHJlY3QueCgpICsgcGFkZGluZy5sZWZ0LCByZWN0Lnko
KSArIHBhZGRpbmcudG9wLAorICAgICAgICByZWN0LndpZHRoKCkgLSAocGFkZGluZy5sZWZ0ICsg
cGFkZGluZy5yaWdodCksCisgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSAocGFkZGluZy50b3AgKyBw
YWRkaW5nLmJvdHRvbSkpOworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpjYWxj
dWxhdGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOworCisgICAgaWYg
KCFwcm9ncmVzc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICBndGtfcmVuZGVyX2FjdGl2aXR5KGNv
bnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jl
c3NSZWN0LngoKSwgcHJvZ3Jlc3NSZWN0LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dy
ZXNzUmVjdC5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRl
eHQpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitzdGF0aWMgZ2ludCBzcGluQnV0
dG9uQXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb25zdCBQYW5n
b0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldChjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgImZvbnQiLCAmZm9u
dERlc2NyaXB0aW9uLCBOVUxMKTsKKyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNj
cmlwdGlvbl9nZXRfc2l6ZShmb250RGVzY3JpcHRpb24pOworICAgIGdpbnQgYXJyb3dTaXplID0g
bWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUpOworCisg
ICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4uCit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRP
Tik7CisKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
cGFkZGluZyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcp
OworCisgICAgaW50IHdpZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRp
bmcubGVmdCArIHBhZGRpbmcucmlnaHQ7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0
aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkp
OworfQorCitzdGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhl
bWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJv
d1R5cGUgYXJyb3dUeXBlKQoreworICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQ
IHx8IGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTik7CisKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zYXZlKGNvbnRleHQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0
LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0
aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2RpcmVjdGlvbihjb250ZXh0KTsKKyAgICBndWlu
dCBzdGF0ZSA9IHN0YXRpY19jYXN0PGd1aW50PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUo
Y29udGV4dCkpOworICAgIGlmICghKHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUp
KSB7CisgICAgICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAg
ICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBC
dXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgICAgIHx8IChhcnJv
d1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQcmVz
c2VkKHJlbmRlck9iamVjdCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9G
TEFHX0FDVElWRTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9i
amVjdCkpIHsKKyAgICAgICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0
aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAg
ICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5V
cEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpKQorICAgICAgICAgICAgICAgIHN0YXRl
IHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgICAgICB9CisgICAgfQorICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdz
PihzdGF0ZSkpOworCisgICAgLy8gUGFpbnQgYnV0dG9uLgorICAgIEludFJlY3QgYnV0dG9uUmVj
dChyZWN0KTsKKyAgICBndWludCBqdW5jdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9qdW5j
dGlvbl9zaWRlcyhjb250ZXh0KTsKKyAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkK
KyAgICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX0JPVFRPTTsKKyAgICBlbHNlIHsKKyAg
ICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX1RPUDsKKyAgICAgICAgYnV0dG9uUmVjdC5t
b3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICB9CisgICAgYnV0dG9uUmVjdC5zZXRIZWln
aHQocmVjdC5oZWlnaHQoKSAvIDIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9qdW5jdGlv
bl9zaWRlcyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlvblNpZGVzPihqdW5jdGlvbikp
OworCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgp
LCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5k
ZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwg
YnV0dG9uUmVjdC5oZWlnaHQoKSk7CisKKyAgICAvLyBQYWludCBhcnJvdyBjZW50ZXJlZCBpbnNp
ZGUgYnV0dG9uLgorICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBndGtzcGluYnV0dG9uLmMg
Y29kZS4KKyAgICBJbnRSZWN0IGFycm93UmVjdDsKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlm
IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKSB7CisgICAgICAgIGFuZ2xlID0gMDsKKyAgICAg
ICAgYXJyb3dSZWN0LnNldFkocmVjdC55KCkpOworICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0
KHJlY3QuaGVpZ2h0KCkgLyAyIC0gMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5nbGUgPSBH
X1BJOworICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSArIGJ1dHRvblJlY3QueSgpKTsK
KyAgICAgICAgYXJyb3dSZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gYXJyb3dSZWN0Lnko
KSAtIDIpOworICAgIH0KKyAgICBhcnJvd1JlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0gMyk7
CisgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICBhcnJvd1Jl
Y3Quc2V0WChyZWN0LngoKSArIDEpOworICAgIGVsc2UKKyAgICAgICAgYXJyb3dSZWN0LnNldFgo
cmVjdC54KCkgKyAyKTsKKworICAgIGdpbnQgd2lkdGggPSBhcnJvd1JlY3Qud2lkdGgoKSAvIDI7
CisgICAgd2lkdGggLT0gd2lkdGggJSAyIC0gMTsgLy8gRm9yY2Ugb2RkLgorICAgIGdpbnQgaGVp
Z2h0ID0gKHdpZHRoICsgMSkgLyAyOworCisgICAgYXJyb3dSZWN0Lm1vdmUoKGFycm93UmVjdC53
aWR0aCgpIC0gd2lkdGgpIC8gMiwgKGFycm93UmVjdC5oZWlnaHQoKSAtIGhlaWdodCkgLyAyKTsK
KyAgICBndGtfcmVuZGVyX2Fycm93KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UmVjdC54KCksIGFycm93UmVjdC55KCksIHdp
ZHRoKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfU1BJTl9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7
CisKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHRE
aXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGly
ZWN0aW9uKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5k
ZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZs
YWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VE
OworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9jbGFz
cyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOworCisgICAgcGFpbnRTcGluQXJyb3dC
dXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19B
UlJPV19VUCk7CisgICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVy
T2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19ET1dOKTsKKworICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dS
ZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5
cGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2lu
dCBpY29uU2l6ZSkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNv
bnRleHQod2lkZ2V0VHlwZSk7CisgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19zdHlsZV9j
b250ZXh0X2xvb2t1cF9pY29uX3NldChjb250ZXh0LCBpY29uTmFtZSk7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlm
IChzdGF0ZSA9PSBHVEtfU1RBVEVfUFJFTElHSFQpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFU
RV9GTEFHX1BSRUxJR0hUOworICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJ
VElWRSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oZmxhZ3MpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOworICAgIEdk
a1BpeGJ1ZiogaWNvbiA9IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbl9waXhidWYoaWNvblNldCwg
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSk7CisKKyAgICBndGtf
c3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGFkb3B0R1JlZihp
Y29uKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgJmdka1JHQkFDb2xvcik7
CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdk
a1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5k
X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FD
VElWRSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRF
X0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7
Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZ
KSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2Rr
UkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJveFNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX1RSRUVfVklFVyksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdC
QUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVt
ZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFj
a2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NU
QVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9y
OworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJ
RVcpLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJu
IGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJv
eFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JB
Q29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3Ip
OworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpz
eXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFD
b2xvcjsKKworICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVCdXR0
b250ZXh0OgorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX0JVVFRPTiksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmZ2Rr
UkdCQUNvbG9yKTsKKyAgICAgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKKyAgICBjYXNlIENTU1Zh
bHVlQ2FwdGlvbnRleHQ6CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigw
KSwgJmdka1JHQkFDb2xvcik7CisgICAgICAgIHJldHVybiBnZGtSR0JBQ29sb3I7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlk
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFHVEtf
QVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTkw
ZjM1Y2E2NmQyMjBiNDBkNGY2M2Y3ZDlmNmM5ODQyNzU3NzcxZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUnVuTG9vcC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUnVuTG9vcDo6UnVuTG9vcCgpCit7CisgICAgLy8gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgp
IGRvZXNuJ3QgYWRkIGFuIGV4dHJhIHJlZmVyZW5jZS4KKyAgICBtX3J1bkxvb3BDb250ZXh0ID0g
aXNNYWluVGhyZWFkKCkgPyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgOiBhZG9wdEdSZWYoZ19t
YWluX2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VSVChtX3J1bkxvb3BDb250ZXh0KTsKKyAgICBH
UmVmUHRyPEdNYWluTG9vcD4gaW5uZXJtb3N0TG9vcCA9IGFkb3B0R1JlZihnX21haW5fbG9vcF9u
ZXcobV9ydW5Mb29wQ29udGV4dC5nZXQoKSwgRkFMU0UpKTsKKyAgICBBU1NFUlQoaW5uZXJtb3N0
TG9vcCk7CisgICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVuZChpbm5lcm1vc3RMb29wKTsKK30K
KworUnVuTG9vcDo6flJ1bkxvb3AoKQoreworICAgIGZvciAoaW50IGkgPSBtX3J1bkxvb3BNYWlu
TG9vcHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKCFnX21haW5fbG9v
cF9pc19ydW5uaW5nKG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BNYWluTG9vcHNbaV0u
Z2V0KCkpOworICAgIH0KK30KKwordm9pZCBSdW5Mb29wOjpydW4oKQoreworICAgIFJ1bkxvb3Aq
IG1haW5SdW5Mb29wID0gUnVuTG9vcDo6Y3VycmVudCgpOworICAgIEdNYWluTG9vcCogaW5uZXJt
b3N0TG9vcCA9IG1haW5SdW5Mb29wLT5pbm5lcm1vc3RMb29wKCk7CisgICAgaWYgKCFnX21haW5f
bG9vcF9pc19ydW5uaW5nKGlubmVybW9zdExvb3ApKSB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1
bihpbm5lcm1vc3RMb29wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENyZWF0
ZSBhbmQgcnVuIGEgbmVzdGVkIGxvb3AgaWYgdGhlIGlubmVybW9zdCBvbmUgd2FzIGFscmVhZHkg
cnVubmluZy4KKyAgICBHTWFpbkxvb3AqIG5lc3RlZE1haW5Mb29wID0gZ19tYWluX2xvb3BfbmV3
KDAsIEZBTFNFKTsKKyAgICBtYWluUnVuTG9vcC0+cHVzaE5lc3RlZE1haW5Mb29wKG5lc3RlZE1h
aW5Mb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obmVzdGVkTWFpbkxvb3ApOworICAgIG1haW5S
dW5Mb29wLT5wb3BOZXN0ZWRNYWluTG9vcCgpOworfQorCitHTWFpbkxvb3AqIFJ1bkxvb3A6Omlu
bmVybW9zdExvb3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBh
bHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gbV9ydW5Mb29wTWFpbkxvb3BzWzBdLmdldCgpOworfQorCit2b2lkIFJ1
bkxvb3A6OnB1c2hOZXN0ZWRNYWluTG9vcChHTWFpbkxvb3AqIG5lc3RlZExvb3ApCit7CisgICAg
Ly8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KKyAgICBB
U1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOworICAgIG1fcnVuTG9vcE1haW5M
b29wcy5hcHBlbmQoYWRvcHRHUmVmKG5lc3RlZExvb3ApKTsKK30KKwordm9pZCBSdW5Mb29wOjpw
b3BOZXN0ZWRNYWluTG9vcCgpCit7CisgICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hv
dWxkIGFsd2F5cyBiZSB0aGVyZS4KKyAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0Vt
cHR5KCkpOworICAgIG1fcnVuTG9vcE1haW5Mb29wcy5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQg
UnVuTG9vcDo6c3RvcCgpCit7CisgICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxk
IGFsd2F5cyBiZSB0aGVyZS4KKyAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5
KCkpOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBsYXN0TWFpbkxvb3AgPSBtX3J1bkxvb3BNYWlu
TG9vcHMubGFzdCgpOworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKGxhc3RNYWluTG9v
cC5nZXQoKSkpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobGFzdE1haW5Mb29wLmdldCgpKTsK
K30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6cXVldWVXb3JrKFJ1bkxvb3AqIHJ1bkxvb3ApCit7Cisg
ICAgcnVuTG9vcC0+cGVyZm9ybVdvcmsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQg
UnVuTG9vcDo6d2FrZVVwKCkKK3sKKyAgICBHUmVmUHRyPEdTb3VyY2U+IHNvdXJjZSA9IGFkb3B0
R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoc291
cmNlLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhzb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpx
dWV1ZVdvcmspLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLmdldCgpLCBt
X3J1bkxvb3BDb250ZXh0LmdldCgpKTsKKworICAgIGdfbWFpbl9jb250ZXh0X3dha2V1cChtX3J1
bkxvb3BDb250ZXh0LmdldCgpKTsKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2Uo
UnVuTG9vcCogcnVuTG9vcCkKKyAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV90aW1l
clNvdXJjZSgwKQoreworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQorewor
ICAgIHN0b3AoKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OmNsZWFyVGltZXJTb3Vy
Y2UoKQoreworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitnYm9vbGVhbiBSdW5Mb29wOjpU
aW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayhSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQor
eworICAgIEdTb3VyY2UqIGN1cnJlbnRUaW1lclNvdXJjZSA9IHRpbWVyLT5tX3RpbWVyU291cmNl
LmdldCgpOworICAgIGJvb2wgaXNSZXBlYXRpbmcgPSB0aW1lci0+aXNSZXBlYXRpbmcoKTsKKyAg
ICAvLyBUaGlzIGNhbiBjaGFuZ2UgdGhlIHRpbWVyU291cmNlIGJ5IHN0YXJ0aW5nIGEgbmV3IHRp
bWVyIHdpdGhpbiB0aGUgY2FsbGJhY2suCisgICAgdGltZXItPmZpcmVkKCk7CisgICAgaWYgKCFp
c1JlcGVhdGluZyAmJiBjdXJyZW50VGltZXJTb3VyY2UgPT0gdGltZXItPm1fdGltZXJTb3VyY2Uu
Z2V0KCkpCisgICAgICAgIHRpbWVyLT5jbGVhclRpbWVyU291cmNlKCk7CisgICAgcmV0dXJuIGlz
UmVwZWF0aW5nOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQoZG91YmxlIGZp
cmVJbnRlcnZhbCwgYm9vbCByZXBlYXQpCit7CisgICAgaWYgKG1fdGltZXJTb3VyY2UpCisgICAg
ICAgIHN0b3AoKTsKKworICAgIG1fdGltZXJTb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3Nv
dXJjZV9uZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KGZpcmVJbnRlcnZhbCAqIDEwMDApKSk7CisgICAg
bV9pc1JlcGVhdGluZyA9IHJlcGVhdDsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1l
clNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OlRp
bWVyQmFzZTo6dGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgZ19zb3VyY2VfYXR0
YWNoKG1fdGltZXJTb3VyY2UuZ2V0KCksIG1fcnVuTG9vcC0+bV9ydW5Mb29wQ29udGV4dC5nZXQo
KSk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1f
dGltZXJTb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291cmNlX2Rlc3Ryb3kobV90
aW1lclNvdXJjZS5nZXQoKSk7CisgICAgY2xlYXJUaW1lclNvdXJjZSgpOworfQorCitib29sIFJ1
bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbWVy
U291cmNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3Jv
bGxWaWV3R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2MxZjU4ZjVlY2Q0MDM4ZDY5MTc4N2FmOTdhNWRi
MzAyNzNiNTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxW
aWV3R3RrLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIENvbGxhYm9yYSBMdGQuCisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgorCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZVNj
cm9sbGJhckd0ay5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBib29sIHNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcihjb25zdCBTY3JvbGxW
aWV3KiBzY3JvbGxWaWV3KQoreworICAgIC8vIEludGVyaW9yIGZyYW1lIFNjcm9sbFZpZXdzIG5l
dmVyIGhhdmUgTWFpbkZyYW1lU2Nyb2xsYmFycy4KKyAgICBpZiAoc2Nyb2xsVmlldy0+cGFyZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBo
b3N0IHdpbmRvdyBvciBhIGNvbnRhaW5pbmcgd2lkZ2V0IChhbGEgV2ViS2l0MikuCisgICAgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdyA9IHNjcm9sbFZpZXctPmhvc3RXaW5kb3coKTsKKyAgICBpZiAo
IWhvc3RXaW5kb3cgfHwgIWhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBnYm9vbGVhbiBzZWxmU2Nyb2xsaW5nID0gRkFMU0U7Cisg
ICAgZ19vYmplY3RfZ2V0KGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgpLCAic2VsZi1z
Y3JvbGxpbmciLCAmc2VsZlNjcm9sbGluZywgTlVMTCk7CisgICAgcmV0dXJuICFzZWxmU2Nyb2xs
aW5nOworfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsVmlldzo6Y3JlYXRlU2Nyb2xs
YmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGlmIChzaG91bGRD
cmVhdGVNYWluRnJhbWVTY3JvbGxiYXIodGhpcykpCisgICAgICAgIHJldHVybiBNYWluRnJhbWVT
Y3JvbGxiYXJHdGs6OmNyZWF0ZSh0aGlzLCBvcmllbnRhdGlvbik7CisgICAgcmV0dXJuIFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Ny
b2xsYmFyKTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoVmlz
aWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbikgY29u
c3QKK3sKKyAgICBib29sIGluY2x1ZGVTY3JvbGxiYXJzID0gc2Nyb2xsYmFySW5jbHVzaW9uID09
IEluY2x1ZGVTY3JvbGxiYXJzOworCisgICAgLy8gSWYgd2UgYXJlIGFuIGludGVyaW9yIGZyYW1l
IHNjcm9sbGJhciBvciBhcmUgaW4gc29tZSBzb3J0IG9mIHRyYW5zaXRpb24KKyAgICAvLyBzdGF0
ZSwganVzdCBjYWxjdWxhdGUgb3VyIHNpemUgYmFzZWQgb24gd2hhdCB0aGUgR1RLKyB0aGVtZSBz
YXlzIHRoZQorICAgIC8vIHNjcm9sbGJhciB3aWR0aCBzaG91bGQgYmUuCisgICAgaWYgKCFzaG91
bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIodGhpcykpIHsKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0
KCkpLAorICAgICAgICAgICAgSW50U2l6ZShtYXgoMCwgd2lkdGgoKSAtICh2ZXJ0aWNhbFNjcm9s
bGJhcigpICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRo
KCkgOiAwKSksCisgICAgICAgICAgICBtYXgoMCwgaGVpZ2h0KCkgLSAoaG9yaXpvbnRhbFNjcm9s
bGJhcigpICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVp
Z2h0KCkgOiAwKSkpKTsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCBoYXZlIGEgcGFyZW50LCBz
byB3ZSBhcmUgdGhlIG1haW4gZnJhbWUgYW5kIHRodXMgaGF2ZQorICAgIC8vIGEgcGFyZW50IHdp
ZGdldCB3aGljaCB3ZSBjYW4gdXNlIHRvIG1lYXN1cmUgdGhlIHZpc2libGUgcmVnaW9uLgorICAg
IEd0a1dpZGdldCogbWVhc3VyZWRXaWRnZXQgPSBob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpOworICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gZ3RrX3dpZGdldF9nZXRfcGFy
ZW50KG1lYXN1cmVkV2lkZ2V0KTsKKworICAgIC8vIFdlIG1heSBub3QgYmUgaW4gYSB3aWRnZXQg
dGhhdCBkaXNwbGF5cyBzY3JvbGxiYXJzLCBidXQgd2UgbWF5CisgICAgLy8gaGF2ZSBvdGhlciBr
aW5kcyBvZiBkZWNvcmF0aW9uIHRoYXQgbWFrZSB1cyBzbWFsbGVyLgorICAgIGlmIChwYXJlbnRX
aWRnZXQgJiYgaW5jbHVkZVNjcm9sbGJhcnMpCisgICAgICAgIG1lYXN1cmVkV2lkZ2V0ID0gcGFy
ZW50V2lkZ2V0OworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRn
ZXRfZ2V0X2FsbG9jYXRpb24obWVhc3VyZWRXaWRnZXQsICZhbGxvY2F0aW9uKTsKKyAgICByZXR1
cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNl
dC5oZWlnaHQoKSksCisgICAgICAgIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlv
bi5oZWlnaHQpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3Jv
bGxiYXJNb2RlIGhvcml6b250YWxNb2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwgYm9v
bCBob3Jpem9udGFsTG9jaywgYm9vbCB2ZXJ0aWNhbExvY2spCit7CisgICAgLy8gRklYTUU6IFJl
c3RydWN0dXJlIHRoZSBTY3JvbGxWaWV3IGFic3RyYWN0aW9uIHNvIHRoYXQgd2UgZG8gbm90IGhh
dmUgdG8KKyAgICAvLyBjb3B5IHRoaXMgdmVyYmF0aW0gZnJvbSBTY3JvbGxWaWV3LmNwcC4gVW50
aWwgdGhlbiwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzCisgICAgLy8gaXMga2VwdCBpbiBzeW5j
LgorICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKworICAgIGlmIChob3Jpem9udGFsTW9k
ZSAhPSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpICYmICFtX2hvcml6b250YWxTY3JvbGxiYXJM
b2NrKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBob3Jpem9udGFsTW9k
ZTsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgIH0KKworICAgIGlmICh2ZXJ0aWNh
bE1vZGUgIT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKCkgJiYgIW1fdmVydGljYWxTY3JvbGxiYXJM
b2NrKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlID0gdmVydGljYWxNb2RlOwor
ICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGhvcml6b250YWxM
b2NrKQorICAgICAgICBzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTG9jaygpOworCisgICAgaWYgKHZl
cnRpY2FsTG9jaykKKyAgICAgICAgc2V0VmVydGljYWxTY3JvbGxiYXJMb2NrKCk7CisKKyAgICBp
ZiAobmVlZHNVcGRhdGUpCisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkp
OworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBvcnQgcG9saWN5IGNoYW5nZXMgb24gU2Ny
b2xsVmlldydzIHVubGVzcyB0aGlzCisgICAgLy8gb25lIGhhcyBhbiBhZGp1c3RtZW50IGF0dGFj
aGVkIGFuZCBpdCBpcyBhIG1haW4gZnJhbWUuCisgICAgaWYgKHBhcmVudCgpIHx8ICFpc0ZyYW1l
VmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3IgZnJhbWVzIHRoYXQgZG8gaGF2
ZSBhZGp1c3RtZW50cyBhdHRhY2hlZCwgd2Ugd2FudCB0byByZXBvcnQKKyAgICAvLyBwb2xpY3kg
Y2hhbmdlcywgc28gdGhhdCB0aGV5IG1heSBiZSBhcHBsaWVkIHRvIHRoZSB3aWRnZXQgdG8KKyAg
ICAvLyB3aGljaCB0aGUgV2ViVmlldydzIGNvbnRhaW5lciAoZS5nLiBHdGtTY3JvbGxlZFdpbmRv
dykuCisgICAgaWYgKGhvc3RXaW5kb3coKSkKKyAgICAgICAgaG9zdFdpbmRvdygpLT5zY3JvbGxi
YXJzTW9kZURpZENoYW5nZSgpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA4NjFjMDE2OWQ1OTViZWM0MjkxNjhmZWI5M2M3
N2UwYTdkM2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyVGhlbWVHdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5j
bHVkZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hT
ZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPiogZ1Njcm9sbGJhcnM7CisKK1Njcm9sbGJhclRoZW1l
KiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJU
aGVtZUd0ayB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCitTY3JvbGxiYXJUaGVtZUd0
azo6flNjcm9sbGJhclRoZW1lR3RrKCkKK3sKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6
cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAg
ICBpZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICBnU2Nyb2xsYmFycyA9IG5ldyBIYXNoU2V0PFNj
cm9sbGJhclRoZW1lQ2xpZW50Kj47CisgICAgZ1Njcm9sbGJhcnMtPmFkZChzY3JvbGxiYXIpOwor
fQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgZ1Njcm9sbGJhcnMtPnJlbW92ZShzY3Jv
bGxiYXIpOworICAgIGlmIChnU2Nyb2xsYmFycy0+aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0
ZSBnU2Nyb2xsYmFyczsKKyAgICAgICAgZ1Njcm9sbGJhcnMgPSAwOworICAgIH0KK30KKwordm9p
ZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCkKK3sK
KyAgICBpZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBVcGRhdGUg
dGhlIHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlvciBmcmFtZSBzY3JvbGxiYXIgd2lkZ2V0LiBU
aGUKKyAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGxiYXIgdGhlbSBjb2RlIGlzbid0
IHlldCBzbWFydCBlbm91Z2ggdG8gZ2V0CisgICAgLy8gdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGl0
IHBhaW50cy4KKyAgICBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj46Oml0ZXJhdG9yIGVu
ZCA9IGdTY3JvbGxiYXJzLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVD
bGllbnQqPjo6aXRlcmF0b3IgaXQgPSBnU2Nyb2xsYmFycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIgPSAoKml0KTsK
KworICAgICAgICAvLyBUb3AtbGV2ZWwgc2Nyb2xsYmFyIGkuZS4gc2Nyb2xsYmFycyB3aG8gaGF2
ZSBhIHBhcmVudCBTY3JvbGxWaWV3CisgICAgICAgIC8vIHdpdGggbm8gcGFyZW50IGFyZSBuYXRp
dmUsIGFuZCB0aHVzIGRvIG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQuCisgICAgICAgIGlmICghc2Ny
b2xsYmFyLT5wYXJlbnQoKSB8fCAhc2Nyb2xsYmFyLT5wYXJlbnQoKS0+cGFyZW50KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNr
bmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxi
YXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIHNjcm9sbGJhci0+cGFyZW50KCktPmhlaWdodCgp
IC0gdGhpY2tuZXNzLCBzY3JvbGxiYXItPndpZHRoKCksIHRoaWNrbmVzcykpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KHNjcm9sbGJh
ci0+cGFyZW50KCktPndpZHRoKCkgLSB0aGlja25lc3MsIDAsIHRoaWNrbmVzcywgc2Nyb2xsYmFy
LT5oZWlnaHQoKSkpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1
bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBUaGlzIG1ldGhv
ZCBpcyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0aW1pemF0aW9uIHRvIHNlZSBpZgor
ICAgIC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tpcHBlZC4gV2UgZG9uJ3QgaGF2ZSB0
byBiZSBleGFjdCBoZXJlLgorICAgIHJldHVybiB0aHVtYkxlbmd0aChzY3JvbGxiYXIpID4gMDsK
K30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQoreworICAg
IGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25FbmRQYXJ0
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25T
dGFydFBhcnQgJiYgIW1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKworICAgIGludCB4ID0gc2Nyb2xsYmFyLT54KCkgKyBtX3Ryb3VnaEJvcmRlcldp
ZHRoOworICAgIGludCB5ID0gc2Nyb2xsYmFyLT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwor
ICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsKKyAgICBpZiAocGFydCA9
PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gQmFja0J1dHRvbkVuZFBhcnQgKGFs
dGVybmF0ZSBidXR0b24pCisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSAr
IHNjcm9sbGJhci0+d2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUud2lk
dGgoKSksIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBWZXJ0aWNh
bFNjcm9sbGJhciBhbHRlcm5hdGUgYnV0dG9uCisgICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xs
YmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCAtICgy
ICogc2l6ZS5oZWlnaHQoKSksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK0lu
dFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK3sKKyAgICBpZiAo
cGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25TdGFy
dFBhcnQpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJh
cik7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSB7CisgICAgICAgIGludCB5ID0gc2Nyb2xsYmFyLT55KCkgKyBtX3Ryb3VnaEJvcmRlcldp
ZHRoOworICAgICAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCkKKyAgICAgICAg
ICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0g
c2l6ZS53aWR0aCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCwgeSwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKKworICAgICAgICAvLyBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IChhbHRlcm5h
dGUgYnV0dG9uKQorICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIG1fdHJv
dWdoQm9yZGVyV2lkdGggKyBzaXplLndpZHRoKCksIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7CisgICAgfQorCisgICAgLy8gVmVydGljYWxTY3JvbGxiYXIKKyAgICBpbnQgeCA9IHNj
cm9sbGJhci0+eCgpICsgbV90cm91Z2hCb3JkZXJXaWR0aDsKKyAgICBpZiAocGFydCA9PSBGb3J3
YXJkQnV0dG9uRW5kUGFydCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLT55
KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVy
V2lkdGgsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQorICAgIHJldHVybiBJbnRSZWN0KHgsIHNj
cm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUuaGVpZ2h0KCksIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6
OnRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBib29sKQoreworICAg
IC8vIFRoZSBwYWRkaW5nIGFsb25nIHRoZSB0aHVtYiBtb3ZlbWVudCBheGlzIGluY2x1ZGVzIHRo
ZSB0cm91Z2ggYm9yZGVyCisgICAgLy8gcGx1cyB0aGUgc2l6ZSBvZiBzdGVwcGVyIHNwYWNpbmcg
KHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBzdGVwcGVyIGFuZAorICAgIC8vIHRoZSBwbGFjZSB3aGVy
ZSB0aGUgdGh1bWIgc3RvcHMpLiBUaGVyZSBpcyBvZnRlbiBubyBzdGVwcGVyIHNwYWNpbmcuCisg
ICAgaW50IG1vdmVtZW50QXhpc1BhZGRpbmcgPSBtX3Ryb3VnaEJvcmRlcldpZHRoICsgbV9zdGVw
cGVyU3BhY2luZzsKKworICAgIC8vIFRoZSBmYXRuZXNzIG9mIHRoZSBzY3JvbGxiYXIgb24gdGhl
IG5vbi1tb3ZlbWVudCBheGlzLgorICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25l
c3Moc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKworICAgIGludCBzdGFydEJ1dHRvbnNPZmZz
ZXQgPSAwOworICAgIGludCBidXR0b25zV2lkdGggPSAwOworICAgIGlmIChtX2hhc0ZvcndhcmRC
dXR0b25TdGFydFBhcnQpIHsKKyAgICAgICAgc3RhcnRCdXR0b25zT2Zmc2V0ICs9IG1fc3RlcHBl
clNpemU7CisgICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXplOworICAgIH0KKyAg
ICBpZiAobV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7CisgICAgICAgIHN0YXJ0QnV0dG9uc09m
ZnNldCArPSBtX3N0ZXBwZXJTaXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVy
U2l6ZTsKKyAgICB9CisgICAgaWYgKG1faGFzQmFja0J1dHRvbkVuZFBhcnQpCisgICAgICAgIGJ1
dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXplOworICAgIGlmIChtX2hhc0ZvcndhcmRCdXR0b25F
bmRQYXJ0KQorICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKKworICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAg
ICAgICAvLyBPbmNlIHRoZSBzY3JvbGxiYXIgYmVjb21lcyBzbWFsbGVyIHRoYW4gdGhlIG5hdHVy
YWwgc2l6ZSBvZiB0aGUKKyAgICAgICAgLy8gdHdvIGJ1dHRvbnMsIHRoZSB0cmFjayBkaXNhcHBl
YXJzLgorICAgICAgICBpZiAoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHRoaWNrbmVzcykKKyAg
ICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9s
bGJhci0+eCgpICsgbW92ZW1lbnRBeGlzUGFkZGluZyArIHN0YXJ0QnV0dG9uc09mZnNldCwgc2Ny
b2xsYmFyLT55KCksCisgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgLSAoMiAqIG1vdmVt
ZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoLCB0aGlja25lc3MpOworICAgIH0KKworICAg
IGlmIChzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAqIHRoaWNrbmVzcykKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFy
LT55KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0LAorICAgICAg
ICB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRp
bmcpIC0gYnV0dG9uc1dpZHRoKTsKK30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1
bWJSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVu
Y29uc3RyYWluZWRUcmFja1JlY3QpCit7CisgICAgSW50UmVjdCB0cmFja1JlY3QgPSBjb25zdHJh
aW5UcmFja1JlY3RUb1RyYWNrUGllY2VzKHNjcm9sbGJhciwgdW5jb25zdHJhaW5lZFRyYWNrUmVj
dCk7CisgICAgaW50IHRodW1iUG9zID0gdGh1bWJQb3NpdGlvbihzY3JvbGxiYXIpOworICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0LngoKSArIHRodW1iUG9zLCB0cmFja1JlY3QueSgp
ICsgKHRyYWNrUmVjdC5oZWlnaHQoKSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRodW1iTGVuZ3Ro
KHNjcm9sbGJhciksIG1fdGh1bWJGYXRuZXNzKTsgCisKKyAgICAvLyBWZXJ0aWNhbFNjcm9sbGJh
cgorICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkg
LSBtX3RodW1iRmF0bmVzcykgLyAyLCB0cmFja1JlY3QueSgpICsgdGh1bWJQb3MsIG1fdGh1bWJG
YXRuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVt
ZUd0azo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAg
aWYgKGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgdGhlIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBiYXNl
ZCBvbiB0aGUgZGFtYWdlUmVjdAorICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBzY3JvbGxN
YXNrID0gTm9QYXJ0OworCisgICAgSW50UmVjdCBiYWNrQnV0dG9uU3RhcnRQYWludFJlY3Q7Cisg
ICAgSW50UmVjdCBiYWNrQnV0dG9uRW5kUGFpbnRSZWN0OworICAgIEludFJlY3QgZm9yd2FyZEJ1
dHRvblN0YXJ0UGFpbnRSZWN0OworICAgIEludFJlY3QgZm9yd2FyZEJ1dHRvbkVuZFBhaW50UmVj
dDsKKyAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxiYXIpKSB7CisgICAgICAgIGJhY2tCdXR0b25T
dGFydFBhaW50UmVjdCA9IGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0
UGFydCwgdHJ1ZSk7CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoYmFja0J1dHRv
blN0YXJ0UGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gQmFja0J1dHRvblN0
YXJ0UGFydDsKKyAgICAgICAgYmFja0J1dHRvbkVuZFBhaW50UmVjdCA9IGJhY2tCdXR0b25SZWN0
KHNjcm9sbGJhciwgQmFja0J1dHRvbkVuZFBhcnQsIHRydWUpOworICAgICAgICBpZiAoZGFtYWdl
UmVjdC5pbnRlcnNlY3RzKGJhY2tCdXR0b25FbmRQYWludFJlY3QpKQorICAgICAgICAgICAgc2Ny
b2xsTWFzayB8PSBCYWNrQnV0dG9uRW5kUGFydDsKKyAgICAgICAgZm9yd2FyZEJ1dHRvblN0YXJ0
UGFpbnRSZWN0ID0gZm9yd2FyZEJ1dHRvblJlY3Qoc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uU3Rh
cnRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhmb3J3YXJk
QnV0dG9uU3RhcnRQYWludFJlY3QpKQorICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0OworICAgICAgICBmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0ID0gZm9y
d2FyZEJ1dHRvblJlY3Qoc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uRW5kUGFydCwgdHJ1ZSk7Cisg
ICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoZm9yd2FyZEJ1dHRvbkVuZFBhaW50UmVj
dCkpCisgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25FbmRQYXJ0OworICAg
IH0KKworICAgIEludFJlY3QgdHJhY2tQYWludFJlY3QgPSB0cmFja1JlY3Qoc2Nyb2xsYmFyLCB0
cnVlKTsKKyAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKHRyYWNrUGFpbnRSZWN0KSkKKyAg
ICAgICAgc2Nyb2xsTWFzayB8PSBUcmFja0JHUGFydDsKKworICAgIGlmIChtX3Ryb3VnaFVuZGVy
U3RlcHBlcnMgJiYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQYXJ0CisgICAgICAgIHx8
IHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydAorICAgICAgICB8fCBzY3JvbGxNYXNrICYg
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydAorICAgICAgICB8fCBzY3JvbGxNYXNrICYgRm9yd2FyZEJ1
dHRvbkVuZFBhcnQpKQorICAgICAgICBzY3JvbGxNYXNrIHw9IFRyYWNrQkdQYXJ0OworCisgICAg
Ym9vbCB0aHVtYlByZXNlbnQgPSBoYXNUaHVtYihzY3JvbGxiYXIpOworICAgIEludFJlY3QgY3Vy
cmVudFRodW1iUmVjdDsKKyAgICBpZiAodGh1bWJQcmVzZW50KSB7CisgICAgICAgIEludFJlY3Qg
dHJhY2sgPSB0cmFja1JlY3Qoc2Nyb2xsYmFyLCBmYWxzZSk7CisgICAgICAgIGN1cnJlbnRUaHVt
YlJlY3QgPSB0aHVtYlJlY3Qoc2Nyb2xsYmFyLCB0cmFjayk7CisgICAgICAgIGlmIChkYW1hZ2VS
ZWN0LmludGVyc2VjdHMoY3VycmVudFRodW1iUmVjdCkpCisgICAgICAgICAgICBzY3JvbGxNYXNr
IHw9IFRodW1iUGFydDsKKyAgICB9CisKKyAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYWxs
QnV0dG9ucyA9IEJhY2tCdXR0b25TdGFydFBhcnQgfCBCYWNrQnV0dG9uRW5kUGFydAorICAgICAg
ICB8IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfCBGb3J3YXJkQnV0dG9uRW5kUGFydDsKKyAgICBp
ZiAoc2Nyb2xsTWFzayAmIFRyYWNrQkdQYXJ0IHx8IHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQgfHwg
c2Nyb2xsTWFzayAmIGFsbEJ1dHRvbnMpCisgICAgICAgIHBhaW50U2Nyb2xsYmFyQmFja2dyb3Vu
ZChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhcik7CisgICAgICAgIHBhaW50VHJhY2tCYWNrZ3Jv
dW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCB0cmFja1BhaW50UmVjdCk7CisKKyAgICAv
LyBQYWludCB0aGUgYmFjayBhbmQgZm9yd2FyZCBidXR0b25zLgorICAgIGlmIChzY3JvbGxNYXNr
ICYgQmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250
ZXh0LCBzY3JvbGxiYXIsIGJhY2tCdXR0b25TdGFydFBhaW50UmVjdCwgQmFja0J1dHRvblN0YXJ0
UGFydCk7CisgICAgaWYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydCkKKyAgICAgICAg
cGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGJhY2tCdXR0b25FbmRQYWlu
dFJlY3QsIEJhY2tCdXR0b25FbmRQYXJ0KTsKKyAgICBpZiAoc2Nyb2xsTWFzayAmIEZvcndhcmRC
dXR0b25TdGFydFBhcnQpCisgICAgICAgIHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwgc2Ny
b2xsYmFyLCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QsIEZvcndhcmRCdXR0b25TdGFydFBh
cnQpOworICAgIGlmIChzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCisgICAgICAg
IHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBmb3J3YXJkQnV0dG9uRW5k
UGFpbnRSZWN0LCBGb3J3YXJkQnV0dG9uRW5kUGFydCk7CisKKyAgICAvLyBQYWludCB0aGUgdGh1
bWIuCisgICAgaWYgKHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQpCisgICAgICAgIHBhaW50VGh1bWIo
Z3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGN1cnJlbnRUaHVtYlJlY3QpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnNob3VsZENlbnRlck9uVGh1
bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50
KQoreworICAgIHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSAmJiBldmVudC5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uKTsKK30KKworaW50
IFNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNp
emUpCit7CisgICAgcmV0dXJuIG1fdGh1bWJGYXRuZXNzICsgKG1fdHJvdWdoQm9yZGVyV2lkdGgg
KiAyKTsKK30KKworSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUd0azo6YnV0dG9uU2l6ZShTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKG1fdGh1
bWJGYXRuZXNzLCBtX3N0ZXBwZXJTaXplKTsKKworICAgIC8vIEhvcml6b250YWxTY3JvbGxiYXIK
KyAgICByZXR1cm4gSW50U2l6ZShtX3N0ZXBwZXJTaXplLCBtX3RodW1iRmF0bmVzcyk7Cit9CisK
K2ludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIG1fbWluVGh1bWJMZW5ndGg7Cit9CisK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5o
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3
M2RmMjg1NTAxYjU4MjZkYzA1OWI4M2JmYzNkOWE0MTcwZDRiYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNjcm9sbGJhclRoZW1lR3RrX2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVHdGtfaAorCisjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTY3JvbGxiYXI7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lR3RrIDogcHVibGljIFNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxiYXJUaGVtZUd0aygp
OworICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lR3RrKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQ
YXJ0LCBib29sKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgdHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCk7CisgICAgSW50UmVjdCB0
aHVtYlJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFp
bmVkVHJhY2tSZWN0KTsKKyAgICBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWlu
dFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqKTsKKyAgICB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRUaHVt
YihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgdmly
dHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpOworICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXpl
KFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVu
Z3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CisKKyAgICAvLyBUT0RPOiBUaGVzZSBhcmUgdGhl
IGRlZmF1bHQgR1RLKyB2YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhlc2Ug
ZnJvbSB0aGUgdGhlbWUgaXRzZWxmLgorICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Ny
b2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMjA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBhdXRv
c2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMDI7IH0KKyAgICB2b2lkIHVwZGF0ZVRoZW1l
UHJvcGVydGllcygpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7
CisgICAgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAg
IHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworCitwcm90
ZWN0ZWQ6CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrU3R5bGVDb250ZXh0KiBt
X2NvbnRleHQ7CisjZW5kaWYKKyAgICBpbnQgbV90aHVtYkZhdG5lc3M7CisgICAgaW50IG1fdHJv
dWdoQm9yZGVyV2lkdGg7CisgICAgaW50IG1fc3RlcHBlclNpemU7CisgICAgaW50IG1fc3RlcHBl
clNwYWNpbmc7CisgICAgaW50IG1fbWluVGh1bWJMZW5ndGg7CisgICAgZ2Jvb2xlYW4gbV90cm91
Z2hVbmRlclN0ZXBwZXJzOworICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dDsKKyAgICBnYm9vbGVhbiBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0OworICAgIGdib29sZWFu
IG1faGFzQmFja0J1dHRvblN0YXJ0UGFydDsKKyAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25F
bmRQYXJ0OworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRo
ZW1lR3RrMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJjOWVlM2NiODZjNDU1OGRmZTg3ODUxYWRiMWEwYzcz
ODczZDlkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsyLmNwcApAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVHdGsuaCIKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRl
ICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBn
dGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMs
IFNjcm9sbGJhclRoZW1lR3RrKiBzY3JvbGxiYXJUaGVtZSkKK3sKKyAgICBzY3JvbGxiYXJUaGVt
ZS0+dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Cit9CisKK1Njcm9sbGJhclRoZW1lR3RrOjpTY3Jv
bGxiYXJUaGVtZUd0aygpCit7CisgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgZ19z
aWduYWxfY29ubmVjdChzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS5nZXQoKSktPmd0a0hTY3JvbGxiYXIoKSwKKyAgICAgICAgInN0eWxlLXNl
dCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQoreworICAgIEd0a1dpZGdl
dCogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtIU2Nyb2xsYmFyKCk7CisgICAgZ3RrX3dpZGdldF9z
dHlsZV9nZXQoc2Nyb2xsYmFyLAorICAgICAgICAic2xpZGVyX3dpZHRoIiwgJm1fdGh1bWJGYXRu
ZXNzLAorICAgICAgICAidHJvdWdoX2JvcmRlciIsICZtX3Ryb3VnaEJvcmRlcldpZHRoLAorICAg
ICAgICAic3RlcHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCisgICAgICAgICJ0cm91Z2gtdW5k
ZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAorICAgICAgICAiaGFzLWJhY2t3
YXJkLXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAorICAgICAgICAiaGFzLWZv
cndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAorICAgICAgICAiaGFz
LXNlY29uZGFyeS1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
LAorICAgICAgICAiaGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1
dHRvbkVuZFBhcnQsIDApOworICAgIG1fbWluVGh1bWJMZW5ndGggPSBndGtfcmFuZ2VfZ2V0X21p
bl9zbGlkZXJfc2l6ZShHVEtfUkFOR0Uoc2Nyb2xsYmFyKSk7CisgICAgdXBkYXRlU2Nyb2xsYmFy
c0ZyYW1lVGhpY2tuZXNzKCk7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGdldFdpZGdldEZvclNj
cm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIFJlbmRlclRo
ZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6
OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gdGhlbWUtPmd0a1ZTY3JvbGxiYXIoKSA6IHRoZW1l
LT5ndGtIU2Nyb2xsYmFyKCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJh
Y2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBQYWludCB0aGUg
dHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3VnaC11bmRlci1zdGVwcGVycyBwcm9wZXJ0eSBp
cyB0cnVlLCB0aGlzCisgICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxsIHNpemUgb2YgdGhlIHNjcm9s
bGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91bGQgb25seSBiZSB0aGUKKyAgICAvLyB0cmFj
ayByZWN0LgorICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QocmVjdCk7CisgICAgaWYgKG1f
dHJvdWdoVW5kZXJTdGVwcGVycykKKyAgICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0
KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3Jv
bGxiYXItPmhlaWdodCgpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29u
dGV4dChjb250ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCk7CisgICAgSW50UmVjdCBwYWludFJlY3Qo
SW50UG9pbnQoKSwgZnVsbFNjcm9sbGJhclJlY3Quc2l6ZSgpKTsKKyAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KHBhaW50UmVjdCwgZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciks
CisgICAgICAgIEdUS19TVEFURV9BQ1RJVkUsIEdUS19TSEFET1dfSU4sICJ0cm91Z2giKTsKK30K
Kwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sK
KyAgICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwg
c2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7
CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVs
bFNjcm9sbGJhclJlY3QpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFNjcm9s
bGJhclJlY3QsIGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpLAorICAgICAgICBHVEtf
U1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic2Nyb2xsZWRfd2luZG93Iik7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJh
cik7CisgICAgZ2Jvb2xlYW4gYWN0aXZhdGVTbGlkZXI7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9n
ZXQod2lkZ2V0LCAiYWN0aXZhdGUtc2xpZGVyIiwgJmFjdGl2YXRlU2xpZGVyLCBOVUxMKTsKKwor
ICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOworICAgIEd0a1No
YWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VUOworICAgIGlmIChhY3RpdmF0ZVNs
aWRlciAmJiBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KSB7CisgICAgICAg
IHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtf
U0hBRE9XX0lOOworICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRo
dW1iUGFydCB8fCBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQorICAgICAg
ICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7CisKKyAgICAvLyBUaGUgYWRqdXN0bWVu
dCBjb250cm9scyB0aGUgcmVuZGVyaW5nIG9mIHRoZSBzY3JvbGxiYXIgdGh1bWIuIElmIGl0J3Mg
bm90IHNldAorICAgIC8vIHByb3Blcmx5IHRoZSB0aGVtZSBtYXkgbm90IGRyYXcgdGhlIHRodW1i
IGJvcmRlcnMgcHJvcGVybHkuCisgICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCA9IGd0a19y
YW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0Uod2lkZ2V0KSk7CisgICAgZ3RrX2FkanVzdG1l
bnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQsIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKTsKKyAgICBn
dGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqdXN0bWVudCwgMCk7CisgICAgZ3RrX2FkanVzdG1l
bnRfc2V0X3VwcGVyKGFkanVzdG1lbnQsIHNjcm9sbGJhci0+bWF4aW11bSgpKTsKKworICAgIEd0
a09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw7Cisg
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewor
ICAgICAgICBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXplKGFkanVzdG1lbnQsIHJlY3QuaGVp
Z2h0KCkpOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGp1c3Rt
ZW50LCByZWN0LndpZHRoKCkpOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRD
b250ZXh0KGNvbnRleHQsIHJlY3QpOworICAgIEludFJlY3Qgc2xpZGVyUmVjdChJbnRQb2ludCgp
LCByZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNsaWRlcihzbGlkZXJS
ZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgInNsaWRlciIsIG9yaWVudGF0aW9u
KTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCit7CisgICAgLy8gVGhlIGJ1dHRvbnMgd2ls
bCBiZSBkaXNhYmxlZCBpZiB0aGUgdGh1bWIgaXMgYXMgdGhlIGFwcHJvcHJpYXRlIGV4dHJlbWUu
CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19PVVQ7CisgICAgR3Rr
U3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBib29sIHBy
ZXNzZWQgPSAocGFydCA9PSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpOworCisgICAgaWYgKChC
YWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCisg
ICAgICAgIHx8IChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVu
dFBvcygpKQorICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3Jv
bGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkKKyAgICAgICAgfHwg
KEZvcndhcmRCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkpIHsKKyAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NU
QVRFX05PUk1BTDsKKyAgICAgICAgaWYgKHByZXNzZWQpIHsKKyAgICAgICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURP
V19JTjsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSkKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9QUkVMSUdIVDsKKyAgICB9CisK
KyAgICAvLyBUaGVtZXMgZGV0ZXJtaW5lIGhvdyB0byBkcmF3IHRoZSBidXR0b24gKHdoaWNoIGJ1
dHRvbiB0byBkcmF3KSBiYXNlZCBvbiB0aGUgYWxsb2NhdGlvbgorICAgIC8vIG9mIHRoZSB3aWRn
ZXQuIFdoZXJlIHRoZSB0YXJnZXQgcmVjdCBpcyBpbiByZWxhdGlvbiB0byB0aGUgdG90YWwgd2lk
Z2V0IGFsbG9jYXRpb24KKyAgICAvLyBkZXRlcm1pbmVzIHRoZSBidXR0b24uCisgICAgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7Cisg
ICAgaW50IGJ1dHRvblNpemUgPSAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8g
cmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lkdGgoKTsKKyAgICBpbnQgdG90YWxBbGxvY2F0aW9uID0g
YnV0dG9uU2l6ZSAqIDU7IC8vIE9uZSBzcGFjZSBmb3IgZWFjaCBidXR0b24gYW5kIG9uZSBleHRy
YS4KKyAgICBpbnQgYnV0dG9uT2Zmc2V0ID0gMDsKKyAgICBpZiAoRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydCA9PSBwYXJ0KQorICAgICAgICBidXR0b25PZmZzZXQgPSBidXR0b25TaXplOworICAgIGVs
c2UgaWYgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQpCisgICAgICAgIGJ1dHRvbk9mZnNldCA9
IDMgKiBidXR0b25TaXplOworICAgIGVsc2UgaWYgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBh
cnQpCisgICAgICAgIGJ1dHRvbk9mZnNldCA9IDQgKiBidXR0b25TaXplOworCisgICAgLy8gTm93
IHdlIHdhbnQgdGhlIGFsbG9jYXRpb24gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbiBvZiB0
aGUgcGFpbnRlZCByZWN0LgorICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ2V0V2lkZ2V0Rm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcik7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0
a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgYWxsb2Nh
dGlvbi54ID0gYWxsb2NhdGlvbi55ID0gMDsKKyAgICBhbGxvY2F0aW9uLndpZHRoID0gcmVjdC53
aWR0aCgpOworICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlm
IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBhbGxvY2F0aW9u
LmhlaWdodCA9IHRvdGFsQWxsb2NhdGlvbjsKKyAgICAgICAgYWxsb2NhdGlvbi55IC09IGJ1dHRv
bk9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gdG90YWxB
bGxvY2F0aW9uOworICAgICAgICBhbGxvY2F0aW9uLnggLT0gYnV0dG9uT2Zmc2V0OworICAgIH0K
KyAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisg
ICAgY29uc3QgY2hhciogZGV0YWlsID0gb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIg
PyAidnNjcm9sbGJhciIgOiAiaHNjcm9sbGJhciI7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOworCisgICAgSW50UmVjdCBidXR0b25SZWN0
KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94
KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBkZXRhaWwpOworCisg
ICAgZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwg
ImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKKyAgICBJbnRTaXplIGFycm93
U2l6ZSA9IHJlY3Quc2l6ZSgpOworICAgIGFycm93U2l6ZS5zY2FsZShhcnJvd1NjYWxpbmcpOwor
ICAgIEludFJlY3QgYXJyb3dSZWN0KEludFBvaW50KGJ1dHRvblJlY3QueCgpICsgKGJ1dHRvblJl
Y3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpKSAvIDIsCisgICAgICAgIGJ1dHRvblJlY3Qu
eSgpICsgKGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUuaGVpZ2h0KCkpIC8gMiksIGFy
cm93U2l6ZSk7CisgICAgaWYgKHByZXNzZWQpIHsKKyAgICAgICAgaW50IGFycm93RGlzcGxhY2Vt
ZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZOworICAgICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3
aWRnZXQsCisgICAgICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFj
ZW1lbnRYLAorICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC15IiwgJmFycm93RGlzcGxh
Y2VtZW50WSwgMCk7CisgICAgICAgIGFycm93UmVjdC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwg
YXJyb3dEaXNwbGFjZW1lbnRZKTsKKyAgICB9CisKKyAgICBHdGtBcnJvd1R5cGUgYXJyb3dUeXBl
ID0gR1RLX0FSUk9XX0RPV047CisgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xs
YmFyKSB7CisgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19V
UDsKKyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsK
KyAgICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1JJR0hUOworICAgICAgICBpZiAocGFydCA9
PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCisgICAg
ICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfTEVGVDsKKyAgICB9CisgICAgd2lkZ2V0Q29u
dGV4dC5ndGtQYWludEFycm93KGFycm93UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5
cGUsIGFycm93VHlwZSwgZGV0YWlsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGszLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmE3ZThmMmZiYWJiMmM0ODFlYjAzNTIwNjRlNmY0
YzgyZmM4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0azMuY3BwCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVu
dC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHdGtX
aWRnZXQqLCBTY3JvbGxiYXJUaGVtZUd0ayogc2Nyb2xsYmFyVGhlbWUpCit7CisgICAgc2Nyb2xs
YmFyVGhlbWUtPnVwZGF0ZVRoZW1lUHJvcGVydGllcygpOworfQorCitTY3JvbGxiYXJUaGVtZUd0
azo6U2Nyb2xsYmFyVGhlbWVHdGsoKQorICAgIDogbV9jb250ZXh0KHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrU2Nyb2xs
YmFyU3R5bGUoKSkKK3sKKyAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fY29udGV4dCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGd0a1N0eWxlQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRo
ZW1lUHJvcGVydGllcygpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29u
dGV4dCwKKyAgICAgICAgIm1pbi1zbGlkZXItbGVuZ3RoIiwgJm1fbWluVGh1bWJMZW5ndGgsCisg
ICAgICAgICJzbGlkZXItd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCisgICAgICAgICJ0cm91Z2gt
Ym9yZGVyIiwgJm1fdHJvdWdoQm9yZGVyV2lkdGgsCisgICAgICAgICJzdGVwcGVyLXNpemUiLCAm
bV9zdGVwcGVyU2l6ZSwKKyAgICAgICAgInN0ZXBwZXItc3BhY2luZyIsICZtX3N0ZXBwZXJTcGFj
aW5nLAorICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwgJm1fdHJvdWdoVW5kZXJTdGVw
cGVycywKKyAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvblN0
YXJ0UGFydCwKKyAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0
dG9uRW5kUGFydCwKKyAgICAgICAgImhhcy1zZWNvbmRhcnktYmFja3dhcmQtc3RlcHBlciIsICZt
X2hhc0JhY2tCdXR0b25FbmRQYXJ0LAorICAgICAgICAiaGFzLXNlY29uZGFyeS1mb3J3YXJkLXN0
ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LCAwKTsKKyAgICB1cGRhdGVTY3Jv
bGxiYXJzRnJhbWVUaGlja25lc3MoKTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlTY3JvbGxiYXJT
dHlsZUNvbnRleHRDbGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNz
KGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TQ1JPTExCQVIpOworICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/
ICBHVEtfU1RZTEVfQ0xBU1NfVkVSVElDQUwgOiBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCk7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4g
SWYgdGhlIHRyb3VnaC11bmRlci1zdGVwcGVycyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCisgICAg
Ly8gc2hvdWxkIGJlIHRoZSBmdWxsIHNpemUgb2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZh
bHNlLCBpdCBzaG91bGQgb25seSBiZSB0aGUKKyAgICAvLyB0cmFjayByZWN0LgorICAgIEludFJl
Y3QgZnVsbFNjcm9sbGJhclJlY3QocmVjdCk7CisgICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVy
cykKKyAgICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBz
Y3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIGFwcGx5U2Ny
b2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX1RST1VHSCk7CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQobV9jb250ZXh0
LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKKyAgICAgICAgZnVsbFNjcm9sbGJh
clJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJSZWN0LndpZHRo
KCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKG1f
Y29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgIGZ1bGxT
Y3JvbGxiYXJSZWN0LngoKSwgZnVsbFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVj
dC53aWR0aCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6
OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShtX2NvbnRleHQpOworCisgICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1f
Y29udGV4dCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MobV9jb250ZXh0LCAic2Nyb2xsZWQtd2luZG93Iik7CisgICAgZ3RrX3JlbmRl
cl9mcmFtZShtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzY3Jv
bGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFy
LT5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAg
IFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpOworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9y
aWVudGF0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAo
c2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkg
PT0gVGh1bWJQYXJ0KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9zbGlkZXIobV9jb250ZXh0
LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCisgICAgICAgIG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsU2Nyb2xsYmFyID8gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9O
X0hPUklaT05UQUwpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQp
OworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3sKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKG1fY29udGV4dCk7CisKKyAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKTsKKyAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4
dENsYXNzZXMobV9jb250ZXh0LCBvcmllbnRhdGlvbik7CisKKyAgICBndWludCBmbGFncyA9IDA7
CisgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJy
ZW50UG9zKCkpCisgICAgICAgIHx8IChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9s
bGJhci0+Y3VycmVudFBvcygpKQorICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPT0g
cGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkK
KyAgICAgICAgfHwgKEZvcndhcmRCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkpIHsKKyAgICAgICAgaWYgKHBh
cnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKQorICAgICAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhvdmVy
ZWRQYXJ0KCkpCisgICAgICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKG1fY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhtX2NvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworICAgIGd0a19yZW5kZXJfYmFj
a2dyb3VuZChtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3Jl
bmRlcl9mcmFtZShtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBn
ZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShtX2Nv
bnRleHQsICJhcnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7CisKKyAgICBkb3Vi
bGUgYXJyb3dTaXplID0gc3RkOjptaW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSAqIGFy
cm93U2NhbGluZzsKKyAgICBGbG9hdFBvaW50IGFycm93UG9pbnQocmVjdC54KCkgKyAocmVjdC53
aWR0aCgpIC0gYXJyb3dTaXplKSAvIDIsIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBhcnJv
d1NpemUpIC8gMik7CisKKyAgICBpZiAoZmxhZ3MgJiBHVEtfU1RBVEVfRkxBR19BQ1RJVkUpIHsK
KyAgICAgICAgZ2ludCBhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKKyAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwKKyAgICAgICAgICAg
ICJhcnJvdy1kaXNwbGFjZW1lbnQteCIsICZhcnJvd0Rpc3BsYWNlbWVudFgsCisgICAgICAgICAg
ICAiYXJyb3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZLCAwKTsKKyAgICAg
ICAgYXJyb3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZ
KTsKKyAgICB9CisKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChvcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgYW5nbGUgPSAocGFydCA9PSBGb3J3YXJkQnV0dG9u
RW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpID8gR19QSSA6IDA7Cisg
ICAgZWxzZQorICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8
IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIC8gMiA6IDMgKiAoR19QSSAv
IDIpOworCisgICAgZ3RrX3JlbmRlcl9hcnJvdyhtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJyb3dQb2ludC54KCksIGFycm93UG9pbnQueSgpLCBh
cnJvd1NpemUpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9O
XzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yNDEzNzczZTU4YzYwNWM0MDgxM2E5YzA3Yjg5MDAzZDYxZmQ4MTBiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudUd0ay5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
ZWFyY2hQb3B1cE1lbnVHdGs6OlNlYXJjaFBvcHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fcG9wdXAoYWRvcHRSZWYobmV3IFBvcHVwTWVudUd0ayhjbGllbnQpKSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQb3B1cE1lbnUqIFNlYXJjaFBvcHVwTWVu
dUd0azo6cG9wdXBNZW51KCkKK3sKKyAgICByZXR1cm4gbV9wb3B1cC5nZXQoKTsKK30KKwordm9p
ZCBTZWFyY2hQb3B1cE1lbnVHdGs6OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJp
bmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBTZWFyY2hQb3B1cE1lbnVHdGs6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9t
aWNTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBTZWFyY2hQb3B1cE1lbnVHdGs6OmVuYWJsZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TZWFy
Y2hQb3B1cE1lbnVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTNjNjNkN2MyYjdiODRlNDI2MzU2MjYzYTlk
NmI5MjQ5MjExZThiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TZWFy
Y2hQb3B1cE1lbnVHdGsuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgU2VhcmNoUG9wdXBNZW51R3RrX2gKKyNkZWZpbmUgU2VhcmNoUG9wdXBNZW51R3RrX2gK
KworI2luY2x1ZGUgIlBvcHVwTWVudUd0ay5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlYXJjaFBvcHVwTWVudUd0ayA6IHB1
YmxpYyBTZWFyY2hQb3B1cE1lbnUgeworcHVibGljOgorICAgIFNlYXJjaFBvcHVwTWVudUd0ayhQ
b3B1cE1lbnVDbGllbnQqKTsKKworICAgIHZpcnR1YWwgUG9wdXBNZW51KiBwb3B1cE1lbnUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFN0
cmluZz4mIHNlYXJjaEl0ZW1zKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpOworCitwcml2
YXRlOgorICAgIFJlZlB0cjxQb3B1cE1lbnVHdGs+IG1fcG9wdXA7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBTZWFyY2hQb3B1cE1lbnVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9TaGFyZWRCdWZmZXJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJlOWFhZWY2ZGFiNWQ2YTk3NzllNmZjOTZiNGM5YTg4ZDZiM2U4
OGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0
ay5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVm
ZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sK
KyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENT
dHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOworICAg
IGdjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBzaXplOworICAgIEdFcnJvciogZXJyb3IgPSAw
OworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlbmFtZS5kYXRhKCksICZjb250ZW50
cywgJnNpemUsICZlcnJvcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZnVsbHkg
cmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMiLCBmaWxlbmFtZUZvckRpc3BsYXkoZmlsZVBh
dGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVl
KGVycm9yKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudHMsIHNpemUpOworICAg
IGdfZnJlZShjb250ZW50cyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9T
aGFyZWRUaW1lckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41M2QxZDdiNmU3YTc1MDcxNzNiZjdlZTg0N2Q2OWUxNzYxZWQ1NmQ4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgorCisj
aW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBndWludCBzaGFyZWRUaW1lcjsKK3N0YXRpYyB2b2lkICgqc2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKSgpOworCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlv
bih2b2lkICgqZikoKSkKK3sKKyAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlcikKK3sKKyAgICBpZiAoc2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwo
ZG91YmxlIGludGVydmFsKQoreworICAgIEFTU0VSVChzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24p
OworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGludGVydmFs
ICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVkVGltZXIoKTsKKyAgICBzaGFyZWRUaW1lciA9IGdf
dGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfUkVEUkFXLCBpbnRlcnZhbEluTVMsIHRpbWVv
dXRfY2IsIDAsIDApOworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigpCit7CisgICAgaWYgKCFz
aGFyZWRUaW1lcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2Jvb2xlYW4gcmVtb3ZlZFNvdXJj
ZSA9IGdfc291cmNlX3JlbW92ZShzaGFyZWRUaW1lcik7CisgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkU291cmNlLCByZW1vdmVkU291cmNlKTsKKyAgICBzaGFyZWRUaW1lciA9IDA7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY3MzE2Y2FmZDJlY2VmN2I2MWU4
YWRmMTI5MzYyNjhhOTIyNGM0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvU291bmRHdGsuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiU291bmQuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIHN5c3RlbUJlZXAoKQoreworICAgIGdka19iZWVwKCk7Cit9CisKK30KKwor
Ly8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjMyNDNkMTUzZGYzYzE3NGMzMGRmMGIyY2ViMWRkZmIzY2Rj
NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkFYT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlICJDb29raWVTdG9yYWdlLmgiCisjaW5jbHVkZSAiRE5TLmgiCisjaW5j
bHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlIDxmbG9hdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERS
VCB0byBydW4pOiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgZ2V0U3VwcG9y
dGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1N0cmlu
ZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4
LCBjb25zdCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVy
biBTdHJpbmcoKTsgfQorCitmbG9hdCB1c2VySWRsZVRpbWUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgLy8gcmV0dXJuIGFuIGFyYml0cmFyaWx5IGhpZ2ggdXNlcklkbGVUaW1lIHNv
IHRoYXQgcmVsZWFzaW5nIHBhZ2VzIGZyb20gdGhlIHBhZ2UgY2FjaGUgaXNuJ3QgcG9zdHBvbmVk
CisgICAgcmV0dXJuIEZMVF9NQVg7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvVXNlckFnZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40NjI0Njg2YjVjZmI5MGFhYWY2MjcxNTM3YWQwYjkxMTNmMGFmZjNi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3Bw
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudEd0ay5oIgor
CisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaWYgT1MoVU5JWCkKKyNpbmNsdWRlIDxzeXMvdXRzbmFt
ZS5oPgorI2VsaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogcGxhdGZvcm1Gb3JV
QVN0cmluZygpCit7CisjaWYgUExBVEZPUk0oWDExKQorICAgIHJldHVybiAiWDExIjsKKyNlbGlm
IE9TKFdJTkRPV1MpCisgICAgcmV0dXJuICIiOworI2VsaWYgUExBVEZPUk0oTUFDKQorICAgIHJl
dHVybiAiTWFjaW50b3NoIjsKKyNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19ESVJFQ1RGQikK
KyAgICByZXR1cm4gIkRpcmVjdEZCIjsKKyNlbHNlCisgICAgcmV0dXJuICJVbmtub3duIjsKKyNl
bmRpZgorfQorCitzdGF0aWMgU3RyaW5nIHBsYXRmb3JtVmVyc2lvbkZvclVBU3RyaW5nKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdWFPU1ZlcnNpb24sIChTdHJpbmcoKSkp
OworICAgIGlmICghdWFPU1ZlcnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdWFPU1Zl
cnNpb247CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIHVhT1NWZXJzaW9uID0gd2luZG93c1ZlcnNp
b25Gb3JVQVN0cmluZygpOworI2VsaWYgT1MoREFSV0lOKQorI2lmIENQVShYODYpCisgICAgdWFP
U1ZlcnNpb24gPSAiSW50ZWwgTWFjIE9TIFgiOworI2Vsc2UKKyAgICB1YU9TVmVyc2lvbiA9ICJQ
UEMgTWFjIE9TIFgiOworI2VuZGlmCisjZWxpZiBPUyhVTklYKQorICAgIHN0cnVjdCB1dHNuYW1l
IG5hbWU7CisgICAgaWYgKHVuYW1lKCZuYW1lKSAhPSAtMSkKKyAgICAgICAgdWFPU1ZlcnNpb24g
PSBTdHJpbmc6OmZvcm1hdCgiJXMgJXMiLCBuYW1lLnN5c25hbWUsIG5hbWUubWFjaGluZSk7Cisg
ICAgZWxzZQorICAgICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZygiVW5rbm93biIpOworI2Vsc2UK
KyAgICB1YU9TVmVyc2lvbiA9IFN0cmluZygiVW5rbm93biIpOworI2VuZGlmCisgICAgcmV0dXJu
IHVhT1NWZXJzaW9uOworfQorCitTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25WZXJzaW9uKQorewor
ICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgdXNlciBhZ2VudCBzdHJpbmcgd2l0aCBhIGxpYmVyYWwg
aW50ZXJwcmV0YXRpb24gb2YgCisgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv
ZW4tVVMvZG9jcy9Vc2VyX0FnZW50X1N0cmluZ3NfUmVmZXJlbmNlCisgICAgLy8KKyAgICAvLyBG
b3JtaW5nIGEgZnVuY3Rpb25hbCB1c2VyIGFnZW50IGlzIHJlYWxseSBkaWZmaWN1bHQuIFdlIG11
c3QgbWVudGlvbiBTYWZhcmksIGJlY2F1c2Ugc29tZQorICAgIC8vIHNpdGVzIGNoZWNrIGZvciB0
aGF0IHdoZW4gZGV0ZWN0aW5nIFdlYktpdCBicm93c2Vycy4gQWRkaXRpb25hbGx5IHNvbWUgc2l0
ZXMgYXNzdW1lIHRoYXQKKyAgICAvLyBicm93c2VycyB0aGF0IGFyZSAiU2FmYXJpIiBidXQgbm90
IHJ1bm5pbmcgb24gT1MgWCBhcmUgdGhlIFNhZmFyaSBpT1MgYnJvd3Nlciwgc28gd2UKKyAgICAv
LyBhbHNvIGNsYWltIHRvIGJlICBDaHJvbWl1bS4gR2V0dGluZyB0aGlzIHdyb25nIGNhbiBjYXVz
ZSBzaXRlcyB0byBsb2FkIHRoZSB3cm9uZyBKYXZhU2NyaXB0LAorICAgIC8vIENTUywgb3IgY3Vz
dG9tIGZvbnRzLiBJbiBzb21lIGNhc2VzIHNpdGVzIHdvbid0IGxvYWQgcmVzb3VyY2VzIGF0IGFs
bC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IENTdHJpbmcsIHVhVmVyc2lvbiwgKFN0
cmluZzo6Zm9ybWF0KCIlaS4laSIsIFdFQktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04sIFdF
QktJVF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04pLnV0ZjgoKSkpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdGF0aWNVQSwgKFN0cmluZzo6Zm9ybWF0KCJNb3ppbGxh
LzUuMCAoJXM7ICVzKSBBcHBsZVdlYktpdC8lcyAoS0hUTUwsIGxpa2UgR2Vja28pICIKKyAgICAg
ICAgIkNocm9taXVtLzI1LjAuMTM0OS4yIENocm9tZS8yNS4wLjEzNDkuMiBTYWZhcmkvJXMiLAor
ICAgICAgICBwbGF0Zm9ybUZvclVBU3RyaW5nKCksIHBsYXRmb3JtVmVyc2lvbkZvclVBU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgdWFWZXJzaW9uLmRhdGEoKSwgdWFWZXJzaW9uLmRh
dGEoKSkpKTsKKyAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHN0YXRpY1VBOworCisgICAgU3RyaW5nIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uID0gYXBw
bGljYXRpb25WZXJzaW9uOworICAgIGlmIChmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbi5pc0VtcHR5
KCkpCisgICAgICAgIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uID0gdWFWZXJzaW9uLmRhdGEoKTsK
KworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMgJXMvJXMiLCBzdGF0aWNVQS51dGY4KCku
ZGF0YSgpLCBhcHBsaWNhdGlvbk5hbWUudXRmOCgpLmRhdGEoKSwgZmluYWxBcHBsaWNhdGlvblZl
cnNpb24udXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbiBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE1MGI3YTMyZDI4ZjAy
MWU4NDYzNzY4N2Q3ZGQ5YjZjOTBjNzU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW4KQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVXNlckFnZW50R3RrX2gK
KyNkZWZpbmUgVXNlckFnZW50R3RrX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2RlZmluZSBXRUJLSVRfVVNFUl9B
R0VOVF9NQUpPUl9WRVJTSU9OIChAV0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTkApCisj
ZGVmaW5lIFdFQktJVF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04gKEBXRUJLSVRfVVNFUl9BR0VO
VF9NSU5PUl9WRVJTSU9OQCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgc3RhbmRh
cmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUgPSAiIiwgY29uc3QgU3Ry
aW5nJiBhcHBsaWNhdGlvblZlcnNpb24gPSAiIik7CisKK30KKworI2VuZGlmIC8vIFVzZXJBZ2Vu
dEd0a19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2Y4MWNjMDE3
NzM2MGQ3MTVmOGY0NGI1YjM4ODUyMzUwMjBmYmZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJIb3N0
V2luZG93LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0OjpXaWRnZXQoUGxhdGZv
cm1XaWRnZXQgd2lkZ2V0KQoreworICAgIGluaXQod2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lk
Z2V0KCkKK3sKKyAgICBBU1NFUlQoIXBhcmVudCgpKTsKKworICAgIHJlbGVhc2VQbGF0Zm9ybVdp
ZGdldCgpOworfQorCit2b2lkIFdpZGdldDo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworfQor
Cit2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIFNj
cm9sbFZpZXcqIHZpZXcgPSByb290KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisgICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3IoY3Vyc29yKTsKK30KKwordm9pZCBX
aWRnZXQ6OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgaWYgKGlz
UGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIGd0a193aWRnZXRf
c2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAg
IHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBw
bGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBndGtfd2lkZ2V0X2hpZGUocGxhdGZvcm1XaWRnZXQo
KSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJv
b2wgaXNTZWxlY3RlZCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFNlZSBpZiB0aGUgcGxhdGZvcm1XaWRnZXQgaGFzIGEgd2Via2l0LXdp
ZGdldC1pcy1zZWxlY3RlZCBwcm9wZXJ0eQorICAgIC8vIGFuZCBzZXQgaXQgYWZ0ZXJ3YXJkcy4K
KyAgICBHUGFyYW1TcGVjKiBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09C
SkVDVF9HRVRfQ0xBU1MocGxhdGZvcm1XaWRnZXQoKSksICJ3ZWJraXQtd2lkZ2V0LWlzLXNlbGVj
dGVkIik7CisgICAgaWYgKCFzcGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9z
ZXQocGxhdGZvcm1XaWRnZXQoKSwgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQiLCBpc1NlbGVj
dGVkLCBOVUxMKTsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBmcmFtZVJlY3RzQ2hh
bmdlZCgpOworfQorCit2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkKK3sKKyAg
ICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBnX29iamVjdF91
bnJlZihwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3Jt
V2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBnX29iamVjdF9yZWZfc2luayhwbGF0Zm9ybVdpZGdldCgpKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yjk0NzgwYmQzNTE3MGRiMjVhOGI4ZmRiNzkwOWMzYTliYzU0NjdkMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTAs
MCArMSwyNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlICJS
ZW5kZXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEdka1BpeG1hcCogZ1NjcmF0Y2hCdWZmZXIg
PSAwOworc3RhdGljIHZvaWQgcHVyZ2VTY3JhdGNoQnVmZmVyKCkKK3sKKyAgICBpZiAoZ1NjcmF0
Y2hCdWZmZXIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGdTY3JhdGNoQnVmZmVyKTsKKyAgICBn
U2NyYXRjaEJ1ZmZlciA9IDA7Cit9CisKKy8vIFdpZGdldCByZW5kZXJpbmcgbmVlZHMgYSBzY3Jh
dGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9yIHRoZSBpbnRlcm1lZGlhdGUKKy8vIHJlbmRlci4g
SW5zdGVhZCBvZiBjcmVhdGluZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBv
cGVyYXRpb24sCisvLyB3ZSBjcmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNh
bGx5IHB1cmdlZCB2aWEgYSB0aW1lci4KK2NsYXNzIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIDog
cHVibGljIFRpbWVyQmFzZSB7Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIHsg
cHVyZ2VTY3JhdGNoQnVmZmVyKCk7IH0KK307CisKK3N0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRj
aEJ1ZmZlclB1cmdlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFB1cmdlU2NyYXRjaEJ1
ZmZlclRpbWVyLCBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciwgKCkpOworICAgIGlmIChwdXJnZVNj
cmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXJU
aW1lci5zdG9wKCk7CisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDIp
OworfQorCitXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
KQorICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICwgbV90YXJn
ZXRSZWN0KHRhcmdldFJlY3QpCisgICAgLCBtX2hhZEVycm9yKGZhbHNlKQoreworICAgIFJlbmRl
clRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKKworICAgIC8vIEZhbGxiYWNrOiBXZSBmYWlsZWQg
dG8gY3JlYXRlIGFuIFJHQkEgY29sb3JtYXAgZWFybGllciwgc28gd2UgY2Fubm90IHByb3Blcmx5
IHBhaW50IAorICAgIC8vIHRvIGEgdGVtcG9yYXJ5IHN1cmZhY2UgYW5kIHByZXNlcnZlIHRyYW5z
cGFyZW5jeS4gVG8gZW5zdXJlIGRlY2VudCB3aWRnZXQgcmVuZGVyaW5nLCBqdXN0CisgICAgLy8g
cGFpbnQgZGlyZWN0bHkgdG8gdGhlIHRhcmdldCBkcmF3YWJsZS4gVGhpcyB3aWxsIG5vdCByZW5k
ZXIgQ1NTIHJvdGF0aW9uYWwgdHJhbnNmb3JtcyBwcm9wZXJseS4KKyAgICBpZiAoIXRoZW1lLT5t
X3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93
KCkpIHsKKyAgICAgICAgbV90YXJnZXQgPSBncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmV2ZXIgd2FudCB0byBjcmVhdGUg
YSBzY3JhdGNoIGJ1ZmZlciBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiBvdXIgdGFyZ2V0IEdka0Ry
YXdhYmxlLgorICAgIC8vIFRoaXMgcHJldmVudHMgZ2lhbnQgcGl4bWFwIGFsbG9jYXRpb25zIGZv
ciB2ZXJ5IGxhcmdlIHdpZGdldHMgaW4gc21hbGxlciB2aWV3cy4KKyAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjaGVjayBmb3IgV2ViS2l0MiBhcyB3ZWxsLgorICAgIGlm
IChncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpKSB7CisgICAgICAgIGludCBtYXhXaWR0aCA9
IDAsIG1heEhlaWdodCA9IDA7CisgICAgICAgIGdldEdka0RyYXdhYmxlU2l6ZShncmFwaGljc0Nv
bnRleHQtPmdka1dpbmRvdygpLCAmbWF4V2lkdGgsICZtYXhIZWlnaHQpOworICAgICAgICBtX3Rh
cmdldFJlY3Quc2V0U2l6ZShtX3RhcmdldFJlY3Quc2l6ZSgpLnNocnVua1RvKEludFNpemUobWF4
V2lkdGgsIG1heEhlaWdodCkpKTsKKyAgICB9CisKKyAgICAvLyBXaWRnZXRzIHNvbWV0aW1lcyBu
ZWVkIHRvIGRyYXcgb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzIGZvciB0aGluZ3Mgc3VjaCBhcwor
ICAgIC8vIGV4dGVyaW9yIGZvY3VzLiBXZSB3YW50IHRvIGFsbG9jYXRlIGEgc29tZSBleHRyYSBw
aXhlbHMgaW4gb3VyIHN1cmZhY2UgZm9yIHRoaXMuCisgICAgc3RhdGljIGludCBleHRyYVNwYWNl
ID0gMTU7CisgICAgbV90YXJnZXRSZWN0LmluZmxhdGUoZXh0cmFTcGFjZSk7CisKKyAgICAvLyBU
aGlzIG9mZnNldCB3aWxsIG1hcCBhIHBvaW50IGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0
aGUgd2lkZ2V0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnRpbmcgYnVmZmVy
LgorICAgIG1fcGFpbnRPZmZzZXQgPSB0YXJnZXRSZWN0LmxvY2F0aW9uKCkgLSBtX3RhcmdldFJl
Y3QubG9jYXRpb24oKTsKKworICAgIGludCB3aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpICsg
KGV4dHJhU3BhY2UgKiAyKTsKKyAgICBpbnQgaGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgp
ICsgKGV4dHJhU3BhY2UgKiAyKTsKKyAgICBpbnQgc2NyYXRjaFdpZHRoID0gMDsKKyAgICBpbnQg
c2NyYXRjaEhlaWdodCA9IDA7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAgICBnZGtf
cGl4bWFwX2dldF9zaXplKGdTY3JhdGNoQnVmZmVyLCAmc2NyYXRjaFdpZHRoLCAmc2NyYXRjaEhl
aWdodCk7CisKKyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlm
IHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgICAgaWYgKCFnU2NyYXRjaEJ1
ZmZlciB8fCBzY3JhdGNoV2lkdGggPCB3aWR0aCB8fCBzY3JhdGNoSGVpZ2h0IDwgaGVpZ2h0KSB7
CisgICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZlcigpOworICAgICAgICAvLyBSb3VuZCB0byB0aGUg
bmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxh
ciBzaXplZCByZXF1ZXN0cy4KKyAgICAgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwg
NTsKKyAgICAgICAgaGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OworCisgICAgICAg
IGdTY3JhdGNoQnVmZmVyID0gZ2RrX3BpeG1hcF9uZXcoMCwgd2lkdGgsIGhlaWdodCwgZ2RrX2Nv
bG9ybWFwX2dldF92aXN1YWwodGhlbWUtPm1fY29sb3JtYXApLT5kZXB0aCk7CisgICAgICAgIGdk
a19kcmF3YWJsZV9zZXRfY29sb3JtYXAoZ1NjcmF0Y2hCdWZmZXIsIHRoZW1lLT5tX2NvbG9ybWFw
KTsKKyAgICB9CisgICAgbV90YXJnZXQgPSBnU2NyYXRjaEJ1ZmZlcjsKKworICAgIC8vIENsZWFy
IHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICBSZWZQdHI8Y2Fpcm9fdD4gc2NyYXRjaEJ1ZmZlckNv
bnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGdTY3JhdGNoQnVmZmVyKSk7CisgICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKHNjcmF0Y2hCdWZmZXJDb250ZXh0LmdldCgpLCBDQUlST19PUEVS
QVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCkp
OworfQorCitXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgp
Cit7CisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gYmxpdCBiYWNrIHRvIHRoZSB0YXJnZXQgaW4g
dGhlIGZhbGxiYWNrIGNhc2UuIFNlZSBhYm92ZS4KKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUg
PSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUo
KS5nZXQoKSk7CisgICAgaWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAm
JiBtX2dyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIERvbid0IHBhaW50IHRoZSByZXN1bHRzIGJhY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgor
ICAgIGlmIChtX2hhZEVycm9yKSB7CisgICAgICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFy
IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBzb3VyY2UgaGVyZS4K
KyAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBtX2dyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCk7CisgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcHJldmlvdXNTb3Vy
Y2UoY2Fpcm9fZ2V0X3NvdXJjZShjYWlyb0NvbnRleHQpKTsKKworICAgIGdka19jYWlyb19zZXRf
c291cmNlX3BpeG1hcChjYWlyb0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCBtX3RhcmdldFJlY3Qu
eCgpLCBtX3RhcmdldFJlY3QueSgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0
LCBtX3RhcmdldFJlY3QueCgpLCBtX3RhcmdldFJlY3QueSgpLCBtX3RhcmdldFJlY3Qud2lkdGgo
KSwgbV90YXJnZXRSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsKGNhaXJvQ29udGV4dCk7
CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjYWlyb0NvbnRleHQsIHByZXZpb3VzU291cmNlLmdldCgp
KTsKKyAgICBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCit2b2lkIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIEdk
a1JlY3RhbmdsZSogY2xpcFJlY3QpCit7CisgICAgY2xpcFJlY3QtPnggPSBtX3BhaW50T2Zmc2V0
LndpZHRoKCkgKyByZWN0LngoKTsKKyAgICBjbGlwUmVjdC0+eSA9IG1fcGFpbnRPZmZzZXQuaGVp
Z2h0KCkgKyByZWN0LnkoKTsKKyAgICBjbGlwUmVjdC0+d2lkdGggPSBtX3RhcmdldFJlY3Qud2lk
dGgoKTsKKyAgICBjbGlwUmVjdC0+aGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpOworfQor
Cit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3Qm
IHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFk
b3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFu
Z2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisK
KyAgICAvLyBTb21lIHdpZGdldHMgYWxzbyBuZWVkIHRoZWlyIGFsbG9jYXRpb24gYWRqdXN0ZWQg
dG8gYWNjb3VudCBmb3IgZXh0cmEgc3BhY2UuCisgICAgLy8gUmlnaHQgbm93IG9ubHkgc2Nyb2xs
YmFyIGJ1dHRvbnMgaGF2ZSBzaWduaWZpY2FudCBhbGxvY2F0aW9ucy4KKyAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZh
bGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0aW9uLnggKz0gY2xpcFJlY3QueDsKKyAgICBhbGxvY2F0
aW9uLnkgKz0gY2xpcFJlY3QueTsKKyAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdl
dCwgJmFsbG9jYXRpb24pOworCisgICAgZ3RrX3BhaW50X2JveChndGtfd2lkZ2V0X2dldF9zdHls
ZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsCisg
ICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0
a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
U3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hh
ciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVD
bGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9mbGF0X2JveChndGtfd2lk
Z2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAm
Y2xpcFJlY3QsCisgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7Cisg
ICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZj
bGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2ZvY3VzKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LAorICAgICAgICBkZXRh
aWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3Qg
SW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUs
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50
YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNh
bGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X3NsaWRlcihn
dGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dU
eXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAgICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlw
UmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIG9yaWVudGF0aW9uKTsKK30KKwor
dm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludENoZWNrKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFk
b3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFu
Z2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Cisg
ICAgZ3RrX3BhaW50X2NoZWNrKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0
LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LAorICAgICAgICBkZXRh
aWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRPcHRpb24oY29uc3Qg
SW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUs
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBH
ZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBS
ZWN0KTsKKyAgICBndGtfcGFpbnRfb3B0aW9uKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LAorICAg
ICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTaGFk
b3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBz
dGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkK
K3sKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVj
dCwgJmNsaXBSZWN0KTsKKyAgICBndGtfcGFpbnRfc2hhZG93KGd0a193aWRnZXRfZ2V0X3N0eWxl
KHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lk
Z2V0LAorICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3Rr
UGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3Rh
dGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJl
Y3Rpb24sIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0
OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50
X2Fycm93KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUs
IHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWwsCisgICAgICAgIHN0YXRpY19j
YXN0PEd0a0Fycm93VHlwZT4oYXJyb3dEaXJlY3Rpb24pLCBUUlVFLCBjbGlwUmVjdC54LCBjbGlw
UmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50VkxpbmUoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwp
Cit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJl
Y3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X3ZsaW5lKGd0a193aWRnZXRfZ2V0X3N0eWxl
KHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWws
CisgICAgICAgIGNsaXBSZWN0LnksIGNsaXBSZWN0LnkgKyByZWN0LmhlaWdodCgpLCBjbGlwUmVj
dC54KTsKK30KKworfQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFmMmM4YTc3
MWMwZTE2NzMzNzQ4ZGQ2NGY0NGVjYWMwZTBjZjk5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaAorI2RlZmluZSBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0X2gKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisKKy8vIFVzdWFsbHkgdGhpcyBpcyB0b28gZXhwZW5zaXZlIHRvIGhh
dmUgaW4gaGVhZGVycywgYnV0IEd0a1N0YXRlVHlwZSBHdGtTaGFkb3dUeXBlIGFyZQorLy8gZW51
bXMgYW5kIGNhbm5vdCBiZSBmb3J3YXJkIGRlY2xhcmVkLiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmggaXMgY3VycmVudGx5IG9ubHkKKy8vIGluY2x1ZGVkIGluIFJlbmRlclRoZW1lR3RrMi5jcHAg
YW5kIFNjcm9sbGJhclRoZW1lR3RrMi5jcHAuCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFJlbmRlclRo
ZW1lR3RrOworCitjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsK
KyAgICB+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpOworCisgICAgdm9pZCBndGtQYWludEJveChj
b25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBj
b25zdCBnY2hhciopOworICAgIHZvaWQgZ3RrUGFpbnRGbGF0Qm94KGNvbnN0IEludFJlY3QmLCBH
dGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7Cisg
ICAgdm9pZCBndGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0
ZVR5cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludFNsaWRlcihjb25zdCBJbnRS
ZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hh
ciosIEd0a09yaWVudGF0aW9uKTsKKyAgICB2b2lkIGd0a1BhaW50Q2hlY2soY29uc3QgSW50UmVj
dCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIq
KTsKKyAgICB2b2lkIGd0a1BhaW50T3B0aW9uKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBH
dGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQ
YWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtT
aGFkb3dUeXBlLCBjb25zdCBnY2hhciopOworICAgIHZvaWQgZ3RrUGFpbnRBcnJvdyhjb25zdCBJ
bnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBpbnQgYXJy
b3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludFZMaW5lKGNvbnN0
IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7CisKK3By
aXZhdGU6CisgICAgdm9pZCBjYWxjdWxhdGVDbGlwUmVjdChjb25zdCBJbnRSZWN0JiwgR2RrUmVj
dGFuZ2xlKik7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OworICAg
IEludFJlY3QgbV90YXJnZXRSZWN0OworICAgIEludFNpemUgbV9wYWludE9mZnNldDsKKyAgICBi
b29sIG1faGFkRXJyb3I7CisgICAgR2RrRHJhd2FibGUqIG1fdGFyZ2V0OworCit9OworCit9CisK
KyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorI2VuZGlmIC8vIFdpZGdldFJlbmRlcmluZ0Nv
bnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby9BdWRpb0J1c0d0
ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xYmRmNGU0MGFhZmJmMzM2MmZhMzcwZDhjMzI2YmQ4Yzc1YWM4MDhiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby9BdWRpb0J1c0d0ay5jcHAKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTAorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisKKyNpbmNsdWRlICJBdWRp
b0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxBdWRpb0J1cz4g
QXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGZsb2F0IHNh
bXBsZVJhdGUpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRm
KCIlcy53YXYiLCBuYW1lKSk7CisgICAgY29uc3QgY2hhciogZW52aXJvbm1lbnRQYXRoID0gZ2V0
ZW52KCJBVURJT19SRVNPVVJDRVNfUEFUSCIpOworICAgIEdPd25QdHI8Z2NoYXI+IGFic29sdXRl
RmlsZW5hbWU7CisgICAgaWYgKGVudmlyb25tZW50UGF0aCkKKyAgICAgICAgYWJzb2x1dGVGaWxl
bmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShlbnZpcm9ubWVudFBhdGgsIGZpbGVuYW1lLmdldCgp
LCBOVUxMKSk7CisgICAgZWxzZQorICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNldChnX2J1aWxk
X2ZpbGVuYW1lKHNoYXJlZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJyZXNvdXJjZXMiLCAiYXVk
aW8iLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOworICAgIHJldHVybiBjcmVhdGVCdXNGcm9tQXVk
aW9GaWxlKGFic29sdXRlRmlsZW5hbWUuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9Db2xvckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRlYWFj
ZmI4MTIwNzE3NjU5NDQ5ZjY3YzAxYmI2NmUwOWUzYTE4YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29sb3IuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDb2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCisgICAgOiBtX2NvbG9yKG1h
a2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCisgICAgLCBtX3Zh
bGlkKHRydWUpCit7Cit9CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKK0NvbG9yOjpDb2xv
cihjb25zdCBHZGtSR0JBJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShzdGF0aWNfY2FzdDxp
bnQ+KGMucmVkICogMjU1KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmdyZWVuICogMjU1
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmJsdWUgKiAyNTUpLAorICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKK30K
KworQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAoreworICAgIGRvdWJsZSByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYTsKKyAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
KyAgICBHZGtSR0JBIHJnYmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgcmV0
dXJuIHJnYmE7Cit9CisjZW5kaWYKKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlkN2YyZjVkZjMxNGZmM2E0NmNlNDJjNWI4
NDc0OTQ5M2YwYmFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3Jh
cGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKQEAgLTAsMCArMSw0NTQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBV
U0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrLmgiCisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckdX
b3JsZC5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXll
ci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCIKKworI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUg
PGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2RlZmluZSBIVURfQVVUT19ISURFX0lOVEVSVkFMIDMwMDAgLy8g
MyBzZWNvbmRzCisjZGVmaW5lIFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwgMTUwIC8vIDE1
MG1zCisKKy8vIFVzZSBzeW1ib2xpYyBpY29ucyBvbmx5IGlmIHdlIGJ1aWxkIHdpdGggR1RLKy0z
IHN1cHBvcnQuIFRoZXkgY291bGQKKy8vIGJlIGVuYWJsZWQgZm9yIHRoZSBHVEsrMiBidWlsZCBi
dXQgd2UnZCBuZWVkIHRvIGJ1bXAgdGhlIHJlcXVpcmVkCisvLyB2ZXJzaW9uIHRvIGF0IGxlYXN0
IDIuMjIuCisjaWYgR1RLX01BSk9SX1ZFUlNJT04gPiAyCisjZGVmaW5lIElDT05fTkFNRV9TVUZG
SVggIi1zeW1ib2xpYyIKKyNlbHNlCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVgKKyNlbmRpZgor
CisjZGVmaW5lIFBMQVlfSUNPTl9OQU1FICJtZWRpYS1wbGF5YmFjay1zdGFydCJJQ09OX05BTUVf
U1VGRklYCisjZGVmaW5lIFBBVVNFX0lDT05fTkFNRSAibWVkaWEtcGxheWJhY2stcGF1c2UiSUNP
Tl9OQU1FX1NVRkZJWAorI2RlZmluZSBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FICJ2aWV3LXJl
c3RvcmUiSUNPTl9OQU1FX1NVRkZJWAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBn
Ym9vbGVhbiBoaWRlSHVkQ2FsbGJhY2soRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29u
dHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5oaWRlSHVkKCk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gb25GdWxsc2NyZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCwgIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2hvd0h1ZCh0
cnVlKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgb25GdWxsc2NyZWVuR3Rr
QWN0aXZlTm90aWZpY2F0aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHUGFyYW1TcGVjKiBwcm9wZXJ0
eSwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBpZiAo
IWd0a193aW5kb3dfaXNfYWN0aXZlKEdUS19XSU5ET1cod2lkZ2V0KSkpCisgICAgICAgIGNvbnRy
b2xsZXItPmhpZGVIdWQoKTsKK30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNjcmVlbkd0a0Nv
bmZpZ3VyZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudENvbmZpZ3VyZSogZXZlbnQs
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJv
bGxlci0+Z3RrQ29uZmlndXJlKGV2ZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IHZvaWQgb25GdWxsc2NyZWVuR3RrRGVzdHJveShHdGtXaWRnZXQqIHdpZGdldCwgRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0
RnVsbHNjcmVlbigpOworfQorCitzdGF0aWMgdm9pZCB0b2dnbGVQbGF5UGF1c2VBY3RpdmF0ZWQo
R3RrQWN0aW9uKiBhY3Rpb24sIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xs
ZXIpCit7CisgICAgY29udHJvbGxlci0+dG9nZ2xlUGxheSgpOworfQorCitzdGF0aWMgdm9pZCBl
eGl0RnVsbHNjcmVlbkFjdGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0T25Vc2Vy
UmVxdWVzdCgpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJvZ3Jlc3NCYXJVcGRhdGVDYWxsYmFj
ayhGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIHJldHVy
biBjb250cm9sbGVyLT51cGRhdGVIdWRQcm9ncmVzc0JhcigpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gdGltZVNjYWxlQnV0dG9uUHJlc3NlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0
b24qIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQorewor
ICAgIGlmIChldmVudC0+dHlwZSAhPSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4g
RkFMU0U7CisKKyAgICBjb250cm9sbGVyLT5iZWdpblNlZWsoKTsKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB0aW1lU2NhbGVCdXR0b25SZWxlYXNlZChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrKiBjb250cm9sbGVyKQoreworICAgIGNvbnRyb2xsZXItPmVuZFNlZWsoKTsKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVTY2FsZVZhbHVlQ2hhbmdlZChHdGtXaWRn
ZXQqIHdpZGdldCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sK
KyAgICBjb250cm9sbGVyLT5kb1NlZWsoKTsKK30KKworc3RhdGljIHZvaWQgdm9sdW1lVmFsdWVD
aGFuZ2VkKEd0a1NjYWxlQnV0dG9uICpidXR0b24sIGdkb3VibGUgdmFsdWUsIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2V0Vm9s
dW1lKHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCisKK0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGs6OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQorICAgIDogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckdTdHJlYW1lcihwbGF5ZXIpCisgICAgLCBtX2h1ZFRpbWVvdXRJZCgwKQorICAgICwgbV9wcm9n
cmVzc0JhclVwZGF0ZUlkKDApCisgICAgLCBtX3NlZWtMb2NrKGZhbHNlKQorICAgICwgbV93aW5k
b3coMCkKKyAgICAsIG1faHVkV2luZG93KDApCisgICAgLCBtX3ZvbHVtZUJ1dHRvbigwKQorICAg
ICwgbV9rZXlQcmVzc1NpZ25hbElkKDApCisgICAgLCBtX2Rlc3Ryb3lTaWduYWxJZCgwKQorICAg
ICwgbV9pc0FjdGl2ZVNpZ25hbElkKDApCisgICAgLCBtX21vdGlvbk5vdGlmeVNpZ25hbElkKDAp
CisgICAgLCBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFsSWQoMCkKKyAgICAsIG1faHVkTW90aW9uTm90
aWZ5U2lnbmFsSWQoMCkKKyAgICAsIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkKDAp
CisgICAgLCBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQoMCkKKyAgICAsIG1fcGxh
eUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQoMCkKKyAgICAsIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFj
dGl2YXRlU2lnbmFsSWQoMCkKK3sKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrOjpndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQoreworICAgIHVwZGF0
ZUh1ZFBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
c2hvd0h1ZChib29sIGF1dG9IaWRlKQoreworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAg
fQorCisgICAgLy8gU2hvdyB0aGUgY3Vyc29yLgorICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3Rr
X3dpZGdldF9nZXRfd2luZG93KG1fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3NldF9jdXJzb3Io
d2luZG93LCAwKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyIGltbWVkaWF0ZWx5
IGJlZm9yZSBzaG93aW5nIHRoZSB3aW5kb3cuCisgICAgdXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsK
KyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1faHVkV2luZG93KTsKKyAgICB1cGRhdGVIdWRQb3Np
dGlvbigpOworCisgICAgLy8gU3RhcnQgcGVyaW9kaWMgdXBkYXRlcyBvZiB0aGUgcHJvZ3Jlc3Mg
YmFyLgorICAgIGlmICghbV9wcm9ncmVzc0JhclVwZGF0ZUlkKQorICAgICAgICBtX3Byb2dyZXNz
QmFyVXBkYXRlSWQgPSBnX3RpbWVvdXRfYWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUws
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2sp
LCB0aGlzKTsKKworICAgIC8vIEhpZGUgdGhlIGh1ZCBpbiBmZXcgc2Vjb25kcywgaWYgcmVxdWVz
dGVkLgorICAgIGlmIChhdXRvSGlkZSkKKyAgICAgICAgbV9odWRUaW1lb3V0SWQgPSBnX3RpbWVv
dXRfYWRkKEhVRF9BVVRPX0hJREVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KGhpZGVIdWRDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGs6OmhpZGVIdWQoKQoreworICAgIGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAg
ICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVv
dXRJZCA9IDA7CisgICAgfQorCisgICAgaWYgKCFtX2h1ZFdpbmRvdykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gS2VlcCB0aGUgaHVkIHZpc2libGUgaWYgYSBzZWVrIGlzIGluIHByb2dyZXNz
IG9yIGlmIHRoZSB2b2x1bWUKKyAgICAvLyBwb3B1cCBpcyB2aXNpYmxlLgorICAgIEd0a1dpZGdl
dCogdm9sdW1lUG9wdXAgPSBndGtfc2NhbGVfYnV0dG9uX2dldF9wb3B1cChHVEtfU0NBTEVfQlVU
VE9OKG1fdm9sdW1lQnV0dG9uKSk7CisgICAgaWYgKG1fc2Vla0xvY2sgfHwgZ3RrX3dpZGdldF9n
ZXRfdmlzaWJsZSh2b2x1bWVQb3B1cCkpIHsKKyAgICAgICAgc2hvd0h1ZCh0cnVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9n
ZXRfd2luZG93KG1fd2luZG93KTsKKyAgICBHZGtDdXJzb3IqIGN1cnNvciA9IGJsYW5rQ3Vyc29y
KCk7CisgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgY3Vyc29yKTsKKworICAgIGd0
a193aWRnZXRfaGlkZShtX2h1ZFdpbmRvdyk7CisKKyAgICBpZiAobV9wcm9ncmVzc0JhclVwZGF0
ZUlkKSB7CisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3Byb2dyZXNzQmFyVXBkYXRlSWQpOwor
ICAgICAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSAwOworICAgIH0KK30KKworc3RhdGljIGdi
b29sZWFuIG9uRnVsbHNjcmVlbkd0a0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50S2V5KiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxl
cikKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LT5rZXl2YWwpIHsKKyAgICBjYXNlIEdES19Fc2NhcGU6
CisgICAgICAgIGNvbnRyb2xsZXItPmV4aXRPblVzZXJSZXF1ZXN0KCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR0RLX3NwYWNlOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgY29u
dHJvbGxlci0+dG9nZ2xlUGxheSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19VcDoK
KyAgICAgICAgY29udHJvbGxlci0+aW5jcmVhc2VWb2x1bWUoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgY29udHJvbGxlci0+ZGVjcmVhc2VWb2x1bWUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
aW5pdGlhbGl6ZVdpbmRvdygpCit7CisgICAgbV93aW5kb3cgPSByZWludGVycHJldF9jYXN0PEd0
a1dpZGdldCo+KG1fZ3N0cmVhbWVyR1dvcmxkLT5wbGF0Zm9ybVZpZGVvV2luZG93KCktPndpbmRv
dygpKTsKKworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIGNyZWF0ZUh1ZCgpOworCisg
ICAgLy8gRW5zdXJlIGJsYWNrIGJhY2tncm91bmQuCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICBHZGtDb2xvciBjb2xvciA9IHsgMSwgMCwgMCwgMCB9OworICAgIGd0a193aWRnZXRfbW9k
aWZ5X2JnKG1fd2luZG93LCBHVEtfU1RBVEVfTk9STUFMLCAmY29sb3IpOworI2Vsc2UKKyAgICBH
ZGtSR0JBIGNvbG9yID0geyAwLCAwLCAwLCAxfTsKKyAgICBndGtfd2lkZ2V0X292ZXJyaWRlX2Jh
Y2tncm91bmRfY29sb3IobV93aW5kb3csIEdUS19TVEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsK
KyNlbmRpZgorICAgIGd0a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChtX3dpbmRvdywgRkFM
U0UpOworCisgICAgbV9rZXlQcmVzc1NpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRv
dywgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrS2V5UHJlc3NF
dmVudCksIHRoaXMpOworICAgIG1fZGVzdHJveVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdCht
X3dpbmRvdywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3kpLCB0
aGlzKTsKKyAgICBtX2lzQWN0aXZlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93
LCAibm90aWZ5Ojppcy1hY3RpdmUiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0FjdGl2ZU5v
dGlmaWNhdGlvbiksIHRoaXMpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7
CisKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRv
dyk7CisgICAgR1JlZlB0cjxHZGtDdXJzb3I+IGN1cnNvcihhZG9wdEdSZWYoYmxhbmtDdXJzb3Io
KSkpOworICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNvci5nZXQoKSk7CisK
KyAgICBtX21vdGlvbk5vdGlmeVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywg
Im1vdGlvbi1ub3RpZnktZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a01vdGlvbk5v
dGlmeUV2ZW50KSwgdGhpcyk7CisgICAgbV9jb25maWd1cmVFdmVudFNpZ25hbElkID0gZ19zaWdu
YWxfY29ubmVjdChtX3dpbmRvdywgImNvbmZpZ3VyZS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxs
c2NyZWVuR3RrQ29uZmlndXJlRXZlbnQpLCB0aGlzKTsKKworICAgIGd0a193aW5kb3dfZnVsbHNj
cmVlbihHVEtfV0lORE9XKG1fd2luZG93KSk7CisgICAgc2hvd0h1ZCh0cnVlKTsKK30KKwordm9p
ZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjp1cGRhdGVIdWRQb3NpdGlvbigpCit7Cisg
ICAgaWYgKCFtX2h1ZFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBz
Y3JlZW4gcmVjdGFuZ2xlLgorICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpbmRvd19nZXRf
c2NyZWVuKEdUS19XSU5ET1cobV93aW5kb3cpKTsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0
a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7CisgICAgR2RrUmVjdGFuZ2xlIGZ1bGxzY3Jl
ZW5SZWN0YW5nbGU7CisgICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4s
IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93KSwgJmZ1bGxz
Y3JlZW5SZWN0YW5nbGUpOworCisgICAgLy8gR2V0IHRoZSBwb3B1cCB3aW5kb3cgc2l6ZS4KKyAg
ICBpbnQgaHVkV2lkdGgsIGh1ZEhlaWdodDsKKyAgICBndGtfd2luZG93X2dldF9zaXplKEdUS19X
SU5ET1cobV9odWRXaW5kb3cpLCAmaHVkV2lkdGgsICZodWRIZWlnaHQpOworCisgICAgLy8gUmVz
aXplIHRoZSBodWQgdG8gdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHNjcmVlbi4KKyAgICBndGtfd2lu
ZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3RhbmdsZS53
aWR0aCwgaHVkSGVpZ2h0KTsKKworICAgIC8vIE1vdmUgdGhlIGh1ZCB0byB0aGUgYm90dG9tIG9m
IHRoZSBzY3JlZW4uCisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cobV9odWRXaW5kb3cp
LCBmdWxsc2NyZWVuUmVjdGFuZ2xlLngsIGZ1bGxzY3JlZW5SZWN0YW5nbGUuaGVpZ2h0ICsgZnVs
bHNjcmVlblJlY3RhbmdsZS55IC0gaHVkSGVpZ2h0KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrOjpkZXN0cm95V2luZG93KCkKK3sKKyAgICBpZiAoIW1faHVkV2luZG93
KQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93
aW5kb3csIG1fa2V5UHJlc3NTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25u
ZWN0KG1fd2luZG93LCBtX2Rlc3Ryb3lTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KG1fd2luZG93LCBtX2lzQWN0aXZlU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hh
bmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCk7CisgICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBtX2NvbmZpZ3VyZUV2ZW50U2ln
bmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2h1ZFdpbmRvdywgbV9o
dWRNb3Rpb25Ob3RpZnlTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0
KG1fdGltZUhTY2FsZSwgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9u
UmVsZWFzZWRTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGlt
ZUhTY2FsZSwgbV9oc2NhbGVVcGRhdGVJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25u
ZWN0KG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV9wbGF5UGF1c2VBY3Rpb24sIG1fcGxheUFjdGlvbkFjdGl2YXRlU2ln
bmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2V4aXRGdWxsc2NyZWVu
QWN0aW9uLCBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKTsKKworICAgIGlm
IChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1lb3V0
SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcHJv
Z3Jlc3NCYXJVcGRhdGVJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0Jh
clVwZGF0ZUlkKTsKKyAgICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gMDsKKyAgICB9CisK
KyAgICBndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworCisgICAgaWYgKG1faHVkV2luZG93KQor
ICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9odWRXaW5kb3cpOworICAgIG1faHVkV2luZG93
ID0gMDsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpwbGF5U3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICBpZiAobV9jbGllbnQtPm1lZGlhUGxheWVySXNQYXVzZWQoKSkKKyAg
ICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheVBhdXNlQWN0aW9uLCAidG9vbHRpcCIsIF8oIlBsYXki
KSwgImljb24tbmFtZSIsIFBMQVlfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAg
IGdfb2JqZWN0X3NldChtX3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0aXAiLCBfKCJQYXVzZSIpLCAi
aWNvbi1uYW1lIiwgUEFVU0VfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBzaG93SHVkKCFtX2NsaWVu
dC0+bWVkaWFQbGF5ZXJJc1BhdXNlZCgpKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjp2b2x1bWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fdm9sdW1lQnV0dG9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Jsb2NrKG1fdm9sdW1lQnV0
dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShH
VEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0dG9uKSwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRl
SWQpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Om11dGVDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAoIW1fdm9sdW1lQnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBn
X3NpZ25hbF9oYW5kbGVyX2Jsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsK
KyAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1l
QnV0dG9uKSwgbV9wbGF5ZXItPm11dGVkKCkgPyAwIDogbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRl
SWQpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmJlZ2luU2Vlaygp
Cit7CisgICAgbV9zZWVrTG9jayA9IHRydWU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0azo6ZG9TZWVrKCkKK3sKKyAgICBpZiAoIW1fc2Vla0xvY2spCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGxheWVyLT5zZWVrKGd0a19yYW5nZV9nZXRfdmFsdWUoR1RLX1JBTkdF
KG1fdGltZUhTY2FsZSkpKm1fcGxheWVyLT5kdXJhdGlvbigpIC8gMTAwKTsKK30KKwordm9pZCBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjplbmRTZWVrKCkKK3sKKyAgICBtX3NlZWtMb2Nr
ID0gZmFsc2U7Cit9CisKK2dib29sZWFuIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnVw
ZGF0ZUh1ZFByb2dyZXNzQmFyKCkKK3sKKyAgICBmbG9hdCBtZWRpYUR1cmF0aW9uKG1fcGxheWVy
LT5kdXJhdGlvbigpKTsKKyAgICBmbG9hdCBtZWRpYVBvc2l0aW9uKG1fcGxheWVyLT5jdXJyZW50
VGltZSgpKTsKKworICAgIGlmICghbV9zZWVrTG9jaykgeworICAgICAgICBnZG91YmxlIHZhbHVl
ID0gMC4wOworCisgICAgICAgIGlmIChtZWRpYVBvc2l0aW9uICYmIG1lZGlhRHVyYXRpb24pCisg
ICAgICAgICAgICB2YWx1ZSA9IChtZWRpYVBvc2l0aW9uICogMTAwLjApIC8gbWVkaWFEdXJhdGlv
bjsKKworICAgICAgICBHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gZ3RrX3JhbmdlX2dldF9h
ZGp1c3RtZW50KEdUS19SQU5HRShtX3RpbWVIU2NhbGUpKTsKKyAgICAgICAgZ3RrX2FkanVzdG1l
bnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBndGtfcmFuZ2Vf
c2V0X2ZpbGxfbGV2ZWwoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIChtX3BsYXllci0+bWF4VGlt
ZUxvYWRlZCgpIC8gbWVkaWFEdXJhdGlvbikqIDEwMCk7CisKKyAgICBnY2hhciogbGFiZWwgPSBn
X3N0cmR1cF9wcmludGYoIiVzIC8gJXMiLCB0aW1lVG9TdHJpbmcobWVkaWFQb3NpdGlvbikudXRm
OCgpLmRhdGEoKSwgdGltZVRvU3RyaW5nKG1lZGlhRHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwobV90aW1lTGFiZWwpLCBsYWJlbCk7Cisg
ICAgZ19mcmVlKGxhYmVsKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBGdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyR3RrOjpjcmVhdGVIdWQoKQoreworICAgIG1faHVkV2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgZ3RrX3dpbmRvd19zZXRfZ3Jhdml0
eShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgR0RLX0dSQVZJVFlfU09VVEhfV0VTVCk7CisgICAg
Z3RrX3dpbmRvd19zZXRfdHlwZV9oaW50KEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBHREtfV0lO
RE9XX1RZUEVfSElOVF9OT1JNQUwpOworCisgICAgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZCA9
IGdfc2lnbmFsX2Nvbm5lY3QobV9odWRXaW5kb3csICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19D
QUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMpOworCisjaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfaGJveF9uZXco
RkFMU0UsIDQpOworI2Vsc2UKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfYm94X25ldyhHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgNCk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKG1faHVkV2luZG93KSwgaGJveCk7CisKKyAgICBtX3BsYXlQYXVzZUFj
dGlvbiA9IGd0a19hY3Rpb25fbmV3KCJwbGF5IiwgXygiUGxheSAvIFBhdXNlIiksIF8oIlBsYXkg
b3IgcGF1c2UgdGhlIG1lZGlhIiksIFBBVVNFX0lDT05fTkFNRSk7CisgICAgbV9wbGF5QWN0aW9u
QWN0aXZhdGVTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5UGF1c2VBY3Rpb24sICJh
Y3RpdmF0ZSIsIEdfQ0FMTEJBQ0sodG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKSwgdGhpcyk7CisK
KyAgICBHdGtXaWRnZXQqIGl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV90b29sX2l0ZW0obV9wbGF5
UGF1c2VBY3Rpb24pOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBpdGVt
LCBGQUxTRSwgVFJVRSwgMCk7CisKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25l
dyhfKCJUaW1lOiIpKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbGFi
ZWwsIEZBTFNFLCBUUlVFLCAwKTsKKworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBH
VEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDEwMC4wLCAwLjEsIDEu
MCwgMS4wKSk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBtX3RpbWVIU2NhbGUgPSBn
dGtfaHNjYWxlX25ldyhhZGp1c3RtZW50KTsKKyNlbHNlCisgICAgbV90aW1lSFNjYWxlID0gZ3Rr
X3NjYWxlX25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgYWRqdXN0bWVudCk7CisjZW5k
aWYKKyAgICBndGtfc2NhbGVfc2V0X2RyYXdfdmFsdWUoR1RLX1NDQUxFKG1fdGltZUhTY2FsZSks
IEZBTFNFKTsKKyAgICBndGtfcmFuZ2Vfc2V0X3Nob3dfZmlsbF9sZXZlbChHVEtfUkFOR0UobV90
aW1lSFNjYWxlKSwgVFJVRSk7CisgICAgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQg
PSBnX3NpZ25hbF9jb25uZWN0KG1fdGltZUhTY2FsZSwgImJ1dHRvbi1wcmVzcy1ldmVudCIsIEdf
Q0FMTEJBQ0sodGltZVNjYWxlQnV0dG9uUHJlc3NlZCksIHRoaXMpOworICAgIG1fdGltZVNjYWxl
QnV0dG9uUmVsZWFzZWRTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAi
YnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZUJ1dHRvblJlbGVhc2Vk
KSwgdGhpcyk7CisgICAgbV9oc2NhbGVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1l
SFNjYWxlLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGltZVNjYWxlVmFsdWVDaGFuZ2Vk
KSwgdGhpcyk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbV90aW1l
SFNjYWxlLCBUUlVFLCBUUlVFLCAwKTsKKworICAgIG1fdGltZUxhYmVsID0gZ3RrX2xhYmVsX25l
dygiIik7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUxhYmVs
LCBGQUxTRSwgVFJVRSwgMCk7CisKKyAgICAvLyBWb2x1bWUgYnV0dG9uLgorICAgIG1fdm9sdW1l
QnV0dG9uID0gZ3RrX3ZvbHVtZV9idXR0b25fbmV3KCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1goaGJveCksIG1fdm9sdW1lQnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3Rr
X3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiks
IG1fcGxheWVyLT52b2x1bWUoKSk7CisgICAgbV92b2x1bWVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nv
bm5lY3QobV92b2x1bWVCdXR0b24sICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2b2x1bWVW
YWx1ZUNoYW5nZWQpLCB0aGlzKTsKKworICAgIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24gPSBndGtf
YWN0aW9uX25ldygiZXhpdCIsIF8oIkV4aXQgRnVsbHNjcmVlbiIpLCBfKCJFeGl0IGZyb20gZnVs
bHNjcmVlbiBtb2RlIiksIEVYSVRfRlVMTFNDUkVFTl9JQ09OX05BTUUpOworICAgIG1fZXhpdEZ1
bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fZXhpdEZ1
bGxzY3JlZW5BY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soZXhpdEZ1bGxzY3JlZW5BY3Rp
dmF0ZWQpLCB0aGlzKTsKKyAgICBnX29iamVjdF9zZXQobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwg
Imljb24tbmFtZSIsIEVYSVRfRlVMTFNDUkVFTl9JQ09OX05BTUUsIE5VTEwpOworICAgIGl0ZW0g
PSBndGtfYWN0aW9uX2NyZWF0ZV90b29sX2l0ZW0obV9leGl0RnVsbHNjcmVlbkFjdGlvbik7Cisg
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIGl0ZW0sIEZBTFNFLCBUUlVFLCAw
KTsKKworICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IGdfdGltZW91dF9hZGQoUFJPR1JFU1Nf
QkFSX1VQREFURV9JTlRFUlZBTCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocHJvZ3Jl
c3NCYXJVcGRhdGVDYWxsYmFjayksIHRoaXMpOworCisgICAgcGxheVN0YXRlQ2hhbmdlZCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDU3NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQxYjJjNDNiNjkxNDRiYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ay5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrX2gKKyNkZWZpbmUgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCisKKyNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVF
Tl9WSURFTykKKworI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR3RrIDogcHVibGljIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIgeworcHVi
bGljOgorICAgIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZSopOworCisgICAgdm9pZCBndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1
cmUqKTsKKworICAgIHZvaWQgcGxheVN0YXRlQ2hhbmdlZCgpOworCisgICAgdm9pZCBiZWdpblNl
ZWsoKTsKKyAgICB2b2lkIGRvU2VlaygpOworICAgIHZvaWQgZW5kU2VlaygpOworCisgICAgdm9p
ZCBoaWRlSHVkKCk7CisgICAgdm9pZCBzaG93SHVkKGJvb2wpOworICAgIGdib29sZWFuIHVwZGF0
ZUh1ZFByb2dyZXNzQmFyKCk7CisKKyAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICB2b2lk
IG11dGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplV2luZG93KCk7
CisgICAgdm9pZCBkZXN0cm95V2luZG93KCk7CisKKyAgICB2b2lkIGNyZWF0ZUh1ZCgpOworICAg
IHZvaWQgdXBkYXRlSHVkUG9zaXRpb24oKTsKKworICAgIGd1aW50IG1faHVkVGltZW91dElkOwor
ICAgIGd1aW50IG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZDsKKyAgICBndWludCBtX3Byb2dyZXNzQmFy
RmlsbFVwZGF0ZUlkOworICAgIGd1aW50IG1faHNjYWxlVXBkYXRlSWQ7CisgICAgZ3VpbnQgbV92
b2x1bWVVcGRhdGVJZDsKKyAgICBib29sIG1fc2Vla0xvY2s7CisgICAgR3RrV2lkZ2V0KiBtX3dp
bmRvdzsKKyAgICBHdGtXaWRnZXQqIG1faHVkV2luZG93OworICAgIEd0a0FjdGlvbiogbV9wbGF5
UGF1c2VBY3Rpb247CisgICAgR3RrQWN0aW9uKiBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uOworICAg
IEd0a1dpZGdldCogbV90aW1lSFNjYWxlOworICAgIEd0a1dpZGdldCogbV90aW1lTGFiZWw7Cisg
ICAgR3RrV2lkZ2V0KiBtX3ZvbHVtZUJ1dHRvbjsKKworICAgIHVuc2lnbmVkIGxvbmcgbV9rZXlQ
cmVzc1NpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9kZXN0cm95U2lnbmFsSWQ7CisgICAg
dW5zaWduZWQgbG9uZyBtX2lzQWN0aXZlU2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBtX21v
dGlvbk5vdGlmeVNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9jb25maWd1cmVFdmVudFNp
Z25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZDsKKyAg
ICB1bnNpZ25lZCBsb25nIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkOworICAgIHVu
c2lnbmVkIGxvbmcgbV90aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkOworICAgIHVuc2ln
bmVkIGxvbmcgbV9wbGF5QWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25n
IG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQ7Cit9OworCit9CisjZW5kaWYK
KworI2VuZGlmIC8vIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYjRiNmJkMGUwNWZjMTFiMmIxYTRiNmM4MDAxYjJhYTA2N2RmZWIwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5o
IgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorCitHZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhi
dWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIHJldHVybiBnZGtfcGl4YnVmX2dl
dF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzdXJmYWNlKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3Jh
cGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3Mv
R2RrQ2Fpcm9VdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmFlN2M3NjgzOWRhMDc5NzFmN2M5ZTBh
NThkNzdlNWZlMTJiMmI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9n
cmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdka0NhaXJvVXRpbGl0
aWVzX2gKKyNkZWZpbmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAorCitHZGtQaXhidWYqIGNhaXJvSW1h
Z2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90Kik7CisKKyNlbmRpZiAvLyBHZGtD
YWlyb1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNz
L0ljb25HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JY29uR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42MTkxMmE4OTM5ZTM0MGVjMGRhOWRmNzUwNDgwOWRlOGViYjVhNWY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JY29uR3RrLmNwcApA
QCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb24uaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6SWNvbigpCisgICAg
OiBtX2ljb24oMCkKK3sKK30KKworSWNvbjo6fkljb24oKQoreworICAgIGlmIChtX2ljb24pCisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKG1faWNvbik7Cit9CisKK3N0YXRpYyBTdHJpbmcgbG9va3Vw
SWNvbk5hbWUoU3RyaW5nIE1JTUVUeXBlKQoreworICAgIC8qCisgICAgIExvb2t1cCBhbiBhcHBy
b3ByaWF0ZSBpY29uIGFjY29yZGluZyB0byBlaXRoZXIgdGhlIEljb24gTmFtaW5nIFNwZWMKKyAg
ICAgb3IgY29udmVudGlvbmFsIEdub21lIGljb24gbmFtZXMgcmVzcGVjdGl2ZWx5LgorCisgICAg
IFNlZSBodHRwOi8vc3RhbmRhcmRzLmZyZWVkZXNrdG9wLm9yZy9pY29uLW5hbWluZy1zcGVjL2lj
b24tbmFtaW5nLXNwZWMtbGF0ZXN0Lmh0bWwKKworICAgICBUaGUgaWNvbiB0aGVtZSBpcyBwcm9i
ZWQgZm9yIHRoZSBmb2xsb3dpbmcgbmFtZXM6CisgICAgIDEuIG1lZGlhLXN1YnR5cGUKKyAgICAg
Mi4gZ25vbWUtbWltZS1tZWRpYS1zdWJ0eXBlCisgICAgIDMuIG1lZGlhLXgtZ2VuZXJpYworICAg
ICA0LiBnbm9tZS1taW1lLW1lZGlhCisKKyAgICAgSW4gdGhlIHdvcnN0IGNhc2UgaXQgZmFsbHMg
YmFjayB0byB0aGUgc3RvY2sgZmlsZSBpY29uLgorICAgICovCisgICAgaW50IHBvcyA9IE1JTUVU
eXBlLmZpbmQoJy8nKTsKKyAgICBpZiAocG9zID49IDApIHsKKyAgICAgICAgU3RyaW5nIG1lZGlh
ID0gTUlNRVR5cGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIFN0cmluZyBzdWJ0eXBlID0g
TUlNRVR5cGUuc3Vic3RyaW5nKHBvcyArIDEpOworICAgICAgICBHdGtJY29uVGhlbWUqIGljb25U
aGVtZSA9IGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCk7CisgICAgICAgIFN0cmluZyBpY29u
TmFtZSA9IG1lZGlhICsgIi0iICsgc3VidHlwZTsKKyAgICAgICAgaWYgKGd0a19pY29uX3RoZW1l
X2hhc19pY29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAg
ICByZXR1cm4gaWNvbk5hbWU7CisgICAgICAgIGljb25OYW1lID0gImdub21lLW1pbWUtIiArIG1l
ZGlhICsgIi0iICsgc3VidHlwZTsKKyAgICAgICAgaWYgKGd0a19pY29uX3RoZW1lX2hhc19pY29u
KGljb25UaGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4g
aWNvbk5hbWU7CisgICAgICAgIGljb25OYW1lID0gbWVkaWEgKyAiLXgtZ2VuZXJpYyI7CisgICAg
ICAgIGlmIChndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0Zjgo
KS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOworICAgICAgICBpY29uTmFt
ZSA9IG1lZGlhICsgImdub21lLW1pbWUtIiArIG1lZGlhOworICAgICAgICBpZiAoZ3RrX2ljb25f
dGhlbWVfaGFzX2ljb24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBpY29uTmFtZTsKKyAgICB9CisgICAgcmV0dXJuIEdUS19TVE9DS19GSUxF
OworfQorCisvLyBGSVhNRTogTW92ZSB0aGUgY29kZSB0byBDaHJvbWVDbGllbnQ6Omljb25Gb3JG
aWxlcygpLgorUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKK3sKKyAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZmlsZW5hbWVzLnNpemUoKSA9PSAxKSB7
CisgICAgICAgIGlmICghZ19wYXRoX3NraXBfcm9vdChmaWxlbmFtZXNbMF0udXRmOCgpLmRhdGEo
KSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBTdHJpbmcgTUlNRVR5cGUgPSBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoZmlsZW5hbWVzWzBdKTsKKyAgICAg
ICAgU3RyaW5nIGljb25OYW1lID0gbG9va3VwSWNvbk5hbWUoTUlNRVR5cGUpOworCisgICAgICAg
IFJlZlB0cjxJY29uPiBpY29uID0gYWRvcHRSZWYobmV3IEljb24pOworICAgICAgICBpY29uLT5t
X2ljb24gPSBndGtfaWNvbl90aGVtZV9sb2FkX2ljb24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1
bHQoKSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSwgMTYsIEdUS19JQ09OX0xPT0tVUF9VU0VfQlVJ
TFRJTiwgMCk7CisgICAgICAgIGlmICghaWNvbi0+bV9pY29uKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBpY29uLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJY29uOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
VE9ETzogU2NhbGUvY2xpcCB0aGUgaW1hZ2UgaWYgbmVjZXNzYXJ5LgorICAgIGNhaXJvX3QqIGNy
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgY2Fpcm9fc2F2ZShjcik7
CisgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBtX2ljb24sIHJlY3QueCgpLCBy
ZWN0LnkoKSk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJHdGsu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjIyMGMxYjlmMDRkNTU0OWJlNmM0MzhkM2Y5MTRmMzA5ZDE2MTYwN2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyR3RrLmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHUmVmUHRyR3Rr
LmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFn
ZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IGRvdWJsZSogcXVhbGl0eSwgR093blB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNp
emUpCit7CisgICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29t
ZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCisgICAgLy8gaHR0cDovL2RldmVs
b3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5o
dG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2CisKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVU
eXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7CisgICAgaWYgKHR5cGUgIT0gImpwZWciICYm
IHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBl
ICE9ICJibXAiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gcGl4YnVmOworICAgIGlmICh0eXBlID09ICJqcGVnIikgeworICAgICAgICAvLyBKUEVHIGRv
ZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhh
dCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCisgICAgICAgIC8vIGNvbXBv
c2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9y
dCBhbHBoYS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQs
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLCBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJv
SW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQor
ICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1Zihz
dXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdFcnJvciogZXJyb3IgPSAwOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYm
ICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1
YWxpdHlTdHJpbmcgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFs
aXR5ICogMTAwLjAgKyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihw
aXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5k
YXRhKCksICZlcnJvciwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5V
TEwpOworICAgIH0gZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1
Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEo
KSwgJmVycm9yLCBOVUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSog
cXVhbGl0eSwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
KworICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcigwKTsKKyAgICBnc2l6ZSBidWZmZXJTaXplOwor
ICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5cGUsIHF1YWxpdHks
IGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZl
Y3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShidWZmZXIuZ2V0KCksIGJ1
ZmZlclNpemUsIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3Jh
cGhpY3MvSW1hZ2VHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMmFjMGViMjM4OTIyY2UyYTNhOWY4MjY1
MjZkMTI3ZGViODY4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dy
YXBoaWNzL0ltYWdlR3RrLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgiCisjaW5jbHVkZSAiR2Rr
Q2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNoYXIqIGdldFBhdGhUb0ltYWdl
UmVzb3VyY2UoY2hhciogcmVzb3VyY2UpCit7CisgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVRfVE9Q
X0xFVkVMIikpCisgICAgICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0ZW52KCJXRUJL
SVRfVE9QX0xFVkVMIiksICJTb3VyY2UiLCAiV2ViQ29yZSIsICJSZXNvdXJjZXMiLCByZXNvdXJj
ZSwgTlVMTCk7CisKKyAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQ
YXRoKCkuZGF0YSgpLCAiaW1hZ2VzIiwgcmVzb3VyY2UsIE5VTEwpOworfQorCitzdGF0aWMgQ1N0
cmluZyBnZXRUaGVtZUljb25GaWxlTmFtZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKK3sK
KyAgICBHdGtJY29uSW5mbyogaWNvbkluZm8gPSBndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihn
dGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLAorICAgICAgICBuYW1lLCBzaXplLCBHVEtfSUNP
Tl9MT09LVVBfTk9fU1ZHKTsKKyAgICAvLyBUcnkgdG8gZmFsbGJhY2sgb24gTUlTU0lOR19JTUFH
RS4KKyAgICBpZiAoIWljb25JbmZvKQorICAgICAgICBpY29uSW5mbyA9IGd0a19pY29uX3RoZW1l
X2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksCisgICAgICAgICAgICBH
VEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwgc2l6ZSwgR1RLX0lDT05fTE9PS1VQX05PX1NWRyk7Cisg
ICAgaWYgKGljb25JbmZvKSB7CisgICAgICAgIEdPd25QdHI8R3RrSWNvbkluZm8+IGluZm8oaWNv
bkluZm8pOworICAgICAgICByZXR1cm4gQ1N0cmluZyhndGtfaWNvbl9pbmZvX2dldF9maWxlbmFt
ZShpbmZvLmdldCgpKSk7CisgICAgfQorCisgICAgLy8gTm8gaWNvbiB3YXMgZm91bmQsIHRoaXMg
Y2FuIGhhcHBlbiBpZiBub3QgR1RLIHRoZW1lIGlzIHNldC4gSW4KKyAgICAvLyB0aGF0IGNhc2Ug
YW4gZW1wdHkgSW1hZ2Ugd2lsbCBiZSBjcmVhdGVkLgorICAgIHJldHVybiBDU3RyaW5nKCk7Cit9
CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9hZFJlc291cmNlU2hhcmVkQnVm
ZmVyKENTdHJpbmcgbmFtZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBjb250ZW50OworICAgIGdz
aXplIGxlbmd0aDsKKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMobmFtZS5kYXRhKCksICZj
b250ZW50Lm91dFB0cigpLCAmbGVuZ3RoLCAwKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKCk7CisKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5n
ZXQoKSwgbGVuZ3RoKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3Jt
RGF0YSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IGxvYWRJbWFnZUZyb21GaWxlKENTdHJp
bmcgZmlsZU5hbWUpCit7CisgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFmaWxlTmFtZS5pc051bGwoKSkgeworICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXIoZmlsZU5h
bWUpOworICAgICAgICBpbWctPnNldERhdGEoYnVmZmVyLnJlbGVhc2UoKSwgdHJ1ZSk7CisgICAg
fQorICAgIHJldHVybiBpbWcucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBDU3RyaW5n
IGZpbGVOYW1lOworICAgIGlmICghc3RyY21wKCJtaXNzaW5nSW1hZ2UiLCBuYW1lKSkKKyAgICAg
ICAgZmlsZU5hbWUgPSBnZXRUaGVtZUljb25GaWxlTmFtZShHVEtfU1RPQ0tfTUlTU0lOR19JTUFH
RSwgMTYpOworICAgIGlmIChmaWxlTmFtZS5pc051bGwoKSkgeworICAgICAgICBHT3duUHRyPGdj
aGFyPiBpbWFnZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcy5wbmciLCBuYW1lKSk7CisgICAgICAg
IEdPd25QdHI8Z2NoYXI+IGdsaWJGaWxlTmFtZShnZXRQYXRoVG9JbWFnZVJlc291cmNlKGltYWdl
TmFtZS5nZXQoKSkpOworICAgICAgICBmaWxlTmFtZSA9IGdsaWJGaWxlTmFtZS5nZXQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbG9hZEltYWdlRnJvbUZpbGUoZmlsZU5hbWUpOworfQorCitQYXNz
UmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5h
bWUsIGludCBzaXplKQoreworICAgIHJldHVybiBsb2FkSW1hZ2VGcm9tRmlsZShnZXRUaGVtZUlj
b25GaWxlTmFtZShuYW1lLCBzaXplKSk7Cit9CisKK0dka1BpeGJ1ZiogQml0bWFwSW1hZ2U6Omdl
dEdka1BpeGJ1ZigpCit7CisgICAgTmF0aXZlSW1hZ2VDYWlybyogaW1hZ2UgPSBuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBpbWFnZSA/IGNhaXJvSW1hZ2VTdXJmYWNl
VG9HZGtQaXhidWYoaW1hZ2UtPnN1cmZhY2UoKSkgOiAwOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFBvaW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MDIxNTgxZThl
ZDk0YTllYmVjMWRlZWJjOTViZDAxMzI1NjczNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFBvaW50R3RrLmNwcApAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCisjaW5jbHVkZSA8Z2RrL2dk
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBvaW50OjpJbnRQb2ludChjb25zdCBH
ZGtQb2ludCYgcCkKKyAgICA6IG1feChwLngpCisgICAgLCBtX3kocC55KQoreworfQorCitJbnRQ
b2ludDo6b3BlcmF0b3IgR2RrUG9pbnQoKSBjb25zdAoreworICAgIEdka1BvaW50IHAgPSB7IHgo
KSwgeSgpIH07CisgICAgcmV0dXJuIHA7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFJlY3RHdGsuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFmMzEyODE5YWZjYTExYWQ3NzdkMzQyYzdhMzk0MDY0NzlmMjM1OGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFJlY3RHdGsuY3BwCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1
ZGUgPGdkay9nZGsuaD4KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgR2RrUmVjdGFuZ2xlJiByKQorICAgIDog
bV9sb2NhdGlvbihJbnRQb2ludChyLngsIHIueSkpCisgICAgLCBtX3NpemUoci53aWR0aCwgci5o
ZWlnaHQpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIEdka1JlY3RhbmdsZSgpIGNvbnN0Cit7
CisgICAgR2RrUmVjdGFuZ2xlIHIgPSB7IHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9Owor
ICAgIHJldHVybiByOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGI0
ODJkOGZjMzc1YWIxNzc5M2QxYTBhZTc5OWQ5ODliYjFlYzZlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCkBA
IC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKwor
I2RlZmluZSBTRUNSRVRfV0lUSF9VTlNUQUJMRSAxCisjZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVD
VF9UT19DSEFOR0UgMQorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5j
bHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVk
ZSA8bGlic2VjcmV0L3NlY3JldC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVu
dGlhbEJhY2tpbmdTdG9yZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDcmVkZW50aWFs
QmFja2luZ1N0b3JlLCBiYWNraW5nU3RvcmUsICgpKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3Jl
OworfQorCitzdGF0aWMgR1JlZlB0cjxHSGFzaFRhYmxlPiBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFi
bGVGcm9tQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Us
IGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsKCkpCit7CisgICAgU291
cFVSSSogdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkoY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkp
OworICAgIEdSZWZQdHI8R0hhc2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihzZWNyZXRf
YXR0cmlidXRlc19idWlsZCgKKyAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywK
KyAgICAgICAgImRvbWFpbiIsIHNvdXBfYXV0aF9nZXRfcmVhbG0oY2hhbGxlbmdlLnNvdXBBdXRo
KCkpLAorICAgICAgICAic2VydmVyIiwgdXJpLT5ob3N0LAorICAgICAgICAicHJvdG9jb2wiLCB1
cmktPnNjaGVtZSwKKyAgICAgICAgImF1dGh0eXBlIiwgc291cF9hdXRoX2dldF9zY2hlbWVfbmFt
ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSksCisgICAgICAgICJwb3J0IiwgdXJpLT5wb3J0LCAwKSk7
CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYXR0cmlidXRl
czsKKworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoYXR0cmlidXRlcy5nZXQoKSwgZ19zdHJkdXAo
InVzZXIiKSwgZ19zdHJkdXAoY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSkpOworICAg
IHJldHVybiBhdHRyaWJ1dGVzOworfQorCitzdHJ1Y3QgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFz
eW5jUmVhZHlDYWxsYmFja0RhdGEgeworICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRl
bnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkKiBkYXRhOworfTsK
Kworc3RhdGljIHZvaWQgY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFjayhT
ZWNyZXRTZXJ2aWNlKiBzZXJ2aWNlLCBHQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0LCBDcmVkZW50
aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSogY2FsbGJhY2tEYXRhKQorewor
ICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFj
ayBjYWxsYmFjayA9IGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2s7CisgICAgdm9pZCogZGF0YSA9IGNh
bGxiYWNrRGF0YS0+ZGF0YTsKKyAgICBkZWxldGUgY2FsbGJhY2tEYXRhOworCisgICAgR093blB0
cjxHRXJyb3I+IGVycm9yOworICAgIEdPd25QdHI8R0xpc3Q+IGVsZW1lbnRzKHNlY3JldF9zZXJ2
aWNlX3NlYXJjaF9maW5pc2goc2VydmljZSwgYXN5bmNSZXN1bHQsICZlcnJvci5vdXRQdHIoKSkp
OworICAgIGlmIChlcnJvciB8fCAhZWxlbWVudHMgfHwgIWVsZW1lbnRzLT5kYXRhKSB7CisgICAg
ICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBHUmVmUHRyPFNlY3JldEl0ZW0+IHNlY3JldEl0ZW0gPSBhZG9wdEdSZWYoc3RhdGlj
X2Nhc3Q8U2VjcmV0SXRlbSo+KGVsZW1lbnRzLT5kYXRhKSk7CisgICAgR1JlZlB0cjxHSGFzaFRh
YmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9hdHRyaWJ1dGVzKHNl
Y3JldEl0ZW0uZ2V0KCkpKTsKKyAgICBTdHJpbmcgdXNlciA9IFN0cmluZzo6ZnJvbVVURjgoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5nZXQo
KSwgInVzZXIiKSkpOworICAgIGlmICh1c2VyLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxsYmFj
ayhDcmVkZW50aWFsKCksIGRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6
ZV90IGxlbmd0aDsKKyAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBzZWNyZXRWYWx1ZSA9IGFkb3B0
R1JlZihzZWNyZXRfaXRlbV9nZXRfc2VjcmV0KHNlY3JldEl0ZW0uZ2V0KCkpKTsKKyAgICBjb25z
dCBjaGFyKiBwYXNzd29yZERhdGEgPSBzZWNyZXRfdmFsdWVfZ2V0KHNlY3JldFZhbHVlLmdldCgp
LCAmbGVuZ3RoKTsKKyAgICBTdHJpbmcgcGFzc3dvcmQgPSBTdHJpbmc6OmZyb21VVEY4KHBhc3N3
b3JkRGF0YSwgbGVuZ3RoKTsKKworICAgIGNhbGxiYWNrKENyZWRlbnRpYWwodXNlciwgcGFzc3dv
cmQsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCksIGRhdGEpOworfQorCit2b2lkIENy
ZWRlbnRpYWxCYWNraW5nU3RvcmU6OmNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxi
YWNrIGNhbGxiYWNrLCB2b2lkKiBkYXRhKQoreworICAgIC8vIFRoZSBkZWZhdWx0IGZsYWcgb25s
eSByZXR1cm5zIHRoZSBtb3N0IHJlY2VudCBpdGVtLCBub3QgYWxsIG9mIHRoZW0uCisgICAgU2Vj
cmV0U2VhcmNoRmxhZ3Mgc2VhcmNoRmxhZ3MgPSBzdGF0aWNfY2FzdDxTZWNyZXRTZWFyY2hGbGFn
cz4oU0VDUkVUX1NFQVJDSF9VTkxPQ0sgfCBTRUNSRVRfU0VBUkNIX0xPQURfU0VDUkVUUyk7Cisg
ICAgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEqIGNhbGxiYWNr
RGF0YSA9IG5ldyBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YTsK
KyAgICBjYWxsYmFja0RhdGEtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgY2FsbGJhY2tEYXRh
LT5kYXRhID0gZGF0YTsKKworICAgIHNlY3JldF9zZXJ2aWNlX3NlYXJjaCgKKyAgICAgICAgMCwg
Ly8gVGhlIGRlZmF1bHQgU2VjcmV0U2VydmljZS4KKyAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01Q
QVRfTkVUV09SSywKKyAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5n
ZShjaGFsbGVuZ2UpLmdldCgpLAorICAgICAgICBzZWFyY2hGbGFncywKKyAgICAgICAgMCwgLy8g
Y2FuY2VsbGFibGUKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNr
PihjcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrKSwKKyAgICAgICAgY2Fs
bGJhY2tEYXRhKTsKK30KKwordm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpzdG9yZUNyZWRl
bnRpYWxzRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgQ1N0cmluZyB1dGY4UGFz
c3dvcmQgPSBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpOworICAgIEdSZWZQdHI8U2VjcmV0
VmFsdWU+IG5ld1NlY3JldFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF92YWx1ZV9uZXcodXRmOFBh
c3N3b3JkLmRhdGEoKSwgdXRmOFBhc3N3b3JkLmxlbmd0aCgpLCAidGV4dC9wbGFpbiIpKTsKKwor
ICAgIHNlY3JldF9zZXJ2aWNlX3N0b3JlKAorICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNy
ZXRTZXJ2aWNlLgorICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorICAgICAg
ICBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3JlZGVu
dGlhbCkuZ2V0KCksCisgICAgICAgIFNFQ1JFVF9DT0xMRUNUSU9OX0RFRkFVTFQsCisgICAgICAg
IF8oIldlYktpdEdUSysgcGFzc3dvcmQiKSwKKyAgICAgICAgbmV3U2VjcmV0VmFsdWUuZ2V0KCks
CisgICAgICAgIDAsIC8vIGNhbmNlbGxhYmxlCisgICAgICAgIDAsIC8vIGNhbGxiYWNrCisgICAg
ICAgIDApOyAvLyBkYXRhCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjIwZGE5YTE1N2ZiYzE5NmU2Mjg3MDQyMmFjZTllZmU4OTc0OGVlNmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJ
QSBTLkwuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAorI2RlZmluZSBDcmVkZW50aWFs
QmFja2luZ1N0b3JlX2gKKworI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKworY2xhc3MgQ3JlZGVu
dGlhbEJhY2tpbmdTdG9yZSB7CitXVEZfTUFLRV9OT05DT1BZQUJMRShDcmVkZW50aWFsQmFja2lu
Z1N0b3JlKTsKK3B1YmxpYzoKKyAgICBmcmllbmQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZSgpOworICAgIHZpcnR1YWwgfkNyZWRlbnRpYWxCYWNraW5nU3Rv
cmUoKSB7IH0KKworICAgIHR5cGVkZWYgdm9pZCAoKkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxs
YmFjaykoY29uc3QgQ3JlZGVudGlhbCYsIHZvaWQqIGRhdGEpOworCisgICAgdm9pZCBjcmVkZW50
aWFsRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlh
bEZvckNoYWxsZW5nZUNhbGxiYWNrLCB2b2lkKiBkYXRhKTsKKyAgICB2b2lkIHN0b3JlQ3JlZGVu
dGlhbHNGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBD
cmVkZW50aWFsJik7Citwcml2YXRlOgorICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmUoKSB7IH0K
K307CisKK0NyZWRlbnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVlNWEwNWZhNDkxOTVm
YjMwYmY2OWRlZDU2MmQ1NDNiOGI2MTAxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcApAQCAtMCww
ICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvcklu
dGVybmFsSUNVLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVu
dFNlYXJjaExvY2FsZUlEKCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9j
YWxlLgorICAgIHJldHVybiAiIjsKK30KKworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xv
Y2FsZUlEKCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAg
IHJldHVybiAiZW5fdXMiOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGNhMDExOTEy
ZTQxNWRiZDBlZGQ5ODk0MDFiNGI3NjYwZDAyMmYwMTkuLjJjYTJjYmI5NDJjODUyOWJhYjZhNGY5
MmQ5ZDU3ZDRjNmYwNzVlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04MCw3ICs4MCw2IEBA
IHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbCBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dCBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyIFwKQEAgLTEyNCw4ICsxMjMsNiBAQCB3ZWJj
b3JlZ3RrX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWdsIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudAogCkBA
IC0yMzgsNiArMjM1LDcgQEAgbGliV2ViQ29yZVNWR19sYV9DUFBGTEFHUyA9IFwKIAkkKGdsb2Jh
bF9jcHBmbGFncykgXAogCSQod2ViY29yZV9jcHBmbGFncykgXAogCSQod2ViY29yZWd0a19jcHBm
bGFncykgXAorCSQocGxhdGZvcm1ndGtfY3BwZmxhZ3MpIFwKIAkkKGphdmFzY3JpcHRjb3JlX2Nw
cGZsYWdzKSBcCiAJLWZuby1zdHJpY3QtYWxpYXNpbmcgXAogCSQoQ0FJUk9fQ0ZMQUdTKSBcCkBA
IC01NTAsNyArNTQ4LDcgQEAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuaDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnQKICMgSURMIGdlbmVyYXRp
b24gdGFrZXMgYSBsb25nIHRpbWUuIFRoZSBwaXBlIHJlcHJlc2VudHMgYW4gb3JkZXItb25seSBk
ZXBlbmRlbmN5LAogIyB3aGljaCBtZWFucyB0aGF0IEdOVW1ha2Ugd2lsbCBvbmx5IHRyeSB0byBi
dWlsZCB0aGUgZGVwZW5kZW5jaWVzIGZpcnN0LCBidXQKICMgbm90IHJlYnVpbGQgYWxsIHRoZSB0
YXJnZXRzIGlmIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlLgotJCh3ZWJraXRndGtfc291cmNlcykg
JCh3ZWJraXQyX3NvdXJjZXMpICQod2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19zb3VyY2VzKSAkKHdl
YmNvcmVfc291cmNlcykgJCh3ZWJjb3JlZ3RrX3NvdXJjZXMpIDogfCAkKHN1cHBsZW1lbnRhbF9k
ZXBlbmRlbmN5X2ZpbGUpICQod2ViY29yZV9idWlsdF9zb3VyY2VzKQorJCh3ZWJraXRndGtfc291
cmNlcykgJCh3ZWJraXQyX3NvdXJjZXMpICQod2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19zb3VyY2Vz
KSAkKHdlYmNvcmVfc291cmNlcykgJCh3ZWJjb3JlZ3RrX3NvdXJjZXMpIDogfCAkKHN1cHBsZW1l
bnRhbF9kZXBlbmRlbmN5X2ZpbGUpICQod2ViY29yZV9idWlsdF9zb3VyY2VzKSAkKHBsYXRmb3Jt
Z3RrX2J1aWx0X3NvdXJjZXMpCiAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJbGliV2ViQ29y
ZVBsYXRmb3JtLmxhIFwKQEAgLTYwNCw2ICs2MDIsNyBAQCBsaWJXZWJDb3JlX2xhX0NQUEZMQUdT
ID0gXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBcCiAJJCh3
ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybWd0a19jcHBmbGFncykgXAogCSQoamF2
YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJJChDQUlS
T19DRkxBR1MpIFwKQEAgLTY2Nyw2ICs2NjYsNyBAQCBsaWJXZWJDb3JlUGxhdGZvcm1fbGFfQ1BQ
RkxBR1MgPSBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwK
IAkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJ
JChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAkk
KENBSVJPX0NGTEFHUykgXApAQCAtNzEzLDYgKzcxMyw3IEBAIGxpYldlYkNvcmVHdGtfbGFfQ1BQ
RkxBR1MgPSBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwK
IAkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJ
JChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAkk
KEhJTERPTl9DUFBGTEFHUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWEw
ODhjOTlmN2E5ZTQ3NDE4OTdjMjNlOGQwMzgwMWVjZmE1OGI5Yy4uNzU0NDcxNTViY2U3Njc0MTNk
ZjE5YjNkMzQzZjk4NDVjOTJjMTg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC04NzAsNyArODcwLDYgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL01hdGhNTE5hbWVzLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9N
YXRoTUxOYW1lcy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL1NldHRpbmdzTWFjcm9zLmgg
XAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvVXNlckFnZW50R3RrLmggXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCBcCiAJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9Vc2VyQWdlbnRTdHlsZVNoZWV0cy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL1dlYktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgXApAQCAtNTcyNSwxNiArNTcyNCw2IEBAIHdl
YmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2luZFJ1bGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV09G
RkZpbGVGb3JtYXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZG
RmlsZUZvcm1hdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9M
YW5ndWFnZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dnaW5nR3Rr
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tpbGxSaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tpbGxSaW5nTm9uZS5jcHAg
XApAQCAtNTg5MSw4ICs1ODgwLDYgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJh
c2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVu
dGlhbEJhY2tpbmdTdG9yZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Z3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAg
XApAQCAtNTk5NSw3ICs1OTgyLDYgQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TeXN0ZW1UaW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oIFwKQEAgLTYxMTIsNyArNjA5OCw2
IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsv
RnJhbWVTZWxlY3Rpb25HdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29u
dHJvbGxlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tpbmdTdG9yZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Q
cm92aWRlckdlb2NsdWUuY3BwIFwKQEAgLTYxMzQsOTEgKzYxMTksMTAgQEAgd2ViY29yZWd0a19z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
UGxhdGZvcm1WaWRlb1dpbmRvd0d0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxp
dGllcy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWly
b1V0aWxpdGllcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZFV0aWxpdGllc0d0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRp
b25SZXN1bHRzLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFn
RGF0YUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9GaWxlU3lzdGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ns
aWNrQ291bnRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0Nv
dW50ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRl
ci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRl
ci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HT3duUHRyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtWZXJzaW9uaW5nLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtW
ZXJzaW9uaW5nLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJh
bnNsYXRvci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJh
bnNsYXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5n
c0d0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxi
YXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xs
YmFyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azMuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1NvdW5kR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRl
eHQuaAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Np
bmtHU3RyZWFtZXIuaAogCiBpZiBUQVJHRVRfWDExCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYyBcCiAJU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKQEAgLTYyMjcsOSArNjEzMSw3IEBAIHdlYmNvcmVn
dGtfc291cmNlcyArPSBcCiBpZiBVU0VfT1BFTkdMCiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuaAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5o
CiBlbmRpZiAjIEVORCBVU0VfT1BFTkdMCiBpZiBVU0VfRUdMCiB3ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0K
aW5kZXggMjExNGZhOGUzOGNjZDQwMmUzMDE1NmY5NWFhOGFhZTA2NTRjZjQ5Yi4uY2RkNDFmMjcx
YjVlMGRkYjdjMTI0MjcxMmJhZDIxYmIxM2M0MjBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCkBAIC01MzQsNiArNTM0LDcgQEAgbGliV2Vi
Q29yZURPTV9sYV9DUFBGTEFHUyA9IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCSQod2ViY29y
ZV9jcHBmbGFncykgXAogCSQod2ViY29yZWd0a19jcHBmbGFncykgXAorCSQocGxhdGZvcm1ndGtf
Y3BwZmxhZ3MpIFwKIAkkKGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJChDQUlST19DRkxB
R1MpIFwKIAkkKEZSRUVUWVBFX0NGTEFHUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDZmYzc4N2Y1MDVhY2ZkMzBiMmVmNmE3NjM3YzBiMDRhOThhMDNjNmMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJf
QVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotCi0jaW5jbHVkZSAiQXVkaW9GaWxlUmVh
ZGVyLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGds
aWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBBdWRp
b0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZmxvYXQgc2FtcGxl
UmF0ZSkKLXsKLSAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX3N0cmR1cF9wcmludGYoIiVz
LndhdiIsIG5hbWUpKTsKLSAgICBjb25zdCBjaGFyKiBlbnZpcm9ubWVudFBhdGggPSBnZXRlbnYo
IkFVRElPX1JFU09VUkNFU19QQVRIIik7Ci0gICAgR093blB0cjxnY2hhcj4gYWJzb2x1dGVGaWxl
bmFtZTsKLSAgICBpZiAoZW52aXJvbm1lbnRQYXRoKQotICAgICAgICBhYnNvbHV0ZUZpbGVuYW1l
LnNldChnX2J1aWxkX2ZpbGVuYW1lKGVudmlyb25tZW50UGF0aCwgZmlsZW5hbWUuZ2V0KCksIE5V
TEwpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlRmlsZW5hbWUuc2V0KGdfYnVpbGRfZmls
ZW5hbWUoc2hhcmVkUmVzb3VyY2VzUGF0aCgpLmRhdGEoKSwgInJlc291cmNlcyIsICJhdWRpbyIs
IGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1c0Zyb21BdWRpb0Zp
bGUoYWJzb2x1dGVGaWxlbmFtZS5nZXQoKSwgZmFsc2UsIHNhbXBsZVJhdGUpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNTZiYTZmYjRlMGI2NWE5OWMyNzNkM2I0NzBiZmRi
NmIzNWI5YWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLQotI2luY2x1ZGUgPGdkay9n
ZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Db2xvcjo6Q29sb3IoY29uc3QgR2RrQ29s
b3ImIGMpCi0gICAgOiBtX2NvbG9yKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBj
LmJsdWUgPj4gOCkpCi0gICAgLCBtX3ZhbGlkKHRydWUpCi17Ci19Ci0KLSNpZm5kZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKLUNvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjKQotICAgIDogbV9jb2xv
cihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+KGMucmVkICogMjU1KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmdyZWVuICogMjU1KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmJsdWUgKiAyNTUpLAotICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSkKLSAgICAsIG1fdmFsaWQo
dHJ1ZSkKLXsKLX0KLQotQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAotewotICAgIGRv
dWJsZSByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICBHZGtSR0JBIHJnYmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
IH07Ci0gICAgcmV0dXJuIHJnYmE7Ci19Ci0jZW5kaWYKLQotfQotCi0vLyB2aW06IHRzPTQgc3c9
NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ3ZjJmNWRmMzE0ZmYzYTQ2Y2U0MmM1Yjg0NzQ5NDkzZjBi
YWJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoQykgMjAxMyBJZ2FsaWEgUy5MCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE5BVElWRV9GVUxMU0NS
RUVOX1ZJREVPKQotCi0jaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIgot
Ci0jaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oIgotI2luY2x1
ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKLSNpbmNsdWRl
ICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+
Ci0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNkZWZpbmUgSFVEX0FVVE9fSElERV9JTlRFUlZBTCAzMDAwIC8vIDMgc2Vjb25kcwotI2RlZmlu
ZSBQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMIDE1MCAvLyAxNTBtcwotCi0vLyBVc2Ugc3lt
Ym9saWMgaWNvbnMgb25seSBpZiB3ZSBidWlsZCB3aXRoIEdUSystMyBzdXBwb3J0LiBUaGV5IGNv
dWxkCi0vLyBiZSBlbmFibGVkIGZvciB0aGUgR1RLKzIgYnVpbGQgYnV0IHdlJ2QgbmVlZCB0byBi
dW1wIHRoZSByZXF1aXJlZAotLy8gdmVyc2lvbiB0byBhdCBsZWFzdCAyLjIyLgotI2lmIEdUS19N
QUpPUl9WRVJTSU9OID4gMgotI2RlZmluZSBJQ09OX05BTUVfU1VGRklYICItc3ltYm9saWMiCi0j
ZWxzZQotI2RlZmluZSBJQ09OX05BTUVfU1VGRklYCi0jZW5kaWYKLQotI2RlZmluZSBQTEFZX0lD
T05fTkFNRSAibWVkaWEtcGxheWJhY2stc3RhcnQiSUNPTl9OQU1FX1NVRkZJWAotI2RlZmluZSBQ
QVVTRV9JQ09OX05BTUUgIm1lZGlhLXBsYXliYWNrLXBhdXNlIklDT05fTkFNRV9TVUZGSVgKLSNk
ZWZpbmUgRVhJVF9GVUxMU0NSRUVOX0lDT05fTkFNRSAidmlldy1yZXN0b3JlIklDT05fTkFNRV9T
VUZGSVgKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgZ2Jvb2xlYW4gaGlkZUh1ZENh
bGxiYWNrKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAg
Y29udHJvbGxlci0+aGlkZUh1ZCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudE1vdGlvbiogZXZlbnQsICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBj
b250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPnNob3dIdWQodHJ1ZSk7Ci0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIG9uRnVsbHNjcmVlbkd0a0FjdGl2ZU5vdGlmaWNhdGlv
bihHdGtXaWRnZXQqIHdpZGdldCwgR1BhcmFtU3BlYyogcHJvcGVydHksIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgaWYgKCFndGtfd2luZG93X2lzX2Fj
dGl2ZShHVEtfV0lORE9XKHdpZGdldCkpKQotICAgICAgICBjb250cm9sbGVyLT5oaWRlSHVkKCk7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtDb25maWd1cmVFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPmd0a0NvbmZpZ3Vy
ZShldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIG9uRnVsbHNjcmVl
bkd0a0Rlc3Ryb3koR3RrV2lkZ2V0KiB3aWRnZXQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+ZXhpdEZ1bGxzY3JlZW4oKTsKLX0K
LQotc3RhdGljIHZvaWQgdG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9u
LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRy
b2xsZXItPnRvZ2dsZVBsYXkoKTsKLX0KLQotc3RhdGljIHZvaWQgZXhpdEZ1bGxzY3JlZW5BY3Rp
dmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNv
bnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+ZXhpdE9uVXNlclJlcXVlc3QoKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2soRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICByZXR1cm4gY29udHJvbGxlci0+dXBk
YXRlSHVkUHJvZ3Jlc3NCYXIoKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVTY2FsZUJ1dHRv
blByZXNzZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCwgRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBpZiAoZXZlbnQtPnR5
cGUgIT0gR0RLX0JVVFRPTl9QUkVTUykKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgY29u
dHJvbGxlci0+YmVnaW5TZWVrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gdGltZVNjYWxlQnV0dG9uUmVsZWFzZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
QnV0dG9uKiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikK
LXsKLSAgICBjb250cm9sbGVyLT5lbmRTZWVrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1z
dGF0aWMgdm9pZCB0aW1lU2NhbGVWYWx1ZUNoYW5nZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+
ZG9TZWVrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZvbHVtZVZhbHVlQ2hhbmdlZChHdGtTY2FsZUJ1
dHRvbiAqYnV0dG9uLCBnZG91YmxlIHZhbHVlLCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
KiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPnNldFZvbHVtZShzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUpKTsKLX0KLQotCi1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uq
IHBsYXllcikKLSAgICA6IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIocGxheWVy
KQotICAgICwgbV9odWRUaW1lb3V0SWQoMCkKLSAgICAsIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCgw
KQotICAgICwgbV9zZWVrTG9jayhmYWxzZSkKLSAgICAsIG1fd2luZG93KDApCi0gICAgLCBtX2h1
ZFdpbmRvdygwKQotICAgICwgbV92b2x1bWVCdXR0b24oMCkKLSAgICAsIG1fa2V5UHJlc3NTaWdu
YWxJZCgwKQotICAgICwgbV9kZXN0cm95U2lnbmFsSWQoMCkKLSAgICAsIG1faXNBY3RpdmVTaWdu
YWxJZCgwKQotICAgICwgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCgwKQotICAgICwgbV9jb25maWd1
cmVFdmVudFNpZ25hbElkKDApCi0gICAgLCBtX2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkKDApCi0g
ICAgLCBtX3RpbWVTY2FsZUJ1dHRvblByZXNzZWRTaWduYWxJZCgwKQotICAgICwgbV90aW1lU2Nh
bGVCdXR0b25SZWxlYXNlZFNpZ25hbElkKDApCi0gICAgLCBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNp
Z25hbElkKDApCi0gICAgLCBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKDAp
Ci17Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6Z3RrQ29uZmlndXJl
KEdka0V2ZW50Q29uZmlndXJlKiBldmVudCkKLXsKLSAgICB1cGRhdGVIdWRQb3NpdGlvbigpOwot
fQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnNob3dIdWQoYm9vbCBhdXRv
SGlkZSkKLXsKLSAgICBpZiAoIW1faHVkV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9odWRUaW1lb3V0SWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91
dElkKTsKLSAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAwOwotICAgIH0KLQotICAgIC8vIFNob3cg
dGhlIGN1cnNvci4KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRv
dyhtX3dpbmRvdyk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgMCk7Ci0KLSAg
ICAvLyBVcGRhdGUgdGhlIHByb2dyZXNzIGJhciBpbW1lZGlhdGVseSBiZWZvcmUgc2hvd2luZyB0
aGUgd2luZG93LgotICAgIHVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7Ci0gICAgZ3RrX3dpZGdldF9z
aG93X2FsbChtX2h1ZFdpbmRvdyk7Ci0gICAgdXBkYXRlSHVkUG9zaXRpb24oKTsKLQotICAgIC8v
IFN0YXJ0IHBlcmlvZGljIHVwZGF0ZXMgb2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICBpZiAoIW1f
cHJvZ3Jlc3NCYXJVcGRhdGVJZCkKLSAgICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gZ190
aW1lb3V0X2FkZChQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihwcm9ncmVzc0JhclVwZGF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICAv
LyBIaWRlIHRoZSBodWQgaW4gZmV3IHNlY29uZHMsIGlmIHJlcXVlc3RlZC4KLSAgICBpZiAoYXV0
b0hpZGUpCi0gICAgICAgIG1faHVkVGltZW91dElkID0gZ190aW1lb3V0X2FkZChIVURfQVVUT19I
SURFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoaWRlSHVkQ2FsbGJh
Y2spLCB0aGlzKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpoaWRl
SHVkKCkKLXsKLSAgICBpZiAobV9odWRUaW1lb3V0SWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKG1faHVkVGltZW91dElkKTsKLSAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAwOwotICAgIH0K
LQotICAgIGlmICghbV9odWRXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEtlZXAg
dGhlIGh1ZCB2aXNpYmxlIGlmIGEgc2VlayBpcyBpbiBwcm9ncmVzcyBvciBpZiB0aGUgdm9sdW1l
Ci0gICAgLy8gcG9wdXAgaXMgdmlzaWJsZS4KLSAgICBHdGtXaWRnZXQqIHZvbHVtZVBvcHVwID0g
Z3RrX3NjYWxlX2J1dHRvbl9nZXRfcG9wdXAoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRv
bikpOwotICAgIGlmIChtX3NlZWtMb2NrIHx8IGd0a193aWRnZXRfZ2V0X3Zpc2libGUodm9sdW1l
UG9wdXApKSB7Ci0gICAgICAgIHNob3dIdWQodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRv
dyk7Ci0gICAgR2RrQ3Vyc29yKiBjdXJzb3IgPSBibGFua0N1cnNvcigpOwotICAgIGdka193aW5k
b3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNvcik7Ci0KLSAgICBndGtfd2lkZ2V0X2hpZGUobV9o
dWRXaW5kb3cpOwotCi0gICAgaWYgKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCkgewotICAgICAgICBn
X3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0JhclVwZGF0ZUlkKTsKLSAgICAgICAgbV9wcm9ncmVz
c0JhclVwZGF0ZUlkID0gMDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3Jl
ZW5HdGtLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQs
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgc3dpdGNo
IChldmVudC0+a2V5dmFsKSB7Ci0gICAgY2FzZSBHREtfRXNjYXBlOgotICAgICAgICBjb250cm9s
bGVyLT5leGl0T25Vc2VyUmVxdWVzdCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdES19z
cGFjZToKLSAgICBjYXNlIEdES19SZXR1cm46Ci0gICAgICAgIGNvbnRyb2xsZXItPnRvZ2dsZVBs
YXkoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHREtfVXA6Ci0gICAgICAgIGNvbnRyb2xs
ZXItPmluY3JlYXNlVm9sdW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0RLX0Rvd246
Ci0gICAgICAgIGNvbnRyb2xsZXItPmRlY3JlYXNlVm9sdW1lKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBUUlVFOwot
fQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmluaXRpYWxpemVXaW5kb3co
KQotewotICAgIG1fd2luZG93ID0gcmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQqPihtX2dzdHJl
YW1lckdXb3JsZC0+cGxhdGZvcm1WaWRlb1dpbmRvdygpLT53aW5kb3coKSk7Ci0KLSAgICBpZiAo
IW1faHVkV2luZG93KQotICAgICAgICBjcmVhdGVIdWQoKTsKLQotICAgIC8vIEVuc3VyZSBibGFj
ayBiYWNrZ3JvdW5kLgotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrQ29sb3IgY29s
b3IgPSB7IDEsIDAsIDAsIDAgfTsKLSAgICBndGtfd2lkZ2V0X21vZGlmeV9iZyhtX3dpbmRvdywg
R1RLX1NUQVRFX05PUk1BTCwgJmNvbG9yKTsKLSNlbHNlCi0gICAgR2RrUkdCQSBjb2xvciA9IHsg
MCwgMCwgMCwgMX07Ci0gICAgZ3RrX3dpZGdldF9vdmVycmlkZV9iYWNrZ3JvdW5kX2NvbG9yKG1f
d2luZG93LCBHVEtfU1RBVEVfRkxBR19OT1JNQUwsICZjb2xvcik7Ci0jZW5kaWYKLSAgICBndGtf
d2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQobV93aW5kb3csIEZBTFNFKTsKLQotICAgIG1fa2V5
UHJlc3NTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJrZXktcHJlc3MtZXZl
bnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0tleVByZXNzRXZlbnQpLCB0aGlzKTsKLSAg
ICBtX2Rlc3Ryb3lTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJkZXN0cm95
IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtEZXN0cm95KSwgdGhpcyk7Ci0gICAgbV9pc0Fj
dGl2ZVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgIm5vdGlmeTo6aXMtYWN0
aXZlIiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtBY3RpdmVOb3RpZmljYXRpb24pLCB0aGlz
KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwobV93aW5kb3cpOwotCi0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIEdSZWZQdHI8
R2RrQ3Vyc29yPiBjdXJzb3IoYWRvcHRHUmVmKGJsYW5rQ3Vyc29yKCkpKTsKLSAgICBnZGtfd2lu
ZG93X3NldF9jdXJzb3Iod2luZG93LCBjdXJzb3IuZ2V0KCkpOwotCi0gICAgbV9tb3Rpb25Ob3Rp
ZnlTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJtb3Rpb24tbm90aWZ5LWV2
ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMp
OwotICAgIG1fY29uZmlndXJlRXZlbnRTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5k
b3csICJjb25maWd1cmUtZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0NvbmZpZ3Vy
ZUV2ZW50KSwgdGhpcyk7Ci0KLSAgICBndGtfd2luZG93X2Z1bGxzY3JlZW4oR1RLX1dJTkRPVyht
X3dpbmRvdykpOwotICAgIHNob3dIdWQodHJ1ZSk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0azo6dXBkYXRlSHVkUG9zaXRpb24oKQotewotICAgIGlmICghbV9odWRXaW5k
b3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0aGUgc2NyZWVuIHJlY3RhbmdsZS4K
LSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193aW5kb3dfZ2V0X3NjcmVlbihHVEtfV0lORE9X
KG1fd2luZG93KSk7Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5k
b3cobV93aW5kb3cpOwotICAgIEdka1JlY3RhbmdsZSBmdWxsc2NyZWVuUmVjdGFuZ2xlOwotICAg
IGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBnZGtfc2NyZWVuX2dldF9t
b25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdpbmRvdyksICZmdWxsc2NyZWVuUmVjdGFuZ2xlKTsK
LQotICAgIC8vIEdldCB0aGUgcG9wdXAgd2luZG93IHNpemUuCi0gICAgaW50IGh1ZFdpZHRoLCBo
dWRIZWlnaHQ7Ci0gICAgZ3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKG1faHVkV2luZG93
KSwgJmh1ZFdpZHRoLCAmaHVkSGVpZ2h0KTsKLQotICAgIC8vIFJlc2l6ZSB0aGUgaHVkIHRvIHRo
ZSBmdWxsIHdpZHRoIG9mIHRoZSBzY3JlZW4uCi0gICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJ
TkRPVyhtX2h1ZFdpbmRvdyksIGZ1bGxzY3JlZW5SZWN0YW5nbGUud2lkdGgsIGh1ZEhlaWdodCk7
Ci0KLSAgICAvLyBNb3ZlIHRoZSBodWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLgotICAg
IGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3Rh
bmdsZS54LCBmdWxsc2NyZWVuUmVjdGFuZ2xlLmhlaWdodCArIGZ1bGxzY3JlZW5SZWN0YW5nbGUu
eSAtIGh1ZEhlaWdodCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
ZGVzdHJveVdpbmRvdygpCi17Ci0gICAgaWYgKCFtX2h1ZFdpbmRvdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBtX2tleVByZXNz
U2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9k
ZXN0cm95U2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRv
dywgbV9pc0FjdGl2ZVNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qo
bV93aW5kb3csIG1fbW90aW9uTm90aWZ5U2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdChtX3dpbmRvdywgbV9jb25maWd1cmVFdmVudFNpZ25hbElkKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9odWRXaW5kb3csIG1faHVkTW90aW9uTm90aWZ5U2ln
bmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1f
dGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rp
c2Nvbm5lY3QobV90aW1lSFNjYWxlLCBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQp
OwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1faHNjYWxl
VXBkYXRlSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3ZvbHVtZUJ1dHRv
biwgbV92b2x1bWVVcGRhdGVJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1f
cGxheVBhdXNlQWN0aW9uLCBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgbV9leGl0RnVs
bGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZCk7Ci0KLSAgICBpZiAobV9odWRUaW1lb3V0SWQp
IHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElkKTsKLSAgICAgICAgbV9o
dWRUaW1lb3V0SWQgPSAwOwotICAgIH0KLQotICAgIGlmIChtX3Byb2dyZXNzQmFyVXBkYXRlSWQp
IHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCk7Ci0gICAg
ICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IDA7Ci0gICAgfQotCi0gICAgZ3RrX3dpZGdldF9o
aWRlKG1fd2luZG93KTsKLQotICAgIGlmIChtX2h1ZFdpbmRvdykKLSAgICAgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KG1faHVkV2luZG93KTsKLSAgICBtX2h1ZFdpbmRvdyA9IDA7Ci19Ci0KLXZvaWQg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6cGxheVN0YXRlQ2hhbmdlZCgpCi17Ci0gICAg
aWYgKG1fY2xpZW50LT5tZWRpYVBsYXllcklzUGF1c2VkKCkpCi0gICAgICAgIGdfb2JqZWN0X3Nl
dChtX3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0aXAiLCBfKCJQbGF5IiksICJpY29uLW5hbWUiLCBQ
TEFZX0lDT05fTkFNRSwgTlVMTCk7Ci0gICAgZWxzZQotICAgICAgICBnX29iamVjdF9zZXQobV9w
bGF5UGF1c2VBY3Rpb24sICJ0b29sdGlwIiwgXygiUGF1c2UiKSwgImljb24tbmFtZSIsIFBBVVNF
X0lDT05fTkFNRSwgTlVMTCk7Ci0gICAgc2hvd0h1ZCghbV9jbGllbnQtPm1lZGlhUGxheWVySXNQ
YXVzZWQoKSk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6dm9sdW1l
Q2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX3ZvbHVtZUJ1dHRvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9ibG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRh
dGVJZCk7Ci0gICAgZ3RrX3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTiht
X3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgZ19zaWduYWxfaGFuZGxl
cl91bmJsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKLX0KLQotdm9pZCBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjptdXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFt
X3ZvbHVtZUJ1dHRvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9i
bG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7Ci0gICAgZ3RrX3NjYWxlX2J1
dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVy
LT5tdXRlZCgpID8gMCA6IG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgZ19zaWduYWxfaGFuZGxl
cl91bmJsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKLX0KLQotdm9pZCBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpiZWdpblNlZWsoKQotewotICAgIG1fc2Vla0xv
Y2sgPSB0cnVlOwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmRvU2Vl
aygpCi17Ci0gICAgaWYgKCFtX3NlZWtMb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bs
YXllci0+c2VlayhndGtfcmFuZ2VfZ2V0X3ZhbHVlKEdUS19SQU5HRShtX3RpbWVIU2NhbGUpKSpt
X3BsYXllci0+ZHVyYXRpb24oKSAvIDEwMCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0azo6ZW5kU2VlaygpCi17Ci0gICAgbV9zZWVrTG9jayA9IGZhbHNlOwotfQotCi1n
Ym9vbGVhbiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjp1cGRhdGVIdWRQcm9ncmVzc0Jh
cigpCi17Ci0gICAgZmxvYXQgbWVkaWFEdXJhdGlvbihtX3BsYXllci0+ZHVyYXRpb24oKSk7Ci0g
ICAgZmxvYXQgbWVkaWFQb3NpdGlvbihtX3BsYXllci0+Y3VycmVudFRpbWUoKSk7Ci0KLSAgICBp
ZiAoIW1fc2Vla0xvY2spIHsKLSAgICAgICAgZ2RvdWJsZSB2YWx1ZSA9IDAuMDsKLQotICAgICAg
ICBpZiAobWVkaWFQb3NpdGlvbiAmJiBtZWRpYUR1cmF0aW9uKQotICAgICAgICAgICAgdmFsdWUg
PSAobWVkaWFQb3NpdGlvbiAqIDEwMC4wKSAvIG1lZGlhRHVyYXRpb247Ci0KLSAgICAgICAgR3Rr
QWRqdXN0bWVudCogYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFO
R0UobV90aW1lSFNjYWxlKSk7Ci0gICAgICAgIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGp1
c3RtZW50LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgZ3RrX3JhbmdlX3NldF9maWxsX2xldmVsKEdU
S19SQU5HRShtX3RpbWVIU2NhbGUpLCAobV9wbGF5ZXItPm1heFRpbWVMb2FkZWQoKSAvIG1lZGlh
RHVyYXRpb24pKiAxMDApOwotCi0gICAgZ2NoYXIqIGxhYmVsID0gZ19zdHJkdXBfcHJpbnRmKCIl
cyAvICVzIiwgdGltZVRvU3RyaW5nKG1lZGlhUG9zaXRpb24pLnV0ZjgoKS5kYXRhKCksIHRpbWVU
b1N0cmluZyhtZWRpYUR1cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsKLSAgICBndGtfbGFiZWxfc2V0
X3RleHQoR1RLX0xBQkVMKG1fdGltZUxhYmVsKSwgbGFiZWwpOwotICAgIGdfZnJlZShsYWJlbCk7
Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
azo6Y3JlYXRlSHVkKCkKLXsKLSAgICBtX2h1ZFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19X
SU5ET1dfUE9QVVApOwotICAgIGd0a193aW5kb3dfc2V0X2dyYXZpdHkoR1RLX1dJTkRPVyhtX2h1
ZFdpbmRvdyksIEdES19HUkFWSVRZX1NPVVRIX1dFU1QpOwotICAgIGd0a193aW5kb3dfc2V0X3R5
cGVfaGludChHVEtfV0lORE9XKG1faHVkV2luZG93KSwgR0RLX1dJTkRPV19UWVBFX0hJTlRfTk9S
TUFMKTsKLQotICAgIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0
KG1faHVkV2luZG93LCAibW90aW9uLW5vdGlmeS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2Ny
ZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQpLCB0aGlzKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCi0gICAgR3RrV2lkZ2V0KiBoYm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCA0KTsKLSNlbHNl
Ci0gICAgR3RrV2lkZ2V0KiBoYm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUkla
T05UQUwsIDQpOwotI2VuZGlmCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X2h1ZFdpbmRvdyksIGhib3gpOwotCi0gICAgbV9wbGF5UGF1c2VBY3Rpb24gPSBndGtfYWN0aW9u
X25ldygicGxheSIsIF8oIlBsYXkgLyBQYXVzZSIpLCBfKCJQbGF5IG9yIHBhdXNlIHRoZSBtZWRp
YSIpLCBQQVVTRV9JQ09OX05BTUUpOwotICAgIG1fcGxheUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQg
PSBnX3NpZ25hbF9jb25uZWN0KG1fcGxheVBhdXNlQWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExC
QUNLKHRvZ2dsZVBsYXlQYXVzZUFjdGl2YXRlZCksIHRoaXMpOwotCi0gICAgR3RrV2lkZ2V0KiBp
dGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfdG9vbF9pdGVtKG1fcGxheVBhdXNlQWN0aW9uKTsKLSAg
ICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgaXRlbSwgRkFMU0UsIFRSVUUsIDAp
OwotCi0gICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcoXygiVGltZToiKSk7Ci0g
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIGxhYmVsLCBGQUxTRSwgVFJVRSwg
MCk7Ci0KLSAgICBHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3Rr
X2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAxMDAuMCwgMC4xLCAxLjAsIDEuMCkpOwotI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCi0gICAgbV90aW1lSFNjYWxlID0gZ3RrX2hzY2FsZV9uZXcoYWRq
dXN0bWVudCk7Ci0jZWxzZQotICAgIG1fdGltZUhTY2FsZSA9IGd0a19zY2FsZV9uZXcoR1RLX09S
SUVOVEFUSU9OX0hPUklaT05UQUwsIGFkanVzdG1lbnQpOwotI2VuZGlmCi0gICAgZ3RrX3NjYWxl
X3NldF9kcmF3X3ZhbHVlKEdUS19TQ0FMRShtX3RpbWVIU2NhbGUpLCBGQUxTRSk7Ci0gICAgZ3Rr
X3JhbmdlX3NldF9zaG93X2ZpbGxfbGV2ZWwoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIFRSVUUp
OwotICAgIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVj
dChtX3RpbWVIU2NhbGUsICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2Fs
ZUJ1dHRvblByZXNzZWQpLCB0aGlzKTsKLSAgICBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2ln
bmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fdGltZUhTY2FsZSwgImJ1dHRvbi1yZWxlYXNlLWV2
ZW50IiwgR19DQUxMQkFDSyh0aW1lU2NhbGVCdXR0b25SZWxlYXNlZCksIHRoaXMpOwotICAgIG1f
aHNjYWxlVXBkYXRlSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fdGltZUhTY2FsZSwgInZhbHVlLWNo
YW5nZWQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZVZhbHVlQ2hhbmdlZCksIHRoaXMpOwotCi0gICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUhTY2FsZSwgVFJVRSwgVFJV
RSwgMCk7Ci0KLSAgICBtX3RpbWVMYWJlbCA9IGd0a19sYWJlbF9uZXcoIiIpOwotICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBtX3RpbWVMYWJlbCwgRkFMU0UsIFRSVUUsIDAp
OwotCi0gICAgLy8gVm9sdW1lIGJ1dHRvbi4KLSAgICBtX3ZvbHVtZUJ1dHRvbiA9IGd0a192b2x1
bWVfYnV0dG9uX25ldygpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBt
X3ZvbHVtZUJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOwotICAgIGd0a19zY2FsZV9idXR0b25fc2V0
X3ZhbHVlKEdUS19TQ0FMRV9CVVRUT04obV92b2x1bWVCdXR0b24pLCBtX3BsYXllci0+dm9sdW1l
KCkpOwotICAgIG1fdm9sdW1lVXBkYXRlSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lQnV0
dG9uLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodm9sdW1lVmFsdWVDaGFuZ2VkKSwgdGhp
cyk7Ci0KLSAgICBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoImV4aXQi
LCBfKCJFeGl0IEZ1bGxzY3JlZW4iKSwgXygiRXhpdCBmcm9tIGZ1bGxzY3JlZW4gbW9kZSIpLCBF
WElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FKTsKLSAgICBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3Rp
dmF0ZVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX2V4aXRGdWxsc2NyZWVuQWN0aW9uLCAi
YWN0aXZhdGUiLCBHX0NBTExCQUNLKGV4aXRGdWxsc2NyZWVuQWN0aXZhdGVkKSwgdGhpcyk7Ci0g
ICAgZ19vYmplY3Rfc2V0KG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24sICJpY29uLW5hbWUiLCBFWElU
X0ZVTExTQ1JFRU5fSUNPTl9OQU1FLCBOVUxMKTsKLSAgICBpdGVtID0gZ3RrX2FjdGlvbl9jcmVh
dGVfdG9vbF9pdGVtKG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24pOwotICAgIGd0a19ib3hfcGFja19z
dGFydChHVEtfQk9YKGhib3gpLCBpdGVtLCBGQUxTRSwgVFJVRSwgMCk7Ci0KLSAgICBtX3Byb2dy
ZXNzQmFyVXBkYXRlSWQgPSBnX3RpbWVvdXRfYWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJW
QUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJh
Y2spLCB0aGlzKTsKLQotICAgIHBsYXlTdGF0ZUNoYW5nZWQoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU3NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQx
YjJjNDNiNjkxNDRiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTAotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGtfaAotI2RlZmluZSBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrX2gKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE5BVElW
RV9GVUxMU0NSRUVOX1ZJREVPKQotCi0jaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckdTdHJlYW1lci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGsgOiBwdWJsaWMgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJl
YW1lciB7Ci1wdWJsaWM6Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7Ci0KLSAgICB2b2lkIGd0a0NvbmZpZ3VyZShHZGtF
dmVudENvbmZpZ3VyZSopOwotCi0gICAgdm9pZCBwbGF5U3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICB2
b2lkIGJlZ2luU2VlaygpOwotICAgIHZvaWQgZG9TZWVrKCk7Ci0gICAgdm9pZCBlbmRTZWVrKCk7
Ci0KLSAgICB2b2lkIGhpZGVIdWQoKTsKLSAgICB2b2lkIHNob3dIdWQoYm9vbCk7Ci0gICAgZ2Jv
b2xlYW4gdXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsKLQotICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgp
OwotICAgIHZvaWQgbXV0ZUNoYW5nZWQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRpYWxp
emVXaW5kb3coKTsKLSAgICB2b2lkIGRlc3Ryb3lXaW5kb3coKTsKLQotICAgIHZvaWQgY3JlYXRl
SHVkKCk7Ci0gICAgdm9pZCB1cGRhdGVIdWRQb3NpdGlvbigpOwotCi0gICAgZ3VpbnQgbV9odWRU
aW1lb3V0SWQ7Ci0gICAgZ3VpbnQgbV9wcm9ncmVzc0JhclVwZGF0ZUlkOwotICAgIGd1aW50IG1f
cHJvZ3Jlc3NCYXJGaWxsVXBkYXRlSWQ7Ci0gICAgZ3VpbnQgbV9oc2NhbGVVcGRhdGVJZDsKLSAg
ICBndWludCBtX3ZvbHVtZVVwZGF0ZUlkOwotICAgIGJvb2wgbV9zZWVrTG9jazsKLSAgICBHdGtX
aWRnZXQqIG1fd2luZG93OwotICAgIEd0a1dpZGdldCogbV9odWRXaW5kb3c7Ci0gICAgR3RrQWN0
aW9uKiBtX3BsYXlQYXVzZUFjdGlvbjsKLSAgICBHdGtBY3Rpb24qIG1fZXhpdEZ1bGxzY3JlZW5B
Y3Rpb247Ci0gICAgR3RrV2lkZ2V0KiBtX3RpbWVIU2NhbGU7Ci0gICAgR3RrV2lkZ2V0KiBtX3Rp
bWVMYWJlbDsKLSAgICBHdGtXaWRnZXQqIG1fdm9sdW1lQnV0dG9uOwotCi0gICAgdW5zaWduZWQg
bG9uZyBtX2tleVByZXNzU2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2Rlc3Ryb3lTaWdu
YWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1faXNBY3RpdmVTaWduYWxJZDsKLSAgICB1bnNpZ25l
ZCBsb25nIG1fbW90aW9uTm90aWZ5U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2NvbmZp
Z3VyZUV2ZW50U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2h1ZE1vdGlvbk5vdGlmeVNp
Z25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFs
SWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQ7
Ci0gICAgdW5zaWduZWQgbG9uZyBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkOwotICAgIHVu
c2lnbmVkIGxvbmcgbV9leGl0RnVsbGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKLX07Ci0K
LX0KLSNlbmRpZgotCi0jZW5kaWYgLy8gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9V
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0Nh
aXJvVXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwMThhMzBm
MGM0MWUwZTRjZTVkY2MzODRhOTUxOWY1NDcwNDVkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0a1Zl
cnNpb25pbmcuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
Ci1HZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlKQotewotICAgIHJldHVybiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3Vy
ZmFjZSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2Up
KTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dka0NhaXJvVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1
YjNlZGVmYzExMWRiOTQ2ZTMyYWM4MWQwZmMyYTA1MGNlMDI2Zi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEdka0NhaXJvVXRpbGl0aWVzX2gKLSNkZWZpbmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAotCi1HZGtQ
aXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlKTsKLQotI2VuZGlmIC8vIEdka0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggM2U5NTdiMzQ1Y2U1ZmIyNzExYTEwYzY2ODAyNTNkYzUyNGVjODhmNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkljb24uaCIKLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSWNvbjo6SWNvbigpCi0gICAgOiBtX2lj
b24oMCkKLXsKLX0KLQotSWNvbjo6fkljb24oKQotewotICAgIGlmIChtX2ljb24pCi0gICAgICAg
IGdfb2JqZWN0X3VucmVmKG1faWNvbik7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbG9va3VwSWNvbk5h
bWUoU3RyaW5nIE1JTUVUeXBlKQotewotICAgIC8qCi0gICAgIExvb2t1cCBhbiBhcHByb3ByaWF0
ZSBpY29uIGFjY29yZGluZyB0byBlaXRoZXIgdGhlIEljb24gTmFtaW5nIFNwZWMKLSAgICAgb3Ig
Y29udmVudGlvbmFsIEdub21lIGljb24gbmFtZXMgcmVzcGVjdGl2ZWx5LgotCi0gICAgIFNlZSBo
dHRwOi8vc3RhbmRhcmRzLmZyZWVkZXNrdG9wLm9yZy9pY29uLW5hbWluZy1zcGVjL2ljb24tbmFt
aW5nLXNwZWMtbGF0ZXN0Lmh0bWwKLQotICAgICBUaGUgaWNvbiB0aGVtZSBpcyBwcm9iZWQgZm9y
IHRoZSBmb2xsb3dpbmcgbmFtZXM6Ci0gICAgIDEuIG1lZGlhLXN1YnR5cGUKLSAgICAgMi4gZ25v
bWUtbWltZS1tZWRpYS1zdWJ0eXBlCi0gICAgIDMuIG1lZGlhLXgtZ2VuZXJpYwotICAgICA0LiBn
bm9tZS1taW1lLW1lZGlhCi0KLSAgICAgSW4gdGhlIHdvcnN0IGNhc2UgaXQgZmFsbHMgYmFjayB0
byB0aGUgc3RvY2sgZmlsZSBpY29uLgotICAgICovCi0gICAgaW50IHBvcyA9IE1JTUVUeXBlLmZp
bmQoJy8nKTsKLSAgICBpZihwb3MgPj0gMCkgewotICAgICAgICBTdHJpbmcgbWVkaWEgPSBNSU1F
VHlwZS5zdWJzdHJpbmcoMCwgcG9zKTsKLSAgICAgICAgU3RyaW5nIHN1YnR5cGUgPSBNSU1FVHlw
ZS5zdWJzdHJpbmcocG9zICsgMSk7Ci0gICAgICAgIEd0a0ljb25UaGVtZSogaWNvblRoZW1lID0g
Z3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKTsKLSAgICAgICAgU3RyaW5nIGljb25OYW1lID0g
bWVkaWEgKyAiLSIgKyBzdWJ0eXBlOwotICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNv
bihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJu
IGljb25OYW1lOwotICAgICAgICBpY29uTmFtZSA9ICJnbm9tZS1taW1lLSIgKyBtZWRpYSArICIt
IiArIHN1YnR5cGU7Ci0gICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVt
ZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7
Ci0gICAgICAgIGljb25OYW1lID0gbWVkaWEgKyAiLXgtZ2VuZXJpYyI7Ci0gICAgICAgIGlmKGd0
a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7Ci0gICAgICAgIGljb25OYW1lID0gbWVkaWEg
KyAiZ25vbWUtbWltZS0iICsgbWVkaWE7Ci0gICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19p
Y29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1
cm4gaWNvbk5hbWU7Ci0gICAgfQotICAgIHJldHVybiBHVEtfU1RPQ0tfRklMRTsKLX0KLQotLy8g
RklYTUU6IE1vdmUgdGhlIGNvZGUgdG8gQ2hyb21lQ2xpZW50OjppY29uRm9yRmlsZXMoKS4KLVBh
c3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMpCi17Ci0gICAgaWYgKGZpbGVuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewotICAgICAgICBp
ZiAoIWdfcGF0aF9za2lwX3Jvb3QoZmlsZW5hbWVzWzBdLnV0ZjgoKS5kYXRhKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgU3RyaW5nIE1JTUVUeXBlID0gTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKGZpbGVuYW1lc1swXSk7Ci0gICAgICAgIFN0cmluZyBp
Y29uTmFtZSA9IGxvb2t1cEljb25OYW1lKE1JTUVUeXBlKTsKLQotICAgICAgICBSZWZQdHI8SWNv
bj4gaWNvbiA9IGFkb3B0UmVmKG5ldyBJY29uKTsKLSAgICAgICAgaWNvbi0+bV9pY29uID0gZ3Rr
X2ljb25fdGhlbWVfbG9hZF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksIGljb25O
YW1lLnV0ZjgoKS5kYXRhKCksIDE2LCBHVEtfSUNPTl9MT09LVVBfVVNFX0JVSUxUSU4sIDApOwot
ICAgICAgICBpZiAoIWljb24tPm1faWNvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gaWNvbi5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgLy9GSVhNRTogSW1wbGVtZW50
IHRoaXMKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVE9ETzogU2NhbGUv
Y2xpcCB0aGUgaW1hZ2UgaWYgbmVjZXNzYXJ5LgotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgZ2RrX2Nh
aXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBtX2ljb24sIHJlY3QueCgpLCByZWN0LnkoKSk7Ci0g
ICAgY2Fpcm9fcGFpbnQoY3IpOwotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJH
dGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVy
R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmZjUzYjRmZTExMWQyNDMw
MjI5ZjYwMzY3NjdhY2E3ZWJkNGQ4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VC
dWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5j
bHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+Ci0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEdPd25QdHI8Z2NoYXI+JiBidWZmZXIs
IGdzaXplJiBidWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVu
Y29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAg
IC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhi
dWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3Ry
aW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0
eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUg
IT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
R1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAg
ICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+
IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgot
ICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRo
YXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgcGl4YnVmID0gYWRv
cHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOwot
ICAgIH0gZWxzZQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VU
b0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAm
JiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAg
ICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2Fz
dDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZl
X3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0
eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvciwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0Zjgo
KS5kYXRhKCksIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9f
YnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUu
dXRmOCgpLmRhdGEoKSwgJmVycm9yLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0K
LVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IGRvdWJsZSogcXVhbGl0eSwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKLQotICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcigwKTsKLSAgICBnc2l6ZSBi
dWZmZXJTaXplOwotICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5
cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiAiZGF0YTos
IjsKLQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShidWZm
ZXIuZ2V0KCksIGJ1ZmZlclNpemUsIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIg
KyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5ZmJlZmYwMjU4NDJjMmYxZjg1ZWQ0OTlmNjQxNTkyMGU0
NTJmOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
Ci0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgi
Ci0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBjaGFyKiBnZXRQYXRoVG9JbWFnZVJlc291cmNlKGNoYXIqIHJl
c291cmNlKQotewotICAgIGlmIChnX2dldGVudigiV0VCS0lUX1RPUF9MRVZFTCIpKQotICAgICAg
ICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShnX2dldGVudigiV0VCS0lUX1RPUF9MRVZFTCIpLCAi
U291cmNlIiwgIldlYkNvcmUiLCAiUmVzb3VyY2VzIiwgcmVzb3VyY2UsIE5VTEwpOwotCi0gICAg
cmV0dXJuIGdfYnVpbGRfZmlsZW5hbWUoc2hhcmVkUmVzb3VyY2VzUGF0aCgpLmRhdGEoKSwgImlt
YWdlcyIsIHJlc291cmNlLCBOVUxMKTsKLX0KLQotc3RhdGljIENTdHJpbmcgZ2V0VGhlbWVJY29u
RmlsZU5hbWUoY29uc3QgY2hhciogbmFtZSwgaW50IHNpemUpCi17Ci0gICAgR3RrSWNvbkluZm8q
IGljb25JbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2ljb24oZ3RrX2ljb25fdGhlbWVfZ2V0
X2RlZmF1bHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lLCBzaXplLCBHVEtfSUNPTl9MT09LVVBfTk9fU1ZHKTsKLSAgICAvLyBU
cnkgdG8gZmFsbGJhY2sgb24gTUlTU0lOR19JTUFHRS4KLSAgICBpZiAoIWljb25JbmZvKQotICAg
ICAgICBpY29uSW5mbyA9IGd0a19pY29uX3RoZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1l
X2dldF9kZWZhdWx0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1NUT0NLX01JU1NJTkdfSU1BR0UsIHNpemUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0lDT05fTE9PS1VQX05PX1NWRyk7Ci0gICAg
aWYgKGljb25JbmZvKSB7Ci0gICAgICAgIEdPd25QdHI8R3RrSWNvbkluZm8+IGluZm8oaWNvbklu
Zm8pOwotICAgICAgICByZXR1cm4gQ1N0cmluZyhndGtfaWNvbl9pbmZvX2dldF9maWxlbmFtZShp
bmZvLmdldCgpKSk7Ci0gICAgfQotCi0gICAgLy8gTm8gaWNvbiB3YXMgZm91bmQsIHRoaXMgY2Fu
IGhhcHBlbiBpZiBub3QgR1RLIHRoZW1lIGlzIHNldC4gSW4KLSAgICAvLyB0aGF0IGNhc2UgYW4g
ZW1wdHkgSW1hZ2Ugd2lsbCBiZSBjcmVhdGVkLgotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVy
KENTdHJpbmcgbmFtZSkKLXsKLSAgICBHT3duUHRyPGdjaGFyPiBjb250ZW50OwotICAgIGdzaXpl
IGxlbmd0aDsKLSAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMobmFtZS5kYXRhKCksICZjb250
ZW50Lm91dFB0cigpLCAmbGVuZ3RoLCAwKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKCk7Ci0KLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5nZXQo
KSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0
YSgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRJbWFnZUZyb21GaWxlKENTdHJpbmcg
ZmlsZU5hbWUpCi17Ci0gICAgUmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKCk7Ci0gICAgaWYgKCFmaWxlTmFtZS5pc051bGwoKSkgewotICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXIoZmlsZU5hbWUp
OwotICAgICAgICBpbWctPnNldERhdGEoYnVmZmVyLnJlbGVhc2UoKSwgdHJ1ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBpbWcucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBDU3RyaW5nIGZp
bGVOYW1lOwotICAgIGlmICghc3RyY21wKCJtaXNzaW5nSW1hZ2UiLCBuYW1lKSkKLSAgICAgICAg
ZmlsZU5hbWUgPSBnZXRUaGVtZUljb25GaWxlTmFtZShHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwg
MTYpOwotICAgIGlmIChmaWxlTmFtZS5pc051bGwoKSkgewotICAgICAgICBHT3duUHRyPGdjaGFy
PiBpbWFnZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcy5wbmciLCBuYW1lKSk7Ci0gICAgICAgIEdP
d25QdHI8Z2NoYXI+IGdsaWJGaWxlTmFtZShnZXRQYXRoVG9JbWFnZVJlc291cmNlKGltYWdlTmFt
ZS5nZXQoKSkpOwotICAgICAgICBmaWxlTmFtZSA9IGdsaWJGaWxlTmFtZS5nZXQoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbG9hZEltYWdlRnJvbUZpbGUoZmlsZU5hbWUpOwotfQotCi1QYXNzUmVm
UHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUs
IGludCBzaXplKQotewotICAgIHJldHVybiBsb2FkSW1hZ2VGcm9tRmlsZShnZXRUaGVtZUljb25G
aWxlTmFtZShuYW1lLCBzaXplKSk7Ci19Ci0KLUdka1BpeGJ1ZiogQml0bWFwSW1hZ2U6OmdldEdk
a1BpeGJ1ZigpCi17Ci0gICAgTmF0aXZlSW1hZ2VDYWlybyogaW1hZ2UgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwotICAgIHJldHVybiBpbWFnZSA/IGNhaXJvSW1hZ2VTdXJmYWNlVG9H
ZGtQaXhidWYoaW1hZ2UtPnN1cmZhY2UoKSkgOiAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMjE1ODFlOGVkOTRhOWViZWMxZGVlYmM5NWJkMDEzMjU2
NzM2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50UG9p
bnQuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1J
bnRQb2ludDo6SW50UG9pbnQoY29uc3QgR2RrUG9pbnQmIHApCi0gICAgOiBtX3gocC54KQotICAg
ICwgbV95KHAueSkKLXsKLX0KLQotSW50UG9pbnQ6Om9wZXJhdG9yIEdka1BvaW50KCkgY29uc3QK
LXsKLSAgICBHZGtQb2ludCBwID0geyB4KCksIHkoKSB9OwotICAgIHJldHVybiBwOwotfQotCi19
Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFmMzEyODE5YWZjYTExYWQ3NzdkMzQyYzdhMzk0MDY0NzlmMjM1OGUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi0jaW5jbHVkZSA8
Z2RrL2dkay5oPgotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotSW50UmVjdDo6SW50UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmIHIpCi0gICAgOiBtX2xv
Y2F0aW9uKEludFBvaW50KHIueCwgci55KSkKLSAgICAsIG1fc2l6ZShyLndpZHRoLCByLmhlaWdo
dCkKLXsKLX0KLQotSW50UmVjdDo6b3BlcmF0b3IgR2RrUmVjdGFuZ2xlKCkgY29uc3QKLXsKLSAg
ICBHZGtSZWN0YW5nbGUgciA9IHsgeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpIH07Ci0gICAg
cmV0dXJuIHI7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzBmYmRhMDg3MzQwYzBiZjYxYjFkYjFkNzcwYzg5YzdlZDgzMDI0OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0Bn
bWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1HdGsu
aCIKLQotI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWJvb2wgQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1HdGsoKSk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lz
dGVtOjpvcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcm
IHN0b3JhZ2VJZGVudGlmaWVyLCBGaWxlU3lzdGVtVHlwZSwgYm9vbCwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIGNhbGxiYWNrcy0+ZGlkRmFpbChOT1RfU1VQUE9SVEVEX0VSUik7Ci19Ci0KLXZvaWQg
QXN5bmNGaWxlU3lzdGVtOjpkZWxldGVGaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgs
IGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZpZXIsIEZpbGVTeXN0ZW1UeXBlIHR5cGUsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICBjYWxsYmFja3MtPmRpZEZhaWwoTk9UX1NVUFBPUlRFRF9FUlIp
OwotfQotCi1Bc3luY0ZpbGVTeXN0ZW1HdGs6OkFzeW5jRmlsZVN5c3RlbUd0aygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotQXN5bmNGaWxlU3lzdGVtR3RrOjp+QXN5bmNGaWxlU3lz
dGVtR3RrKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5
c3RlbUd0azo6bW92ZShjb25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5h
dGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6
OmNvcHkoY29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRo
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZW1vdmUo
Y29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5
c3RlbUd0azo6cmVtb3ZlUmVjdXJzaXZlbHkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVhZE1ldGFkYXRhKGNvbnN0IEtV
UkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6
OmNyZWF0ZUZpbGUoY29uc3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZURpcmVjdG9yeShjb25z
dCBLVVJMJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEFzeW5jRmlsZVN5c3RlbUd0azo6ZmlsZUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpkaXJlY3RvcnlFeGlzdHMo
Y29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5
c3RlbUd0azo6cmVhZERpcmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZVdyaXRlcihBc3luY0ZpbGVX
cml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzOWY1NzM3MDgxY2E2ODRmMDExMzIxYzc1YmE4ZGZlNWRhNjU1YzcxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1p
ZG93QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgIEFzeW5jRmls
ZVN5c3RlbUd0a19oCi0jZGVmaW5lICBBc3luY0ZpbGVTeXN0ZW1HdGtfaAotCi0jaWYgRU5BQkxF
KEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M7Ci0KLWNsYXNzIEFzeW5jRmlsZVN5c3RlbUd0ayA6IHB1YmxpYyBB
c3luY0ZpbGVTeXN0ZW0gewotcHVibGljOgotICAgIEFzeW5jRmlsZVN5c3RlbUd0aygpOwotICAg
IHZpcnR1YWwgfkFzeW5jRmlsZVN5c3RlbUd0aygpOwotCi0gICAgdmlydHVhbCB2b2lkIG1vdmUo
Y29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5
KGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
Pik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVJlY3Vyc2l2ZWx5KGNvbnN0IEtVUkwmIHBhdGgs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lk
IHJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVGaWxlKGNvbnN0IEtVUkwmIHBh
dGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
OwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVEaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgYm9v
bCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAg
dmlydHVhbCB2b2lkIGZpbGVFeGlzdHMoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlyZWN0b3J5RXhpc3Rz
KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7
Ci0gICAgdmlydHVhbCB2b2lkIHJlYWREaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
V3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVudCosIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gIEFzeW5jRmlsZVN5c3RlbUd0a19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyNjNiNmNmOGYyZWRjNTk5OGYxNWEwMWFlYmM1NzIyZTM1OTY2NDRhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM4
ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiUGFzdGVi
b2FyZEhlbHBlci5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gQ2xpcGJvYXJkRGF0
YVR5cGUgewotICAgIENsaXBib2FyZERhdGFUeXBlVGV4dCwKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZU1hcmt1cCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsCi0gICAgQ2xpcGJvYXJkRGF0
YVR5cGVVUkwsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZSwKLSAgICBDbGlwYm9hcmREYXRh
VHlwZVVua25vd24KLX07Ci0KLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVy
YWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQot
ewotICAgIHJldHVybiBDbGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRf
Z2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05f
Q0xJUEJPQVJEKSwgZnJhbWUpOwotfQotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJk
OjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRh
LCBGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGlj
eSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLCBEcmFnQW5kRHJvcCwgZnJhbWUpOwotfQotCi1D
bGlwYm9hcmRHdGs6OkNsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBv
bGljeSwgQ29weUFuZFBhc3RlKQotICAgICwgbV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZv
ckNsaXBib2FyZChjbGlwYm9hcmQpKQotICAgICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAg
ICwgbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRh
T2JqZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6
IENsaXBib2FyZChwb2xpY3ksIGNsaXBib2FyZFR5cGUpCi0gICAgLCBtX2RhdGFPYmplY3QoZGF0
YU9iamVjdCkKLSAgICAsIG1fY2xpcGJvYXJkKDApCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewot
fQotCi1DbGlwYm9hcmRHdGs6On5DbGlwYm9hcmRHdGsoKQotewotICAgIGlmIChtX2RyYWdJbWFn
ZSkKLSAgICAgICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0KLQotc3RhdGlj
IENsaXBib2FyZERhdGFUeXBlIGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNv
bnN0IFN0cmluZyYgcmF3VHlwZSkKLXsKLSAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hp
dGVTcGFjZSgpKTsKLQotICAgIC8vIFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmls
aXR5Ci0gICAgaWYgKHR5cGUgPT0gIlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQotICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OwotICAgIGlmICh0eXBlID09ICJVUkwiKQotICAg
ICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7Ci0KLSAgICAvLyBGcm9tIHRoZSBNYWMg
cG9ydDogSWdub3JlIGFueSB0cmFpbGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKLSAgICAv
LyBVbmljb2RlLCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCi0gICAgaWYg
KHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkK
LSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dDsKLSAgICBpZiAodHlwZSA9PSAi
dGV4dC9odG1sIiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKLSAgICAgICAgcmV0
dXJuIENsaXBib2FyZERhdGFUeXBlTWFya3VwOwotICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwg
dHlwZSA9PSAidGV4dC91cmktbGlzdCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0
OyIpKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OwotCi0gICAgLy8g
Tm90IGEga25vd24gdHlwZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRp
b24uCi0gICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVW5rbm93bjsKLX0KLQotdm9pZCBDbGlw
Ym9hcmRHdGs6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCi17Ci0gICAgaWYg
KHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
bGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5
cGUodHlwZVN0cmluZyk7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmRE
YXRhVHlwZVVSSUxpc3Q6Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAg
bV9kYXRhT2JqZWN0LT5jbGVhclVSSUxpc3QoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZU1hcmt1cDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhck1hcmt1
cCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVGV4dDoKLSAg
ICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclRleHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFySW1h
Z2UoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246
Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJk
KTsKLX0KLQotCi12b2lkIENsaXBib2FyZEd0azo6Y2xlYXJBbGxEYXRhKCkKLXsKLSAgICBpZiAo
cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFdlIGRvIG5vdCBjbGVhciBmaWxlbmFtZXMuIEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBj
bGVhckRhdGEoKSBtZXRob2QKLSAgICAvLyBkb2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmls
ZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZywgc28gdGhlIHR5cGVzCi0gICAgLy8gYXR0cmli
dXRlJ3MgbGlzdCBtaWdodCBzdGlsbCBub3QgYmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRh
dGEoKSAoaXQgd291bGQgCi0gICAgLy8gc3RpbGwgY29udGFpbiB0aGUgIkZpbGVzIiBzdHJpbmcg
aWYgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcpLiIKLSAgICBtX2RhdGFPYmpl
Y3QtPmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0g
ICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRl
Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotfQotCi1TdHJpbmcgQ2xpcGJvYXJkR3Rr
OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykgY29uc3QKLXsKLSAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJk
SGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyht
X2NsaXBib2FyZCk7Ci0KLSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5
cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xp
cGJvYXJkRGF0YVR5cGVVUklMaXN0KQotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlM
aXN0KCk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpCi0gICAgICAgIHJl
dHVybiBtX2RhdGFPYmplY3QtPnVybCgpOwotICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFU
eXBlTWFya3VwKQotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5tYXJrdXAoKTsKLSAgICBp
ZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpCi0gICAgICAgIHJldHVybiBtX2RhdGFP
YmplY3QtPnRleHQoKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBDbGlwYm9h
cmRHdGs6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRh
dGEpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBDbGlwYm9hcmRE
YXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0
cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUg
PT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklM
aXN0KGRhdGEpOwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXApIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRN
YXJrdXAoZGF0YSk7Ci0gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRU
ZXh0KGRhdGEpOwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
c3VjY2VzczsKLX0KLQotTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkg
Y29uc3QKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5
KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0
PFN0cmluZz4oKTsKLQotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhl
bHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9j
bGlwYm9hcmQpOwotCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKLSAgICBpZiAobV9k
YXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7
Ci0gICAgICAgIHR5cGVzLmFkZCgiVGV4dCIpOwotICAgICAgICB0eXBlcy5hZGQoInRleHQiKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgdHlw
ZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKLQotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3Qo
KSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgdHlwZXMu
YWRkKCJVUkwiKTsKLSAgICB9Ci0KLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMo
KSkKLSAgICAgICAgdHlwZXMuYWRkKCJGaWxlcyIpOwotCi0gICAgcmV0dXJuIHR5cGVzOwotfQot
Ci1QYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRHdGs6OmZpbGVzKCkgY29uc3QKLXsKLSAg
ICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBGaWxl
TGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRz
KG1fY2xpcGJvYXJkKTsKLQotICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlz
dDo6Y3JlYXRlKCk7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0
YU9iamVjdC0+ZmlsZW5hbWVzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFt
ZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZp
bGVuYW1lc1tpXSwgRmlsZTo6QWxsQ29udGVudFR5cGVzKSk7Ci0gICAgcmV0dXJuIGZpbGVMaXN0
LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJ
bWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKLXsKLSAgICBzZXREcmFnSW1h
Z2UoaW1hZ2UsIDAsIGxvY2F0aW9uKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJ
bWFnZUVsZW1lbnQoTm9kZSogZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQotewot
ICAgIHNldERyYWdJbWFnZSgwLCBlbGVtZW50LCBsb2NhdGlvbik7Ci19Ci0KLXZvaWQgQ2xpcGJv
YXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBOb2RlKiBlbGVtZW50LCBj
b25zdCBJbnRQb2ludCYgbG9jYXRpb24pCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZEltYWdlV3JpdGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1hZ2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKLSAgICBtX2RyYWdJbWFnZSA9IGltYWdlOwotICAgIGlmIChtX2Ry
YWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKLQotICAgIG1f
ZHJhZ0xvYyA9IGxvY2F0aW9uOwotICAgIG1fZHJhZ0ltYWdlRWxlbWVudCA9IGVsZW1lbnQ7Ci19
Ci0KLURyYWdJbWFnZVJlZiBDbGlwYm9hcmRHdGs6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYg
bG9jYXRpb24pIGNvbnN0Ci17Ci0gICAgbG9jYXRpb24gPSBtX2RyYWdMb2M7Ci0KLSAgICBpZiAo
bV9kcmFnSW1hZ2UpCi0gICAgICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9k
cmFnSW1hZ2UtPmltYWdlKCkpOwotICAgIGlmIChtX2RyYWdJbWFnZUVsZW1lbnQgJiYgbV9mcmFt
ZSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWUtPm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQu
Z2V0KCkpOwotCi0gICAgcmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1h
dGlvbiB0byBjcmVhdGUgYSBkcmFnIGltYWdlLCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KLX0KLQot
c3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIC8vIEF0dGVtcHQgdG8gcHVsbCBDYWNoZWRJbWFnZSBmcm9tIGVsZW1lbnQKLSAgICBBU1NF
UlQoZWxlbWVudCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJJbWFnZSo+KHJlbmRlcmVyKTsKLSAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWlt
YWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBpbWFn
ZS0+Y2FjaGVkSW1hZ2UoKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZEd0
azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqIGZyYW1lKQotewotICAgIG1fZGF0YU9i
amVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOwotICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNy
ZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKLQot
ICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOwotICAgIGlm
ICghaW1hZ2UgfHwgIWltYWdlLT5pc0xvYWRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
UmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5pbWFnZUZvclJlbmRl
cmVyKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5nZXRHZGtQaXhidWYoKSk7Ci0gICAgaWYgKCFwaXhi
dWYpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVm
LmdldCgpKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqKQotewotICAgIG1fZGF0YU9iamVjdC0+c2V0
VVJMKHVybCwgbGFiZWwpOwotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50
cyhtX2NsaXBib2FyZCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjp3cml0ZVJhbmdlKFJhbmdl
KiByYW5nZSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVChyYW5nZSk7Ci0KLSAgICBtX2Rh
dGFPYmplY3QtPnNldFRleHQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKSk7Ci0gICAg
bV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHJhbmdlLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwotCi0gICAgaWYgKG1f
Y2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotdm9pZCBD
bGlwYm9hcmRHdGs6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICBt
X2RhdGFPYmplY3QtPnNldFRleHQodGV4dCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAg
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xp
cGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotfQotCi1ib29sIENsaXBib2FyZEd0azo6aGFz
RGF0YSgpCi17Ci0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBi
b2FyZCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkgfHwgbV9kYXRhT2Jq
ZWN0LT5oYXNNYXJrdXAoKQotICAgICAgICB8fCBtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSB8
fCBtX2RhdGFPYmplY3QtPmhhc0ltYWdlKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU5
ZDYzY2U0ZjJjZThiYzExMmQwZjIwOTNlZTU4ODM5MzIyOGUzNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIENsaXBib2FyZEd0a19oCi0jZGVmaW5lIENsaXBib2FyZEd0a19oCi0KLSNp
bmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2lu
Y2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNz
IENhY2hlZEltYWdlOwotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIFBhc3RlYm9hcmRIZWxw
ZXI7Ci0KLSAgICAvLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZvciBkcmFn
IGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi0gICAgLy8gQ3JlYXRlZCBmcm9tIHRoZSBFdmVudEhh
bmRsZXJHdGsgdG8gYmUgdXNlZCBieSB0aGUgZG9tCi0gICAgY2xhc3MgQ2xpcGJvYXJkR3RrIDog
cHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZEltYWdlQ2xpZW50IHsKLSAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGNsaXBib2FyZCwg
ZnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2Fy
ZEd0az4gY3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIFBhc3NSZWZQdHI8RGF0
YU9iamVjdEd0az4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBGcmFt
ZSogZnJhbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xp
cGJvYXJkR3RrKHBvbGljeSwgZGF0YU9iamVjdCwgY2xpcGJvYXJkVHlwZSwgZnJhbWUpKTsKLSAg
ICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5DbGlwYm9hcmRHdGsoKTsKLQotICAgICAgICB2b2lk
IGNsZWFyRGF0YShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsK
LSAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIGJv
b2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICB2aXJ0
dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0RHJh
Z0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICAgICAgdm9pZCBzZXRE
cmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwotICAgICAgICB2b2lkIHNl
dERyYWdJbWFnZShDYWNoZWRJbWFnZSosIE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAg
ICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFzRGF0YSgpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0
YU9iamVjdCgpIHsgcmV0dXJuIG1fZGF0YU9iamVjdDsgfQotICAgICAgICBHdGtDbGlwYm9hcmQq
IGNsaXBib2FyZCgpIHsgcmV0dXJuIG1fY2xpcGJvYXJkOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBHdGtDbGlwYm9hcmQqLCBG
cmFtZSopOwotICAgICAgICBDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBQYXNz
UmVmUHRyPERhdGFPYmplY3RHdGs+LCBDbGlwYm9hcmRUeXBlLCBGcmFtZSopOwotCi0gICAgICAg
IFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBtX2RhdGFPYmplY3Q7Ci0gICAgICAgIEd0a0NsaXBib2Fy
ZCogbV9jbGlwYm9hcmQ7Ci0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgIH07Ci19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0
aWxpdGllc0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRp
bGl0aWVzR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZjMGU3NDQ2ZTBl
ZWRlMTI1YjEwY2E0YTgyZTY5YTdmNjVhMjU1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVz
R3RrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0
aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCi17Ci0gICAgR2Rr
RHJhZ0FjdGlvbiBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLSAg
ICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uTm9uZSkKLSAgICAgICAgcmV0dXJuIGdk
a0FjdGlvbjsKLQotICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAg
ICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09Q
WSB8IGdka0FjdGlvbik7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkK
LSAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElP
Tl9NT1ZFIHwgZ2RrQWN0aW9uKTsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25M
aW5rKQotICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtf
QUNUSU9OX0xJTksgfCBnZGtBY3Rpb24pOwotICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJh
dGlvblByaXZhdGUpCi0gICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rp
b24+KEdES19BQ1RJT05fUFJJVkFURSB8IGdka0FjdGlvbik7Ci0KLSAgICByZXR1cm4gZ2RrQWN0
aW9uOwotfQotCi1HZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rp
b24oRHJhZ09wZXJhdGlvbiBjb3JlQWN0aW9uKQotewotICAgIGlmIChjb3JlQWN0aW9uID09IERy
YWdPcGVyYXRpb25FdmVyeSB8fCBjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAg
ICAgIHJldHVybiBHREtfQUNUSU9OX0NPUFk7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3Bl
cmF0aW9uTW92ZSkKLSAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTU9WRTsKLSAgICBpZiAoY29y
ZUFjdGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9M
SU5LOwotICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZhdGUpCi0gICAgICAg
IHJldHVybiBHREtfQUNUSU9OX1BSSVZBVEU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka0Ry
YWdBY3Rpb24+KDApOwotfQotCi1EcmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVy
YXRpb24oR2RrRHJhZ0FjdGlvbiBnZGtBY3Rpb24pCi17Ci0gICAgLy8gV2UgaGF2ZSBubyBnb29k
IHdheSB0byBkZXRlY3QgRHJhZ09wZXJhdGlvbkV2ZXJ5IG90aGVyIHRoYW4KLSAgICAvLyB0byB1
c2UgaXQgd2hlbiBhbGwgYXBwbGljYWJsZSBmbGFncyBhcmUgb24uCi0gICAgaWYgKGdka0FjdGlv
biAmIEdES19BQ1RJT05fQ09QWSAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01PVkUKLSAgICAg
ICAgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LICYmIGdka0FjdGlvbiAmIEdES19BQ1RJ
T05fUFJJVkFURSkKLSAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25FdmVyeTsKLQotICAgIHVu
c2lnbmVkIGludCBhY3Rpb24gPSBEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBpZiAoZ2RrQWN0aW9u
ICYgR0RLX0FDVElPTl9DT1BZKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkNvcHk7
Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fTU9WRSkKLSAgICAgICAgYWN0aW9uIHw9
IERyYWdPcGVyYXRpb25Nb3ZlOwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0xJTksp
Ci0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTGluazsKLSAgICBpZiAoZ2RrQWN0aW9u
ICYgR0RLX0FDVElPTl9QUklWQVRFKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvblBy
aXZhdGU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KGFjdGlvbik7Ci19
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRV
dGlsaXRpZXNHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGls
aXRpZXNHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmNjM0NjllMmI4ZGU0
NWMwMTc3NzVmMGI0MjkyYmQ2YmFjNDc0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRp
bGl0aWVzR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2lmbmRlZiBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAotI2RlZmluZSBDbGlwYm9hcmRVdGls
aXRpZXNHdGtfaAotCi0jaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9u
VG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsKLUdka0RyYWdBY3Rpb24gZHJhZ09wZXJh
dGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9uKTsKLURyYWdPcGVyYXRpb24g
Z2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFnQWN0aW9uKTsKLQotfQotCi0jZW5k
aWYgLy8gQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzQ1ZjIzYmI1OTZlOGMyZWFlYjMyOTcxMGRmNDhlNDc0YzdlYzQ1MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
Q29tcG9zaXRpb25SZXN1bHRzX2gKLSNkZWZpbmUgQ29tcG9zaXRpb25SZXN1bHRzX2gKLQotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
cnVjdCBDb21wb3NpdGlvblJlc3VsdHMgewotICAgIENvbXBvc2l0aW9uUmVzdWx0cygpCi0gICAg
ICAgIDogYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGUoZmFsc2UpCi0gICAg
ewotICAgIH0KLQotICAgIENvbXBvc2l0aW9uUmVzdWx0cyhTdHJpbmcgc2ltcGxlU3RyaW5nKQot
ICAgICAgICA6IHNpbXBsZVN0cmluZyhzaW1wbGVTdHJpbmcpCi0gICAgICAgICwgYXNzb2NpYXRl
ZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IGVudW0gUmVzdWx0c0luZGljYXRvciB7IFdpbGxTZW5kQ29tcG9zaXRpb25SZXN1bHRzU29vbiB9
OwotICAgIENvbXBvc2l0aW9uUmVzdWx0cyhSZXN1bHRzSW5kaWNhdG9yKQotICAgICAgICA6IGFz
c29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgewotICAgIH0K
LQotICAgIGJvb2wgY29tcG9zaXRpb25VcGRhdGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKLSAgICB9Ci0KLSAg
ICAvLyBTb21lIHNpbXBsZSBpbnB1dCBtZXRob2RzIHJldHVybiBhIHN0cmluZyBmb3IgYWxsIGtl
eWJvYXJkIGV2ZW50cy4gVGhpcwotICAgIC8vIHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHRo
ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGtleWNvZGUuCi0gICAgU3RyaW5nIHNpbXBs
ZVN0cmluZzsKLQotICAgIGJvb2wgYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRh
dGU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBDb21wb3NpdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhjMDAyYzRkOWZkNzgyZjkyNzA0YzQ5NzZjNDM3ZWExZjllNWRkYjku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDEyNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
Ci0KLSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51
KCkKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVShndGtfbWVudV9uZXco
KSk7Ci19Ci0KLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQotICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCi17Ci19Ci0K
LUNvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQotewotICAgIGlmIChtX3BsYXRmb3JtRGVzY3Jp
cHRpb24pCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbikpOwotfQotCi12b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRN
ZW51SXRlbSYgaXRlbSkKLXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLQot
ICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBwbGF0Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0ucmVs
ZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7Ci0gICAgQVNTRVJUKHBsYXRmb3JtSXRlbSk7Ci0K
LSAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZv
cm1JdGVtLmdldCgpKSkKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5F
UihwYXJlbnQpLCBwbGF0Zm9ybUl0ZW0uZ2V0KCkpOwotCi0gICAgZ3RrX21lbnVfc2hlbGxfYXBw
ZW5kKEdUS19NRU5VX1NIRUxMKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIHBsYXRmb3JtSXRlbS5n
ZXQoKSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbS5nZXQoKSk7Ci19Ci0KLXZv
aWQgQ29udGV4dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gbWVudSkKLXsKLSAgICBBU1NFUlQobWVudSk7Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9PSBtZW51KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbikKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQobV9wbGF0Zm9y
bURlc2NyaXB0aW9uKSk7Ci0KLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBtZW51OwotfQot
Ci1QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZvcm1EZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0
aW9uKCkKLXsKLSAgICBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IG1fcGxh
dGZvcm1EZXNjcmlwdGlvbjsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSAwOwotCi0gICAg
cmV0dXJuIGRlc2NyaXB0aW9uOwotfQotCi11bnNpZ25lZCBDb250ZXh0TWVudTo6aXRlbUNvdW50
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLQotICAgIEdP
d25QdHI8R0xpc3Q+IGNoaWxkcmVuKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05U
QUlORVIobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkpOwotICAgIHJldHVybiBnX2xpc3RfbGVuZ3Ro
KGNoaWxkcmVuLmdldCgpKTsKLX0KLQotVmVjdG9yPENvbnRleHRNZW51SXRlbT4gY29udGV4dE1l
bnVJdGVtVmVjdG9yKGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAg
VmVjdG9yPENvbnRleHRNZW51SXRlbT4gbWVudUl0ZW1WZWN0b3I7Ci0KLSAgICBHT3duUHRyPEdM
aXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1l
bnUpKSk7Ci0gICAgaW50IGl0ZW1Db3VudCA9IGdfbGlzdF9sZW5ndGgoY2hpbGRyZW4uZ2V0KCkp
OwotICAgIG1lbnVJdGVtVmVjdG9yLnJlc2VydmVDYXBhY2l0eShpdGVtQ291bnQpOwotCi0gICAg
Zm9yIChHTGlzdCogaXRlbSA9IGNoaWxkcmVuLmdldCgpOyBpdGVtOyBpdGVtID0gZ19saXN0X25l
eHQoaXRlbSkpIHsKLSAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxHdGtX
aWRnZXQqPihpdGVtLT5kYXRhKTsKLSAgICAgICAgaWYgKCFHVEtfSVNfTUVOVV9JVEVNKHdpZGdl
dCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbWVudUl0ZW1WZWN0b3IuYXBwZW5k
KEdUS19NRU5VX0lURU0od2lkZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lbnVJdGVtVmVj
dG9yOwotfQotCi1QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBwbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
bihWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQotewotICAgIEd0a01lbnUq
IG1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdWJNZW51SXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBwbGF0
Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKHN1Yk1lbnVJdGVtc1tpXS5yZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpKTsKLSAgICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxM
KG1lbnUpLCBwbGF0Zm9ybUl0ZW0pOwotICAgICAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1J
dGVtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1lbnU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NvbnRleHRNZW51SXRlbUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVJdGVtR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwYjVi
ZTZiZGYwYmQ5Y2ZjNzc4Y2EyMDVkYjIzODc1NWMzMWUyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVJdGVtR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoQ09OVEVYVF9NRU5VUykKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgotCi0jaW5j
bHVkZSAiQ29udGV4dE1lbnUuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVO
VV9BQ1RJT04gIndlYmtpdC1jb250ZXh0LW1lbnUiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3Qg
Q29udGV4dE1lbnVBY3Rpb24mIGFjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoKLSAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgotICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnQ29weToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19DT1BZOwotICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVk
aWFJbk5ld1dpbmRvdzoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOwotICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19T
QVZFOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgotICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX0dPX0JBQ0s7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6
Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKLSAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZS
RVNIOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX0NVVDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgotICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX1BBU1RFOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRl
OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0RFTEVURTsKLSAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NlbGVjdEFsbDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOwot
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19OTzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3Bl
bGxpbmc6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT0s7Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdPdGhlcjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFOwot
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGlnaHQ6Ci0gICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfRklORDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdl
YjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19GSU5EOwotICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfT1BFTjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlpvb21JbjoKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19aT09NX0lOOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91
dDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX09VVDsKLSAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVBERkF1dG9TaXplOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklUOwot
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfR09fRk9SV0FSRDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFn
ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19CQUNLOwotICAgIC8vIE5ldyB0YWdzLCBu
b3QgcGFydCBvZiBBUEkKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOwotICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6Ci0gICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfU0VMRUNUX0ZPTlQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6Ci0g
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdCb2xkOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0JPTEQ7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfSVRBTElD
OwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOgotICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX1VOREVSTElORTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xv
cnM6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0NPTE9SOwotICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKLSAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJ
bWFnZVVybFRvQ2xpcGJvYXJkOgotICAgICAgICAvLyBObyBpY29uIGZvciB0aGlzLgotICAgICAg
ICByZXR1cm4gMDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2Ny
ZWVuOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZVTExTQ1JFRU47Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1zdGF0aWMgUGxhdGZvcm1NZW51SXRlbURl
c2NyaXB0aW9uIGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihDb250ZXh0TWVudUl0
ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQpCi17Ci0gICAgaWYgKHR5cGUgPT0gU2VwYXJh
dG9yVHlwZSkKLSAgICAgICAgcmV0dXJuIEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51
X2l0ZW1fbmV3KCkpOwotCi0gICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3By
aW50ZigiY29udGV4dC1tZW51LWFjdGlvbi0lZCIsIGFjdGlvbikpOwotICAgIEdSZWZQdHI8R3Rr
QWN0aW9uPiBwbGF0Zm9ybUFjdGlvbjsKLQotICAgIGlmICh0eXBlID09IENoZWNrYWJsZUFjdGlv
blR5cGUpIHsKLSAgICAgICAgcGxhdGZvcm1BY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihn
dGtfdG9nZ2xlX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEo
KSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihhY3Rpb24pKSkpOwotICAgICAg
ICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3Jt
QWN0aW9uLmdldCgpKSwgY2hlY2tlZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBsYXRmb3JtQWN0
aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0
ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkp
OwotICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShwbGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5h
YmxlZCk7Ci0KLSAgICBHdGtNZW51SXRlbSogaXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlv
bl9jcmVhdGVfbWVudV9pdGVtKHBsYXRmb3JtQWN0aW9uLmdldCgpKSk7Ci0gICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1QoaXRlbSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5U
X1RPX1BPSU5URVIoYWN0aW9uKSk7Ci0KLSAgICByZXR1cm4gaXRlbTsKLX0KLQotLy8gRXh0cmFj
dCB0aGUgQWN0aW9uVHlwZSBmcm9tIHRoZSBtZW51IGl0ZW0KLUNvbnRleHRNZW51SXRlbTo6Q29u
dGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtKQotICAgIDogbV9w
bGF0Zm9ybURlc2NyaXB0aW9uKGl0ZW0pCi17Ci0gICAgLy8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJl
bHMgaW4gY29udGV4dCBtZW51IGl0ZW1zLgotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0
aW9uKCk7Ci0gICAgaWYgKCFhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZ3Rr
X2FjdGlvbl9nZXRfYWNjZWxfcGF0aChhY3Rpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
dGtXaWRnZXQqIGNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihpdGVtKSk7Ci0gICAg
aWYgKEdUS19JU19BQ0NFTF9MQUJFTChjaGlsZCkpCi0gICAgICAgIGd0a19hY2NlbF9sYWJlbF9z
ZXRfYWNjZWxfY2xvc3VyZShHVEtfQUNDRUxfTEFCRUwoY2hpbGQpLCAwKTsKLX0KLQotQ29udGV4
dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCi17Ci0gICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfbWVudV9pdGVtX25ldygp
KTsKLSAgICBpZiAoc3ViTWVudSkKLSAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKLX0KLQot
Q29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBl
LCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRN
ZW51KiBzdWJNZW51KQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRm
b3JtTWVudUl0ZW1EZXNjcmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7
Ci0gICAgaWYgKHN1Yk1lbnUpCi0gICAgICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7Ci19Ci0KLUNv
bnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwg
Q29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJs
ZWQsIGJvb2wgY2hlY2tlZCkKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQ
bGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24odHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwg
Y2hlY2tlZCk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRN
ZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29s
IGNoZWNrZWQsIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCi17Ci0gICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9u
KFN1Ym1lbnVUeXBlLCBhY3Rpb24sIHRpdGxlLCBlbmFibGVkLCBjaGVja2VkKTsKLSAgICBzZXRT
dWJNZW51KHN1Yk1lbnVJdGVtcyk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51
SXRlbSgpCi17Ci19Ci0KLVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0
ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKLXsKLSAgICBQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24gcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsK
LSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSAwOwotICAgIHJldHVybiBwbGF0Zm9ybURlc2Ny
aXB0aW9uOwotfQotCi1Db250ZXh0TWVudUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBTZXBhcmF0b3JUeXBlOwotICAgIGlmIChHVEtf
SVNfQ0hFQ0tfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVy
biBDaGVja2FibGVBY3Rpb25UeXBlOwotICAgIGlmIChndGtfbWVudV9pdGVtX2dldF9zdWJtZW51
KG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBTdWJtZW51VHlwZTsKLSAg
ICByZXR1cm4gQWN0aW9uVHlwZTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUo
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5
cGUpCi0gICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX3Nl
cGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOwotfQotCi1Db250ZXh0TWVudUFjdGlvbiBDb250ZXh0
TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRl
eHRNZW51QWN0aW9uPihHUE9JTlRFUl9UT19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qo
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04pKSk7Ci19
Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0
aW9uKQotewotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9u
KSk7Ci19Ci0KLVN0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKLXsKLSAgICBH
dGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIHJldHVybiBhY3Rpb24gPyBTdHJp
bmc6OmZyb21VVEY4KGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7Ci19
Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQot
ewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbikK
LSAgICAgICAgZ3RrX2FjdGlvbl9zZXRfbGFiZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgp
KTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9y
bVN1Yk1lbnUoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogc3ViTWVudSA9IGd0a19tZW51X2l0
ZW1fZ2V0X3N1Ym1lbnUobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLSAgICByZXR1cm4gc3ViTWVu
dSA/IEdUS19NRU5VKHN1Yk1lbnUpIDogMDsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNl
dFN1Yk1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCi17Ci0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3Vi
bWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24sIEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRm
b3JtRGVzY3JpcHRpb24oKSkpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVu
dShWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQotewotICAgIENvbnRleHRN
ZW51IG1lbnUocGxhdGZvcm1NZW51RGVzY3JpcHRpb24oc3ViTWVudUl0ZW1zKSk7Ci0gICAgc2V0
U3ViTWVudSgmbWVudSk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJv
b2wgc2hvdWxkQ2hlY2spCi17Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsK
LSAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAg
IGd0a190b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwg
c2hvdWxkQ2hlY2spOwotfQotCi1ib29sIENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0
Ci17Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9u
ICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAgIHJldHVybiBndGtfdG9n
Z2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAot
ewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgcmV0dXJuIGFjdGlv
biA/IGd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pIDogZmFsc2U7Ci19Ci0KLXZvaWQg
Q29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wgc2hvdWxkRW5hYmxlKQotewotICAgIEd0
a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbikKLSAgICAgICAg
Z3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbiwgc2hvdWxkRW5hYmxlKTsKLX0KLQotR3Rr
QWN0aW9uKiBDb250ZXh0TWVudUl0ZW06Omd0a0FjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9N
RU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYjkwNWE5NjRkZTc2MjM0MjA5YzJmNWM5MWM2Y2RmNzkw
NTQyMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2Fu
IDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSWdh
bGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkN1cnNvckd0ay5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIK
LQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJS
ZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgR1JlZlB0cjxHZGtDdXJzb3I+IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclR5
cGUgY3Vyc29yVHlwZSkKLXsKLSAgICBDdXN0b21DdXJzb3IgY3Vyc29yID0gQ3VzdG9tQ3Vyc29y
c1tjdXJzb3JUeXBlXTsKLSAgICBHUmVmUHRyPEdka0N1cnNvcj4gYyA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ld19mcm9tX25hbWUoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgY3Vyc29yLm5h
bWUpKTsKLSAgICBpZiAoYykKLSAgICAgICAgcmV0dXJuIGM7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBzb3VyY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9m
b3JfZGF0YShjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjdXJzb3IuYml0cyksIENBSVJPX0ZP
Uk1BVF9BMSwgMzIsIDMyLCA0KSk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbWFzayA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNvbnN0X2Nhc3Q8
dW5zaWduZWQgY2hhcio+KGN1cnNvci5tYXNrX2JpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAz
MiwgNCkpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBhZG9wdFJlZihj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQTEsIDMyLCAzMikpOwotICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlLmdldCgp
KSk7Ci0KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHNvdXJjZS5nZXQo
KSwgMCwgMCk7Ci0gICAgY2Fpcm9fbWFza19zdXJmYWNlKGNyLmdldCgpLCBtYXNrLmdldCgpLCAw
LCAwKTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoZ2RrX3Bp
eGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZhY2UuZ2V0KCksIDAsIDAsIDMyLCAzMikpOwotICAg
IHJldHVybiBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlf
Z2V0X2RlZmF1bHQoKSwgcGl4YnVmLmdldCgpLCBjdXJzb3IuaG90X3gsIGN1cnNvci5ob3RfeSkp
OwotfQotCi1zdGF0aWMgR1JlZlB0cjxHZGtDdXJzb3I+IGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFn
ZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQotewotICAgIEludFBvaW50IGVmZmVj
dGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KTsKLSAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7
Ci0gICAgcmV0dXJuIGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYuZ2V0KCksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBl
ZmZlY3RpdmVIb3RTcG90LnkoKSkpOwotfQotCi12b2lkIEN1cnNvcjo6ZW5zdXJlUGxhdGZvcm1D
dXJzb3IoKSBjb25zdAotewotICAgIGlmIChtX3BsYXRmb3JtQ3Vyc29yIHx8IG1fdHlwZSA9PSBD
dXJzb3I6OlBvaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBDdXJzb3I6OlBvaW50ZXI6Ci0gICAgICAgIC8vIEEgbnVsbCBHZGtDdXJzb3Ig
aXMgdGhlIGRlZmF1bHQgY3Vyc29yIGZvciB0aGUgd2luZG93LgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNyb3NzOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19DUk9T
UykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6SGFuZDoKLSAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfSEFORDIpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OklCZWFtOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19YVEVSTSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEN1cnNvcjo6V2FpdDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfV0FUQ0gpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDdXJzb3I6OkhlbHA6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdS
ZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1FVRVNUSU9OX0FSUk9XKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ3Vyc29yOjpNb3ZlOgotICAgIGNhc2UgQ3Vyc29yOjpNaWRkbGVQYW5uaW5nOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19G
TEVVUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToKLSAg
ICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBh
ZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1JJR0hUX1NJREUpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoUmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFBh
bm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9u
ZXcoR0RLX1RPUF9TSURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0
aEVhc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmc6Ci0gICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9SSUdI
VF9DT1JORVIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFJl
c2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX0xFRlRfQ09STkVS
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKLSAgICBj
YXNlIEN1cnNvcjo6U291dGhQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRv
cHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fU0lERSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpTb3V0
aEVhc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19j
dXJzb3JfbmV3KEdES19CT1RUT01fUklHSFRfQ09STkVSKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoV2Vz
dFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXcoR0RLX0JPVFRPTV9MRUZUX0NPUk5FUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEN1cnNvcjo6V2VzdFJlc2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ3Vyc29yOjpOb3J0aFNvdXRoUmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfVEVFKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ3Vyc29yOjpFYXN0V2VzdFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6V2VzdFBh
bm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9u
ZXcoR0RLX0xFRlRfU0lERSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9y
dGhFYXN0U291dGhXZXN0UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVh
c3RSZXNpemU6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXcoR0RLX1NJWklORykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Q29s
dW1uUmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJz
b3JfbmV3KEdES19TQl9IX0RPVUJMRV9BUlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEN1cnNvcjo6Um93UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVm
KGdka19jdXJzb3JfbmV3KEdES19TQl9WX0RPVUJMRV9BUlJPVykpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxUZXh0OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yVmVydGljYWxUZXh0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNlbGw6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1BMVVMpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
Y3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yQ29udGV4dE1lbnUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEN1cnNvcjo6QWxpYXM6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBj
cmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JBbGlhcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ3Vyc29yOjpQcm9ncmVzczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0
ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclByb2dyZXNzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDdXJzb3I6Ok5vRHJvcDoKLSAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKLSAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvck5vRHJv
cCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDb3B5OgotICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yQ29weSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb25lOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yTm9uZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ3Vyc29yOjpab29tSW46Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBj
cmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3Jab29tSW4pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEN1cnNvcjo6Wm9vbU91dDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0
ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclpvb21PdXQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEN1cnNvcjo6R3JhYjoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVk
Q3Vyc29yKEN1c3RvbUN1cnNvckdyYWIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNv
cjo6R3JhYmJpbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNv
cihDdXN0b21DdXJzb3JHcmFiYmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29y
OjpDdXN0b206Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVDdXN0b21DdXJzb3Io
bV9pbWFnZS5nZXQoKSwgbV9ob3RTcG90KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1D
dXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV90eXBlKG90aGVyLm1f
dHlwZSkKLSAgICAsIG1faW1hZ2Uob3RoZXIubV9pbWFnZSkKLSAgICAsIG1faG90U3BvdChvdGhl
ci5tX2hvdFNwb3QpCi0gICAgLCBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1DdXJz
b3IpCi17Ci19Ci0KLUN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhl
cikKLXsKLSAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgbV9pbWFnZSA9IG90aGVyLm1f
aW1hZ2U7Ci0gICAgbV9ob3RTcG90ID0gb3RoZXIubV9ob3RTcG90OwotICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
Q3Vyc29yOjp+Q3Vyc29yKCkKLXsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1
cnNvckd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njg5MTliYTMzNWEyYWU1
NGYyOGE0NjE5MDU4M2IzYTRiYTI0NjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaAor
KysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJM
T0NLICoqKioqCi0gKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKLSAqCi0gKiBU
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSAqIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5z
ZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1p
dGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vuc2UuCi0gKgotICogVGhlIE9yaWdpbmFsIENvZGUg
aXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhl
IE9yaWdpbmFsIENvZGUgaXMKLSAqIFRpbSBDb3BwZXJmaWVsZC4KLSAqIFBvcnRpb25zIGNyZWF0
ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEKLSAqIHRo
ZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb250cmli
dXRvcihzKToKLSAqICAgVGltIENvcHBlcmZpZWxkIDx0aW1lY29wQG5ldHdvcmsuZW1haWwubmUu
anA+Ci0gKiAgIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqCi0g
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZgotICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwK
LSAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh
cmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0gKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhl
IHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0bwotICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKLSAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQg
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZQotICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBv
bmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KLSAqCi0gKiAqKioqKiBFTkQgTElD
RU5TRSBCTE9DSyAqKioqKiAqLwotCi0jaWZuZGVmIEN1cnNvckd0a19oCi0jZGVmaW5lIEN1cnNv
ckd0a19oCi0KLSNpbmNsdWRlICJDdXJzb3IuaCIKLQotLyoKLSBUaGVzZSBjdXJzb3JzIGFyZSBj
b3BpZWQgZnJvbSBNb3ppbGxhIGNvZGU6Ci0gIGh0dHA6Ly9seHIubW96aWxsYS5vcmcvbW96aWxs
YTEuOC9zb3VyY2Uvd2lkZ2V0L3NyYy9ndGsyL25zR3RrQ3Vyc29ycy5oCi0qLwotCi0vKiBNT1pf
Q1VSU09SX1ZFUlRJQ0FMX1RFWFQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel92
ZXJ0aWNhbF90ZXh0X2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwg
MHg0MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwKLSAgMHgwNiwgMHg2MCwg
MHgwMCwgMHgwMCwgMHhmYywgMHgzZiwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MCwgMHgwMCwgMHgw
MCwKLSAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh
ciBtb3pfdmVydGljYWxfdGV4dF9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwNywgMHhlMCwgMHgwMCwg
MHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwKLSAg
MHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhm
ZiwgMHgwMCwgMHgwMCwKLSAgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgw
MCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09S
X0NPTlRFWFRfTUVOVSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X21lbnVfYml0
c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFj
LCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAw
LCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGZkLCAweDAwLCAw
eDAwLAotICAweGZjLCAweGZmLCAweDAwLCAweDAwLCAweDdjLCAweDg0LCAweDAwLCAweDAwLCAw
eDZjLCAweGZjLCAweDAwLCAweDAwLAotICAweGM0LCAweDg0LCAweDAwLCAweDAwLCAweGMwLCAw
eGZjLCAweDAwLCAweDAwLCAweDgwLCAweDg1LCAweDAwLCAweDAwLAotICAweDgwLCAweGZkLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X21hc2tf
Yml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAw
eDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAw
eDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAw
eDAwLCAweDAwLCAweDAwLCAweGZlLCAweGZkLCAweDAwLCAweDAwLCAweGZlLCAweGZmLCAweDAx
LCAweDAwLAotICAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAw
LCAweGZlLCAweGZlLCAweDAxLCAweDAwLAotICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0
LCAweGZmLCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAweDAxLCAweDAwLAotICAweGMwLCAweGZm
LCAweDAxLCAweDAwLCAweDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfQ09QWSAqLwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgbW96X2NvcHlfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBj
LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAw
eDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAwLAotICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAw
eDdjLCAweDMwLCAweDAwLCAweDAwLCAweDZjLCAweDMwLCAweDAwLCAweDAwLAotICAweGM0LCAw
eGZjLCAweDAwLCAweDAwLCAweGMwLCAweGZjLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAw
LCAweDAwLAotICAweDgwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel9jb3B5X21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAw
LCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAw
LCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAweDAwLAotICAweGZlLCAweDM3LCAweDAwLCAweDAw
LCAweGZlLCAweDdiLCAweDAwLCAweDAwLCAweGZlLCAweGZjLCAweDAwLCAweDAwLAotICAweGVl
LCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAw
eDAwLCAweDAwLAotICAweGMwLCAweDdiLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1Jf
QUxJQVMgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9hbGlhc19iaXRzW10gPSB7
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4N2MsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCi0g
IDB4ZmMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4
ZTAsIDB4MDAsIDB4MDAsCi0gIDB4YzQsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YjAsIDB4
MDAsIDB4MDAsIDB4ODAsIDB4MTksIDB4MDAsIDB4MDAsCi0gIDB4ODAsIDB4MTksIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2FsaWFzX21hc2tfYml0c1td
ID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAw
eDBlLCAweDAwLCAweDAwLCAweDAwLAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAw
eDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAw
eDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAweDAw
LAotICAweGZlLCAweGY3LCAweDAwLCAweDAwLCAweGZlLCAweGZiLCAweDAxLCAweDAwLCAweGZl
LCAweGYwLCAweDAxLCAweDAwLAotICAweGVlLCAweGY5LCAweDAxLCAweDAwLCAweGU0LCAweGY5
LCAweDAxLCAweDAwLCAweGMwLCAweGJmLCAweDAwLCAweDAwLAotICAweGMwLCAweDNmLCAweDAw
LCAweDAwLCAweDgwLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfWk9PTV9JTiAqLwotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIgbW96X3pvb21faW5fYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAwLCAweDAw
LCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAotICAweDYy
LCAweDA0LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAw
eDAwLCAweDAwLAotICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAw
eDAwLCAweDYyLCAweDA0LCAweDAwLCAweDAwLAotICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAw
eDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel96b29tX2luX21hc2tfYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAw
LCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAot
ICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAw
eDBmLCAweDAwLCAweDAwLAotICAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAw
eDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAw
eDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJT
T1JfWk9PTV9PVVQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9i
aXRzW10gPSB7Ci0gIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDAsIDB4
MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4
MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsCi0gIDB4ZjksIDB4
MDksIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAs
IDB4MDAsCi0gIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGYsIDB4MDAsIDB4MDAs
IDB4ZjAsIDB4MWMsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4NzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4NDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0
X21hc2tfYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAw
eDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAw
eDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLAotICAw
eGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAweDA3
LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAw
LCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAweDAwLCAweDM4LCAweDAwLCAweDAw
LCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfTk9UX0FMTE9XRUQgKi8KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9iaXRzW10gPSB7Ci0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2Ys
IDB4MDAsIDB4MDAsCi0gIDB4ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4YzAsIDB4MDEs
IDB4MDAsIDB4N2MsIDB4ODAsIDB4MDMsIDB4MDAsCi0gIDB4ZWMsIDB4MDAsIDB4MDMsIDB4MDAs
IDB4Y2UsIDB4MDEsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MDMsIDB4MDYsIDB4MDAsCi0gIDB4MDYs
IDB4MDcsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MGUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MWMsIDB4
MDYsIDB4MDAsCi0gIDB4MGUsIDB4MzgsIDB4MDcsIDB4MDAsIDB4MGMsIDB4NzAsIDB4MDMsIDB4
MDAsIDB4MWMsIDB4ZTAsIDB4MDMsIDB4MDAsCi0gIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4
ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCi0gIDB4ODAsIDB4
MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X25vdF9hbGxvd2VkX21hc2tfYml0c1td
ID0gewotICAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLCAw
eGYwLCAweGZmLCAweDAwLCAweDAwLAotICAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGZjLCAw
eGYwLCAweDAzLCAweDAwLCAweGZlLCAweGMwLCAweDA3LCAweDAwLAotICAweGZlLCAweDgxLCAw
eDA3LCAweDAwLCAweGZmLCAweDgzLCAweDBmLCAweDAwLCAweGNmLCAweDA3LCAweDBmLCAweDAw
LAotICAweDhmLCAweDBmLCAweDBmLCAweDAwLCAweDBmLCAweDFmLCAweDBmLCAweDAwLCAweDBm
LCAweDNlLCAweDBmLCAweDAwLAotICAweDFmLCAweGZjLCAweDBmLCAweDAwLCAweDFlLCAweGY4
LCAweDA3LCAweDAwLCAweDNlLCAweGYwLCAweDA3LCAweDAwLAotICAweGZjLCAweGYwLCAweDAz
LCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDAwLAot
ICAweGUwLCAweDdmLCAweDAwLCAweDAwLCAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfU1BJTk5JTkcgKi8KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel9zcGlubmluZ19iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4
MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAs
IDB4MDAsIDB4MDAsCi0gIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCi0gIDB4ZmMsIDB4M2IsIDB4MDAsIDB4MDAs
IDB4N2MsIDB4MzgsIDB4MDAsIDB4MDAsIDB4NmMsIDB4NTQsIDB4MDAsIDB4MDAsCi0gIDB4YzQs
IDB4ZGMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzksIDB4
MDAsIDB4MDAsCi0gIDB4ODAsIDB4MzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgbW96X3NwaW5uaW5nX21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAw
LAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdl
LCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAx
LCAweDAwLCAweDAwLCAweGZlLCAweDNiLCAweDAwLCAweDAwLAotICAweGZlLCAweDdmLCAweDAw
LCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweGZlLCAweGZlLCAweDAwLCAweDAwLAot
ICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAw
eDdmLCAweDAwLCAweDAwLAotICAweGMwLCAweDdmLCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9D
VVJTT1JfTk9ORSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X25vbmVfYml0c1td
ID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX21hc2tfYml0
c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfSEFORF9HUkFCICovCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBtb3pfaGFuZF9ncmFiX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwK
LSAgMHg2MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMCwgMHgwMCwgMHg5MCwg
MHg0OSwgMHgwMSwgMHgwMCwKLSAgMHgyMCwgMHhjOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0OSwg
MHgwMiwgMHgwMCwgMHg1OCwgMHg0MCwgMHgwMiwgMHgwMCwKLSAgMHg2NCwgMHgwMCwgMHgwMiwg
MHgwMCwgMHg0NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKLSAg
MHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4
MCwgMHgwMCwgMHgwMCwKLSAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgw
MCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfaGFuZF9ncmFiX21hc2tfYml0c1tdID0gewotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDYwLCAweDNmLCAweDAw
LCAweDAwLAotICAweGYwLCAweDdmLCAweDAwLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAw
LCAweGY4LCAweGZmLCAweDAzLCAweDAwLAotICAweGYwLCAweGZmLCAweDA3LCAweDAwLCAweGY4
LCAweGZmLCAweDA3LCAweDAwLCAweGZjLCAweGZmLCAweDA3LCAweDAwLAotICAweGZlLCAweGZm
LCAweDA3LCAweDAwLCAweGZlLCAweGZmLCAweDAzLCAweDAwLCAweGZjLCAweGZmLCAweDAzLCAw
eDAwLAotICAweGY4LCAweGZmLCAweDAzLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAw
eGYwLCAweGZmLCAweDAxLCAweDAwLAotICAweGUwLCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAw
eGZmLCAweDAwLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8q
IE1PWl9DVVJTT1JfSEFORF9HUkFCQklORyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
bW96X2hhbmRfZ3JhYmJpbmdfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweGMwLCAweDM2LCAweDAwLCAweDAwLCAweDIwLCAweGM5LCAweDAwLCAweDAw
LCAweDIwLCAweDQwLCAweDAxLCAweDAwLAotICAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDYw
LCAweDAwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAxLCAweDAwLAotICAweDEwLCAweDAw
LCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAw
eDAwLAotICAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAw
eDgwLCAweDQwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCAgdW5zaWdu
ZWQgY2hhciBtb3pfaGFuZF9ncmFiYmluZ19tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhj
MCwgMHgzNiwgMHgwMCwgMHgwMCwKLSAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhm
ZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhlMCwgMHhmZiwgMHgw
MywgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwK
LSAgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwg
MHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwg
MHgwMCwgMHgwMCwgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1lbnVtIEN1
c3RvbUN1cnNvclR5cGUgewotICAgIEN1c3RvbUN1cnNvckNvcHkgPSAwLAotICAgIEN1c3RvbUN1
cnNvckFsaWFzLAotICAgIEN1c3RvbUN1cnNvckNvbnRleHRNZW51LAotICAgIEN1c3RvbUN1cnNv
clpvb21JbiwKLSAgICBDdXN0b21DdXJzb3Jab29tT3V0LAotICAgIEN1c3RvbUN1cnNvclZlcnRp
Y2FsVGV4dCwKLSAgICBDdXN0b21DdXJzb3JOb0Ryb3AsCi0gICAgQ3VzdG9tQ3Vyc29yUHJvZ3Jl
c3MsCi0gICAgQ3VzdG9tQ3Vyc29yTm9uZSwKLSAgICBDdXN0b21DdXJzb3JHcmFiLAotICAgIEN1
c3RvbUN1cnNvckdyYWJiaW5nLAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IGNo
YXIqIG5hbWU7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogYml0czsKLSAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBtYXNrX2JpdHM7Ci0gICAgaW50IGhvdF94OwotICAgIGludCBob3RfeTsKLX0g
Q3VzdG9tQ3Vyc29yOwotCi0vLyBjcmVhdGUgY3VzdG9tIHBpeG1hcCBjdXJzb3IgZnJvbSBjdXJz
b3JzIGluIG5zR1RLQ3Vyc29yRGF0YS5oCi1zdGF0aWMgY29uc3QgQ3VzdG9tQ3Vyc29yIEN1c3Rv
bUN1cnNvcnNbXSA9IHsKLSAgICB7ICJjb3B5IiwgbW96X2NvcHlfYml0cywgbW96X2NvcHlfbWFz
a19iaXRzLCAyLCAyIH0sCi0gICAgeyAiYWxpYXMiLCBtb3pfYWxpYXNfYml0cywgbW96X2FsaWFz
X21hc2tfYml0cywgMiwgMiB9LAotICAgIHsgImNvbnRleHQtbWVudSIsIG1vel9tZW51X2JpdHMs
IG1vel9tZW51X21hc2tfYml0cywgMiwgMiB9LAotICAgIHsgInpvb20taW4iLCBtb3pfem9vbV9p
bl9iaXRzLCBtb3pfem9vbV9pbl9tYXNrX2JpdHMsIDYsIDYgfSwKLSAgICB7ICJ6b29tLW91dCIs
IG1vel96b29tX291dF9iaXRzLCBtb3pfem9vbV9vdXRfbWFza19iaXRzLCA2LCA2IH0sCi0gICAg
eyAidmVydGljYWwtdGV4dCIsIG1vel92ZXJ0aWNhbF90ZXh0X2JpdHMsIG1vel92ZXJ0aWNhbF90
ZXh0X21hc2tfYml0cywgOCwgNCB9LAotICAgIHsgImRuZC1uby1kcm9wIiwgbW96X25vdF9hbGxv
d2VkX2JpdHMsIG1vel9ub3RfYWxsb3dlZF9tYXNrX2JpdHMsIDksICA5IH0sCi0gICAgeyAibGVm
dF9wdHJfd2F0Y2giLCBtb3pfc3Bpbm5pbmdfYml0cywgbW96X3NwaW5uaW5nX21hc2tfYml0cywg
MiwgIDJ9LAotICAgIHsgIm5vbmUiLCBtb3pfbm9uZV9iaXRzLCBtb3pfbm9uZV9tYXNrX2JpdHMs
IDAsIDAgfSwKLSAgICB7ICJncmFiIiwgbW96X2hhbmRfZ3JhYl9iaXRzLCBtb3pfaGFuZF9ncmFi
X21hc2tfYml0cywgMTAsIDEwIH0sCi0gICAgeyAiZ3JhYmJpbmciLCBtb3pfaGFuZF9ncmFiYmlu
Z19iaXRzLCBtb3pfaGFuZF9ncmFiYmluZ19tYXNrX2JpdHMsIDEwLCAxMCB9Ci19OwotCi0jZW5k
aWYgLy8gQ3Vyc29yR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2Jq
ZWN0R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmYzY2ZTAxNWU1MDIy
Njc4OGMyMTQ3NjhhMTViMjkxMzY4NDNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgTWFydGluIFJvYmluc29uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotCi0jaW5j
bHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VX
aXRoU3BhY2UoU3RyaW5nJiBzdHIpCi17Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIE5vbkJyZWFr
aW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOwotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNo
YXJhY3RlciA9ICcgJzsKLSAgICBzdHIucmVwbGFjZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVy
LCBTcGFjZUNoYXJhY3Rlcik7Ci19Ci0KLVN0cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29u
c3QKLXsKLSAgICBpZiAobV9yYW5nZSkKLSAgICAgICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsK
LSAgICByZXR1cm4gbV90ZXh0OwotfQotCi1TdHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9yYW5nZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCht
X3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5v
bkxvY2FsVVJMcyk7Ci0gICAgcmV0dXJuIG1fbWFya3VwOwotfQotCi12b2lkIERhdGFPYmplY3RH
dGs6OnNldFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0KQotewotICAgIG1fcmFuZ2UgPSAwOwot
ICAgIG1fdGV4dCA9IG5ld1RleHQ7Ci0gICAgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3Bh
Y2UobV90ZXh0KTsKLX0KLQotdm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRNYXJrdXAoY29uc3QgU3Ry
aW5nJiBuZXdNYXJrdXApCi17Ci0gICAgbV9yYW5nZSA9IDA7Ci0gICAgbV9tYXJrdXAgPSBuZXdN
YXJrdXA7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJJTGlzdChjb25zdCBTdHJpbmcm
IHVyaUxpc3RTdHJpbmcpCi17Ci0gICAgbV91cmlMaXN0ID0gdXJpTGlzdFN0cmluZzsKLQotICAg
IC8vIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZyb206IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5jcHAuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29k
ZSBjcm9zcy1wbGF0Zm9ybSBldmVudHVhbGx5LgotCi0gICAgLy8gTGluZSBzZXBhcmF0b3IgaXMg
XHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eQotICAgIC8vIHJl
YXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCi0gICAgVmVjdG9yPFN0cmluZz4gdXJp
TGlzdDsKLSAgICB1cmlMaXN0U3RyaW5nLnNwbGl0KCdcbicsIHVyaUxpc3QpOwotCi0gICAgLy8g
UHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1
cmwgbWVtYmVyLgotICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1YnNlcXVl
bnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKLSAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJp
bmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAvLyAiVGhl
IERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4gQWxzbyBleHRyYWN0IGFs
bCBmaWxlbmFtZXMKLSAgICAvLyBmcm9tIHRoZSBVUkkgbGlzdC4KLSAgICBib29sIHNldFVSTCA9
IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkg
ewotICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0W2ldOwotICAgICAgICBsaW5lID0gbGlu
ZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIEtVUkwgdXJsID0gS1VSTChLVVJMKCksIGxpbmUpOwotICAg
ICAgICBpZiAodXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgaWYgKCFzZXRVUkwpIHsKLSAg
ICAgICAgICAgICAgICBtX3VybCA9IHVybDsKLSAgICAgICAgICAgICAgICBzZXRVUkwgPSB0cnVl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX2ZpbGVuYW1lX2Zyb21fdXJpKGxp
bmUudXRmOCgpLmRhdGEoKSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAo
IWVycm9yICYmIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIG1fZmlsZW5hbWVzLmFwcGVuZChT
dHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdldCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBsYWJlbCkKLXsKLSAgICBtX3VybCA9IHVybDsKLSAgICBtX3VyaUxpc3QgPSB1cmw7Ci0gICAg
c2V0VGV4dCh1cmwuc3RyaW5nKCkpOwotCi0gICAgU3RyaW5nIGFjdHVhbExhYmVsKGxhYmVsKTsK
LSAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQotICAgICAgICBhY3R1YWxMYWJlbCA9IHVy
bDsKLQotICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwotICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhy
ZWY9XCIiKTsKLSAgICBtYXJrdXAuYXBwZW5kKHVybC5zdHJpbmcoKSk7Ci0gICAgbWFya3VwLmFw
cGVuZCgiXCI+Iik7Ci0gICAgR093blB0cjxnY2hhcj4gZXNjYXBlZChnX21hcmt1cF9lc2NhcGVf
dGV4dChhY3R1YWxMYWJlbC51dGY4KCkuZGF0YSgpLCAtMSkpOwotICAgIG1hcmt1cC5hcHBlbmQo
U3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7Ci0gICAgbWFya3VwLmFwcGVuZCgiPC9h
PiIpOwotICAgIHNldE1hcmt1cChtYXJrdXAudG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0YU9i
amVjdEd0azo6Y2xlYXJUZXh0KCkKLXsKLSAgICBtX3JhbmdlID0gMDsKLSAgICBtX3RleHQgPSAi
IjsKLX0KLQotdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCi17Ci0gICAgbV9yYW5n
ZSA9IDA7Ci0gICAgbV9tYXJrdXAgPSAiIjsKLX0KLQotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVy
bExhYmVsKCkgY29uc3QKLXsKLSAgICBpZiAoaGFzVGV4dCgpKQotICAgICAgICByZXR1cm4gdGV4
dCgpOwotCi0gICAgaWYgKGhhc1VSTCgpKQotICAgICAgICByZXR1cm4gdXJsKCk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJBbGxFeGNlcHRG
aWxlbmFtZXMoKQotewotICAgIG1fdGV4dCA9ICIiOwotICAgIG1fbWFya3VwID0gIiI7Ci0gICAg
bV91cmlMaXN0ID0gIiI7Ci0gICAgbV91cmwgPSBLVVJMKCk7Ci0gICAgbV9pbWFnZSA9IDA7Ci0g
ICAgbV9yYW5nZSA9IDA7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJBbGwoKQotewot
ICAgIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Ci0gICAgbV9maWxlbmFtZXMuY2xlYXIoKTsK
LX0KLQotRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBi
b2FyZCogY2xpcGJvYXJkKQotewotICAgIHN0YXRpYyBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJl
ZlB0cjxEYXRhT2JqZWN0R3RrPiA+IG9iamVjdE1hcDsKLQotICAgIGlmICghb2JqZWN0TWFwLmNv
bnRhaW5zKGNsaXBib2FyZCkpIHsKLSAgICAgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFP
YmplY3QgPSBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKTsKLSAgICAgICAgb2JqZWN0TWFwLnNldChj
bGlwYm9hcmQsIGRhdGFPYmplY3QpOwotICAgICAgICByZXR1cm4gZGF0YU9iamVjdC5nZXQoKTsK
LSAgICB9Ci0KLSAgICBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3Rr
PiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5maW5kKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyODFiMWUxNzhi
Zjk0N2RhMmMwODBkMzgzZWFhNTA2YjZhNjM5ODAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmpl
Y3RHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIE1hcnRpbiBSb2JpbnNvbgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2lmbmRlZiBEYXRhT2JqZWN0R3RrX2gKLSNkZWZpbmUgRGF0YU9iamVjdEd0a19oCi0KLSNp
bmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YU9iamVj
dEd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFPYmplY3RHdGs+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2JqZWN0R3RrKCkpOwotICAgIH0KLQotICAgIGNvbnN0
IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB1
cmlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV91cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2Rr
UGl4YnVmKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldFJhbmdlKFBhc3NSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlKSB7IG1fcmFuZ2UgPSBuZXdSYW5n
ZTsgfQotICAgIHZvaWQgc2V0SW1hZ2UoR2RrUGl4YnVmKiBuZXdJbWFnZSkgeyBtX2ltYWdlID0g
bmV3SW1hZ2U7IH0KLSAgICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7
Ci0gICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV90ZXh0Lmlz
RW1wdHkoKTsgfQotICAgIGJvb2wgaGFzTWFya3VwKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8
fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUklMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc1VSTCgpIGNvbnN0IHsg
cmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYgbV91cmwuaXNWYWxpZCgpOyB9Ci0gICAgYm9vbCBo
YXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9Ci0g
ICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KLSAgICB2b2lkIGNs
ZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0gIiI7IH0KLSAgICB2b2lkIGNsZWFyVVJMKCkgeyBt
X3VybCA9IEtVUkwoKTsgfQotICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IDA7IH0K
LQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldE1hcmt1cChjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldFVSSUxpc3QoY29uc3QgU3RyaW5nJik7Ci0gICAgU3Ry
aW5nIHVybExhYmVsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVz
KCk7Ci0gICAgdm9pZCBjbGVhckFsbCgpOwotICAgIHZvaWQgY2xlYXJUZXh0KCk7Ci0gICAgdm9p
ZCBjbGVhck1hcmt1cCgpOwotCi0gICAgc3RhdGljIERhdGFPYmplY3RHdGsqIGZvckNsaXBib2Fy
ZChHdGtDbGlwYm9hcmQqKTsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV90ZXh0OwotICAgIFN0
cmluZyBtX21hcmt1cDsKLSAgICBLVVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IG1f
aW1hZ2U7Ci0gICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwotfTsKLQotfQotCi0jZW5kaWYgLy8g
RGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0RhdGFHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhNDc0OWQzM2NiYjI5OWM4ZGQ2
NmUzNWMwMDkxYWIyOGYxMGFlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgotCi0jaW5j
bHVkZSAiQ2xpcGJvYXJkLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29s
IERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNGaWxlbmFtZXMoKTsKLX0KLQotdW5zaWdu
ZWQgRHJhZ0RhdGE6Om51bWJlck9mRmlsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRm
b3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpLnNpemUoKTsKLX0KLQotdm9pZCBEcmFnRGF0YTo6YXNG
aWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKLXsKLSAgICByZXN1bHQgPSBt
X3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250
YWluc1BsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+
aGFzVGV4dCgpOwotfQotCi1TdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0KCk7Ci19Ci0KLUNvbG9y
IERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoKTsKLX0KLQot
Ym9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvbnRhaW5zUGxhaW5UZXh0KCkgfHwgY29udGFpbnNVUkwoMCkgfHwgbV9wbGF0Zm9y
bURyYWdEYXRhLT5oYXNNYXJrdXAoKSB8fCBjb250YWluc0NvbG9yKCkgfHwgY29udGFpbnNGaWxl
cygpOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSogZnJhbWUsIEZpbGVu
YW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKLXsKLSAgICByZXR1cm4g
IWFzVVJMKGZyYW1lLCBmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOwotfQotCi1TdHJpbmcgRHJh
Z0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9s
aWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRh
LT5oYXNVUkwoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmIChmaWxlbmFtZVBv
bGljeSAhPSBDb252ZXJ0RmlsZW5hbWVzKSB7Ci0gICAgICAgIEtVUkwgdXJsKEtVUkwoKSwgbV9w
bGF0Zm9ybURyYWdEYXRhLT51cmwoKSk7Ci0gICAgICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdXJsKG1f
cGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOwotICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRpdGxl
ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxMYWJlbCgpOwotICAgIHJldHVybiB1cmw7Ci19Ci0K
LQotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFt
ZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sLCBib29sJikgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzTWFya3VwKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwg
bV9wbGF0Zm9ybURyYWdEYXRhLT5tYXJrdXAoKSwgIiIpOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDgxODc3MWM4Mjk5ZDAxMTU0OTVlZmNjYzUwMTEyYWNkODRlZDc2MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRHJhZ0ljb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkRyYWdJY29uLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMu
aCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdF
dmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24q
IGljb24pCi17Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fp
cm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpKTsKLSAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkp
OwotICAgIHJldHVybiBUUlVFOwotfQotI2Vsc2UKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldp
bmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJ
Y29uKiBpY29uKQotewotICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250
ZXh0LCAwKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGljb24tPmRyYXcoY29udGV4dCk7
Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQotRHJh
Z0ljb246OkRyYWdJY29uKCkKLSAgICA6IGlzQ29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBv
c2l0ZWQoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSkKLSAgICAsIG1fd2luZG93KDApCi17Ci0g
ICAgaWYgKCFpc0NvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2luZG93ID0g
Z3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxM
QkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZWxzZQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldp
bmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgc3Ry
YXRlZ3kgb3JpZ2luYWxseSBjb21lcyBmcm9tIENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIv
Z3RrL3RhYl9jb250ZW50c19kcmFnX3NvdXJjZS5jYwotICAgIEdka1NjcmVlbiogc2NyZWVuID0g
Z3RrX3dpZGdldF9nZXRfc2NyZWVuKG1fd2luZG93KTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIEdka0NvbG9ybWFwKiByZ2JhID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChz
Y3JlZW4pOwotICAgIGlmIChyZ2JhKQotICAgICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcCht
X3dpbmRvdywgcmdiYSk7Ci0jZWxzZQotICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVl
bl9nZXRfcmdiYV92aXN1YWwoc2NyZWVuKTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgdmlz
dWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pOwotICAgIGd0a193aWRn
ZXRfc2V0X3Zpc3VhbChtX3dpbmRvdywgdmlzdWFsKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJ
T05fMgotfQotCi1EcmFnSWNvbjo6fkRyYWdJY29uKCkKLXsKLSAgICBpZiAobV93aW5kb3cpCi0g
ICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgRHJhZ0ljb246
OmRyYXcoY2Fpcm9fdCogY29udGV4dCkKLXsKLSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwg
MCwgMCwKLSAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgo
bV9pbWFnZS5nZXQoKSksCi0gICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChtX2ltYWdlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRl
eHQsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNvbnRleHQsIG1faW1hZ2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7
Ci19Ci0KLXZvaWQgRHJhZ0ljb246OnNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCi17
Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZVNp
emUgPSBJbnRTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKSk7Ci0gICAgaWYgKGlzQ29tcG9zaXRlZCkg
ewotICAgICAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFn
ZVNpemUud2lkdGgoKSwgbV9pbWFnZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBtX3BpeGJ1ZiA9IGFkb3B0R1Jl
ZihjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGltYWdlKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBJ
bnRQb2ludCBob3RzcG90KG1faW1hZ2VTaXplKTsKLSAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41
KTsKLSAgICB1c2VGb3JEcmFnKGNvbnRleHQsIGhvdHNwb3QpOwotfQotCi12b2lkIERyYWdJY29u
Ojp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90
c3BvdCkKLXsKLSAgICBpZiAoaXNDb21wb3NpdGVkKSB7Ci0gICAgICAgIGd0a19kcmFnX3NldF9p
Y29uX3dpZGdldChjb250ZXh0LCBtX3dpbmRvdywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0
a19kcmFnX3NldF9pY29uX3BpeGJ1Zihjb250ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54
KCksIGhvdHNwb3QueSgpKTsKLSNlbHNlCi0gICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShj
b250ZXh0LCBtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmYmU0MzVkY2JkYTIwZTJlZGQ3YmZjMjZmN2IwZmYwOWEyOGI4ODU0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIERyYWdJY29uX2gKLSNkZWZpbmUgRHJhZ0ljb25faAotCi0jaW5jbHVkZSAiSW50UG9pbnQu
aCIKLSNpbmNsdWRlIDxSZWZQdHJDYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEcmFnSWNvbiB7Ci1wdWJsaWM6
Ci0gICAgRHJhZ0ljb24oKTsKLSAgICB2aXJ0dWFsIH5EcmFnSWNvbigpOwotCi0gICAgdm9pZCBk
cmF3KGNhaXJvX3QqKTsKLSAgICB2b2lkIHNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCopOwotICAg
IHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgdXNlRm9yRHJhZyhH
ZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBvaW50JiBob3RzcG90KTsKLQotcHJpdmF0ZToKLSAg
ICBib29sIGlzQ29tcG9zaXRlZDsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93OwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2U7Ci0gICAgSW50U2l6ZSBtX2ltYWdlU2l6ZTsKLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBtX3BpeGJ1ZjsK
LSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYgLy8gRHJhZ0ljb25faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggM2I3YzRjMTQyZTFjZWYzOWQyNGYzYmVlOWYzNGNiMmVhZDJiZDdlOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAK
LS8qCi0gKiAyMDEwIElnYWxpYSBTLkwKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWly
by5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2Up
Ci17Ci0gICAgaWYgKGltYWdlKQotICAgICAgICByZXR1cm4gSW50U2l6ZShjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChp
bWFnZSkpOwotCi0gICAgcmV0dXJuIEludFNpemUoMCwgMCk7Ci19Ci0KLXZvaWQgZGVsZXRlRHJh
Z0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UpCi0gICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7Ci19Ci0KLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJ
bWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBuZXdXaWR0aCA9IHNjYWxlLndpZHRo
KCkgKiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSk7Ci0gICAgaW50IG5ld0hl
aWdodCA9IHNjYWxlLmhlaWdodCgpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGlt
YWdlKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHNjYWxlZFN1cmZhY2UgPSBjYWlyb19zdXJmYWNl
X2NyZWF0ZV9zaW1pbGFyKGltYWdlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBuZXdXaWR0
aCwgbmV3SGVpZ2h0KTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYo
Y2Fpcm9fY3JlYXRlKHNjYWxlZFN1cmZhY2UpKTsKLSAgICBjYWlyb19zY2FsZShjb250ZXh0Lmdl
dCgpLCBzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fcGF0dGVybl9z
ZXRfZXh0ZW5kKGNhaXJvX2dldF9zb3VyY2UoY29udGV4dC5nZXQoKSksIENBSVJPX0VYVEVORF9Q
QUQpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcihjYWlyb19nZXRfc291cmNlKGNvbnRl
eHQuZ2V0KCkpLCBDQUlST19GSUxURVJfQkVTVCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNv
bnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNvbnRleHQuZ2V0KCksIGltYWdlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChj
b250ZXh0LmdldCgpKTsKLQotICAgIGRlbGV0ZURyYWdJbWFnZShpbWFnZSk7Ci0gICAgcmV0dXJu
IHNjYWxlZFN1cmZhY2U7Ci19Ci0KLURyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJh
Y3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCBmcmFjdGlvbikKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZ2RrX3NjcmVlbl9pc19jb21wb3Np
dGVkKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQot
ICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdl
KSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9S
X0RFU1RfSU4pOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LmdldCgpLCAwLCAw
LCAwLCBmcmFjdGlvbik7Ci0gICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7Ci0gICAgcmV0
dXJuIGltYWdlOwotfQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKElt
YWdlKiBpbWFnZSwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtKQotewotICAgIE5hdGl2ZUlt
YWdlQ2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgcmV0dXJuIG5hdGl2ZUltYWdlID8gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0
aXZlSW1hZ2UtPnN1cmZhY2UoKSkgOiAwOwotfQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKLXsKLSAgICByZXR1cm4gMDsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzU0ZDU1ZTc2OTE1MWVkYzFkNDExNTZhNDMyY2E3NTk3ODE0
YmFmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFcnJvcnNHdGsuaCIKLQotI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJQcmludENvbnRleHQu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4t
bGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JDYW5jZWxsZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiTG9hZCByZXF1
ZXN0IGNhbmNlbGxlZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVy
cm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxv
d2VkIHRvIHVzZSByZXN0cmljdGVkIG5ldHdvcmsgcG9ydCIpKTsKLX0KLQotUmVzb3VyY2VFcnJv
ciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewot
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNh
bm5vdFNob3dVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJp
bmcoKSwgXygiVVJMIGNhbm5vdCBiZSBzaG93biIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBpbnRl
cnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5
RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIkZyYW1lIGxvYWQgd2FzIGludGVy
cnVwdGVkIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVu
dCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKLX0KLQot
UmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3
b3JrLCBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOwot
fQotCi1SZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5QbHVnaW4sIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIF8oIlBsdWdpbiB3aWxsIGhhbmRsZSBs
b2FkIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJl
c291cmNlRXJyb3ImIG5ldHdvcmtFcnJvcikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihl
cnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yTmV0d29yaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXR3b3JrRXJyb3IuZmFpbGluZ1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxp
emVkRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRC
eVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2Vs
bGVkQnlVc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmlu
ZygpLCBfKCJVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxvYWQiKSk7Ci19Ci0KLVJlc291cmNlRXJy
b3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yRGVzdGluYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIGVycm9yTWVzc2Fn
ZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgcHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHBy
aW50Q29udGV4dCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBy
aW50LCBQcmludEVycm9yR2VuZXJhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwgZXJyb3JNZXNzYWdlKTsK
LX0KLQotUmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRl
eHQqIHByaW50Q29udGV4dCkKLXsKLSAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwotICAg
IHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JQcmludGVy
Tm90Rm91bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1
bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCksIF8oIlByaW50ZXIgbm90IGZvdW5kIikpOwotfQot
Ci1SZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4
dCogcHJpbnRDb250ZXh0KQotewotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9
IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAg
cmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckludmFsaWRQ
YWdlUmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1
bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCksIF8oIkludmFsaWQgcGFnZSByYW5nZSIpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0Vycm9yc0d0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9y
c0d0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODJjYzk5ZmJmMjkyZTRjYmNk
NzNkNmVmMDljZmM0YzJjOTQ4NmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaAorKysg
L2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBFcnJvcnNHdGtfaAotI2RlZmluZSBFcnJvcnNHdGtfaAotCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUHJpbnRDb250ZXh0OwotY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlUmVx
dWVzdDsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9y
RG9tYWluTmV0d29yayA9ICJXZWJLaXROZXR3b3JrRXJyb3IiOwotY29uc3QgY2hhciogY29uc3Qg
ZXJyb3JEb21haW5Qb2xpY3kgPSAiV2ViS2l0UG9saWN5RXJyb3IiOwotY29uc3QgY2hhciogY29u
c3QgZXJyb3JEb21haW5QbHVnaW4gPSAiV2ViS2l0UGx1Z2luRXJyb3IiOwotY29uc3QgY2hhciog
Y29uc3QgZXJyb3JEb21haW5Eb3dubG9hZCA9ICJXZWJLaXREb3dubG9hZEVycm9yIjsKLWNvbnN0
IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluUHJpbnQgPSAiV2ViS2l0UHJpbnRFcnJvciI7Ci0KLWVu
dW0gTmV0d29ya0Vycm9yIHsKLSAgICBOZXR3b3JrRXJyb3JGYWlsZWQgPSAzOTksCi0gICAgTmV0
d29ya0Vycm9yVHJhbnNwb3J0ID0gMzAwLAotICAgIE5ldHdvcmtFcnJvclVua25vd25Qcm90b2Nv
bCA9IDMwMSwKLSAgICBOZXR3b3JrRXJyb3JDYW5jZWxsZWQgPSAzMDIsCi0gICAgTmV0d29ya0Vy
cm9yRmlsZURvZXNOb3RFeGlzdCA9IDMwMwotfTsKLQotLy8gU3luYydkIHdpdGggTWFjJ3MgV2Vi
S2l0IEVycm9ycy4KLWVudW0gUG9saWN5RXJyb3IgewotICAgIFBvbGljeUVycm9yRmFpbGVkID0g
MTk5LAotICAgIFBvbGljeUVycm9yQ2Fubm90U2hvd01pbWVUeXBlID0gMTAwLAotICAgIFBvbGlj
eUVycm9yQ2Fubm90U2hvd1VSTCA9IDEwMSwKLSAgICBQb2xpY3lFcnJvckZyYW1lTG9hZEludGVy
cnVwdGVkQnlQb2xpY3lDaGFuZ2UgPSAxMDIsCi0gICAgUG9saWN5RXJyb3JDYW5ub3RVc2VSZXN0
cmljdGVkUG9ydCA9IDEwMwotfTsKLQotZW51bSBQbHVnaW5FcnJvciB7Ci0gICAgUGx1Z2luRXJy
b3JGYWlsZWQgPSAyOTksCi0gICAgUGx1Z2luRXJyb3JDYW5ub3RGaW5kUGx1Z2luID0gMjAwLAot
ICAgIFBsdWdpbkVycm9yQ2Fubm90TG9hZFBsdWdpbiA9IDIwMSwKLSAgICBQbHVnaW5FcnJvckph
dmFVbmF2YWlsYWJsZSA9IDIwMiwKLSAgICBQbHVnaW5FcnJvckNvbm5lY3Rpb25DYW5jZWxsZWQg
PSAyMDMsCi0gICAgUGx1Z2luRXJyb3JXaWxsSGFuZGxlTG9hZCA9IDIwNAotfTsKLQotZW51bSBE
b3dubG9hZEVycm9yIHsKLSAgICBEb3dubG9hZEVycm9yTmV0d29yayA9IDQ5OSwKLSAgICBEb3du
bG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyID0gNDAwLAotICAgIERvd25sb2FkRXJyb3JEZXN0aW5h
dGlvbiA9IDQwMQotfTsKLQotZW51bSBQcmludEVycm9yIHsKLSAgICBQcmludEVycm9yR2VuZXJh
bCA9IDU5OSwKLSAgICBQcmludEVycm9yUHJpbnRlck5vdEZvdW5kID0gNTAwLAotICAgIFByaW50
RXJyb3JJbnZhbGlkUGFnZVJhbmdlID0gNTAxCi19OwotCi1SZXNvdXJjZUVycm9yIGNhbmNlbGxl
ZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotUmVzb3VyY2VFcnJvciBibG9ja2VkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRG
b3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291cmNlRXJy
b3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVz
b3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OwotUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgZG93bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVz
b3VyY2VFcnJvciYpOwotUmVzb3VyY2VFcnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9y
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5h
dGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSk7Ci1SZXNvdXJjZUVycm9yIHByaW50RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotUmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRF
cnJvcihjb25zdCBQcmludENvbnRleHQqKTsKLVJlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5n
ZVRvUHJpbnQoY29uc3QgUHJpbnRDb250ZXh0Kik7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0ZWY3YjVjYjc3Yjk0NGZiZTA1ODE4NGY4NjE0NDA1MmFlNmE1MjJhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRMb29wLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKLXsKLSAgICBnX21h
aW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3Rl
bUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMjA3Mjk2YzZhNmNiNDY2MjhmNzcwOTYz
NGUyNGU3MmY4ODdjOWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCi0KLSNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKLSNpbmNsdWRl
ICJVVUlELmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xp
YlV0aWxpdGllcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vKiBPbiBsaW51
eCBmaWxlIG5hbWVzIGFyZSBqdXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fu
bm90IGJlIGVuY29kZWQgaW4gYW55IHdheQotICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMg
bWVhbiB0aGF0IHdlIGNhbm5vdCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3Ry
aW5nCi0gKiBidXQgd2UgaGF2ZSB0byBlc2NhcGUgaXQuCi0gKiBPbiBXaW5kb3dzIHRoZSBHTGli
IGZpbGUgbmFtZSBlbmNvZGluZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRo
aXMgY2FzZS4gKi8KLVN0cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1l
KQotewotICAgIGlmICghZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotI2lm
IE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOwotI2Vs
c2UKLSAgICBHT3duUHRyPGdjaGFyPiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmco
ZmlsZW5hbWUsICIvOiIsIGZhbHNlKSk7Ci0gICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7
Ci0jZW5kaWYKLX0KLQotQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3Ry
aW5nJiBwYXRoKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHBhdGgudXRmOCgpOwot
I2Vsc2UKLSAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmco
cGF0aC51dGY4KCkuZGF0YSgpLCAwKSk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOwotI2Vu
ZGlmCi19Ci0KLS8vIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBi
ZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCi1TdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0
IFN0cmluZyYgc3RyaW5nKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHN0cmluZzsK
LSNlbHNlCi0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihz
dHJpbmcpOwotICAgIEdPd25QdHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZp
bGVuYW1lLmRhdGEoKSwgMCwgMCwgMCwgMCkpOwotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAg
cmV0dXJuIHN0cmluZzsKLQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0
KCkpOwotI2VuZGlmCi19Ci0KLWJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkK
LSAgICAgICAgcmVzdWx0ID0gZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVT
VF9FWElTVFMpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIENTdHJp
bmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAo
IWZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXN1bHQgPSBnX3JlbW92ZShmaWxlbmFtZS5k
YXRhKCkpID09IDA7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGRlbGV0ZUVtcHR5
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNl
OwotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
Ci0KLSAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXN1bHQgPSBnX3JtZGly
KGZpbGVuYW1lLmRhdGEoKSkgPT0gMDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wg
Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCi17
Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
LSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEdTdGF0QnVmIHN0YXRSZXN1bHQ7Ci0gICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUu
ZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0gICAgaWYgKHJlc3VsdCAhPSAwKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdGltZV90JiBtb2RpZmllZFRpbWUpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7Ci0g
ICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtb2RpZmll
ZFRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOwotICAgIHJldHVybiB0cnVlOwotCi19Ci0KLWJv
b2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKLXsKLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOwotICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgc3RydWN0IHN0YXQgc3RhdFJlc3VsdDsKLSAgICBnaW50IHJlc3VsdCA9IGdfc3Rh
dChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVzdWx0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJl
c3VsdC5zdF9tdGltZTsKLSAgICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7
Ci0gICAgbWV0YWRhdGEudHlwZSA9IFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVN
ZXRhZGF0YTo6VHlwZURpcmVjdG9yeSA6IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7Ci0gICAgcmV0
dXJuIHRydWU7Ci0KLX0KLQotU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQotewotICAgIGlmIChwYXRoLmVu
ZHNXaXRoKEdfRElSX1NFUEFSQVRPUl9TKSkKLSAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25l
bnQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsg
Y29tcG9uZW50OwotfQotCi1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBh
dGgpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGdpbnQgcmVzdWx0ID0gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgp
LCBTX0lSV1hVKTsKLQotICAgIHJldHVybiByZXN1bHQgPT0gMDsKLX0KLQotU3RyaW5nIGhvbWVE
aXJlY3RvcnlQYXRoKCkKLXsKLSAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21l
X2RpcigpKTsKLX0KLQotU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhO
YW1lKQotewotICAgIGlmIChwYXRoTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYXRo
TmFtZTsKLQotICAgIENTdHJpbmcgdG1wRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aE5hbWUpOwotICAgIEdPd25QdHI8Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFz
ZW5hbWUodG1wRmlsZW5hbWUuZGF0YSgpKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
YmFzZU5hbWUuZ2V0KCkpOwotfQotCi1DU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgp
Ci17Ci0gICAgQ1N0cmluZyBwYXRoID0gZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7Ci0gICAg
aWYgKCFwYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAgIC8vIElmIHRo
ZSBhYm92ZSBmYWlscywgY2hlY2sgdGhlIFBBVEggZW52IHZhcmlhYmxlLgotICAgIEdPd25QdHI8
Y2hhcj4gY3VycmVudEV4ZVBhdGgoZ19maW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1l
KCkpKTsKLSAgICBpZiAoIWN1cnJlbnRFeGVQYXRoLmdldCgpKQotICAgICAgICByZXR1cm4gQ1N0
cmluZygpOwotCi0gICAgR093blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShj
dXJyZW50RXhlUGF0aC5nZXQoKSkpOwotICAgIHJldHVybiBkaXJuYW1lLmdldCgpOwotfQotCi1D
U3RyaW5nIHNoYXJlZFJlc291cmNlc1BhdGgoKQotewotICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hl
ZFBhdGg7Ci0gICAgaWYgKCFjYWNoZWRQYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gY2Fj
aGVkUGF0aDsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgSE1PRFVMRSBobW9kdWxlID0gMDsKLSAg
ICBHZXRNb2R1bGVIYW5kbGVFeEEoR0VUX01PRFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJF
U1MsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVs
ZSk7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBydW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2Vf
aW5zdGFsbGF0aW9uX2RpcmVjdG9yeV9vZl9tb2R1bGUoaG1vZHVsZSkpOwotICAgIEdPd25QdHI8
Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRfZmlsZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJl
IiwgIndlYmtpdGd0ay0iV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOwotI2Vs
c2UKLSAgICBHT3duUHRyPGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElS
LCAid2Via2l0Z3RrLSJXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7Ci0jZW5k
aWYKLQotICAgIGNhY2hlZFBhdGggPSBkYXRhUGF0aC5nZXQoKTsKLSAgICByZXR1cm4gY2FjaGVk
UGF0aDsKLX0KLQotdWludDY0X3QgZ2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIq
IHBhdGgpCi17Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3
X2Zvcl9wYXRoKHBhdGgpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9w
dEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRU
UklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwgMCkpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWlu
dDY0KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Ci19
Ci0KLVN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICAvKiBO
byBudWxsIGNoZWNraW5nIG5lZWRlZCAqLwotICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3Bh
dGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOwot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpcm5hbWUuZ2V0KCkpOwotfQotCi1WZWN0b3I8
U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBm
aWx0ZXIpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKLQotICAgIENTdHJpbmcgZmls
ZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgR0RpciogZGlyID0g
Z19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCksIDAsIDApOwotICAgIGlmICghZGlyKQotICAgICAg
ICByZXR1cm4gZW50cmllczsKLQotICAgIEdQYXR0ZXJuU3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5f
c3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRhdGEoKSk7Ci0gICAgd2hpbGUgKGNvbnN0IGNoYXIq
IG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkgewotICAgICAgICBpZiAoIWdfcGF0dGVybl9t
YXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCks
IG5hbWUsIE5VTEwpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhl
bnRyeS5nZXQoKSkpOwotICAgIH0KLSAgICBnX3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKLSAg
ICBnX2Rpcl9jbG9zZShkaXIpOwotCi0gICAgcmV0dXJuIGVudHJpZXM7Ci19Ci0KLVN0cmluZyBv
cGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUpCi17Ci0gICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRm
KCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR093blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9m
aWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRo
LmdldCgpKSk7Ci0KLSAgICBoYW5kbGUgPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdl
dCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOwotICAgIGlmICghaXNIYW5kbGVWYWxpZCho
YW5kbGUpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgodGVtcFBhdGguZ2V0KCkpOwotfQotCi1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKLXsKLSAgICBDU3RyaW5nIGZz
UmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmIChmc1JlcC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7Ci0KLSAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAu
ZGF0YSgpKSk7Ci0gICAgR0ZpbGVJT1N0cmVhbSogaW9TdHJlYW0gPSAwOwotICAgIGlmIChtb2Rl
ID09IE9wZW5Gb3JSZWFkKQotICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0
ZShmaWxlLmdldCgpLCAwLCAwKTsKLSAgICBlbHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkg
ewotICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmls
ZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKLSAg
ICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAs
IDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVf
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGlvU3RyZWFtOwotfQotCi12b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUmIGhhbmRsZSkKLXsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwg
MCwgMCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaGFuZGxlKTsKLSAgICBoYW5kbGUgPSBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOwotfQotCi1sb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQot
ewotICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAgc3dpdGNoIChvcmln
aW4pIHsKLSAgICBjYXNlIFNlZWtGcm9tQmVnaW5uaW5nOgotICAgICAgICBzZWVrVHlwZSA9IEdf
U0VFS19TRVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgotICAg
ICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2Vl
a0Zyb21FbmQ6Ci0gICAgICAgIHNlZWtUeXBlID0gR19TRUVLX0VORDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0g
ICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRf
c3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQsIHNlZWtUeXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBn
X3NlZWthYmxlX3RlbGwoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdf
SU9fU1RSRUFNKGhhbmRsZSkpKSk7Ci19Ci0KLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGdzaXpl
IGJ5dGVzV3JpdHRlbjsKLSAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFt
X2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKLSAgICBy
ZXR1cm4gYnl0ZXNXcml0dGVuOwotfQotCi1pbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgR093blB0cjxHRXJy
b3I+IGVycm9yOwotICAgIGRvIHsKLSAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRf
c3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5k
bGUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoYnl0ZXNSZWFkID49
IDApCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOwotICAgIH0gd2hpbGUgKGVycm9yICYm
IGVycm9yLT5jb2RlID09IEdfRklMRV9FUlJPUl9JTlRSKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0K
LWJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKLXsKLSNpZiBPUyhXSU5E
T1dTKQotICAgIHJldHVybiA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7Ci0jZWxzZQotICAgIHJldHVy
biBnX21vZHVsZV9jbG9zZShtb2R1bGUpOwotI2VuZGlmCi19Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDliNjkzZjQxNWU5NzgyNDdmZDNjOTM4NGQ0ZWQyNTFlZTA0OWI4ZjAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dPd25QdHJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2
b2lkIGZyZWVPd25lZEdQdHI8R2RrRXZlbnQ+KEdka0V2ZW50KiBwdHIpCi17Ci0gICAgaWYgKHB0
cikKLSAgICAgICAgZ2RrX2V2ZW50X2ZyZWUocHRyKTsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBm
cmVlT3duZWRHUHRyPEd0a0ljb25JbmZvPihHdGtJY29uSW5mbyogaW5mbykKLXsKLSAgICBpZiAo
aW5mbykKLSAgICAgICAgZ3RrX2ljb25faW5mb19mcmVlKGluZm8pOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmQ1ZTgzNzFlZDM2OGY0MTVkODk3NDMyNGVlNjJkNzFmZWI3YTJkNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR093blB0ckd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBH
T3duUHRyR3RrX2gKLSNkZWZpbmUgR093blB0ckd0a19oCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVP
d25lZEdQdHI8R2RrRXZlbnQ+KEdka0V2ZW50Kik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25l
ZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25JbmZvKik7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZhNTA2ZGY5MDA3ZDI0Y2MwNzY3NzY4ZGVmZDEwNTY2MmZjMzliM2QuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqICBDb3B5cmln
aHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotCi0jZGVm
aW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEKLSNkZWZpbmUgU0VDUkVUX0FQSV9TVUJKRUNUX1RP
X0NIQU5HRSAxCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRl
IDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQotewotICAgIGlm
IChwdHIpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9yZWYocHRyKTsKLSAgICByZXR1cm4gcHRy
OwotfQotCi10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCi17
Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKHB0cik7Ci19Ci0K
LXRlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiByZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCi17Ci0g
ICAgaWYgKHB0cikKLSAgICAgICAgc2VjcmV0X3ZhbHVlX3JlZihwdHIpOwotICAgIHJldHVybiBw
dHI7Ci19Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCi17
Ci0gICAgaWYgKHB0cikKLSAgICAgICAgc2VjcmV0X3ZhbHVlX3VucmVmKHB0cik7Ci19Ci0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotdGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdk
a0N1cnNvciogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIGdka19jdXJzb3JfcmVmKHB0
cik7Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2Rr
Q3Vyc29yKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihw
dHIpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0
ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTkyODY0YTkyMjlkYWI4ODNiZWZh
NTYyYjIzNWFkOGFjMzk2ZGM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLgotICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBHUmVmUHRyR3RrX2gKLSNkZWZpbmUgR1JlZlB0ckd0a19oCi0KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9TZWNyZXRWYWx1
ZSBTZWNyZXRWYWx1ZTsKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlIDw+IEd0a1Rhcmdl
dExpc3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Ci0KLXRlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiBy
ZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpOwotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU2Vj
cmV0VmFsdWUqIHB0cik7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotdGVtcGxhdGUgPD4g
R2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyKEdka0N1cnNvciogcHRyKTsKLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFmOTYwOWRkMDg3MTJkMTI4NTIzNjRiZjIwZTZkYmMzZjRhZmZhZjMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtA
Z21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0gKLSAqIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2Ft
ZXBhZHMuaCIKLQotI2lmIEVOQUJMRShHQU1FUEFEKQotCi0jaW5jbHVkZSAiR2FtZXBhZERldmlj
ZUxpbnV4LmgiCi0jaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRzdHJlYW0uaD4KLSNpbmNsdWRlIDxndWRldi9ndWRl
di5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2Ft
ZXBhZERldmljZUd0ayA6IHB1YmxpYyBHYW1lcGFkRGV2aWNlTGludXggewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPEdhbWVwYWREZXZpY2VHdGs+IGNyZWF0ZShTdHJpbmcgZGV2aWNl
RmlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2FtZXBhZERldmljZUd0
ayhkZXZpY2VGaWxlKSk7Ci0gICAgfQotICAgIH5HYW1lcGFkRGV2aWNlR3RrKCk7Ci0KLXByaXZh
dGU6Ci0gICAgR2FtZXBhZERldmljZUd0ayhTdHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICBzdGF0
aWMgZ2Jvb2xlYW4gcmVhZENhbGxiYWNrKEdPYmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRl
ciBkYXRhKTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKLSAgICBH
UmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwotfTsKLQotR2FtZXBhZERldmljZUd0azo6R2FtZXBh
ZERldmljZUd0ayhTdHJpbmcgZGV2aWNlRmlsZSkKLSAgICA6IEdhbWVwYWREZXZpY2VMaW51eChk
ZXZpY2VGaWxlKQotewotICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yID09IC0xKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJl
YW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZBTFNFKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdS
ZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVU
X1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSwgMCkpOwotICAgIGdfc291cmNlX3NldF9jYWxs
YmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENh
bGxiYWNrKSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAw
KTsKLX0KLQotR2FtZXBhZERldmljZUd0azo6fkdhbWVwYWREZXZpY2VHdGsoKQotewotICAgIGlm
IChtX3NvdXJjZSkKLSAgICAgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Ci19
Ci0KLWdib29sZWFuIEdhbWVwYWREZXZpY2VHdGs6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xs
YWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1l
cGFkRGV2aWNlID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkRGV2aWNlR3RrKj4oZGF0YSk7Ci0g
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKLQot
ICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxhYmxlX2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5n
KEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKHBvbGxhYmxlU3RyZWFtKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnQsIHNpemVv
ZihldmVudCksIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0KLSAgICAvLyBGSVhNRTogUHJvcGVybHkg
bG9nIHRoZSBlcnJvci4KLSAgICAvLyBJbiB0aGUgY2FzZSBvZiBHX0lPX0VSUk9SX1dPVUxEX0JM
T0NLIGVycm9yIHJldHVybiBUUlVFIHRvIHdhaXQgdW50aWwKLSAgICAvLyB0aGUgc291cmNlIGJl
Y29tZXMgcmVhZGFibGUgYWdhaW4gYW5kIEZBTFNFIG90aGVyd2lzZS4KLSAgICBpZiAoZXJyb3Ip
Ci0gICAgICAgIHJldHVybiBnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1Is
IEdfSU9fRVJST1JfV09VTERfQkxPQ0spOwotCi0gICAgQVNTRVJUX1VOVVNFRChsZW4sIGxlbiA9
PSBzaXplb2YoZXZlbnQpKTsKLSAgICBnYW1lcGFkRGV2aWNlLT51cGRhdGVGb3JFdmVudChldmVu
dCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLWNsYXNzIEdhbWVwYWRzR3RrIHsKLXB1YmxpYzoK
LSAgICBHYW1lcGFkc0d0ayh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdm9pZCByZWdpc3RlckRl
dmljZShTdHJpbmcgZGV2aWNlRmlsZSk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKFN0cmlu
ZyBkZXZpY2VGaWxlKTsKLQotICAgIHZvaWQgdXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3Qq
KTsKLQotcHJpdmF0ZToKLSAgICB+R2FtZXBhZHNHdGsoKTsKLSAgICBzdGF0aWMgdm9pZCBvblVF
dmVudENhbGxiYWNrKEdVZGV2Q2xpZW50KiwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBn
cG9pbnRlciBkYXRhKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2
RGV2aWNlKik7Ci0KLSAgICBWZWN0b3I8T3duUHRyPEdhbWVwYWREZXZpY2VHdGs+ID4gbV9zbG90
czsKLSAgICBIYXNoTWFwPFN0cmluZywgR2FtZXBhZERldmljZUd0ayo+IG1fZGV2aWNlTWFwOwot
Ci0gICAgR1JlZlB0cjxHVWRldkNsaWVudD4gbV9ndWRldkNsaWVudDsKLX07Ci0KLUdhbWVwYWRz
R3RrOjpHYW1lcGFkc0d0ayh1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBtX3Nsb3RzKGxlbmd0aCkK
LXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vic3lzdGVtc1tdID0geyAiaW5wdXQiLCAwIH07
Ci0gICAgbV9ndWRldkNsaWVudCA9IGFkb3B0R1JlZihnX3VkZXZfY2xpZW50X25ldyhzdWJzeXN0
ZW1zKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2d1ZGV2Q2xpZW50LmdldCgpLCAidWV2ZW50
IiwgR19DQUxMQkFDSyhvblVFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBHT3duUHRyPEdM
aXN0PiBkZXZpY2VzTGlzdChnX3VkZXZfY2xpZW50X3F1ZXJ5X2J5X3N1YnN5c3RlbShtX2d1ZGV2
Q2xpZW50LmdldCgpLCBzdWJzeXN0ZW1zWzBdKSk7Ci0gICAgZm9yIChHTGlzdCogbGlzdEl0ZW0g
PSBkZXZpY2VzTGlzdC5nZXQoKTsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlz
dEl0ZW0pKSB7Ci0gICAgICAgIEdVZGV2RGV2aWNlKiBkZXZpY2UgPSBHX1VERVZfREVWSUNFKGxp
c3RJdGVtLT5kYXRhKTsKLSAgICAgICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21V
VEY4KGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOwotICAgICAgICBpZiAo
aXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCi0gICAgICAgICAgICByZWdpc3RlckRldmljZShkZXZp
Y2VGaWxlKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZGV2aWNlKTsKLSAgICB9Ci19Ci0KLUdh
bWVwYWRzR3RrOjp+R2FtZXBhZHNHdGsoKQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX2d1ZGV2Q2xpZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCAwLCAwLCB0aGlzKTsKLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2Uo
U3RyaW5nIGRldmljZUZpbGUpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJHYW1lcGFkc0d0azo6cmVn
aXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBBU1NFUlQo
IW1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKLQotICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG1fc2xvdHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGlm
ICghbV9zbG90c1tpbmRleF0pIHsKLSAgICAgICAgICAgIG1fc2xvdHNbaW5kZXhdID0gR2FtZXBh
ZERldmljZUd0azo6Y3JlYXRlKGRldmljZUZpbGUpOwotICAgICAgICAgICAgbV9kZXZpY2VNYXAu
YWRkKGRldmljZUZpbGUsIG1fc2xvdHNbaW5kZXhdLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2
aWNlKFN0cmluZyBkZXZpY2VGaWxlKQotewotICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6
OnVucmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBB
U1NFUlQobV9kZXZpY2VNYXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOwotCi0gICAgR2FtZXBhZERl
dmljZUd0ayogZ2FtZXBhZERldmljZSA9IG1fZGV2aWNlTWFwLnRha2UoZGV2aWNlRmlsZSk7Ci0g
ICAgc2l6ZV90IGluZGV4ID0gbV9zbG90cy5maW5kKGdhbWVwYWREZXZpY2UpOwotICAgIEFTU0VS
VChpbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBtX3Nsb3RzW2luZGV4XS5jbGVhcigpOwotfQot
Ci12b2lkIEdhbWVwYWRzR3RrOjp1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykK
LXsKLSAgICBBU1NFUlQobV9zbG90cy5zaXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2xvdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
aWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKLSAgICAg
ICAgICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgp
OwotICAgICAgICAgICAgUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwot
ICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQotICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1l
cGFkOjpjcmVhdGUoKTsKLQotICAgICAgICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7Ci0gICAgICAg
ICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKLSAgICAgICAgICAgIGdhbWVw
YWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNlLT50aW1lc3RhbXAoKSk7Ci0gICAgICAgICAgICBn
YW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5h
eGVzRGF0YSgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+
YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOwotCi0gICAgICAg
ICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
aW50by0+c2V0KGksIDApOwotICAgIH0KLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6b25VRXZlbnRD
YWxsYmFjayhHVWRldkNsaWVudCogdWRldkNsaWVudCwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZp
Y2UqIGRldmljZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoIWlzR2FtZXBhZERldmljZShk
ZXZpY2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHYW1lcGFkc0d0ayogZ2FtZXBhZHNHdGsg
PSByZWludGVycHJldF9jYXN0PEdhbWVwYWRzR3RrKj4oZGF0YSk7Ci0gICAgU3RyaW5nIGRldmlj
ZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRl
dmljZSkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoYWN0aW9uLCAiYWRkIikpCi0gICAgICAgIGdh
bWVwYWRzR3RrLT5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKLSAgICBlbHNlIGlmICghZ19z
dHJjbXAwKGFjdGlvbiwgInJlbW92ZSIpKQotICAgICAgICBnYW1lcGFkc0d0ay0+dW5yZWdpc3Rl
ckRldmljZShkZXZpY2VGaWxlKTsKLX0KLQotZ2Jvb2xlYW4gR2FtZXBhZHNHdGs6OmlzR2FtZXBh
ZERldmljZShHVWRldkRldmljZSogZGV2aWNlKQotewotICAgIGNvbnN0IGdjaGFyKiBkZXZpY2VG
aWxlID0gZ191ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKTsKLSAgICBjb25zdCBn
Y2hhciogc3lzZnNQYXRoID0gZ191ZGV2X2RldmljZV9nZXRfc3lzZnNfcGF0aChkZXZpY2UpOwot
ICAgIGlmICghZGV2aWNlRmlsZSB8fCAhc3lzZnNQYXRoKQotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0KLSAgICBpZiAoIWdfdWRldl9kZXZpY2VfaGFzX3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVU
IikgfHwgIWdfdWRldl9kZXZpY2VfaGFzX3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUX0pPWVNU
SUNLIikpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIHJldHVybiBnX3N0cl9oYXNfcHJl
Zml4KGRldmljZUZpbGUsICIvZGV2L2lucHV0L2pzIik7Ci19Ci0KLXZvaWQgc2FtcGxlR2FtZXBh
ZHMoR2FtZXBhZExpc3QqIGludG8pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHYW1lcGFk
c0d0aywgZ2FtZXBhZHNHdGssIChpbnRvLT5sZW5ndGgoKSkpOwotICAgIGdhbWVwYWRzR3RrLnVw
ZGF0ZUdhbWVwYWRMaXN0KGludG8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjNGEyZWFiMTI5NjMzNGQ0YTAwNjA1YTQyMWIwMmZlYWU0ODJkNzc4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaCIKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxn
dGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ0xheW91dENvbHVtblNwYWNpbmcgPSAxMjsK
LXN0YXRpYyBjb25zdCBpbnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2Owotc3RhdGljIGNvbnN0IGlu
dCBnQnV0dG9uU3BhY2luZyA9IDU7Ci0KLUd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
LCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKLSAgICA6IG1fZGlhbG9nKDApCi0gICAgLCBt
X2xvZ2luRW50cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJl
ckNoZWNrQnV0dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi0gICAgLCBtX2Ny
ZWRlbnRpYWxTdG9yYWdlTW9kZShtb2RlKQotewotfQotCi1HdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBtb2RlKQotICAgIDogbV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKLSAgICAsIG1fbG9naW5F
bnRyeSgwKQotICAgICwgbV9wYXNzd29yZEVudHJ5KDApCi0gICAgLCBtX3JlbWVtYmVyQ2hlY2tC
dXR0b24oMCkKLSAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKLSAgICAsIG1fY3JlZGVudGlh
bFN0b3JhZ2VNb2RlKG1vZGUpCi17Ci0gICAgR3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19k
aWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShHVEtfRElBTE9HKG1fZGlhbG9nKSk7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhtX2RpYWxv
ZykpLCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goY29udGVudEFyZWEpLCAy
KTsgLyogMiAqIDUgKyAyID0gMTIgKi8KLQotICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJ
TkRPVyhtX2RpYWxvZyk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFM
U0UpOwotICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOwotICAgIGd0a193aW5k
b3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04p
OwotCi0gICAgaWYgKHBhcmVudFdpbmRvdykKLSAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNp
ZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRvdyk7Ci0KLSAgICBjcmVhdGVDb250ZW50c0luQ29u
dGFpbmVyKGNvbnRlbnRBcmVhKTsKLX0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0
aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKLXsK
LSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKLSAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJv
eCk7Ci0KLSAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7
Ci0gICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91
dENvbHVtblNwYWNpbmcpOwotICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJM
RSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKLQotICAgIEd0a1dpZGdldCogZmlyc3RDb2x1
bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICBpbnQgcm93
TnVtYmVyID0gMDsKLSAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKLSAgICAgICAgaWYg
KHJvd051bWJlcikKLSAgICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxl
KSwgcm93TnVtYmVyICsgMSwgMik7Ci0KLSAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5X
aWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgR3RrQXR0
YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4o
R1RLX0VYUEFORCB8IEdUS19GSUxMKTsKLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFC
TEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKLSAgICAgICAgICAgIDAsIHNlY29uZENvbHVt
bldpZGdldCA/IDEgOiAyLAotICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxLAot
ICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKLSAgICAgICAgICAgIDAs
IDApOwotCi0gICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCi0gICAgICAgICAgICBndGtf
dGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENvbHVtbldpZGdl
dCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsKLQotICAgICAgICBmaXJzdENvbHVt
bldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICByb3dO
dW1iZXIrKzsKLSAgICB9Ci0KLSAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKLQotICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOwotfQot
I2Vsc2UKLXN0YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJv
eCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0OwotICAgIHZhX3N0YXJ0KGFyZ3Vt
ZW50TGlzdCwgYm94KTsKLQotICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOwot
ICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJv
d1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwg
Z0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3NldF9jb2x1bW5faG9tb2dlbmVvdXMo
R1RLX0dSSUQoZ3JpZCksIFRSVUUpOwotCi0gICAgR3RrV2lkZ2V0KiBmaXJzdENvbHVtbldpZGdl
dCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgIGludCByb3dOdW1iZXIg
PSAwOwotICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgewotICAgICAgICBHdGtXaWRnZXQq
IHNlY29uZENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwot
ICAgICAgICBpbnQgZmlyc3RXaWRnZXRXaWR0aCA9IHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAy
OwotCi0gICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgZmlyc3RDb2x1bW5X
aWRnZXQsIDAsIHJvd051bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwgMSk7Ci0gICAgICAgIGd0a193
aWRnZXRfc2V0X2hleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOwotICAgICAgICBndGtf
d2lkZ2V0X3NldF92ZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLQotICAgICAgICBp
ZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RL
X0dSSUQoZ3JpZCksIHNlY29uZENvbHVtbldpZGdldCwgMSwgcm93TnVtYmVyLCAxLCAxKTsKLSAg
ICAgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVF
KTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0
LCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJn
KGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgICAgIHJvd051bWJlcisrOwotICAgIH0K
LQotICAgIHZhX2VuZChhcmd1bWVudExpc3QpOwotCi0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
R3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dMYWJlbChjb25zdCBjaGFyKiBsYWJlbFN0cmluZywgaW50
IGhvcml6b250YWxQYWRkaW5nID0gMCkKLXsKLSAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xh
YmVsX25ldyhsYWJlbFN0cmluZyk7Ci0gICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlT
QyhsYWJlbCksIDAsIDAuNSk7Ci0gICAgaWYgKGhvcml6b250YWxQYWRkaW5nKQotICAgICAgICBn
dGtfbWlzY19zZXRfcGFkZGluZyhHVEtfTUlTQyhsYWJlbCksIDAsIGhvcml6b250YWxQYWRkaW5n
KTsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0KLXN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxv
Z0VudHJ5KEd0a1dpZGdldCoqIG1lbWJlcikKLXsKLSAgICAqbWVtYmVyID0gZ3RrX2VudHJ5X25l
dygpOwotICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKCptZW1i
ZXIpLCBUUlVFKTsKLSAgICByZXR1cm4gKm1lbWJlcjsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5l
cikKLXsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogaEJveCA9IGd0
a19oYm94X25ldyhGQUxTRSwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotI2Vsc2UKLSAgICBHdGtX
aWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgZ0xh
eW91dENvbHVtblNwYWNpbmcpOwotI2VuZGlmCi0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVy
X3dpZHRoKEdUS19DT05UQUlORVIoaEJveCksIGdCdXR0b25TcGFjaW5nKTsKLSAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5lciksIGhCb3gpOwotCi0gICAgR3RrV2lk
Z2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVU
SEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKLSAgICBndGtfbWlzY19zZXRfYWxp
Z25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGhCb3gpLCBpY29uLCBGQUxTRSwgRkFMU0UsIDApOwotCi0gICAgR093blB0cjxjaGFy
PiBwcm9tcHQoZ19zdHJkdXBfcHJpbnRmKAotICAgICAgICBfKCJUaGUgc2l0ZSAlczolaSByZXF1
ZXN0cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCIpLAotICAgICAgICBtX2NoYWxsZW5nZS5wcm90
ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgbV9jaGFsbGVuZ2Uu
cHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKSk7Ci0KLSAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24g
PSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29y
ZCIpKTsKLSAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZ3RrX2Jpbl9nZXRf
Y2hpbGQoR1RLX0JJTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOwotICAgIGd0a193
aWRnZXRfc2V0X25vX3Nob3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgbV9jcmVkZW50aWFs
U3RvcmFnZU1vZGUgPT0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7Ci0KLQotICAgIC8vIFdl
IGFyZSBhZGRpbmcgdGhlIGJ1dHRvbiBib3ggaGVyZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5n
IHRoZSByZWFkeS1tYWRlIEd0a0RpYWxvZyBidXR0b25zLgotICAgIC8vIFRoaXMgaXMgc28gdGhh
dCB3ZSBjYW4gc2hhcmUgdGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3Qg
dXNlIEd0a0RpYWxvZy4KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCog
YnV0dG9uQm94ID0gZ3RrX2hidXR0b25fYm94X25ldygpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQq
IGJ1dHRvbkJveCA9IGd0a19idXR0b25fYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRB
TCk7Ci0jZW5kaWYKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwg
Z0J1dHRvblNwYWNpbmcpOwotICAgIGd0a19idXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRP
Tl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRPTkJPWF9FTkQpOwotCi0gICAgbV9va2F5QnV0dG9u
ID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOwotICAgIG1fY2FuY2Vs
QnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKLSAg
ICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX2NhbmNlbEJ1dHRvbiwg
RkFMU0UsIFRSVUUsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJv
eCksIG1fb2theUJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9va2F5QnV0dG9uLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NhbmNlbEJ1dHRvbiwgImNsaWNrZWQi
LCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOwotCi0gICAgU3RyaW5n
IHJlYWxtID0gbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKLSAgICBpZiAo
IXJlYWxtLmlzRW1wdHkoKSkgewotICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJv
eCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJv
d1NwYWNpbmcpLCBOVUxMLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiU2VydmVy
IG1lc3NhZ2U6IikpLCBjcmVhdGVEaWFsb2dMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKLSAg
ICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9n
RW50cnkoJm1fbG9naW5FbnRyeSksCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQ
YXNzd29yZDoiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAotICAgICAg
ICAgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uLCBOVUxMLAotICAgICAgICAgICAgYnV0dG9uQm94
LCBOVUxMLCBOVUxMKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhY2tUd29Db2x1bW5MYXlv
dXRJbkJveChoQm94LAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgp
LCBnTGF5b3V0Um93U3BhY2luZyksIE5VTEwsCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJl
bChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAotICAg
ICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dF
bnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKLSAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRv
biwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7Ci0gICAg
fQotCi0gICAgZ3RrX2VudHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50
cnkpLCBGQUxTRSk7Ci0gICAgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0
ZW50U3RvcmFnZSA9IG1fY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOwotICAgIGlmICgh
Y3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ3Rr
X2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJvbVBl
cnNpc3RlbnRTdG9yYWdlLnVzZXIoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ3RrX2VudHJ5
X3NldF90ZXh0KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNp
c3RlbnRTdG9yYWdlLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGd0a190b2dn
bGVfYnV0dG9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0
dG9uKSwgVFJVRSk7Ci0gICAgfQotfQotCi12b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpz
aG93KCkKLXsKLSAgICBndGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24sIFRS
VUUpOwotICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KG1fb2theUJ1dHRvbik7Ci0gICAgZ3Rr
X3dpZGdldF9ncmFiX2ZvY3VzKG1fbG9naW5FbnRyeSk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKG1fZGlhbG9nKTsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJv
eSgpCi17Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKLSAgICBkZWxldGUgdGhp
czsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgp
KQotICAgICAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJl
cXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpOwotICAgIGVsc2UK
LSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVk
ZW50aWFsKG1fY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6YnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nKQotewotICAgIENyZWRlbnRpYWwgY3JlZGVudGlh
bDsKLSAgICBpZiAoYnV0dG9uID09IGRpYWxvZy0+bV9va2F5QnV0dG9uKSB7Ci0gICAgICAgIGNv
bnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ct
Pm1fbG9naW5FbnRyeSkpOwotICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRy
eV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKLSAgICAgICAg
Ym9vbCByZW1lbWJlclBhc3N3b3JkID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtf
VE9HR0xFX0JVVFRPTihkaWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpOwotICAgICAgICBD
cmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2U7Ci0KLSAgICAgICAgaWYgKHJlbWVtYmVy
UGFzc3dvcmQgJiYgZGlhbG9nLT5tX2NyZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1BlcnNp
c3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lz
dGVuY2VQZXJtYW5lbnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBlcnNpc3RlbmNlID0g
Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjsKLQotICAgICAgICBjcmVkZW50aWFsID0g
Q3JlZGVudGlhbChTdHJpbmc6OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChw
YXNzd29yZCksIHBlcnNpc3RlbmNlKTsKLSAgICB9Ci0KLSAgICBkaWFsb2ctPmF1dGhlbnRpY2F0
ZShjcmVkZW50aWFsKTsKLSAgICBkaWFsb2ctPmRlc3Ryb3koKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc3Yzgx
YWRmZWZiZDE5MjY5NzU5YTk4NzE2NjFlZjQ4MTViYTM2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZ19oCi0jZGVmaW5lIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKLQot
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0
ay5oIgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NC
YXNlLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBlbnVt
IENyZWRlbnRpYWxTdG9yYWdlTW9kZSB7Ci0gICAgICAgIEFsbG93UGVyc2lzdGVudFN0b3JhZ2Us
IC8vIFRoZSB1c2VyIGlzIGFza2VkIHdoZXRoZXIgdG8gc3RvcmUgY3JlZGVudGlhbCBpbmZvcm1h
dGlvbi4KLSAgICAgICAgRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSAvLyBDcmVkZW50aWFsIGlu
Zm9ybWF0aW9uIGlzIG9ubHkga2VwdCBpbiB0aGUgc2Vzc2lvbi4KLSAgICB9OwotCi0gICAgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2coY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVk
ZW50aWFsU3RvcmFnZU1vZGUpOwotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRv
dyosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2Rl
KTsKLSAgICB2aXJ0dWFsIH5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpIHsgfQotICAgIHZvaWQg
c2hvdygpOwotICAgIHZvaWQgZGVzdHJveSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjcmVh
dGVDb250ZW50c0luQ29udGFpbmVyKEd0a1dpZGdldCogY29udGFpbmVyKTsKLSAgICB2aXJ0dWFs
IHZvaWQgYXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmKTsKLSAgICBHdGtXaWRnZXQqIG1f
ZGlhbG9nOwotICAgIEd0a1dpZGdldCogbV9sb2dpbkVudHJ5OwotICAgIEd0a1dpZGdldCogbV9w
YXNzd29yZEVudHJ5OwotICAgIEd0a1dpZGdldCogbV9yZW1lbWJlckNoZWNrQnV0dG9uOwotICAg
IEd0a1dpZGdldCogbV9va2F5QnV0dG9uOwotICAgIEd0a1dpZGdldCogbV9jYW5jZWxCdXR0b247
Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgYnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dp
ZGdldCosIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7Ci0gICAgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgbV9jaGFsbGVuZ2U7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1fY3JlZGVudGlh
bFN0b3JhZ2VNb2RlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
R3RrQXV0aGVudGljYXRpb25EaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrQ2xpY2tDb3VudGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNj
OGEzMmMwMjY1ZWQxMTVkOGQ3NjFlZDdhNGZmZDIxM2VhZGQzZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrQ2xpY2tDb3VudGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrQ2xpY2tD
b3VudGVyLmgiCi0KLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUd0a0NsaWNrQ291bnRlcjo6R3RrQ2xpY2tDb3Vu
dGVyKCkKLSAgICA6IG1fY3VycmVudENsaWNrQ291bnQoMCkKLSAgICAsIG1fcHJldmlvdXNDbGlj
a0J1dHRvbigwKQotICAgICwgbV9wcmV2aW91c0NsaWNrVGltZSgwKQotewotfQotCi12b2lkIEd0
a0NsaWNrQ291bnRlcjo6cmVzZXQoKQotewotICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAwOwot
ICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoKTsKLSAgICBtX3ByZXZpb3VzQ2xp
Y2tUaW1lID0gMDsKLSAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSAwOwotfQotCi1ib29sIEd0
a0NsaWNrQ291bnRlcjo6c2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KEdka0V2ZW50QnV0dG9uKiBi
dXR0b25FdmVudCkKLXsKLSAgICAvLyBGb3IgZG91YmxlIGFuZCB0cmlwbGUgY2xpY2tzIEdESyBz
ZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVudAotICAgIC8vIGFuZCBhIHNwZWNp
ZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3ZSBkZXRlY3QgYSBzcGVjaWFs
IHByZXNzCi0gICAgLy8gY29taW5nIHVwLCBpZ25vcmUgdGhpcyBldmVudCBhcyBpdCBjZXJ0YWlu
bHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3IgdHJpcGxlCi0gICAgLy8gY2xpY2suIFRoZSBjb25z
ZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdvIERPTSBidXR0b24gcHJlc3Mg
ZXZlbnRzCi0gICAgLy8gYXJlIGdlbmVyYXRlZC4KLSAgICBHT3duUHRyPEdka0V2ZW50PiBuZXh0
RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7Ci0gICAgaWYgKCFuZXh0RXZlbnQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18yQlVUVE9OX1BS
RVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGd1aW50MzIgZ2V0
RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBndWludDMyIHRpbWUgPSBnZGtfZXZl
bnRfZ2V0X3RpbWUoZXZlbnQpOwotICAgIGlmICh0aW1lKQotICAgICAgICByZXR1cm4gdGltZTsK
LQotICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXplcm8gdGltZSwgYnV0IGV2
ZW50cyBzeW50aGVzaXplZAotICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90IGFuZCB3ZSBtdXN0IGNh
bGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQotICAgIC8vIGlzIG5vdCBjYWxjdWxh
dGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aAotICAg
IC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBvbiBzeW50aGVzaXplZCBl
dmVudHMuCi0gICAgR1RpbWVWYWwgdGltZVZhbHVlOwotICAgIGdfZ2V0X2N1cnJlbnRfdGltZSgm
dGltZVZhbHVlKTsKLSAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMgKiAxMDAwKSArICh0aW1l
VmFsdWUudHZfdXNlYyAvIDEwMDApOwotfQotCi1pbnQgR3RrQ2xpY2tDb3VudGVyOjpjbGlja0Nv
dW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBi
dXR0b25FdmVudCkKLXsKLSAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7Ci0gICAg
Z2ludCBkb3VibGVDbGlja1RpbWUgPSA1OwotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0
a19zZXR0aW5nc19nZXRfZm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSk7
Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLAotICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJs
ZS1jbGljay1kaXN0YW5jZSIsICZkb3VibGVDbGlja0Rpc3RhbmNlLAotICAgICAgICAgICAgICAg
ICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwgJmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7Ci0KLSAg
ICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRvIHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJDb3JlIHdh
bnRzIHRvIGtub3cgYWJvdXQKLSAgICAvLyBxdWFkcnVwbGUgY2xpY2tzLCBxdWludHVwbGUgY2xp
Y2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0aGUKLSAgICAvLyBHREsgbG9n
aWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KLSAgICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSk7Ci0gICAgZ3VpbnQzMiBldmVudFRpbWUgPSBn
ZXRFdmVudFRpbWUoZXZlbnQpOwotCi0gICAgaWYgKChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRP
Tl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgfHwg
KChhYnMoYnV0dG9uRXZlbnQtPnggLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC54KCkpIDwgZG91Ymxl
Q2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAgICYmIChhYnMoYnV0dG9uRXZlbnQtPnkgLSBtX3By
ZXZpb3VzQ2xpY2tQb2ludC55KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAg
ICYmIChldmVudFRpbWUgLSBtX3ByZXZpb3VzQ2xpY2tUaW1lIDwgc3RhdGljX2Nhc3Q8Z3VpbnQ+
KGRvdWJsZUNsaWNrVGltZSkpCi0gICAgICAgICAgICAmJiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9
PSBtX3ByZXZpb3VzQ2xpY2tCdXR0b24pKSkKLSAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCsr
OwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCA9IDE7Ci0KLSAgICBnZG91
YmxlIHgsIHk7Ci0gICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7Ci0gICAg
bV9wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKLSAgICBtX3ByZXZpb3VzQ2xp
Y2tCdXR0b24gPSBidXR0b25FdmVudC0+YnV0dG9uOwotICAgIG1fcHJldmlvdXNDbGlja1RpbWUg
PSBldmVudFRpbWU7Ci0KLSAgICByZXR1cm4gbV9jdXJyZW50Q2xpY2tDb3VudDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0NsaWNrQ291bnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ns
aWNrQ291bnRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmNhMWRlYzkxODA3
OTRmMmY3NTE5YjhiYzUyYjY3OTRiMWY5N2NmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0Nv
dW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpZm5kZWYgR3RrQ2xpY2tDb3VudGVyX2gKLSNkZWZpbmUgR3RrQ2xpY2tDb3VudGVyX2gK
LQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0KLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRv
biBHZGtFdmVudEJ1dHRvbjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtDbGlj
a0NvdW50ZXIgewotcHVibGljOgotICAgIEd0a0NsaWNrQ291bnRlcigpOwotICAgIHZvaWQgcmVz
ZXQoKTsKLSAgICBib29sIHNob3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiop
OwotICAgIGludCBjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZl
bnRCdXR0b24qKTsKLQotcHJpdmF0ZToKLSAgICBpbnQgbV9jdXJyZW50Q2xpY2tDb3VudDsKLSAg
ICBJbnRQb2ludCBtX3ByZXZpb3VzQ2xpY2tQb2ludDsKLSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2
aW91c0NsaWNrQnV0dG9uOwotICAgIGludCBtX3ByZXZpb3VzQ2xpY2tUaW1lOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDE1N2E2MDdhMTg5YjU0Yjg2NGE1OThmZmI4NTg1M2E1OGQ3YjM2YjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkd0a0RyYWdBbmREcm9wSGVscGVyLmgiCi0KLSNpbmNsdWRlICJDbGlwYm9hcmRVdGls
aXRpZXNHdGsuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVs
cGVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
cnVjdCBEcm9wcGluZ0NvbnRleHQgewotICAgIERyb3BwaW5nQ29udGV4dChHZGtEcmFnQ29udGV4
dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotICAgICAgICA6IGdka0Nv
bnRleHQoZ2RrQ29udGV4dCkKLSAgICAgICAgLCBkYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmNy
ZWF0ZSgpKQotICAgICAgICAsIGxhc3RNb3Rpb25Qb3NpdGlvbihwb3NpdGlvbikKLSAgICAgICAg
LCBkcm9wSGFwcGVuZWQoZmFsc2UpCi0gICAgICAgICwgZXhpdGVkQ2FsbGJhY2soMCkKLSAgICB7
Ci0gICAgfQotCi0gICAgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQ7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OkRhdGFPYmplY3RHdGs+IGRhdGFPYmplY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQg
bGFzdE1vdGlvblBvc2l0aW9uOwotICAgIGludCBwZW5kaW5nRGF0YVJlcXVlc3RzOwotICAgIGJv
b2wgZHJvcEhhcHBlbmVkOwotICAgIERyYWdFeGl0ZWRDYWxsYmFjayBleGl0ZWRDYWxsYmFjazsK
LX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+
IERyb3BwaW5nQ29udGV4dE1hcDsKLXR5cGVkZWYgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFJl
ZlB0cjxEYXRhT2JqZWN0R3RrPiA+IERyYWdnaW5nRGF0YU9iamVjdHNNYXA7Ci0KLUd0a0RyYWdB
bmREcm9wSGVscGVyOjp+R3RrRHJhZ0FuZERyb3BIZWxwZXIoKQotewotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2Ryb3BwaW5nQ29udGV4dHMpOwotfQotCi1ib29sIEd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnRW5kKEdka0RyYWdDb250ZXh0KiBkcmFnQ29udGV4dCkKLXsKLSAgICBEcmFn
Z2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2Jq
ZWN0cy5maW5kKGRyYWdDb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0Rh
dGFPYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RyYWdnaW5n
RGF0YU9iamVjdHMucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQq
IGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8pCi17
Ci0gICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdn
aW5nRGF0YU9iamVjdHMuZmluZChjb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFn
Z2luZ0RhdGFPYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgUGFzdGVib2FyZEhl
bHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0
aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKLX0KLQotc3RydWN0IEhhbmRs
ZURyYWdMYXRlckRhdGEgewotICAgIERyb3BwaW5nQ29udGV4dCogY29udGV4dDsKLSAgICBHdGtE
cmFnQW5kRHJvcEhlbHBlciogZ2x1ZTsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbiBoYW5kbGVEcmFn
TGVhdmVMYXRlckNhbGxiYWNrKEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEpCi17Ci0gICAgZGF0
YS0+Z2x1ZS0+aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoZGF0YS0+Y29udGV4dCk7Ci0gICAgZGVsZXRl
IGRhdGE7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
RHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0
cy5maW5kKGNvbnRleHQtPmdka0NvbnRleHQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSB2aWV3
IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5n
IGRhdGEpCi0gICAgLy8gcmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBkcmFnLgotICAgIGlmIChjb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBjb250ZXh0
LT5sYXN0TW90aW9uUG9zaXRpb247Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoY29udGV4dC0+ZGF0
YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29udmVydFdp
ZGdldFBvaW50VG9TY3JlZW5Qb2ludChtX3dpZGdldCwgcG9zaXRpb24pLAotICAgICAgICAgICAg
ICAgICAgICAgIERyYWdPcGVyYXRpb25Ob25lKTsKLSAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFj
ayhtX3dpZGdldCwgJmRyYWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOwotCi0gICAgbV9k
cm9wcGluZ0NvbnRleHRzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci19
Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29u
dGV4dCogZ2RrQ29udGV4dCwgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrKQotewot
ICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29u
dGV4dHMuZmluZChnZGtDb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0Nv
bnRleHRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEdXJpbmcgYSBkcm9wIEdU
Sysgd2lsbCBmaXJlIGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZwotICAg
IC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxl
YXZlIHRvIGhhcHBlbiBhZnRlcgotICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVk
dWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCi0gICAgSGFuZGxlRHJhZ0xh
dGVyRGF0YSogZGF0YSA9IG5ldyBIYW5kbGVEcmFnTGF0ZXJEYXRhOwotICAgIGRhdGEtPmNvbnRl
eHQgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sg
PSBleGl0ZWRDYWxsYmFjazsKLSAgICBkYXRhLT5nbHVlID0gdGhpczsKLSAgICBnX3RpbWVvdXRf
YWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVy
Q2FsbGJhY2spLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlOZXdEcm9wQ29udGV4dERh
dGEoRHJvcHBpbmdDb250ZXh0KiBkcm9wQ29udGV4dCwgR3RrV2lkZ2V0KiB3aWRnZXQsIGd1aW50
IHRpbWUpCi17Ci0gICAgR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQgPSBkcm9wQ29udGV4dC0+
Z2RrQ29udGV4dDsKLSAgICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdldHMoUGFzdGVi
b2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZHJvcEF0b21zRm9yQ29udGV4
dCh3aWRnZXQsIGdka0NvbnRleHQpKTsKLSAgICBkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1
ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsgaSsrKQotICAgICAgICBndGtfZHJhZ19nZXRf
ZGF0YSh3aWRnZXQsIGdka0NvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0aW1lKTsK
LX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rp
b24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5z
aWduZWQgdGltZSkKLXsKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IDA7
Ci0gICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdD
b250ZXh0cy5maW5kKGNvbnRleHQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29u
dGV4dHMuZW5kKCkpIHsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gbmV3IERyb3BwaW5nQ29u
dGV4dChjb250ZXh0LCBwb3NpdGlvbik7Ci0gICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQo
Y29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsKLSAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERh
dGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdldCwgdGltZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBkcm9wcGluZ0Nv
bnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIH0KLQotICAgIC8vIERv
bid0IHNlbmQgYW55IGRyYWcgaW5mb3JtYXRpb24gdG8gV2ViQ29yZSB1bnRpbCB3ZSd2ZSByZXRy
aWV2ZWQgYWxsCi0gICAgLy8gdGhlIGRhdGEgZm9yIHRoaXMgZHJhZyBvcGVyYXRpb24uIE90aGVy
d2lzZSB3ZSdkIGhhdmUgdG8gYmxvY2sgdG8gd2FpdAotICAgIC8vIGZvciB0aGUgZHJhZydzIGRh
dGEuCi0gICAgQVNTRVJUKGRyb3BwaW5nQ29udGV4dCk7Ci0gICAgaWYgKGRyb3BwaW5nQ29udGV4
dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA+IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKLX0KLQotRGF0YU9iamVjdEd0
ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0Nv
bnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVk
IGluZm8sIEludFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0
ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52
YWx1ZTsKLSAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKLSAgICBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0YU9iamVj
dEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFP
YmplY3QuZ2V0KCkpOwotCi0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1
ZXN0cykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2Vk
IHRvIGRyYWctZGF0YS1yZWNlaXZlZCBzaWduYWwgYXJlIHNvbWV0aW1lcwotICAgIC8vIGluYWNj
dXJhdGUgaW4gRFJULCBzbyB1c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBl
dmVudC4KLSAgICBwb3NpdGlvbiA9IGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9u
OwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1ZXN0cywgc3RhcnQg
c2VuZGluZyBkcmFnZ2luZyBkYXRhIHRvIFdlYkNvcmUuCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29u
dGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKLX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERy
b3BIZWxwZXI6OmhhbmRsZURyYWdEcm9wKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAg
IERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4
dHMuZmluZChjb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRz
LmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBp
bmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhh
cHBlbmVkID0gdHJ1ZTsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3Qu
Z2V0KCk7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OnN0YXJ0ZWREcmFnKEdka0Ry
YWdDb250ZXh0KiBjb250ZXh0LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAgIG1f
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5zZXQoY29udGV4dCwgZGF0YU9iamVjdCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGIw
MmM0YjdhM2Y4NzMwMTM1Y2RmNjE2NGFlMDY5ZmFlM2Q1OTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2lmbmRlZiBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCi0jZGVmaW5lIEd0a0Ry
YWdBbmREcm9wSGVscGVyX2gKLQotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLSNpbmNsdWRl
IDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1
Y3QgRHJvcHBpbmdDb250ZXh0OwotY2xhc3MgRHJhZ0RhdGE7Ci0KLXR5cGVkZWYgdm9pZCAoKkRy
YWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lkZ2V0KiwgRHJhZ0RhdGEqLCBib29sIGRyb3BIYXBwZW5l
ZCk7Ci0KLWNsYXNzIEd0a0RyYWdBbmREcm9wSGVscGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShHdGtEcmFnQW5kRHJvcEhlbHBlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0KLXB1YmxpYzoKLSAgICBHdGtEcmFnQW5kRHJvcEhlbHBlcigpCi0gICAgICAgIDogbV93aWRn
ZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIH5HdGtEcmFnQW5kRHJvcEhlbHBlcigpOwotCi0gICAg
dm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpIHsgbV93aWRnZXQgPSB3aWRnZXQ7IH0K
LSAgICBib29sIGhhbmRsZURyYWdFbmQoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIGhhbmRs
ZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50IGlu
Zm8pOwotICAgIHZvaWQgaGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiwgRHJhZ0V4aXRl
ZENhbGxiYWNrKTsKLSAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4
dCopOwotICAgIERhdGFPYmplY3RHdGsqIGhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQq
LCBjb25zdCBJbnRQb2ludCYsIHVuc2lnbmVkIHRpbWUpOwotICAgIERhdGFPYmplY3RHdGsqIGhh
bmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQqLCBHdGtTZWxlY3Rpb25EYXRhKiwg
dW5zaWduZWQgaW5mbywgSW50UG9pbnQmKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFn
RHJvcChHZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgc3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRl
eHQqLCBEYXRhT2JqZWN0R3RrKik7Ci0KLXByaXZhdGU6Ci0gICAgR3RrV2lkZ2V0KiBtX3dpZGdl
dDsKLSAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gbV9kcm9w
cGluZ0NvbnRleHRzOwotICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9i
amVjdEd0az4gPiBtX2RyYWdnaW5nRGF0YU9iamVjdHM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBE
YXRhT2JqZWN0R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTk4
MGI1NDZhMmE0OWM2NDYwNTQ1MTE1ZTA0NmExMzY1YmM0MjNmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtJbnB1dE1l
dGhvZEZpbHRlci5oIgotCi0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotI2luY2x1ZGUgIkd0a1Zl
cnNpb25pbmcuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0vLyBUaGUgV2luZG93cyBjb21w
b3NpdGlvbiBrZXkgZXZlbnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0
bwotLy8gZW1pdCB0aGlzIGNvZGUgZm9yIHdlYiBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBr
ZXkgZXZlbnRzIHRyaWdnZXIKLS8vIGNvbXBvc2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhh
dmUgYW4gZXF1aXZhbGVudCwgc28gd2Ugc2VuZCBWb2lkU3ltYm9sCi0vLyBoZXJlIHRvIFdlYkNv
cmUuIFBsYXRmb3JtS2V5RXZlbnQga25vd3MgdG8gY29udmVydCB0aGlzIGNvZGUgaW50bwotLy8g
VktfUFJPQ0VTU0tFWS4KLWNvbnN0IGludCBnQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtf
S0VZX1ZvaWRTeW1ib2w7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgaGFu
ZGxlQ29tbWl0Q2FsbGJhY2soR3RrSU1Db250ZXh0KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25T
dHJpbmcsIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5k
bGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQcmVl
ZGl0U3RhcnRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmls
dGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRN
ZXRob2RGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2Vk
KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRl
eHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxl
UHJlZWRpdEVuZCgpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dp
ZGdldCogd2lkZ2V0LCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIEdka1dp
bmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7Ci0gICAgQVNTRVJU
KHdpbmRvdyk7Ci0gICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5j
b250ZXh0KCksIHdpbmRvdyk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdp
ZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBBU1NFUlQoIW1fd2lkZ2V0KTsKLQotICAg
IG1fd2lkZ2V0ID0gd2lkZ2V0OwotICAgIGlmIChndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRn
ZXQpKQotICAgICAgICBoYW5kbGVXaWRnZXRSZWFsaXplKG1fd2lkZ2V0LCB0aGlzKTsKLSAgICBl
bHNlCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdf
Q0FMTEJBQ0soaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOwotfQotCi12b2lkIEd0a0lucHV0
TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGN1cnNvclJlY3QpCi17
Ci0gICAgLy8gRG9uJ3QgbW92ZSB0aGUgd2luZG93IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5
IG1vdmVzIG1vcmUgdGhhbiAxMAotICAgIC8vIHBpeGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9t
IG1ha2luZyB0aGUgd2luZG93IGZsYXNoIGR1cmluZyBtaW5vcgotICAgIC8vIGN1cnNvciBhZGp1
c3RtZW50cy4KLSAgICBzdGF0aWMgY29uc3QgaW50IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0g
MTAgKiAxMDsKLSAgICBpZiAoY3Vyc29yUmVjdC5sb2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRv
UG9pbnQobV9sYXN0Q2FyZUxvY2F0aW9uKSA8IHdpbmRvd01vdmVtZW50VGhyZXNob2xkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RDYXJlTG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0
aW9uKCk7Ci0gICAgSW50UmVjdCB0cmFuc2xhdGVkUmVjdCA9IGN1cnNvclJlY3Q7Ci0KLSAgICBB
U1NFUlQobV93aWRnZXQpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtf
d2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0gICAgdHJhbnNs
YXRlZFJlY3QubW92ZShhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7Ci0KLSAgICBHZGtSZWN0
YW5nbGUgZ2RrQ3Vyc29yUmVjdCA9IGN1cnNvclJlY3Q7Ci0gICAgZ3RrX2ltX2NvbnRleHRfc2V0
X2N1cnNvcl9sb2NhdGlvbihtX2NvbnRleHQuZ2V0KCksICZnZGtDdXJzb3JSZWN0KTsKLX0KLQot
R3RrSW5wdXRNZXRob2RGaWx0ZXI6Okd0a0lucHV0TWV0aG9kRmlsdGVyKCkKLSAgICA6IG1fY3Vy
c29yT2Zmc2V0KDApCi0gICAgLCBtX2NvbnRleHQoYWRvcHRHUmVmKGd0a19pbV9tdWx0aWNvbnRl
eHRfbmV3KCkpKQotICAgICwgbV93aWRnZXQoMCkKLSAgICAsIG1fZW5hYmxlZChmYWxzZSkKLSAg
ICAsIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseShmYWxzZSkKLSAgICAsIG1fZmlsdGVyaW5nS2V5
RXZlbnQoZmFsc2UpCi0gICAgLCBtX3ByZWVkaXRDaGFuZ2VkKGZhbHNlKQotICAgICwgbV9wcmV2
ZW50TmV4dENvbW1pdChmYWxzZSkKLSAgICAsIG1fanVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCi0g
ICAgLCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lk
U3ltYm9sKQotewotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAiY29tbWl0
IiwgR19DQUxMQkFDSyhoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFu
ZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1f
Y29udGV4dC5nZXQoKSwgInByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRp
dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0
LmdldCgpLCAicHJlZWRpdC1lbmQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRFbmRDYWxsYmFj
ayksIHRoaXMpOwotfQotCi1HdGtJbnB1dE1ldGhvZEZpbHRlcjo6fkd0a0lucHV0TWV0aG9kRmls
dGVyKCkKLXsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250
ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVDb21taXRDYWxsYmFjayks
IHRoaXMpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRl
eHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRTdGFydENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1f
Y29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdENoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVk
aXRFbmRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhtX3dpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlV2lkZ2V0UmVh
bGl6ZSksIHRoaXMpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVk
KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2VuYWJsZWQgPSBlbmFibGVkOwotICAgIGlmIChlbmFi
bGVkKQotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQo
KSk7Ci19Ci0KLWJvb2wgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2
ZW50S2V5KiBldmVudCkKLXsKLSAgICBpZiAoIWNhbkVkaXQoKSB8fCAhbV9lbmFibGVkKQotICAg
ICAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKLQotICAgIG1fcHJlZWRpdENo
YW5nZWQgPSBmYWxzZTsKLSAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gdHJ1ZTsKLQotICAgIHVu
c2lnbmVkIGludCBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOwotICAgIG1fbGFzdEZpbHRlcmVkS2V5
UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKLQotICAgIGJvb2wg
ZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgp
LCBldmVudCk7Ci0gICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOwotCi0gICAgYm9vbCBq
dXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7Ci0gICAgbV9qdXN0U2VudEZh
a2VLZXlVcCA9IGZhbHNlOwotICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlw
ZSA9PSBHREtfS0VZX1JFTEVBU0UpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gU2lt
cGxlIGlucHV0IG1ldGhvZHMgd29yayBzdWNoIHRoYXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBm
aXJlIHRoZQotICAgIC8vIGNvbW1pdCBzaWduYWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25z
IGFuZCB0cmVhdCB0aGVtIGFzIG5vcm1hbAotICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0
aGUgY29tbWl0IHN0cmluZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KLSAgICBpZiAoZmlsdGVyZWQg
JiYgIW1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2Nv
bmZpcm1lZENvbXBvc2l0aW9uLmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgYm9vbCByZXN1bHQg
PSBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwotICAg
ICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdES19L
RVlfUFJFU1MpIHsKLSAgICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVk
Q29tcG9zaXRpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJl
bnRseSA9IHRydWU7Ci0gICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhO
b1Jlc3VsdHMgPSBldmVudC0+a2V5dmFsOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlv
blJlc3VsdHMoZXZlbnQpOwotICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsK
LSAgICAgICAgICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIElmIHdlIHByZXZpb3Vz
bHkgZmlsdGVyZWQgYSBrZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4g
U3VwcHJlc3MKLSAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBh
dm9pZCBjb25mdXNpbmcgdGhlIHdlYiBjb250ZW50LgotICAgIGlmIChldmVudC0+dHlwZSA9PSBH
REtfS0VZX1JFTEVBU0UgJiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9
PSBldmVudC0+a2V5dmFsKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEF0IHRoaXMg
cG9pbnQgYSBrZXlzdHJva2Ugd2FzIGVpdGhlcjoKLSAgICAvLyAxLiBVbmZpbHRlcmVkCi0gICAg
Ly8gMi4gQSBmaWx0ZXJlZCBrZXl1cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNs
aWVudC5oIGRvZXNuJ3QKLSAgICAvLyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBz
ZW5kIGFueSBjb21wb3NpdGlvbiByZXN1bHRzIGJlZm9yZQotICAgIC8vICAgIHRoZSBrZXkgZXZl
bnQuCi0gICAgLy8gQm90aCBtaWdodCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90Lgot
ICAgIC8vCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVz
dWx0cyBiZWZvcmUgdGhlIGV2ZW50Ci0gICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3Bl
cmF0ZSB0aGF0IHdheS4gRm9yIGV4YW1wbGUgKHRha2VuIGZyb20KLSAgICAvLyB0aGUgQ2hyb21p
dW0gc291cmNlKSwgdGhlIGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVu
Y2UKLSAgICAvLyB3aGVuIHlvdSBwcmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgotICAgIC8v
ICAxLiBrZXlkb3duICdhJyAoZmlsdGVyZWQpCi0gICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0
byAiYSIKLSAgICAvLyAgMy4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQotICAgIC8vICA0LiBrZXlk
b3duIEJhY2tzcGFjZSAodW5maWx0ZXJlZCkKLSAgICAvLyAgNS4gY29tbWl0ICJhIgotICAgIC8v
ICA2LiBwcmVlZGl0IGVuZAotICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5
KCkpCi0gICAgICAgIGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIGlmIChtX3ByZWVkaXRDaGFu
Z2VkKQotICAgICAgICB1cGRhdGVQcmVlZGl0KCk7Ci0gICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlF
dmVudChldmVudCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNl
QnV0dG9uUHJlc3MoKQotewotICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0
cmlnZ2VyIGEgc2VsZWN0aW9uIGNoYW5nZSwgd2hpY2gKLSAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1
cnRoZXIgdW53YW50ZWQgYWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVudAotICAg
IC8vIHRoYXQgYnkgc2V0dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCi0g
ICAgaWYgKG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAgY29uZmlybUN1cnJlbnRD
b21wb3NpdGlvbigpOwotICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAg
IGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmls
dGVyOjpyZXNldENvbnRleHQoKQotewotCi0gICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3Vy
cmVudCBXZWJDb3JlIGNvbXBvc2l0aW9uIGhlcmUsIGluIGNhc2UgdGhlCi0gICAgLy8gY29tcG9z
aXRpb24gd2FzIHNldCBvdXRzaWRlIHRoZSBHVEsrIElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZv
cgotICAgIC8vIGluc3RhbmNlKSBhbmQgd2UgYXJlbid0IHRyYWNraW5nIGl0LgotICAgIGNhbmNl
bEN1cnJlbnRDb21wb3NpdGlvbigpOwotCi0gICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50
bHkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxz
ZTsKLSAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1l
dGhvZEZpbHRlcjo6Y2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCkKLXsKLSAgICBtX3ByZXZlbnRO
ZXh0Q29tbWl0ID0gIW1fcHJlZWRpdC5pc0VtcHR5KCk7Ci0KLSAgICBndGtfaW1fY29udGV4dF9y
ZXNldChtX2NvbnRleHQuZ2V0KCkpOwotCi0gICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0g
ZmFsc2U7Ci0gICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOwotICAgIG1fcHJlZWRpdCA9
IFN0cmluZygpOwotICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKLX0KLQot
dm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZEluKCkKLXsKLSAgICBtX2Vu
YWJsZWQgPSB0cnVlOwotICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQo
KSk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQot
ewotICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb21w
b3NpbmdUZXh0Q3VycmVudGx5KQotICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7
Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7Ci0gICAgZ3RrX2ltX2NvbnRleHRfZm9j
dXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9lbmFibGVkID0gZmFsc2U7Ci19Ci0KLXZv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCi17Ci0gICAgY29u
ZmlybUNvbXBvc2l0aW9uVGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICBtX2NvbmZp
cm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0
ZXI6OnVwZGF0ZVByZWVkaXQoKQotewotICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNv
ck9mZnNldCk7Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOwotfQotCi12b2lkIEd0a0lu
cHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVu
dHMoUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kKQotewotICAgIEdPd25QdHI8R2RrRXZlbnQ+
IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXkudGlt
ZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRp
b25FdmVudEtleUNvZGU7Ci0gICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygm
ZXZlbnQtPmtleSwgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7Ci0KLSAgICBtX2NvbmZpcm1l
ZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci0gICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3Np
dGlvbikKLSAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0KLSAgICBl
dmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2
ZW50LT5rZXksIFN0cmluZygpLCBFdmVudEZha2VkKTsKLSAgICBtX2p1c3RTZW50RmFrZUtleVVw
ID0gdHJ1ZTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNv
bnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKQotewotICAgIGlmIChtX3ByZXZlbnROZXh0Q29t
bWl0KSB7Ci0gICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0
aW9uU3RyaW5nKSk7Ci0KLSAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lk
ZSBvZiBhIGtleSBldmVudCwganVzdCBzZW5kCi0gICAgLy8gdGhlIElNRSBldmVudCBub3cuIElm
IHdlIGFyZSBoYW5kbGluZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCi0gICAgLy8gbGF0ZXIg
aG93IHRvIGhhbmRsZSB0aGlzLgotICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAg
ICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9u
KTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkK
LXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0gICAgbV9wcmVlZGl0ID0gIiI7
Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkK
LXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR093blB0cjxn
Y2hhcj4gbmV3UHJlZWRpdDsKLSAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmco
bV9jb250ZXh0LmdldCgpLCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0
KTsKLQotICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7Ci0gICAgICAgIGlmIChzdHJsZW4o
bmV3UHJlZWRpdC5nZXQoKSkgPiAwKQotICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9
IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9wcmVlZGl0ID0gU3RyaW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKLSAgICBtX2N1
cnNvck9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGlj
X2Nhc3Q8aW50PihtX3ByZWVkaXQubGVuZ3RoKCkpKTsKLQotICAgIG1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseSA9ICFtX3ByZWVkaXQuaXNFbXB0eSgpOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0
cnVlOwotCi0gICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQotICAgICAgICBzZW5kQ29tcG9z
aXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Ci19Ci0KLXZvaWQgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQotewotICAgIGlmIChtX3ByZXZl
bnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJl
ZWRpdCA9IFN0cmluZygpOwotICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKLSAgICBtX3ByZWVkaXRD
aGFuZ2VkID0gdHJ1ZTsKLQotICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAg
dXBkYXRlUHJlZWRpdCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwZTQ4MjUzNDg4ZDEwNGU4NTQzYmEwZjEyOGFhNjMzNDFlY2E3YjY3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0a0lucHV0
TWV0aG9kRmlsdGVyX2gKLSNkZWZpbmUgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAotCi0jaW5jbHVk
ZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9H
dGtJTUNvbnRleHQgR3RrSU1Db250ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtX
aWRnZXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3RrSW5wdXRNZXRob2RGaWx0
ZXIgewotcHVibGljOgotICAgIEd0a0lucHV0TWV0aG9kRmlsdGVyKCk7Ci0gICAgfkd0a0lucHV0
TWV0aG9kRmlsdGVyKCk7Ci0KLSAgICBib29sIGZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5Kik7
Ci0gICAgdm9pZCBub3RpZnlNb3VzZUJ1dHRvblByZXNzKCk7Ci0gICAgdm9pZCBub3RpZnlGb2N1
c2VkSW4oKTsKLSAgICB2b2lkIG5vdGlmeUZvY3VzZWRPdXQoKTsKLSAgICB2b2lkIHJlc2V0Q29u
dGV4dCgpOwotICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotICAgIHZvaWQgaGFuZGxlQ29t
bWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKTsKLSAgICB2b2lkIGhhbmRsZVByZWVk
aXRDaGFuZ2VkKCk7Ci0gICAgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnQoKTsKLSAgICB2b2lkIGhh
bmRsZVByZWVkaXRFbmQoKTsKLQotICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAg
dm9pZCBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKLSAgICB2b2lkIHVwZGF0ZVByZWVkaXQo
KTsKLSAgICB2b2lkIHNldEN1cnNvclJlY3QoY29uc3QgSW50UmVjdCYgbG9jYXRpb24pOwotCi0g
ICAgR3RrSU1Db250ZXh0KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0K
LSAgICBlbnVtIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiB7Ci0gICAgICAgIEV2ZW50RmFrZWQs
Ci0gICAgICAgIEV2ZW50Tm90RmFrZWQKLSAgICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBS
ZXN1bHRzVG9TZW5kIHsKLSAgICAgICAgUHJlZWRpdCA9IDEgPDwgMSwKLSAgICAgICAgQ29tcG9z
aXRpb24gPSAxIDw8IDIsCi0gICAgICAgIFByZWVkaXRBbmRDb21wb3NpdGlvbiA9IFByZWVkaXQg
KyBDb21wb3NpdGlvbgotICAgIH07Ci0KLSAgICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgY2FuRWRpdCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNp
bXBsZUtleUV2ZW50KEdka0V2ZW50S2V5KiwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcgPSBTdHJp
bmcoKSwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uID0gRXZlbnROb3RGYWtlZCkgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50
S2V5KiwgUmVzdWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZv
ckNvbXBvc2l0aW9uID0gRXZlbnROb3RGYWtlZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25m
aXJtQ29tcG9zaXRpb25UZXh0KFN0cmluZyBjb21wb3NpdGlvbikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWVk
aXQoU3RyaW5nLCBpbnQgY3Vyc29yT2Zmc2V0KSA9IDA7Ci0KLSAgICBXVEY6OlN0cmluZyBtX2Nv
bmZpcm1lZENvbXBvc2l0aW9uOwotICAgIFdURjo6U3RyaW5nIG1fcHJlZWRpdDsKLSAgICBpbnQg
bV9jdXJzb3JPZmZzZXQ7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZW5kQ29tcG9zaXRpb25BbmRQ
cmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCk7Ci0KLSAgICBHUmVmUHRyPEd0
a0lNQ29udGV4dD4gbV9jb250ZXh0OwotICAgIEd0a1dpZGdldCogbV93aWRnZXQ7Ci0gICAgYm9v
bCBtX2VuYWJsZWQ7Ci0gICAgYm9vbCBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHk7Ci0gICAgYm9v
bCBtX2ZpbHRlcmluZ0tleUV2ZW50OwotICAgIGJvb2wgbV9wcmVlZGl0Q2hhbmdlZDsKLSAgICBi
b29sIG1fcHJldmVudE5leHRDb21taXQ7Ci0gICAgYm9vbCBtX2p1c3RTZW50RmFrZUtleVVwOwot
ICAgIHVuc2lnbmVkIGludCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHM7
Ci0gICAgSW50UG9pbnQgbV9sYXN0Q2FyZUxvY2F0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gR3RrSW5wdXRNZXRob2RGaWx0ZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGNmMWI2ODBkYmFiYTM2MWZkMWM1MDNkNGI2NmZjOWExYTljZTI5OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkd0a1BsdWdpbldpZGdldC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlNjcm9sbFZp
ZXcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1H
dGtQbHVnaW5XaWRnZXQ6Okd0a1BsdWdpbldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLSAgICA6
IFdpZGdldCh3aWRnZXQpCi17Ci0gICAgZ3RrX3dpZGdldF9oaWRlKHdpZGdldCk7Ci19Ci0KLUd0
a1BsdWdpbldpZGdldDo6fkd0a1BsdWdpbldpZGdldCgpCi17Ci0gICAgZ3RrX2NvbnRhaW5lcl9y
ZW1vdmUoR1RLX0NPTlRBSU5FUihndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZvcm1XaWRnZXQo
KSkpLCBwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotdm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvcmVSZWN0KQotewotICAgIC8qIG5vIG5lZWQgdG8g
Ki8KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0X2hhc193aW5kb3cocGxhdGZvcm1XaWRnZXQoKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9n
ZXRfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkpOwotICAgIGlmICghd2luZG93KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IGNvcmVSZWN0OwotICAgIGdka193aW5k
b3dfaW52YWxpZGF0ZV9yZWN0KHdpbmRvdywgJnJlY3QsIEZBTFNFKTsKLX0KLQotdm9pZCBHdGtQ
bHVnaW5XaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBm
cmFtZVJlY3QoKTsKLSAgICBJbnRQb2ludCBsb2MgPSBwYXJlbnQoKS0+Y29udGVudHNUb1dpbmRv
dyhyZWN0LmxvY2F0aW9uKCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9j
LngoKSwgbG9jLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07Ci0KLSAgICBndGtf
d2lkZ2V0X3NldF9zaXplX3JlcXVlc3QocGxhdGZvcm1XaWRnZXQoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1XaWRn
ZXQoKSwgJmFsbG9jYXRpb24pOwotICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdpZGdldCgp
KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1Bs
dWdpbldpZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdl
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzczZWM1OTBiMmYyMjFlM2JiOTgx
N2QwZDMzN2VlMWY0MzNkNzkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBHdGtQbHVnaW5XaWRnZXRfaAotI2RlZmluZSBHdGtQbHVnaW5XaWRnZXRfaAot
Ci0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBH
dGtQbHVnaW5XaWRnZXQgOiBwdWJsaWMgV2lkZ2V0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEd0
a1BsdWdpbldpZGdldChHdGtXaWRnZXQqKTsKLSAgICAgICAgdmlydHVhbCB+R3RrUGx1Z2luV2lk
Z2V0KCk7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAg
ICAgICB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci0gICAgfTsKLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2ZjU3YTE3ZGMzMjNiY2Y3YjM1N2IyNzdmMDgwYWRlZjA5MTM1MmY3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjQyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBp
bXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KLSAqCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR3RrUG9wdXBNZW51LmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IGdTZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwotCi1H
dGtQb3B1cE1lbnU6Okd0a1BvcHVwTWVudSgpCi0gICAgOiBtX3BvcHVwKGd0a19tZW51X25ldygp
KQotICAgICwgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyKDApCi0gICAgLCBtX2N1cnJlbnRs
eVNlbGVjdGVkTWVudUl0ZW0oMCkKLXsKLSAgICBtX2tleVByZXNzSGFuZGxlcklEID0gZ19zaWdu
YWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAia2V5LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhH
dGtQb3B1cE1lbnU6OmtleVByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOwotfQotCi1HdGtQb3B1
cE1lbnU6On5HdGtQb3B1cE1lbnUoKQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX3BvcHVwLmdldCgpLCBtX2tleVByZXNzSGFuZGxlcklEKTsKLX0KLQotdm9pZCBHdGtQb3B1
cE1lbnU6OmNsZWFyKCkKLXsKLSAgICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5F
UihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92
ZUl0ZW0pLCB0aGlzKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OmFwcGVuZFNlcGFyYXRvcigp
Ci17Ci0gICAgR3RrV2lkZ2V0KiBtZW51SXRlbSA9IGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25l
dygpOwotICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdl
dCgpKSwgbWVudUl0ZW0pOwotICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Ci19Ci0KLXZv
aWQgR3RrUG9wdXBNZW51OjphcHBlbmRJdGVtKEd0a0FjdGlvbiogYWN0aW9uKQotewotICAgIEd0
a1dpZGdldCogbWVudUl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKTsK
LSAgICBndGtfd2lkZ2V0X3NldF90b29sdGlwX3RleHQobWVudUl0ZW0sIGd0a19hY3Rpb25fZ2V0
X3Rvb2x0aXAoYWN0aW9uKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtZW51SXRlbSwgInNlbGVj
dCIsIEdfQ0FMTEJBQ0soR3RrUG9wdXBNZW51OjpzZWxlY3RJdGVtQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSks
IG1lbnVJdGVtKTsKLQotICAgIGlmIChndGtfYWN0aW9uX2lzX3Zpc2libGUoYWN0aW9uKSkKLSAg
ICAgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6
OnBvcFVwKGNvbnN0IEludFNpemUmIG1lbnVTaXplLCBjb25zdCBJbnRQb2ludCYgbWVudVBvc2l0
aW9uLCBpbnQgaXRlbUNvdW50LCBpbnQgc2VsZWN0ZWRJdGVtLCBjb25zdCBHZGtFdmVudCogZXZl
bnQpCi17Ci0gICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAgICBtX21lbnVQb3NpdGlv
biA9IG1lbnVQb3NpdGlvbjsKLSAgICBndGtfbWVudV9zZXRfYWN0aXZlKEdUS19NRU5VKG1fcG9w
dXAuZ2V0KCkpLCBzZWxlY3RlZEl0ZW0pOwotCi0gICAgLy8gVGhpcyBhcHByb2FjaCBmb2xsb3dz
IHRoZSBvbmUgaW4gZ3RrY29tYm9ib3guYy4KLSAgICBHdGtSZXF1aXNpdGlvbiByZXF1aXNpdGlv
bjsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgLTEsIC0x
KTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0
KG1fcG9wdXAuZ2V0KCksICZyZXF1aXNpdGlvbik7Ci0jZWxzZQotICAgIGd0a193aWRnZXRfZ2V0
X3ByZWZlcnJlZF9zaXplKG1fcG9wdXAuZ2V0KCksICZyZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYK
LQotICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCBzdGQ6Om1h
eChtZW51U2l6ZS53aWR0aCgpLCByZXF1aXNpdGlvbi53aWR0aCksIC0xKTsKLQotICAgIEdMaXN0
KiBjaGlsZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9w
b3B1cC5nZXQoKSkpOwotICAgIEdMaXN0KiBwID0gY2hpbGRyZW47Ci0gICAgaWYgKGl0ZW1Db3Vu
dCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1Db3VudDsgaSsrKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA+IHNlbGVjdGVkSXRlbSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgR3RrV2lkZ2V0KiBpdGVtID0gcmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQq
PihwLT5kYXRhKTsKLSAgICAgICAgICAgIEd0a1JlcXVpc2l0aW9uIGl0ZW1SZXF1aXNpdGlvbjsK
LSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfY2hp
bGRfcmVxdWlzaXRpb24oaXRlbSwgJml0ZW1SZXF1aXNpdGlvbik7Ci0jZWxzZQotICAgICAgICAg
ICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUoaXRlbSwgJml0ZW1SZXF1aXNpdGlvbiwg
MCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRp
b24ueSgpIC0gaXRlbVJlcXVpc2l0aW9uLmhlaWdodCk7Ci0KLSAgICAgICAgICAgIHAgPSBnX2xp
c3RfbmV4dChwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENlbnRlciB2
ZXJ0aWNhbGx5IHRoZSBlbXB0eSBwb3B1cCBpbiB0aGUgY29tYm8gYm94IGFyZWEuCi0gICAgICAg
IG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gbWVudVNpemUuaGVpZ2h0
KCkgLyAyKTsKLSAgICB9Ci0gICAgZ19saXN0X2ZyZWUoY2hpbGRyZW4pOwotCi0gICAgZ3VpbnQg
YnV0dG9uOwotICAgIGd1aW50MzIgYWN0aXZhdGVUaW1lOwotICAgIGlmIChldmVudCkgewotICAg
ICAgICBidXR0b24gPSBldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTID8gZXZlbnQtPmJ1
dHRvbi5idXR0b24gOiAxOwotICAgICAgICBhY3RpdmF0ZVRpbWUgPSBnZGtfZXZlbnRfZ2V0X3Rp
bWUoZXZlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1dHRvbiA9IDE7Ci0gICAgICAgIGFj
dGl2YXRlVGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgfQotCi0jaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKLSAgICBndGtfbWVudV9wb3B1cChHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgMCwg
MCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5j
dGlvbiksIHRoaXMsIGJ1dHRvbiwgYWN0aXZhdGVUaW1lKTsKLSNlbHNlCi0gICAgZ3RrX21lbnVf
cG9wdXBfZm9yX2RldmljZShHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgZXZlbnQgPyBnZGtfZXZl
bnRfZ2V0X2RldmljZShldmVudCkgOiAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25G
dW5jdGlvbiksIHRoaXMsIDAsIGJ1dHRvbiwgYWN0aXZhdGVUaW1lKTsKLSNlbmRpZgotfQotCi12
b2lkIEd0a1BvcHVwTWVudTo6cG9wRG93bigpCi17Ci0gICAgZ3RrX21lbnVfcG9wZG93bihHVEtf
TUVOVShtX3BvcHVwLmdldCgpKSk7Ci0gICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLX0K
LQotdm9pZCBHdGtQb3B1cE1lbnU6Om1lbnVSZW1vdmVJdGVtKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKLXsKLSAgICBBU1NFUlQocG9wdXBNZW51LT5tX3BvcHVw
KTsKLSAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBvcHVwTWVudS0+bV9w
b3B1cC5nZXQoKSksIHdpZGdldCk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjptZW51UG9zaXRp
b25GdW5jdGlvbihHdGtNZW51KiwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwg
R3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0gICAgKnggPSBwb3B1cE1lbnUtPm1fbWVudVBv
c2l0aW9uLngoKTsKLSAgICAqeSA9IHBvcHVwTWVudS0+bV9tZW51UG9zaXRpb24ueSgpOwotICAg
ICpwdXNoSW4gPSB0cnVlOwotfQotCi12b2lkIEd0a1BvcHVwTWVudTo6cmVzZXRUeXBlQWhlYWRG
aW5kU3RhdGUoKQotewotICAgIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7Ci0gICAg
bV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyID0gMDsKLSAgICBtX2N1cnJlbnRTZWFyY2hTdHJp
bmcgPSAiIjsKLX0KLQotYm9vbCBHdGtQb3B1cE1lbnU6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRL
ZXkqIGV2ZW50KQotewotICAgIC8vIElmIHdlIHdlcmUgZ2l2ZW4gYSBub24tcHJpbnRhYmxlIGNo
YXJhY3RlciBqdXN0IHNraXAgaXQuCi0gICAgZ3VuaWNoYXIgdW5pY29kZUNoYXJhY3RlciA9IGdk
a19rZXl2YWxfdG9fdW5pY29kZShldmVudC0+a2V5dmFsKTsKLSAgICBpZiAoIWdfdW5pY2hhcl9p
c3ByaW50KHVuaWNvZGVDaGFyYWN0ZXIpKSB7Ci0gICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0
YXRlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBnbG9uZyBjaGFyYWN0
ZXJzV3JpdHRlbjsKLSAgICBHT3duUHRyPGd1bmljaGFyMj4gdXRmMTZTdHJpbmcoZ191Y3M0X3Rv
X3V0ZjE2KCZ1bmljb2RlQ2hhcmFjdGVyLCAxLCAwLCAmY2hhcmFjdGVyc1dyaXR0ZW4sIDApKTsK
LSAgICBpZiAoIXV0ZjE2U3RyaW5nKSB7Ci0gICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRl
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgY2hhcmFj
dGVyIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0IGNoYXJhY3RlciwgdGhlIHVzZXIgaXMgcHJvYmFi
bHkgdHJ5aW5nIHRvCi0gICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgbWVudWxpc3QgZW50cmllcy4g
VGhpcyBtYXRjaGVzIHRoZSBXZWJDb3JlIGJlaGF2aW9yIGZvciBjb2xsYXBzZWQKLSAgICAvLyBt
ZW51bGlzdHMuCi0gICAgYm9vbCByZXBlYXRpbmdDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVy
ICE9IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKLSAgICBpZiAoZXZlbnQtPnRpbWUgLSBt
X3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAgPiBnU2VhcmNoVGltZW91dE1zKQotICAgICAgICBt
X2N1cnJlbnRTZWFyY2hTdHJpbmcgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0
ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVyc1dyaXR0ZW4pOwotICAgIGVsc2UgaWYgKHJlcGVh
dGluZ0NoYXJhY3RlcikKLSAgICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nLmFwcGVuZChTdHJp
bmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVy
c1dyaXR0ZW4pKTsKLQotICAgIG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcCA9IGV2ZW50LT50
aW1lOwotICAgIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXI7
Ci0KLSAgICAvLyBMaWtlIHRoZSBDaHJvbWl1bSBwb3J0LCB3ZSBjYXNlIGZvbGQgYmVmb3JlIHNl
YXJjaGluZywgYmVjYXVzZSAKLSAgICAvLyBzdHJuY21wIGRvZXMgbm90IGhhbmRsZSBub24tQVND
SUkgY2hhcmFjdGVycy4KLSAgICBHT3duUHRyPGdjaGFyPiBzZWFyY2hTdHJpbmdXaXRoQ2FzZUZv
bGRlZChnX3V0ZjhfY2FzZWZvbGQobV9jdXJyZW50U2VhcmNoU3RyaW5nLnV0ZjgoKS5kYXRhKCks
IC0xKSk7Ci0gICAgc2l6ZV90IHByZWZpeExlbmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmdXaXRo
Q2FzZUZvbGRlZC5nZXQoKSk7Ci0KLSAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKLSAgICBpZiAoIWNo
aWxkcmVuKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIGEgbWVudSBpdGVtIGhh
cyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQsIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50
Ci0gICAgLy8gaXRlbSBkb3duIHRoZSBsaXN0LiBUaGlzIHdpbGwgbWFrZSBtdWx0aXBsZSBrZXkg
cHJlc3NlcyBvZiB0aGUgc2FtZSBjaGFyYWN0ZXIKLSAgICAvLyBhZHZhbmNlIHRoZSBzZWxlY3Rp
b24uCi0gICAgR0xpc3QqIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOwotICAgIGlmIChtX2N1cnJl
bnRseVNlbGVjdGVkTWVudUl0ZW0pIHsKLSAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X2Zp
bmQoY2hpbGRyZW4sIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSk7Ci0gICAgICAgIGlmICgh
Y3VycmVudENoaWxkKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0g
PSAwOwotICAgICAgICAgICAgY3VycmVudENoaWxkID0gY2hpbGRyZW47Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBSZXBlYXRpbmcgY2hhcmFjdGVycyBzaG91bGQgaXRlcmF0ZS4KLSAgICAgICAg
aWYgKHJlcGVhdGluZ0NoYXJhY3RlcikgewotICAgICAgICAgICAgaWYgKEdMaXN0KiBuZXh0Q2hp
bGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRD
aGlsZCA9IG5leHRDaGlsZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMaXN0KiBmaXJzdENo
aWxkID0gY3VycmVudENoaWxkOwotICAgIGRvIHsKLSAgICAgICAgY3VycmVudENoaWxkID0gZ19s
aXN0X25leHQoY3VycmVudENoaWxkKTsKLSAgICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpCi0gICAg
ICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsKLQotICAgICAgICBHT3duUHRyPGdjaGFy
PiBpdGVtVGV4dChnX3V0ZjhfY2FzZWZvbGQoZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR1RLX01F
TlVfSVRFTShjdXJyZW50Q2hpbGQtPmRhdGEpKSwgLTEpKTsKLSAgICAgICAgaWYgKCFzdHJuY21w
KHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpLCBpdGVtVGV4dC5nZXQoKSwgcHJlZml4
TGVuZ3RoKSkgewotICAgICAgICAgICAgZ3RrX21lbnVfc2hlbGxfc2VsZWN0X2l0ZW0oR1RLX01F
TlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIEdUS19XSURHRVQoY3VycmVudENoaWxkLT5kYXRhKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGN1cnJlbnRDaGls
ZCAhPSBmaXJzdENoaWxkKTsKLQotICAgIGdfbGlzdF9mcmVlKGNoaWxkcmVuKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayhHdGtN
ZW51SXRlbSogaXRlbSwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0gICAgcG9wdXBNZW51
LT5tX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0pOwotfQotCi1n
Ym9vbGVhbiBHdGtQb3B1cE1lbnU6OmtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50LCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKLXsKLSAg
ICByZXR1cm4gcG9wdXBNZW51LT50eXBlQWhlYWRGaW5kKGV2ZW50KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a1BvcHVwTWVudS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzZhZDQ0ZjdkZDE2NjQwYzQyZjU5ZjJi
YWIwNDBiMzZlZjgzNzMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrUG9wdXBNZW51X2gKLSNkZWZpbmUgR3RrUG9w
dXBNZW51X2gKLQotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJJbnRQb2ludC5o
IgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HZGtF
dmVudEtleSBHZGtFdmVudEtleTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtQ
b3B1cE1lbnUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a1BvcHVwTWVudSk7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxHdGtQb3B1cE1lbnU+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEd0a1BvcHVwTWVudSgpKTsKLSAgICB9Ci0KLSAgICB+R3RrUG9wdXBNZW51KCk7Ci0KLSAg
ICBHdGtXaWRnZXQqIHBsYXRmb3JtTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7
IH0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdm9pZCBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICB2
b2lkIGFwcGVuZEl0ZW0oR3RrQWN0aW9uKik7Ci0gICAgdm9pZCBwb3BVcChjb25zdCBJbnRTaXpl
JiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaXRlbXNDb3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29u
c3QgR2RrRXZlbnQqKTsKLSAgICB2b2lkIHBvcERvd24oKTsKLQotcHJpdmF0ZToKLSAgICBHdGtQ
b3B1cE1lbnUoKTsKLQotICAgIHZvaWQgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAgICBi
b29sIHR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqKTsKLQotICAgIHN0YXRpYyB2b2lkIG1lbnVJ
dGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGljIHZv
aWQgbWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xlYW4q
LCBHdGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0aWMgdm9pZCBtZW51UmVtb3ZlSXRlbShHdGtXaWRn
ZXQqLCBHdGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJhY2so
R3RrTWVudUl0ZW0qLCBHdGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJl
c3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50S2V5KiwgR3RrUG9wdXBNZW51Kik7
Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gbV9wb3B1cDsKLSAgICBJbnRQb2ludCBtX21lbnVQ
b3NpdGlvbjsKLSAgICBTdHJpbmcgbV9jdXJyZW50U2VhcmNoU3RyaW5nOwotICAgIHVpbnQzMl90
IG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcDsKLSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91
c0tleUV2ZW50Q2hhcmFjdGVyOwotICAgIEd0a1dpZGdldCogbV9jdXJyZW50bHlTZWxlY3RlZE1l
bnVJdGVtOwotICAgIHVuc2lnbmVkIGludCBtX2tleVByZXNzSGFuZGxlcklEOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gR3RrUG9wdXBNZW51X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a1V0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGI1YmEz
NjI4NGQ4YzE3OWFkZjQxY2Q0NjIwZTM5ZGVkYTk4MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0
aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotCi0jaW5j
bHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRn
ZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGFjdHVhbGx5IGEgdmVyeSB0cmlja3kgb3BlcmF0aW9uIGFuZCB0aGUgcmVzdWx0cyBvZiB0
aGlzIGZ1bmN0aW9uIHNob3VsZAotICAgIC8vIG9ubHkgYmUgdGhvdWdodCBvZiBhcyBhIGd1ZXNz
LiBGb3IgaW5zdGFuY2UsIHNvbWV0aW1lcyBpdCBtYXkgbm90IGNvcnJlY3RseSB0YWtlIGludG8K
LSAgICAvLyBhY2NvdW50IHdpbmRvdyBkZWNvcmF0aW9ucy4KLQotICAgIEd0a1dpZGdldCogdG9w
bGV2ZWxXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIGlmICgh
dG9wbGV2ZWxXaWRnZXQgfHwgIWd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWxXaWRnZXQp
IHx8ICFHVEtfSVNfV0lORE9XKHRvcGxldmVsV2lkZ2V0KSkKLSAgICAgICAgcmV0dXJuIHBvaW50
OwotCi0gICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codG9w
bGV2ZWxXaWRnZXQpOwotICAgIGlmICghZ2RrV2luZG93KQotICAgICAgICByZXR1cm4gcG9pbnQ7
Ci0KLSAgICBpbnQgeEluV2luZG93LCB5SW5XaW5kb3c7Ci0gICAgZ3RrX3dpZGdldF90cmFuc2xh
dGVfY29vcmRpbmF0ZXMod2lkZ2V0LCB0b3BsZXZlbFdpZGdldCwgcG9pbnQueCgpLCBwb2ludC55
KCksICZ4SW5XaW5kb3csICZ5SW5XaW5kb3cpOwotCi0gICAgaW50IHdpbmRvd09yaWdpblgsIHdp
bmRvd09yaWdpblk7Ci0gICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGdka1dpbmRvdywgJndpbmRv
d09yaWdpblgsICZ3aW5kb3dPcmlnaW5ZKTsKLQotICAgIHJldHVybiBJbnRQb2ludCh3aW5kb3dP
cmlnaW5YICsgeEluV2luZG93LCB3aW5kb3dPcmlnaW5ZICsgeUluV2luZG93KTsKLX0KLQotYm9v
bCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBHVEtfSVNfV0lORE9X
KHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRp
ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjliZGRlNjU5OGYwMmQzMzU3YTAw
YTcxMzM4OTZiYWM1NGMyZGEyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVm
IEd0a1V0aWxpdGllc19oIAotI2RlZmluZSBHdGtVdGlsaXRpZXNfaCAKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBJbnRQb2ludDsKLQotSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50
VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpOwotYm9vbCB3aWRnZXRJ
c09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEd0a1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMy
Zjg0YzJlZjg4NjZjMDNjMDZmMTZkYzIxNTlmZmVhOTk3Y2RjOC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrVmVyc2lvbmluZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzgxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCi0jaW5jbHVkZSA8
WDExL1hhdG9tLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka3guaD4KLSNlbmRpZgotCi0jaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDE0LCAwKQotdm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3Rr
QWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKQotewotICAgICAgICBtX2FkanVz
dG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9zOwotICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1
ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7Ci19Ci0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfY29uZmln
dXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdkb3VibGUgdmFsdWUsIGdkb3VibGUgbG93
ZXIsIGdkb3VibGUgdXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91Ymxl
IHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFnZUluY3JlbWVudCwgZ2RvdWJsZSBwYWdlU2l6ZSkK
LXsKLSAgICBnX29iamVjdF9mcmVlemVfbm90aWZ5KEdfT0JKRUNUKGFkanVzdG1lbnQpKTsKLQot
ICAgIGdfb2JqZWN0X3NldChhZGp1c3RtZW50LAotICAgICAgICAgICAgICAgICAibG93ZXIiLCBs
b3dlciwKLSAgICAgICAgICAgICAgICAgInVwcGVyIiwgdXBwZXIsCi0gICAgICAgICAgICAgICAg
ICJzdGVwLWluY3JlbWVudCIsIHN0ZXBJbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgICJwYWdl
LWluY3JlbWVudCIsIHBhZ2VJbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgICJwYWdlLXNpemUi
LCBwYWdlU2l6ZSwKLSAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBnX29iamVjdF90aGF3
X25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7Ci0KLSAgICBndGtfYWRqdXN0bWVudF9jaGFu
Z2VkKGFkanVzdG1lbnQpOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoYWRqdXN0
bWVudCk7Ci19Ci0jZW5kaWYKLQotR2RrRGV2aWNlICpnZXREZWZhdWx0R0RLUG9pbnRlckRldmlj
ZShHZGtXaW5kb3cqIHdpbmRvdykKLXsKLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBH
ZGtEZXZpY2VNYW5hZ2VyICptYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdl
cihnZGtfd2luZG93X2dldF9kaXNwbGF5KHdpbmRvdykpOwotICAgIHJldHVybiBnZGtfZGV2aWNl
X21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFnZXIpOwotI2Vsc2UKLSAgICByZXR1cm4g
Z2RrX2RldmljZV9nZXRfY29yZV9wb2ludGVyKCk7Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9O
XzIKLX0KLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKLXZvaWQgZ2RrX3dpbmRv
d19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwgZ2ludCB5LCBnaW50
KiByb290WCwgZ2ludCogcm9vdFkpCi17Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9vcmlnaW4o
d2luZG93LCByb290WCwgcm9vdFkpOwotICAgICpyb290WCA9ICpyb290WCArIHg7Ci0gICAgKnJv
b3RZID0gKnJvb3RZICsgeTsKLX0KLSNlbmRpZgotCi1HZGtDdXJzb3IgKiBibGFua0N1cnNvcigp
Ci17Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi0gICAgcmV0dXJuIGdka19jdXJz
b3JfbmV3KEdES19CTEFOS19DVVJTT1IpOwotI2Vsc2UKLSAgICBHZGtDdXJzb3IgKiBjdXJzb3I7
Ci0gICAgR2RrUGl4bWFwICogc291cmNlOwotICAgIEdka1BpeG1hcCAqIG1hc2s7Ci0gICAgR2Rr
Q29sb3IgZm9yZWdyb3VuZCA9IHsgMCwgNjU1MzUsIDAsIDAgfTsgLy8gUmVkLgotICAgIEdka0Nv
bG9yIGJhY2tncm91bmQgPSB7IDAsIDAsIDAsIDY1NTM1IH07IC8vIEJsdWUuCi0gICAgc3RhdGlj
IGdjaGFyIGN1cnNvckJpdHNbXSA9IHsweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAs
IDB4MH07Ci0KLSAgICBzb3VyY2UgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vy
c29yQml0cywgOCwgOCk7Ci0gICAgbWFzayA9IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgw
LCBjdXJzb3JCaXRzLCA4LCA4KTsKLSAgICBjdXJzb3IgPSBnZGtfY3Vyc29yX25ld19mcm9tX3Bp
eG1hcChzb3VyY2UsIG1hc2ssICZmb3JlZ3JvdW5kLCAmYmFja2dyb3VuZCwgOCwgOCk7Ci0gICAg
Z2RrX3BpeG1hcF91bnJlZihzb3VyY2UpOwotICAgIGdka19waXhtYXBfdW5yZWYobWFzayk7Ci0g
ICAgcmV0dXJuIGN1cnNvcjsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkK
LX0KLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLWNvbnN0IGdjaGFyKiBndGtf
bWVudV9pdGVtX2dldF9sYWJlbChHdGtNZW51SXRlbSogbWVudUl0ZW0pCi17Ci0gICAgR3RrV2lk
Z2V0ICogbGFiZWwgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1lbnVJdGVtKSk7Ci0gICAg
aWYgKEdUS19JU19MQUJFTChsYWJlbCkpCi0gICAgICAgIHJldHVybiBndGtfbGFiZWxfZ2V0X3Rl
eHQoR1RLX0xBQkVMKGxhYmVsKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLy8gR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTYsIDApCi0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGlj
IGNhaXJvX2Zvcm1hdF90Ci1nZGtfY2Fpcm9fZm9ybWF0X2Zvcl9jb250ZW50KGNhaXJvX2NvbnRl
bnRfdCBjb250ZW50KQotewotICAgIHN3aXRjaCAoY29udGVudCkgewotICAgIGNhc2UgQ0FJUk9f
Q09OVEVOVF9DT0xPUjoKLSAgICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9SR0IyNDsKLSAgICBj
YXNlIENBSVJPX0NPTlRFTlRfQUxQSEE6Ci0gICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfQTg7
Ci0gICAgY2FzZSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBOgotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBDQUlST19GT1JNQVRfQVJHQjMyOwotICAgIH0KLX0KLQotc3RhdGljIGNhaXJv
X3N1cmZhY2VfdCoKLWdka19jYWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9f
Y29udGVudF90IGNvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQpCi17
Ci0gICAgY2Fpcm9fc3VyZmFjZV90ICogY29weTsKLSAgICBjYWlyb190ICogY3I7Ci0KLSAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBj
b250ZW50Ci0gICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2Up
ID49IHdpZHRoCi0gICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlKSA+PSBoZWlnaHQpCi0gICAgICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShz
dXJmYWNlKTsKLQotICAgIGNvcHkgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShnZGtfY2Fp
cm9fZm9ybWF0X2Zvcl9jb250ZW50KGNvbnRlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0KTsKLQotICAgIGNyID0gY2Fpcm9fY3JlYXRlKGNvcHkpOwotICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLSAg
ICBjYWlyb19kZXN0cm95KGNyKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgdm9p
ZAotY29udmVydF9hbHBoYShndWNoYXIgKiBkZXN0RGF0YSwgaW50IGRlc3RTdHJpZGUsCi0gICAg
ICAgICAgICAgIGd1Y2hhciAqIHNyY0RhdGEsIGludCBzcmNTdHJpZGUsCi0gICAgICAgICAgICAg
IGludCBzcmNYLCBpbnQgc3JjWSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGludCB4
LCB5OwotCi0gICAgc3JjRGF0YSArPSBzcmNTdHJpZGUgKiBzcmNZICsgc3JjWSAqIDQ7Ci0KLSAg
ICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZ3VpbnQzMiAqIHNyYyA9
IChndWludDMyICopIHNyY0RhdGE7Ci0KLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4
KyspIHsKLSAgICAgICAgICAgIGd1aW50IGFscGhhID0gc3JjW3hdID4+IDI0OwotCi0gICAgICAg
ICAgICBpZiAoIWFscGhhKSB7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAwXSA9
IDA7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAxXSA9IDA7Ci0gICAgICAgICAg
ICAgICAgZGVzdERhdGFbeCAqIDQgKyAyXSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAoKChzcmNbeF0gJiAweGZmMDAwMCkg
Pj4gMTYpICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3RE
YXRhW3ggKiA0ICsgMV0gPSAoKChzcmNbeF0gJiAweDAwZmYwMCkgPj4gIDgpICogMjU1ICsgYWxw
aGEgLyAyKSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMl0gPSAo
KChzcmNbeF0gJiAweDAwMDBmZikgPj4gIDApICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAzXSA9IGFscGhhOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3JjRGF0YSArPSBzcmNTdHJpZGU7Ci0gICAgICAgIGRlc3RE
YXRhICs9IGRlc3RTdHJpZGU7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotY29udmVydF9ub19h
bHBoYShndWNoYXIgKiBkZXN0RGF0YSwgaW50IGRlc3RTdHJpZGUsIGd1Y2hhciAqIHNyY0RhdGEs
Ci0gICAgICAgICAgICAgICAgIGludCBzcmNTdHJpZGUsIGludCBzcmNYLCBpbnQgc3JjWSwKLSAg
ICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGludCB4LCB5Owot
Ci0gICAgc3JjRGF0YSArPSBzcmNTdHJpZGUgKiBzcmNZICsgc3JjWCAqIDQ7Ci0KLSAgICBmb3Ig
KHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZ3VpbnQzMiAqIHNyYyA9IChndWlu
dDMyICopIHNyY0RhdGE7Ci0KLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsK
LSAgICAgICAgICAgIGRlc3REYXRhW3ggKiAzICsgMF0gPSBzcmNbeF0gPj4gMTY7Ci0gICAgICAg
ICAgICBkZXN0RGF0YVt4ICogMyArIDFdID0gc3JjW3hdID4+ICA4OwotICAgICAgICAgICAgZGVz
dERhdGFbeCAqIDMgKyAyXSA9IHNyY1t4XTsKLSAgICAgICAgfQotCi0gICAgICAgIHNyY0RhdGEg
Kz0gc3JjU3RyaWRlOwotICAgICAgICBkZXN0RGF0YSArPSBkZXN0U3RyaWRlOwotICAgIH0KLX0K
LQotLyoqCi0gKiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2U6Ci0gKiBAc3VyZmFjZTogc3Vy
ZmFjZSB0byBjb3B5IGZyb20KLSAqIEBzcmNfeDogU291cmNlIFggY29vcmRpbmF0ZSB3aXRoaW4g
QHN1cmZhY2UKLSAqIEBzcmNfeTogU291cmNlIFkgY29vcmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UK
LSAqIEB3aWR0aDogV2lkdGggaW4gcGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKLSAqIEBoZWlnaHQ6
IEhlaWdodCBpbiBwaXhlbHMgb2YgcmVnaW9uIHRvIGdldAotICoKLSAqIFRyYW5zZmVycyBpbWFn
ZSBkYXRhIGZyb20gYSAjY2Fpcm9fc3VyZmFjZV90IGFuZCBjb252ZXJ0cyBpdCB0byBhbiBSR0Io
QSkKLSAqIHJlcHJlc2VudGF0aW9uIGluc2lkZSBhICNHZGtQaXhidWYuIFRoaXMgYWxsb3dzIHlv
dSB0byBlZmZpY2llbnRseSByZWFkCi0gKiBpbmRpdmlkdWFsIHBpeGVscyBmcm9tIGNhaXJvIHN1
cmZhY2VzLiBGb3IgI0dka1dpbmRvd3MsIHVzZQotICogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV93aW5k
b3coKSBpbnN0ZWFkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYW4gUkdCIHBp
eGJ1ZiB3aXRoIDggYml0cyBwZXIgY2hhbm5lbC4gVGhlIHBpeGJ1ZgotICogd2lsbCBjb250YWlu
IGFuIGFscGhhIGNoYW5uZWwgaWYgdGhlIEBzdXJmYWNlIGNvbnRhaW5zIG9uZS4KLSAqCi0gKiBS
ZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogQSBuZXdseS1jcmVhdGVkIHBpeGJ1ZiB3aXRo
IGEgcmVmZXJlbmNlIGNvdW50Ci0gKiBvZiAxLCBvciAlTlVMTCBvbiBlcnJvcgotICoqLwotR2Rr
UGl4YnVmKgotZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCAqIHN1
cmZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY1gsIGludCBzcmNZLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAg
ICBjYWlyb19jb250ZW50X3QgY29udGVudDsKLSAgICBHZGtQaXhidWYgKiBkZXN0OwotCi0gICAg
LyogR2VuZXJhbCBzYW5pdHkgY2hlY2tzICovCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3Vy
ZmFjZSwgTlVMTCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3JjWCA+PSAwICYmIHNyY1kg
Pj0gMCwgTlVMTCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod2lkdGggPiAwICYmIGhlaWdo
dCA+IDAsIE5VTEwpOwotCi0gICAgY29udGVudCA9IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
c3VyZmFjZSkgfCBDQUlST19DT05URU5UX0NPTE9SOwotICAgIGRlc3QgPSBnZGtfcGl4YnVmX25l
dyhHREtfQ09MT1JTUEFDRV9SR0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICEhKGNvbnRl
bnQgJiBDQUlST19DT05URU5UX0FMUEhBKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBzdXJmYWNl
ID0gZ2RrX2NhaXJvX3N1cmZhY2VfY29lcmNlX3RvX2ltYWdlKHN1cmZhY2UsIGNvbnRlbnQsIHNy
Y1ggKyB3aWR0aCwgc3JjWSArIGhlaWdodCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJm
YWNlKTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgfHwgIWRlc3QpIHsK
LSAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoZ2RrX3BpeGJ1Zl9nZXRfaGFzX2FscGhhKGRlc3QpKQot
ICAgICAgICBjb252ZXJ0X2FscGhhKGdka19waXhidWZfZ2V0X3BpeGVscyhkZXN0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGRlc3QpLAotICAgICAg
ICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAot
ICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3Vy
ZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgIHNyY1gsIHNyY1ksCi0gICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgY29udmVydF9ub19h
bHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNYLCBzcmNZLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJm
YWNlKTsKLSAgICByZXR1cm4gZGVzdDsKLX0KLQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0
LCAwKQotdm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQg
KndpZHRoLCBpbnQgKmhlaWdodCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdES19JU19QSVhN
QVAoZHJhd2FibGUpIHx8IEdES19JU19XSU5ET1coZHJhd2FibGUpKTsKLQotICAgIGlmIChHREtf
SVNfUElYTUFQKGRyYXdhYmxlKSkgewotICAgICAgICBnZGtfcGl4bWFwX2dldF9zaXplKEdES19Q
SVhNQVAoZHJhd2FibGUpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEdka1dpbmRvdyAqd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgKndp
ZHRoID0gZ2RrX3dpbmRvd19nZXRfd2lkdGgod2luZG93KTsKLSAgICAqaGVpZ2h0ID0gZ2RrX3dp
bmRvd19nZXRfaGVpZ2h0KHdpbmRvdyk7Ci19Ci0jZWxzZQotdm9pZCBnZXRHZGtEcmF3YWJsZVNp
emUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKLXsKLSAg
ICBnZGtfZHJhd2FibGVfZ2V0X3NpemUoZHJhd2FibGUsIHdpZHRoLCBoZWlnaHQpOwotfQotI2Vu
ZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQotCi0jZW5kaWYgLy8gR1RLX0FQSV9W
RVJTSU9OXzIKLQotI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwgMjcsIDEpCi1nYm9vbGVhbiBn
X3NpZ25hbF9hY2N1bXVsYXRvcl9maXJzdF93aW5zKEdTaWduYWxJbnZvY2F0aW9uSGludCAqaW52
b2NhdGlvbkhpbnQsIEdWYWx1ZSAqcmV0dXJuQWNjdW11bGF0b3IsIGNvbnN0IEdWYWx1ZSAqaGFu
ZGxlclJldHVybiwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX3ZhbHVlX2NvcHkoaGFuZGxlclJl
dHVybiwgcmV0dXJuQWNjdW11bGF0b3IpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLSNlbmRpZgot
Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQotY2Fpcm9fc3VyZmFjZV90ICpnZGtf
d2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoR2RrV2luZG93ICp3aW5kb3csIGNhaXJvX2Nv
bnRlbnRfdCBjb250ZW50LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fdCAq
Y2Fpcm9Db250ZXh0ID0gZ2RrX2NhaXJvX2NyZWF0ZSh3aW5kb3cpOwotICAgIGNhaXJvX3N1cmZh
Y2VfdCAqY2Fpcm9TdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjYWlyb0NvbnRleHQpOwotICAg
IGNhaXJvX3N1cmZhY2VfdCAqbmV3U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfY3JlYXRlX3NpbWls
YXIoY2Fpcm9TdXJmYWNlLCBjb250ZW50LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBjYWlyb19kZXN0
cm95KGNhaXJvQ29udGV4dCk7Ci0gICAgcmV0dXJuIG5ld1N1cmZhY2U7Ci19Ci0jZW5kaWYgLy8g
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywg
MywgNikKLSNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQotc3RhdGljIGludCBnZXRTY3JlZW5DdXJy
ZW50RGVza3RvcChHZGtTY3JlZW4gKnNjcmVlbikKLXsKLSAgICBEaXNwbGF5ICpkaXNwbGF5ID0g
R0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKLSAg
ICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3BsYXksIEdES19TQ1JFRU5fWE5V
TUJFUihzY3JlZW4pKTsKLSAgICBBdG9tIGN1cnJlbnREZXNrdG9wID0gWEludGVybkF0b20oZGlz
cGxheSwgIl9ORVRfQ1VSUkVOVF9ERVNLVE9QIiwgVHJ1ZSk7Ci0KLSAgICBBdG9tIHR5cGU7Ci0g
ICAgaW50IGZvcm1hdDsKLSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7
Ci0gICAgdW5zaWduZWQgY2hhciAqcmV0dXJuZWREYXRhID0gTlVMTDsKLSAgICBYR2V0V2luZG93
UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRvdywgY3VycmVudERlc2t0b3AsIDAsIEdfTUFYTE9O
RywgRmFsc2UsIFhBX0NBUkRJTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAmdHlwZSwgJmZv
cm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVyLCAmcmV0dXJuZWREYXRhKTsKLQotICAgIGlu
dCB3b3Jrc3BhY2UgPSAwOwotICAgIGlmICh0eXBlID09IFhBX0NBUkRJTkFMICYmIGZvcm1hdCA9
PSAzMiAmJiBpdGVtc0NvdW50ID4gMCkKLSAgICAgICAgd29ya3NwYWNlID0gKGludClyZXR1cm5l
ZERhdGFbMF07Ci0KLSAgICBpZiAocmV0dXJuZWREYXRhKQotICAgICAgICBYRnJlZShyZXR1cm5l
ZERhdGEpOwotCi0gICAgcmV0dXJuIHdvcmtzcGFjZTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0U2Ny
ZWVuV29ya0FyZWEoR2RrU2NyZWVuICpzY3JlZW4sIEdka1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAg
ICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRf
ZGlzcGxheShzY3JlZW4pKTsKLSAgICBBdG9tIHdvcmtBcmVhID0gWEludGVybkF0b20oZGlzcGxh
eSwgIl9ORVRfV09SS0FSRUEiLCBUcnVlKTsKLQotICAgIC8qIERlZmF1bHRzIGluIGNhc2Ugb2Yg
ZXJyb3IuICovCi0gICAgYXJlYS0+eCA9IDA7Ci0gICAgYXJlYS0+eSA9IDA7Ci0gICAgYXJlYS0+
d2lkdGggPSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pOwotICAgIGFyZWEtPmhlaWdodCA9
IGdka19zY3JlZW5fZ2V0X2hlaWdodChzY3JlZW4pOwotCi0gICAgaWYgKHdvcmtBcmVhID09IE5v
bmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdpbmRvdyByb290V2luZG93ID0gWFJvb3RXaW5k
b3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVNQkVSKHNjcmVlbikpOwotICAgIEF0b20gdHlwZTsK
LSAgICBpbnQgZm9ybWF0OwotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXNDb3VudCwgYnl0ZXNBZnRl
cjsKLSAgICB1bnNpZ25lZCBjaGFyICpyZXR1cm5lZERhdGEgPSAwOwotICAgIGludCByZXN1bHQg
PSBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRvdywgd29ya0FyZWEsIDAsIDQg
KiAzMiAvKiBNYXggbGVuZ3RoICovLCBGYWxzZSwgQW55UHJvcGVydHlUeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZpdGVtc0NvdW50LCAm
Ynl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTdWNjZXNzIHx8
IHR5cGUgPT0gTm9uZSB8fCAhZm9ybWF0IHx8IGJ5dGVzQWZ0ZXIgfHwgaXRlbXNDb3VudCAlIDQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGludCBkZXNrdG9wID0gZ2V0U2NyZWVuQ3VycmVudERl
c2t0b3Aoc2NyZWVuKTsKLSAgICBsb25nICp3b3JrQXJlYXMgPSAobG9uZyAqKXJldHVybmVkRGF0
YTsKLSAgICBhcmVhLT54ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0XTsKLSAgICBhcmVhLT55ID0g
d29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMV07Ci0gICAgYXJlYS0+d2lkdGggPSB3b3JrQXJlYXNb
ZGVza3RvcCAqIDQgKyAyXTsKLSAgICBhcmVhLT5oZWlnaHQgPSB3b3JrQXJlYXNbZGVza3RvcCAq
IDQgKyAzXTsKLQotICAgIFhGcmVlKHJldHVybmVkRGF0YSk7Ci19Ci0jZW5kaWYgLy8gR0RLX1dJ
TkRPV0lOR19YMTEKLQotdm9pZCBnZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmthcmVhKEdka1Nj
cmVlbiAqc2NyZWVuLCBpbnQgbW9uaXRvciwgR2RrUmVjdGFuZ2xlICphcmVhKQotewotICAgIGdk
a19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCBhcmVhKTsKLQot
I2lmZGVmIEdES19XSU5ET1dJTkdfWDExCi0gICAgR2RrUmVjdGFuZ2xlIHdvcmtBcmVhOwotICAg
IGdldFNjcmVlbldvcmtBcmVhKHNjcmVlbiwgJndvcmtBcmVhKTsKLSAgICBnZGtfcmVjdGFuZ2xl
X2ludGVyc2VjdCgmd29ya0FyZWEsIGFyZWEsIGFyZWEpOwotI2VuZGlmCi19Ci0jZW5kaWYgLy8g
R1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrVmVyc2lvbmluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDM5ZWUyZGMw
YTU0NDEwYWE4N2RlMWM2NGZiYzZkYzQ0NTI4N2Y4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwg
Uy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0a1ZlcnNpb25pbmdfaAotI2RlZmluZSBHdGtWZXJz
aW9uaW5nX2gKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLWNvbXBhdC5oPgotI2VuZGlmCi0KLUdfQkVH
SU5fREVDTFMKLQotLy8gTWFjcm9zIHRvIGF2b2lkIGRlcHJlY2F0aW9uIGNoZWNraW5nIGNodXJu
Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0jZGVmaW5lIEdES19XSU5ET1dfWFdJTkRPVyh3
aW5kb3cpIChnZGtfeDExX3dpbmRvd19nZXRfeGlkKHdpbmRvdykpCi0jZWxzZQotR2RrUGl4YnVm
KiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBp
bnQgc3JjWCwgaW50IHNyY1ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotdm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJh
d2FibGUqIGRyYXdhYmxlLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7Ci0jZW5kaWYKLQotI2lm
ICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgNCkKLSNkZWZpbmUgZ2RrX3BpeG1hcF9nZXRfc2l6
ZSBnZGtfZHJhd2FibGVfZ2V0X3NpemUKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAy
MywgNCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKLSNkZWZpbmUgZ2RrX3dp
bmRvd19nZXRfZGlzcGxheSh3aW5kb3cpIGdka19kcmF3YWJsZV9nZXRfZGlzcGxheSh3aW5kb3cp
Ci0jZGVmaW5lIGdka193aW5kb3dfZ2V0X3Zpc3VhbCBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbAot
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCAwKQotCi0jaWYgIUdUS19DSEVDS19W
RVJTSU9OKDIsIDIyLCAwKQotY2Fpcm9fc3VyZmFjZV90KiBnZGtfd2luZG93X2NyZWF0ZV9zaW1p
bGFyX3N1cmZhY2UoR2RrV2luZG93KiB3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIy
LCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQotI2RlZmluZSBnZGtfdmlz
dWFsX2dldF9kZXB0aCh2aXN1YWwpICh2aXN1YWwpLT5kZXB0aAotI2RlZmluZSBnZGtfdmlzdWFs
X2dldF9iaXRzX3Blcl9yZ2IodmlzdWFsKSAodmlzdWFsKS0+Yml0c19wZXJfcmdiCi0jZGVmaW5l
IGdka19kcmFnX2NvbnRleHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSAoY29udGV4dCkt
PmFjdGlvbgotI2RlZmluZSBnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpIChj
b250ZXh0KS0+YWN0aW9ucwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQot
Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAwKQotI2RlZmluZSBndGtfd2lkZ2V0X2dl
dF9yZWFsaXplZCh3aWRnZXQpIEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQotI2RlZmluZSBn
dGtfd2lkZ2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdT
KCh3aWRnZXQpLCBHVEtfUkVBTElaRUQpCi0jZGVmaW5lIGd0a19yYW5nZV9nZXRfbWluX3NsaWRl
cl9zaXplKHJhbmdlKSAocmFuZ2UpLT5taW5fc2xpZGVyX3NpemUKLSNlbmRpZiAvLyBHVEtfQ0hF
Q0tfVkVSU0lPTigyLCAyMCwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkK
LSNkZWZpbmUgZ3RrX3dpZGdldF9pc190b3BsZXZlbCh3aWRnZXQpIEdUS19XSURHRVRfVE9QTEVW
RUwod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpIEdUS19X
SURHRVRfUkVBTElaRUQod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93
KHdpZGdldCkgIUdUS19XSURHRVRfTk9fV0lORE9XKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdl
dF9nZXRfY2FuX2ZvY3VzKHdpZGdldCkgR1RLX1dJREdFVF9DQU5fRk9DVVMod2lkZ2V0KQotI2Rl
ZmluZSBndGtfd2lkZ2V0X2lzX3NlbnNpdGl2ZSh3aWRnZXQpIEdUS19XSURHRVRfSVNfU0VOU0lU
SVZFKHdpZGdldCkKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKLQotI2lm
ICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfdmlz
aWJsZSh3aWRnZXQsIEZBTFNFKSBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtf
VklTSUJMRSkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3aWRnZXQpIChHVEtfV0lE
R0VUX0ZMQUdTKHdpZGdldCkgJiBHVEtfVklTSUJMRSkKLQotI2RlZmluZSBndGtfd2lkZ2V0X3Nl
dF93aW5kb3cod2lkZ2V0LCBuZXdfd2luZG93KSAod2lkZ2V0KS0+d2luZG93ID0gKG5ld193aW5k
b3cpCi0jZGVmaW5lIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh3aWRnZXQsIFRSVUUpIEdUS19X
SURHRVRfU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfQ0FOX0ZPQ1VTKQotI2RlZmluZSBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgqKGFsbG9jKSA9ICh3aWRnZXQpLT5h
bGxvY2F0aW9uKQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxs
b2MpICgod2lkZ2V0KS0+YWxsb2NhdGlvbiA9ICooYWxsb2MpKQotI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDIsIDE4LCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQot
dm9pZCBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4
LCBnaW50IHksIGdpbnQqIHJvb3RYLCBnaW50KiByb290WSk7Ci0jZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTcsIDMpCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi1j
b25zdCBnY2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKLSNlbmRp
ZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLQotCi0jaWYgIUdUS19DSEVDS19WRVJT
SU9OKDIsIDE0LCAwKQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAod2lk
Z2V0KS0+d2luZG93Ci0jZGVmaW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChhZGop
LT52YWx1ZQotI2RlZmluZSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAoZGlh
bG9nKS0+dmJveAotI2RlZmluZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpIChk
aWFsb2cpLT5hY3Rpb25fYXJlYQotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0
aChkYXRhKSAoZGF0YSktPmxlbmd0aAotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2Rh
dGEoZGF0YSkgKGRhdGEpLT5kYXRhCi0jZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFy
Z2V0KGRhdGEpIChkYXRhKS0+dGFyZ2V0Ci0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9wYWdl
X3NpemUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKLSNkZWZp
bmUgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFsdWUg
PSBuZXdWYWx1ZSkKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3VmFs
dWUpICgoYWRqKS0+bG93ZXIgPSBuZXdWYWx1ZSkKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0
X3VwcGVyKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKLQotdm9pZCBn
dGtfYWRqdXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2RvdWJs
ZSB2YWx1ZSwgZ2RvdWJsZSBsb3dlciwgZ2RvdWJsZSB1cHBlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdkb3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50
LCBnZG91YmxlIHBhZ2VTaXplKTsKLQotdm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3Rr
QWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKTsKLSNlbmRpZiAvLyBHVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxNCwgMCkKLQotR2RrRGV2aWNlKiBnZXREZWZhdWx0R0RLUG9pbnRlckRl
dmljZShHZGtXaW5kb3cqIHdpbmRvdyk7Ci1HZGtDdXJzb3IqIGJsYW5rQ3Vyc29yKCk7Ci0KLSNp
ZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQotZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11
bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQqIGludm9jYXRpb25IaW50LCBH
VmFsdWUqIHJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdw
b2ludGVyIGRhdGEpOwotI2VuZGlmCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikK
LXZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKiwgaW50IG1v
bml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSk7Ci0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2Vu
ZGlmIC8vIEd0a1ZlcnNpb25pbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjAzNzZiYzc3MTRiMzk1NDkwMDEyYjk3Nzk2YTE5OTdmY2EzYzBjYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5M
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldpZGdldEJhY2tpbmdTdG9yZS5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNp
bmNsdWRlIDxjYWlyby14bGliLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnZGsv
Z2RreC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdpZGdldEJhY2tpbmdTdG9y
ZVByaXZhdGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdpZGdldEJhY2tpbmdTdG9yZVBy
aXZhdGUpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgRGlz
cGxheSogbV9kaXNwbGF5OwotICAgIFBpeG1hcCBtX3BpeG1hcDsKLSAgICBHQyBtX2djOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLQotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGU+IGNyZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSh3aWRnZXQsIHNpemUpKTsKLSAgICB9Ci0KLSAgICB+
V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBYRnJlZVBpeG1hcCht
X2Rpc3BsYXksIG1fcGl4bWFwKTsKLSAgICAgICAgWEZyZWVHQyhtX2Rpc3BsYXksIG1fZ2MpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBXZSBrZWVwIHR3byBjb3BpZXMgb2YgdGhlIHN1cmZh
Y2UgaGVyZSwgd2hpY2ggd2lsbCBkb3VibGUgdGhlIG1lbW9yeSB1c2FnZSwgYnV0IGluY3JlYXNl
Ci0gICAgLy8gc2Nyb2xsaW5nIHBlcmZvcm1hbmNlIHNpbmNlIHdlIGRvIG5vdCBoYXZlIHRvIGtl
ZXAgcmVhbGxvY2F0aW5nIGEgbWVtb3J5IHJlZ2lvbiBkdXJpbmcKLSAgICAvLyBxdWljayBzY3Jv
bGxpbmcgcmVxdWVzdHMuCi0gICAgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZShHdGtXaWRnZXQq
IHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIEdka1Zpc3VhbCog
dmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdpZGdldCk7Ci0gICAgICAgIEdka1NjcmVl
biogc2NyZWVuID0gZ2RrX3Zpc3VhbF9nZXRfc2NyZWVuKHZpc3VhbCk7Ci0gICAgICAgIG1fZGlz
cGxheSA9IEdES19TQ1JFRU5fWERJU1BMQVkoc2NyZWVuKTsKLSAgICAgICAgbV9waXhtYXAgPSBY
Q3JlYXRlUGl4bWFwKG1fZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdES19XSU5ET1dfWElEKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgo
dmlzdWFsKSk7Ci0gICAgICAgIG1fZ2MgPSBYQ3JlYXRlR0MobV9kaXNwbGF5LCBtX3BpeG1hcCwg
MCwgMCk7Ci0KLSAgICAgICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNl
X2NyZWF0ZShtX2Rpc3BsYXksIG1fcGl4bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0KLX07Ci0KLVBhc3NPd25QdHI8V2lk
Z2V0QmFja2luZ1N0b3JlPiBXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHdGtXaWRnZXQqIHdp
ZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdp
ZGdldEJhY2tpbmdTdG9yZSh3aWRnZXQsIHNpemUpKTsKLX0KLQotV2lkZ2V0QmFja2luZ1N0b3Jl
OjpXaWRnZXRCYWNraW5nU3RvcmUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNp
emUpCi0gICAgOiBtX3ByaXZhdGUoV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRlKHdp
ZGdldCwgc2l6ZSkpCi0gICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotV2lkZ2V0QmFja2luZ1N0
b3JlOjp+V2lkZ2V0QmFja2luZ1N0b3JlKCkKLXsKLX0KLQotY2Fpcm9fc3VyZmFjZV90KiBXaWRn
ZXRCYWNraW5nU3RvcmU6OmNhaXJvU3VyZmFjZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lkIFdpZGdldEJhY2tpbmdTdG9yZTo6c2Nyb2xsKGNv
bnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsK
LSAgICBJbnRSZWN0IHRhcmdldFJlY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgdGFyZ2V0UmVjdC5tb3Zl
KHNjcm9sbE9mZnNldCk7Ci0gICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc2Nyb2xsUmVjdCk7Ci0g
ICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpKTsKLSAgICBYQ29weUFy
ZWEobV9wcml2YXRlLT5tX2Rpc3BsYXksIG1fcHJpdmF0ZS0+bV9waXhtYXAsIG1fcHJpdmF0ZS0+
bV9waXhtYXAsIG1fcHJpdmF0ZS0+bV9nYywgCi0gICAgICAgICAgICAgIHRhcmdldFJlY3QueCgp
IC0gc2Nyb2xsT2Zmc2V0LndpZHRoKCksIHRhcmdldFJlY3QueSgpIC0gc2Nyb2xsT2Zmc2V0Lmhl
aWdodCgpLAotICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVp
Z2h0KCksCi0gICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSk7Ci0g
ICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3ByaXZhdGUtPm1fc3VyZmFj
ZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJl
Y3QueCgpLCB0YXJnZXRSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9LVVJMR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxZmVhY2E5NmE0YTA5ZjRiYmQwNzA4
MDliNjhlMTg1NDQxNjhmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1
ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcgS1VS
TDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpIHx8ICFpc0xv
Y2FsRmlsZSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHUmVmUHRyPEdGaWxl
PiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aCgpLnV0ZjgoKS5kYXRh
KCkpKTsKLSAgICBHT3duUHRyPGNoYXI+IGZpbGVuYW1lKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdl
dCgpKSk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lVG9TdHJpbmcoZmlsZW5hbWUuZ2V0KCkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNWJkMGZiOGNlOGMwYzE4YmViYThiYTYyNWNkNzAwZDEzNzA2YmIwOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5o
IgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBjb25zdCBjaGFy
Kj4gSW50Q29uc3RDaGFySGFzaE1hcDsKLQotc3RhdGljIHZvaWQgYmFja3NwYWNlQ2FsbGJhY2so
R3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewot
ICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJiYWNrc3BhY2UiKTsK
LSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiRGVsZXRlQmFja3dhcmQi
KTsKLX0KLQotc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQs
IGdib29sZWFuIHNlbGVjdCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0g
ICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNlbGVjdC1hbGwiKTsK
LSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2VsZWN0
QWxsIiA6ICJVbnNlbGVjdCIpOwotfQotCi1zdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxsYmFj
ayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17
Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImN1dC1jbGlwYm9h
cmQiKTsKLSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ3V0Iik7Ci19
Ci0KLXN0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwg
S2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9l
bWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7Ci0gICAgdHJhbnNsYXRv
ci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHkiKTsKLX0KLQotc3RhdGljIHZvaWQgcGFz
dGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0
b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdp
ZGdldCwgInBhc3RlLWNsaXBib2FyZCIpOwotICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0
b3JDb21tYW5kKCJQYXN0ZSIpOwotfQotCi1zdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVDYWxs
YmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAgIC8v
IFdlIGRvbid0IHN1cHBvcnQgdG9nZ2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2RlLCBidXQgdGhlIGRl
ZmF1bHQgY2FsbGJhY2sgZXhwZWN0cwotICAgIC8vIHRoZSBHdGtUZXh0VmlldyB0byBoYXZlIGEg
bGF5b3V0LCBzbyB3ZSBoYW5kbGUgdGhpcyBzaWduYWwganVzdCB0byBzdG9wIGl0LgotICAgIGdf
c2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUtb3ZlcndyaXRlIik7
Ci19Ci0KLS8vIEdUSysgd2lsbCBzdGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMgdG8gdGhlIHdlYiB2
aWV3LiBTbyB3ZSBjYW4gc2FmZWx5IHN0b3Agc2lnbmFsCi0vLyBlbWlzc2lvbiB3aXRob3V0IGJy
ZWFraW5nIGFjY2Vzc2liaWxpdHkuCi1zdGF0aWMgdm9pZCBwb3B1cE1lbnVDYWxsYmFjayhHdGtX
aWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAgIGdfc2lnbmFsX3N0
b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwb3B1cC1tZW51Iik7Ci19Ci0KLXN0YXRpYyB2
b2lkIHNob3dIZWxwQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xh
dG9yKikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2hv
dy1oZWxwIik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxldGVDb21tYW5k
c1tdWzJdID0gewotICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAiRGVsZXRl
Rm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJzCi0gICAgeyAi
RGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAg
ICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcwotICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIs
ICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBX
b3JkcwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRP
ZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcwotICAgIHsgIkRlbGV0ZVRvQmVn
aW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAg
ICB9LCAvLyBMaW5lIGVuZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwg
IkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBoIGVu
ZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQ
YXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocwotICAgIHsgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKLX07Ci0KLXN0YXRpYyB2b2lkIGRl
bGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVsZXRlVHlwZSBk
ZWxldGVUeXBlLCBnaW50IGNvdW50LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikK
LXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiZGVsZXRlLWZy
b20tY3Vyc29yIik7Ci0gICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwotCi0g
ICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9IEdfTl9FTEVNRU5UUyBoZXJlIHJlc3Vs
dHMgaW4gYSBjb21waWxlciB3YXJuaW5nCi0gICAgLy8gdGhhdCB0aGUgY29uZGl0aW9uIGlzIGFs
d2F5cyB0cnVlLgotCi0gICAgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9XT1JEUykgewot
ICAgICAgICBpZiAoIWRpcmVjdGlvbikgewotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICAgICAgdHJhbnNs
YXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21t
YW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7Ci0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5k
aW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7Ci0gICAgICAg
IGlmICghZGlyZWN0aW9uKQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRv
ckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGluZSIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZMaW5l
Iik7Ci0gICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfUEFSQUdSQVBIUykg
ewotICAgICAgICBpZiAoIWRpcmVjdGlvbikKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgi
TW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByYXdDb21t
YW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9uXTsKLSAgICBpZiAo
IXJhd0NvbW1hbmQpCi0gICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFi
cyhjb3VudCk7IGkrKykKLSAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1h
bmQocmF3Q29tbWFuZCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtNb3ZlQ29t
bWFuZHNbXVs0XSA9IHsKLSAgICB7ICJNb3ZlQmFja3dhcmQiLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIGdyYXBoZW1lCi0gICAgeyAi
TW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUmln
aHQiLAotICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAg
ICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8vIExl
ZnQvcmlnaHQgZ3JhcGhlbWUKLSAgICB7ICJNb3ZlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZCIsCi0gICAgICAiTW92ZVdvcmRCYWNr
d2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmRBbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2FyZCB3b3JkCi0gICAg
eyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
RG93biIsCi0gICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAg
ICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwgLy8g
VXAvZG93biBsaW5lCi0gICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09m
TGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRzCi0gICAgeyAiTW92ZVBh
cmFncmFwaEZvcndhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFyYWdyYXBo
QmFja3dhcmQiLAotICAgICAgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9u
IiwgICAgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgIH0s
IC8vIFVwL2Rvd24gcGFyYWdyYXBocwotICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
IiwgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiLAotICAgICAgIk1v
dmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAiTW92ZVRvRW5k
T2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBo
IGVuZHMuCi0gICAgeyAiTW92ZVBhZ2VVcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJNb3ZlUGFnZURvd24iLAotICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rp
b24iLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICAgICAgICAgIH0sIC8vIFVwL2Rvd24gcGFnZQotICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mRG9j
dW1lbnQiLCAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIsCi0gICAg
ICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICJNb3Zl
VG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgfSwgLy8gQmVnaW4vZW5kIG9m
IGJ1ZmZlcgotICAgIHsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAotICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
Ly8gSG9yaXpvbnRhbCBwYWdlIG1vdmVtZW50Ci19OwotCi1zdGF0aWMgdm9pZCBtb3ZlQ3Vyc29y
Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a01vdmVtZW50U3RlcCBzdGVwLCBnaW50IGNv
dW50LCBnYm9vbGVhbiBleHRlbmRTZWxlY3Rpb24sIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFu
c2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJt
b3ZlLWN1cnNvciIpOwotICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKLSAg
ICBpZiAoZXh0ZW5kU2VsZWN0aW9uKQotICAgICAgICBkaXJlY3Rpb24gKz0gMjsKLQotICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RlcCkgPj0gR19OX0VMRU1FTlRTKGd0a01vdmVDb21t
YW5kcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBn
dGtNb3ZlQ29tbWFuZHNbc3RlcF1bZGlyZWN0aW9uXTsKLSAgICBpZiAoIXJhd0NvbW1hbmQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsr
KQotICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5k
KTsKLX0KLQotS2V5QmluZGluZ1RyYW5zbGF0b3I6OktleUJpbmRpbmdUcmFuc2xhdG9yKCkKLSAg
ICA6IG1fbmF0aXZlV2lkZ2V0KGd0a190ZXh0X3ZpZXdfbmV3KCkpCi17Ci0gICAgZ19zaWduYWxf
Y29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0soYmFj
a3NwYWNlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lk
Z2V0LmdldCgpLCAiY3V0LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY3V0Q2xpcGJvYXJkQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAi
Y29weS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKGNvcHlDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwYXN0ZS1jbGlw
Ym9hcmQiLCBHX0NBTExCQUNLKHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAic2VsZWN0LWFsbCIsIEdfQ0FM
TEJBQ0soc2VsZWN0QWxsQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1f
bmF0aXZlV2lkZ2V0LmdldCgpLCAibW92ZS1jdXJzb3IiLCBHX0NBTExCQUNLKG1vdmVDdXJzb3JD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0
KCksICJkZWxldGUtZnJvbS1jdXJzb3IiLCBHX0NBTExCQUNLKGRlbGV0ZUZyb21DdXJzb3JDYWxs
YmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCks
ICJ0b2dnbGUtb3ZlcndyaXRlIiwgR19DQUxMQkFDSyh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayks
IHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwb3B1
cC1tZW51IiwgR19DQUxMQkFDSyhwb3B1cE1lbnVDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJzaG93LWhlbHAiLCBHX0NBTExCQUNL
KHNob3dIZWxwQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQotc3RydWN0IEtleUNvbWJpbmF0aW9uRW50
cnkgewotICAgIHVuc2lnbmVkIGdka0tleUNvZGU7Ci0gICAgdW5zaWduZWQgc3RhdGU7Ci0gICAg
Y29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlDb21iaW5hdGlvbkVudHJ5
IGtleURvd25FbnRyaWVzW10gPSB7Ci0gICAgeyBHREtfYiwgICAgICAgICBHREtfQ09OVFJPTF9N
QVNLLCAgICAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICB9LAotICAgIHsgR0RLX2ksICAgICAg
ICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgfSwKLSAg
ICB7IEdES19Fc2NhcGUsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbmNl
bCIgICAgICAgIH0sCi0gICAgeyBHREtfZ3JlYXRlciwgICBHREtfQ09OVFJPTF9NQVNLLCAgICAg
ICAgICAgICAgICJDYW5jZWwiICAgICAgICB9LAotfTsKLQotLy8gVGhlc2UgY29tbWFuZHMgYXJl
IHRleHQgaW5zZXJ0aW9uIGNvbW1hbmRzLCBzbyBzaG91bGQgdGFrZSBwbGFjZQotLy8gd2hpbGUg
aGFuZGxpbmcgdGhlIEtleVByZXNzIGV2ZW50Lgotc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0aW9u
RW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7Ci0gICAgeyBHREtfVGFiLCAgICAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICB9LAotICAgIHsgR0RLX1Rh
YiwgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIg
fSwKLX07Ci0KLXZvaWQgS2V5QmluZGluZ1RyYW5zbGF0b3I6OmdldEVkaXRvckNvbW1hbmRzRm9y
S2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBFdmVudFR5cGUgdHlwZSwgVmVjdG9yPFdURjo6
U3RyaW5nPiYgY29tbWFuZExpc3QpCi17Ci0gICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuY2xl
YXIoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ3RrX2JpbmRpbmdzX2FjdGl2
YXRlX2V2ZW50KEdUS19PQkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0KCkpLCBldmVudCk7Ci0jZWxz
ZQotICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVudChHX09CSkVDVChtX25hdGl2ZVdpZGdl
dC5nZXQoKSksIGV2ZW50KTsKLSNlbmRpZgotCi0gICAgaWYgKCFtX3BlbmRpbmdFZGl0b3JDb21t
YW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKG1fcGVuZGluZ0Vk
aXRvckNvbW1hbmRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5RG93bkNvbW1hbmRzTWFwLCAoKSk7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlQcmVzc0NvbW1h
bmRzTWFwLCAoKSk7Ci0KLSAgICBpZiAoa2V5RG93bkNvbW1hbmRzTWFwLmlzRW1wdHkoKSkgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleURvd25FbnRy
aWVzKTsgaSsrKQotICAgICAgICAgICAga2V5RG93bkNvbW1hbmRzTWFwLnNldChrZXlEb3duRW50
cmllc1tpXS5zdGF0ZSA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLmdka0tleUNvZGUsIGtleURv
d25FbnRyaWVzW2ldLm5hbWUpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
X05fRUxFTUVOVFMoa2V5UHJlc3NFbnRyaWVzKTsgaSsrKQotICAgICAgICAgICAga2V5UHJlc3ND
b21tYW5kc01hcC5zZXQoa2V5UHJlc3NFbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5UHJlc3NF
bnRyaWVzW2ldLmdka0tleUNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0K
LSAgICAvLyBTcGVjaWFsLWNhc2UgZW50ZXIga2V5cyBmb3Igd2Ugd2FudCB0aGVtIHRvIHdvcmsg
cmVnYXJkbGVzcyBvZiBtb2RpZmllci4KLSAgICBpZiAoKGV2ZW50LT5rZXl2YWwgPT0gR0RLX1Jl
dHVybiB8fCBldmVudC0+a2V5dmFsID09IEdES19LUF9FbnRlciB8fCBldmVudC0+a2V5dmFsID09
IEdES19JU09fRW50ZXIpICYmIHR5cGUgPT0gS2V5UHJlc3MpIHsKLSAgICAgICAgY29tbWFuZExp
c3QuYXBwZW5kKCJJbnNlcnROZXdMaW5lIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2Rl
KCkgZG9lcyB0aGF0LgotICAgIGludCBtYXBLZXkgPSBldmVudC0+c3RhdGUgPDwgMTYgfCBldmVu
dC0+a2V5dmFsOwotICAgIGlmIChtYXBLZXkpIHsKLSAgICAgICAgSGFzaE1hcDxpbnQsIGNvbnN0
IGNoYXIqPiogY29tbWFuZE1hcCA9IHR5cGUgPT0gS2V5RG93biA/ICAma2V5RG93bkNvbW1hbmRz
TWFwIDogJmtleVByZXNzQ29tbWFuZHNNYXA7Ci0gICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21t
YW5kU3RyaW5nID0gY29tbWFuZE1hcC0+Z2V0KG1hcEtleSkpIHsKLSAgICAgICAgICAgIGNvbW1h
bmRMaXN0LmFwcGVuZChjb21tYW5kU3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzY0MzZkZTZjYjg2M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgS2V5QmluZGlu
Z1RyYW5zbGF0b3JfaAotI2RlZmluZSBLZXlCaW5kaW5nVHJhbnNsYXRvcl9oCi0KLSNpbmNsdWRl
ICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS2V5QmluZGluZ1RyYW5zbGF0b3Ig
ewotcHVibGljOgotICAgIEtleUJpbmRpbmdUcmFuc2xhdG9yKCk7Ci0KLSAgICBlbnVtIEV2ZW50
VHlwZSB7IEtleURvd24sIEtleVByZXNzIH07Ci0gICAgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0Zv
cktleUV2ZW50KEdka0V2ZW50S2V5KiwgRXZlbnRUeXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+Jik7
Ci0gICAgdm9pZCBhZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7
IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmFwcGVuZChjb21tYW5kKTsgfQotCi1wcml2YXRlOgot
ICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX25hdGl2ZVdpZGdldDsKLSAgICBWZWN0b3I8V1RGOjpT
dHJpbmc+IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvTGFuZ3VhZ2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdl
R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhNzFlNTYxYzUzNDRjMDVl
ZjAzYmYxMjgzMzU2ZmM1MmE0MmZkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTGFuZ3VhZ2UuaCIKLQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUg
PGxvY2FsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFVzaW5nIHBhbmdvX2xhbmd1
YWdlX2dldF9kZWZhdWx0KCkgaGVyZSBpcyBub3QgYW4gb3B0aW9uLCBiZWNhdXNlCi0vLyBpdCBk
b2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxvY2FsZSBpbiBydW50aW1lLCBzbyBpdCByZXR1
cm5zCi0vLyBhbHdheXMgdGhlIHNhbWUgdmFsdWUuCi1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtTGFu
Z3VhZ2UoKQotewotICAgIGNoYXIqIGxvY2FsZURlZmF1bHQgPSBzZXRsb2NhbGUoTENfQ1RZUEUs
IE5VTEwpOwotCi0gICAgaWYgKCFsb2NhbGVEZWZhdWx0KQotICAgICAgICByZXR1cm4gU3RyaW5n
KCJjIik7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBub3JtYWxpemVkRGVmYXVsdChnX2FzY2lpX3N0
cmRvd24obG9jYWxlRGVmYXVsdCwgLTEpKTsKLSAgICBjaGFyKiBwdHIgPSBzdHJjaHIobm9ybWFs
aXplZERlZmF1bHQuZ2V0KCksICdfJyk7Ci0KLSAgICBpZiAocHRyKQotICAgICAgICAqcHRyID0g
Jy0nOwotCi0gICAgcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpLCAnLicpOwot
Ci0gICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9ICdcMCc7Ci0KLSAgICByZXR1cm4gU3RyaW5n
KG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1V
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzOwotICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kKHBsYXRmb3Jt
TGFuZ3VhZ2UoKSk7Ci0gICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci19Ci0gICAg
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3Ry
aW5nc0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5n
c0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMmNhYTJmOWRmMjUyZjY5
MjViYTIwMzRlNGNhNDU5MWJjMTViNmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmlu
Z3NHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2NhbGl6ZWRT
dHJpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIklu
dFNpemUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIq
IGd0a1N0b2NrTGFiZWwoY29uc3QgY2hhciogc3RvY2tJRCkKLXsKLSAgICBHdGtTdG9ja0l0ZW0g
aXRlbTsKLSAgICBpZiAoIWd0a19zdG9ja19sb29rdXAoc3RvY2tJRCwgJml0ZW0pKQotICAgICAg
ICByZXR1cm4gc3RvY2tJRDsKLSAgICByZXR1cm4gaXRlbS5sYWJlbDsKLX0KLQotU3RyaW5nIHN1
Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiU3VibWl0IikpOwotfQotCi1TdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3VibWl0IikpOwotfQotCi1TdHJpbmcgcmVzZXRC
dXR0b25EZWZhdWx0TGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJl
c2V0IikpOwotfQotCi1TdHJpbmcgZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiRGV0YWlscyIpKTsKLX0KLQotU3RyaW5nIHNlYXJj
aGFibGVJbmRleEludHJvZHVjdGlvbigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3JkczogIikp
OwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3NlIEZpbGUiKSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0
dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJDaG9vc2UgRmlsZXMiKSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2Vs
ZWN0ZWRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiKE5vbmUpIikp
OwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSkiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJPcGVuIExpbmsgaW4gTmV3IF9XaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIl9Eb3dubG9hZCBMaW5rZWQgRmlsZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkNvcHkgTGluayBMb2NfYXRpb24iKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiT3BlbiBfSW1hZ2UgaW4gTmV3IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQotewotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlNhX3ZlIEltYWdlIEFzIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNvcF95IEltYWdlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVXJsVG9DbGlwYm9hcmQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIkNvcHkgSW1hZ2UgX0FkZHJlc3MiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiT3BlbiBfVmlkZW8gaW4gTmV3IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJPcGVuIF9BdWRpbyBpbiBOZXcgV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJDb3BfeSBWaWRlbyBMaW5rIExvY2F0aW9uIikpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBBdWRpbyBMaW5rIExvY2F0aW9uIikpOwot
fQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scygpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1RvZ2dsZSBNZWRpYSBDb250cm9scyIpKTsK
LX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVG9nZ2xlIE1lZGlhIF9Mb29wIFBsYXliYWNrIikp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4oKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlN3aXRjaCBWaWRlbyB0byBfRnVsbHNj
cmVlbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1BsYXkiKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJfUGF1c2UiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9NdXRlIikpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0ZyYW1lIGluIE5ldyBXaW5kb3ciKSk7Ci19Ci0K
LVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0
b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0NPUFkp
KTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0RlbGV0ZSgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9t
VVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19ERUxFVEUpKTsKLSAgICByZXR1cm4gc3RvY2tM
YWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpCi17Ci0gICAg
c3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVs
KEdUS19TVE9DS19TRUxFQ1RfQUxMKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHMoKQotewotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIklucHV0IF9NZXRob2RzIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnR29CYWNrKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJp
bmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0dPX0JBQ0spKTsKLSAgICByZXR1
cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgp
Ci17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtT
dG9ja0xhYmVsKEdUS19TVE9DS19HT19GT1JXQVJEKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7
Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkKLXsKLSAgICBzdGF0aWMgU3Ry
aW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NL
X1NUT1ApKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1JlbG9hZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1JlbG9h
ZCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCi17Ci0gICAgc3RhdGlj
IFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19T
VE9DS19DVVQpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ1Bhc3RlKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJp
bmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1BBU1RFKSk7Ci0gICAgcmV0dXJu
IHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3Vu
ZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTm8gR3Vlc3NlcyBGb3VuZCIp
KTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfSWdub3JlIFNwZWxsaW5nIikpOwotfQotCi1T
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiX0xlYXJuIFNwZWxsaW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJfU2VhcmNoIHRoZSBXZWIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJfTG9vayBVcCBpbiBEaWN0aW9uYXJ5IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9P
cGVuIExpbmsiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFy
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJZ25vcmUgX0dyYW1tYXIiKSk7
Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlNwZWxsaW5nIGFuZCBfR3JhbW1hciIpKTsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzaG93ID8gXygiX1Nob3cgU3BlbGxpbmcgYW5k
IEdyYW1tYXIiKSA6IF8oIl9IaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIikpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiX0NoZWNrIERvY3VtZW50IE5vdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgX1R5cGluZyIpKTsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgX0dyYW1tYXIgV2l0aCBTcGVsbGlu
ZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfRm9udCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0JvbGQoKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQk9MRCkpOwotICAgIHJldHVybiBz
dG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkKLXsKLSAg
ICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFi
ZWwoR1RLX1NUT0NLX0lUQUxJQykpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0
b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1VOREVS
TElORSkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnT3V0bGluZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX091dGxp
bmUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpCi17
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiSW5zcGVjdCBfRWxlbWVudCIpKTsKLX0K
LQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk1NYXJrKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk0gX0xlZnQtdG8tcmlnaHQgbWFyayIpKTsK
LX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE1NYXJrKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTE0gX1JpZ2h0LXRvLWxlZnQgbWFyayIp
KTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUkVNYXJrKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUkUgTGVmdC10by1yaWdodCBfZW1i
ZWRkaW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJM
RU1hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMRSBSaWdodC10by1s
ZWZ0IGVfbWJlZGRpbmciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2Rl
SW5zZXJ0TFJPTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTFJPIExl
ZnQtdG8tcmlnaHQgX292ZXJyaWRlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
VW5pY29kZUluc2VydFJMT01hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IlJMTyBSaWdodC10by1sZWZ0IG9fdmVycmlkZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1VuaWNvZGVJbnNlcnRQREZNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJQREYgX1BvcCBkaXJlY3Rpb25hbCBmb3JtYXR0aW5nIikpOwotfQotCi1TdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmsoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIlpXUyBfWmVybyB3aWR0aCBzcGFjZSIpKTsKLX0KLQotU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJaV0ogWmVybyB3aWR0aCBfam9pbmVyIikpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV05KIFplcm8gd2lkdGggX25vbi1qb2luZXIiKSk7Ci19
Ci0KLVN0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIk5vIHJlY2VudCBzZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5n
IHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlJlY2VudCBzZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5nIHNlYXJjaE1lbnVDbGVh
clJlY2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X0NsZWFyIHJlY2VudCBzZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5nIEFYRGVmaW5pdGlvblRleHQo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlZmluaXRpb24iKSk7Ci19Ci0K
LVN0cmluZyBBWERlc2NyaXB0aW9uTGlzdFRlcm1UZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJ0ZXJtIikpOwotfQotCi1TdHJpbmcgQVhEZXNjcmlwdGlvbkxpc3REZXRh
aWxUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJkZXNjcmlwdGlvbiIp
KTsKLX0KLQotU3RyaW5nIEFYRm9vdGVyUm9sZURlc2NyaXB0aW9uVGV4dCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZm9vdGVyIikpOwotfQotCi1TdHJpbmcgQVhCdXR0b25B
Y3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwcmVzcyIpKTsK
LX0KLQotU3RyaW5nIEFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJzZWxlY3QiKSk7Ci19Ci0KLVN0cmluZyBBWFRleHRGaWVsZEFjdGlv
blZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImFjdGl2YXRlIikpOwot
fQotCi1TdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJ1bmNoZWNrIikpOwotfQotCi1TdHJpbmcgQVhVbmNoZWNrZWRD
aGVja0JveEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImNo
ZWNrIikpOwotfQotCi1TdHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygianVtcCIpKTsKLX0KLQotU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFj
dGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYTWVudUxp
c3RBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAgCi1TdHJpbmcg
bWlzc2luZ1BsdWdpblRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk1p
c3NpbmcgUGx1Zy1pbiIpKTsKLX0KLQotU3RyaW5nIGNyYXNoZWRQbHVnaW5UZXh0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBsdWct
aW4gRmFpbHVyZSIpKTsKLX0KLQotU3RyaW5nIGJsb2NrZWRQbHVnaW5CeUNvbnRlbnRTZWN1cml0
eVBvbGljeVRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgaW5zZWN1cmVQbHVnaW5WZXJzaW9uVGV4dCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpbmFjdGl2
ZVBsdWdpblRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgbXVsdGlwbGVGaWxlVXBsb2FkVGV4dCh1bnNpZ25lZCBudW1iZXJP
ZkZpbGVzKQotewotICAgIC8vIEZJWE1FOiBJZiB0aGlzIGZpbGUgZ2V0cyBsb2NhbGl6ZWQsIHRo
aXMgc2hvdWxkIHJlYWxseSBiZSBsb2NhbGl6ZWQgYXMgb25lIHN0cmluZyB3aXRoIGEgd2lsZGNh
cmQgZm9yIHRoZSBudW1iZXIuCi0gICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG51bWJlck9mRmls
ZXMpICsgU3RyaW5nOjpmcm9tVVRGOChfKCIgZmlsZXMiKSk7Ci19Ci0KLVN0cmluZyB1bmtub3du
RmlsZVNpemVUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJVbmtub3du
IikpOwotfQotCi1TdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBJbnRTaXplJiBzaXplKQotewotICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9w
cmludGYoQ18oIlRpdGxlIHN0cmluZyBmb3IgaW1hZ2VzIiwgIiVzICAoJWR4JWQgcGl4ZWxzKSIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUudXRm
OCgpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
Rjgoc3RyaW5nLmdldCgpKTsKLX0KLQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi1TdHJpbmcgbWVk
aWFFbGVtZW50TG9hZGluZ1N0YXRlVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiTG9hZGluZy4uLiIpKTsKLX0KLQotU3RyaW5nIG1lZGlhRWxlbWVudExpdmVCcm9hZGNh
c3RTdGF0ZVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxpdmUgQnJv
YWRjYXN0IikpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmlu
Zyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxlbWVudCIp
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQgY29udHJv
bGxlciIpKTsKLSAgICBpZiAobmFtZSA9PSAiVmlkZW9FbGVtZW50IikKLSAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygidmlkZW8gZWxlbWVudCBjb250cm9sbGVyIikpOwotICAgIGlm
IChuYW1lID09ICJNdXRlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygibXV0ZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiVW5NdXRlQnV0dG9uIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidW5tdXRlIikpOwotICAgIGlmIChuYW1lID09ICJQbGF5
QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGxheSIpKTsKLSAg
ICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJwYXVzZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2xpZGVyIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAi
U2xpZGVyVGh1bWIiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0aW1lbGlu
ZSBzbGlkZXIgdGh1bWIiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlJld2luZEJ1dHRvbiIpCi0gICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImJhY2sgMzAgc2Vjb25kcyIpKTsKLSAgICBp
ZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInJldHVybiB0byByZWFsdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAi
Q3VycmVudFRpbWVEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
ZWxhcHNlZCB0aW1lIikpOwotICAgIGlmIChuYW1lID09ICJUaW1lUmVtYWluaW5nRGlzcGxheSIp
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJlbWFpbmluZyB0aW1lIikpOwot
ICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygic3RhdHVzIikpOwotICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxzY3JlZW5C
dXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbnRlciBmdWxsc2Ny
ZWVuIikpOwotICAgIGlmIChuYW1lID09ICJFeGl0RnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImV4aXQgZnVsbHNjcmVlbiIpKTsKLSAgICBpZiAo
bmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJmYXN0IGZvcndhcmQiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtCYWNrQnV0dG9u
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZmFzdCByZXZlcnNlIikpOwot
ICAgIGlmIChuYW1lID09ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQotICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzaG93IGNsb3NlZCBjYXB0aW9ucyIpKTsKLSAgICBpZiAo
bmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiaGlkZSBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0g
IkNvbnRyb2xzUGFuZWwiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtZWRp
YSBjb250cm9scyIpKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotU3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4
dChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxlbWVudCIp
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQgcGxheWJh
Y2sgY29udHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOwotICAgIGlmIChuYW1lID09ICJWaWRl
b0VsZW1lbnQiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2aWRlbyBlbGVt
ZW50IHBsYXliYWNrIGNvbnRyb2xzIGFuZCBzdGF0dXMgZGlzcGxheSIpKTsKLSAgICBpZiAobmFt
ZSA9PSAiTXV0ZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm11
dGUgYXVkaW8gdHJhY2tzIikpOwotICAgIGlmIChuYW1lID09ICJVbk11dGVCdXR0b24iKQotICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bm11dGUgYXVkaW8gdHJhY2tzIikpOwot
ICAgIGlmIChuYW1lID09ICJQbGF5QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiYmVnaW4gcGxheWJhY2siKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlBhdXNlQnV0dG9u
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF1c2UgcGxheWJhY2siKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlciIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIm1vdmllIHRpbWUgc2NydWJiZXIiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlclRo
dW1iIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGltZSBzY3J1
YmJlciB0aHVtYiIpKTsKLSAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBtb3ZpZSBiYWNrIDMwIHNlY29uZHMiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlJldHVyblRvUmVhbHRpbWVCdXR0b24iKQotICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyZXR1cm4gc3RyZWFtaW5nIG1vdmllIHRvIHJlYWwgdGlt
ZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3ZpZSB0aW1lIGluIHNlY29uZHMiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKLSAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygibnVtYmVyIG9mIHNlY29uZHMgb2YgbW92aWUgcmVtYWluaW5n
IikpOwotICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3ZpZSBzdGF0dXMiKSk7Ci0gICAgaWYgKG5hbWUg
PT0gIlNlZWtCYWNrQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
c2VlayBxdWlja2x5IGJhY2siKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtGb3J3YXJkQnV0dG9u
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBxdWlja2x5IGZvcndh
cmQiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBsYXkgbW92aWUgaW4gZnVsbHNjcmVlbiBtb2Rl
IikpOwotICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJFeGl0IGZ1bGxzY3JlZW4gbW9kZSIpKTsKLSAgICBp
ZiAobmFtZSA9PSAiU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygic3RhcnQgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0g
ICAgaWYgKG5hbWUgPT0gIkhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInN0b3AgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlvbnMiKSk7
Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBsb2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihmbG9hdCB0aW1lKQotewotICAg
IGlmICghc3RkOjppc2Zpbml0ZSh0aW1lKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiaW5kZWZpbml0ZSB0aW1lIikpOwotCi0gICAgaW50IHNlY29uZHMgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFicyh0aW1lKSk7Ci0gICAgaW50IGRheXMgPSBzZWNvbmRzIC8gKDYwICogNjAgKiAy
NCk7Ci0gICAgaW50IGhvdXJzID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKLSAgICBpbnQgbWludXRl
cyA9IChzZWNvbmRzIC8gNjApICUgNjA7Ci0gICAgc2Vjb25kcyAlPSA2MDsKLQotICAgIGlmIChk
YXlzKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVk
IGRheXMgJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgZGF5cywgaG91cnMsIG1pbnV0
ZXMsIHNlY29uZHMpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdl
dCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoaG91cnMpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4g
c3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwg
aG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
Rjgoc3RyaW5nLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobWludXRlcykgewotICAgICAgICBH
T3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBtaW51dGVzICVkIHNlY29u
ZHMiLCBtaW51dGVzLCBzZWNvbmRzKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KHN0cmluZy5nZXQoKSk7Ci0gICAgfQotCi0gICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3Ry
ZHVwX3ByaW50ZigiJWQgc2Vjb25kcyIsIHNlY29uZHMpKTsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChzdHJpbmcuZ2V0KCkpOwotfQotI2VuZGlmICAvLyBFTkFCTEUoVklERU8pCi0KLVN0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInZhbHVlIG1pc3NpbmciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0
aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckNoZWNrYm94VGV4dCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7
Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVUZXh0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZh
bHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNz
aW5nRm9yTXVsdGlwbGVGaWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclJhZGlvVGV4dCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0
KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRl
eHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBl
TWlzbWF0Y2hUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInR5cGUgbWlzbWF0Y2giKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9u
TWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0K
LVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2Fn
ZVR5cGVNaXNtYXRjaFRleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1p
c21hdGNoRm9yVVJMVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0
aW9uTWVzc2FnZVBhdHRlcm5NaXNtYXRjaFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oInBhdHRlcm4gbWlzbWF0Y2giKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVRvb0xvbmdUZXh0KGludCwgaW50KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInRvbyBsb25nIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVy
Zmxvd1RleHQoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJyYW5nZSB1bmRlcmZsb3ciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdl
T3ZlcmZsb3dUZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygicmFuZ2Ugb3ZlcmZsb3ciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0
ZXBNaXNtYXRjaFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGVwIG1pc21hdGNoIikpOwotfQotCi1TdHJpbmcgdW5h
Y2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlVuYWNjZXB0YWJsZSBUTFMgY2VydGlmaWNhdGUiKSk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6
ZWRTdHJpbmcoY29uc3QgY2hhcioga2V5KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGtleSwgc3RybGVuKGtleSkpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VCYWRJbnB1
dEZvck51bWJlclRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOwotfQotCi0jaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotU3RyaW5nIHRleHRUcmFja0Nsb3NlZENhcHRpb25zVGV4dCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsb3NlZCBDYXB0aW9ucyIsICJNZW51IHNlY3Rpb24g
aGVhZGluZyBmb3IgY2xvc2VkIGNhcHRpb25zIikpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrU3Vi
dGl0bGVzVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIlN1YnRpdGxl
cyIsICJNZW51IHNlY3Rpb24gaGVhZGluZyBmb3Igc3VidGl0bGVzIikpOwotfQotCi1TdHJpbmcg
dGV4dFRyYWNrT2ZmVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIk9m
ZiIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIHRoZSB0cmFjayB0aGF0IHJlcHJlc2VudHMgZGlzYWJs
aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKLX0KLQotU3RyaW5nIHRleHRUcmFja05vTGFiZWxUZXh0
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiTm8gbGFiZWwiLCAiTWVudSBp
dGVtIGxhYmVsIGZvciBhIGNsb3NlZCBjYXB0aW9ucyB0cmFjayB0aGF0IGhhcyBubyBvdGhlciBu
YW1lIikpOwotfQotI2VuZGlmCi0KLVN0cmluZyBzbmFwc2hvdHRlZFBsdWdJbkxhYmVsVGl0bGUo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJTbmFwc2hvdHRlZCBQbHVnLUlu
IiwgIlRpdGxlIG9mIHRoZSBsYWJlbCB0byBzaG93IG9uIGEgc25hcHNob3R0ZWQgcGx1Zy1pbiIp
KTsKLX0KLQotU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxTdWJ0aXRsZSgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsaWNrIHRvIHJlc3RhcnQiLCAiU3VidGl0bGUg
b2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOwotfQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE4OThhZjdkOGJlYmNiZTA1YzlhYmU3ZmY0YTQxZTE3YzkwOGNm
OTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25z
QGdub21lLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi0jaWYgIUxPR19ESVNBQkxFRAotCi0jaW5j
bHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEluc3BpcmVkIGJ5IHRoZSBj
b2RlIHVzZWQgYnkgdGhlIFF0IHBvcnQKLQotdm9pZCBpbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxz
SWZOZWNlc3NhcnkoKQotewotICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVMb2dnaW5nQ2hh
bm5lbHMgPSBmYWxzZTsKLSAgICBpZiAoZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscyA9IHRydWU7
Ci0KLSAgICBjaGFyKiBsb2dFbnYgPSBnZXRlbnYoIldFQktJVF9ERUJVRyIpOwotICAgIGlmICgh
bG9nRW52KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyB3ZSBzZXQgdXAgdGhlIGxvZ3MgYW55
d2F5IGJlY2F1c2Ugc29tZSBvZiBvdXIgbG9nZ2luZywgc3VjaCBhcwotICAgIC8vIHNvdXAncyBp
cyBhdmFpbGFibGUgaW4gcmVsZWFzZSBidWlsZHMKLSNpZiBkZWZpbmVkKE5ERUJVRykKLSAgICBn
X3dhcm5pbmcoIldFQktJVF9ERUJVRyBpcyBub3QgZW1wdHksIGJ1dCB0aGlzIGlzIGEgcmVsZWFz
ZSBidWlsZC4gTm90aWNlIHRoYXQgbWFueSBsb2cgbWVzc2FnZXMgd2lsbCBvbmx5IGFwcGVhciBp
biBhIGRlYnVnIGJ1aWxkLiIpOwotI2VuZGlmCi0KLSAgICBjaGFyKiogbG9ndiA9IGdfc3Ryc3Bs
aXQobG9nRW52LCAiICIsIC0xKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBsb2d2W2ldOyBpKysp
IHsKLSAgICAgICAgaWYgKFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBnZXRDaGFubmVsRnJvbU5h
bWUobG9ndltpXSkpCi0gICAgICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxP
bjsKLSAgICB9Ci0KLSAgICBnX3N0cmZyZWV2KGxvZ3YpOwotCi0gICAgLy8gdG8gZGlzYWJsZSBs
b2dnaW5nIG5vdEltcGxlbWVudGVkIHNldCB0aGUgRElTQUJMRV9OSV9XQVJOSU5HCi0gICAgLy8g
ZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gMQotICAgIExvZ05vdFlldEltcGxlbWVudGVkLnN0YXRl
ID0gV1RGTG9nQ2hhbm5lbE9uOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyAhTE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
TUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlm
N2YxNGNkOGRmN2E1NjJiMDJlYzMyYjhkZmEyZjRjZjk2ZmIyYjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXh0
ZW5zaW9uTWFwIHsKLSAgICBjb25zdCBjaGFyKiBleHRlbnNpb247Ci0gICAgY29uc3QgY2hhciog
bWltZVR5cGU7Ci19OwotCi1zdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBb
XSA9IHsKLSAgICB7ICJibXAiLCAiaW1hZ2UvYm1wIiB9LAotICAgIHsgImNzcyIsICJ0ZXh0L2Nz
cyIgfSwKLSAgICB7ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAotICAgIHsgImh0bSIsICJ0ZXh0L2h0
bWwiIH0sCi0gICAgeyAiaHRtbCIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdl
L3gtaWNvbiIgfSwKLSAgICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwg
ImltYWdlL2pwZWciIH0sCi0gICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9
LAotICAgIHsgInBkZiIsICJhcHBsaWNhdGlvbi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdl
L3BuZyIgfSwKLSAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJz
dmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKLSAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCi0g
ICAgeyAidHh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1h
cCIgfSwKLSAgICB7ICJ4bWwiLCAidGV4dC94bWwiIH0sCi0gICAgeyAieHNsIiwgInRleHQveHNs
IiB9LAotICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKLSAgICB7ICJ3
bWwiLCAidGV4dC92bmQud2FwLndtbCIgfSwKLSAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3Zu
ZC53YXAud21sYyIgfSwKLSAgICB7IDAsIDAgfQotfTsKLQotU3RyaW5nIE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOwotICAg
IGNvbnN0IEV4dGVuc2lvbk1hcCAqZSA9IGV4dGVuc2lvbk1hcDsKLSAgICB3aGlsZSAoZS0+ZXh0
ZW5zaW9uKSB7Ci0gICAgICAgIGlmIChzID09IGUtPmV4dGVuc2lvbikKLSAgICAgICAgICAgIHJl
dHVybiBlLT5taW1lVHlwZTsKLSAgICAgICAgKytlOwotICAgIH0KLQotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlN
RVR5cGUoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYzFjYzgzYTAyMzQ5OGMxYWIyYjg0
ZGMxMDllOWE5YzVmODUwYzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9y
ZwotICogIENvcHlyaWdodCAoQykgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9t
ZS5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFy
R3RrLmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJH
dGs+IE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNYWluRnJhbWVTY3JvbGxiYXJHdGsoc2Nyb2xsYWJsZUFyZWEsIG9yaWVu
dGF0aW9uKSk7Ci19Ci0KLS8vIEEgTWFpbkZyYW1lU2Nyb2xsYmFyIGlzIGp1c3QgYSBub24tcGFp
bnRpbmcgc2Nyb2xsYmFyLiBPdGhlcndpc2UgaXQgaXMgZnVsbHkKLS8vIGZ1bmN0aW9uYWwuIEEg
bm9uLXBhaW50aW5nIHNjcm9sbGJhciBhbGxvd3MgYSBtYWluLWZyYW1lIFNjcm9sbFZpZXcgdG8g
dXNlCi0vLyBhIGNvbnRhaW5pbmcgR3RrU2Nyb2xsZWRXaW5kb3cgYXMgaXRzIHVzZXIgaW50ZXJm
YWNlLiBUaGUgQ2hyb21lQ2xpZW50IGluIHRoZQotLy8gV2ViS2l0IGxheWVyIGp1c3QgbGlzdGVu
cyBmb3Igc2Nyb2xsaW5nIGFuZCBzaXppbmcgY2hhbmdlcyBhbmQgdXBkYXRlcyBpdHMKLS8vIGNv
bnRhaW5lciAodGhlIEd0a1Njcm9sbGVkV2luZG93KSBhY2NvcmRpbmdseS4gVGhlIFNjcm9sbFZp
ZXcgaXMgcmVzcG9uc2libGUKLS8vIGZvciBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byBjcmVh
dGUgYSBNYWluRnJhbWVTY3JvbGxiYXIgb3IgbmF0aXZlIHNjcm9sbGJhci4KLU1haW5GcmFtZVNj
cm9sbGJhckd0azo6TWFpbkZyYW1lU2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi0gICAgOiBTY3JvbGxi
YXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKQotewotICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gdGFrZSB1cCBhbnkgc3BhY2UuCi0gICAgcmVzaXplKDAsIDAp
OwotfQotCi12b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIE1haW4gZnJhbWUgc2Ny
b2xsYmFycyBhcmUgbm90IHBhaW50ZWQgYnkgV2ViQ29yZS4KLSAgICByZXR1cm47Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiOGNiNjM4ZmRhY2M5YjBjMjVjNjA0ODE4
NWQ3NTBhNzBmNTQwZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5o
CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLQotI2lmbmRl
ZiBNYWluRnJhbWVTY3JvbGxiYXJHdGtfaAotI2RlZmluZSBNYWluRnJhbWVTY3JvbGxiYXJHdGtf
aAotCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBNYWluRnJhbWVTY3JvbGxiYXJHdGsgOiBw
dWJsaWMgU2Nyb2xsYmFyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNYWluRnJh
bWVTY3JvbGxiYXJHdGs+IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0
aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpOwotCi1wcml2YXRlOgotICAgIE1haW5GcmFtZVNjcm9sbGJhckd0ayhTY3JvbGxhYmxl
QXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNjcm9s
bGJhckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVi
b2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhN2EzZjk3OTk1MGFmZDhhNjhkYTRj
MDE1ZjMxODk0OTRjMzFiOTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotCi0jaW5jbHVkZSAi
Q2xpcGJvYXJkR3RrLmgiCi0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkdPd25QdHJH
dGsuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVk
ZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShTVkcpCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpCi17Ci0gICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQg
PSBuZXcgUGFzdGVib2FyZCgpOwotICAgIHJldHVybiBwYXN0ZWJvYXJkOwotfQotCi1QYXN0ZWJv
YXJkOjpQYXN0ZWJvYXJkKCkKLXsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlv
bihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUq
IGZyYW1lKQotewotICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxw
ZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9h
cmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwotCi0gICAgRGF0YU9iamVj
dEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQp
OwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0KLSAgICBkYXRhT2JqZWN0LT5zZXRUZXh0
KGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOwotICAgIGRhdGFPYmplY3QtPnNldE1h
cmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLSAgICBoZWxwZXItPndyaXRlQ2xpcGJv
YXJkQ29udGVudHMoY2xpcGJvYXJkLCBjYW5TbWFydENvcHlPckRlbGV0ZSA/IFBhc3RlYm9hcmRI
ZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRl
U21hcnRQYXN0ZSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBsYWNlT3B0aW9uKQotewot
ICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3Bs
YXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwot
ICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9h
cmQoY2xpcGJvYXJkKTsKLSAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgZGF0YU9i
amVjdC0+c2V0VGV4dCh0ZXh0KTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCwKLSAgICAgICAg
KHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpID8gUGFzdGVib2FyZEhlbHBl
cjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFy
dFBhc3RlKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAodXJsLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVyID0g
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtDbGlw
Ym9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7Ci0K
LSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJv
YXJkKGNsaXBib2FyZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIGRhdGFP
YmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKLSAgICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29u
dGVudHMoY2xpcGJvYXJkKTsKLX0KLQotc3RhdGljIEtVUkwgZ2V0VVJMRm9ySW1hZ2VOb2RlKE5v
ZGUqIG5vZGUpCi17Ci0gICAgLy8gRklYTUU6IExhdGVyIHRoaXMgY29kZSBzaG91bGQgYmUgc2hh
cmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hhbmNlcyBhcmUgYWxsIHBsYXRmb3JtcyB3YW50
IGl0LgotICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1
dFRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+
Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBl
bHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCi0gICAgICAgIHVy
bFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKFhMaW5r
TmFtZXM6OmhyZWZBdHRyKTsKLSNlbmRpZgotICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVj
dFRhZykpIHsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKLSAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1l
bnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybFN0
cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChz
dHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7Ci19Ci0KLXZvaWQg
UGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSkKLXsKLSAgICBBU1NFUlQobm9kZSk7Ci0KLSAgICBpZiAoIShub2RlLT5yZW5k
ZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVy
ZXIoKSk7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZElt
YWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmlt
YWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLSAgICBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBi
b2FyZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIEtVUkwgdXJsID0gZ2V0
VVJMRm9ySW1hZ2VOb2RlKG5vZGUpOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAg
ICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7Ci0KLSAgICAgICAgZGF0YU9iamVjdC0+
c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSksIEluY2x1
ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwotICAgIH0KLQotICAgIEdSZWZQdHI8R2RrUGl4
YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKLSAgICBkYXRh
T2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOwotCi0gICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9h
cmQpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJkKENsaXBib2FyZCogY2xp
cGJvYXJkKQotewotICAgIEd0a0NsaXBib2FyZCogZ3RrQ2xpcGJvYXJkID0gc3RhdGljX2Nhc3Q8
Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+Y2xpcGJvYXJkKCk7Ci0gICAgaWYgKGd0a0NsaXBi
b2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhndGtDbGlwYm9hcmQpOwotfQotCi12b2lkIFBhc3Rl
Ym9hcmQ6OmNsZWFyKCkKLXsKLSAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGd0a19jbGlwYm9hcmRf
Z2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05f
Q0xJUEJPQVJEKSk7Ci19Ci0KLWJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsK
LSAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKAotICAgICAgICBndGtfY2xpcGJv
YXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNU
SU9OX0NMSVBCT0FSRCkpOwotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3Rl
Ym9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBj
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQotewot
ICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQ
YXN0ZWJvYXJkSGVscGVyKCk7Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXIt
PmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmpl
Y3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBoZWxwZXIt
PmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7Ci0KLSAgICBjaG9zZVBsYWluVGV4dCA9
IGZhbHNlOwotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVjdC0+bWFya3VwKCksICIiLCBEaXNhbGxvd1Nj
cmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRlZCk7Ci0gICAgICAgIGlmIChmcmFnbWVudCkK
LSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYg
KCFhbGxvd1BsYWluVGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZGF0YU9iamVj
dC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjb250ZXh0LmdldCgpLCBkYXRhT2JqZWN0LT50ZXh0KCkpOwotICAgICAgICBpZiAoZnJhZ21l
bnQpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi1TdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0g
aGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBk
YXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0KLSAg
ICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGRh
dGFPYmplY3QtPnRleHQoKTsKLX0KLQotYm9vbCBQYXN0ZWJvYXJkOjppc1NlbGVjdGlvbk1vZGUo
KSBjb25zdAotewotICAgIHJldHVybiBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpLT51c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKCk7Ci19Ci0KLXZvaWQgUGFz
dGVib2FyZDo6c2V0U2VsZWN0aW9uTW9kZShib29sIHNlbGVjdGlvbk1vZGUpCi17Ci0gICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+c2V0VXNlUHJpbWFyeVNl
bGVjdGlvbkNsaXBib2FyZChzZWxlY3Rpb25Nb2RlKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3NmE5NzU0MzcwNzhjYmViNjgxMTE5OWYxZGVjMjUwOTE4YmE4MzE4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDMzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8
bXJvYmluc29uQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIElnYWxpYSBTLkwuCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXN0
ZWJvYXJkSGVscGVyLmgiCi0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJEYXRhT2Jq
ZWN0R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKLSNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR2Rr
QXRvbSB0ZXh0UGxhaW5BdG9tOwotc3RhdGljIEdka0F0b20gbWFya3VwQXRvbTsKLXN0YXRpYyBH
ZGtBdG9tIG5ldHNjYXBlVVJMQXRvbTsKLXN0YXRpYyBHZGtBdG9tIHVyaUxpc3RBdG9tOwotc3Rh
dGljIEdka0F0b20gc21hcnRQYXN0ZUF0b207Ci1zdGF0aWMgU3RyaW5nIGdNYXJrdXBQcmVmaXg7
Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZU1hcmt1cFByZWZpeChTdHJpbmcmIG1hcmt1cCkKLXsKLSAg
ICAvLyBUaGUgbWFya3VwIHByZWZpeCBpcyBub3QgaGFybWZ1bCwgYnV0IHdlIHJlbW92ZSBpdCBm
cm9tIHRoZSBzdHJpbmcgYW55d2F5LCBzbyB0aGF0Ci0gICAgLy8gd2UgY2FuIGhhdmUgY29uc2lz
dGVudCByZXN1bHRzIHdpdGggb3RoZXIgcG9ydHMgZHVyaW5nIHRoZSBsYXlvdXQgdGVzdHMuCi0g
ICAgaWYgKG1hcmt1cC5zdGFydHNXaXRoKGdNYXJrdXBQcmVmaXgpKQotICAgICAgICBtYXJrdXAu
cmVtb3ZlKDAsIGdNYXJrdXBQcmVmaXgubGVuZ3RoKCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbml0
R2RrQXRvbXMoKQotewotICAgIHN0YXRpYyBnYm9vbGVhbiBpbml0aWFsaXplZCA9IEZBTFNFOwot
Ci0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0aWFsaXpl
ZCA9IFRSVUU7Ci0KLSAgICB0ZXh0UGxhaW5BdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L3Bs
YWluO2NoYXJzZXQ9dXRmLTgiLCBGQUxTRSk7Ci0gICAgbWFya3VwQXRvbSA9IGdka19hdG9tX2lu
dGVybigidGV4dC9odG1sIiwgRkFMU0UpOwotICAgIG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9t
X2ludGVybigiX05FVFNDQVBFX1VSTCIsIEZBTFNFKTsKLSAgICB1cmlMaXN0QXRvbSA9IGdka19h
dG9tX2ludGVybigidGV4dC91cmktbGlzdCIsIEZBTFNFKTsKLSAgICBzbWFydFBhc3RlQXRvbSA9
IGdka19hdG9tX2ludGVybigiYXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5zbWFydHBhc3RlIiwg
RkFMU0UpOwotICAgIGdNYXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQt
dHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj4iOwotfQotCi1QYXN0
ZWJvYXJkSGVscGVyKiBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXN0ZWJvYXJkSGVscGVyLCBkZWZhdWx0SGVs
cGVyLCAoKSk7Ci0gICAgcmV0dXJuICZkZWZhdWx0SGVscGVyOwotfQotCi1QYXN0ZWJvYXJkSGVs
cGVyOjpQYXN0ZWJvYXJkSGVscGVyKCkKLSAgICA6IG1fdGFyZ2V0TGlzdChndGtfdGFyZ2V0X2xp
c3RfbmV3KDAsIDApKQotICAgICwgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZhbHNl
KQotewotICAgIGluaXRHZGtBdG9tcygpOwotCi0gICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0
X3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlVGV4dCk7
Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QsIG1hcmt1cEF0b20sIDAsIFBh
c3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVNYXJrdXApOwotICAgIGd0a190YXJnZXRfbGlzdF9h
ZGRfdXJpX3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBl
VVJJTGlzdCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QsIG5ldHNjYXBl
VVJMQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKLSAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJv
YXJkSGVscGVyOjpUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotfQotCi1QYXN0ZWJvYXJkSGVscGVy
Ojp+UGFzdGVib2FyZEhlbHBlcigpCi17Ci0gICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKG1fdGFy
Z2V0TGlzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR2RrRGlzcGxheSogZGlzcGxheUZyb21GcmFt
ZShGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKTsKLSAgICBBU1NFUlQocGFnZSk7Ci0gICAgQ2hyb21lKiBjaHJvbWUgPSBw
YWdlLT5jaHJvbWUoKTsKLSAgICBBU1NFUlQoY2hyb21lKTsKLSAgICBQbGF0Zm9ybVBhZ2VDbGll
bnQgY2xpZW50ID0gY2hyb21lLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICByZXR1cm4gY2xp
ZW50ID8gZ3RrX3dpZGdldF9nZXRfZGlzcGxheShjbGllbnQpIDogZ2RrX2Rpc3BsYXlfZ2V0X2Rl
ZmF1bHQoKTsKLX0KLQotR3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDdXJyZW50
Q2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAobV91c2VQcmltYXJ5U2VsZWN0aW9u
Q2xpcGJvYXJkKQotICAgICAgICByZXR1cm4gZ2V0UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChm
cmFtZSk7Ci0gICAgcmV0dXJuIGdldENsaXBib2FyZChmcmFtZSk7Ci19Ci0KLUd0a0NsaXBib2Fy
ZCogUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZGlzcGxheUZyb21GcmFt
ZShmcmFtZSksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLX0KLQotR3RrQ2xpcGJvYXJkKiBQ
YXN0ZWJvYXJkSGVscGVyOjpnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKiBmcmFt
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZGlz
cGxheUZyb21GcmFtZShmcmFtZSksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7Ci19Ci0KLUd0a1Rh
cmdldExpc3QqIFBhc3RlYm9hcmRIZWxwZXI6OnRhcmdldExpc3QoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3RhcmdldExpc3Q7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRG
OFN0cmluZyhHdGtTZWxlY3Rpb25EYXRhKiBkYXRhKQotewotICAgIC8vIGdfc3RybmR1cCBndWFy
ZHMgYWdhaW5zdCBzZWxlY3Rpb24gZGF0YSB0aGF0IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0g
ICAgR093blB0cjxnY2hhcj4gbWFya3VwU3RyaW5nKGdfc3RybmR1cChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkpLCBndGtfc2Vs
ZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KG1hcmt1cFN0cmluZy5nZXQoKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0
Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCi17Ci0gICAgRGF0YU9i
amVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9h
cmQpOwotICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dh
aXRfaXNfdGV4dF9hdmFpbGFibGUoY2xpcGJvYXJkKSkgewotICAgICAgICBHT3duUHRyPGdjaGFy
PiB0ZXh0RGF0YShndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xpcGJvYXJkKSk7Ci0gICAg
ICAgIGlmICh0ZXh0RGF0YSkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQoU3RyaW5n
Ojpmcm9tVVRGOCh0ZXh0RGF0YS5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJv
YXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0g
ICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zv
cl9jb250ZW50cyhjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
bWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgcmVt
b3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7Ci0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJr
dXAobWFya3VwKTsKLSAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRf
YXZhaWxhYmxlKGNsaXBib2FyZCwgdXJpTGlzdEF0b20pKSB7Ci0gICAgICAgIGlmIChHdGtTZWxl
Y3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9h
cmQsIHVyaUxpc3RBdG9tKSkgewotICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdChz
ZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKLSAgICAgICAgICAgIGd0a19zZWxlY3Rp
b25fZGF0YV9mcmVlKGRhdGEpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFBhc3RlYm9h
cmRIZWxwZXI6OmZpbGxTZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRh
dGEsIGd1aW50IGluZm8sIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCi17Ci0gICAgaWYgKGlu
Zm8gPT0gVGFyZ2V0VHlwZVRleHQpCi0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfdGV4
dChzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOwot
Ci0gICAgZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTWFya3VwKSB7Ci0gICAgICAgIC8vIFNv
bWUgTGludXggYXBwbGljYXRpb25zIHJlZnVzZSB0byBhY2NlcHQgcGFzdGVkIG1hcmt1cCB1bmxl
c3MgaXQgaXMKLSAgICAgICAgLy8gcHJlZml4ZWQgYnkgYSBjb250ZW50LXR5cGUgbWV0YSB0YWcu
Ci0gICAgICAgIENTdHJpbmcgbWFya3VwID0gU3RyaW5nKGdNYXJrdXBQcmVmaXggKyBkYXRhT2Jq
ZWN0LT5tYXJrdXAoKSkudXRmOCgpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNl
bGVjdGlvbkRhdGEsIG1hcmt1cEF0b20sIDgsCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0
PGNvbnN0IGd1Y2hhcio+KG1hcmt1cC5kYXRhKCkpLCBtYXJrdXAubGVuZ3RoKCkgKyAxKTsKLQot
ICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlVVJJTGlzdCkgewotICAgICAgICBDU3Ry
aW5nIHVyaUxpc3QgPSBkYXRhT2JqZWN0LT51cmlMaXN0KCkudXRmOCgpOwotICAgICAgICBndGtf
c2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIHVyaUxpc3RBdG9tLCA4LAotICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPih1cmlMaXN0LmRhdGEoKSksIHVy
aUxpc3QubGVuZ3RoKCkgKyAxKTsKLQotICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBl
TmV0c2NhcGVVUkwgJiYgZGF0YU9iamVjdC0+aGFzVVJMKCkpIHsKLSAgICAgICAgU3RyaW5nIHVy
bChkYXRhT2JqZWN0LT51cmwoKSk7Ci0gICAgICAgIFN0cmluZyByZXN1bHQodXJsKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLQotICAgICAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4
dCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkYXRhT2JqZWN0LT50ZXh0KCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVybCk7Ci0KLSAgICAgICAgR093
blB0cjxnY2hhcj4gcmVzdWx0RGF0YShnX3N0cmR1cChyZXN1bHQudXRmOCgpLmRhdGEoKSkpOwot
ICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG5ldHNjYXBlVVJM
QXRvbSwgOCwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4ocmVz
dWx0RGF0YS5nZXQoKSksIHN0cmxlbihyZXN1bHREYXRhLmdldCgpKSArIDEpOwotCi0gICAgfSBl
bHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVJbWFnZSkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9k
YXRhX3NldF9waXhidWYoc2VsZWN0aW9uRGF0YSwgZGF0YU9iamVjdC0+aW1hZ2UoKSk7Ci0KLSAg
ICBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVTbWFydFBhc3RlKQotICAgICAgICBndGtfc2Vs
ZWN0aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uRGF0YSwgIiIsIC0xKTsKLX0KLQotR3RrVGFy
Z2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9i
amVjdEd0ayogZGF0YU9iamVjdCwgU21hcnRQYXN0ZUluY2x1c2lvbiBzaG91bGRJbmx1ZGVTbWFy
dFBhc3RlKQotewotICAgIEd0a1RhcmdldExpc3QqIGxpc3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3
KDAsIDApOwotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc1RleHQoKSkKLSAgICAgICAgZ3RrX3Rh
cmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobGlzdCwgVGFyZ2V0VHlwZVRleHQpOwotCi0gICAg
aWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRk
KGxpc3QsIG1hcmt1cEF0b20sIDAsIFRhcmdldFR5cGVNYXJrdXApOwotCi0gICAgaWYgKGRhdGFP
YmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90
YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVVUklMaXN0KTsKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0
X2FkZChsaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAsIFRhcmdldFR5cGVOZXRzY2FwZVVSTCk7Ci0g
ICAgfQotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc0ltYWdlKCkpCi0gICAgICAgIGd0a190YXJn
ZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwot
Ci0gICAgaWYgKHNob3VsZElubHVkZVNtYXJ0UGFzdGUgPT0gSW5jbHVkZVNtYXJ0UGFzdGUpCi0g
ICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgc21hcnRQYXN0ZUF0b20sIDAsIFRhcmdl
dFR5cGVTbWFydFBhc3RlKTsKLQotICAgIHJldHVybiBsaXN0OwotfQotCi12b2lkIFBhc3RlYm9h
cmRIZWxwZXI6OmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqIGRh
dGEsIGd1aW50IGluZm8sIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCi17Ci0gICAgaWYgKCFn
dGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdka0F0b20gdGFyZ2V0ID0gZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90YXJnZXQoZGF0YSk7Ci0g
ICAgaWYgKHRhcmdldCA9PSB0ZXh0UGxhaW5BdG9tKQotICAgICAgICBkYXRhT2JqZWN0LT5zZXRU
ZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgIGVsc2UgaWYgKHRhcmdl
dCA9PSBtYXJrdXBBdG9tKSB7Ci0gICAgICAgIFN0cmluZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRv
VVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIHJlbW92ZU1hcmt1cFByZWZpeChtYXJrdXApOwot
ICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKLSAgICB9IGVsc2UgaWYgKHRh
cmdldCA9PSB1cmlMaXN0QXRvbSkgewotICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNl
bGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09
IG5ldHNjYXBlVVJMQXRvbSkgewotICAgICAgICBTdHJpbmcgdXJsV2l0aExhYmVsKHNlbGVjdGlv
bkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwaWVjZXM7
Ci0gICAgICAgIHVybFdpdGhMYWJlbC5zcGxpdCgiXG4iLCBwaWVjZXMpOwotCi0gICAgICAgIC8v
IEdpdmUgcHJlZmVyZW5jZSB0byB0ZXh0L3VyaS1saXN0IGhlcmUsIGFzIGl0IGNhbiBob2xkIG1v
cmUKLSAgICAgICAgLy8gdGhhbiBvbmUgVVJJIGJ1dCBzdGlsbCB0YWtlICB0aGUgbGFiZWwgaWYg
dGhlcmUgaXMgb25lLgotICAgICAgICBpZiAoIWRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkKLSAg
ICAgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3QocGllY2VzWzBdKTsKLSAgICAgICAgaWYg
KHBpZWNlcy5zaXplKCkgPiAxKQotICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChwaWVj
ZXNbMV0pOwotICAgIH0KLX0KLQotVmVjdG9yPEdka0F0b20+IFBhc3RlYm9hcmRIZWxwZXI6OmRy
b3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250
ZXh0KQotewotICAgIC8vIEFsd2F5cyBzZWFyY2ggZm9yIHRoZXNlIGNvbW1vbiBhdG9tcy4KLSAg
ICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zOwotICAgIGRyb3BBdG9tcy5hcHBlbmQodGV4dFBs
YWluQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZChtYXJrdXBBdG9tKTsKLSAgICBkcm9wQXRv
bXMuYXBwZW5kKHVyaUxpc3RBdG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKG5ldHNjYXBlVVJM
QXRvbSk7Ci0KLSAgICAvLyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUgbW9zdCBhcHBsaWNh
YmxlIGltYWdlIHR5cGUuCi0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRH
UmVmKGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkpOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRf
aW1hZ2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIEdk
a0F0b20gYXRvbSA9IGd0a19kcmFnX2Rlc3RfZmluZF90YXJnZXQod2lkZ2V0LCBjb250ZXh0LCBs
aXN0LmdldCgpKTsKLSAgICBpZiAoYXRvbSAhPSBHREtfTk9ORSkKLSAgICAgICAgZHJvcEF0b21z
LmFwcGVuZChhdG9tKTsKLQotICAgIHJldHVybiBkcm9wQXRvbXM7Ci19Ci0KLXN0YXRpYyBEYXRh
T2JqZWN0R3RrKiBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7Ci0KLXN0YXRpYyB2b2lk
IGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEd0
a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNs
aXBib2FyZChjbGlwYm9hcmQpOwotICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKLSAgICBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShz
ZWxlY3Rpb25EYXRhLCBpbmZvLCBkYXRhT2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJD
bGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRl
ciBkYXRhKQotewotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3Rr
Ojpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBBU1NFUlQoZGF0YU9iamVjdCk7Ci0KLSAg
ICAvLyBPbmx5IGNsZWFyIHRoZSBEYXRhT2JqZWN0IGZvciB0aGlzIGNsaXBib2FyZCBpZiB3ZSBh
cmUgbm90IGN1cnJlbnRseSBzZXR0aW5nIGl0LgotICAgIGlmIChkYXRhT2JqZWN0ICE9IHNldHRp
bmdDbGlwYm9hcmREYXRhT2JqZWN0KQotICAgICAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwot
Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHQ2xvc3VyZSogY2FsbGJh
Y2sgPSBzdGF0aWNfY2FzdDxHQ2xvc3VyZSo+KGRhdGEpOwotICAgIEdWYWx1ZSBmaXJzdEFyZ3Vt
ZW50ID0gezAsIHt7MH19fTsKLSAgICBnX3ZhbHVlX2luaXQoJmZpcnN0QXJndW1lbnQsIEdfVFlQ
RV9QT0lOVEVSKTsKLSAgICBnX3ZhbHVlX3NldF9wb2ludGVyKCZmaXJzdEFyZ3VtZW50LCBjbGlw
Ym9hcmQpOwotICAgIGdfY2xvc3VyZV9pbnZva2UoY2FsbGJhY2ssIDAsIDEsICZmaXJzdEFyZ3Vt
ZW50LCAwKTsKLSAgICBnX2Nsb3N1cmVfdW5yZWYoY2FsbGJhY2spOwotfQotCi12b2lkIFBhc3Rl
Ym9hcmRIZWxwZXI6OndyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9h
cmQsIFNtYXJ0UGFzdGVJbmNsdXNpb24gaW5jbHVkZVNtYXJ0UGFzdGUsIEdDbG9zdXJlKiBjYWxs
YmFjaykKLXsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6
Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgR3RrVGFyZ2V0TGlzdCogbGlzdCA9IHRhcmdl
dExpc3RGb3JEYXRhT2JqZWN0KGRhdGFPYmplY3QsIGluY2x1ZGVTbWFydFBhc3RlKTsKLQotICAg
IGludCBudW1iZXJPZlRhcmdldHM7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhYmxlID0gZ3RrX3Rh
cmdldF90YWJsZV9uZXdfZnJvbV9saXN0KGxpc3QsICZudW1iZXJPZlRhcmdldHMpOwotCi0gICAg
aWYgKG51bWJlck9mVGFyZ2V0cyA+IDAgJiYgdGFibGUpIHsKLSAgICAgICAgc2V0dGluZ0NsaXBi
b2FyZERhdGFPYmplY3QgPSBkYXRhT2JqZWN0OwotCi0gICAgICAgIGd0a19jbGlwYm9hcmRfc2V0
X3dpdGhfZGF0YShjbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAg
ICBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2Fs
bGJhY2ssIGNhbGxiYWNrKTsKLSAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfY2FuX3N0b3JlKGNs
aXBib2FyZCwgMCwgMCk7Ci0KLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSAw
OwotCi0gICAgfSBlbHNlCi0gICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJvYXJkKTsK
LQotICAgIGlmICh0YWJsZSkKLSAgICAgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVlKHRhYmxlLCBu
dW1iZXJPZlRhcmdldHMpOwotICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihsaXN0KTsKLX0KLQot
Ym9vbCBQYXN0ZWJvYXJkSGVscGVyOjpjbGlwYm9hcmRDb250ZW50U3VwcG9ydHNTbWFydFJlcGxh
Y2UoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCi17Ci0gICAgcmV0dXJuIGd0a19jbGlwYm9hcmRf
d2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgc21hcnRQYXN0ZUF0b20pOwotfQot
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJk
SGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjM4ZjgwZGQ4MWZjZTZmNzRmOWVkMjU2
NzQxYzQ2YmY4N2Q4OTViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEx1
Y2EgQnJ1bm8gPGxldGhhbG1hbjg4QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBS
b2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFBhc3RlYm9hcmRI
ZWxwZXJfaAotI2RlZmluZSBQYXN0ZWJvYXJkSGVscGVyX2gKLQotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YU9iamVjdEd0azsKLQotY2xhc3Mg
UGFzdGVib2FyZEhlbHBlciB7Ci1wdWJsaWM6Ci0gICAgUGFzdGVib2FyZEhlbHBlcigpOwotICAg
IHZpcnR1YWwgflBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBzdGF0aWMgUGFzdGVib2FyZEhlbHBl
ciogZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKLQotICAgIHZvaWQgc2V0VXNlUHJpbWFyeVNl
bGVjdGlvbkNsaXBib2FyZChib29sIHVzZVByaW1hcnkpIHsgbV91c2VQcmltYXJ5U2VsZWN0aW9u
Q2xpcGJvYXJkID0gdXNlUHJpbWFyeTsgfQotICAgIGJvb2wgdXNlUHJpbWFyeVNlbGVjdGlvbkNs
aXBib2FyZCgpIHsgcmV0dXJuIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsgfQotCi0g
ICAgZW51bSBTbWFydFBhc3RlSW5jbHVzaW9uIHsgSW5jbHVkZVNtYXJ0UGFzdGUsIERvTm90SW5j
bHVkZVNtYXJ0UGFzdGUgfTsKLQotICAgIEd0a0NsaXBib2FyZCogZ2V0Q3VycmVudENsaXBib2Fy
ZChGcmFtZSopOwotICAgIEd0a0NsaXBib2FyZCogZ2V0Q2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7
Ci0gICAgR3RrQ2xpcGJvYXJkKiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKikg
Y29uc3Q7Ci0gICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCgpIGNvbnN0OwotICAgIEd0a1Rh
cmdldExpc3QqIHRhcmdldExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqLCBTbWFydFBh
c3RlSW5jbHVzaW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Ci0gICAgdm9pZCBmaWxsU2Vs
ZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKLSAg
ICB2b2lkIGZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCBndWlu
dCwgRGF0YU9iamVjdEd0ayopOwotICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXNGb3JDb250
ZXh0KEd0a1dpZGdldCosIEdka0RyYWdDb250ZXh0Kik7Ci0gICAgdm9pZCB3cml0ZUNsaXBib2Fy
ZENvbnRlbnRzKEd0a0NsaXBib2FyZCosIFNtYXJ0UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1
ZGVTbWFydFBhc3RlLCBHQ2xvc3VyZSogPSAwKTsKLSAgICB2b2lkIGdldENsaXBib2FyZENvbnRl
bnRzKEd0a0NsaXBib2FyZCopOwotCi0gICAgZW51bSBQYXN0ZWJvYXJkVGFyZ2V0VHlwZSB7IFRh
cmdldFR5cGVNYXJrdXAsIFRhcmdldFR5cGVUZXh0LCBUYXJnZXRUeXBlSW1hZ2UsIFRhcmdldFR5
cGVVUklMaXN0LCBUYXJnZXRUeXBlTmV0c2NhcGVVUkwsIFRhcmdldFR5cGVTbWFydFBhc3RlLCBU
YXJnZXRUeXBlVW5rbm93biB9OwotICAgIGJvb2wgY2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21h
cnRSZXBsYWNlKEd0a0NsaXBib2FyZCopOwotCi1wcml2YXRlOgotICAgIEd0a1RhcmdldExpc3Qq
IG1fdGFyZ2V0TGlzdDsKLSAgICBib29sIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFBhc3RlYm9hcmRIZWxwZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA2ZDZlMjVjOTkwMDVhMjQyMDBjYTlkNGYw
NTAyNTVmZTIyZjRjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRl
ICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1
ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNo
b3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKLS8vIG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9l
cywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCi0vLyBhdCBidWlsZCB0aW1l
LgotU3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNv
ZGUodW5zaWduZWQga2V5Q29kZSkKLXsKLSAgICBzd2l0Y2ggKGtleUNvZGUpIHsKLSAgICAgICAg
Y2FzZSBHREtfTWVudToKLSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgIGNhc2UgR0RL
X0FsdF9SOgotICAgICAgICAgICAgcmV0dXJuICJBbHQiOwotICAgICAgICBjYXNlIEdES19DbGVh
cjoKLSAgICAgICAgICAgIHJldHVybiAiQ2xlYXIiOwotICAgICAgICBjYXNlIEdES19Eb3duOgot
ICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKLSAgICAgICAgICAgIC8vICJFbmQiCi0gICAgICAg
IGNhc2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiAiRW5kIjsKLSAgICAgICAgICAgIC8v
ICJFbnRlciIKLSAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNlIEdES19L
UF9FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0dXJuICJF
bnRlciI7Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4gIkV4
ZWN1dGUiOwotICAgICAgICBjYXNlIEdES19GMToKLSAgICAgICAgICAgIHJldHVybiAiRjEiOwot
ICAgICAgICBjYXNlIEdES19GMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwotICAgICAgICBj
YXNlIEdES19GMzoKLSAgICAgICAgICAgIHJldHVybiAiRjMiOwotICAgICAgICBjYXNlIEdES19G
NDoKLSAgICAgICAgICAgIHJldHVybiAiRjQiOwotICAgICAgICBjYXNlIEdES19GNToKLSAgICAg
ICAgICAgIHJldHVybiAiRjUiOwotICAgICAgICBjYXNlIEdES19GNjoKLSAgICAgICAgICAgIHJl
dHVybiAiRjYiOwotICAgICAgICBjYXNlIEdES19GNzoKLSAgICAgICAgICAgIHJldHVybiAiRjci
OwotICAgICAgICBjYXNlIEdES19GODoKLSAgICAgICAgICAgIHJldHVybiAiRjgiOwotICAgICAg
ICBjYXNlIEdES19GOToKLSAgICAgICAgICAgIHJldHVybiAiRjkiOwotICAgICAgICBjYXNlIEdE
S19GMTA6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMToK
LSAgICAgICAgICAgIHJldHVybiAiRjExIjsKLSAgICAgICAgY2FzZSBHREtfRjEyOgotICAgICAg
ICAgICAgcmV0dXJuICJGMTIiOwotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkYxMyI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgICAgIHJldHVybiAi
RjE0IjsKLSAgICAgICAgY2FzZSBHREtfRjE1OgotICAgICAgICAgICAgcmV0dXJuICJGMTUiOwot
ICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNiI7Ci0gICAgICAg
IGNhc2UgR0RLX0YxNzoKLSAgICAgICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAgICAgY2FzZSBH
REtfRjE4OgotICAgICAgICAgICAgcmV0dXJuICJGMTgiOwotICAgICAgICBjYXNlIEdES19GMTk6
Ci0gICAgICAgICAgICByZXR1cm4gIkYxOSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoKLSAgICAg
ICAgICAgIHJldHVybiAiRjIwIjsKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICAgICAg
cmV0dXJuICJGMjEiOwotICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAgICAgICByZXR1cm4g
IkYyMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoKLSAgICAgICAgICAgIHJldHVybiAiRjIzIjsK
LSAgICAgICAgY2FzZSBHREtfRjI0OgotICAgICAgICAgICAgcmV0dXJuICJGMjQiOwotICAgICAg
ICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKLSAgICAgICAgY2Fz
ZSBHREtfSG9tZToKLSAgICAgICAgICAgIHJldHVybiAiSG9tZSI7Ci0gICAgICAgIGNhc2UgR0RL
X0luc2VydDoKLSAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICAgICAgY2FzZSBHREtf
TGVmdDoKLSAgICAgICAgICAgIHJldHVybiAiTGVmdCI7Ci0gICAgICAgIGNhc2UgR0RLX1BhZ2Vf
RG93bjoKLSAgICAgICAgICAgIHJldHVybiAiUGFnZURvd24iOwotICAgICAgICBjYXNlIEdES19Q
YWdlX1VwOgotICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAiOwotICAgICAgICBjYXNlIEdES19Q
YXVzZToKLSAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOwotICAgICAgICBjYXNlIEdES18zMjcw
X1ByaW50U2NyZWVuOgotICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVy
biAiUHJpbnRTY3JlZW4iOwotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJl
dHVybiAiUmlnaHQiOwotICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1
cm4gIlNlbGVjdCI7Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuICJV
cCI7Ci0gICAgICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdG
LgotICAgICAgICBjYXNlIEdES19EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7
Ci0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJldHVybiAiVSswMDA4
IjsKLSAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgotICAgICAgICBjYXNlIEdES18zMjcw
X0JhY2tUYWI6Ci0gICAgICAgIGNhc2UgR0RLX1RhYjoKLSAgICAgICAgICAgIHJldHVybiAiVSsw
MDA5IjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBwZXIoa2V5
Q29kZSkpKTsKLSAgICB9Ci19Ci0KLWludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NL
ZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBrZXljb2RlKQotewotICAgIHN3aXRjaCAoa2V5
Y29kZSkgewotICAgICAgICBjYXNlIEdES19LUF8wOgotICAgICAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNlIEdES19LUF8x
OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAx
IGtleQotICAgICAgICBjYXNlIEdES19LUF8yOgotICAgICAgICAgICAgcmV0dXJuICBWS19OVU1Q
QUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzM6
Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAz
IGtleQotICAgICAgICBjYXNlIEdES19LUF80OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNToK
LSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNjoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2
OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzc6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtl
eQotICAgICAgICBjYXNlIEdES19LUF84OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7
IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfOToKLSAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgotICAgICAgICAgICAgcmV0dXJuIFZLX01V
TFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQotICAgICAgICBjYXNlIEdES19LUF9BZGQ6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKLSAgICAgICAgY2FzZSBH
REtfS1BfU3VidHJhY3Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkg
U3VidHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQotICAgICAgICBjYXNlIEdES19L
UF9EaXZpZGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBr
ZXkKLQotICAgICAgICBjYXNlIEdES19LUF9QYWdlX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZL
X1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93
bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKLSAg
ICAgICAgY2FzZSBHREtfS1BfRW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIz
KSBFTkQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4g
VktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQotICAgICAgICBjYXNlIEdES19LUF9MZWZ0OgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKLSAgICAgICAg
Y2FzZSBHREtfS1BfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJS
T1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1JpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZL
X1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19LUF9Eb3du
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKLQot
ICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfQkFDSzsg
Ly8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKLSAg
ICAgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgotICAgICAgICBjYXNlIEdES19UYWI6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKLSAgICAgICAgY2FzZSBHREtf
Q2xlYXI6Ci0gICAgICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Ci0g
ICAgICAgIGNhc2UgR0RLX1JldHVybjoKLSAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8v
KDBEKSBSZXR1cm4ga2V5Ci0KLSAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5
Ci0gICAgICAgICAgICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKLQotICAgICAgICBjYXNl
IEdES19NZW51OgotICAgICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFwcGxpY2F0
aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCi0KLSAgICAgICAgICAgIC8vIFZLX01FTlUgKDEy
KSBBTFQga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoK
LSAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKLSAg
ICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgotICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0Ogot
ICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAo
SU1FKSBLYW5hIG1vZGUKLSAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCi0gICAgICAg
ICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCi0gICAgICAgICAgICAvLyBWS19G
SU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToK
LSAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQotICAg
ICAgICBjYXNlIEdES19LYW5qaToKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5
KSBJTUUgS2FuamkgbW9kZQotICAgICAgICBjYXNlIEdES19Fc2NhcGU6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NPTlZF
UlQgKDFDKSBJTUUgY29udmVydAotICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElN
RSBub25jb252ZXJ0Ci0gICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Ci0g
ICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QK
LSAgICAgICAgY2FzZSBHREtfc3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8v
ICgyMCkgU1BBQ0VCQVIKLSAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJl
dHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQotICAgICAgICBjYXNlIEdES19QYWdl
X0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgy
MykgRU5EIGtleQotICAgICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQot
ICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8g
KDI3KSBSSUdIVCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAgICAgICAg
IHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RL
X1NlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtl
eQotICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVybiBWS19TTkFQU0hP
VDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5Ci0gICAgICAg
IGNhc2UgR0RLX0luc2VydDoKLSAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5Ci0gICAgICAgIGNhc2UgR0RLX0Rl
bGV0ZToKLSAgICAgICAgY2FzZSBHREtfS1BfRGVsZXRlOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0RFTEVURTsgLy8gKDJFKSBERUwga2V5Ci0gICAgICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQotICAgICAgICBjYXNlIEdES18w
OgotICAgICAgICBjYXNlIEdES19wYXJlbnJpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLXzA7
ICAgIC8vICAoMzApIDApIGtleQotICAgICAgICBjYXNlIEdES18xOgotICAgICAgICBjYXNlIEdE
S19leGNsYW06Ci0gICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQotICAg
ICAgICBjYXNlIEdES18yOgotICAgICAgICBjYXNlIEdES19hdDoKLSAgICAgICAgICAgIHJldHVy
biBWS18yOyAvLyAgKDMyKSAyICYga2V5Ci0gICAgICAgIGNhc2UgR0RLXzM6Ci0gICAgICAgIGNh
c2UgR0RLX251bWJlcnNpZ246Ci0gICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzog
Y2FzZSAnIyc7Ci0gICAgICAgIGNhc2UgR0RLXzQ6Ci0gICAgICAgIGNhc2UgR0RLX2RvbGxhcjog
Ly8gICgzNCkgNCBrZXkgJyQnOwotICAgICAgICAgICAgcmV0dXJuIFZLXzQ7Ci0gICAgICAgIGNh
c2UgR0RLXzU6Ci0gICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfNTsgLy8gICgzNSkgNSBrZXkgICclJwotICAgICAgICBjYXNlIEdES182OgotICAgICAgICBj
YXNlIEdES19hc2NpaWNpcmN1bToKLSAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2
IGtleSAgJ14nCi0gICAgICAgIGNhc2UgR0RLXzc6Ci0gICAgICAgIGNhc2UgR0RLX2FtcGVyc2Fu
ZDoKLSAgICAgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKLSAg
ICAgICAgY2FzZSBHREtfODoKLSAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfODsgLy8gICgzOCkgOCBrZXkgICcqJwotICAgICAgICBjYXNlIEdES185Ogot
ICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfOTsgLy8g
ICgzOSkgOSBrZXkgJygnCi0gICAgICAgIGNhc2UgR0RLX2E6Ci0gICAgICAgIGNhc2UgR0RLX0E6
Ci0gICAgICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2Ug
J0EnOiByZXR1cm4gMHg0MTsKLSAgICAgICAgY2FzZSBHREtfYjoKLSAgICAgICAgY2FzZSBHREtf
QjoKLSAgICAgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2Fz
ZSAnQic6IHJldHVybiAweDQyOwotICAgICAgICBjYXNlIEdES19jOgotICAgICAgICBjYXNlIEdE
S19DOgotICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBj
YXNlICdDJzogcmV0dXJuIDB4NDM7Ci0gICAgICAgIGNhc2UgR0RLX2Q6Ci0gICAgICAgIGNhc2Ug
R0RLX0Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6
IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKLSAgICAgICAgY2FzZSBHREtfZToKLSAgICAgICAgY2Fz
ZSBHREtfRToKLSAgICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBjYXNlICdl
JzogY2FzZSAnRSc6IHJldHVybiAweDQ1OwotICAgICAgICBjYXNlIEdES19mOgotICAgICAgICBj
YXNlIEdES19GOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5IGNhc2Ug
J2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7Ci0gICAgICAgIGNhc2UgR0RLX2c6Ci0gICAgICAg
IGNhc2UgR0RLX0c6Ci0gICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2Fz
ZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKLSAgICAgICAgY2FzZSBHREtfaDoKLSAgICAg
ICAgY2FzZSBHREtfSDoKLSAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBj
YXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4OwotICAgICAgICBjYXNlIEdES19pOgotICAg
ICAgICBjYXNlIEdES19JOgotICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5
IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7Ci0gICAgICAgIGNhc2UgR0RLX2o6Ci0g
ICAgICAgIGNhc2UgR0RLX0o6Ci0gICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0QSkgSiBr
ZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKLSAgICAgICAgY2FzZSBHREtfazoK
LSAgICAgICAgY2FzZSBHREtfSzoKLSAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAgKDRCKSBL
IGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOwotICAgICAgICBjYXNlIEdES19s
OgotICAgICAgICBjYXNlIEdES19MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMp
IEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7Ci0gICAgICAgIGNhc2UgR0RL
X206Ci0gICAgICAgIGNhc2UgR0RLX006Ci0gICAgICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0
RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKLSAgICAgICAgY2FzZSBH
REtfbjoKLSAgICAgICAgY2FzZSBHREtfTjoKLSAgICAgICAgICAgIHJldHVybiBWS19OOyAvLyAg
KDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOwotICAgICAgICBjYXNl
IEdES19vOgotICAgICAgICBjYXNlIEdES19POgotICAgICAgICAgICAgcmV0dXJuIFZLX087IC8v
ICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7Ci0gICAgICAgIGNh
c2UgR0RLX3A6Ci0gICAgICAgIGNhc2UgR0RLX1A6Ci0gICAgICAgICAgICByZXR1cm4gVktfUDsg
Ly8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKLSAgICAgICAg
Y2FzZSBHREtfcToKLSAgICAgICAgY2FzZSBHREtfUToKLSAgICAgICAgICAgIHJldHVybiBWS19R
OyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOwotICAgICAg
ICBjYXNlIEdES19yOgotICAgICAgICBjYXNlIEdES19SOgotICAgICAgICAgICAgcmV0dXJuIFZL
X1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7Ci0gICAg
ICAgIGNhc2UgR0RLX3M6Ci0gICAgICAgIGNhc2UgR0RLX1M6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKLSAg
ICAgICAgY2FzZSBHREtfdDoKLSAgICAgICAgY2FzZSBHREtfVDoKLSAgICAgICAgICAgIHJldHVy
biBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAweDU0Owot
ICAgICAgICBjYXNlIEdES191OgotICAgICAgICBjYXNlIEdES19VOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7
Ci0gICAgICAgIGNhc2UgR0RLX3Y6Ci0gICAgICAgIGNhc2UgR0RLX1Y6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1
NjsKLSAgICAgICAgY2FzZSBHREtfdzoKLSAgICAgICAgY2FzZSBHREtfVzoKLSAgICAgICAgICAg
IHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAw
eDU3OwotICAgICAgICBjYXNlIEdES194OgotICAgICAgICBjYXNlIEdES19YOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJu
IDB4NTg7Ci0gICAgICAgIGNhc2UgR0RLX3k6Ci0gICAgICAgIGNhc2UgR0RLX1k6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1
cm4gMHg1OTsKLSAgICAgICAgY2FzZSBHREtfejoKLSAgICAgICAgY2FzZSBHREtfWjoKLSAgICAg
ICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJl
dHVybiAweDVBOwotICAgICAgICBjYXNlIEdES19NZXRhX0w6Ci0gICAgICAgICAgICByZXR1cm4g
VktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXli
b2FyZCkKLSAgICAgICAgY2FzZSBHREtfTWV0YV9SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1JX
SU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCi0gICAgICAg
ICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQotICAgICAgICAgICAgLy8g
VktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQotICAgICAgICAgICAgLy8gVktfU1VCVFJB
Q1QgKDZEKSBTdWJ0cmFjdCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNp
bWFsIGtleQotICAgICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQotICAgICAg
ICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQotCi0gICAgICAgIGNhc2UgR0RLX051
bV9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sg
a2V5Ci0KLSAgICAgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4g
VktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQotCi0gICAgICAgIGNhc2UgR0RLX1No
aWZ0X0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQgU0hJRlQg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX1NoaWZ0X1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUlNI
SUZUOyAvLyAoQTEpIFJpZ2h0IFNISUZUIGtleQotICAgICAgICBjYXNlIEdES19Db250cm9sX0w6
Ci0gICAgICAgICAgICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05UUk9MIGtl
eQotICAgICAgICBjYXNlIEdES19Db250cm9sX1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUkNP
TlRST0w7IC8vIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKLSAgICAgICAgY2FzZSBHREtfQWx0X0w6
Ci0gICAgICAgICAgICByZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtleQotICAg
ICAgICBjYXNlIEdES19BbHRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1
KSBSaWdodCBNRU5VIGtleQotCi0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dT
RVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtleQotICAg
ICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93
c2VyIFJlZnJlc2gga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJf
U0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2Vy
IEZhdm9yaXRlcyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRv
d3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKLSAgICAgICAgICAgIC8vIFZL
X1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKLSAgICAg
ICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93
biBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDog
Vm9sdW1lIFVwIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdp
bmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BS
RVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQotICAgICAg
ICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBNZWRpYSBr
ZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAv
WFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAo
QjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xB
VU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkK
LSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFy
dCBBcHBsaWNhdGlvbiAxIGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBX
aW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5Ci0KLSAgICAgICAgICAgIC8v
IFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJzs6JyBrZXkKLSAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgotICAgICAg
ICBjYXNlIEdES19jb2xvbjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7
JzogY2FzZSAnOic6IHJldHVybiAweEJBOwotICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJC
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX3BsdXM6Ci0gICAgICAgIGNhc2UgR0RLX2VxdWFsOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7
Ci0gICAgICAgICAgICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBh
bnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5Ci0gICAgICAgIGNhc2UgR0RLX2NvbW1hOgot
ICAgICAgICBjYXNlIEdES19sZXNzOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsg
Ly9jYXNlICcsJzogY2FzZSAnPCc6IHJldHVybiAweEJDOwotICAgICAgICAgICAgLy8gVktfT0VN
X01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUg
Jy0nIGtleQotICAgICAgICBjYXNlIEdES19taW51czoKLSAgICAgICAgY2FzZSBHREtfdW5kZXJz
Y29yZToKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2Ug
J18nOiByZXR1cm4gMHhCRDsKLSAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Ci0gICAgICAg
IGNhc2UgR0RLX3BlcmlvZDoKLSAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKLSAgICAgICAgICAg
IHJldHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7
Ci0gICAgICAgICAgICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcvPycga2V5Ci0gICAgICAgIGNhc2UgR0RLX3Ns
YXNoOgotICAgICAgICBjYXNlIEdES19xdWVzdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBWS19P
RU1fMjsgLy9jYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOwotICAgICAgICAgICAgLy8g
VktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2
YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5
Ym9hcmQsIHRoZSAnYH4nIGtleQotICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgotICAgICAg
ICBjYXNlIEdES19xdW90ZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2Fz
ZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsKLSAgICAgICAgICAgIC8vIFZLX09FTV80IChE
QikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
J1t7JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6Ci0gICAgICAgIGNhc2UgR0RL
X2JyYWNlbGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2Fz
ZSAneyc6IHJldHVybiAweERCOwotICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZv
ciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5k
b3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQot
ICAgICAgICBjYXNlIEdES19iYWNrc2xhc2g6Ci0gICAgICAgIGNhc2UgR0RLX2JhcjoKLSAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhE
QzsKLSAgICAgICAgICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBj
aGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3Ig
dGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKLSAgICAgICAgY2FzZSBHREtf
YnJhY2tldHJpZ2h0OgotICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgotICAgICAgICAgICAg
cmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOwotICAg
ICAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3Rl
cnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMg
c3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX3F1b3RlcmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1
cm4gMHhERTsKLSAgICAgICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KLSAgICAgICAgICAgIC8v
IFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tl
dCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKLSAg
ICAgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dz
IE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKLSAgICAgICAgICAgIC8v
IFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hh
cmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMg
dGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1r
ZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBp
biBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCi0gICAgICAg
ICAgICAvLyBWS19BVFROIChGNikgQXR0biBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NSU0VMIChG
NykgQ3JTZWwga2V5Ci0gICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQotICAg
ICAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5Ci0gICAgICAgICAgICAvLyBW
S19QTEFZIChGQSkgUGxheSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtl
eQotICAgICAgICAgICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UK
LSAgICAgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKLSAgICAgICAgICAgIC8vIFZLX09F
TV9DTEVBUiAoRkUpIENsZWFyIGtleQotICAgICAgICBjYXNlIEdES19GMToKLSAgICAgICAgY2Fz
ZSBHREtfRjI6Ci0gICAgICAgIGNhc2UgR0RLX0YzOgotICAgICAgICBjYXNlIEdES19GNDoKLSAg
ICAgICAgY2FzZSBHREtfRjU6Ci0gICAgICAgIGNhc2UgR0RLX0Y2OgotICAgICAgICBjYXNlIEdE
S19GNzoKLSAgICAgICAgY2FzZSBHREtfRjg6Ci0gICAgICAgIGNhc2UgR0RLX0Y5OgotICAgICAg
ICBjYXNlIEdES19GMTA6Ci0gICAgICAgIGNhc2UgR0RLX0YxMToKLSAgICAgICAgY2FzZSBHREtf
RjEyOgotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAg
ICAgY2FzZSBHREtfRjE1OgotICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAgIGNhc2UgR0RL
X0YxNzoKLSAgICAgICAgY2FzZSBHREtfRjE4OgotICAgICAgICBjYXNlIEdES19GMTk6Ci0gICAg
ICAgIGNhc2UgR0RLX0YyMDoKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICBjYXNlIEdE
S19GMjI6Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoKLSAgICAgICAgY2FzZSBHREtfRjI0OgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOwotICAgICAgICBjYXNl
IEdES19LRVlfVm9pZFN5bWJvbDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNTS0VZOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi19Ci0KLVN0
cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25l
ZCB2YWwpCi17Ci0gICAgc3dpdGNoICh2YWwpIHsKLSAgICAgICAgY2FzZSBHREtfSVNPX0VudGVy
OgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgot
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHIiKTsKLSAgICAgICAgY2FzZSBHREtfQmFja1Nw
YWNlOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHg4Iik7Ci0gICAgICAgIGNhc2UgR0RL
X1RhYjoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlx0Iik7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7Ci0g
ICAgICAgICAgICBnbG9uZyBud2M7Ci0gICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBn
X3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2MsIDApOwotCi0gICAgICAgICAgICBTdHJpbmcg
cmV0VmFsOwotICAgICAgICAgICAgaWYgKHVjaGFyMTYpCi0gICAgICAgICAgICAgICAgcmV0VmFs
ID0gU3RyaW5nKChVQ2hhciopdWNoYXIxNiwgbndjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICByZXRWYWwgPSBTdHJpbmcoKTsKLQotICAgICAgICAgICAgZ19mcmVlKHVjaGFy
MTYpOwotCi0gICAgICAgICAgICByZXR1cm4gcmV0VmFsOwotICAgIH0KLX0KLQotc3RhdGljIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2
ZW50KQotewotICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0
Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci19Ci0KLXN0YXRpYyBQ
bGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqIGV2ZW50KQotewotICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOwotICAgIGlmIChl
dmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdES18zMjcw
X0JhY2tUYWIpCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsK
LSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdE
S19NT0QxX01BU0spCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7
Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAgIG1vZGlmaWVy
cyB8PSBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0
Zm9ybUV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Ci19Ci0KLS8vIEtlZXAgdGhpcyBpbiBz
eW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBj
b25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKLSAgICA6IFBsYXRm
b3JtRXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtL
ZXlFdmVudChldmVudCksIGN1cnJlbnRUaW1lKCkpCi0gICAgLCBtX3RleHQoY29tcG9zaXRpb25S
ZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVT
dHJpbmcgOiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCi0gICAgLCBtX3Vu
bW9kaWZpZWRUZXh0KG1fdGV4dCkKLSAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVy
Rm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKLSAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlD
b2RlKHdpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKLSAgICAsIG1f
bmF0aXZlVmlydHVhbEtleUNvZGUoZXZlbnQtPmtleXZhbCkKLSAgICAsIG1fbWFjQ2hhckNvZGUo
MCkKLSAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtl
eXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkKLSAgICAs
IG1faXNTeXN0ZW1LZXkoZmFsc2UpCi0gICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQotICAgICwg
bV9jb21wb3NpdGlvblJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQotewotICAgIC8vIFRvIG1h
dGNoIHRoZSBiZWhhdmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMg
dGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KLSAgICBpZiAoY29tcG9zaXRpb25S
ZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKQotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9IFZLX1BST0NFU1NLRVk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojpk
aXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJp
bGl0eU1vZGUpCi17Ci0gICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRv
IFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29u
dmVyc2lvbnMuCi0gICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKLSAgICBtX3R5cGUgPSB0
eXBlOwotCi0gICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAg
ICAgbV90ZXh0ID0gU3RyaW5nKCk7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmco
KTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBv
c2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkgewotICAgICAgICAvLyBIYXZpbmcg
ZW1wdHkgdGV4dCwgcHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlwcmVzcykg
ZXZlbnQKLSAgICAgICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQgdHJpZ2dl
ciBjb21wb3NpdGlvbiBldmVudHMgc2hvdWxkIG5vdAotICAgICAgICAvLyBmaXJlIGtleXByZXNz
LgotICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9
IFN0cmluZygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmlu
ZygpOwotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7Ci0gICAgfQotfQotCi1i
b29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQotewotICAg
IHJldHVybiBnZGtfa2V5bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9nZXRfZGVm
YXVsdCgpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2Rp
ZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJv
b2wmIG1ldGFLZXkpCi17Ci0gICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOwotICAgIGd0a19nZXRf
Y3VycmVudF9ldmVudF9zdGF0ZSgmc3RhdGUpOwotCi0gICAgc2hpZnRLZXkgPSBzdGF0ZSAmIEdE
S19TSElGVF9NQVNLOwotICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01BU0s7Ci0g
ICAgYWx0S2V5ID0gc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1ldGFLZXkgPSBzdGF0ZSAm
IEdES19NRVRBX01BU0s7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDA0MTAxYzFmYTNkNzI4NjZjYmM5NTNmODRiNTcyODU5MzdmMzIxM2QuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MTcgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0q
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNp
bmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFdv
dWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbW9kaWZpZXIgaXMgQWx0IGlu
c3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0QxX01BU0suCi0KLS8vIEtlZXAgdGhpcyBpbiBz
eW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1N
b3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotewot
ICAgIG1fdGltZXN0YW1wID0gZXZlbnQtPnRpbWU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50
KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJ
bnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlfcm9vdCk7Ci0KLSAgICBt
X21vZGlmaWVycyA9IDA7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLKQot
ICAgICAgICBtX21vZGlmaWVycyB8PSBTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYg
R0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAgICBp
ZiAoZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0g
QWx0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTUVUQV9NQVNLKQotICAgICAgICBt
X21vZGlmaWVycyB8PSBNZXRhS2V5OwotCi0gICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAg
IGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAg
IGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0g
ICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDsKLSAgICAgICAgaWYg
KGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkgewotICAgICAgICAgICAgbV90eXBl
ID0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKLSAgICAgICAgICAgIG1fY2xpY2tDb3Vu
dCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVT
UykKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgbV9jbGlja0NvdW50ID0g
MjsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0g
ICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgIGlmIChldmVudC0+YnV0dG9u
ID09IDEpCi0gICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAgIGVsc2Ug
aWYgKGV2ZW50LT5idXR0b24gPT0gMikKLSAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0
dG9uOwotICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDMpCi0gICAgICAgICAgICBt
X2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH07Ci19Ci0KLVBsYXRmb3JtTW91c2VF
dmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKiBtb3Rpb24pCi17Ci0gICAg
bV90aW1lc3RhbXAgPSBtb3Rpb24tPnRpbWU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChp
bnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IElu
dFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55X3Jvb3QpOwotCi0gICAg
bV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZUX01BU0sp
Ci0gICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChtb3Rpb24tPnN0YXRl
ICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAg
ICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJz
IHw9IEFsdEtleTsKLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAg
ICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7Ci0KLSAgICBzd2l0Y2ggKG1vdGlvbi0+dHlwZSkg
ewotICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlTW92ZWQ7Ci0gICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247Ci0gICAgICAg
IG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH07Ci0KLSAgICBpZiAobW90aW9uLT5zdGF0ZSAm
IEdES19CVVRUT04xX01BU0spCi0gICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKLSAgICBl
bHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKLSAgICAgICAgbV9idXR0
b24gPSBNaWRkbGVCdXR0b247Ci0gICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRU
T04zX01BU0spCi0gICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247Ci19Ci19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBj
NWY5MTZjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAy
MDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCi0KLSNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIldpZGdldC5o
IgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRp
YyBHdGtXaWRnZXQqIGdldFRvcGxldmVsKEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dp
ZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIHJl
dHVybiBndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRvcGxldmVsKSA/IHRvcGxldmVsIDogMDsKLX0K
LQotc3RhdGljIEdka1Zpc3VhbCogZ2V0VmlzdWFsKFdpZGdldCogd2lkZ2V0KQotewotICAgIEd0
a1dpZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOwotICAgIGlmICghY29udGFp
bmVyKSB7Ci0gICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpOwotICAgICAgICByZXR1cm4gc2NyZWVuID8gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3Vh
bChzY3JlZW4pIDogMDsKLSAgICB9Ci0KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3JlYWxpemVk
KGNvbnRhaW5lcikpCi0gICAgICAgIGNvbnRhaW5lciA9IGdldFRvcGxldmVsKGNvbnRhaW5lcik7
Ci0gICAgcmV0dXJuIGNvbnRhaW5lciA/IGdka193aW5kb3dfZ2V0X3Zpc3VhbChndGtfd2lkZ2V0
X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOwotfQotCi1pbnQgc2NyZWVuRGVwdGgoV2lkZ2V0
KiB3aWRnZXQpCi17Ci0gICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZXRWaXN1YWwod2lkZ2V0KTsK
LSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgcmV0dXJuIDI0OwotICAgIHJldHVybiBnZGtfdmlz
dWFsX2dldF9kZXB0aCh2aXN1YWwpOwotfQotCi1pbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQo
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZXRWaXN1YWwod2lk
Z2V0KTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgcmV0dXJuIDg7Ci0KLSAgICByZXR1cm4g
Z2RrX3Zpc3VhbF9nZXRfYml0c19wZXJfcmdiKHZpc3VhbCk7Ci19Ci0KLWJvb2wgc2NyZWVuSXNN
b25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQotewotICAgIHJldHVybiBzY3JlZW5EZXB0aCh3aWRn
ZXQpIDwgMjsKLX0KLQotCi1zdGF0aWMgR2RrU2NyZWVuKiBnZXRTY3JlZW4oR3RrV2lkZ2V0KiB3
aWRnZXQpCi17Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfaGFzX3NjcmVlbih3aWRnZXQpID8gZ3Rr
X3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7Ci19
Ci0KLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdl
dCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOwotICAgIGlmIChjb250YWluZXIpCi0g
ICAgICAgIGNvbnRhaW5lciA9IGdldFRvcGxldmVsKGNvbnRhaW5lcik7Ci0KLSAgICBHZGtTY3Jl
ZW4qIHNjcmVlbiA9IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVl
bl9nZXRfZGVmYXVsdCgpOwotICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Ci0KLSAgICBnaW50IG1vbml0b3IgPSBjb250YWluZXIgPyBnZGtfc2NyZWVuX2dldF9t
b25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250YWluZXIp
KSA6IDA7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnk7Ci0gICAgZ2RrX3NjcmVlbl9nZXRf
bW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0b3IsICZnZW9tZXRyeSk7Ci0KLSAgICByZXR1
cm4gRmxvYXRSZWN0KGdlb21ldHJ5LngsIGdlb21ldHJ5LnksIGdlb21ldHJ5LndpZHRoLCBnZW9t
ZXRyeS5oZWlnaHQpOwotfQotCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQq
IHdpZGdldCkKLXsKLSAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURH
RVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDog
MDsKLSAgICBpZiAoY29udGFpbmVyICYmICFndGtfd2lkZ2V0X2dldF9yZWFsaXplZChjb250YWlu
ZXIpKQotICAgICAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwotCi0gICAgR2RrU2NyZWVu
KiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdka19zY3JlZW5f
Z2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwotCi0gICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVlbl9nZXRfbW9u
aXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVyKSkg
OiAwOwotCi0gICAgR2RrUmVjdGFuZ2xlIHdvcmtBcmVhOwotICAgIGdka19zY3JlZW5fZ2V0X21v
bml0b3Jfd29ya2FyZWEoc2NyZWVuLCBtb25pdG9yLCAmd29ya0FyZWEpOwotCi0gICAgcmV0dXJu
IEZsb2F0UmVjdCh3b3JrQXJlYS54LCB3b3JrQXJlYS55LCB3b3JrQXJlYS53aWR0aCwgd29ya0Fy
ZWEuaGVpZ2h0KTsKLQotfQotCi12b2lkIHNjcmVlbkNvbG9yUHJvZmlsZShDb2xvclByb2ZpbGUm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZl
bnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVu
dEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGJmOWE4OWQ3NmQwNWY1
MjhlZDM0OWRlMDUzNjcyNzEyZGY4YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi0j
aW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBLZWVwIHRoaXMgaW4g
c3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25zdHJ1Y3RvcnMKLVBsYXRmb3Jt
V2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKLXsK
LSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVsdGEgPSAxOwotCi0gICAgbV90eXBlID0gUGxhdGZv
cm1FdmVudDo6V2hlZWw7Ci0gICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotCi0gICAg
bV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykK
LSAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAm
IEdES19DT05UUk9MX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEN0cmxLZXk7Ci0gICAg
aWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9
IEFsdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKLSAgICAgICAg
bV9tb2RpZmllcnMgfD0gTWV0YUtleTsKLQotICAgIG1fZGVsdGFYID0gMDsKLSAgICBtX2RlbHRh
WSA9IDA7Ci0KLSAgICAvLyBEb2NzIHNheSBhbiB1cHdhcmRzIHNjcm9sbCAoYXdheSBmcm9tIHRo
ZSB1c2VyKSBoYXMgYSBwb3NpdGl2ZSBkZWx0YQotICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlv
bikgewotICAgICAgICBjYXNlIEdES19TQ1JPTExfVVA6Ci0gICAgICAgICAgICBtX2RlbHRhWSA9
IGRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dO
OgotICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6Ci0gICAgICAgICAgICBtX2RlbHRhWCA9IGRlbHRh
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKLSAg
ICAgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9TTU9PVEg6
IHsKLSAgICAgICAgICAgICAgICBnZG91YmxlIGRlbHRhWCwgZGVsdGFZOwotICAgICAgICAgICAg
ICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50
Kj4oZXZlbnQpLCAmZGVsdGFYLCAmZGVsdGFZKTsKLSAgICAgICAgICAgICAgICBtX2RlbHRhWCA9
IC1kZWx0YVg7Ci0gICAgICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGFZOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV93aGVlbFRpY2tz
WCA9IG1fZGVsdGFYOwotICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKLQotICAgIG1fcG9z
aXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8
aW50PihldmVudC0+eSkpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNf
Y2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3Qp
KTsKLSAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7Ci0gICAgbV9k
aXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiByZXRy
aWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCBv
biBlYWNoIHdoZWVsIGV2ZW50Ci0gICAgbV9kZWx0YVggKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci0gICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJmNTE3YjAxZWM1MjljNWRmYTUwMmI3YWE1MGI3ZWY4MDQ4MGU2ZmMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGlt
cGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgotICoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgiCi0KLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNv
bnN0IHVpbnQzMl90IGdTZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwotCi1Qb3B1cE1lbnVHdGs6OlBv
cHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fcG9wdXBDbGllbnQo
Y2xpZW50KQotewotfQotCi1Qb3B1cE1lbnVHdGs6On5Qb3B1cE1lbnVHdGsoKQotewotICAgIGlm
IChtX3BvcHVwKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwg
MCwgdGhpcyk7Ci0gICAgICAgIGhpZGUoKTsKLSAgICB9Ci19Ci0KLUd0a0FjdGlvbiogUG9wdXBN
ZW51R3RrOjpjcmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpbnQgaXRlbUluZGV4KQotewotICAg
IEdPd25QdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoInBvcHVwLW1lbnUtYWN0
aW9uLSVkIiwgaXRlbUluZGV4KSk7Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aW9u
X25ldyhhY3Rpb25OYW1lLmdldCgpLCBjbGllbnQoKS0+aXRlbVRleHQoaXRlbUluZGV4KS51dGY4
KCkuZGF0YSgpLCBjbGllbnQoKS0+aXRlbVRvb2xUaXAoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgp
LCAwKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVu
dS1hY3Rpb24taW5kZXgiLCBHSU5UX1RPX1BPSU5URVIoaXRlbUluZGV4KSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0sobWVudUl0ZW1BY3RpdmF0
ZWQpLCB0aGlzKTsKLSAgICAvLyBGSVhNRTogQXBwbHkgdGhlIFBvcHVwTWVudVN0eWxlIGZyb20g
Y2xpZW50KCktPml0ZW1TdHlsZShpKQotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9u
LCAhY2xpZW50KCktPml0ZW1TdHlsZShpdGVtSW5kZXgpLmlzRGlzcGxheU5vbmUoKSk7Ci0gICAg
Z3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbiwgY2xpZW50KCktPml0ZW1Jc0VuYWJsZWQo
aXRlbUluZGV4KSk7Ci0KLSAgICByZXR1cm4gYWN0aW9uOwotfQotCi12b2lkIFBvcHVwTWVudUd0
azo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkK
LXsKLSAgICBBU1NFUlQoY2xpZW50KCkpOwotCi0gICAgaWYgKCFtX3BvcHVwKSB7Ci0gICAgICAg
IG1fcG9wdXAgPSBHdGtQb3B1cE1lbnU6OmNyZWF0ZSgpOwotICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fcG9wdXAtPnBsYXRmb3JtTWVudSgpLCAidW5tYXAiLCBHX0NBTExCQUNLKFBvcHVwTWVu
dUd0azo6bWVudVVubWFwcGVkKSwgdGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcG9wdXAt
PmNsZWFyKCk7Ci0KLSAgICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVudCgpLT5saXN0U2l6ZSgpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChjbGllbnQo
KS0+aXRlbUlzU2VwYXJhdG9yKGkpKQotICAgICAgICAgICAgbV9wb3B1cC0+YXBwZW5kU2VwYXJh
dG9yKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFj
dGlvbiA9IGFkb3B0R1JlZihjcmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpKSk7Ci0gICAgICAg
ICAgICBtX3BvcHVwLT5hcHBlbmRJdGVtKGFjdGlvbi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBJbnRQb2ludCBtZW51UG9zaXRpb24gPSBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVl
blBvaW50KEdUS19XSURHRVQodmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQo
KSksIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgbWVudVBv
c2l0aW9uLm1vdmUoMCwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBtX3BvcHVwLT5wb3BVcChyZWN0
LnNpemUoKSwgbWVudVBvc2l0aW9uLCBzaXplLCBpbmRleCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50
KCkpOwotCi0gICAgLy8gR1RLIGNhbiByZWZ1c2UgdG8gYWN0dWFsbHkgb3BlbiB0aGUgbWVudSB3
aGVuIG1vdXNlIGdyYWJzIGZhaWxzLgotICAgIC8vIEVuc3VyZSBXZWJDb3JlIGRvZXMgbm90IGdv
IGludG8gc29tZSBwZXNreSBzdGF0ZS4KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3Zpc2libGUo
bV9wb3B1cC0+cGxhdGZvcm1NZW51KCkpKQotICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRl
KCk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51R3RrOjpoaWRlKCkKLXsKLSAgICBBU1NFUlQobV9wb3B1
cCk7Ci0gICAgbV9wb3B1cC0+cG9wRG93bigpOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6dXBk
YXRlRnJvbUVsZW1lbnQoKQotewotICAgIGNsaWVudCgpLT5zZXRUZXh0RnJvbUl0ZW0oY2xpZW50
KCktPnNlbGVjdGVkSW5kZXgoKSk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51R3RrOjpkaXNjb25uZWN0
Q2xpZW50KCkKLXsKLSAgICBtX3BvcHVwQ2xpZW50ID0gMDsKLX0KLQotdm9pZCBQb3B1cE1lbnVH
dGs6Om1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9uLCBQb3B1cE1lbnVHdGsqIHRo
YXQpCi17Ci0gICAgQVNTRVJUKHRoYXQtPmNsaWVudCgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+
dmFsdWVDaGFuZ2VkKEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChh
Y3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiKSkpOwotfQotCi12b2lkIFBvcHVwTWVu
dUd0azo6bWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVwTWVudUd0ayogdGhhdCkKLXsKLSAg
ICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAgIHRoYXQtPmNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UG9wdXBNZW51R3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3Rr
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkODExZmJmNWZlMzlmN2Q0ZjRjMmMy
Y2IwYjgwMzUyYTZkOTA4OWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUG9wdXBN
ZW51R3RrX2gKLSNkZWZpbmUgUG9wdXBNZW51R3RrX2gKLQotI2luY2x1ZGUgIkd0a1BvcHVwTWVu
dS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLSNpbmNs
dWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
cmFtZVZpZXc7Ci1jbGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFBvcHVwTWVudUd0ayA6IHB1Ymxp
YyBQb3B1cE1lbnUgewotcHVibGljOgotICAgIFBvcHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQq
KTsKLSAgICB+UG9wdXBNZW51R3RrKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBJ
bnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50IGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZSgp
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBkaXNjb25uZWN0Q2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgUG9wdXBNZW51Q2xpZW50KiBj
bGllbnQoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwQ2xpZW50OyB9Ci0gICAgR3RrQWN0aW9uKiBj
cmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpbnQgaXRlbUluZGV4KTsKLQotICAgIHN0YXRpYyB2
b2lkIG1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnVHdGsqKTsKLSAgICBzdGF0aWMg
dm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtBY3Rpb24qLCBQb3B1cE1lbnVHdGsqKTsKLQotICAg
IFBvcHVwTWVudUNsaWVudCogbV9wb3B1cENsaWVudDsKLSAgICBPd25QdHI8R3RrUG9wdXBNZW51
PiBtX3BvcHVwOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUG9wdXBNZW51R3RrX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDUyNThmMzZhY2Y3NDM3
M2RmMTAwMjZmZDhjOTg5NDYwZmY2Yzk0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuaCIKLQotI2lmIFVTRShHTFgpCi0KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9Y
Y29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgotI2luY2x1
ZGUgPGNhaXJvLXhsaWIuaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdyo+IFdpbmRvd0hhc2hNYXA7Ci1zdGF0aWMgV2luZG93SGFzaE1hcCYgZ2V0
V2luZG93SGFzaE1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFw
LCB3aW5kb3dIYXNoTWFwLCAoKSk7Ci0gICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Ci19Ci0KLXN0
YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKLXN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVy
WERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQsIHZvaWQq
KQotewotICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50
KTsKLSAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90
aWZ5KQotICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAgIFhEYW1hZ2VO
b3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlF
dmVudCo+KHhFdmVudCk7Ci0gICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdp
bmRvd0hhc2hNYXAoKTsKLSAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93SGFz
aE1hcC5maW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7Ci0gICAgaWYgKGkgPT0gd2luZG93SGFz
aE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Ci0KLSAgICBp
LT52YWx1ZS0+Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0gICAgWERhbWFnZVN1YnRyYWN0
KEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VF
dmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7
Ci19Ci0KLXN0YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQotewotICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaGFzRXh0
ZW5zaW9ucyA9IGZhbHNlOwotCi0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4g
aGFzRXh0ZW5zaW9uczsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGludCBlcnJv
ckJhc2U7Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRp
c3BsYXksICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaW50IGV2ZW50QmFzZTsKLSAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVu
c2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIu
Ci0gICAgaW50IG1ham9yLCBtaW5vcjsKLSAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3Bs
YXksICZtYWpvciwgJm1pbm9yKTsKLSAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlu
b3IgPCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaGFzRXh0ZW5zaW9ucyA9IHRy
dWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLXsKLSAgICByZXR1cm4gc3Vw
cG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93KHNpemUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKLX0KLQotUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IElu
dFNpemUmIHNpemUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCi0gICAgOiBtX3NpemUo
c2l6ZSkKLSAgICAsIG1fd2luZG93KDApCi0gICAgLCBtX3BhcmVudFdpbmRvdygwKQotICAgICwg
bV9waXhtYXAoMCkKLSAgICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKLSAgICAsIG1f
c3VyZmFjZSgwKQotICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQotICAg
ICwgbV9kYW1hZ2UoMCkKLSAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKLSAgICAsIG1f
ZGFtYWdlTm90aWZ5RGF0YSgwKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExB
WV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBTY3JlZW4qIHNjcmVl
biA9IERlZmF1bHRTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSk7Ci0KLSAgICAvLyBUaGlzIGlzIGJh
c2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90
cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYwotICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRv
d0F0dHJpYnV0ZXM7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRy
dWU7Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCi0gICAgICAg
IFJvb3RXaW5kb3dPZlNjcmVlbihzY3JlZW4pLAotICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVl
bikgKyAxLCAwLCAxLCAxLAotICAgICAgICAwLAotICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAg
ICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBDV092
ZXJyaWRlUmVkaXJlY3QsCi0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2lu
ZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKLQotICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZl
bnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVy
cmlkZV9yZWRpcmVjdCA9IEZhbHNlOwotICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNw
bGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5w
dXRPdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3coZGlzcGxh
eSwgbV93aW5kb3cpOwotCi0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRl
ckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotICAgIGdldFdpbmRvd0hhc2hNYXAoKS5h
ZGQobV93aW5kb3csIHRoaXMpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgWEV2ZW50IGV2
ZW50OwotICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5v
dGlmeU1hc2ssICZldmVudCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAm
JiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKLSAg
ICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJl
ZGlyZWN0TWFudWFsKTsKLSAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93
aW5kb3csIFhEYW1hZ2VSZXBvcnROb25FbXB0eSk7Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQotewotICAgIEFTU0VSVChtX2Rh
bWFnZSk7Ci0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cp
OwotCi0gICAgZ2V0V2luZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7Ci0gICAgaWYgKGdl
dFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2Zp
bHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVu
dCksIDApOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1f
ZGFtYWdlKTsKLSAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgWERl
c3Ryb3lXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOwotICAgIGNsZWFudXBQaXhtYXBB
bmRQaXhtYXBTdXJmYWNlKCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6
OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBH
REtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBYUmVz
aXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OwotCi0gICAgWEZsdXNoKGRpc3BsYXkpOwotCi0gICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENy
ZWF0ZUdMQ29udGV4dCkgewotICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKLSAgICAg
ICAgLy8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRv
IHdvcmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCi0gICAgICAgIC8vIHdoZXJl
IGEgc3dhcCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJz
IGFyZSBwcm9wZXJseSByZXNpemVkLgotICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4
dDo6Z2V0Q3VycmVudCgpKQotICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOwot
ICAgIH0KLQotICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVz
aXplID0gdHJ1ZTsKLX0KLQotR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6
Y29udGV4dCgpCi17Ci0gICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4
dCk7Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgp
OwotCi0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQo
KSk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQotewotICAgIGlm
ICghbV9waXhtYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hs
aWJfc3VyZmFjZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7Ci0gICAg
bV9waXhtYXAgPSAwOwotICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci19Ci0KLWNhaXJvX3N1cmZh
Y2VfdCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChH
dGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6
ZSAmJiBtX3N1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Ci0KLSAgICBt
X25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKLQotICAgIC8vIEl0J3MgaW1wb3J0
YW50IHRoYXQgdGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkg
cG9pbnRlciBhcyB0aGUgdGFyZ2V0Ci0gICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVl
ZCBjYW4gYmUgMTAweCBzbG93ZXIuCi0gICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdE
S19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Ci0gICAg
UGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERp
c3BsYXksIG1fd2luZG93KTsKLSAgICBpZiAoIW5ld1BpeG1hcCkgewotICAgICAgICBjbGVhbnVw
UGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIGlmICghWEdldFdpbmRv
d0F0dHJpYnV0ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVz
KSkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICBY
RnJlZVBpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXht
YXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgLy8g
TnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBp
eG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucwotICAgIC8vIG9mIGEg
c2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5n
ICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCi0gICAgLy8gcGl4bWFwIHdp
bmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdv
cmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKLSAgICAvLyBwaXhtYXAgdG8gdGhl
IG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KLSAgICBpZiAobV9zdXJmYWNlKSB7
Ci0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdT
dXJmYWNlLmdldCgpKSk7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAx
LCAxLCAxKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAg
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOwotICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOwotICAgIG1fc3VyZmFj
ZSA9IG5ld1N1cmZhY2U7Ci0KLSAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lk
IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQot
ewotICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQotICAgICAgICBtX2RhbWFnZU5vdGlm
eUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmZjJhNDhiMmVhNWM0YWY2NjAxNDM3ZDlmNWM5MjE4YTYyNDQwZDk4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisrKyAvZGV2L251
bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMu
TC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3dfaAotI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAot
Ci0jaWYgVVNFKEdMWCkKLQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcg
UGl4bWFwOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKLXR5cGVkZWYgdW5zaWduZWQg
bG9uZyBEYW1hZ2U7Ci10eXBlZGVmIHZvaWQgKCpEYW1hZ2VOb3RpZnlDYWxsYmFjaykodm9pZCop
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93IHsKLXB1YmxpYzoKLSAgICBlbnVtIEdMQ29udGV4dE5lZWRlZCB7IENyZWF0ZUdMQ29udGV4
dCwgRG9Ob3RDcmVhdGVHTENvbnRleHQgfTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBHTENvbnRleHROZWVk
ZWQgPSBDcmVhdGVHTENvbnRleHQpOwotICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93KCk7Ci0gICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQot
Ci0gICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7Ci0gICAgR0xDb250ZXh0
KiBjb250ZXh0KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2VGb3JXaWRnZXQo
R3RrV2lkZ2V0Kik7Ci0gICAgV2luZG93IHdpbmRvd0lkKCkgeyByZXR1cm4gbV93aW5kb3c7IH0K
LSAgICB2b2lkIGNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOwotCi0gICAgdm9pZCBzZXREYW1h
Z2VOb3RpZnlDYWxsYmFjayhEYW1hZ2VOb3RpZnlDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0
YSkKLSAgICB7Ci0gICAgICAgIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2sgPSBjYWxsYmFjazsKLSAg
ICAgICAgbV9kYW1hZ2VOb3RpZnlEYXRhID0gZGF0YTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRl
ZCk7Ci0gICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotCi0gICAgSW50
U2l6ZSBtX3NpemU7Ci0gICAgV2luZG93IG1fd2luZG93OwotICAgIFdpbmRvdyBtX3BhcmVudFdp
bmRvdzsKLSAgICBQaXhtYXAgbV9waXhtYXA7Ci0gICAgR0xDb250ZXh0TmVlZGVkIG1fbmVlZHND
b250ZXh0OwotICAgIE93blB0cjxHTENvbnRleHQ+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAgdW5zaWduZWQgaW50IG1fcGVuZGluZ1Jlc2l6
ZVNvdXJjZUlkOwotICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOwotCi0gICAg
RGFtYWdlIG1fZGFtYWdlOwotICAgIERhbWFnZU5vdGlmeUNhbGxiYWNrIG1fZGFtYWdlTm90aWZ5
Q2FsbGJhY2s7Ci0gICAgdm9pZCogbV9kYW1hZ2VOb3RpZnlEYXRhOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEdMWCkKLQotI2VuZGlmIC8vIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTgyOTY3MTM2
MTg1MDI0YmIzZWZjOGJiNTllMjQ4NTA4ZDNhMzBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MzggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW5kZXJUaGVtZUd0ay5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkZpbGVMaXN0
LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlICJHcmFkaWVudC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcu
aCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVs
ZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKLSNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKLSNpbmNsdWRlICJUaW1lUmFuZ2Vz
LmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNs
dWRlICJSZW5kZXJQcm9ncmVzcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ly8gVGhpcyB3b3VsZCBiZSBhIHN0YXRpYyBtZXRob2QsIGV4Y2VwdCB0aGF0IGZvcndhcmQgZGVj
bGFyaW5nIEdUeXBlIGlzIHRyaWNreSwgc2luY2UgaXRzCi0vLyBkZWZpbml0aW9uIGRlcGVuZHMg
b24gaW5jbHVkaW5nIGdsaWIuaCwgbmVnYXRpbmcgdGhlIGJlbmVmaXQgb2YgdXNpbmcgYSBmb3J3
YXJkIGRlY2xhcmF0aW9uLgotZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25G
b3JXaWRnZXRUeXBlKEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24s
IGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwotCi0jaWYgRU5BQkxFKFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlh
RWxlbWVudEZyb21SZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQotewotICAgIE5vZGUqIG5v
ZGUgPSBvLT5ub2RlKCk7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRv
d0hvc3QoKSA6IDA7Ci0gICAgaWYgKCFtZWRpYU5vZGUpCi0gICAgICAgIG1lZGlhTm9kZSA9IG5v
ZGU7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgIW1lZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8
ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obWVkaWFOb2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVu
dCo+KG1lZGlhTm9kZSk7Ci19Ci0KLXN0YXRpYyBHdGtJY29uU2l6ZSBnZXRNZWRpYUJ1dHRvbklj
b25TaXplKGludCBtZWRpYUljb25TaXplKQotewotICAgIEd0a0ljb25TaXplIGljb25TaXplID0g
Z3RrX2ljb25fc2l6ZV9mcm9tX25hbWUoIndlYmtpdC1tZWRpYS1idXR0b24tc2l6ZSIpOwotICAg
IGlmICghaWNvblNpemUpCi0gICAgICAgIGljb25TaXplID0gZ3RrX2ljb25fc2l6ZV9yZWdpc3Rl
cigid2Via2l0LW1lZGlhLWJ1dHRvbi1zaXplIiwgbWVkaWFJY29uU2l6ZSwgbWVkaWFJY29uU2l6
ZSk7Ci0gICAgcmV0dXJuIGljb25TaXplOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0
TWVkaWFCdXR0b25zKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpY29uc0luaXRpYWxpemVkID0gZmFs
c2U7Ci0KLSAgICBpZiAoaWNvbnNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R1JlZlB0cjxHdGtJY29uRmFjdG9yeT4gaWNvbkZhY3RvcnkgPSBhZG9wdEdSZWYoZ3RrX2ljb25f
ZmFjdG9yeV9uZXcoKSk7Ci0gICAgR3RrSWNvblNvdXJjZSogaWNvblNvdXJjZSA9IGd0a19pY29u
X3NvdXJjZV9uZXcoKTsKLSAgICBjb25zdCBjaGFyKiBpY29uc1tdID0geyAiYXVkaW8tdm9sdW1l
LWhpZ2giLCAiYXVkaW8tdm9sdW1lLW11dGVkIiB9OwotCi0gICAgZ3RrX2ljb25fZmFjdG9yeV9h
ZGRfZGVmYXVsdChpY29uRmFjdG9yeS5nZXQoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IEdfTl9FTEVNRU5UUyhpY29ucyk7ICsraSkgewotICAgICAgICBndGtfaWNvbl9zb3VyY2Vf
c2V0X2ljb25fbmFtZShpY29uU291cmNlLCBpY29uc1tpXSk7Ci0gICAgICAgIEd0a0ljb25TZXQq
IGljb25TZXQgPSBndGtfaWNvbl9zZXRfbmV3KCk7Ci0gICAgICAgIGd0a19pY29uX3NldF9hZGRf
c291cmNlKGljb25TZXQsIGljb25Tb3VyY2UpOwotICAgICAgICBndGtfaWNvbl9mYWN0b3J5X2Fk
ZChpY29uRmFjdG9yeS5nZXQoKSwgaWNvbnNbaV0sIGljb25TZXQpOwotICAgICAgICBndGtfaWNv
bl9zZXRfdW5yZWYoaWNvblNldCk7Ci0gICAgfQotCi0gICAgZ3RrX2ljb25fc291cmNlX2ZyZWUo
aWNvblNvdXJjZSk7Ci0KLSAgICBpY29uc0luaXRpYWxpemVkID0gdHJ1ZTsKLX0KLSNlbmRpZgot
Ci1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lR3RrKCkpOwotfQotCi1QYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUoKS5sZWFr
UmVmKCk7Ci0gICAgcmV0dXJuIHJ0OwotfQotCi1SZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVH
dGsoKQotICAgIDogbV9wYW5lbENvbG9yKENvbG9yOjp3aGl0ZSkKLSAgICAsIG1fc2xpZGVyQ29s
b3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9zbGlkZXJUaHVtYkNvbG9yKENvbG9yOjp3aGl0ZSkK
LSAgICAsIG1fbWVkaWFJY29uU2l6ZSgxNikKLSAgICAsIG1fbWVkaWFTbGlkZXJIZWlnaHQoMTQp
Ci0gICAgLCBtX21lZGlhU2xpZGVyVGh1bWJXaWR0aCgxMikKLSAgICAsIG1fbWVkaWFTbGlkZXJU
aHVtYkhlaWdodCgxMikKLXsKLSAgICBwbGF0Zm9ybUluaXQoKTsKLSNpZiBFTkFCTEUoVklERU8p
Ci0gICAgaW5pdE1lZGlhQ29sb3JzKCk7Ci0gICAgaW5pdE1lZGlhQnV0dG9ucygpOwotI2VuZGlm
Ci19Ci0KLXN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkK
LXsKLSAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0Ogot
ICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBU
ZXh0QXJlYVBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgY2FzZSBNZW51bGlz
dFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAg
Y2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBzdXBwb3J0c0ZvY3Vz
KHN0eWxlLT5hcHBlYXJhbmNlKCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9s
U3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGlzRW5hYmxlZChvKTsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBvc2l0aW9u
KGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKLXsKLSAgICBpZiAoIW8tPmlzQm94KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc3RyYXRlZ3kgaXMgcG9zc2li
bHkgaW5jb3JyZWN0IGZvciB0aGUgR1RLKyBwb3J0LgotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0Ci0gICAgICAgIHx8IG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0b1Jl
bmRlckJveChvKTsKLSAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdo
dCgpIC0gMjsKLSAgICB9Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRp
b24obyk7Ci19Ci0KLS8vIFRoaXMgaXMgdXNlZCBpbiBSZW5kZXJUaGVtZUd0azIgYW5kIFJlbmRl
clRoZW1lR3RrMy4gTm9ybWFsbHksIGl0IHdvdWxkIGJlIGluCi0vLyB0aGUgUmVuZGVyVGhlbWVH
dGsgaGVhZGVyIChwZXJoYXBzIGFzIGEgc3RhdGljIG1ldGhvZCksIGJ1dCB3ZSB3YW50IHRvIGF2
b2lkCi0vLyBoYXZpbmcgdG8gaW5jbHVkZSBHVEsrIGhlYWRlcnMgb25seSBmb3IgdGhlIEd0a1Rl
eHREaXJlY3Rpb24gZW51bS4KLUd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNh
c2UgUlRMOgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JUTDsKLSAgICBjYXNlIExUUjoK
LSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9MVFI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIEdUS19URVhUX0RJUl9OT05FOwotICAgIH0KLX0KLQotc3RhdGljIEd0a1N0YXRlVHlw
ZSBndGtJY29uU3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCkKLXsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKLSAgICAg
ICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKLSAgICBpZiAodGhlbWUtPmlzUHJlc3Nl
ZChyZW5kZXJPYmplY3QpKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsKLSAgICBp
ZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICByZXR1cm4gR1RLX1NU
QVRFX1BSRUxJR0hUOwotCi0gICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNvbWUgbGF5
b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdo
dC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKLSAgICAg
ICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFRo
ZSB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBpZ25vcmUg
bGluZSBoZWlnaHQuCi0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOwotCi0gICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVy
aW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkanVzdE1lbnVMaXN0U3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8m
IGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3Qo
b2JqZWN0LCBpbmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Ci19Ci0KLXN0YXRpYyB2
b2lkIHBhaW50R2RrUGl4YnVmKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR2RrUGl4
YnVmKiBpY29uLCBjb25zdCBJbnRSZWN0JiBpY29uUmVjdCkKLXsKLSAgICBJbnRTaXplIGljb25T
aXplKGdka19waXhidWZfZ2V0X3dpZHRoKGljb24pLCBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNv
bikpOwotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBzY2FsZWRJY29uOwotICAgIGlmIChpY29uUmVj
dC5zaXplKCkgIT0gaWNvblNpemUpIHsKLSAgICAgICAgLy8gV2UgY291bGQgdXNlIGNhaXJvX3Nj
YWxlKCkgaGVyZSBidXQgY2Fpcm8vcGl4bWFuIGRvd25zY2FsZSBxdWFsaXR5IGlzIHF1aXRlIGJh
ZC4KLSAgICAgICAgc2NhbGVkSWNvbiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX3NjYWxlX3NpbXBs
ZShpY29uLCBpY29uUmVjdC53aWR0aCgpLCBpY29uUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfSU5URVJQX0JJ
TElORUFSKSk7Ci0gICAgICAgIGljb24gPSBzY2FsZWRJY29uLmdldCgpOwotICAgIH0KLQotICAg
IGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgY2Fp
cm9fc2F2ZShjcik7Ci0gICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBpY29uLCBp
Y29uUmVjdC54KCksIGljb25SZWN0LnkoKSk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IpOwotICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEdUSysgKGd0ay9ndGtpY29uZmFj
dG9yeS5jKQotc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVNZW51ID0gMTY7Ci1zdGF0aWMg
Y29uc3QgZ2ludCBndGtJY29uU2l6ZVNtYWxsVG9vbGJhciA9IDE4Owotc3RhdGljIGNvbnN0IGdp
bnQgZ3RrSWNvblNpemVCdXR0b24gPSAyMDsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXpl
TGFyZ2VUb29sYmFyID0gMjQ7Ci1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURuZCA9IDMy
Owotc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVEaWFsb2cgPSA0ODsKLQotc3RhdGljIEd0
a0ljb25TaXplIGdldEljb25TaXplRm9yUGl4ZWxTaXplKGdpbnQgcGl4ZWxTaXplKQotewotICAg
IGlmIChwaXhlbFNpemUgPCBndGtJY29uU2l6ZVNtYWxsVG9vbGJhcikKLSAgICAgICAgcmV0dXJu
IEdUS19JQ09OX1NJWkVfTUVOVTsKLSAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25TaXplU21h
bGxUb29sYmFyICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplQnV0dG9uKQotICAgICAgICByZXR1
cm4gR1RLX0lDT05fU0laRV9TTUFMTF9UT09MQkFSOwotICAgIGlmIChwaXhlbFNpemUgPj0gZ3Rr
SWNvblNpemVCdXR0b24gJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIpCi0g
ICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0JVVFRPTjsKLSAgICBpZiAocGl4ZWxTaXplID49
IGd0a0ljb25TaXplTGFyZ2VUb29sYmFyICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplRG5kKQot
ICAgICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9MQVJHRV9UT09MQkFSOwotICAgIGlmIChwaXhl
bFNpemUgPj0gZ3RrSWNvblNpemVEbmQgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVEaWFsb2cp
Ci0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0RORDsKLQotICAgIHJldHVybiBHVEtfSUNP
Tl9TSVpFX0RJQUxPRzsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1
cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIGksIHJlY3QpOwotfQotCi1z
dGF0aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUp
Ci17Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFkZGluZygp
OwotCi0gICAgLy8gR2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KLSAg
ICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKLSAgICBpZiAoZm9udFNpemUgPCBn
dGtJY29uU2l6ZU1lbnUpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChmb250U2l6
ZSwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZm9udFNpemUsIEZp
eGVkKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZ2ludCB3aWR0aCA9IDAsIGhlaWdo
dCA9IDA7Ci0gICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoZ2V0SWNvblNpemVGb3JQaXhlbFNpemUo
Zm9udFNpemUpLCAmd2lkdGgsICZoZWlnaHQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
d2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhl
ZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUpOwotfQot
Ci1zdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgotICAgIE5vZGUqIGlucHV0
ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIWlucHV0KQot
ICAgICAgICBpbnB1dCA9IHJlbmRlck9iamVjdC0+bm9kZSgpOwotICAgIGlmICghaW5wdXQtPnJl
bmRlcmVyKCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAvLyBJ
ZiBwb3NzaWJsZSBjZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0aWNhbGx5
IGluIHRoZSBwYXJlbnQgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBXZSBhbHNvIGFkZCBvbmUgcGl4
ZWwgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQgdXAgZm9y
IGJveCBoZWlnaHRzCi0gICAgLy8gdGhhdCBhcmUgZXZlbiwgd2hpY2ggbG9va3MgaW4gcmVsYXRp
b24gdG8gdGhlIGJveCB0ZXh0LgotICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0gdG9SZW5k
ZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpLT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKLQotICAgIC8v
IE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZp
dCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWluKGlucHV0
Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHJl
Y3QuaGVpZ2h0KCkpKTsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdC54KCksIGlucHV0Q29u
dGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gaWNvblNpemUgKyAxKSAv
IDIsIGljb25TaXplLCBpY29uU2l6ZSk7Ci0gICAgcmV0dXJuIHNjYWxlZFJlY3Q7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRlclJlY3RWZXJ0
aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBpZiAo
aWNvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRy
PEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5U
UlksIEdUS19TVE9DS19GSU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNv
blNpemVGb3JQaXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOwotICAgIHBhaW50R2RrUGl4YnVmKHBh
aW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAotewotICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5Q
YXJlbnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBpZiAoaWNvblJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19T
VE9DS19DTEVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9y
UGl4ZWxTaXplKHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8u
Y29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBXZSBjYW5u
b3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwg
dW5mb3J0dW5hdGVseS4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBzdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBh
aW50VGV4dEZpZWxkKG8sIGksIHJlY3QpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBUaGUgb3Ro
ZXIgcGFpbnQgbWV0aG9kcyBkb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgcGFpbnRpbmcgaXMg
ZGlzYWJsZWQgYmVjYXVzZSBSZW5kZXJUaGVtZSBhbHJlYWR5IGNoZWNrcyBpdAotICAgIC8vIGJl
Zm9yZSBjYWxsaW5nIHRoZW0sIGJ1dCBwYWludENhcHNMb2NrSW5kaWNhdG9yKCkgaXMgY2FsbGVk
IGJ5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSB3aGljaCBkb2Vzbid0IGNoZWNrIGl0Lgot
ICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja0lj
b25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0FQU19MT0NLX1dBUk5J
TkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIGdldEljb25TaXplRm9yUGl4ZWxTaXplKGljb25TaXplKSk7Ci0KLSAgICAvLyBPbmx5IHJl
LXNjYWxlIHRoZSBpY29uIHdoZW4gaXQncyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gaWNvbiBz
aXplLgotICAgIGlmIChpY29uU2l6ZSA+PSBndGtJY29uU2l6ZU1lbnUpCi0gICAgICAgIGljb25T
aXplID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24uZ2V0KCkpOwotCi0gICAgLy8gR1RLKyBs
b2NhdGVzIHRoZSBpY29uIHJpZ2h0IGFsaWduZWQgaW4gdGhlIGVudHJ5LiBUaGUgZ2l2ZW4gcmVj
dGFuZ2xlIGlzIGFscmVhZHkKLSAgICAvLyBjZW50ZXJlZCB2ZXJ0aWNhbGx5IGJ5IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS4KLSAgICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgpICsgcmVj
dC53aWR0aCgpIC0gaWNvblNpemUsCi0gICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIChy
ZWN0LmhlaWdodCgpIC0gaWNvblNpemUpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgIGljb25T
aXplLCBpY29uU2l6ZSk7Ci0gICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGlj
b24uZ2V0KCksIGljb25SZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNo
YWRvdyhudWxscHRyKTsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50
ZXJ2YWwoKSBjb25zdAotewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5n
c19nZXRfZGVmYXVsdCgpOwotCi0gICAgZ2Jvb2xlYW4gc2hvdWxkQmxpbms7Ci0gICAgZ2ludCB0
aW1lOwotCi0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWN1cnNvci1ibGluayIsICZz
aG91bGRCbGluaywgImd0ay1jdXJzb3ItYmxpbmstdGltZSIsICZ0aW1lLCBOVUxMKTsKLQotICAg
IGlmICghc2hvdWxkQmxpbmspCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHRpbWUg
LyAyMDAwLjsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lR3RrOjpnZXRTY3JlZW5EUEkoKQotewot
ICAgIC8vIEZJWE1FOiBSZWFsbHkgdGhpcyBzaG91bGQgYmUgdGhlIHdpZGdldCdzIHNjcmVlbi4K
LSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICBp
ZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJuIDk2OyAvLyBEZWZhdWx0IHRvIDk2IERQSS4KLQot
ICAgIGZsb2F0IGRwaSA9IGdka19zY3JlZW5fZ2V0X3Jlc29sdXRpb24oc2NyZWVuKTsKLSAgICBp
ZiAoZHBpIDw9IDApCi0gICAgICAgIHJldHVybiA5NjsKLSAgICByZXR1cm4gZHBpOwotfQotCi12
b2lkIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Gb250KGludCwgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3Nl
dHRpbmdzX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhpcyB3aWxsIGJlIGEgZm9udCBzZWxlY3Rpb24gc3RyaW5nIGxpa2UgIlNh
bnMgMTAiIHNvIHdlIGNhbm5vdCB1c2UgaXQgYXMgdGhlIGZhbWlseSBuYW1lLgotICAgIEdPd25Q
dHI8Z2NoYXI+IGZvbnROYW1lOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1mb250
LW5hbWUiLCAmZm9udE5hbWUub3V0UHRyKCksIE5VTEwpOwotCi0gICAgUGFuZ29Gb250RGVzY3Jp
cHRpb24qIHBhbmdvRGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2Zyb21fc3Ry
aW5nKGZvbnROYW1lLmdldCgpKTsKLSAgICBpZiAoIXBhbmdvRGVzY3JpcHRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkocGFuZ29EZXNjcmlwdGlvbikpOwotCi0g
ICAgaW50IHNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKHBhbmdvRGVzY3Jp
cHRpb24pIC8gUEFOR09fU0NBTEU7Ci0gICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIGZvbnQgaXMg
aW4gcG9pbnRzLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzLgotICAgIGlmICghcGFu
Z29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZV9pc19hYnNvbHV0ZShwYW5nb0Rlc2NyaXB0aW9u
KSkKLSAgICAgICAgc2l6ZSA9IHNpemUgKiAoZ2V0U2NyZWVuRFBJKCkgLyA3Mi4wKTsKLQotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJ
dGFsaWMoZmFsc2UpOwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShwYW5nb0Rlc2Ny
aXB0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Db2xvcnNEaWRDaGFu
Z2UoKQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBpbml0TWVkaWFDb2xvcnMoKTsKLSNlbmRp
ZgotICAgIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwotfQotCi0jaWYg
RU5BQkxFKFZJREVPKQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNHdGtVc2VyQWdl
bnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0d0a1VzZXJBZ2VudFN0eWxlU2hlZXQp
KTsKLX0KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLVN0cmluZyBSZW5kZXJUaGVtZUd0
azo6ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotI2VuZGlmCi0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZWRpYVNsaWRlclRodW1iUGFydCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChtX21lZGlhU2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChtX21lZGlhU2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
Y2hhciogaWNvbk5hbWUpCi17Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9j
a0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0NPTlRBSU5FUiwgaWNvbk5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHRE
aXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0
ZSh0aGlzLCByZW5kZXJPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZXRNZWRpYUJ1dHRvbkljb25TaXplKG1fbWVkaWFJY29u
U2l6ZSkpOwotICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0g
bV9tZWRpYUljb25TaXplKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIChy
ZWN0LmhlaWdodCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIsCi0gICAgICAgICAgICAgICAgICAg
ICBtX21lZGlhSWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7Ci0gICAgY29udGV4dC0+ZmlsbFJl
Y3QoRmxvYXRSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgIHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6Omhhc093bkRpc2FibGVkU3Rh
dGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAotewotICAgIHJldHVybiAocGFy
dCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVy
biBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qs
IEdUS19TVE9DS19GVUxMU0NSRUVOKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QocmVuZGVy
T2JqZWN0KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29u
dGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gImF1ZGlvLXZvbHVtZS1tdXRlZCIg
OiAiYXVkaW8tdm9sdW1lLWhpZ2giKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIE5vZGUqIG5vZGUgPSBy
ZW5kZXJPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW5vZGUtPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKSA9PSBN
ZWRpYVBsYXlCdXR0b24gPyBHVEtfU1RPQ0tfTUVESUFfUExBWSA6IEdUS19TVE9DS19NRURJQV9Q
QVVTRSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVu
ZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgR1RLX1NUT0NLX01FRElBX1JFV0lO
RCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVu
ZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgR1RLX1NUT0NLX01FRElBX0ZPUldB
UkQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsK
LQotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyKSwgbV9wYW5lbENvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoSW50UmVj
dChyLngoKSwgci55KCkgKyAoci5oZWlnaHQoKSAtIG1fbWVkaWFTbGlkZXJIZWlnaHQpIC8gMiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIG1fbWVk
aWFTbGlkZXJIZWlnaHQpKSwgbV9zbGlkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0K
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOwotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pOwotCi0gICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERyYXcgdGhlIGJ1
ZmZlcmVkIHJhbmdlcy4gVGhpcyBjb2RlIGlzIGhpZ2hseSBpbnNwaXJlZCBmcm9tCi0gICAgLy8g
Q2hyb21lIGZvciB0aGUgZ3JhZGllbnQgY29kZS4KLSAgICBmbG9hdCBtZWRpYUR1cmF0aW9uID0g
bWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwotICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFu
Z2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwotICAgIEludFJlY3QgdHJhY2tSZWN0ID0g
cjsKLSAgICBpbnQgdG90YWxXaWR0aCA9IHRyYWNrUmVjdC53aWR0aCgpOwotCi0gICAgdHJhY2tS
ZWN0LmluZmxhdGUoLXN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSk7Ci0gICAgY29udGV4dC0+c2F2
ZSgpOwotICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4
KSB7Ci0gICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9S
RV9FWENFUFRJT04pOwotICAgICAgICBmbG9hdCBlbmQgPSB0aW1lUmFuZ2VzLT5lbmQoaW5kZXgs
IElHTk9SRV9FWENFUFRJT04pOwotICAgICAgICBpbnQgd2lkdGggPSAoKGVuZCAtIHN0YXJ0KSAq
IHRvdGFsV2lkdGgpIC8gbWVkaWFEdXJhdGlvbjsKLSAgICAgICAgSW50UmVjdCByYW5nZVJlY3Q7
Ci0gICAgICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgICAgIHJhbmdlUmVjdCA9IHRyYWNrUmVj
dDsKLSAgICAgICAgICAgIHJhbmdlUmVjdC5zZXRXaWR0aCh3aWR0aCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICByYW5nZVJlY3Quc2V0TG9jYXRpb24oSW50UG9pbnQodHJhY2tSZWN0
LngoKSArIHN0YXJ0IC8gbWVkaWFEdXJhdGlvbiogdG90YWxXaWR0aCwgdHJhY2tSZWN0LnkoKSkp
OwotICAgICAgICAgICAgcmFuZ2VSZWN0LnNldFNpemUoSW50U2l6ZSh3aWR0aCwgdHJhY2tSZWN0
LmhlaWdodCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb24ndCBib3RoZXIgZHJhd2lu
ZyBlbXB0eSByYW5nZS4KLSAgICAgICAgaWYgKHJhbmdlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BMZWZ0ID0gcmFuZ2VS
ZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFBvaW50IHNsaWRlclRvcFJpZ2h0ID0gc2xpZGVy
VG9wTGVmdDsKLSAgICAgICAgc2xpZGVyVG9wUmlnaHQubW92ZSgwLCByYW5nZVJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKHNsaWRlclRvcExlZnQsIHNsaWRlclRvcFJpZ2h0KTsKLSAgICAgICAgQ29sb3Igc3RhcnRD
b2xvciA9IG1fcGFuZWxDb2xvcjsKLSAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAs
IHN0YXJ0Q29sb3IpOwotICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3Io
c3RhcnRDb2xvci5yZWQoKSAvIDIsIHN0YXJ0Q29sb3IuZ3JlZW4oKSAvIDIsIHN0YXJ0Q29sb3Iu
Ymx1ZSgpIC8gMiwgc3RhcnRDb2xvci5hbHBoYSgpKSk7Ci0KLSAgICAgICAgY29udGV4dC0+c2V0
RmlsbEdyYWRpZW50KGdyYWRpZW50KTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QocmFuZ2VS
ZWN0KTsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICAvLyBNYWtlIHRoZSB0aHVtYiBuaWNlciB3aXRoIHJvdW5kZWQgY29ybmVycy4KLSAg
ICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KHIsIEludFNpemUoMywgMyksIElu
dFNpemUoMywgMyksIEludFNpemUoMywgMyksIEludFNpemUoMywgMyksIG1fc2xpZGVyVGh1bWJD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwotICAg
IGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9wYW5lbENvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgcmV0dXJuIHBhaW50U2xpZGVyVHJhY2socmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3Qp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludFNsaWRlclRodW1iKHJlbmRl
ck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpm
b3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1
cmF0aW9uKSBjb25zdAotewotICAgIHJldHVybiBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJy
ZW50VGltZSkgKyAiIC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29u
dGV4dDsKLQotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9wYW5lbENv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQot
Ci0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLmNwcAotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsK
LXN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKLXN0YXRpYyBj
b25zdCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OwotZG91YmxlIFJl
bmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZh
bDsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvZ3Jlc3NBbmlt
YXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBi
YWNrIGFuZCBmb3J0aDsKLX0KLQotSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJv
Z3Jlc3NSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxs
QmFyUmVjdCkKLXsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAg
UmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJP
YmplY3QpOwotICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKSB7Ci0gICAg
ICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiByZW5kZXJQcm9n
cmVzcy0+cG9zaXRpb24oKTsKLSAgICAgICAgaWYgKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NS
ZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJvZ3Jlc3NXaWR0aCk7Ci0gICAgICAg
IHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRoKTsKLSAgICAgICAgcmV0dXJuIHBy
b2dyZXNzUmVjdDsKLSAgICB9Ci0KLSAgICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MgPSByZW5k
ZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKLQotICAgIC8vIE5ldmVyIGxldCB0aGUg
cHJvZ3Jlc3MgcmVjdCBzaHJpbmsgc21hbGxlciB0aGFuIDIgcGl4ZWxzLgotICAgIGludCBuZXdX
aWR0aCA9IG1heCgyLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlCbG9j
a3MpOwotICAgIGludCBtb3ZhYmxlV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIG5ld1dp
ZHRoOwotICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChuZXdXaWR0aCk7Ci0KLSAgICAvLyBXZSB3
YW50IHRoZSBmaXJzdCAwLjUgdW5pdHMgb2YgdGhlIGFuaW1hdGlvbiBwcm9ncmVzcyB0byByZXBy
ZXNlbnQgdGhlCi0gICAgLy8gZm9yd2FyZCBtb3Rpb24gYW5kIHRoZSBzZWNvbmQgMC41IHVuaXRz
IHRvIHJlcHJlc2VudCB0aGUgYmFja3dhcmQgbW90aW9uLAotICAgIC8vIHRodXMgd2UgbXVsdGlw
bHkgYnkgdHdvIGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHN3ZWVwIG9mIHRoZSBwcm9ncmVzcyBiYXIg
d2l0aAotICAgIC8vIGVhY2ggZGlyZWN0aW9uLgotICAgIGlmIChhbmltYXRpb25Qcm9ncmVzcyA8
IDAuNSkKLSAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIChhbmlt
YXRpb25Qcm9ncmVzcyAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBy
b2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoKDEuMCAtIGFuaW1hdGlvblByb2dy
ZXNzKSAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKLSAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwotfQot
I2VuZGlmCi0KLVN0cmluZyBSZW5kZXJUaGVtZUd0azo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29u
c3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgsIGJvb2wg
bXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKHdpZHRoIDw9IDApCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkgPiAxKQot
ICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKG11bHRpcGxlRmls
ZVVwbG9hZFRleHQoZmlsZUxpc3QtPmxlbmd0aCgpKSwgd2lkdGgsIGZvbnQsIFN0cmluZ1RydW5j
YXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nOwotICAgIGlm
IChmaWxlTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHN0cmluZyA9IHBhdGhHZXRGaWxlTmFtZShm
aWxlTGlzdC0+aXRlbSgwKS0+cGF0aCgpKTsKLSAgICBlbHNlIGlmIChtdWx0aXBsZUZpbGVzQWxs
b3dlZCkKLSAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCk7
Ci0gICAgZWxzZQotICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJl
bCgpOwotCi0gICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoc3RyaW5n
LCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKLX0K
LQotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotSW50U2l6ZSBSZW5kZXJUaGVtZUd0azo6
c2xpZGVyVGlja1NpemUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNldCB0
aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1hcmsuCi0gICAgcmV0dXJuIEludFNpemUoMCwg
MCk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6c2xpZGVyVGlja09mZnNldEZyb21UcmFja0Nl
bnRlcigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc2V0IHRoaXMgdG8gdGhl
IHBvc2l0aW9uIG9mIHRoZSB0aWNrIG1hcmtzLgotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NjQ1ZjRmZWYzYTgxODA2ZDc5OTE2NzQzMjdmZTMy
ZDYwNTllNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgcHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBSZW5kZXJUaGVtZUd0a19oCi0jZGVmaW5lIFJlbmRlclRoZW1lR3RrX2gKLQotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotCi10
eXBlZGVmIHN0cnVjdCBfR2RrQ29sb3JtYXAgR2RrQ29sb3JtYXA7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVuZGVyVGhlbWVHdGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotcHJp
dmF0ZToKLSAgICBSZW5kZXJUaGVtZUd0aygpOwotICAgIHZpcnR1YWwgflJlbmRlclRoZW1lR3Rr
KCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRl
KCk7Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0
dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRv
IGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5n
KGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYg
dGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9y
IG5vdC4KLSAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7Ci0KLSAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkg
Y29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCi0gICAgdmlydHVhbCBib29sIHN1
cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsK
LQotICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEg
ImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKLSAg
ICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29u
dGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKLSAgICAv
LyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0gICAgLy8gVGhlIHBsYXRm
b3JtIHNlbGVjdGlvbiBjb2xvci4KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OwotCi0gICAgLy8gTGlzdCBCb3ggc2VsZWN0aW9uIGNvbG9yCi0gICAgdmlydHVhbCBD
b2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlu
a0ludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Db2xvcnNEaWRD
aGFuZ2UoKTsKLQotICAgIC8vIFN5c3RlbSBmb250cyBhbmQgY29sb3JzLgotICAgIHZpcnR1YWwg
dm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAg
IHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBib29sIHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRN
ZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9u
KSBjb25zdDsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgLy8gUmV0dXJucyBzaXplIG9mIG9uZSBzbGlkZXIg
dGljayBtYXJrIGZvciBhIGhvcml6b250YWwgdHJhY2suCi0gICAgLy8gRm9yIHZlcnRpY2FsIHRy
YWNrcyB3ZSByb3RhdGUgaXQgYW5kIHVzZSBpdC4gaS5lLiBXaWR0aCBpcyBhbHdheXMgbGVuZ3Ro
IGFsb25nIHRoZSB0cmFjay4KLSAgICB2aXJ0dWFsIEludFNpemUgc2xpZGVyVGlja1NpemUoKSBj
b25zdDsKLSAgICAvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBvZiBzbGlkZXIgdGljayBvcmlnaW4g
ZnJvbSB0aGUgc2xpZGVyIHRyYWNrIGNlbnRlci4KLSAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNr
T2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0KiBndGtDb250YWluZXIoKSBjb25zdDsKLSAgICBHdGtX
aWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtWU2Nyb2xsYmFyKCkg
Y29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtIU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0SW5kaWNhdG9yTWV0cmljcyhDb250cm9sUGFydCwgaW50JiBpbmRpY2F0b3JTaXpl
LCBpbnQmIGluZGljYXRvclNwYWNpbmcpOwotI2Vsc2UKLSAgICBHdGtTdHlsZUNvbnRleHQqIGd0
a1Njcm9sbGJhclN0eWxlKCk7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwotCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBpbnQgcG9wdXBJbnRl
cm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIC8vIFRoZSBNYWMgcG9y
dCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBhbmQgdGhlICJtZW51IGxp
c3QgYnV0dG9uLiIKLSAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiBhIG1lbnUgbGlzdCBi
dXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlCi0gICAgLy8gQXF1
YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFsd2F5cyB3YW50IHRvIHVz
ZSBHVEsrIHRoZW1pbmcsIHNvCi0gICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhpcyBkaWZmZXJl
bnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIGlu
aXRNZWRpYUNvbG9ycygpOwotICAgIHZvaWQgaW5pdE1lZGlhQnV0dG9ucygpOwotICAgIHZvaWQg
YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
ckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJy
ZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBib29s
IHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgU3Ry
aW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGlu
dCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRl
cnMoUmVuZGVyU3R5bGUqKTsKLSAgICBzdGF0aWMgZG91YmxlIGdldFNjcmVlbkRQSSgpOwotCi0j
aWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hhciogaWNvbk5hbWUp
OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBzdGF0aWMgSW50
UmVjdCBjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYp
OwotI2VuZGlmCi0KLSAgICBtdXRhYmxlIENvbG9yIG1fcGFuZWxDb2xvcjsKLSAgICBtdXRhYmxl
IENvbG9yIG1fc2xpZGVyQ29sb3I7Ci0gICAgbXV0YWJsZSBDb2xvciBtX3NsaWRlclRodW1iQ29s
b3I7Ci0gICAgY29uc3QgaW50IG1fbWVkaWFJY29uU2l6ZTsKLSAgICBjb25zdCBpbnQgbV9tZWRp
YVNsaWRlckhlaWdodDsKLSAgICBjb25zdCBpbnQgbV9tZWRpYVNsaWRlclRodW1iV2lkdGg7Ci0g
ICAgY29uc3QgaW50IG1fbWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKLQotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0gICAgdm9pZCBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdl
dCosIEd0a1dpZGdldCopIGNvbnN0OwotICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4o
KSBjb25zdDsKLSAgICB2b2lkIGdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYg
bGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdDsKLSAgICBpbnQg
Z2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0OwotICAgIGludCBjb21ib0JveEFycm93
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgR3RrV2lkZ2V0KiBndGtCdXR0b24oKSBj
b25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0
KiBndGtWU2NhbGUoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0hTY2FsZSgpIGNvbnN0Owot
ICAgIEd0a1dpZGdldCogZ3RrUmFkaW9CdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0
a0NoZWNrQnV0dG9uKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtQcm9ncmVzc0JhcigpIGNv
bnN0OwotICAgIEd0a1dpZGdldCogZ3RrQ29tYm9Cb3goKSBjb25zdDsKLSAgICBHdGtXaWRnZXQq
IGd0a0NvbWJvQm94QnV0dG9uKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveEFy
cm93KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveFNlcGFyYXRvcigpIGNvbnN0
OwotICAgIEd0a1dpZGdldCogZ3RrU3BpbkJ1dHRvbigpIGNvbnN0OwotCi0gICAgR2RrQ29sb3Jt
YXAqIG1fY29sb3JtYXA7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93OwotICAg
IG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbnRhaW5lcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdl
dCogbV9ndGtCdXR0b247Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrRW50cnk7Ci0gICAg
bXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVHJlZVZpZXc7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQq
IG1fZ3RrVlNjYWxlOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0hTY2FsZTsKLSAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtSYWRpb0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdl
dCogbV9ndGtDaGVja0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtQcm9ncmVz
c0JhcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0JveDsKLSAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtDb21ib0JveEJ1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCog
bV9ndGtDb21ib0JveEFycm93OwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94
U2VwYXJhdG9yOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1ZTY3JvbGxiYXI7Ci0gICAg
bXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNjcm9sbGJhcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdl
dCogbV9ndGtTcGluQnV0dG9uOwotICAgIGJvb2wgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1h
cDsKLSAgICBmcmllbmQgY2xhc3MgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDsKLSNlbmRpZgotfTsK
LQotfQotCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMWMzM2U4Y2I0YWY5MzdhMjZkNmM2OTZiY2JkYWFhYzhlMTYwMmE5Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk2NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0KLSNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgotCi0vLyBXZSBuZWVkIHRoaXMgdG8gYWxsb3cgYnVpbGRpbmcgd2hpbGUgdXNp
bmcgR1RLX1dJREdFVF9TRVRfRkxBR1MuIEl0J3MgZGVwcmVjYXRlZAotLy8gYnV0IHNvbWUgdGhl
bWUgZW5naW5lcyByZXF1aXJlIGl0IHRvIGVuc3VyZSBwcm9wZXIgcmVuZGVyaW5nIG9mIGZvY3Vz
IGluZGljYXRvcnMuCi0jdW5kZWYgR1RLX0RJU0FCTEVfREVQUkVDQVRFRAotCi0jaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKLSNpbmNsdWRlICJQYWlu
dEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0
aW9uLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRlICJXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0
IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9X
X1dJRFRIIGluIGd0a3NwaW5idXR0b24uYy4KLXN0YXRpYyBjb25zdCBpbnQgbWluU3BpbkJ1dHRv
bkFycm93U2l6ZSA9IDY7Ci0KLS8vIFRoaXMgaXMgbm90IGEgc3RhdGljIG1ldGhvZCwgYmVjYXVz
ZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBHVEsrIGhlYWRlcnMgaW4gUmVuZGVyVGhlbWVHdGsu
aC4KLWV4dGVybiBHdGtUZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlv
bik7Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgbV90aGVt
ZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCA9IHRydWU7Ci0gICAgbV9ndGtXaW5kb3cgPSAwOwotICAg
IG1fZ3RrQ29udGFpbmVyID0gMDsKLSAgICBtX2d0a0J1dHRvbiA9IDA7Ci0gICAgbV9ndGtFbnRy
eSA9IDA7Ci0gICAgbV9ndGtUcmVlVmlldyA9IDA7Ci0gICAgbV9ndGtWU2NhbGUgPSAwOwotICAg
IG1fZ3RrSFNjYWxlID0gMDsKLSAgICBtX2d0a1JhZGlvQnV0dG9uID0gMDsKLSAgICBtX2d0a0No
ZWNrQnV0dG9uID0gMDsKLSAgICBtX2d0a1Byb2dyZXNzQmFyID0gMDsKLSAgICBtX2d0a0NvbWJv
Qm94ID0gMDsKLSAgICBtX2d0a0NvbWJvQm94QnV0dG9uID0gMDsKLSAgICBtX2d0a0NvbWJvQm94
QXJyb3cgPSAwOwotICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSAwOwotICAgIG1fZ3RrVlNj
cm9sbGJhciA9IDA7Ci0gICAgbV9ndGtIU2Nyb2xsYmFyID0gMDsKLSAgICBtX2d0a1NwaW5CdXR0
b24gPSAwOwotCi0gICAgbV9jb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAo
Z2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICBpZiAoIW1fY29sb3JtYXApIHsKLSAgICAg
ICAgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCA9IGZhbHNlOwotICAgICAgICBtX2NvbG9y
bWFwID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdF9jb2xvcm1hcChnZGtfc2NyZWVuX2dldF9kZWZh
dWx0KCkpOwotICAgIH0KLX0KLQotUmVuZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0aygpCi17
Ci0gICAgaWYgKG1fZ3RrV2luZG93KQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9ndGtX
aW5kb3cpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5p
dE1lZGlhQ29sb3JzKCkKLXsKLSAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9z
dHlsZShHVEtfV0lER0VUKGd0a0NvbnRhaW5lcigpKSk7Ci0gICAgbV9wYW5lbENvbG9yID0gc3R5
bGUtPmJnW0dUS19TVEFURV9OT1JNQUxdOwotICAgIG1fc2xpZGVyQ29sb3IgPSBzdHlsZS0+Ymdb
R1RLX1NUQVRFX0FDVElWRV07Ci0gICAgbV9zbGlkZXJUaHVtYkNvbG9yID0gc3R5bGUtPmJnW0dU
S19TVEFURV9TRUxFQ1RFRF07Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgYWRqdXN0UmVjdEZv
ckZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBJbnRSZWN0JiByZWN0LCBib29sIGlnbm9yZUludGVy
aW9yRm9jdXNQcm9wZXJ0eSA9IGZhbHNlKQotewotICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQ
YWQ7Ci0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1cyA9IDA7Ci0gICAgZ3RrX3dpZGdldF9zdHls
ZV9nZXQod2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIs
ICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdp
ZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRp
bmciLCAmZm9jdXNQYWQsIE5VTEwpOwotICAgIGlmICghaWdub3JlSW50ZXJpb3JGb2N1c1Byb3Bl
cnR5ICYmIGludGVyaW9yRm9jdXMpCi0gICAgICAgIHJldHVybjsKLSAgICByZWN0LmluZmxhdGUo
Zm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpOwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0Ogot
ICAgIGNhc2UgUmFkaW9QYXJ0OiB7Ci0gICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgaW50ZXJpb3Ig
Zm9jdXMgcHJvcGVydHkgYW5kIGFsd2F5cyBleHBhbmQgdGhlIGZvY3VzIHJlY3QuIEluIEdUSyss
IHRoZQotICAgICAgICAvLyBmb2N1cyBpbmRpY2F0b3IgaXMgdXN1YWxseSBvbiB0aGUgdGV4dCBu
ZXh0IHRvIGEgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLCBidXQgdGhhdCBkb2Vzbid0Ci0gICAg
ICAgIC8vIGhhcHBlbiBpbiBXZWJDb3JlLiBCeSBleHBhbmRpbmcgdGhlIGZvY3VzIHJlY3Rhbmds
ZSB1bmNvbmRpdGlvbmFsbHkgd2UgaW5jcmVhc2UgaXRzIHByb21pbmVuY2UuCi0gICAgICAgIGFk
anVzdFJlY3RGb3JGb2N1cyhwYXJ0ID09IENoZWNrYm94UGFydCA/IGd0a0NoZWNrQnV0dG9uKCkg
OiBndGtSYWRpb0J1dHRvbigpLCByZWN0LCB0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6Ci0gICAgICAgIC8vIFNlZSBwYWludElubmVy
U3BpbkJ1dHRvbiBmb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHdlIGV4cGFuZCB0aGUgcGFpbnRp
bmcgcmVjdC4KLSAgICAgICAgcmVjdC5pbmZsYXRlWSgyKTsKLSAgICAgICAgcmVjdC5zZXRXaWR0
aChyZWN0LndpZHRoKCkgKyAyKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAg
fQotfQotCi1zdGF0aWMgR3RrU3RhdGVUeXBlIGdldEd0a1N0YXRlVHlwZShSZW5kZXJUaGVtZUd0
ayogdGhlbWUsIFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghdGhlbWUtPmlzRW5h
YmxlZChvYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvYmplY3QpKQotICAgICAg
ICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGlmICh0aGVtZS0+aXNQcmVzc2Vk
KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZFOwotICAgIGlmICh0aGVt
ZS0+aXNIb3ZlcmVkKG9iamVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVfUFJFTElHSFQ7
Ci0gICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFRvZ2ds
ZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJTdHlsZSogc3R5bGUsIEd0
a1dpZGdldCogd2lkZ2V0KQotewotICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3Ro
IHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgotICAgIGlmICghc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnaW50IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3dp
ZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwg
TlVMTCk7Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAg
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKLSAgICBp
ZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludFRvZ2ds
ZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0
KQotewotICAgIC8vIFdlIGRvIG5vdCBjYWxsIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUg
aGVyZSwgYmVjYXVzZSBzb21lIHRoZW1lcyBiZWdpbiBhIHNlcmllcyBvZgotICAgIC8vIGFuaW1h
dGlvbiBmcmFtZXMgaW4gYSAidG9nZ2xlZCIgc2lnbmFsIGhhbmRsZXIuIFRoaXMgcHV0cyBzb21l
IGNoZWNrYm94ZXMgaW4gYSBoYWxmLXdheQotICAgIC8vIGNoZWNrZWQgc3RhdGUuIEV2ZXJ5IEdU
SysgdGhlbWUgSSB0ZXN0ZWQgbWVyZWx5IGxvb2tzIGF0IHRoZSBzaGFkb3cgdHlwZSAoYW5kIG5v
dCB0aGUKLSAgICAvLyAnYWN0aXZlJyBwcm9wZXJ0eSkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHRvIGRyYXcgdGhlIGNoZWNrLgotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRn
ZXQsIHRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSAmJiAhdGhlbWUtPmlzUmVhZE9ubHlD
b250cm9sKHJlbmRlck9iamVjdCkpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRn
ZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OwotCi0gICAgYm9vbCBpbmRldGVybWluYXRlID0gdGhlbWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5k
ZXJPYmplY3QpOwotICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9pbmNvbnNpc3RlbnQoR1RLX1RP
R0dMRV9CVVRUT04od2lkZ2V0KSwgaW5kZXRlcm1pbmF0ZSk7Ci0KLSAgICBHdGtTaGFkb3dUeXBl
IHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKLSAgICBpZiAoaW5kZXRlcm1pbmF0ZSkgLy8g
VGhpcyBvcmlnaW5hdGVzIGZyb20gdGhlIE1vemlsbGEgY29kZS4KLSAgICAgICAgc2hhZG93VHlw
ZSA9IEdUS19TSEFET1dfRVRDSEVEX0lOOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0NoZWNrZWQo
cmVuZGVyT2JqZWN0KSkKLSAgICAgICAgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfSU47Ci0KLSAg
ICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0
KTsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotICAg
IEd0a1N0YXRlVHlwZSB0b2dnbGVTdGF0ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGVtZSwgcmVuZGVy
T2JqZWN0KTsKLSAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAwOwotICAgIGlmIChHVEtfSVNfUkFE
SU9fQlVUVE9OKHdpZGdldCkpIHsKLSAgICAgICAgZGV0YWlsID0gInJhZGlvYnV0dG9uIjsKLSAg
ICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludE9wdGlvbihidXR0b25SZWN0LCB3aWRnZXQsIHRv
Z2dsZVN0YXRlLCBzaGFkb3dUeXBlLCBkZXRhaWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRl
dGFpbCA9ICJjaGVja2J1dHRvbiI7Ci0gICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRDaGVj
ayhidXR0b25SZWN0LCB3aWRnZXQsIHRvZ2dsZVN0YXRlLCBzaGFkb3dUeXBlLCBkZXRhaWwpOwot
ICAgIH0KLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAg
ICAgSW50UmVjdCBmb2N1c1JlY3QoYnV0dG9uUmVjdCk7Ci0gICAgICAgIGFkanVzdFJlY3RGb3JG
b2N1cyh3aWRnZXQsIGZvY3VzUmVjdCwgdHJ1ZSk7Ci0gICAgICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgdG9nZ2xlU3RhdGUsIGRldGFpbCk7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0a0NoZWNr
QnV0dG9uKCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0LCBpbmZvLCBy
ZWN0LCBndGtDaGVja0J1dHRvbigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrUmFkaW9CdXR0b24oKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBwYWlu
dFRvZ2dsZSh0aGlzLCByZW5kZXJPYmplY3QsIGluZm8sIHJlY3QsIGd0a1JhZGlvQnV0dG9uKCkp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0V2lkZ2V0SGFzRm9jdXMo
R3RrV2lkZ2V0KiB3aWRnZXQsIGdib29sZWFuIGhhc0ZvY3VzKQotewotICAgIGdfb2JqZWN0X3Nl
dCh3aWRnZXQsICJoYXMtZm9jdXMiLCBoYXNGb2N1cywgTlVMTCk7Ci0KLSAgICAvLyBUaGVzZSBm
dW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgaW4gR1RLKyAyLjIyLCB5ZXQgdGhlbWUgZW5naW5lcyBz
dGlsbCBsb29rCi0gICAgLy8gYXQgdGhlc2UgZmxhZ3Mgd2hlbiBkZXRlcm1pbmluZyBpZiBhIHdp
ZGdldCBoYXMgZm9jdXMsIHNvIHdlIG11c3QgdXNlIHRoZW0uCi0gICAgaWYgKGhhc0ZvY3VzKQot
ICAgICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQsIEdUS19IQVNfRk9DVVMpOwotICAg
IGVsc2UKLSAgICAgICAgR1RLX1dJREdFVF9VTlNFVF9GTEFHUyh3aWRnZXQsIEdUS19IQVNfRk9D
VVMpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtCdXR0b24oKTsKLSAgICBJbnRS
ZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotICAgIEludFJlY3QgZm9j
dXNSZWN0KGJ1dHRvblJlY3QpOwotCi0gICAgR3RrU3RhdGVUeXBlIHN0YXRlID0gZ2V0R3RrU3Rh
dGVUeXBlKHRoaXMsIG9iamVjdCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfc3RhdGUod2lkZ2V0LCBz
dGF0ZSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVj
dGlvbihvYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0KLSAgICBpZiAoaXNGb2N1c2Vk
KG9iamVjdCkpIHsKLSAgICAgICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBUUlVFKTsKLQot
ICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzID0gMCwgZm9jdXNXaWR0aCA9IDAsIGZvY3Vz
UGFkZGluZyA9IDA7Ci0gICAgICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3Vz
V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZv
Y3VzUGFkZGluZywgTlVMTCk7Ci0gICAgICAgIC8vIElmIHdlIGFyZSB1c2luZyBleHRlcmlvciBm
b2N1cywgd2Ugc2hyaW5rIHRoZSBidXR0b24gcmVjdCBkb3duIGJlZm9yZQotICAgICAgICAvLyBk
cmF3aW5nLiBJZiB3ZSBhcmUgdXNpbmcgaW50ZXJpb3IgZm9jdXMgd2Ugc2hyaW5rIHRoZSBmb2N1
cyByZWN0LiBUaGlzCi0gICAgICAgIC8vIGFwcHJvYWNoIG9yaWdpbmF0ZXMgZnJvbSB0aGUgTW96
aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUgKGd0azJkcmF3aW5nLmMpLgotICAgICAgICBpZiAoaW50
ZXJpb3JGb2N1cykgewotICAgICAgICAgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9n
ZXRfc3R5bGUod2lkZ2V0KTsKLSAgICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlWCgtc3R5bGUt
Pnh0aGlja25lc3MgLSBmb2N1c1BhZGRpbmcpOwotICAgICAgICAgICAgZm9jdXNSZWN0LmluZmxh
dGVZKC1zdHlsZS0+eXRoaWNrbmVzcyAtIGZvY3VzUGFkZGluZyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBidXR0b25SZWN0LmluZmxhdGVYKC1mb2N1c1dpZHRoIC0gZm9jdXNQYWRk
aW5nKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoLWZvY3VzUGFkZGluZyAtIGZv
Y3VzUGFkZGluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250
ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKLSAgICBHdGtTaGFkb3dUeXBl
IHNoYWRvd1R5cGUgPSBzdGF0ZSA9PSBHVEtfU1RBVEVfQUNUSVZFID8gR1RLX1NIQURPV19JTiA6
IEdUS19TSEFET1dfT1VUOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYnV0dG9uUmVj
dCwgd2lkZ2V0LCBzdGF0ZSwgc2hhZG93VHlwZSwgImJ1dHRvbiIpOwotICAgIGlmIChpc0ZvY3Vz
ZWQob2JqZWN0KSkKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZvY3VzKGZvY3VzUmVj
dCwgd2lkZ2V0LCBzdGF0ZSwgImJ1dHRvbiIpOwotCi0gICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lk
Z2V0LCBGQUxTRSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6
OmdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogc2Vw
YXJhdG9yID0gZ3RrQ29tYm9Cb3hTZXBhcmF0b3IoKTsKLSAgICBpZiAoIXNlcGFyYXRvcikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBnYm9vbGVhbiBoYXNXaWRlU2VwYXJhdG9ycyA9IEZBTFNF
OwotICAgIGdpbnQgc2VwYXJhdG9yV2lkdGggPSAwOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0
KHNlcGFyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0b3JzIiwg
Jmhhc1dpZGVTZXBhcmF0b3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzZXBhcmF0b3It
d2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
Ci0gICAgaWYgKGhhc1dpZGVTZXBhcmF0b3JzKQotICAgICAgICByZXR1cm4gc2VwYXJhdG9yV2lk
dGg7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHNlcGFyYXRvciktPnh0aGlja25l
c3M7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIFRha2luZyB0aGUgZm9udCBzaXplIGFuZCByZXZl
cnNpbmcgdGhlIERQSSBjb252ZXJzaW9uIHNlZW1zIHRvIG1hdGNoCi0gICAgLy8gR1RLKyByZW5k
ZXJpbmcgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4KLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5z
aXplKCkgKiAoNzIuMCAvIFJlbmRlclRoZW1lR3RrOjpnZXRTY3JlZW5EUEkoKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGdldEJ1dHRvbklubmVyQm9yZGVyKEd0a1dpZGdldCogYnV0dG9uLCBpbnQmIGxl
ZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkKLXsKLSAgICBHdGtTdHlsZSog
c3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShidXR0b24pOwotICAgIGludCBvdXRlckJvcmRl
ciA9IGd0a19jb250YWluZXJfZ2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGJ1dHRvbikp
OwotICAgIHN0YXRpYyBHdGtCb3JkZXIgZGVmYXVsdElubmVyQm9yZGVyID0gezEsIDEsIDEsIDF9
OwotICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXI7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQo
YnV0dG9uLCAiaW5uZXItYm9yZGVyIiwgJmlubmVyQm9yZGVyLCBOVUxMKTsKLSAgICBpZiAoIWlu
bmVyQm9yZGVyKQotICAgICAgICBpbm5lckJvcmRlciA9ICZkZWZhdWx0SW5uZXJCb3JkZXI7Ci0K
LSAgICBsZWZ0ID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+bGVmdCArIHN0eWxlLT54dGhp
Y2tuZXNzOwotICAgIHJpZ2h0ID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+cmlnaHQgKyBz
dHlsZS0+eHRoaWNrbmVzczsKLSAgICB0b3AgPSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT50
b3AgKyBzdHlsZS0+eXRoaWNrbmVzczsKLSAgICBib3R0b20gPSBvdXRlckJvcmRlciArIGlubmVy
Qm9yZGVyLT5ib3R0b20gKyBzdHlsZS0+eXRoaWNrbmVzczsKLQotICAgIGlmIChpbm5lckJvcmRl
ciAhPSAmZGVmYXVsdElubmVyQm9yZGVyKQotICAgICAgICBndGtfYm9yZGVyX2ZyZWUoaW5uZXJC
b3JkZXIpOwotfQotCi0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhS
ZW5kZXJTdHlsZSogc3R5bGUsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYg
Ym90dG9tKSBjb25zdAotewotICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1dHRvbiBpc24ndCBk
cmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQotICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0
cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4KLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBBIGNvbWJvIGJveCBidXR0b24gaXMgYSBidXR0b24gd2l0aCB3aWRnZXRzIHBhY2tlZCBp
bnRvIGl0LgotICAgIEd0a1N0eWxlKiBidXR0b25XaWRnZXRTdHlsZSA9IGd0a193aWRnZXRfZ2V0
X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwotICAgIGdldEJ1dHRvbklubmVyQm9yZGVyKGd0
a0NvbWJvQm94QnV0dG9uKCksIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0KLSAgICAvLyBB
ZGQgeHRoaWNrbmVzcyBhbW91bnQgb2YgcGFkZGluZyBmb3IgZWFjaCBzaWRlIG9mIHRoZSBzZXBh
cmF0b3IuIFRoaXMgZW5zdXJlcwotICAgIC8vIHRoYXQgdGhlIHRleHQgZG9lcyBub3QgYnVtcCB1
cCBhZ2FpbnN0IHRoZSBzZXBhcmF0b3IuCi0gICAgaW50IGFycm93QW5kU2VwZXJhdG9yTGVuZ3Ro
ID0gY29tYm9Cb3hBcnJvd1NpemUoc3R5bGUpICsKLSAgICAgICAgZ2V0Q29tYm9Cb3hTZXBhcmF0
b3JXaWR0aCgpICsgKDMgKiBidXR0b25XaWRnZXRTdHlsZS0+eHRoaWNrbmVzcyk7Ci0KLSAgICBp
ZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgbGVmdCArPSBhcnJvd0FuZFNl
cGVyYXRvckxlbmd0aDsKLSAgICBlbHNlCi0gICAgICAgIHJpZ2h0ICs9IGFycm93QW5kU2VwZXJh
dG9yTGVuZ3RoOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
TGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSAwLCB0b3Ag
PSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxl
LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJldHVybiBsZWZ0OwotfQotCi1pbnQg
UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAotewotICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0
b20gPSAwOwotICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKLSAgICByZXR1cm4gcmlnaHQ7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlu
dCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwotICAgIGdldENvbWJv
Qm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICByZXR1cm4g
dG9wOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAs
IHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIGJvdHRvbTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludEJ1
dHRvbihvYmplY3QsIGluZm8sIHJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IE1lbnUgbGlzdCBidXR0b24gcGFpbnRpbmcgc3RyYXRlZ3kuCi0gICAgLy8gRm9yIGJ1dHRvbnMg
d2l0aCBhcHBlYXJzLWFzLWxpc3Qgc2V0IHRvIGZhbHNlIChoYXZpbmcgYSBzZXBhcmF0b3IpOgot
ICAgIC8vIHwgbGVmdCBib3JkZXIgfCBCdXR0b24gdGV4dCB8IHh0aGlja25lc3MgfCB2c2VwYXJh
dG9yIHwgeHRoaWNrbmVzcyB8IGFycm93IHwgeHRoaWNrbmVzcyB8IHJpZ2h0IGJvcmRlciB8Ci0g
ICAgLy8gRm9yIGJ1dHRvbnMgd2l0aCBhcHBlYXJzLWFzLWxpc3Qgc2V0IHRvIHRydWUgKG5vdCBo
YXZpbmcgYSBzZXBhcmF0b3IpOgotICAgIC8vIHwgbGVmdCBib3JkZXIgfCBCdXR0b24gdGV4dCB8
IGFycm93IHwgeHRoaWNrbmVzcyB8IHJpZ2h0IGJvcmRlciB8Ci0KLSAgICBpbnQgbGVmdEJvcmRl
ciA9IDAsIHJpZ2h0Qm9yZGVyID0gMCwgYm90dG9tQm9yZGVyID0gMCwgdG9wQm9yZGVyID0gMDsK
LSAgICBnZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0Qm9yZGVy
LCB0b3BCb3JkZXIsIHJpZ2h0Qm9yZGVyLCBib3R0b21Cb3JkZXIpOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAgICBpbnQgYXJyb3dTaXplID0gY29tYm9Cb3hB
cnJvd1NpemUoc3R5bGUpOwotICAgIEd0a1N0eWxlKiBidXR0b25TdHlsZSA9IGd0a193aWRnZXRf
Z2V0X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwotCi0gICAgSW50UmVjdCBhcnJvd1JlY3Qo
MCwgKHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8gMiwgYXJyb3dTaXplLCBhcnJvd1NpemUp
OwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICBhcnJvd1JlY3Qu
c2V0WChsZWZ0Qm9yZGVyICsgYnV0dG9uU3R5bGUtPnh0aGlja25lc3MpOwotICAgIGVsc2UKLSAg
ICAgICAgYXJyb3dSZWN0LnNldFgocmVjdC53aWR0aCgpIC0gcmlnaHRCb3JkZXIgLSBidXR0b25T
dHlsZS0+eHRoaWNrbmVzcyAtIGFycm93U2l6ZSk7Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dU
eXBlID0gaXNQcmVzc2VkKG9iamVjdCkgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7
Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0
LCByZWN0KTsKLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gZ2V0R3RrU3RhdGVUeXBlKHRo
aXMsIG9iamVjdCk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEFycm93KGFycm93UmVjdCwg
Z3RrQ29tYm9Cb3hBcnJvdygpLCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsIEdUS19BUlJPV19ET1dO
LCAiYXJyb3ciKTsKLQotICAgIC8vIFNvbWUgY29tYm8gYm94ZXMgZG8gbm90IGhhdmUgYSBzZXBh
cmF0b3IuCi0gICAgR3RrV2lkZ2V0KiBzZXBhcmF0b3IgPSBndGtDb21ib0JveFNlcGFyYXRvcigp
OwotICAgIGlmICghc2VwYXJhdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBX
ZSB3YW50IHRvIGRlY3JlYXNlIHRoZSBoZWlnaHQgb2YgdGhlIHNlcGFyYXRvciBiYXNlZCBvbiB0
aGUgZm9jdXMgcGFkZGluZyBvZiB0aGUgYnV0dG9uLgotICAgIGdpbnQgZm9jdXNQYWRkaW5nID0g
MCwgZm9jdXNXaWR0aCA9IDA7IAotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KGd0a0NvbWJvQm94
QnV0dG9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAm
Zm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZm
b2N1c1BhZGRpbmcsIE5VTEwpOwotICAgIHRvcEJvcmRlciArPSBmb2N1c1BhZGRpbmcgKyBmb2N1
c1dpZHRoOwotICAgIGJvdHRvbUJvcmRlciArPSBmb2N1c1BhZGRpbmcgKyBmb2N1c1dpZHRoOwot
ICAgIGludCBzZXBhcmF0b3JXaWR0aCA9IGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKTsKLSAg
ICBJbnRSZWN0IHNlcGFyYXRvclJlY3QoMCwgdG9wQm9yZGVyLCBzZXBhcmF0b3JXaWR0aCwgcmVj
dC5oZWlnaHQoKSAtIHRvcEJvcmRlciAtIGJvdHRvbUJvcmRlcik7Ci0gICAgaWYgKHN0eWxlLT5k
aXJlY3Rpb24oKSA9PSBSVEwpCi0gICAgICAgIHNlcGFyYXRvclJlY3Quc2V0WChhcnJvd1JlY3Qu
eCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyArIHNlcGFy
YXRvcldpZHRoKTsKLSAgICBlbHNlCi0gICAgICAgIHNlcGFyYXRvclJlY3Quc2V0WChhcnJvd1Jl
Y3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBzZXBhcmF0b3JXaWR0aCk7Ci0KLSAg
ICBnYm9vbGVhbiBoYXNXaWRlU2VwYXJhdG9ycyA9IEZBTFNFOwotICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0KHNlcGFyYXRvciwgIndpZGUtc2VwYXJhdG9ycyIsICZoYXNXaWRlU2VwYXJhdG9ycywg
TlVMTCk7Ci0gICAgaWYgKGhhc1dpZGVTZXBhcmF0b3JzKQotICAgICAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KHNlcGFyYXRvclJlY3QsIHNlcGFyYXRvciwgR1RLX1NUQVRFX05PUk1BTCwg
R1RLX1NIQURPV19FVENIRURfT1VULCAidnNlcGFyYXRvciIpOwotICAgIGVsc2UKLSAgICAgICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludFZMaW5lKHNlcGFyYXRvclJlY3QsIHNlcGFyYXRvciwgR1RL
X1NUQVRFX05PUk1BTCwgInZzZXBhcmF0b3IiKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0KLSAgICBib29sIGVuYWJsZWQgPSBp
c0VuYWJsZWQocmVuZGVyT2JqZWN0KSAmJiAhaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0
KTsKLSAgICBHdGtTdGF0ZVR5cGUgYmFja2dyb3VuZFN0YXRlID0gZW5hYmxlZCA/IEdUS19TVEFU
RV9OT1JNQUwgOiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKHdpZGdldCwgZW5hYmxlZCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdp
ZGdldCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigp
KSk7Ci0gICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBpc0ZvY3VzZWQocmVuZGVyT2JqZWN0
KSk7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250
ZXh0LCByZWN0KTsKLSAgICBJbnRSZWN0IHRleHRGaWVsZFJlY3QoSW50UG9pbnQoKSwgcmVjdC5z
aXplKCkpOwotCi0gICAgLy8gVGhlIGVudHJ5IGJhY2tncm91bmQgaXMgb25seSBwYWludGVkIG92
ZXIgdGhlIGludGVyaW9yIHBhcnQgb2YgdGhlIEdUSysgZW50cnksIG5vdAotICAgIC8vIHRoZSBl
bnRpcmUgZnJhbWUuIFRoaXMgaGFwcGVucyBpbiB0aGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNv
ZGUgYXMgd2VsbC4KLSAgICBJbnRSZWN0IGludGVyaW9yUmVjdCh0ZXh0RmllbGRSZWN0KTsKLSAg
ICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOwotICAgIGlu
dGVyaW9yUmVjdC5pbmZsYXRlWCgtc3R5bGUtPnh0aGlja25lc3MpOwotICAgIGludGVyaW9yUmVj
dC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRGbGF0Qm94KGludGVyaW9yUmVjdCwgd2lkZ2V0LCBiYWNrZ3JvdW5kU3RhdGUsIEdUS19TSEFE
T1dfTk9ORSwgImVudHJ5X2JnIik7Ci0KLSAgICAvLyBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBk
cmF3aW5nIHRoZSBhY3R1YWwgZnJhbWUuCi0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNoYWRv
dyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4s
ICJlbnRyeSIpOwotCi0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICBnaW50IGZvY3Vz
V2lkdGg7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsICBOVUxMKTsKLSAg
ICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgIWludGVyaW9yRm9jdXMpIHsKLSAgICAg
ICAgLy8gV2hlbiBHVEsrIHBhaW50cyBhIHRleHQgZW50cnkgd2l0aCBmb2N1cywgaXQgc2hyaW5r
cyB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgYXJlYSBieSB0aGUKLSAgICAgICAgLy8gZm9jdXMgd2lk
dGggYW5kIHBhaW50cyBvdmVyIHRoZSBwcmV2aW91c2x5IHVuZm9jdXNlZCB0ZXh0IGVudHJ5LiBX
ZSBuZWVkIHRvIGVtdWxhdGUgdGhhdAotICAgICAgICAvLyBieSBkcmF3aW5nIGJvdGggdGhlIHVu
Zm9jdXNlZCBmcmFtZSBhYm92ZSBhbmQgdGhlIGZvY3VzZWQgZnJhbWUgaGVyZS4KLSAgICAgICAg
SW50UmVjdCBzaGFkb3dSZWN0KHRleHRGaWVsZFJlY3QpOwotICAgICAgICBzaGFkb3dSZWN0Lmlu
ZmxhdGUoLWZvY3VzV2lkdGgpOwotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2hhZG93
KHNoYWRvd1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgImVu
dHJ5Iik7Ci0KLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZvY3VzKHRleHRGaWVsZFJl
Y3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgImVudHJ5Iik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHls
ZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBh
cnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNs
aWRlclBhcnQpOwotCi0gICAgLy8gV2Ugc2hyaW5rIHRoZSB0cm91Z2ggcmVjdCBzbGlnaHRseSB0
byBtYWtlIHJvb20gZm9yIHRoZSBmb2N1cyBpbmRpY2F0b3IuCi0gICAgSW50UmVjdCB0cm91Z2hS
ZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsgLy8gVGhpcyBpcyByZWxhdGl2ZSB0byByZWN0
LgotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJIb3Jp
em9udGFsUGFydCkgewotICAgICAgICB3aWRnZXQgPSBndGtIU2NhbGUoKTsKLSAgICAgICAgdHJv
dWdoUmVjdC5pbmZsYXRlWCgtZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+eHRoaWNrbmVz
cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gZ3RrVlNjYWxlKCk7Ci0gICAgICAg
IHRyb3VnaFJlY3QuaW5mbGF0ZVkoLWd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnl0aGlj
a25lc3MpOwotICAgIH0KLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtU
ZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAg
IHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3godHJvdWdoUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVf
QUNUSVZFLCBHVEtfU0hBRE9XX09VVCwgInRyb3VnaCIpOwotICAgIGlmIChpc0ZvY3VzZWQob2Jq
ZWN0KSkKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZvY3VzKEludFJlY3QoSW50UG9p
bnQoKSwgcmVjdC5zaXplKCkpLCB3aWRnZXQsIGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3Qp
LCAidHJvdWdoIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoaW5mby5jb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbnRyb2xQ
YXJ0IHBhcnQgPSBvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlQocGFy
dCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0KLSAgICBH
dGtXaWRnZXQqIHdpZGdldCA9IDA7Ci0gICAgY29uc3QgY2hhciogZGV0YWlsID0gMDsKLSAgICBH
dGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHdpZGdldCA9IGd0a0hTY2FsZSgpOwotICAgICAgICBk
ZXRhaWwgPSAiaHNjYWxlIjsKLSAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05f
SE9SSVpPTlRBTDsKLSAgICB9IGVsc2UgewotICAgICAgICB3aWRnZXQgPSBndGtWU2NhbGUoKTsK
LSAgICAgICAgZGV0YWlsID0gInZzY2FsZSI7Ci0gICAgICAgIG9yaWVudGF0aW9uID0gR1RLX09S
SUVOVEFUSU9OX1ZFUlRJQ0FMOwotICAgIH0KLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24o
d2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsK
LQotICAgIC8vIE9ubHkgc29tZSB0aGVtZXMgaGF2ZSBzbGlkZXIgdGh1bWJzIHJlc3BvbmQgdG8g
Y2xpY2tzIGFuZCBzb21lIGRvbid0LiBUaGlzIGluZm9ybWF0aW9uIGlzCi0gICAgLy8gZ2F0aGVy
ZWQgdmlhIHRoZSAnYWN0aXZhdGUtc2xpZGVyJyBwcm9wZXJ0eSwgYnV0IGl0J3MgZGVwcmVjYXRl
ZCBpbiBHVEsrIDIuMjIgYW5kIHJlbW92ZWQgaW4KLSAgICAvLyBHVEsrIDMueC4gVGhlIGRyYXdi
YWNrIG9mIG5vdCBob25vcmluZyBpdCBpcyB0aGF0IHNsaWRlciB0aHVtYnMgY2hhbmdlIGNvbG9y
IHdoZW4geW91IGNsaWNrCi0gICAgLy8gb24gdGhlbS4gCi0gICAgSW50UmVjdCB0aHVtYlJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lk
Z2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRTbGlkZXIodGh1bWJSZWN0LCB3aWRnZXQsIGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3Qp
LCBHVEtfU0hBRE9XX09VVCwgZGV0YWlsLCBvcmllbnRhdGlvbik7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUtPmFwcGVhcmFuY2UoKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKHBhcnQgPT0g
TWVkaWFTbGlkZXJUaHVtYlBhcnQpIHsKLSAgICAgICAgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNp
emUoc3R5bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IGd0a0hTY2Fs
ZSgpIDogZ3RrVlNjYWxlKCk7Ci0gICAgaW50IGxlbmd0aCA9IDAsIHdpZHRoID0gMDsKLSAgICBn
dGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNs
aWRlcl9sZW5ndGgiLCAmbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJf
d2lkdGgiLCAmd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBp
ZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NF
UlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLX0KLQot
I2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBndGtQcm9ncmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQs
IGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwot
Ci0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250
ZXh0LCByZWN0KTsKLSAgICBJbnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwg
cmVjdC5zaXplKCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFByb2dyZXNz
QmFyUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAidHJvdWdo
Iik7Ci0KLSAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
OwotICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KGZ1bGxQcm9ncmVzc0JhclJlY3QpOwotICAgIHBy
b2dyZXNzUmVjdC5pbmZsYXRlWCgtc3R5bGUtPnh0aGlja25lc3MpOwotICAgIHByb2dyZXNzUmVj
dC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MpOwotICAgIHByb2dyZXNzUmVjdCA9IFJlbmRl
clRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1Jl
Y3QpOwotCi0gICAgaWYgKCFwcm9ncmVzc1JlY3QuaXNFbXB0eSgpKQotICAgICAgICB3aWRnZXRD
b250ZXh0Lmd0a1BhaW50Qm94KHByb2dyZXNzUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfUFJFTElH
SFQsIEdUS19TSEFET1dfT1VULCAiYmFyIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5k
aWYKLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAg
R3RrU3R5bGUqIGd0a1N0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrU3BpbkJ1dHRvbigp
KTsKLSAgICBjb25zdCBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uID0gZ3Rr
U3R5bGUtPmZvbnRfZGVzYzsKLSAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlw
dGlvbl9nZXRfc2l6ZShmb250RGVzY3JpcHRpb24pOwotCi0gICAgLy8gRm9yY2UgYW4gb2RkIGFy
cm93IHNpemUgaGVyZS4gR1RLKyAzLnggZm9yY2VzIGV2ZW4gaW4gdGhpcyBjYXNlLCBidXQKLSAg
ICAvLyBOb2Rva2EtYmFzZWQgdGhlbWVzIGxvb2sgaW5jb3JyZWN0IHdpdGggYW4gZXZlbiBhcnJv
dyBzaXplLgotICAgIGludCB3aWR0aCA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5T
cGluQnV0dG9uQXJyb3dTaXplKTsKLSAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBn
dGtTdHlsZS0+eHRoaWNrbmVzczsKLQotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4
ZWxzIG9uIHRoZSB0b3AgYW5kIGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlz
Ci0gICAgLy8gaXMgYmVjYXVzZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4
dCBib3ggYm9yZGVycywgYnV0IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKLSAgICAvLyBzcGlu
IGJ1dHRvbiBpbnNpZGUgdGhlIHRleHQgYm94LgotICAgIEludFJlY3QgZXhwYW5kZWRSZWN0KHJl
Y3QpOwotICAgIGV4cGFuZGVkUmVjdC5pbmZsYXRlWSgyKTsKLSAgICBleHBhbmRlZFJlY3Quc2V0
V2lkdGgocmVjdC53aWR0aCgpICsgMik7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdp
ZGdldENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQsIGV4cGFuZGVkUmVjdCk7Ci0gICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBndGtTcGluQnV0dG9uKCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0
aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSk7Ci0KLSAgICBJbnRSZWN0IGZ1bGxTcGluQnV0dG9uUmVjdChJbnRQb2ludCgpLCBl
eHBhbmRlZFJlY3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxT
cGluQnV0dG9uUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAi
c3BpbmJ1dHRvbiIpOwotCi0gICAgYm9vbCB1cFByZXNzZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRQ
cmVzc2VkKHJlbmRlck9iamVjdCk7Ci0gICAgYm9vbCB1cEhvdmVyZWQgPSBpc1NwaW5VcEJ1dHRv
blBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCk7Ci0gICAgYm9vbCBjb250cm9sQWN0aXZlID0gaXNF
bmFibGVkKHJlbmRlck9iamVjdCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7
Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gdXBQcmVzc2VkID8gR1RLX1NIQURPV19J
TiA6IEdUS19TSEFET1dfT1VUOwotCi0gICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19T
VEFURV9JTlNFTlNJVElWRTsKLSAgICBpZiAoY29udHJvbEFjdGl2ZSkgewotICAgICAgICBpZiAo
aXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgdXBQcmVzc2VkKQotICAgICAgICAgICAgc3RhdGVU
eXBlID0gR1RLX1NUQVRFX0FDVElWRTsKLSAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRl
ck9iamVjdCkgJiYgdXBIb3ZlcmVkKQotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRF
X1BSRUxJR0hUOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RB
VEVfTk9STUFMOwotICAgIH0KLSAgICBJbnRSZWN0IHRvcFJlY3QoSW50UG9pbnQoKSwgZXhwYW5k
ZWRSZWN0LnNpemUoKSk7Ci0gICAgdG9wUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdo
dCgpIC8gMik7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveCh0b3BSZWN0LCB3aWRnZXQs
IHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgInNwaW5idXR0b25fdXAiKTsKLQotICAgIC8vIFRoZSBh
cnJvdyBzaXplL3Bvc2l0aW9uIGNhbGN1bGF0aW9uIGhlcmUgaXMgYmFzZWQgb24gdGhlIGFyYml0
cmFyeSBneW1uYXN0aWNzIHRoYXQgaGFwcGVuCi0gICAgLy8gaW4gZ3Rrc3BpbmJ1dHRvbi5jLiBJ
dCBpc24ndCBwcmV0dHkgdGhlcmUgYW5kIGl0IGlzbid0IHByZXR0eSBoZXJlLiBUaGlzIG1hbmFn
ZXMgdG8gbWFrZQotICAgIC8vIHRoZSBidXR0b24gbG9vayBuYXRpdmUgZm9yIG1hbnkgdGhlbWVz
IHRob3VnaC4KLSAgICBJbnRSZWN0IGFycm93UmVjdDsKLSAgICBpbnQgYXJyb3dTaXplID0gKGV4
cGFuZGVkUmVjdC53aWR0aCgpIC0gMykgLyAyOwotICAgIGFycm93U2l6ZSAtPSAoYXJyb3dTaXpl
ICUgMikgLSAxOyAvLyBGb3JjZSBvZGQuCi0gICAgYXJyb3dSZWN0LnNldFdpZHRoKGFycm93U2l6
ZSk7Ci0gICAgYXJyb3dSZWN0LnNldEhlaWdodChhcnJvd1NpemUpOwotICAgIGFycm93UmVjdC5t
b3ZlKChleHBhbmRlZFJlY3Qud2lkdGgoKSAtIGFycm93UmVjdC53aWR0aCgpKSAvIDIsCi0gICAg
ICAgICAgICAgICAgICAgKHRvcFJlY3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QuaGVpZ2h0KCkpIC8g
MiArIDEpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdl
dCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1dfVVAsICJzcGluYnV0dG9uIik7Ci0K
LSAgICBzaGFkb3dUeXBlID0gaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCA/
IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLSAgICBpZiAoY29udHJvbEFjdGl2ZSkg
ewotICAgICAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCkKLSAg
ICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgICAgIGVsc2UgaWYg
KGlzSG92ZXJlZChyZW5kZXJPYmplY3QpICYmICF1cEhvdmVyZWQpCi0gICAgICAgICAgICBzdGF0
ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0
YXRlVHlwZSA9IEdUS19TVEFURV9OT1JNQUw7Ci0gICAgfQotICAgIEludFJlY3QgYm90dG9tUmVj
dChJbnRQb2ludCgwLCBleHBhbmRlZFJlY3QuaGVpZ2h0KCkgLyAyKSwgZXhwYW5kZWRSZWN0LnNp
emUoKSk7Ci0gICAgYm90dG9tUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC0g
Ym90dG9tUmVjdC55KCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYm90dG9tUmVj
dCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX2Rvd24iKTsKLQot
ICAgIGFycm93UmVjdC5zZXRZKGFycm93UmVjdC55KCkgKyBib3R0b21SZWN0LnkoKSAtIDEpOwot
ICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVU
eXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgInNwaW5idXR0b24iKTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdl
dFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0
aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKQotewotICAgIEFTU0VSVCh3aWRnZXRUeXBl
ID09IEdUS19UWVBFX0NPTlRBSU5FUiB8fCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKTsK
LQotICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3Rr
Kj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKLSAgICBHdGtXaWRnZXQqIHdp
ZGdldCA9IHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ09OVEFJTkVSID8gR1RLX1dJREdFVCh0aGVt
ZS0+Z3RrQ29udGFpbmVyKCkpIDogdGhlbWUtPmd0a0VudHJ5KCk7Ci0KLSAgICBHdGtTdHlsZSog
c3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOwotICAgIEd0a0ljb25TZXQqIGlj
b25TZXQgPSBndGtfc3R5bGVfbG9va3VwX2ljb25fc2V0KHN0eWxlLCBpY29uTmFtZSk7Ci0gICAg
cmV0dXJuIGFkb3B0R1JlZihndGtfaWNvbl9zZXRfcmVuZGVyX2ljb24oaWNvblNldCwgc3R5bGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtTdGF0ZVR5cGU+KHN0YXRlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHdGtJY29uU2l6ZT4oaWNvblNpemUpLCAwLCAwKSk7Ci19Ci0KLQotQ29sb3IgUmVuZGVyVGhl
bWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsKLX0KLQotQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLSAgICBy
ZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZF
XTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5
KCk7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NU
QVRFX1NFTEVDVEVEXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gZ3RrRW50cnkoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0
KS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOwotfQotCi1Db2xvciBSZW5k
ZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAgcmV0dXJu
IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Ci19
Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7
Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRF
X1NFTEVDVEVEXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
LT50ZXh0W0dUS19TVEFURV9BQ1RJVkVdOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6c3lz
dGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlk
KSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6Ci0gICAgICAgIHJldHVybiBDb2xvcihn
dGtfd2lkZ2V0X2dldF9zdHlsZShndGtCdXR0b24oKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsK
LSAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgIHJldHVybiBDb2xvcihndGtf
d2lkZ2V0X2dldF9zdHlsZShndGtFbnRyeSgpKS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFs
dWVJZCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dp
ZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVt
ZSkKLXsKLSAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQg
Y2FsbGVkIG1hbnkgdGltZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4K
LSAgICByZW5kZXJUaGVtZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotc3RhdGlj
IHZvaWQgc2V0dXBXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgZ3RrX3dpZGdldF9y
ZWFsaXplKHdpZGdldCk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwg
InRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOwotfQotCi12b2lk
IFJlbmRlclRoZW1lR3RrOjpzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtXaWRnZXQqIHdpbmRvdykgY29uc3QKLXsKLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdpZGdldCk7Ci0gICAgc2V0dXBXaWRnZXQod2lkZ2V0
KTsKLQotICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZv
ciB0aGUgY29udGFpbmluZyB3aW5kb3cgb3IgcGFyZW50IGNvbnRhaW5lci4KLSAgICBnX3NpZ25h
bF9jb25uZWN0KHdpZGdldCwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxs
YmFjayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Ci19Ci0KLUd0a1dpZGdl
dCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3Rr
Q29udGFpbmVyKQotICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7Ci0KLSAgICBtX2d0a1dp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgIGd0a193aWRnZXRf
c2V0X2NvbG9ybWFwKG1fZ3RrV2luZG93LCBtX2NvbG9ybWFwKTsKLSAgICBzZXR1cFdpZGdldCht
X2d0a1dpbmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemls
bGFHdGtXaWRnZXQiKTsKLQotICAgIG1fZ3RrQ29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOwot
ICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2lu
ZG93KTsKLSAgICByZXR1cm4gbV9ndGtDb250YWluZXI7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVy
VGhlbWVHdGs6Omd0a0J1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQnV0dG9uKQotICAg
ICAgICByZXR1cm4gbV9ndGtCdXR0b247Ci0gICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25l
dygpOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0Nv
bnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtCdXR0b247Ci19Ci0KLUd0a1dpZGdldCogUmVu
ZGVyVGhlbWVHdGs6Omd0a0VudHJ5KCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtFbnRyeSkKLSAg
ICAgICAgcmV0dXJuIG1fZ3RrRW50cnk7Ci0gICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXco
KTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRh
aW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtFbnRyeTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJU
aGVtZUd0azo6Z3RrVHJlZVZpZXcoKSBjb25zdAotewotICAgIGlmIChtX2d0a1RyZWVWaWV3KQot
ICAgICAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLSAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3Ry
ZWVfdmlld19uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJl
ZVZpZXcsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLX0KLQot
R3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVlNjYWxlKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9ndGtWU2NhbGUpCi0gICAgICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKLSAgICBtX2d0a1ZTY2Fs
ZSA9IGd0a192c2NhbGVfbmV3KDApOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIo
bV9ndGtWU2NhbGUsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtWU2NhbGU7Ci19
Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0hTY2FsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fZ3RrSFNjYWxlKQotICAgICAgICByZXR1cm4gbV9ndGtIU2NhbGU7Ci0gICAgbV9ndGtI
U2NhbGUgPSBndGtfaHNjYWxlX25ldygwKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFp
bmVyKG1fZ3RrSFNjYWxlLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrSFNjYWxl
OwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fZ3RrUmFkaW9CdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0a1JhZGlv
QnV0dG9uOwotICAgIG1fZ3RrUmFkaW9CdXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldygwKTsK
LSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUmFkaW9CdXR0b24sIGd0a0Nv
bnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0
KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ2hlY2tCdXR0b24oKSBjb25zdAotewotICAgIGlmIChtX2d0
a0NoZWNrQnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKLSAgICBtX2d0
a0NoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFu
ZEFkZFRvQ29udGFpbmVyKG1fZ3RrQ2hlY2tCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKLSAgICBy
ZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6
Z3RrUHJvZ3Jlc3NCYXIoKSBjb25zdAotewotICAgIGlmIChtX2d0a1Byb2dyZXNzQmFyKQotICAg
ICAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsKLSAgICBtX2d0a1Byb2dyZXNzQmFyID0gZ3Rr
X3Byb2dyZXNzX2Jhcl9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1f
Z3RrUHJvZ3Jlc3NCYXIsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtQcm9ncmVz
c0JhcjsKLX0KLQotc3RhdGljIHZvaWQgZ2V0R3RrQ29tYm9Cb3hCdXR0b24oR3RrV2lkZ2V0KiB3
aWRnZXQsIGdwb2ludGVyIHRhcmdldCkKLXsKLSAgICBpZiAoIUdUS19JU19UT0dHTEVfQlVUVE9O
KHdpZGdldCkpCi0gICAgICAgIHJldHVybjsKLSAgICBHdGtXaWRnZXQqKiB3aWRnZXRUYXJnZXQg
PSBzdGF0aWNfY2FzdDxHdGtXaWRnZXQqKj4odGFyZ2V0KTsKLSAgICAqd2lkZ2V0VGFyZ2V0ID0g
d2lkZ2V0OwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiBhcnJvdzsKLSAg
ICBHdGtXaWRnZXQqIHNlcGFyYXRvcjsKLX0gQ29tYm9Cb3hXaWRnZXRQaWVjZXM7Ci0KLXN0YXRp
YyB2b2lkIGdldEd0a0NvbWJvQm94UGllY2VzKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBk
YXRhKQotewotICAgIGlmIChHVEtfSVNfQVJST1cod2lkZ2V0KSkgewotICAgICAgICBzdGF0aWNf
Y2FzdDxDb21ib0JveFdpZGdldFBpZWNlcyo+KGRhdGEpLT5hcnJvdyA9IHdpZGdldDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSAKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+c2VwYXJhdG9y
ID0gd2lkZ2V0OwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQ29tYm9Cb3gpCi0gICAgICAgIHJldHVybiBtX2d0a0Nv
bWJvQm94OwotICAgIG1fZ3RrQ29tYm9Cb3ggPSBndGtfY29tYm9fYm94X25ldygpOwotICAgIHNl
dHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtDb21ib0JveCwgZ3RrQ29udGFpbmVyKCkp
OwotICAgIHJldHVybiBtX2d0a0NvbWJvQm94OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpy
ZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgZ3RrQ29tYm9Cb3goKTsgLy8g
RW5zdXJlIHRoYXQgd2UndmUgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveC4KLQotICAgIC8vIFNv
bWUgdGhlbWVzIGxvb2sgYXQgd2lkZ2V0IGFuY2VzdHJ5IHRvIGRldGVybWluZSBob3cgdG8gcmVu
ZGVyIHdpZGdldHMsIHNvCi0gICAgLy8gZ2V0IHRoZSBHdGtCdXR0b24gdGhhdCBpcyB0aGUgYWN0
dWFsIGNoaWxkIG9mIHRoZSBjb21ibyBib3guCi0gICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RL
X0NPTlRBSU5FUihtX2d0a0NvbWJvQm94KSwgZ2V0R3RrQ29tYm9Cb3hCdXR0b24sICZtX2d0a0Nv
bWJvQm94QnV0dG9uKTsKLSAgICBBU1NFUlQobV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgc2V0
dXBXaWRnZXQobV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9p
bnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94QnV0dG9uKSwgcmVpbnRlcnByZXRfY2FzdDxncG9p
bnRlcio+KCZtX2d0a0NvbWJvQm94QnV0dG9uKSk7Ci0KLSAgICBDb21ib0JveFdpZGdldFBpZWNl
cyBwaWVjZXMgPSB7IDAsIDAgfTsKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkNoaWxkID0gZ3RrX2Jp
bl9nZXRfY2hpbGQoR1RLX0JJTihndGtDb21ib0JveEJ1dHRvbigpKSk7Ci0gICAgaWYgKEdUS19J
U19IQk9YKGJ1dHRvbkNoaWxkKSkKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NP
TlRBSU5FUihidXR0b25DaGlsZCksIGdldEd0a0NvbWJvQm94UGllY2VzLCAmcGllY2VzKTsKLSAg
ICBlbHNlIGlmIChHVEtfSVNfQVJST1coYnV0dG9uQ2hpbGQpKQotICAgICAgICBwaWVjZXMuYXJy
b3cgPSBidXR0b25DaGlsZDsKLQotICAgIEFTU0VSVChwaWVjZXMuYXJyb3cpOwotICAgIG1fZ3Rr
Q29tYm9Cb3hBcnJvdyA9IHBpZWNlcy5hcnJvdzsKLSAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJv
Qm94QXJyb3cpOwotICAgIC8vIFdoZW4gdGhlIHN0eWxlIGNoYW5nZXMsIHRoZSBjb21ibyBib3gg
bWF5IGRlc3Ryb3kgaXRzIGNoaWxkcmVuLgotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIo
R19PQkpFQ1QobV9ndGtDb21ib0JveEFycm93KSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+
KCZtX2d0a0NvbWJvQm94QXJyb3cpKTsKLQotICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSBw
aWVjZXMuc2VwYXJhdG9yOwotICAgIGlmIChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSB7Ci0gICAg
ICAgIHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpOwotICAgICAgICAvLyBXaGVu
IHRoZSBzdHlsZSBjaGFuZ2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJl
bi4KLSAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJv
Qm94U2VwYXJhdG9yKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94
U2VwYXJhdG9yKSk7Ci0gICAgfQotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtD
b21ib0JveEJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQ29tYm9Cb3hCdXR0b24pCi0g
ICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94QnV0dG9uOwotICAgIHJlZnJlc2hDb21ib0JveENo
aWxkcmVuKCk7Ci0gICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hCdXR0b24pOwotICAgIHJldHVybiBt
X2d0a0NvbWJvQm94QnV0dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtD
b21ib0JveEFycm93KCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtDb21ib0JveEFycm93KQotICAg
ICAgICByZXR1cm4gbV9ndGtDb21ib0JveEFycm93OwotICAgIHJlZnJlc2hDb21ib0JveENoaWxk
cmVuKCk7Ci0gICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hBcnJvdyk7Ci0gICAgcmV0dXJuIG1fZ3Rr
Q29tYm9Cb3hBcnJvdzsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9C
b3hTZXBhcmF0b3IoKSBjb25zdAotewotICAgIC8vIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgbWF5
IGJlIG51bGwgZWl0aGVyIGJlY2F1c2Ugd2UgaGF2ZW4ndCBpbml0aWFsaXplZCB0aGUgY29tYm8g
Ym94Ci0gICAgLy8gb3IgYmVjYXVzZSB0aGUgY29tYm8gYm94ZXMgaW4gdGhpcyB0aGVtZSBkb24n
dCBoYXZlIHNlcGFyYXRvcnMuIElmIG1fZ3RrQ29tYm9Cb3hBcnJvdwotICAgIC8vIGFycm93IGlz
bid0IG51bGwsIHdlIGRlZmluaXRlbHkgaGF2ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94Lgot
ICAgIGlmIChtX2d0a0NvbWJvQm94QXJyb3cgfHwgbV9ndGtDb21ib0JveEJ1dHRvbikKLSAgICAg
ICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3I7Ci0gICAgcmVmcmVzaENvbWJvQm94Q2hp
bGRyZW4oKTsKLSAgICByZXR1cm4gbV9ndGtDb21ib0JveFNlcGFyYXRvcjsKLX0KLQotR3RrV2lk
Z2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrSFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
Z3RrSFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKLSAgICBtX2d0
a0hTY3JvbGxiYXIgPSBndGtfaHNjcm9sbGJhcl9uZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRB
ZGRUb0NvbnRhaW5lcihtX2d0a0hTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1
cm4gbV9ndGtIU2Nyb2xsYmFyOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtW
U2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtWU2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm4gbV9ndGtWU2Nyb2xsYmFyOwotICAgIG1fZ3RrVlNjcm9sbGJhciA9IGd0a192c2Nyb2xs
YmFyX25ldygwKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjcm9s
bGJhciwgZ3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1ZTY3JvbGxiYXI7Ci19Ci0K
LUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1NwaW5CdXR0b24oKSBjb25zdAotewotICAg
IGlmIChtX2d0a1NwaW5CdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Ci0g
ICAgbV9ndGtTcGluQnV0dG9uID0gZ3RrX3NwaW5fYnV0dG9uX25ld193aXRoX3JhbmdlKDAsIDEw
LCAxKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrU3BpbkJ1dHRvbiwg
Z3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYzI5ODA1NzRjNzYxZDRjMmQ3OTA2MmY0OWQ4ODE4ZmM2MmY3
YTBmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsOTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLQot
I2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcu
aCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50
cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5o
IgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2
YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19T
SVpFIGluIGd0a2Fycm93LmMuCi1zdGF0aWMgY29uc3QgaW50IG1pbkFycm93U2l6ZSA9IDE1Owot
Ly8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdh
cyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCi1zdGF0aWMg
Y29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OwotCi10eXBlZGVmIEhhc2hNYXA8
R1R5cGUsIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiA+IFN0eWxlQ29udGV4dE1hcDsKLXN0YXRp
YyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpOwotCi1zdGF0aWMgdm9pZCBndGtT
dHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyopCi17Ci0gICAgU3R5bGVD
b250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZUNvbnRleHRNYXAoKS5lbmQoKTsK
LSAgICBmb3IgKFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlQ29u
dGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFsdWUuZ2V0KCkpOwotCi0gICAgUGFnZTo6c2No
ZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBhZ2VzKCk7Ci19Ci0KLXN0YXRpYyBTdHlsZUNv
bnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHlsZUNvbnRleHRNYXAsIG1hcCwgKCkpOwotCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQg
PSBmYWxzZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBz
ZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstdGhlbWUtbmFtZSIsIEdfQ0FMTEJBQ0soZ3Rr
U3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChzZXR0
aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9yLXNjaGVtZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFu
Z2VkQ2FsbGJhY2spLCAwKTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRl
eHQoR1R5cGUgd2lkZ2V0VHlwZSkKLXsKLSAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwgMCk7Ci0gICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
Z2V0KCk7Ci0KLSAgICBHdGtXaWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygp
OwotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3aWRnZXRUeXBlKTsKLQot
ICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NDUk9MTEJBUikKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TQ1JPTExC
QVIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfRU5UUlkpCi0gICAgICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1Nf
RU5UUlkpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQVJST1cpCi0gICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCAiYXJyb3ciKTsKLSAg
ICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0JVVFRPTikKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19CVVRUT04p
OwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0NBTEUpCi0gICAgICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0NB
TEUpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0VQQVJBVE9SKQotICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NM
QVNTX1NFUEFSQVRPUik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9QUk9H
UkVTU19CQVIpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAw
LCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfU1BJTl9CVVRUT04pCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2Fk
ZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU1BJTkJVVFRPTik7Ci0gICAgZWxzZSBp
ZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9UUkVFX1ZJRVcpCi0gICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfVklFVyk7Ci0gICAg
ZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04pCi0gICAgICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQ0hF
Q0spOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfUkFESU9fQlVUVE9OKQot
ICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxF
X0NMQVNTX1JBRElPKTsKLQotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0g
YWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfZnJl
ZShwYXRoKTsKLQotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwotICAgIHJl
dHVybiBjb250ZXh0LmdldCgpOwotfQotCi1HdGtTdHlsZUNvbnRleHQqIFJlbmRlclRoZW1lR3Rr
OjpndGtTY3JvbGxiYXJTdHlsZSgpCi17Ci0gICAgcmV0dXJuIGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9TQ1JPTExCQVIpOwotfQotCi0vLyBUaGlzIGlzIG5vdCBhIHN0YXRpYyBtZXRob2QsIGJl
Y2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RLKyBoZWFkZXJzIGluIFJlbmRlclRoZW1l
R3RrLmguCi1leHRlcm4gR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJl
Y3Rpb24pOwotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluaXQoKQotewotfQotCi1S
ZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKCkKLXsKLX0KLQotI2lmIEVOQUJMRShWSURF
TykKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCi17Ci0gICAgR2RrUkdC
QSBjb2xvcjsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRhaW5lckNvbnRleHQgPSBnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJTkVSKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX05PUk1B
TCwgJmNvbG9yKTsKLSAgICBtX3BhbmVsQ29sb3IgPSBjb2xvcjsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxB
R19BQ1RJVkUsICZjb2xvcik7Ci0gICAgbV9zbGlkZXJDb2xvciA9IGNvbG9yOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19T
VEFURV9GTEFHX1NFTEVDVEVELCAmY29sb3IpOwotICAgIG1fc2xpZGVyVGh1bWJDb2xvciA9IGNv
bG9yOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGFkanVzdFJlY3RGb3JGb2N1cyhHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgZ2ludCBmb2N1c1dpZHRo
LCBmb2N1c1BhZDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNX
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAm
Zm9jdXNQYWQsIE5VTEwpOwotICAgIHJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQp
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtTdHlsZUNv
bnRleHQqIGNvbnRleHQgPSAwOwotICAgIGJvb2wgY2hlY2tJbnRlcmlvckZvY3VzID0gZmFsc2U7
Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpOwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgIGNh
c2UgUmFkaW9QYXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHBhcnQgPT0g
Q2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OIDogR1RLX1RZUEVfUkFESU9fQlVU
VE9OKTsKLQotICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Ci0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNh
dG9yU3BhY2luZywgTlVMTCk7Ci0gICAgICAgIHJlY3QuaW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5n
KTsKLQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAg
Y2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQnV0dG9uUGFy
dDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoK
LSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAg
ICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOwotICAgICAgICBjaGVja0ludGVyaW9y
Rm9jdXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIGlmIChjaGVja0ludGVyaW9y
Rm9jdXMpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlv
ckZvY3VzLCBOVUxMKTsKLSAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LCByZWN0KTsKLX0K
LQotc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJl
bmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMg
dG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCi0g
ICAgLy8gR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZlIGxvb2suCi0gICAgLy8g
SXQgY291bGQgYmUgbWFkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZhbHVlcyBvdGhlciB0aGFu
IDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUgY29tcGF0aWJpbGl0eS4KLSAgICBnaW50IGluZGljYXRv
clNpemU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0
b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKLQotICAgIGlmIChzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGlu
ZGljYXRvclNpemUsIEZpeGVkKSk7Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkp
OwotfQotCi1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhl
bWUsIEdUeXBlIHdpZGdldFR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJlY3QpCi17Ci0gICAgR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICAvLyBTb21lIHRoZW1lcyBk
byBub3QgcmVuZGVyIGxhcmdlIHRvZ2dsZSBidXR0b25zIHByb3Blcmx5LCBzbyB3ZSBzaW1wbHkK
LSAgICAvLyBzaHJpbmsgdGhlIHJlY3RhbmdsZSBiYWNrIGRvd24gdG8gdGhlIGRlZmF1bHQgc2l6
ZSBhbmQgdGhlbiBjZW50ZXIgaXQKLSAgICAvLyBpbiB0aGUgZnVsbCB0b2dnbGUgYnV0dG9uIHJl
Z2lvbi4gVGhlIHJlYXNvbiBmb3Igbm90IHNpbXBseSBmb3JjaW5nIHRvZ2dsZQotICAgIC8vIGJ1
dHRvbnMgdG8gYmUgYSBzbWFsbGVyIHNpemUgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGJyZWFr
IHNpdGUgbGF5b3V0cy4KLSAgICBnaW50IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXpl
LCBOVUxMKTsKLSAgICBJbnRSZWN0IHJlY3QoZnVsbFJlY3QpOwotICAgIGlmIChyZWN0LndpZHRo
KCkgPiBpbmRpY2F0b3JTaXplKSB7Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVgoLShyZWN0LndpZHRo
KCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOwotICAgICAgICByZWN0LnNldFdpZHRoKGluZGljYXRv
clNpemUpOyAvLyBJbiBjYXNlIHJlY3Qud2lkdGgoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6
ZSArIDEuCi0gICAgfQotCi0gICAgaWYgKHJlY3QuaGVpZ2h0KCkgPiBpbmRpY2F0b3JTaXplKSB7
Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVkoLShyZWN0LmhlaWdodCgpIC0gaW5kaWNhdG9yU2l6ZSkg
LyAyKTsKLSAgICAgICAgcmVjdC5zZXRIZWlnaHQoaW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2Ug
cmVjdC5oZWlnaHQoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6ZSArIDEuCi0gICAgfQotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQs
IHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OID8gR1RLX1NUWUxFX0NMQVNTX0NI
RUNLIDogR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAg
ICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25s
eUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
SU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3Qp
KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBpZiAodGhl
bWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19JTkNPTlNJU1RFTlQ7Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChy
ZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0g
ICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBpZiAo
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04pCi0gICAgICAgIGd0a19yZW5kZXJf
Y2hlY2soY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBndGtfcmVuZGVyX29wdGlvbihjb250ZXh0LCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9i
amVjdCkpIHsKLSAgICAgICAgSW50UmVjdCBpbmRpY2F0b3JSZWN0KHJlY3QpOwotICAgICAgICBn
aW50IGluZGljYXRvclNwYWNpbmc7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7
Ci0gICAgICAgIGluZGljYXRvclJlY3QuaW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5nKTsKLSAgICAg
ICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIGluZGljYXRvclJlY3QueCgpLCBpbmRpY2F0b3JSZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3JSZWN0LndpZHRoKCksIGluZGljYXRvclJl
Y3QuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29u
dGV4dCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKSwgc3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBwYWludFRvZ2dsZSh0
aGlzLCBHVEtfVFlQRV9DSEVDS19CVVRUT04sIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlv
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgc2V0VG9nZ2xlU2l6ZShnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfUkFESU9fQlVUVE9OKSwgc3R5bGUpOwotfQotCi1ib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBwYWlu
dFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9SQURJT19CVVRUT04sIHJlbmRlck9iamVjdCwgcGFpbnRJ
bmZvLCByZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbmRlckJ1
dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKLQotICAgIGd1
aW50IGZsYWdzID0gMDsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8
fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzSG92
ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVM
SUdIVDsKLSAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAg
ICBpZiAodGhlbWUtPmlzRGVmYXVsdChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIEd0a0JvcmRl
ciogYm9yZGVyUHRyID0gMDsKLSAgICAgICAgR3RrQm9yZGVyIGJvcmRlciA9IHsgMSwgMSwgMSwg
MSB9OwotCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiZGVm
YXVsdC1ib3JkZXIiLCAmYm9yZGVyUHRyLCBOVUxMKTsKLSAgICAgICAgaWYgKGJvcmRlclB0cikg
ewotICAgICAgICAgICAgYm9yZGVyID0gKmJvcmRlclB0cjsKLSAgICAgICAgICAgIGd0a19ib3Jk
ZXJfZnJlZShib3JkZXJQdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYnV0dG9uUmVjdC5tb3Zl
KGJvcmRlci5sZWZ0LCBib3JkZXIudG9wKTsKLSAgICAgICAgYnV0dG9uUmVjdC5zZXRXaWR0aChi
dXR0b25SZWN0LndpZHRoKCkgLSAoYm9yZGVyLmxlZnQgKyBib3JkZXIucmlnaHQpKTsKLSAgICAg
ICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQoYnV0dG9uUmVjdC5oZWlnaHQoKSAtIChib3JkZXIudG9w
ICsgYm9yZGVyLmJvdHRvbSkpOwotCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfREVGQVVMVCk7Ci0gICAgfQotCi0gICAgZ3RrX3Jl
bmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0Lndp
ZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0
LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWln
aHQoKSk7Ci0KLSAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAg
ICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgICAgIGdib29sZWFuIGRpc3BsYWNl
Rm9jdXMsIGludGVyaW9yRm9jdXM7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxp
bmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzcGxhY2UtZm9jdXMiLCAmZGlzcGxhY2VGb2N1
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgICAg
IGlmIChpbnRlcmlvckZvY3VzKSB7Ci0gICAgICAgICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7
Ci0gICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSwgJmJvcmRlcldpZHRoKTsKLQotICAgICAgICAg
ICAgYnV0dG9uUmVjdCA9IEludFJlY3QoYnV0dG9uUmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0
ICsgZm9jdXNQYWQsIGJ1dHRvblJlY3QueSgpICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNQYWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25SZWN0LndpZHRoKCkgLSAo
MiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgubGVmdCArIGJvcmRlcldpZHRoLnJpZ2h0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoMiAq
IGZvY3VzUGFkICsgYm9yZGVyV2lkdGgudG9wICsgYm9yZGVyV2lkdGguYm90dG9tKSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBm
b2N1c1BhZCk7Ci0KLSAgICAgICAgaWYgKGRpc3BsYWNlRm9jdXMgJiYgdGhlbWUtPmlzUHJlc3Nl
ZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsK
LSAgICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOwotICAgICAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50
WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxh
Y2VtZW50LXkiLCAmY2hpbGREaXNwbGFjZW1lbnRZLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKGNoaWxk
RGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1lbnRZKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qu
d2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotfQotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRP
Tik7Ci0KLSAgICByZW5kZXJCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNz
KFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYg
c2VwYXJhdG9yKQotewotICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3
biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQotICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0cmEg
cGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4KLSAgICBpZiAoc3R5bGUt
PmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
dGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9f
Qk9YKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKSk7
Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0
PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsKLQotICAgIGdib29sZWFuIGludGVyaW9yRm9j
dXM7Ci0gICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlu
dGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKLSAgICBm
b2N1cyA9IGludGVyaW9yRm9jdXMgPyBmb2N1c1dpZHRoICsgZm9jdXNQYWQgOiAwOwotCi0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24o
KSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0
aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRv
ciIpOwotCi0gICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7Ci0gICAgZ2ludCBzZXBhcmF0b3JX
aWR0aDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9y
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFyYXRvci13aWR0aCIsICZz
ZXBhcmF0b3JXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0K
LSAgICAvLyBHVEsrIGFsd2F5cyB1c2VzIGJvcmRlci5sZWZ0LCByZWdhcmRsZXNzIG9mIHRleHQg
ZGlyZWN0aW9uLiBTZWUgZ3Rrc2VwZXJhdG9yLmMuCi0gICAgaWYgKCF3aWRlU2VwYXJhdG9ycykK
LSAgICAgICAgc2VwYXJhdG9yV2lkdGggPSBib3JkZXIubGVmdDsKLQotICAgIHNlcGFyYXRvciA9
IHNlcGFyYXRvcldpZHRoOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0
KTsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsg
MCwgMCwgMCwgMCB9OwotICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAw
OwotICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgs
IHNlcGFyYXRvcldpZHRoKTsKLSAgICBpbnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1
c1dpZHRoOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICBsZWZ0
ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOwotICAgIHJldHVybiBsZWZ0OwotfQot
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAotewotICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwg
MCwgMCB9OwotICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwotICAg
IGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFy
YXRvcldpZHRoKTsKLSAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lk
dGg7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgIHJpZ2h0ICs9
IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOwotICAgIHJldHVybiByaWdodDsKLX0KLQot
aW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Ci17Ci0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAw
IH07Ci0gICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0
Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9y
V2lkdGgpOwotICAgIHJldHVybiBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoOwotfQotCi1p
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAs
IDAgfTsKLSAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBn
ZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0
b3JXaWR0aCk7Ci0gICAgcmV0dXJuIGJvcmRlcldpZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0
YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotCi0gICAgLy8gUGFpbnQgdGhlIGJ1dHRvbi4KLSAg
ICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9CVVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoYnV0dG9uU3R5bGVD
b250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGJ1dHRvblN0eWxl
Q29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYnV0
dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICByZW5kZXJCdXR0
b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVj
dCk7Ci0KLSAgICAvLyBHZXQgdGhlIGlubmVyIHJlY3RhbmdsZS4KLSAgICBnaW50IGZvY3VzV2lk
dGgsIGZvY3VzUGFkOwotICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXJQdHIgPSAwOwotICAgIEd0
a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXJQdHIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBpZiAoaW5uZXJCb3Jk
ZXJQdHIpIHsKLSAgICAgICAgaW5uZXJCb3JkZXIgPSAqaW5uZXJCb3JkZXJQdHI7Ci0gICAgICAg
IGd0a19ib3JkZXJfZnJlZShpbm5lckJvcmRlclB0cik7Ci0gICAgfQotCi0gICAgR3RrQm9yZGVy
IGJvcmRlcldpZHRoOwotICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVDb250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfYm9yZGVyKGJ1dHRvblN0eWxlQ29udGV4dCwgc3RhdGUsICZib3JkZXJXaWR0aCk7Ci0KLSAg
ICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOwotICAgIEludFJlY3QgaW5uZXJSZWN0KHJlY3QueCgp
ICsgaW5uZXJCb3JkZXIubGVmdCArIGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoLAotICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgaW5uZXJCb3JkZXIudG9wICsgYm9yZGVyV2lk
dGgudG9wICsgZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkg
LSBib3JkZXJXaWR0aC5sZWZ0IC0gYm9yZGVyV2lkdGgucmlnaHQgLSBpbm5lckJvcmRlci5sZWZ0
IC0gaW5uZXJCb3JkZXIucmlnaHQgLSAoMiAqIGZvY3VzV2lkdGgpLAotICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBib3JkZXJXaWR0aC50b3AgLSBib3JkZXJXaWR0aC5ib3R0
b20gLSBpbm5lckJvcmRlci50b3AgLSBpbm5lckJvcmRlci5ib3R0b20gLSAoMiAqIGZvY3VzV2lk
dGgpKTsKLQotICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBnaW50
IGNoaWxkRGlzcGxhY2VtZW50WDsKLSAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFk7Ci0g
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXgi
LCAmY2hpbGREaXNwbGFjZW1lbnRYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBpbm5lclJlY3QubW92
ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7Ci0gICAgfQotICAgIGlu
bmVyUmVjdC5zZXRXaWR0aChtYXgoMSwgaW5uZXJSZWN0LndpZHRoKCkpKTsKLSAgICBpbm5lclJl
Y3Quc2V0SGVpZ2h0KG1heCgxLCBpbm5lclJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKLQotICAgIC8vIFBhaW50IHRo
ZSBhcnJvdy4KLSAgICBHdGtTdHlsZUNvbnRleHQqIGFycm93U3R5bGVDb250ZXh0ID0gZ2V0U3R5
bGVDb250ZXh0KEdUS19UWVBFX0FSUk9XKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGFy
cm93U3R5bGVDb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
YXJyb3dTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ciKTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwot
Ci0gICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVM
TCk7Ci0KLSAgICBJbnRTaXplIGFycm93U2l6ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWln
aHQoKSk7Ci0gICAgRmxvYXRQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigp
KTsKLSAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgIGFycm93
UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsK
LQotICAgIC8vIEdUSysgYWN0dWFsbHkgZmV0Y2hlcyB0aGUgeGFsaWduIGFuZCB2YWxpZ24gdmFs
dWVzIGZyb20gdGhlIHdpZGdldCwgYnV0IHNpbmNlIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBhIHdp
ZGdldCBoZXJlLCB3ZSBhcmUganVzdCB1c2luZyB0aGUgZGVmYXVsdCB4YWxpZ24gYW5kIHZhbGln
biB2YWx1ZXMgb2YgMC41LgotICAgIGdpbnQgZXh0ZW50ID0gc3RkOjptaW4oYXJyb3dTaXplLndp
ZHRoKCksIGFycm93U2l6ZS5oZWlnaHQoKSkgKiBhcnJvd1NjYWxpbmc7Ci0gICAgYXJyb3dQb3Np
dGlvbi5tb3ZlKChhcnJvd1NpemUud2lkdGgoKSAtIGV4dGVudCkgLyAyLCAoYXJyb3dTaXplLmhl
aWdodCgpIC0gZXh0ZW50KSAvIDIpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGFycm93U3R5bGVDb250ZXh0LCBzdGF0ZSk7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhhcnJvd1N0
eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0LCBHX1BJLCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQ
b3NpdGlvbi55KCksIGV4dGVudCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGFy
cm93U3R5bGVDb250ZXh0KTsKLQotICAgIC8vIFBhaW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVk
LgotICAgIEd0a1N0eWxlQ29udGV4dCogc2VwYXJhdG9yU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShz
ZXBhcmF0b3JTdHlsZUNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVj
dGlvbihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgInNlcGFyYXRvciIpOwotCi0g
ICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7Ci0gICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBh
cmF0b3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRo
IiwgJnNlcGFyYXRvcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
KTsKLSAgICBpZiAod2lkZVNlcGFyYXRvcnMgJiYgIXNlcGFyYXRvcldpZHRoKSB7Ci0gICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0
ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlKTsKLSAgICBJbnRQb2ludCBzZXBhcmF0b3JQ
b3NpdGlvbihhcnJvd1Bvc2l0aW9uLngoKSwgaW5uZXJSZWN0LnkoKSk7Ci0gICAgaWYgKHdpZGVT
ZXBhcmF0b3JzKSB7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikK
LSAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLXNlcGFyYXRvcldpZHRoLCAwKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1Np
emUud2lkdGgoKSwgMCk7Ci0KLSAgICAgICAgZ3RrX3JlbmRlcl9mcmFtZShzZXBhcmF0b3JTdHls
ZUNvbnRleHQsIGNhaXJvQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0
b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXBhcmF0b3JXaWR0aCwgaW5uZXJSZWN0LmhlaWdodCgpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBHdGtCb3JkZXIgcGFkZGluZzsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSwgJnBhZGRpbmcpOwotICAg
ICAgICBHdGtCb3JkZXIgYm9yZGVyOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9y
ZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUsICZib3JkZXIpOwotCi0gICAgICAgIGlm
IChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgICAgIHNlcGFyYXRvclBv
c2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQgKyBib3JkZXIubGVmdCksIDApOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgp
LCAwKTsKLQotICAgICAgICBjYWlyb19zYXZlKGNhaXJvQ29udGV4dCk7Ci0KLSAgICAgICAgLy8g
QW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0aGUgc2VwYXJhdG9yIGJsZWVkaW5nIG91dHNpZGUgb2Yg
dGhlIHNwZWNpZmllZCByZWN0YW5nbGUgYmVjYXVzZSBvZiBzdWJwaXhlbCBwb3NpdGlvbmluZy4K
LSAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24u
eCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksIGJvcmRlci5sZWZ0LCBpbm5lclJlY3QuaGVpZ2h0
KCkpOwotICAgICAgICBjYWlyb19jbGlwKGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIGd0a19yZW5k
ZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBpbm5lclJl
Y3QubWF4WSgpKTsKLSAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOwotICAgIH0K
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKLQotICAgIGd1aW50
IGZsYWdzID0gMDsKLSAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJ
bmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoaXNGb2N1c2VkKHJlbmRl
ck9iamVjdCkgJiYgaXNFbmFibGVkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2Jvb2xlYW4g
aW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFk
ZGluZyIsICZmb2N1c1BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOwotICAgICAgICBpZiAoIWludGVyaW9yRm9jdXMpIHsKLSAgICAgICAgICAgIEludFJlY3Qg
Zm9jdXNSZWN0KHJlY3QpOwotICAgICAgICAgICAgZm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0
aCArIGZvY3VzUGFkKTsKLSAgICAgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lk
dGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXN0YXRpYyB2b2lkIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3NlcyhHdGtTdHlsZUNvbnRl
eHQqIGNvbnRleHQsIENvbnRyb2xQYXJ0IHBhcnQpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
YWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7Ci0gICAgaWYgKHBhcnQg
PT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0hPUklaT05UQUwpOwotICAgIGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVyVmVydGlj
YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVkVSVElDQUwp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChwYXJ0LCBwYXJ0ID09IFNsaWRlckhv
cml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVk
aWFWb2x1bWVTbGlkZXJQYXJ0KTsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4
dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7
Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJP
VUdIKTsKLQotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNv
bnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGNvbnRleHQsIEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFKTsKLQotICAgIGd0a19yZW5kZXJf
YmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAg
ICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLQotICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBnaW50IGZv
Y3VzV2lkdGgsIGZvY3VzUGFkOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5l
LXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7Ci0gICAgICAgIEludFJlY3QgZm9j
dXNSZWN0KHJlY3QpOwotICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9j
dXNQYWQpOwotICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBm
b2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0
LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRl
eHQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9
IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotICAgIEFTU0VSVChwYXJ0ID09
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLQotICAgIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Qt
PnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFz
c2VzKGNvbnRleHQsIHBhcnQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250
ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAg
ICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRl
ck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwot
ICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxh
Z3MpKTsKLQotICAgIGd0a19yZW5kZXJfc2xpZGVyKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgcGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0ID8gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwgOiBHVEtfT1JJ
RU5UQVRJT05fVkVSVElDQUwpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250
ZXh0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17
Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0jaWYgRU5BQkxF
KFZJREVPKQotICAgIGlmIChwYXJ0ID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7Ci0gICAgICAg
IGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKHN0eWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgZ2ludCBzbGlkZXJXaWR0aCwgc2xpZGVyTGVuZ3RoOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdpZHRoIiwgJnNsaWRl
cldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLWxlbmd0aCIs
ICZzbGlkZXJMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
ICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBh
cnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
c2xpZGVyTGVuZ3RoLCBGaXhlZCkpOwotfQotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQp
Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQcm9ncmVzcygpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4
dChHVEtfVFlQRV9QUk9HUkVTU19CQVIpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29u
dGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX1RST1VHSCk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwg
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFt
ZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9zYXZlKGNvbnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0
LCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwotCi0KLSAgICBHdGtCb3JkZXIgcGFkZGlu
ZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwotICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0
KHJlY3QueCgpICsgcGFkZGluZy5sZWZ0LCByZWN0LnkoKSArIHBhZGRpbmcudG9wLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIChwYWRkaW5nLmxlZnQgKyBwYWRkaW5n
LnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC0gKHBhZGRp
bmcudG9wICsgcGFkZGluZy5ib3R0b20pKTsKLSAgICBwcm9ncmVzc1JlY3QgPSBSZW5kZXJUaGVt
ZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KHJlbmRlck9iamVjdCwgcHJvZ3Jlc3NSZWN0KTsK
LQotICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgZ3RrX3JlbmRlcl9h
Y3Rpdml0eShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHByb2dyZXNzUmVjdC53aWR0
aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVz
dG9yZShjb250ZXh0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGdp
bnQgc3BpbkJ1dHRvbkFycm93U2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
Y29uc3QgUGFuZ29Gb250RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbjsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXQoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICJm
b250IiwgJmZvbnREZXNjcmlwdGlvbiwgTlVMTCk7Ci0gICAgZ2ludCBmb250U2l6ZSA9IHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0aW9uKTsKLSAgICBnaW50IGFy
cm93U2l6ZSA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dT
aXplKTsKLQotICAgIHJldHVybiBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAyOyAvLyBGb3JjZSBl
dmVuLgotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsK
LSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
U1BJTl9CVVRUT04pOwotCi0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCks
ICZwYWRkaW5nKTsKLQotICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJvd1NpemUoY29udGV4
dCkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OwotICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0
aCwgRml4ZWQpKTsKLX0KLQotc3RhdGljIHZvaWQgcGFpbnRTcGluQXJyb3dCdXR0b24oUmVuZGVy
VGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCwgR3RrQXJyb3dUeXBlIGFycm93VHlwZSkKLXsKLSAgICBBU1NFUlQoYXJyb3dUeXBlID09IEdU
S19BUlJPV19VUCB8fCBhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04pOwotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0KLSAgICBHdGtUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9kaXJlY3Rpb24oY29udGV4dCk7
Ci0gICAgZ3VpbnQgc3RhdGUgPSBzdGF0aWNfY2FzdDxndWludD4oZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0YXRlKGNvbnRleHQpKTsKLSAgICBpZiAoIShzdGF0ZSAmIEdUS19TVEFURV9GTEFHX0lO
U0VOU0lUSVZFKSkgewotICAgICAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3Qp
KSB7Ci0gICAgICAgICAgICBpZiAoKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVAgJiYgdGhlbWUt
PmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgICAgICAg
ICB8fCAoYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOICYmICF0aGVtZS0+aXNTcGluVXBCdXR0
b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKSkKLSAgICAgICAgICAgICAgICBzdGF0ZSB8PSBH
VEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJl
ZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgICAgICBpZiAoKGFycm93VHlwZSA9PSBHVEtfQVJS
T1dfVVAgJiYgdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVuZGVyT2JqZWN0KSkK
LSAgICAgICAgICAgICAgICB8fCAoYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOICYmICF0aGVt
ZS0+aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKSkKLSAgICAgICAgICAg
ICAgICBzdGF0ZSB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICAgICAgfQotICAgIH0K
LSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oc3RhdGUpKTsKLQotICAgIC8vIFBhaW50IGJ1dHRvbi4KLSAgICBJbnRSZWN0
IGJ1dHRvblJlY3QocmVjdCk7Ci0gICAgZ3VpbnQganVuY3Rpb24gPSBndGtfc3R5bGVfY29udGV4
dF9nZXRfanVuY3Rpb25fc2lkZXMoY29udGV4dCk7Ci0gICAgaWYgKGFycm93VHlwZSA9PSBHVEtf
QVJST1dfVVApCi0gICAgICAgIGp1bmN0aW9uIHw9IEdUS19KVU5DVElPTl9CT1RUT007Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGp1bmN0aW9uIHw9IEdUS19KVU5DVElPTl9UT1A7Ci0gICAgICAgIGJ1
dHRvblJlY3QubW92ZSgwLCByZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgfQotICAgIGJ1dHRvblJl
Y3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfanVuY3Rpb25fc2lkZXMoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrSnVuY3Rpb25TaWRlcz4o
anVuY3Rpb24pKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0
b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAg
ICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0
LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwotCi0gICAgLy8gUGFpbnQgYXJyb3cgY2Vu
dGVyZWQgaW5zaWRlIGJ1dHRvbi4KLSAgICAvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZ3Rrc3Bp
bmJ1dHRvbi5jIGNvZGUuCi0gICAgSW50UmVjdCBhcnJvd1JlY3Q7Ci0gICAgZ2RvdWJsZSBhbmds
ZTsKLSAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkgewotICAgICAgICBhbmdsZSA9
IDA7Ci0gICAgICAgIGFycm93UmVjdC5zZXRZKHJlY3QueSgpKTsKLSAgICAgICAgYXJyb3dSZWN0
LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gMiAtIDIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFuZ2xlID0gR19QSTsKLSAgICAgICAgYXJyb3dSZWN0LnNldFkocmVjdC55KCkgKyBidXR0b25S
ZWN0LnkoKSk7Ci0gICAgICAgIGFycm93UmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIGFy
cm93UmVjdC55KCkgLSAyKTsKLSAgICB9Ci0gICAgYXJyb3dSZWN0LnNldFdpZHRoKHJlY3Qud2lk
dGgoKSAtIDMpOwotICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKLSAgICAg
ICAgYXJyb3dSZWN0LnNldFgocmVjdC54KCkgKyAxKTsKLSAgICBlbHNlCi0gICAgICAgIGFycm93
UmVjdC5zZXRYKHJlY3QueCgpICsgMik7Ci0KLSAgICBnaW50IHdpZHRoID0gYXJyb3dSZWN0Lndp
ZHRoKCkgLyAyOwotICAgIHdpZHRoIC09IHdpZHRoICUgMiAtIDE7IC8vIEZvcmNlIG9kZC4KLSAg
ICBnaW50IGhlaWdodCA9ICh3aWR0aCArIDEpIC8gMjsKLQotICAgIGFycm93UmVjdC5tb3ZlKChh
cnJvd1JlY3Qud2lkdGgoKSAtIHdpZHRoKSAvIDIsIChhcnJvd1JlY3QuaGVpZ2h0KCkgLSBoZWln
aHQpIC8gMik7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhjb250ZXh0LCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFuZ2xlLCBhcnJvd1JlY3QueCgpLCBhcnJvd1Jl
Y3QueSgpLCB3aWR0aCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KGNvbnRleHQpOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2Fz
dDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIGRpcmVjdGlvbik7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKCFpc0Vu
YWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQot
ICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNlIGlm
IChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZM
QUdfRk9DVVNFRDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9y
ZW1vdmVfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKLQotICAgIHBhaW50
U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCBy
ZWN0LCBHVEtfQVJST1dfVVApOwotICAgIHBhaW50U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRl
eHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1dfRE9XTik7Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlw
ZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQg
c3RhdGUsIGdpbnQgaWNvblNpemUpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0g
Z2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBn
dGtfc3R5bGVfY29udGV4dF9sb29rdXBfaWNvbl9zZXQoY29udGV4dCwgaWNvbk5hbWUpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd1aW50IGZsYWdzID0g
MDsKLSAgICBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX1BSRUxJR0hUKQotICAgICAgICBmbGFncyB8
PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBlbHNlIGlmIChzdGF0ZSA9PSBHVEtfU1RB
VEVfSU5TRU5TSVRJVkUpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lU
SVZFOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2Rp
cmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihkaXJlY3Rpb24p
KTsKLSAgICBHZGtQaXhidWYqIGljb24gPSBndGtfaWNvbl9zZXRfcmVuZGVyX2ljb25fcGl4YnVm
KGljb25TZXQsIGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a0ljb25TaXplPihpY29uU2l6ZSkpOwot
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIHJldHVybiBh
ZG9wdEdSZWYoaWNvbik7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JB
Q29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5
bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtS
R0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRo
ZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QK
LXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
YmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RB
VEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7
Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSks
IEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2Rr
UkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29s
b3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Ci0gICAg
cmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2Rr
UkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RF
RCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVfVklF
VyksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdk
a1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9y
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOwot
ICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjppbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JH
QkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2Rr
UkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJU
aGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0gICAgR2RrUkdC
QSBnZGtSR0JBQ29sb3I7Ci0KLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAgICBjYXNlIENT
U1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdz
PigwKSwgJmdka1JHQkFDb2xvcik7Ci0gICAgICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
Y29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oMCksICZnZGtSR0JBQ29sb3IpOwotICAgICAgICByZXR1cm4gZ2RrUkdCQUNvbG9y
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3Io
Y3NzVmFsdWVJZCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5M
b29wR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwZjM1Y2E2NmQyMjBi
NDBkNGY2M2Y3ZDlmNmM5ODQyNzU3NzcxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0K
LSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SdW5Mb29wOjpSdW5Mb29w
KCkKLXsKLSAgICAvLyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgZG9lc24ndCBhZGQgYW4gZXh0
cmEgcmVmZXJlbmNlLgotICAgIG1fcnVuTG9vcENvbnRleHQgPSBpc01haW5UaHJlYWQoKSA/IGdf
bWFpbl9jb250ZXh0X2RlZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7
Ci0gICAgQVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOwotICAgIEdSZWZQdHI8R01haW5Mb29wPiBp
bm5lcm1vc3RMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX3J1bkxvb3BDb250ZXh0
LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsKLSAgICBtX3J1bkxv
b3BNYWluTG9vcHMuYXBwZW5kKGlubmVybW9zdExvb3ApOwotfQotCi1SdW5Mb29wOjp+UnVuTG9v
cCgpCi17Ci0gICAgZm9yIChpbnQgaSA9IG1fcnVuTG9vcE1haW5Mb29wcy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ydW5M
b29wTWFpbkxvb3BzW2ldLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBn
X21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSk7Ci0gICAgfQotfQot
Ci12b2lkIFJ1bkxvb3A6OnJ1bigpCi17Ci0gICAgUnVuTG9vcCogbWFpblJ1bkxvb3AgPSBSdW5M
b29wOjpjdXJyZW50KCk7Ci0gICAgR01haW5Mb29wKiBpbm5lcm1vc3RMb29wID0gbWFpblJ1bkxv
b3AtPmlubmVybW9zdExvb3AoKTsKLSAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmcoaW5u
ZXJtb3N0TG9vcCkpIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExvb3ApOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBuZXN0ZWQg
bG9vcCBpZiB0aGUgaW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgotICAgIEdNYWlu
TG9vcCogbmVzdGVkTWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcoMCwgRkFMU0UpOwotICAgIG1h
aW5SdW5Mb29wLT5wdXNoTmVzdGVkTWFpbkxvb3AobmVzdGVkTWFpbkxvb3ApOwotICAgIGdfbWFp
bl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7Ci0gICAgbWFpblJ1bkxvb3AtPnBvcE5lc3RlZE1h
aW5Mb29wKCk7Ci19Ci0KLUdNYWluTG9vcCogUnVuTG9vcDo6aW5uZXJtb3N0TG9vcCgpCi17Ci0g
ICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KLSAg
ICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX3J1
bkxvb3BNYWluTG9vcHNbMF0uZ2V0KCk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6cHVzaE5lc3RlZE1h
aW5Mb29wKEdNYWluTG9vcCogbmVzdGVkTG9vcCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1h
aW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFp
bkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVuZChhZG9wdEdS
ZWYobmVzdGVkTG9vcCkpOwotfQotCi12b2lkIFJ1bkxvb3A6OnBvcE5lc3RlZE1haW5Mb29wKCkK
LXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJl
LgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgbV9ydW5M
b29wTWFpbkxvb3BzLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBSdW5Mb29wOjpzdG9wKCkKLXsK
LSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgot
ICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgR1JlZlB0cjxH
TWFpbkxvb3A+IGxhc3RNYWluTG9vcCA9IG1fcnVuTG9vcE1haW5Mb29wcy5sYXN0KCk7Ci0gICAg
aWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgpKSkKLSAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOwotfQotCi1nYm9vbGVhbiBSdW5M
b29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKLXsKLSAgICBydW5Mb29wLT5wZXJmb3Jt
V29yaygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBSdW5Mb29wOjp3YWtlVXAoKQot
ewotICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2Vf
bmV3KCkpOwotICAgIGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0KCksIEdfUFJJT1JJ
VFlfREVGQVVMVCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJjZS5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29yayksIHRoaXMsIDAp
OwotICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9vcENvbnRleHQuZ2V0
KCkpOwotCi0gICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENvbnRleHQuZ2V0KCkp
OwotfQotCi1SdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wKiBydW5Mb29wKQot
ICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCi0gICAgLCBtX3RpbWVyU291cmNlKDApCi17Ci19Ci0K
LVJ1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCi17Ci0gICAgc3RvcCgpOwotfQotCi12
b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6Y2xlYXJUaW1lclNvdXJjZSgpCi17Ci0gICAgbV90aW1l
clNvdXJjZSA9IDA7Ci19Ci0KLWdib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJl
ZENhbGxiYWNrKFJ1bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCi17Ci0gICAgR1NvdXJjZSogY3Vy
cmVudFRpbWVyU291cmNlID0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCBp
c1JlcGVhdGluZyA9IHRpbWVyLT5pc1JlcGVhdGluZygpOwotICAgIC8vIFRoaXMgY2FuIGNoYW5n
ZSB0aGUgdGltZXJTb3VyY2UgYnkgc3RhcnRpbmcgYSBuZXcgdGltZXIgd2l0aGluIHRoZSBjYWxs
YmFjay4KLSAgICB0aW1lci0+ZmlyZWQoKTsKLSAgICBpZiAoIWlzUmVwZWF0aW5nICYmIGN1cnJl
bnRUaW1lclNvdXJjZSA9PSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKSkKLSAgICAgICAgdGlt
ZXItPmNsZWFyVGltZXJTb3VyY2UoKTsKLSAgICByZXR1cm4gaXNSZXBlYXRpbmc7Ci19Ci0KLXZv
aWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJl
cGVhdCkKLXsKLSAgICBpZiAobV90aW1lclNvdXJjZSkKLSAgICAgICAgc3RvcCgpOwotCi0gICAg
bV90aW1lclNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2Fz
dDxndWludD4oZmlyZUludGVydmFsICogMTAwMCkpKTsKLSAgICBtX2lzUmVwZWF0aW5nID0gcmVw
ZWF0OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLmdldCgpLCByZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVk
Q2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lclNvdXJjZS5n
ZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBSdW5M
b29wOjpUaW1lckJhc2U6OnN0b3AoKQotewotICAgIGlmICghbV90aW1lclNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNlLmdldCgpKTsK
LSAgICBjbGVhclRpbWVyU291cmNlKCk7Ci19Ci0KLWJvb2wgUnVuTG9vcDo6VGltZXJCYXNlOjpp
c0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGltZXJTb3VyY2U7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxWaWV3R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxW
aWV3R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwNWE1N2I3ZGUyOTRi
NjNjODZmZDUyZTc0OGYwMGY5MTIzMjA4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2Nyb2xsVmlldy5oIgotCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIk1h
aW5GcmFtZVNjcm9sbGJhckd0ay5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBib29sIHNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcihjb25z
dCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQotewotICAgIC8vIEludGVyaW9yIGZyYW1lIFNjcm9s
bFZpZXdzIG5ldmVyIGhhdmUgTWFpbkZyYW1lU2Nyb2xsYmFycy4KLSAgICBpZiAoc2Nyb2xsVmll
dy0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHdlIGRvbid0
IGhhdmUgYSBob3N0IHdpbmRvdyBvciBhIGNvbnRhaW5pbmcgd2lkZ2V0IChhbGEgV2ViS2l0Miku
Ci0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHNjcm9sbFZpZXctPmhvc3RXaW5kb3coKTsK
LSAgICBpZiAoIWhvc3RXaW5kb3cgfHwgIWhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnYm9vbGVhbiBzZWxmU2Nyb2xsaW5nID0g
RkFMU0U7Ci0gICAgZ19vYmplY3RfZ2V0KGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVudCgp
LCAic2VsZi1zY3JvbGxpbmciLCAmc2VsZlNjcm9sbGluZywgTlVMTCk7Ci0gICAgcmV0dXJuICFz
ZWxmU2Nyb2xsaW5nOwotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsVmlldzo6Y3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIGlm
IChzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIodGhpcykpCi0gICAgICAgIHJldHVybiBN
YWluRnJhbWVTY3JvbGxiYXJHdGs6OmNyZWF0ZSh0aGlzLCBvcmllbnRhdGlvbik7Ci0gICAgcmV0
dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBS
ZWd1bGFyU2Nyb2xsYmFyKTsKLX0KLQotSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVu
dFJlY3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1
c2lvbikgY29uc3QKLXsKLSAgICBib29sIGluY2x1ZGVTY3JvbGxiYXJzID0gc2Nyb2xsYmFySW5j
bHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzOwotCi0gICAgLy8gSWYgd2UgYXJlIGFuIGludGVy
aW9yIGZyYW1lIHNjcm9sbGJhciBvciBhcmUgaW4gc29tZSBzb3J0IG9mIHRyYW5zaXRpb24KLSAg
ICAvLyBzdGF0ZSwganVzdCBjYWxjdWxhdGUgb3VyIHNpemUgYmFzZWQgb24gd2hhdCB0aGUgR1RL
KyB0aGVtZSBzYXlzIHRoZQotICAgIC8vIHNjcm9sbGJhciB3aWR0aCBzaG91bGQgYmUuCi0gICAg
aWYgKCFzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIodGhpcykpIHsKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKG1heCgwLCB3aWR0
aCgpIC0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gdmVydGlj
YWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXgoMCwgaGVpZ2h0KCkgLSAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFpbmNsdWRl
U2Nyb2xsYmFycyA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwKSkpKTsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBkb24ndCBoYXZlIGEgcGFyZW50LCBzbyB3ZSBhcmUgdGhlIG1haW4g
ZnJhbWUgYW5kIHRodXMgaGF2ZQotICAgIC8vIGEgcGFyZW50IHdpZGdldCB3aGljaCB3ZSBjYW4g
dXNlIHRvIG1lYXN1cmUgdGhlIHZpc2libGUgcmVnaW9uLgotICAgIEd0a1dpZGdldCogbWVhc3Vy
ZWRXaWRnZXQgPSBob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIEd0a1dp
ZGdldCogcGFyZW50V2lkZ2V0ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KG1lYXN1cmVkV2lkZ2V0
KTsKLQotICAgIC8vIFdlIG1heSBub3QgYmUgaW4gYSB3aWRnZXQgdGhhdCBkaXNwbGF5cyBzY3Jv
bGxiYXJzLCBidXQgd2UgbWF5Ci0gICAgLy8gaGF2ZSBvdGhlciBraW5kcyBvZiBkZWNvcmF0aW9u
IHRoYXQgbWFrZSB1cyBzbWFsbGVyLgotICAgIGlmIChwYXJlbnRXaWRnZXQgJiYgaW5jbHVkZVNj
cm9sbGJhcnMpCi0gICAgICAgIG1lYXN1cmVkV2lkZ2V0ID0gcGFyZW50V2lkZ2V0OwotCi0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24o
bWVhc3VyZWRXaWRnZXQsICZhbGxvY2F0aW9uKTsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2lu
dChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSksCi0gICAg
ICAgICAgICAgICAgICAgSW50U2l6ZShhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdo
dCkpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1v
ZGUgaG9yaXpvbnRhbE1vZGUsIFNjcm9sbGJhck1vZGUgdmVydGljYWxNb2RlLCBib29sIGhvcml6
b250YWxMb2NrLCBib29sIHZlcnRpY2FsTG9jaykKLXsKLSAgICAvLyBGSVhNRTogUmVzdHJ1Y3R1
cmUgdGhlIFNjcm9sbFZpZXcgYWJzdHJhY3Rpb24gc28gdGhhdCB3ZSBkbyBub3QgaGF2ZSB0bwot
ICAgIC8vIGNvcHkgdGhpcyB2ZXJiYXRpbSBmcm9tIFNjcm9sbFZpZXcuY3BwLiBVbnRpbCB0aGVu
LCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoaXMKLSAgICAvLyBpcyBrZXB0IGluIHN5bmMuCi0gICAg
Ym9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOwotCi0gICAgaWYgKGhvcml6b250YWxNb2RlICE9IGhv
cml6b250YWxTY3JvbGxiYXJNb2RlKCkgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhckxvY2spIHsK
LSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IGhvcml6b250YWxNb2RlOwotICAg
ICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRpY2FsTW9kZSAh
PSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKSAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhckxvY2spIHsK
LSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSB2ZXJ0aWNhbE1vZGU7Ci0gICAgICAg
IG5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaG9yaXpvbnRhbExvY2spCi0g
ICAgICAgIHNldEhvcml6b250YWxTY3JvbGxiYXJMb2NrKCk7Ci0KLSAgICBpZiAodmVydGljYWxM
b2NrKQotICAgICAgICBzZXRWZXJ0aWNhbFNjcm9sbGJhckxvY2soKTsKLQotICAgIGlmIChuZWVk
c1VwZGF0ZSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7Ci0KLSAg
ICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlcG9ydCBwb2xpY3kgY2hhbmdlcyBvbiBTY3JvbGxWaWV3
J3MgdW5sZXNzIHRoaXMKLSAgICAvLyBvbmUgaGFzIGFuIGFkanVzdG1lbnQgYXR0YWNoZWQgYW5k
IGl0IGlzIGEgbWFpbiBmcmFtZS4KLSAgICBpZiAocGFyZW50KCkgfHwgIWlzRnJhbWVWaWV3KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZvciBmcmFtZXMgdGhhdCBkbyBoYXZlIGFkanVz
dG1lbnRzIGF0dGFjaGVkLCB3ZSB3YW50IHRvIHJlcG9ydAotICAgIC8vIHBvbGljeSBjaGFuZ2Vz
LCBzbyB0aGF0IHRoZXkgbWF5IGJlIGFwcGxpZWQgdG8gdGhlIHdpZGdldCB0bwotICAgIC8vIHdo
aWNoIHRoZSBXZWJWaWV3J3MgY29udGFpbmVyIChlLmcuIEd0a1Njcm9sbGVkV2luZG93KS4KLSAg
ICBpZiAoaG9zdFdpbmRvdygpKQotICAgICAgICBob3N0V2luZG93KCktPnNjcm9sbGJhcnNNb2Rl
RGlkQ2hhbmdlKCk7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0
ZTNmZDc2ZjdmZmM1MjMwZmM4NDdmZjlmZWNhZjQzZGM0NmZhMDUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgotCi0jaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLSNpbmNsdWRl
ICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPiogZ1Njcm9sbGJh
cnM7Ci0KLVNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQotewot
ICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZUd0ayB0aGVtZTsKLSAgICByZXR1cm4gJnRoZW1lOwot
fQotCi1TY3JvbGxiYXJUaGVtZUd0azo6flNjcm9sbGJhclRoZW1lR3RrKCkKLXsKLX0KLQotdm9p
ZCBTY3JvbGxiYXJUaGVtZUd0azo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoIWdTY3JvbGxiYXJzKQotICAgICAgICBnU2Nyb2xs
YmFycyA9IG5ldyBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj47Ci0gICAgZ1Njcm9sbGJh
cnMtPmFkZChzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1bnJlZ2lz
dGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgZ1Nj
cm9sbGJhcnMtPnJlbW92ZShzY3JvbGxiYXIpOwotICAgIGlmIChnU2Nyb2xsYmFycy0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIGRlbGV0ZSBnU2Nyb2xsYmFyczsKLSAgICAgICAgZ1Njcm9sbGJhcnMg
PSAwOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFy
c0ZyYW1lVGhpY2tuZXNzKCkKLXsKLSAgICBpZiAoIWdTY3JvbGxiYXJzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlvciBmcmFt
ZSBzY3JvbGxiYXIgd2lkZ2V0LiBUaGUKLSAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3Jv
bGxiYXIgdGhlbSBjb2RlIGlzbid0IHlldCBzbWFydCBlbm91Z2ggdG8gZ2V0Ci0gICAgLy8gdGhp
cyBpbmZvcm1hdGlvbiB3aGVuIGl0IHBhaW50cy4KLSAgICBIYXNoU2V0PFNjcm9sbGJhclRoZW1l
Q2xpZW50Kj46Oml0ZXJhdG9yIGVuZCA9IGdTY3JvbGxiYXJzLT5lbmQoKTsKLSAgICBmb3IgKEhh
c2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPjo6aXRlcmF0b3IgaXQgPSBnU2Nyb2xsYmFycy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIgPSAoKml0KTsKLQotICAgICAgICAvLyBUb3AtbGV2ZWwgc2Nyb2xsYmFyIGku
ZS4gc2Nyb2xsYmFycyB3aG8gaGF2ZSBhIHBhcmVudCBTY3JvbGxWaWV3Ci0gICAgICAgIC8vIHdp
dGggbm8gcGFyZW50IGFyZSBuYXRpdmUsIGFuZCB0aHVzIGRvIG5vdCBuZWVkIHRvIGJlIHJlc2l6
ZWQuCi0gICAgICAgIGlmICghc2Nyb2xsYmFyLT5wYXJlbnQoKSB8fCAhc2Nyb2xsYmFyLT5wYXJl
bnQoKS0+cGFyZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW50IHRoaWNr
bmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAg
ICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIp
Ci0gICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIHNjcm9sbGJh
ci0+cGFyZW50KCktPmhlaWdodCgpIC0gdGhpY2tuZXNzLCBzY3JvbGxiYXItPndpZHRoKCksIHRo
aWNrbmVzcykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1l
UmVjdChJbnRSZWN0KHNjcm9sbGJhci0+cGFyZW50KCktPndpZHRoKCkgLSB0aGlja25lc3MsIDAs
IHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwotICAgIH0KLX0KLQotYm9vbCBTY3Jv
bGxiYXJUaGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikK
LXsKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0
aW1pemF0aW9uIHRvIHNlZSBpZgotICAgIC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tp
cHBlZC4gIFdlIGRvbid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KLSAgICByZXR1cm4gdGh1bWJM
ZW5ndGgoc2Nyb2xsYmFyKSA+IDA7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJh
Y2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBh
cnQgcGFydCwgYm9vbCkKLXsKLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAh
bV9oYXNCYWNrQnV0dG9uRW5kUGFydCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBp
ZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBh
cnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpbnQgeCA9IHNjcm9sbGJhci0+
eCgpICsgbV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsg
bV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9s
bGJhcik7Ci0gICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoeCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgIC8v
IEJhY2tCdXR0b25FbmRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQotICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRl
cldpZHRoIC0gKDIgKiBzaXplLndpZHRoKCkpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwotCi0gICAgLy8gVmVydGljYWxTY3JvbGxiYXIgYWx0ZXJuYXRlIGJ1dHRvbgotICAgIHJl
dHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIG1f
dHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0
dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBh
cnQsIGJvb2wpCi17Ci0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAh
bV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwot
ICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0
b25FbmRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50U2l6ZSBzaXpl
ID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci0+
eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1
dHRvbkVuZFBhcnQpCi0gICAgICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSAr
IHNjcm9sbGJhci0+d2lkdGgoKSAtIHNpemUud2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgs
IHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
c2Nyb2xsYmFyLT54KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoICsgc2l6ZS53aWR0aCgpLCB5LCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIC8vIFZlcnRpY2FsU2Ny
b2xsYmFyCi0gICAgaW50IHggPSBzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7
Ci0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIHJldHVybiBJ
bnRSZWN0KHgsIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVp
Z2h0KCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OwotCi0gICAgLy8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAg
ICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGgg
KyBzaXplLmhlaWdodCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotfQotCi1JbnRS
ZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhciwgYm9vbCkKLXsKLSAgICAvLyBUaGUgcGFkZGluZyBhbG9uZyB0aGUgdGh1bWIgbW92
ZW1lbnQgYXhpcyBpbmNsdWRlcyB0aGUgdHJvdWdoIGJvcmRlcgotICAgIC8vIHBsdXMgdGhlIHNp
emUgb2Ygc3RlcHBlciBzcGFjaW5nICh0aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlcHBlciBhbmQK
LSAgICAvLyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHRodW1iIHN0b3BzKS4gVGhlcmUgaXMgb2Z0ZW4g
bm8gc3RlcHBlciBzcGFjaW5nLgotICAgIGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV90cm91
Z2hCb3JkZXJXaWR0aCArIG1fc3RlcHBlclNwYWNpbmc7Ci0KLSAgICAvLyBUaGUgZmF0bmVzcyBv
ZiB0aGUgc2Nyb2xsYmFyIG9uIHRoZSBub24tbW92ZW1lbnQgYXhpcy4KLSAgICBpbnQgdGhpY2tu
ZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0KLSAg
ICBpbnQgc3RhcnRCdXR0b25zT2Zmc2V0ID0gMDsKLSAgICBpbnQgYnV0dG9uc1dpZHRoID0gMDsK
LSAgICBpZiAobV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgIHN0YXJ0QnV0
dG9uc09mZnNldCArPSBtX3N0ZXBwZXJTaXplOwotICAgICAgICBidXR0b25zV2lkdGggKz0gbV9z
dGVwcGVyU2l6ZTsKLSAgICB9Ci0gICAgaWYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkgewot
ICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9zdGVwcGVyU2l6ZTsKLSAgICAgICAgYnV0
dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7Ci0gICAgfQotICAgIGlmIChtX2hhc0JhY2tCdXR0
b25FbmRQYXJ0KQotICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKLSAgICBp
ZiAobV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1f
c3RlcHBlclNpemU7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMg
c21hbGxlciB0aGFuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlCi0gICAgICAgIC8vIHR3byBidXR0
b25zLCB0aGUgdHJhY2sgZGlzYXBwZWFycy4KLSAgICAgICAgaWYgKHNjcm9sbGJhci0+d2lkdGgo
KSA8IDIgKiB0aGlja25lc3MpCi0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgICAg
ICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIG1vdmVtZW50QXhpc1BhZGRpbmcgKyBz
dGFydEJ1dHRvbnNPZmZzZXQsIHNjcm9sbGJhci0+eSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxiYXItPndpZHRoKCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9u
c1dpZHRoLCB0aGlja25lc3MpOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxiYXItPmhlaWdodCgp
IDwgMiAqIHRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4g
SW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkgKyBtb3ZlbWVudEF4aXNQYWRk
aW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywg
c2Nyb2xsYmFyLT5oZWlnaHQoKSAtICgyICogbW92ZW1lbnRBeGlzUGFkZGluZykgLSBidXR0b25z
V2lkdGgpOwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRy
YWNrUmVjdCkKLXsKLSAgICBJbnRSZWN0IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRv
VHJhY2tQaWVjZXMoc2Nyb2xsYmFyLCB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KTsKLSAgICBpbnQg
dGh1bWJQb3MgPSB0aHVtYlBvc2l0aW9uKHNjcm9sbGJhcik7Ci0gICAgaWYgKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50
UmVjdCh0cmFja1JlY3QueCgpICsgdGh1bWJQb3MsIHRyYWNrUmVjdC55KCkgKyAodHJhY2tSZWN0
LmhlaWdodCgpIC0gbV90aHVtYkZhdG5lc3MpIC8gMiwgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSwg
bV90aHVtYkZhdG5lc3MpOyAKLQotICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFyCi0gICAgcmV0dXJu
IEludFJlY3QodHJhY2tSZWN0LngoKSArICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fdGh1bWJGYXRu
ZXNzKSAvIDIsIHRyYWNrUmVjdC55KCkgKyB0aHVtYlBvcywgbV90aHVtYkZhdG5lc3MsIHRodW1i
TGVuZ3RoKHNjcm9sbGJhcikpOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3ND
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIENyZWF0ZSB0aGUgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1h
Z2VSZWN0Ci0gICAgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7
Ci0KLSAgICBJbnRSZWN0IGJhY2tCdXR0b25TdGFydFBhaW50UmVjdDsKLSAgICBJbnRSZWN0IGJh
Y2tCdXR0b25FbmRQYWludFJlY3Q7Ci0gICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uU3RhcnRQYWlu
dFJlY3Q7Ci0gICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0OwotICAgIGlmICho
YXNCdXR0b25zKHNjcm9sbGJhcikpIHsKLSAgICAgICAgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0
ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsK
LSAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhiYWNrQnV0dG9uU3RhcnRQYWludFJl
Y3QpKQotICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBCYWNrQnV0dG9uU3RhcnRQYXJ0OwotICAg
ICAgICBiYWNrQnV0dG9uRW5kUGFpbnRSZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBC
YWNrQnV0dG9uRW5kUGFydCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2Vj
dHMoYmFja0J1dHRvbkVuZFBhaW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJh
Y2tCdXR0b25FbmRQYXJ0OwotICAgICAgICBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QgPSBm
b3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQsIHRydWUp
OwotICAgICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25TdGFydFBh
aW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25TdGFydFBh
cnQ7Ci0gICAgICAgIGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVj
dChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0LCB0cnVlKTsKLSAgICAgICAgaWYgKGRh
bWFnZVJlY3QuaW50ZXJzZWN0cyhmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0KSkKLSAgICAgICAg
ICAgIHNjcm9sbE1hc2sgfD0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0gICAgfQotCi0gICAgSW50
UmVjdCB0cmFja1BhaW50UmVjdCA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIHRydWUpOwotICAgIGlm
IChkYW1hZ2VSZWN0LmludGVyc2VjdHModHJhY2tQYWludFJlY3QpKQotICAgICAgICBzY3JvbGxN
YXNrIHw9IFRyYWNrQkdQYXJ0OwotCi0gICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycyAmJiAo
c2Nyb2xsTWFzayAmIEJhY2tCdXR0b25TdGFydFBhcnQKLSAgICAgICAgICAgIHx8IHNjcm9sbE1h
c2sgJiBCYWNrQnV0dG9uRW5kUGFydAotICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndh
cmRCdXR0b25TdGFydFBhcnQKLSAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0
dG9uRW5kUGFydCkpCi0gICAgICAgIHNjcm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7Ci0KLSAgICBi
b29sIHRodW1iUHJlc2VudCA9IGhhc1RodW1iKHNjcm9sbGJhcik7Ci0gICAgSW50UmVjdCBjdXJy
ZW50VGh1bWJSZWN0OwotICAgIGlmICh0aHVtYlByZXNlbnQpIHsKLSAgICAgICAgSW50UmVjdCB0
cmFjayA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIGZhbHNlKTsKLSAgICAgICAgY3VycmVudFRodW1i
UmVjdCA9IHRodW1iUmVjdChzY3JvbGxiYXIsIHRyYWNrKTsKLSAgICAgICAgaWYgKGRhbWFnZVJl
Y3QuaW50ZXJzZWN0cyhjdXJyZW50VGh1bWJSZWN0KSkKLSAgICAgICAgICAgIHNjcm9sbE1hc2sg
fD0gVGh1bWJQYXJ0OwotICAgIH0KLQotICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxC
dXR0b25zID0gQmFja0J1dHRvblN0YXJ0UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dCB8IEZvcndhcmRCdXR0b25FbmRQYXJ0OwotICAgIGlmIChzY3JvbGxNYXNrICYgVHJhY2tCR1Bh
cnQgfHwgc2Nyb2xsTWFzayAmIFRodW1iUGFydCB8fCBzY3JvbGxNYXNrICYgYWxsQnV0dG9ucykK
LSAgICAgICAgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xs
YmFyKTsKLSAgICAgICAgcGFpbnRUcmFja0JhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0LCBzY3Jv
bGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsKLQotICAgIC8vIFBhaW50IHRoZSBiYWNrIGFuZCBmb3J3
YXJkIGJ1dHRvbnMuCi0gICAgaWYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQYXJ0KQot
ICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRv
blN0YXJ0UGFpbnRSZWN0LCBCYWNrQnV0dG9uU3RhcnRQYXJ0KTsKLSAgICBpZiAoc2Nyb2xsTWFz
ayAmIEJhY2tCdXR0b25FbmRQYXJ0KQotICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRl
eHQsIHNjcm9sbGJhciwgYmFja0J1dHRvbkVuZFBhaW50UmVjdCwgQmFja0J1dHRvbkVuZFBhcnQp
OwotICAgIGlmIChzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKLSAgICAgICAg
cGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRCdXR0b25TdGFy
dFBhaW50UmVjdCwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCk7Ci0gICAgaWYgKHNjcm9sbE1hc2sg
JiBGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250
ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QsIEZvcndhcmRCdXR0b25F
bmRQYXJ0KTsKLQotICAgIC8vIFBhaW50IHRoZSB0aHVtYi4KLSAgICBpZiAoc2Nyb2xsTWFzayAm
IFRodW1iUGFydCkKLSAgICAgICAgcGFpbnRUaHVtYihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJh
ciwgY3VycmVudFRodW1iUmVjdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTY3Jv
bGxiYXJUaGVtZUd0azo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgcmV0dXJuIChldmVudC5z
aGlmdEtleSgpICYmIGV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHx8IChldmVudC5idXR0
b24oKSA9PSBNaWRkbGVCdXR0b24pOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNjcm9s
bGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKLXsKLSAgICByZXR1cm4gbV90aHVt
YkZhdG5lc3MgKyAobV90cm91Z2hCb3JkZXJXaWR0aCAqIDIpOwotfQotCi1JbnRTaXplIFNjcm9s
bGJhclRoZW1lR3RrOjpidXR0b25TaXplKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIp
Ci17Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
cikKLSAgICAgICAgcmV0dXJuIEludFNpemUobV90aHVtYkZhdG5lc3MsIG1fc3RlcHBlclNpemUp
OwotCi0gICAgLy8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIHJldHVybiBJbnRTaXplKG1fc3Rl
cHBlclNpemUsIG1fdGh1bWJGYXRuZXNzKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lR3RrOjpt
aW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAg
ICByZXR1cm4gbV9taW5UaHVtYkxlbmd0aDsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlNzNkZjI4NTUwMWI1ODI2ZGMwNTliODNiZmMzZDlhNDE3MGQ0YmExLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFNjcm9sbGJhclRoZW1lR3RrX2gKLSNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVHdGtfaAotCi0j
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lR3RrIDogcHVibGlj
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKLXB1YmxpYzoKLSAgICBTY3JvbGxiYXJUaGVtZUd0
aygpOwotICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lR3RrKCk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaGFzQnV0dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0
dWFsIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxi
YXJQYXJ0LCBib29sKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKLSAgICB2aXJ0dWFsIElu
dFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCk7Ci0gICAgSW50UmVj
dCB0aHVtYlJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0
cmFpbmVkVHJhY2tSZWN0KTsKLSAgICBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50Kiwg
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBw
YWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVD
bGllbnQqKTsKLSAgICB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCos
IFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgcGFpbnRU
aHVtYihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUpOwotICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25T
aXplKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1i
TGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0KLSAgICAvLyBUT0RPOiBUaGVzZSBhcmUg
dGhlIGRlZmF1bHQgR1RLKyB2YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhl
c2UgZnJvbSB0aGUgdGhlbWUgaXRzZWxmLgotICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRv
c2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMjA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBh
dXRvc2Nyb2xsVGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMDI7IH0KLSAgICB2b2lkIHVwZGF0ZVRo
ZW1lUHJvcGVydGllcygpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNz
KCk7Ci0gICAgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwot
ICAgIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotCi1w
cm90ZWN0ZWQ6Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrU3R5bGVDb250ZXh0
KiBtX2NvbnRleHQ7Ci0jZW5kaWYKLSAgICBpbnQgbV90aHVtYkZhdG5lc3M7Ci0gICAgaW50IG1f
dHJvdWdoQm9yZGVyV2lkdGg7Ci0gICAgaW50IG1fc3RlcHBlclNpemU7Ci0gICAgaW50IG1fc3Rl
cHBlclNwYWNpbmc7Ci0gICAgaW50IG1fbWluVGh1bWJMZW5ndGg7Ci0gICAgZ2Jvb2xlYW4gbV90
cm91Z2hVbmRlclN0ZXBwZXJzOwotICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydDsKLSAgICBnYm9vbGVhbiBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0OwotICAgIGdib29s
ZWFuIG1faGFzQmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0
b25FbmRQYXJ0OwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4NjZiYjhhMWQyZjcxYWE4NjRlYTU3ZWQzMDNmMTM2MDcyYzFjNDI3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCi0KLSNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0j
aW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUg
IldpZGdldFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgZ3RrU3R5bGVTZXRDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrU3R5bGUqIHByZXZpb3VzLCBTY3JvbGxiYXJUaGVtZUd0ayogc2Nyb2xs
YmFyVGhlbWUpCi17Ci0gICAgc2Nyb2xsYmFyVGhlbWUtPnVwZGF0ZVRoZW1lUHJvcGVydGllcygp
OwotfQotCi1TY3JvbGxiYXJUaGVtZUd0azo6U2Nyb2xsYmFyVGhlbWVHdGsoKQotewotICAgIHVw
ZGF0ZVRoZW1lUHJvcGVydGllcygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc3RhdGljX2Nhc3Q8
UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtI
U2Nyb2xsYmFyKCksCi0gICAgICAgICAic3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNl
dENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRo
ZW1lUHJvcGVydGllcygpCi17Ci0gICAgR3RrV2lkZ2V0KiBzY3JvbGxiYXIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPmd0
a0hTY3JvbGxiYXIoKTsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzY3JvbGxiYXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl93aWR0aCIsICZtX3RodW1iRmF0bmVzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoX2JvcmRlciIsICZtX3Ryb3VnaEJvcmRlcldp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzdGVwcGVyLXNpemUiLCAmbV9zdGVwcGVy
U2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwg
Jm1fdHJvdWdoVW5kZXJTdGVwcGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJh
Y2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICJoYXMtZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1zZWNvbmRhcnktZm9yd2FyZC1z
dGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAiaGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRv
bkVuZFBhcnQsIE5VTEwpOwotICAgIG1fbWluVGh1bWJMZW5ndGggPSBndGtfcmFuZ2VfZ2V0X21p
bl9zbGlkZXJfc2l6ZShHVEtfUkFOR0Uoc2Nyb2xsYmFyKSk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFy
c0ZyYW1lVGhpY2tuZXNzKCk7Ci19Ci0KLXN0YXRpYyBHdGtXaWRnZXQqIGdldFdpZGdldEZvclNj
cm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIFJlbmRlclRo
ZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6
OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gdGhlbWUtPmd0a1ZTY3JvbGxiYXIoKSA6IHRoZW1l
LT5ndGtIU2Nyb2xsYmFyKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJh
Y2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBQYWludCB0aGUg
dHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3VnaC11bmRlci1zdGVwcGVycyBwcm9wZXJ0eSBp
cyB0cnVlLCB0aGlzCi0gICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxsIHNpemUgb2YgdGhlIHNjcm9s
bGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91bGQgb25seSBiZSB0aGUKLSAgICAvLyB0cmFj
ayByZWN0LgotICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QocmVjdCk7Ci0gICAgaWYgKG1f
dHJvdWdoVW5kZXJTdGVwcGVycykKLSAgICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0
KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3Jv
bGxiYXItPmhlaWdodCgpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29u
dGV4dChjb250ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCk7Ci0gICAgSW50UmVjdCBwYWludFJlY3Qo
SW50UG9pbnQoKSwgZnVsbFNjcm9sbGJhclJlY3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KHBhaW50UmVjdCwgZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfQUNUSVZFLCBHVEtfU0hB
RE9XX0lOLCAidHJvdWdoIik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Ny
b2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCks
IHNjcm9sbGJhci0+aGVpZ2h0KCkpOwotCi0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRn
ZXRDb250ZXh0KGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0KTsKLSAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KGZ1bGxTY3JvbGxiYXJSZWN0LCBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVEFURV9OT1JNQUws
IEdUS19TSEFET1dfSU4sICJzY3JvbGxlZF93aW5kb3ciKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBnYm9v
bGVhbiBhY3RpdmF0ZVNsaWRlcjsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJh
Y3RpdmF0ZS1zbGlkZXIiLCAmYWN0aXZhdGVTbGlkZXIsIE5VTEwpOwotCi0gICAgR3RrU3RhdGVU
eXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9OT1JNQUw7Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFk
b3dUeXBlID0gR1RLX1NIQURPV19PVVQ7Ci0gICAgaWYgKGFjdGl2YXRlU2xpZGVyICYmIHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpIHsKLSAgICAgICAgc3RhdGVUeXBlID0g
R1RLX1NUQVRFX0FDVElWRTsKLSAgICAgICAgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfSU47Ci0g
ICAgfSBlbHNlIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0IHx8IHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIHN0YXRlVHlwZSA9
IEdUS19TVEFURV9QUkVMSUdIVDsKLQotICAgIC8vIFRoZSBhZGp1c3RtZW50IGNvbnRyb2xzIHRo
ZSByZW5kZXJpbmcgb2YgdGhlIHNjcm9sbGJhciB0aHVtYi4gSWYgaXQncyBub3Qgc2V0Ci0gICAg
Ly8gcHJvcGVybHkgdGhlIHRoZW1lIG1heSBub3QgZHJhdyB0aGUgdGh1bWIgYm9yZGVycyBwcm9w
ZXJseS4KLSAgICBHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gZ3RrX3JhbmdlX2dldF9hZGp1
c3RtZW50KEdUS19SQU5HRSh3aWRnZXQpKTsKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUo
YWRqdXN0bWVudCwgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpOwotICAgIGd0a19hZGp1c3RtZW50
X3NldF9sb3dlcihhZGp1c3RtZW50LCAwKTsKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfdXBwZXIo
YWRqdXN0bWVudCwgc2Nyb2xsYmFyLT5tYXhpbXVtKCkpOwotCi0gICAgR3RrT3JpZW50YXRpb24g
b3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDsKLSAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGd0a19h
ZGp1c3RtZW50X3NldF9wYWdlX3NpemUoYWRqdXN0bWVudCwgcmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIG9yaWVudGF0aW9uID0gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOwotICAgIH0gZWxzZQot
ICAgICAgICBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXplKGFkanVzdG1lbnQsIHJlY3Qud2lk
dGgoKSk7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4
dCwgcmVjdCk7Ci0gICAgSW50UmVjdCBzbGlkZXJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgp
KTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2xpZGVyKHNsaWRlclJlY3QsIHdpZGdldCwg
c3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAic2xpZGVyIiwgb3JpZW50YXRpb24pOwotfQotCi12b2lk
IFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNj
cm9sbGJhclBhcnQgcGFydCkKLXsKLSAgICAvLyBUaGUgYnV0dG9ucyB3aWxsIGJlIGRpc2FibGVk
IGlmIHRoZSB0aHVtYiBpcyBhcyB0aGUgYXBwcm9wcmlhdGUgZXh0cmVtZS4KLSAgICBHdGtTaGFk
b3dUeXBlIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKLSAgICBHdGtTdGF0ZVR5cGUgc3Rh
dGVUeXBlID0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGJvb2wgcHJlc3NlZCA9IChwYXJ0
ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSk7Ci0KLSAgICBpZiAoKEJhY2tCdXR0b25TdGFy
dFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEJh
Y2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAg
ICAgIHx8IChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVu
dFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKQotICAgICAgICB8fCAoRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJh
ci0+bWF4aW11bSgpKSkgewotICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOwot
ICAgICAgICBpZiAocHJlc3NlZCkgewotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRF
X0FDVElWRTsKLSAgICAgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOwotICAgICAg
ICB9IGVsc2UgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpKQotICAgICAgICAg
ICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOwotICAgIH0KLQotICAgIC8vIFRoZW1l
cyBkZXRlcm1pbmUgaG93IHRvIGRyYXcgdGhlIGJ1dHRvbiAod2hpY2ggYnV0dG9uIHRvIGRyYXcp
IGJhc2VkIG9uIHRoZSBhbGxvY2F0aW9uCi0gICAgLy8gb2YgdGhlIHdpZGdldC4gV2hlcmUgdGhl
IHRhcmdldCByZWN0IGlzIGluIHJlbGF0aW9uIHRvIHRoZSB0b3RhbCB3aWRnZXQgYWxsb2NhdGlv
bgotICAgIC8vIGRldGVybWluZXMgdGhlIGJ1dHRvbi4KLSAgICBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKTsKLSAgICBpbnQgYnV0dG9u
U2l6ZSA9IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgPyByZWN0LmhlaWdodCgp
IDogcmVjdC53aWR0aCgpOwotICAgIGludCB0b3RhbEFsbG9jYXRpb24gPSBidXR0b25TaXplICog
NTsgLy8gT25lIHNwYWNlIGZvciBlYWNoIGJ1dHRvbiBhbmQgb25lIGV4dHJhLgotICAgIGludCBi
dXR0b25PZmZzZXQgPSAwOwotICAgIGlmIChGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQp
Ci0gICAgICAgIGJ1dHRvbk9mZnNldCA9IGJ1dHRvblNpemU7Ci0gICAgZWxzZSBpZiAoQmFja0J1
dHRvbkVuZFBhcnQgPT0gcGFydCkKLSAgICAgICAgYnV0dG9uT2Zmc2V0ID0gMyAqIGJ1dHRvblNp
emU7Ci0gICAgZWxzZSBpZiAoRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCkKLSAgICAgICAg
YnV0dG9uT2Zmc2V0ID0gNCAqIGJ1dHRvblNpemU7Ci0KLSAgICAvLyBOb3cgd2Ugd2FudCB0aGUg
YWxsb2NhdGlvbiB0byBiZSByZWxhdGl2ZSB0byB0aGUgb3JpZ2luIG9mIHRoZSBwYWludGVkIHJl
Y3QuCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoc2Nyb2xs
YmFyKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLSAgICBhbGxvY2F0aW9uLnggPSBhbGxv
Y2F0aW9uLnkgPSAwOwotICAgIGFsbG9jYXRpb24ud2lkdGggPSByZWN0LndpZHRoKCk7Ci0gICAg
YWxsb2NhdGlvbi5oZWlnaHQgPSByZWN0LmhlaWdodCgpOwotCi0gICAgaWYgKG9yaWVudGF0aW9u
ID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gdG90
YWxBbGxvY2F0aW9uOwotICAgICAgICBhbGxvY2F0aW9uLnkgLT0gYnV0dG9uT2Zmc2V0OwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGFsbG9jYXRpb24ud2lkdGggPSB0b3RhbEFsbG9jYXRpb247Ci0g
ICAgICAgIGFsbG9jYXRpb24ueCAtPSBidXR0b25PZmZzZXQ7Ci0gICAgfQotICAgIGd0a193aWRn
ZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0KLSAgICBjb25zdCBjaGFy
KiBkZXRhaWwgPSBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICJ2c2Nyb2xsYmFy
IiA6ICJoc2Nyb2xsYmFyIjsKLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRl
eHQoY29udGV4dCwgcmVjdCk7Ci0KLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQoKSwg
cmVjdC5zaXplKCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYnV0dG9uUmVjdCwg
d2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsIGRldGFpbCk7Ci0KLSAgICBmbG9hdCBhcnJv
d1NjYWxpbmc7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiYXJyb3ctc2NhbGlu
ZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOwotICAgIEludFNpemUgYXJyb3dTaXplID0gcmVjdC5z
aXplKCk7Ci0gICAgYXJyb3dTaXplLnNjYWxlKGFycm93U2NhbGluZyk7Ci0gICAgSW50UmVjdCBh
cnJvd1JlY3QoSW50UG9pbnQoYnV0dG9uUmVjdC54KCkgKyAoYnV0dG9uUmVjdC53aWR0aCgpIC0g
YXJyb3dTaXplLndpZHRoKCkpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dXR0b25SZWN0LnkoKSArIChidXR0b25SZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplLmhlaWdodCgp
KSAvIDIpLAotICAgICAgICAgICAgICAgICAgICAgIGFycm93U2l6ZSk7Ci0gICAgaWYgKHByZXNz
ZWQpIHsKLSAgICAgICAgaW50IGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZ
OwotICAgICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteCIsICZhcnJvd0Rpc3BsYWNlbWVudFgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteSIsICZh
cnJvd0Rpc3BsYWNlbWVudFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
ICAgICAgICBhcnJvd1JlY3QubW92ZShhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2Vt
ZW50WSk7Ci0gICAgfQotCi0gICAgR3RrQXJyb3dUeXBlIGFycm93VHlwZSA9IEdUS19BUlJPV19E
T1dOOwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAg
ICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25TdGFy
dFBhcnQpCi0gICAgICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfVVA7Ci0gICAgfSBlbHNl
IGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGFycm93
VHlwZSA9IEdUS19BUlJPV19SSUdIVDsKLSAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVu
ZFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICAgICAgYXJyb3dU
eXBlID0gR1RLX0FSUk9XX0xFRlQ7Ci0gICAgfQotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRB
cnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBhcnJvd1R5cGUs
IGRldGFpbCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0azMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzQ5YzU0M2Yz
ZGRmNmIzMTVlZmZiOThhNzU5ZmY1YjAwMmQ3MGNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0azMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCi0KLSNpZm5kZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLSNpbmNsdWRl
ICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdl
ZENhbGxiYWNrKEd0a1dpZGdldCosIFNjcm9sbGJhclRoZW1lR3RrKiBzY3JvbGxiYXJUaGVtZSkK
LXsKLSAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci19Ci0KLVNj
cm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCi0gICAgOiBtX2NvbnRleHQoc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0
KCkpLT5ndGtTY3JvbGxiYXJTdHlsZSgpKQotewotICAgIHVwZGF0ZVRoZW1lUHJvcGVydGllcygp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0so
Z3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVt
ZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUobV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlu
LXNsaWRlci1sZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZtX3RodW1iRmF0bmVzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC1ib3JkZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc2l6ZSIsICZtX3N0
ZXBwZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RlcHBlci1zcGFj
aW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0cm91Z2gtdW5kZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJhY2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNC
YWNrQnV0dG9uU3RhcnRQYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFz
LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwg
Jm1faGFzQmFja0J1dHRvbkVuZFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25TdGFy
dFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIHVwZGF0
ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBseVNjcm9s
bGJhclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRf
Y2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xs
YmFyID8gIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCA6IEdUS19TVFlMRV9DTEFTU19IT1JJWk9O
VEFMKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIFBhaW50IHRoZSB0cmFjayBiYWNrZ3Jv
dW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUsIHRoaXMK
LSAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYg
aXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQotICAgIC8vIHRyYWNrIHJlY3QuCi0gICAg
SW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKLSAgICBpZiAobV90cm91Z2hVbmRlclN0
ZXBwZXJzKQotICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54
KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0
KCkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0gICAgYXBw
bHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChtX2Nv
bnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1bGxTY3JvbGxiYXJSZWN0LnkoKSwg
ZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9sbGJhclJlY3QuaGVpZ2h0KCkpOwot
ICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0LngoKSwgZnVs
bFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53aWR0aCgpLCBmdWxsU2Nyb2xs
YmFyUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29u
dGV4dCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dy
b3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0gICAg
YXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0
LCAic2Nyb2xsZWQtd2luZG93Iik7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQsIGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFy
LT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0KLSAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKLQotICAgIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOwotICAgIGFwcGx5U2Nyb2xs
YmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVS
KTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFy
dCgpID09IFRodW1iUGFydCkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZF
OwotICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OwotCi0gICAgZ3RrX3JlbmRlcl9zbGlkZXIobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3Jv
bGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpP
TlRBTCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9j
b250ZXh0KTsKLQotICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpOwotICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3Nl
cyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBp
ZiAoKEJhY2tCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSkKLSAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCkpCi0gICAgICAgIHx8IChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYm
IHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKQotICAgICAg
ICB8fCAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVu
dFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgewotICAgICAgICBpZiAocGFydCA9PSBz
Y3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpCi0gICAgICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19BQ1RJVkU7Ci0gICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSkKLSAgICAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIH0g
ZWxzZQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0
ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1fY29u
dGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5k
KG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2Zy
YW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGdmbG9hdCBh
cnJvd1NjYWxpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwg
ImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKLQotICAgIGRvdWJsZSBhcnJv
d1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpICogYXJyb3dTY2Fs
aW5nOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSArIChyZWN0LndpZHRoKCkg
LSBhcnJvd1NpemUpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyAo
cmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyKTsKLQotICAgIGlmIChmbGFncyAmIEdUS19T
VEFURV9GTEFHX0FDVElWRSkgewotICAgICAgICBnaW50IGFycm93RGlzcGxhY2VtZW50WCwgYXJy
b3dEaXNwbGFjZW1lbnRZOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUobV9j
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3Bs
YWNlbWVudC14IiwgJmFycm93RGlzcGxhY2VtZW50WCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteSIsICZhcnJvd0Rpc3BsYWNlbWVudFks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgYXJy
b3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZKTsKLSAg
ICB9Ci0KLSAgICBnZG91YmxlIGFuZ2xlOwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgewotICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQ
YXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIDogMDsKLSAgICB9
IGVsc2UgewotICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8
IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIC8gMiA6IDMgKiAoR19QSSAv
IDIpOwotICAgIH0KLQotICAgIGd0a19yZW5kZXJfYXJyb3cobV9jb250ZXh0LCBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UG9pbnQueCgpLCBhcnJvd1BvaW50
LnkoKSwgYXJyb3dTaXplKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250
ZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUdUS19BUElf
VkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNo
UG9wdXBNZW51R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1
cE1lbnVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDEzNzczZTU4YzYw
NWM0MDgxM2E5YzA3Yjg5MDAzZDYxZmQ4MTBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1
cE1lbnVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51R3RrLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNlYXJjaFBvcHVwTWVudUd0azo6U2Vh
cmNoUG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCogY2xpZW50KQotICAgIDogbV9wb3B1cChh
ZG9wdFJlZihuZXcgUG9wdXBNZW51R3RrKGNsaWVudCkpKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLVBvcHVwTWVudSogU2VhcmNoUG9wdXBNZW51R3RrOjpwb3B1cE1lbnUoKQotewot
ICAgIHJldHVybiBtX3BvcHVwLmdldCgpOwotfQotCi12b2lkIFNlYXJjaFBvcHVwTWVudUd0azo6
c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFNlYXJjaFBvcHVwTWVu
dUd0azo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxTdHJp
bmc+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFNlYXJjaFBvcHVwTWVu
dUd0azo6ZW5hYmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFy
Y2hQb3B1cE1lbnVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1
cE1lbnVHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzYzYzZDdjMmI3Yjg0
ZTQyNjM1NjI2M2E5ZDZiOTI0OTIxMWU4Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBN
ZW51R3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgU2VhcmNoUG9wdXBNZW51R3RrX2gKLSNkZWZpbmUgU2VhcmNoUG9wdXBNZW51
R3RrX2gKLQotI2luY2x1ZGUgIlBvcHVwTWVudUd0ay5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVw
TWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNlYXJjaFBvcHVwTWVudUd0
ayA6IHB1YmxpYyBTZWFyY2hQb3B1cE1lbnUgewotcHVibGljOgotICAgIFNlYXJjaFBvcHVwTWVu
dUd0ayhQb3B1cE1lbnVDbGllbnQqKTsKLQotICAgIHZpcnR1YWwgUG9wdXBNZW51KiBwb3B1cE1l
bnUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVj
dG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKTsKLSAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpOwot
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxQb3B1cE1lbnVHdGs+IG1fcG9wdXA7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBTZWFyY2hQb3B1cE1lbnVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzcwNDBmMjhlOWRmNzFlNGVlZDBlMWEwMTI2ZTY2NTBkMzVjNjM2YS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVu
dHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBpZiAoZmlsZVBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOwotICAgIGdjaGFyKiBjb250ZW50czsKLSAg
ICBnc2l6ZSBzaXplOwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIGlmICghZ19maWxlX2dl
dF9jb250ZW50cyhmaWxlbmFtZS5kYXRhKCksICZjb250ZW50cywgJnNpemUsICZlcnJvcikpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxl
ICVzIC0gJXMiLCBmaWxlbmFtZUZvckRpc3BsYXkoZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVy
cm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoY29udGVudHMsIHNpemUpOwotICAgIGdfZnJlZShjb250ZW50cyk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMWEzNTJmNzMzZjBlYjNhNzY4Zjk4MjFhNDAy
NTY0MzAzMDRmNjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkVGltZXIu
aCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgZ3VpbnQgc2hhcmVkVGltZXI7Ci1zdGF0aWMgdm9pZCAo
KnNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikoKTsKLQotdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24odm9pZCAoKmYpKCkpCi17Ci0gICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uID0g
ZjsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50ZXIpCi17Ci0gICAgaWYg
KHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikKLSAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0
aW9uKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVyRmlyZUlu
dGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKLXsKLSAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKTsKLQotICAgIGd1aW50IGludGVydmFsSW5NUyA9IHN0YXRpY19jYXN0PGd1aW50Pihp
bnRlcnZhbCAqIDEwMDApOwotCi0gICAgc3RvcFNoYXJlZFRpbWVyKCk7Ci0gICAgc2hhcmVkVGlt
ZXIgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX1JFRFJBVywgaW50ZXJ2YWxJbk1T
LCB0aW1lb3V0X2NiLCAwLCAwKTsKLX0KLQotdm9pZCBzdG9wU2hhcmVkVGltZXIoKQotewotICAg
IGlmIChzaGFyZWRUaW1lciA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBy
ZW1vdmVkU291cmNlID0gZ19zb3VyY2VfcmVtb3ZlKHNoYXJlZFRpbWVyKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHJlbW92ZWRTb3VyY2UsIHJlbW92ZWRTb3VyY2UpOwotICAgIHNoYXJlZFRpbWVyID0g
MDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5k
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNzMxNmNhZmQyZWNlZjdiNjFlOGFkZjEyOTM2MjY4
YTkyMjRjNGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiU291bmQuaCIKLQot
I2luY2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHN5c3Rl
bUJlZXAoKQotewotICAgIGdka19iZWVwKCk7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMzQ0NDkzZDViMzFkOGRkODUw
Mzk4OTM2OGZhYWIwMzU0YTMzOTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiQ29va2llU3RvcmFnZS5oIgotI2luY2x1ZGUgIkRO
Uy5oIgotI2luY2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1
ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLS8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3RseSB0
byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdm9pZCBn
ZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlT
aXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwp
IHsgcmV0dXJuIFN0cmluZygpOyB9Ci1mbG9hdCB1c2VySWRsZVRpbWUoKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBGTFRfTUFYOyB9IC8vIHJldHVybiBhbiBhcmJpdHJhcmlseSBoaWdoIHVz
ZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2luZyBwYWdlcyBmcm9tIHRoZSBwYWdlIGNhY2hlIGlz
bid0IHBvc3Rwb25lZAotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvVXNlckFnZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdl
bnRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2JjNzMzMzhjOTQ4ZTY5
NzczMjc0OTk0ZDM1YTIxYmQyMDZlMGQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VXNlckFnZW50R3RrLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZiBPUyhVTklYKQotI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgIlN5c3Rl
bUluZm8uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBwbGF0Zm9ybUZvclVBU3RyaW5nKCkKLXsKLSNpZiBQTEFURk9STShYMTEpCi0gICAgcmV0
dXJuICJYMTEiOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gIiI7Ci0jZWxpZiBQTEFU
Rk9STShNQUMpCi0gICAgcmV0dXJuICJNYWNpbnRvc2giOwotI2VsaWYgZGVmaW5lZChHREtfV0lO
RE9XSU5HX0RJUkVDVEZCKQotICAgIHJldHVybiAiRGlyZWN0RkIiOwotI2Vsc2UKLSAgICByZXR1
cm4gIlVua25vd24iOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBTdHJpbmcgcGxhdGZvcm1WZXJzaW9u
Rm9yVUFTdHJpbmcoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1YU9TVmVy
c2lvbiwgKFN0cmluZygpKSk7Ci0gICAgaWYgKCF1YU9TVmVyc2lvbi5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiB1YU9TVmVyc2lvbjsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgdWFPU1ZlcnNp
b24gPSB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7Ci0jZWxpZiBPUyhEQVJXSU4pCi0jaWYg
Q1BVKFg4NikKLSAgICB1YU9TVmVyc2lvbiA9ICJJbnRlbCBNYWMgT1MgWCI7Ci0jZWxzZQotICAg
IHVhT1NWZXJzaW9uID0gIlBQQyBNYWMgT1MgWCI7Ci0jZW5kaWYKLSNlbGlmIE9TKFVOSVgpCi0g
ICAgc3RydWN0IHV0c25hbWUgbmFtZTsKLSAgICBpZiAodW5hbWUoJm5hbWUpICE9IC0xKQotICAg
ICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZzo6Zm9ybWF0KCIlcyAlcyIsIG5hbWUuc3lzbmFtZSwg
bmFtZS5tYWNoaW5lKTsKLSAgICBlbHNlCi0gICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJV
bmtub3duIik7Ci0jZWxzZQotICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJVbmtub3duIik7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gdWFPU1ZlcnNpb247Ci19Ci0KLVN0cmluZyBzdGFuZGFyZFVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcHBsaWNh
dGlvblZlcnNpb24pCi17Ci0gICAgLy8gQ3JlYXRlIGEgZGVmYXVsdCB1c2VyIGFnZW50IHN0cmlu
ZyB3aXRoIGEgbGliZXJhbCBpbnRlcnByZXRhdGlvbiBvZiAKLSAgICAvLyBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1VzZXJfQWdlbnRfU3RyaW5nc19SZWZlcmVuY2UK
LSAgICAvLwotICAgIC8vIEZvcm1pbmcgYSBmdW5jdGlvbmFsIHVzZXIgYWdlbnQgaXMgcmVhbGx5
IGRpZmZpY3VsdC4gV2UgbXVzdCBtZW50aW9uIFNhZmFyaSwgYmVjYXVzZSBzb21lCi0gICAgLy8g
c2l0ZXMgY2hlY2sgZm9yIHRoYXQgd2hlbiBkZXRlY3RpbmcgV2ViS2l0IGJyb3dzZXJzLiBBZGRp
dGlvbmFsbHkgc29tZSBzaXRlcyBhc3N1bWUgdGhhdAotICAgIC8vIGJyb3dzZXJzIHRoYXQgYXJl
ICJTYWZhcmkiIGJ1dCBub3QgcnVubmluZyBvbiBPUyBYIGFyZSB0aGUgU2FmYXJpIGlPUyBicm93
c2VyLCBzbyB3ZQotICAgIC8vIGFsc28gY2xhaW0gdG8gYmUgIENocm9taXVtLiBHZXR0aW5nIHRo
aXMgd3JvbmcgY2FuIGNhdXNlIHNpdGVzIHRvIGxvYWQgdGhlIHdyb25nIEphdmFTY3JpcHQsCi0g
ICAgLy8gQ1NTLCBvciBjdXN0b20gZm9udHMuIEluIHNvbWUgY2FzZXMgc2l0ZXMgd29uJ3QgbG9h
ZCByZXNvdXJjZXMgYXQgYWxsLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQ1N0cmlu
ZywgdWFWZXJzaW9uLCAoU3RyaW5nOjpmb3JtYXQoIiVpLiVpIiwgV0VCS0lUX1VTRVJfQUdFTlRf
TUFKT1JfVkVSU0lPTiwgV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTikudXRmOCgpKSk7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0YXRpY1VBLCAoU3RyaW5n
Ojpmb3JtYXQoIk1vemlsbGEvNS4wICglczsgJXMpIEFwcGxlV2ViS2l0LyVzIChLSFRNTCwgbGlr
ZSBHZWNrbykgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJDaHJvbWl1bS8yNS4wLjEzNDkuMiBDaHJvbWUvMjUuMC4xMzQ5
LjIgU2FmYXJpLyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUZvclVBU3RyaW5nKCksIHBsYXRmb3JtVmVy
c2lvbkZvclVBU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YVZlcnNpb24uZGF0YSgp
LCB1YVZlcnNpb24uZGF0YSgpKSkpOwotICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gc3RhdGljVUE7Ci0KLSAgICBTdHJpbmcgZmluYWxBcHBsaWNhdGlv
blZlcnNpb24gPSBhcHBsaWNhdGlvblZlcnNpb247Ci0gICAgaWYgKGZpbmFsQXBwbGljYXRpb25W
ZXJzaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgZmluYWxBcHBsaWNhdGlvblZlcnNpb24gPSB1YVZl
cnNpb24uZGF0YSgpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyAlcy8lcyIsIHN0
YXRpY1VBLnV0ZjgoKS5kYXRhKCksIGFwcGxpY2F0aW9uTmFtZS51dGY4KCkuZGF0YSgpLCBmaW5h
bEFwcGxpY2F0aW9uVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFn
ZW50R3RrLmguaW4gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmgu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTBiN2EzMmQyOGYwMjFlODQ2Mzc2
ODdkN2RkOWI2YzkwYzc1N2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oLmluCisr
KyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVXNlckFnZW50R3RrX2gKLSNkZWZpbmUgVXNlckFn
ZW50R3RrX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotI2RlZmluZSBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJT
SU9OIChAV0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTkApCi0jZGVmaW5lIFdFQktJVF9V
U0VSX0FHRU5UX01JTk9SX1ZFUlNJT04gKEBXRUJLSVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9O
QCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnQoY29u
c3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUgPSAiIiwgY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlv
blZlcnNpb24gPSAiIik7Ci0KLX0KLQotI2VuZGlmIC8vIFVzZXJBZ2VudEd0a19oCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDIwM2YzYzljN2M5YTZlMmM5YTM0YzA5MWVlOTRiY2IxMzc4YzZmMzQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q3Vyc29yLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0j
aW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdpZGdldDo6
V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKLXsKLSAgICBpbml0KHdpZGdldCk7Ci19Ci0K
LVdpZGdldDo6fldpZGdldCgpCi17Ci0gICAgQVNTRVJUKCFwYXJlbnQoKSk7Ci0KLSAgICByZWxl
YXNlUGxhdGZvcm1XaWRnZXQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9j
dXNlZCkKLXsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNv
cikKLXsKLSAgICBTY3JvbGxWaWV3KiB2aWV3ID0gcm9vdCgpOwotICAgIGlmICghdmlldykKLSAg
ICAgICAgcmV0dXJuOwotICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7
Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzaG93KCkKLXsKLSAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsK
LQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQotICAgICAg
ICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0Ojpo
aWRlKCkKLXsKLSAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7Ci0KLSAgICBpZiAoaXNQYXJlbnRW
aXNpYmxlKCkgJiYgcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBs
YXRmb3JtV2lkZ2V0KCkpOwotfQotCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotfQotCi12b2lkIFdpZGdldDo6c2V0
SXNTZWxlY3RlZChib29sIGlzU2VsZWN0ZWQpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTZWUgaWYgdGhlIHBsYXRmb3JtV2lkZ2V0IGhh
cyBhIHdlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQgcHJvcGVydHkKLSAgICAvLyBhbmQgc2V0IGl0
IGFmdGVyd2FyZHMuCi0gICAgR1BhcmFtU3BlYyogc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRf
cHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKHBsYXRmb3JtV2lkZ2V0KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQtd2lkZ2V0
LWlzLXNlbGVjdGVkIik7Ci0gICAgaWYgKCFzcGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
X29iamVjdF9zZXQocGxhdGZvcm1XaWRnZXQoKSwgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQi
LCBpc1NlbGVjdGVkLCBOVUxMKTsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWU7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX2ZyYW1lID0gcmVjdDsKLSAgICBmcmFt
ZVJlY3RzQ2hhbmdlZCgpOwotfQotCi12b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0
KCkKLXsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgICByZXR1cm47Ci0gICAg
Z19vYmplY3RfdW5yZWYocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpyZXRh
aW5QbGF0Zm9ybVdpZGdldCgpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQotICAgICAg
ICAgcmV0dXJuOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBsYXRmb3JtV2lkZ2V0KCkpOwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZjVkYTU0Njgz
MDM4NTM2MzEzNzFjNGM3ZWYzNjNlNzE0ZjgxMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
Ci0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIEdka1BpeG1hcCogZ1NjcmF0Y2hCdWZmZXIgPSAwOwotc3RhdGljIHZvaWQg
cHVyZ2VTY3JhdGNoQnVmZmVyKCkKLXsKLSAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCi0gICAgICAg
IGdfb2JqZWN0X3VucmVmKGdTY3JhdGNoQnVmZmVyKTsKLSAgICBnU2NyYXRjaEJ1ZmZlciA9IDA7
Ci19Ci0KLS8vIFdpZGdldCByZW5kZXJpbmcgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBi
dWZmZXIgZm9yIHRoZSBpbnRlcm1lZGlhdGUKLS8vIHJlbmRlci4gSW5zdGVhZCBvZiBjcmVhdGlu
ZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBvcGVyYXRpb24sCi0vLyB3ZSBj
cmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHB1cmdlZCB2aWEgYSB0
aW1lci4KLWNsYXNzIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7
Ci1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIHsgcHVyZ2VTY3JhdGNoQnVmZmVy
KCk7IH0KLX07Ci0KLXN0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCBwdXJnZVNj
cmF0Y2hCdWZmZXJUaW1lciwgKCkpOwotICAgIGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5p
c0FjdGl2ZSgpKQotICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7Ci0gICAg
cHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDIpOwotfQotCi1XaWRnZXRSZW5k
ZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQotICAgIDogbV9ncmFwaGlj
c0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQotICAgICwgbV90YXJnZXRSZWN0KHRhcmdldFJlY3Qp
Ci0gICAgLCBtX2hhZEVycm9yKGZhbHNlKQotewotICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9
IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LmdldCgpKTsKLQotICAgIC8vIEZhbGxiYWNrOiBXZSBmYWlsZWQgdG8gY3JlYXRlIGFuIFJHQkEg
Y29sb3JtYXAgZWFybGllciwgc28gd2UgY2Fubm90IHByb3Blcmx5IHBhaW50IAotICAgIC8vIHRv
IGEgdGVtcG9yYXJ5IHN1cmZhY2UgYW5kIHByZXNlcnZlIHRyYW5zcGFyZW5jeS4gVG8gZW5zdXJl
IGRlY2VudCB3aWRnZXQgcmVuZGVyaW5nLCBqdXN0Ci0gICAgLy8gcGFpbnQgZGlyZWN0bHkgdG8g
dGhlIHRhcmdldCBkcmF3YWJsZS4gVGhpcyB3aWxsIG5vdCByZW5kZXIgQ1NTIHJvdGF0aW9uYWwg
dHJhbnNmb3JtcyBwcm9wZXJseS4KLSAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdC
QUNvbG9ybWFwICYmIGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKLSAgICAgICAgbV90
YXJnZXQgPSBncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gV2UgbmV2ZXIgd2FudCB0byBjcmVhdGUgYSBzY3JhdGNoIGJ1ZmZlciBs
YXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiBvdXIgdGFyZ2V0IEdka0RyYXdhYmxlLgotICAgIC8vIFRo
aXMgcHJldmVudHMgZ2lhbnQgcGl4bWFwIGFsbG9jYXRpb25zIGZvciB2ZXJ5IGxhcmdlIHdpZGdl
dHMgaW4gc21hbGxlciB2aWV3cy4KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQg
dGhpcyBjaGVjayBmb3IgV2ViS2l0MiBhcyB3ZWxsLgotICAgIGlmIChncmFwaGljc0NvbnRleHQt
Pmdka1dpbmRvdygpKSB7Ci0gICAgICAgIGludCBtYXhXaWR0aCA9IDAsIG1heEhlaWdodCA9IDA7
Ci0gICAgICAgIGdldEdka0RyYXdhYmxlU2l6ZShncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygp
LCAmbWF4V2lkdGgsICZtYXhIZWlnaHQpOwotICAgICAgICBtX3RhcmdldFJlY3Quc2V0U2l6ZSht
X3RhcmdldFJlY3Quc2l6ZSgpLnNocnVua1RvKEludFNpemUobWF4V2lkdGgsIG1heEhlaWdodCkp
KTsKLSAgICB9Ci0KLSAgICAvLyBXaWRnZXRzIHNvbWV0aW1lcyBuZWVkIHRvIGRyYXcgb3V0c2lk
ZSB0aGVpciBib3VuZGFyaWVzIGZvciB0aGluZ3Mgc3VjaCBhcwotICAgIC8vIGV4dGVyaW9yIGZv
Y3VzLiBXZSB3YW50IHRvIGFsbG9jYXRlIGEgc29tZSBleHRyYSBwaXhlbHMgaW4gb3VyIHN1cmZh
Y2UgZm9yIHRoaXMuCi0gICAgc3RhdGljIGludCBleHRyYVNwYWNlID0gMTU7Ci0gICAgbV90YXJn
ZXRSZWN0LmluZmxhdGUoZXh0cmFTcGFjZSk7Ci0KLSAgICAvLyBUaGlzIG9mZnNldCB3aWxsIG1h
cCBhIHBvaW50IGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgd2lkZ2V0IHRvIHRoZSBj
b29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnRpbmcgYnVmZmVyLgotICAgIG1fcGFpbnRPZmZz
ZXQgPSB0YXJnZXRSZWN0LmxvY2F0aW9uKCkgLSBtX3RhcmdldFJlY3QubG9jYXRpb24oKTsKLQot
ICAgIGludCB3aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpICsgKGV4dHJhU3BhY2UgKiAyKTsK
LSAgICBpbnQgaGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpICsgKGV4dHJhU3BhY2UgKiAy
KTsKLSAgICBpbnQgc2NyYXRjaFdpZHRoID0gMDsKLSAgICBpbnQgc2NyYXRjaEhlaWdodCA9IDA7
Ci0gICAgaWYgKGdTY3JhdGNoQnVmZmVyKQotICAgICAgICBnZGtfcGl4bWFwX2dldF9zaXplKGdT
Y3JhdGNoQnVmZmVyLCAmc2NyYXRjaFdpZHRoLCAmc2NyYXRjaEhlaWdodCk7Ci0KLSAgICAvLyBX
ZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJyZW50IGJ1ZmZl
ciBpcyBsYXJnZSBlbm91Z2guCi0gICAgaWYgKCFnU2NyYXRjaEJ1ZmZlciB8fCBzY3JhdGNoV2lk
dGggPCB3aWR0aCB8fCBzY3JhdGNoSGVpZ2h0IDwgaGVpZ2h0KSB7Ci0gICAgICAgIHB1cmdlU2Ny
YXRjaEJ1ZmZlcigpOwotICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMg
c28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXplZCByZXF1ZXN0cy4K
LSAgICAgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKLSAgICAgICAgaGVpZ2h0
ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OwotCi0gICAgICAgIGdTY3JhdGNoQnVmZmVyID0g
Z2RrX3BpeG1hcF9uZXcoMCwgd2lkdGgsIGhlaWdodCwgZ2RrX2NvbG9ybWFwX2dldF92aXN1YWwo
dGhlbWUtPm1fY29sb3JtYXApLT5kZXB0aCk7Ci0gICAgICAgIGdka19kcmF3YWJsZV9zZXRfY29s
b3JtYXAoZ1NjcmF0Y2hCdWZmZXIsIHRoZW1lLT5tX2NvbG9ybWFwKTsKLSAgICB9Ci0gICAgbV90
YXJnZXQgPSBnU2NyYXRjaEJ1ZmZlcjsKLQotICAgIC8vIENsZWFyIHRoZSBzY3JhdGNoIGJ1ZmZl
ci4KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gc2NyYXRjaEJ1ZmZlckNvbnRleHQgPSBhZG9wdFJlZihn
ZGtfY2Fpcm9fY3JlYXRlKGdTY3JhdGNoQnVmZmVyKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9y
KHNjcmF0Y2hCdWZmZXJDb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAg
Y2Fpcm9fcGFpbnQoc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCkpOwotfQotCi1XaWRnZXRSZW5k
ZXJpbmdDb250ZXh0Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gV2UgZG8g
bm90IG5lZWQgdG8gYmxpdCBiYWNrIHRvIHRoZSB0YXJnZXQgaW4gdGhlIGZhbGxiYWNrIGNhc2Uu
IFNlZSBhYm92ZS4KLSAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7Ci0gICAgaWYg
KCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBtX2dyYXBoaWNzQ29udGV4
dC0+Z2RrV2luZG93KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IHBhaW50IHRo
ZSByZXN1bHRzIGJhY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotICAgIGlmIChtX2hhZEVycm9y
KSB7Ci0gICAgICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGl0IGlzIG5lY2Vzc2Fy
eSB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBzb3VyY2UgaGVyZS4KLSAgICBjYWlyb190KiBjYWly
b0NvbnRleHQgPSBtX2dyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0g
ICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcHJldmlvdXNTb3VyY2UoY2Fpcm9fZ2V0X3NvdXJj
ZShjYWlyb0NvbnRleHQpKTsKLQotICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjYWly
b0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCBtX3RhcmdldFJlY3QueCgpLCBtX3RhcmdldFJlY3Qu
eSgpKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LCBtX3RhcmdldFJlY3QueCgp
LCBtX3RhcmdldFJlY3QueSgpLCBtX3RhcmdldFJlY3Qud2lkdGgoKSwgbV90YXJnZXRSZWN0Lmhl
aWdodCgpKTsKLSAgICBjYWlyb19maWxsKGNhaXJvQ29udGV4dCk7Ci0gICAgY2Fpcm9fc2V0X3Nv
dXJjZShjYWlyb0NvbnRleHQsIHByZXZpb3VzU291cmNlLmdldCgpKTsKLSAgICBzY2hlZHVsZVNj
cmF0Y2hCdWZmZXJQdXJnZSgpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OmNh
bGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIEdka1JlY3RhbmdsZSogY2xpcFJl
Y3QpCi17Ci0gICAgY2xpcFJlY3QtPnggPSBtX3BhaW50T2Zmc2V0LndpZHRoKCkgKyByZWN0Lngo
KTsKLSAgICBjbGlwUmVjdC0+eSA9IG1fcGFpbnRPZmZzZXQuaGVpZ2h0KCkgKyByZWN0LnkoKTsK
LSAgICBjbGlwUmVjdC0+d2lkdGggPSBtX3RhcmdldFJlY3Qud2lkdGgoKTsKLSAgICBjbGlwUmVj
dC0+aGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpOwotfQotCi12b2lkIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUs
IGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAg
IGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0KLSAgICAvLyBTb21lIHdpZGdl
dHMgYWxzbyBuZWVkIHRoZWlyIGFsbG9jYXRpb24gYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgZXh0
cmEgc3BhY2UuCi0gICAgLy8gUmlnaHQgbm93IG9ubHkgc2Nyb2xsYmFyIGJ1dHRvbnMgaGF2ZSBz
aWduaWZpY2FudCBhbGxvY2F0aW9ucy4KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0g
ICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLSAgICBh
bGxvY2F0aW9uLnggKz0gY2xpcFJlY3QueDsKLSAgICBhbGxvY2F0aW9uLnkgKz0gY2xpcFJlY3Qu
eTsKLSAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOwot
Ci0gICAgZ3RrX3BhaW50X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rhcmdl
dCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsCi0gICAgICAgICAgICAgICAgICB3
aWRnZXQsIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZs
YXRCb3goY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFp
bCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3Qo
cmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfZmxhdF9ib3goZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0
LAotICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQsIGRldGFpbCwgY2xpcFJlY3QueCwgY2xp
cFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dp
ZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBjb25zdCBnY2hhciogZGV0YWls
KQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChy
ZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9mb2N1cyhndGtfd2lkZ2V0X2dldF9zdHls
ZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAg
ICAgICAgICAgICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0
a1BhaW50U2xpZGVyKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtT
dGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFy
KiBkZXRhaWwsIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIEdka1JlY3Rhbmds
ZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAg
IGd0a19wYWludF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQs
IHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSwgb3JpZW50YXRpb24pOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHQ6Omd0a1BhaW50Q2hlY2soY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3Qg
Z2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3Vs
YXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfY2hlY2soZ3RrX3dp
ZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwg
JmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3Qu
eCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiByZWN0
LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlw
ZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBj
bGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0
a19wYWludF9vcHRpb24oZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0
YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAg
ICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTaGFk
b3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBz
dGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkK
LXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVj
dCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfc2hhZG93KGd0a193aWRnZXRfZ2V0X3N0eWxl
KHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lk
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQ6Omd0a1BhaW50QXJyb3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwg
aW50IGFycm93RGlyZWN0aW9uLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3Rh
bmdsZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwot
ICAgIGd0a19wYWludF9hcnJvdyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rhcmdl
dCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwgZGV0YWlsLAotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtBcnJvd1R5cGU+KGFycm93RGlyZWN0aW9u
KSwgVFJVRSwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludFZMaW5lKGNv
bnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
LSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF92
bGluZShndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCAm
Y2xpcFJlY3QsIHdpZGdldCwgZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICBjbGlwUmVjdC55
LCBjbGlwUmVjdC55ICsgcmVjdC5oZWlnaHQoKSwgY2xpcFJlY3QueCk7Ci0KLX0KLQotfQotCi0j
ZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzMWYyYzhhNzcxYzBlMTY3MzM3NDhkZDY0ZjQ0ZWNhYzBlMGNmOTkyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKLSNk
ZWZpbmUgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCi0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi0vLyBVc3VhbGx5IHRoaXMgaXMgdG9vIGV4cGVu
c2l2ZSB0byBoYXZlIGluIGhlYWRlcnMsIGJ1dCBHdGtTdGF0ZVR5cGUgR3RrU2hhZG93VHlwZSBh
cmUKLS8vIGVudW1zIGFuZCBjYW5ub3QgYmUgZm9yd2FyZCBkZWNsYXJlZC4gV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5oIGlzIGN1cnJlbnRseSBvbmx5Ci0vLyBpbmNsdWRlZCBpbiBSZW5kZXJUaGVt
ZUd0azIuY3BwIGFuZCBTY3JvbGxiYXJUaGVtZUd0azIuY3BwLgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFz
cyBSZW5kZXJUaGVtZUd0azsKLQotY2xhc3MgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB7Ci1wdWJs
aWM6Ci0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgfldpZGdldFJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZvaWQgZ3Rr
UGFpbnRCb3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hh
ZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50RmxhdEJveChjb25zdCBJ
bnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBn
Y2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRGb2N1cyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0
KiwgR3RrU3RhdGVUeXBlLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRTbGlkZXIo
Y29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwg
Y29uc3QgZ2NoYXIqLCBHdGtPcmllbnRhdGlvbik7Ci0gICAgdm9pZCBndGtQYWludENoZWNrKGNv
bnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNv
bnN0IGdjaGFyKik7Ci0gICAgdm9pZCBndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiwgR3Rr
V2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAg
IHZvaWQgZ3RrUGFpbnRTaGFkb3coY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50QXJy
b3coY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlw
ZSwgaW50IGFycm93RGlyZWN0aW9uLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRW
TGluZShjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBjb25zdCBnY2hh
ciopOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVj
dCYsIEdka1JlY3RhbmdsZSopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBtX2dyYXBoaWNzQ29u
dGV4dDsKLSAgICBJbnRSZWN0IG1fdGFyZ2V0UmVjdDsKLSAgICBJbnRTaXplIG1fcGFpbnRPZmZz
ZXQ7Ci0gICAgYm9vbCBtX2hhZEVycm9yOwotICAgIEdka0RyYXdhYmxlKiBtX3RhcmdldDsKLQot
fTsKLQotfQotCi0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLSNlbmRpZiAvLyBXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM0MjNmYTVkZWQyMjZkZWI5N2NlNzMzYjE3ZWRjMTliYjdjZDY5
NDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmgiCi0KLSNkZWZpbmUgU0VDUkVUX1dJVEhfVU5TVEFCTEUgMQotI2RlZmluZSBT
RUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThu
LWxpYi5oPgotI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4KLSNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNyZWRlbnRpYWxCYWNr
aW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSwgYmFja2luZ1N0b3JlLCAoKSk7Ci0gICAgcmV0
dXJuIGJhY2tpbmdTdG9yZTsKLX0KLQotc3RhdGljIEdSZWZQdHI8R0hhc2hUYWJsZT4gY3JlYXRl
QXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsID0gQ3JlZGVudGlh
bCgpKQotewotICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGNoYWxsZW5n
ZS5zb3VwTWVzc2FnZSgpKTsKLSAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBh
ZG9wdEdSZWYoc2VjcmV0X2F0dHJpYnV0ZXNfYnVpbGQoCi0gICAgICAgIFNFQ1JFVF9TQ0hFTUFf
Q09NUEFUX05FVFdPUkssCi0gICAgICAgICJkb21haW4iLCBzb3VwX2F1dGhfZ2V0X3JlYWxtKGNo
YWxsZW5nZS5zb3VwQXV0aCgpKSwKLSAgICAgICAgInNlcnZlciIsIHVyaS0+aG9zdCwKLSAgICAg
ICAgInByb3RvY29sIiwgdXJpLT5zY2hlbWUsCi0gICAgICAgICJhdXRodHlwZSIsIHNvdXBfYXV0
aF9nZXRfc2NoZW1lX25hbWUoY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAotICAgICAgICAicG9ydCIs
IHVyaS0+cG9ydCwKLSAgICAgICAgTlVMTCkpOwotICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0KLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0
KGF0dHJpYnV0ZXMuZ2V0KCksIGdfc3RyZHVwKCJ1c2VyIiksIGdfc3RyZHVwKGNyZWRlbnRpYWwu
dXNlcigpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlczsKLX0KLQotc3Ry
dWN0IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhIHsKLSAgICBD
cmVkZW50aWFsQmFja2luZ1N0b3JlOjpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2Fs
bGJhY2s7Ci0gICAgdm9pZCogZGF0YTsKLX07Ci0KLXN0YXRpYyB2b2lkIGNyZWRlbnRpYWxGb3JD
aGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2soU2VjcmV0U2VydmljZSogc2VydmljZSwgR0FzeW5j
UmVzdWx0KiBhc3luY1Jlc3VsdCwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxs
YmFja0RhdGEqIGNhbGxiYWNrRGF0YSkKLXsKLSAgICBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpD
cmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2sgPSBjYWxsYmFja0RhdGEtPmNh
bGxiYWNrOwotICAgIHZvaWQqIGRhdGEgPSBjYWxsYmFja0RhdGEtPmRhdGE7Ci0gICAgZGVsZXRl
IGNhbGxiYWNrRGF0YTsKLQotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHT3duUHRy
PEdMaXN0PiBlbGVtZW50cyhzZWNyZXRfc2VydmljZV9zZWFyY2hfZmluaXNoKHNlcnZpY2UsIGFz
eW5jUmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoZXJyb3IgfHwgIWVsZW1lbnRz
IHx8ICFlbGVtZW50cy0+ZGF0YSkgewotICAgICAgICBjYWxsYmFjayhDcmVkZW50aWFsKCksIGRh
dGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1JlZlB0cjxTZWNyZXRJdGVtPiBz
ZWNyZXRJdGVtID0gYWRvcHRHUmVmKHN0YXRpY19jYXN0PFNlY3JldEl0ZW0qPihlbGVtZW50cy0+
ZGF0YSkpOwotICAgIEdSZWZQdHI8R0hhc2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihz
ZWNyZXRfaXRlbV9nZXRfYXR0cmlidXRlcyhzZWNyZXRJdGVtLmdldCgpKSk7Ci0gICAgU3RyaW5n
IHVzZXIgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hf
dGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ1c2VyIikpKTsKLSAgICBpZiAodXNlci5p
c0VtcHR5KCkpIHsKLSAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgR1JlZlB0cjxTZWNy
ZXRWYWx1ZT4gc2VjcmV0VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0X3NlY3JldChz
ZWNyZXRJdGVtLmdldCgpKSk7Ci0gICAgY29uc3QgY2hhciogcGFzc3dvcmREYXRhID0gc2VjcmV0
X3ZhbHVlX2dldChzZWNyZXRWYWx1ZS5nZXQoKSwgJmxlbmd0aCk7Ci0gICAgU3RyaW5nIHBhc3N3
b3JkID0gU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZERhdGEsIGxlbmd0aCk7Ci0KLSAgICBjYWxs
YmFjayhDcmVkZW50aWFsKHVzZXIsIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJt
YW5lbnQpLCBkYXRhKTsKLX0KLQotdm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpjcmVkZW50
aWFsRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Us
IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKLXsK
LSAgICAvLyBUaGUgZGVmYXVsdCBmbGFnIG9ubHkgcmV0dXJucyB0aGUgbW9zdCByZWNlbnQgaXRl
bSwgbm90IGFsbCBvZiB0aGVtLgotICAgIFNlY3JldFNlYXJjaEZsYWdzIHNlYXJjaEZsYWdzID0g
c3RhdGljX2Nhc3Q8U2VjcmV0U2VhcmNoRmxhZ3M+KFNFQ1JFVF9TRUFSQ0hfVU5MT0NLIHwgU0VD
UkVUX1NFQVJDSF9MT0FEX1NFQ1JFVFMpOwotICAgIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3lu
Y1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxsYmFja0RhdGEgPSBuZXcgQ3JlZGVudGlhbEZvckNoYWxs
ZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGE7Ci0gICAgY2FsbGJhY2tEYXRhLT5jYWxsYmFjayA9
IGNhbGxiYWNrOwotICAgIGNhbGxiYWNrRGF0YS0+ZGF0YSA9IGRhdGE7Ci0KLSAgICBzZWNyZXRf
c2VydmljZV9zZWFyY2goCi0gICAgICAgIDAsIC8vIFRoZSBkZWZhdWx0IFNlY3JldFNlcnZpY2Uu
Ci0gICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCi0gICAgICAgIGNyZWF0ZUF0
dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKS5nZXQoKSwKLSAgICAgICAg
c2VhcmNoRmxhZ3MsCi0gICAgICAgIDAsIC8vIGNhbmNlbGxhYmxlCi0gICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5j
UmVhZHlDYWxsYmFjayksCi0gICAgICAgIGNhbGxiYWNrRGF0YSk7Ci19Ci0KLXZvaWQgQ3JlZGVu
dGlhbEJhY2tpbmdTdG9yZTo6c3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50
aWFsKQotewotICAgIENTdHJpbmcgdXRmOFBhc3N3b3JkID0gY3JlZGVudGlhbC5wYXNzd29yZCgp
LnV0ZjgoKTsKLSAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBuZXdTZWNyZXRWYWx1ZSA9IGFkb3B0
R1JlZihzZWNyZXRfdmFsdWVfbmV3KHV0ZjhQYXNzd29yZC5kYXRhKCksIHV0ZjhQYXNzd29yZC5s
ZW5ndGgoKSwgInRleHQvcGxhaW4iKSk7Ci0KLSAgICBzZWNyZXRfc2VydmljZV9zdG9yZSgKLSAg
ICAgICAgMCwgLy8gVGhlIGRlZmF1bHQgU2VjcmV0U2VydmljZS4KLSAgICAgICAgU0VDUkVUX1ND
SEVNQV9DT01QQVRfTkVUV09SSywKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJv
bUNoYWxsZW5nZShjaGFsbGVuZ2UsIGNyZWRlbnRpYWwpLmdldCgpLAotICAgICAgICBTRUNSRVRf
Q09MTEVDVElPTl9ERUZBVUxULAotICAgICAgICBfKCJXZWJLaXRHVEsrIHBhc3N3b3JkIiksCi0g
ICAgICAgIG5ld1NlY3JldFZhbHVlLmdldCgpLAotICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQot
ICAgICAgICAwLCAvLyBjYWxsYmFjawotICAgICAgICAwKTsgLy8gZGF0YQotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDIwZGE5YTE1N2ZiYzE5NmU2Mjg3MDQyMmFjZTllZmU4OTc0OGVlNmQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSUdBTElB
IFMuTC4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIENyZWRlbnRpYWxC
YWNraW5nU3RvcmVfaAotCi0jaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCi1jbGFzcyBDcmVkZW50
aWFsQmFja2luZ1N0b3JlIHsKLVdURl9NQUtFX05PTkNPUFlBQkxFKENyZWRlbnRpYWxCYWNraW5n
U3RvcmUpOwotcHVibGljOgotICAgIGZyaWVuZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVk
ZW50aWFsQmFja2luZ1N0b3JlKCk7Ci0gICAgdmlydHVhbCB+Q3JlZGVudGlhbEJhY2tpbmdTdG9y
ZSgpIHsgfQotCi0gICAgdHlwZWRlZiB2b2lkICgqQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxi
YWNrKShjb25zdCBDcmVkZW50aWFsJiwgdm9pZCogZGF0YSk7Ci0KLSAgICB2b2lkIGNyZWRlbnRp
YWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFs
Rm9yQ2hhbGxlbmdlQ2FsbGJhY2ssIHZvaWQqIGRhdGEpOwotICAgIHZvaWQgc3RvcmVDcmVkZW50
aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENy
ZWRlbnRpYWwmKTsKLXByaXZhdGU6Ci0gICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpIHsgfQot
fTsKLQotQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpOwot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDcmVkZW50aWFsQmFja2luZ1N0
b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM1ZTVhMDVmYTQ5MTk1ZmIzMGJmNjlkZWQ1NjJkNTQzYjhiNjEw
MTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKLXsKLSAgICAvLyBG
SVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgotICAgIHJldHVybiAiIjsKLX0KLQotY29u
c3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKLXsKLSAgICAvLyBGSVhNRTogU2hv
dWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgotICAgIHJldHVybiAiZW5fdXMiOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGY4ZTg3M2E5M2VjYTY4MTNlNzVjMzBkY2VkMGU0ZmQ2
MDU1NTkwZmMuLmNjNDVlYmYzZjRmN2FmOTJhNTEwMjA5NWM3MWI3MDE4NGRjMzQ2ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC00OSw2ICs0OSw3IEBAIGxpYndlYmtpdGd0a19AV0VC
S0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9s
YV9DUFBGCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKIAkk
KHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJChq
YXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCSQod2Via2l0Z3RrX2NwcGZsYWdzKSBcCiAJLWZu
by1zdHJpY3QtYWxpYXNpbmcgXApAQCAtNzksNiArODAsNyBAQCBsaWJ3ZWJraXRndGtfQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFf
TERGTAogCiBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJ
VEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQUREIDo9IFwKIAktbHB0aHJlYWQgXAorCWxp
YlBsYXRmb3JtR3RrLmxhIFwKIAlsaWJXZWJDb3JlLmxhIFwKIAlsaWJXZWJDb3JlUGxhdGZvcm0u
bGEgXAogCWxpYldlYkNvcmVNb2R1bGVzLmxhIFwKQEAgLTYyMCw3ICs2MjIsNyBAQCBQcm9ncmFt
c191bml0dGVzdHNfdGVzdGtleWV2ZW50c19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCiAKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29weWFuZHBhc3RlX1NPVVJDRVMg
PSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1ZlcnNpb25pbmcuYwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfQ0ZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2ViS2l0L2d0ay9w
by9QT1RGSUxFUy5pbgppbmRleCBiMTcwMDFhOGI0MWVlODlkZDJhYzc0NzQ3YzJiNTE0MWEzODY2
NjNiLi5mZDk2MWJiZDg1NjE3MTUzN2E3YWZhZjJmNzY1YjQzYjBjY2Y3N2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw4ICsxLDggQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMg
d2hpY2ggY29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5ncy4KLS4uLy4uL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0Vycm9yc0d0ay5jcHAKLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCi0uLi8uLi9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvRXJyb3JzR3Rr
LmNwcAorLi4vLi4vUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorLi4v
Li4vUGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisuLi8uLi9QbGF0Zm9ybS9n
dGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50
R3RrLmNwcAogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRl
eCAwODExMjhiMzc2NzZhMWVkMzU5ZTFjODg4MjY5Njc0MTRiNWY5MmM5Li5mZTlkYTBmNTAzNzkz
YTljNTMyNWMxZDg5NDA3MDk2ZDQ3YTRjZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtOCw2
ICs4LDcgQEAgbGliX0xUTElCUkFSSUVTICs9IFwKICMgV2UgbmVlZCB0byBtYWtlIHN1cmUgcGx1
Z2luIHByb2Nlc3MgaXMgYWx3YXlzIGJ1aWx0IHdpdGggZ3RrMiwgYmVjYXVzZSBwbHVnaW5zIGxp
a2UgZmxhc2gKICMgc3RpbGwgdXNlIGd0azIuIFNpbmNlIHdlYmNvcmUgd2FzIGJ1aWx0IHdpdGgg
Z3RrMywgd2UgbmVlZCB0byBidWlsZCB3ZWJjb3JlZ3RrIHNvdXJjZXMgYWdhaW4gd2l0aCBndGsy
CiBub2luc3RfTFRMSUJSQVJJRVMgKz0gXAorCWxpYlBsYXRmb3JtR3RrMi5sYSBcCiAJbGliV2Vi
Q29yZUd0azIubGEKIAogbGliZXhlY19QUk9HUkFNUyArPSBcCkBAIC0xMjYsNiArMTI3LDcgQEAg
bGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQ
SV9NSU5PUl9WRVJTSU9OQF9sYV9DUFAKIAktREVOQUJMRV9QTFVHSU5fUFJPQ0VTUz0xIFwKIAkk
KHdlYmNvcmVfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRm
b3JtZ3RrX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCSQoQ0xV
VFRFUl9DRkxBR1MpIFwKIAkkKENPVkVSQUdFX0NGTEFHUykgXApAQCAtMTc5LDYgKzE4MSw3IEBA
IGVuZGlmCiAKIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQUREICs9IFwKIAlsaWJqYXZhc2NyaXB0
Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQC5sYSBcCisJbGliUGxhdGZvcm1HdGsubGEgXAogCWxpYldlYkNvcmVET00ubGEg
XAogCWxpYldlYkNvcmVHdGsubGEgXAogCSQoQ0FJUk9fTElCUykgXApAQCAtNDQ2LDYgKzQ0OSw0
MyBAQCBQcm9ncmFtc19XZWJLaXRXZWJQcm9jZXNzX0xEQUREID0gXAogCSQoR1RLX1VOSVhfUFJJ
TlRJTkdfTElCUykgXAogCSQoTElCU09VUF9MSUJTKQogCitsaWJQbGF0Zm9ybUd0azJfbGFfU09V
UkNFUyA9IFwKKwkkKHBsYXRmb3JtZ3RrX3NvdXJjZXMpCisKK2xpYlBsYXRmb3JtR3RrMl9sYV9D
WFhGTEFHUyA9IFwKKwkkKFNZTUJPTF9WSVNJQklMSVRZX0lOTElORVMpIFwKKwkkKGdsb2JhbF9j
eHhmbGFncykKKworbGliUGxhdGZvcm1HdGsyX2xhX0NGTEFHUyA9IFwKKwkkKFNZTUJPTF9WSVNJ
QklMSVRZKSBcCisJJChnbG9iYWxfY2ZsYWdzKQorCitsaWJQbGF0Zm9ybUd0azJfbGFfQ1BQRkxB
R1MgPSBcCisJLURCVUlMRElOR19XRUJLSVQgXAorCS1ER1RLX0FQSV9WRVJTSU9OXzI9MSBcCisJ
JChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKKwkkKHdlYmNvcmVn
dGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCisJJChqYXZhc2NyaXB0
Y29yZV9jcHBmbGFncykgXAorCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKKwkkKENPVkVSQUdFX0NG
TEFHUykgXAorCSQoRU5DSEFOVF9DRkxBR1MpIFwKKwkkKEdBTUVQQURfQ0ZMQUdTKSBcCisJJChH
RU9DTFVFX0NGTEFHUykgXAorCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCisJJChHTElCX0NGTEFHUykg
XAorCSQoR1NUUkVBTUVSX0NGTEFHUykgXAorCSQoR1RLMl9DRkxBR1MpIFwKKwkkKExJQlNFQ1JF
VF9DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKSBcCisJJChMSUJYTUxfQ0ZMQUdTKSBcCisJ
JChMSUJYU0xUX0NGTEFHUykgXAorCSQoU1FMSVRFM19DRkxBR1MpIFwKKwkkKFVOSUNPREVfQ0ZM
QUdTKSBcCisJJChYUkVOREVSX0NGTEFHUykgXAorCSQoWFRfQ0ZMQUdTKQorCiBsaWJXZWJDb3Jl
R3RrMl9sYV9TT1VSQ0VTID0gXAogCSQod2ViY29yZWd0a19zb3VyY2VzKQogCkBAIC00NjMsNiAr
NTAzLDcgQEAgbGliV2ViQ29yZUd0azJfbGFfQ1BQRkxBR1MgPSBcCiAJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwK
KwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykg
XAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAkkKENPVkVSQUdFX0NGTEFHUykgXApAQCAtNTQw
LDYgKzU4MSw3IEBAIFByb2dyYW1zX1dlYktpdFBsdWdpblByb2Nlc3NfQ1BQRkxBR1MgPSBcCiAJ
JChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVn
dGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtZ3RrX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0
Y29yZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAkkKENBSVJPX0NGTEFH
UykgXApAQCAtNTc3LDYgKzYxOSw3IEBAIFByb2dyYW1zX1dlYktpdFBsdWdpblByb2Nlc3NfTERB
REQgKz0gXAogI2VuZGlmCiAKIFByb2dyYW1zX1dlYktpdFBsdWdpblByb2Nlc3NfTERBREQgKz0g
XAorCWxpYlBsYXRmb3JtR3RrMi5sYSBcCiAJbGliV2ViQ29yZVBsYXRmb3JtLmxhIFwKIAlsaWJX
ZWJDb3JlR3RrMi5sYSBcCiAJJChDQUlST19MSUJTKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCBiL1NvdXJjZS9XZWJL
aXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCmluZGV4IDcyY2Y2M2Yy
MGIyNWYzNWRlZjg1MmJlYmZhMGUyZDg5NTc5NDI3Y2IuLjkzNWI1NjUxYWRhNTRkZjNiZTA4ZGVm
NzQ0NmRhMTI0ZmZiM2I2ZjIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2Vu
ZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMv
Z2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCkBAIC0zNiw3ICszNiw3IEBAIHVzZSBGaWxl
OjpTcGVjOjpGdW5jdGlvbnM7CiBteSAkc3JjUm9vdCA9IHJlYWxwYXRoKEZpbGU6OlNwZWMtPmNh
dGZpbGUoZGlybmFtZShhYnNfcGF0aCgkMCkpLCAiLi4vLi4iKSk7CiBteSAkaW5jRnJvbVJvb3Qg
PSBhYnNfcGF0aCgkQVJHVlswXSk7CiBteSBAcGxhdGZvcm1QcmVmaXhlcyA9ICgiYmxhY2tiZXJy
eSIsICJjZiIsICJjaHJvbWl1bSIsICJjdXJsIiwgImVmbCIsICJndGsiLCAibWFjIiwgInF0Iiwg
InNvdXAiLCAidjgiLCAid2luIiwgInd4Iik7Ci1teSBAZnJhbWV3b3JrcyA9ICggIkphdmFTY3Jp
cHRDb3JlIiwgIldlYkNvcmUiLCAiV2ViS2l0MiIpOworbXkgQGZyYW1ld29ya3MgPSAoICJKYXZh
U2NyaXB0Q29yZSIsICJQbGF0Zm9ybSIsICJXZWJDb3JlIiwgIldlYktpdDIiKTsKIG15IEBza2lw
cGVkUHJlZml4ZXM7CiBteSBAZnJhbWV3b3JrSGVhZGVyczsKIG15ICRmcmFtZXdvcms7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBF
cnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxv
YWRTb3VwRXJyb3JzR3RrLmNwcAppbmRleCAwZDNmOWQzZWRkMTVkYmFiMjcyODRiZGZmZDhkMTc2
ZTg0MjIzZTkzLi45NmI5MWJhMTM0NjljYjI1YjhlNDJlZjRhZDVmNjBmMGNhMzViNDY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBF
cnJvcnNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rv
d25sb2FkU291cEVycm9yc0d0ay5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJEb3dubG9hZFNvdXBFcnJvcnMuaCIKIAotI2luY2x1ZGUgPFdlYkNv
cmUvRXJyb3JzR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRXJyb3JzR3RrLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXgg
OTVkNzZhYmQwOGI3OTYwMjU2ZTZhOGVjZGNkZDZkMmQzODU1MTU3Ny4uNTViMWJiYTQ3NTBmMzg4
MGJjNGE4NzE1NWE3YzY4OWMxMjZmMDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCkBAIC0zNiw5ICszNiw5IEBAIE9CSkNfQ0xBU1MgTlNW
aWV3OwogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UUtleUV2ZW50PgogI2VsaWYgUExB
VEZPUk0oR1RLKQotI2luY2x1ZGUgPEdPd25QdHJHdGsuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nv
bXBvc2l0aW9uUmVzdWx0cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrSW5wdXRNZXRob2RGaWx0
ZXIuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9Db21wb3NpdGlvblJlc3VsdHMuaD4KKyNpbmNsdWRl
IDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrSW5wdXRNZXRo
b2RGaWx0ZXIuaD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2VsaWYgUExB
VEZPUk0oRUZMKQogI2luY2x1ZGUgPEV2YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0
aXZlV2ViTW91c2VFdmVudC5oCmluZGV4IGRkZTViMzYyZTNkMjUxZWZjZjYxNTZkZDg1ZTRkNDIw
NDk2OTllOGUuLmQ1ODg4MjJjYjg4MTRiNTAwMWIzNjNlZjU0ZjY5YTZhZWY1ZmE1ZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaApAQCAtMzQsNyArMzQs
NyBAQCBPQkpDX0NMQVNTIE5TVmlldzsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPHFl
dmVudC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPEdPd25QdHJHdGsuaD4KKyNp
bmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBH
ZGtFdmVudDsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCBmYWU5ZTk2YmUyZDZk
NmI2NGE0YTU4YmNkYzBjOGNjNjA2MTE1NTI2Li45MWU4MGFkYmQ4MjViOWE4MDEyMGM3YzdlMGUw
NWVjZjE1NTQyNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2Vi
V2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2
ZW50LmgKQEAgLTM0LDcgKzM0LDcgQEAgT0JKQ19DTEFTUyBOU1ZpZXc7CiAjZWxpZiBQTEFURk9S
TShRVCkKICNpbmNsdWRlIDxxZXZlbnQuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRl
IDxHT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgogdHlwZWRl
ZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVk
ZSA8RXZhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVu
dENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJz
R3RrLmNwcAppbmRleCAzOTY5ZTBjODY1ZWRlMDIyYmVhNTlhMTZiYjYyODZlMDFhYTg0OWZlLi4w
ODdlNzk0OGQ3NzllYWJkYmUzYmY3NzQ0NWVjMmY5ZWJhNDEyNTM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApAQCAtMjksMTAgKzI5LDEw
IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0RhdGFPYmplY3RHdGsuaD4K
KyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
cmFnRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNv
bnRleHRDYWlyby5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggMDg1ODE1YzQyZDQ3
N2IxMmVkZjk2ZDE1Njg5MjZhOWZmOGFmZTZjNy4uMTIzNDIwODBkOTIyMDQwMDMzNGM1YzIyOTdh
OTRiM2Q0MGQzY2IxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJF
dmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFdlYkV2ZW50RmFjdG9yeV9oCiAKICNp
bmNsdWRlICJXZWJFdmVudC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRz
Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAKIHR5cGVkZWYg
dW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggYmY2MTYyNDBhMDFmYmYzODk4
MDE3MTI3OGE4YjY2N2FjYzhhNmU4MS4uM2IxMmMzNmEwOWM2NDA3MWMxMzJlMTRiYmVhYzRjZDcy
OTA2NDJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmNwcApAQCAtMzgsOSArMzgsOSBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBvcHVwTWVudVByb3h5R3RrLmgiCisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TmFt
ZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQy
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA5ZmYyMTRlOTAyNmZlNzI1NDFjMDMzNGNh
ZWJhZjlkOTNmOTE5MGZlLi44NDc0MjY4MTQzYjg5MDFlMGQzZmQwOWY5ZjVmMzcyZWY2NjYwZjdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMjMsOCArMjMsOCBAQAog
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJXS1Jl
dGFpblB0ci5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCisjaW5jbHVkZSA8UGxh
dGZvcm0vR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRl
bnRpYWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2Fk
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNw
cAppbmRleCBlOGE0ZGM3YzZkZDM1YmI5M2FkMjFmNDY5NmI0ZTdiZDZkNzYxYTc4Li40ZTMzYTA1
MTJlYmFhYjExMTc3NDMwNDJhYTEzNTdmMTU4Mzc0NWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCkBAIC0yNSw3ICsyNSw3
IEBACiAjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFVSSVJlcXVl
c3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9FcnJvcnNHdGsu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcAppbmRleCBkYzQ4
YjFjMDExYWMwN2QzZDkxMjBmYWYyYTZhYjQ5OGMyYThhMGQwLi4zZDRiYTYwMDU0NDE4ZTcxNGM3
M2VhZjMwMzUzMDkyZjMxMzE0MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiV2Vi
S2l0RXJyb3IuaCIKIAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0Vycm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0Vycm9yc0d0ay5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwCmluZGV4IDA2OGEyOGNkZGM1
YjA0YTBjZjI1NGVkYWVmODQzOTFkZDQ5ZjQ2NjIuLmNhZTZiZjNiNjhmN2NkM2ZiMzQxNjEzZmI2
MmUyNmE1MGRmMGYwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNp
bmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HdGtV
dGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4K
ICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5jcHAKaW5kZXggZWRkZTI4OWRlZGI0
ZjczNTA0YWZhNzE3YmFmZmViNjI0NmFjMmM3MC4uMDhiOWIzNDUyOTcyYzhkYzM0OGM1ZjNhMDhj
Yjc4MGVmMGI2OWY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0U2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFNldHRpbmdzLmNwcApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnRHdGsuaD4KKyNpbmNsdWRlIDxQ
bGF0Zm9ybS9Vc2VyQWdlbnRHdGsuaD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IDBmMDkxNzU1NGVmN2Q1YmYy
YzFlODA3YmJhMzBmNjBkNTk5NmI4ODYuLjQxMzlkMDlhM2Y4MjJhMTBiOTdhYmIyZWE5NmU3OTAz
MDE5NjNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVSUNsaWVudC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRp
ZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDIz
MjBlMWMzYzFlYmJlZjMzODIyOGRiYmY0NjE4YmQzMzZmN2ZhZjEuLmY3Y2IzNjc1MzU2Mzg5OGIy
MjE0NTYzYTRkZjdiZDU2ODk4MmQ0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC01Niw5ICs1Niw5IEBACiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3RrLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9E
cmFnSWNvbi5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQ
bGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+
CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggMjM0NGY4OTRkZjMzZTBkMzc1NGFhZjFhOTQzNjI2NDhh
MjFjNWZiZC4uMDk5MDFmNmZmNzcwMWMxZWE3OGZkNTEwNWQyMWFjNDAwM2M1NTBlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcApAQCAtNDEsMTggKzQxLDE4IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViVmlld0Jh
c2VJbnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkR3RrLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRHdGsu
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaD4KKyNpbmNsdWRl
IDxQbGF0Zm9ybS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRHJhZ0ljb24u
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0v
R3RrQ2xpY2tDb3VudGVyLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0
Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vUGFzdGVib2FyZEhlbHBl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Ry
YWdJY29uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HdGtDbGlja0NvdW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0RyYWdBbmREcm9w
SGVscGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVk
ZSA8Z2RrL2dkay5oPgpAQCAtNjcsNyArNjcsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCi0jaW5jbHVkZSA8V2Vi
Q29yZS9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg+CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKaW5kZXggOGI4N2MxNTIyMDJh
NjI5ZWE0N2YwMWE0MmJmZGVkYjcxNDBiZTVkYS4uNDBhNDA5MDEzOWY1YzZmNDE5YWRkMjllMGU2
OGY2Zjk1NjA2NTg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKQEAgLTIz
LDggKzIzLDggQEAKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3
VGVzdC5jcHAKaW5kZXggN2U3ZWIwMTY3NTgyMWE1YWIyZTNkYTQyY2MyNWU2MGFlMTcxOGI5YS4u
ZDgwZDI0NGYzYjExZWNjNjY1NTE1MTk5MGY2M2I5NWNkNGRiNDY4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApA
QCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR093blB0ckd0
ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KIAogV2ViVmlld1Rlc3Q6Oldl
YlZpZXdUZXN0KCkKICAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVm
X3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAppbmRleCBlZDJiNGRm
OGYwZGE0NTkwODg0MzU4MzlkYjZkMzhjYTljOTcwMDNmLi41YWRmMjU4ZGE4YWM0NDIyYmE0ODdj
YTBjNDUwYjA4MjI2NDZiNTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNp
bmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4K
ICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlH
dGsuY3BwCmluZGV4IGViYTNjYWI0MmZlOGExMDVlNjZjOTY3ZWFjOGUyNGZjNTM3NWY4NGIuLjlm
Y2IxOGEwNmE4Y2E2MTMxNDM2NjVlNDQ1NjliZDc0ZmJjNWRhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCkBAIC0z
Miw4ICszMiw4IEBACiAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRp
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNp
bmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCBmNDVk
N2UzNGIxZDMzMjU5NGUwMjI1NWFmMmQ4NjhkODhjNTVhNDMxLi43ZDI5MWE3MjQ4MTVjZmFhZjg4
ODA3NDkxMTU3NWNhYzVjODNiNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnRH
dGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9Vc2VyQWdlbnRHdGsuaD4KICNpbmNsdWRlIDxndGsv
Z3RreC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKaW5kZXggYTQxODM5YTNlYjk3
NjRlZDQ3MzRhZjJlOTc2ODQ3N2U5MGVmMzQyNy4uNzlkMDE4YjIxZjMwMjY4YjE4YmJlYjBhODI3
NWY3MThiMGRmZDhjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUg
Ik5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJQb3B1cEl0ZW0uaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxp
dGllcy5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oCmluZGV4IDRiMzM1YmNk
ZTY1NDU5MDBiMDQyMzk3NjVhMmFhMTIzM2RmN2RhMzQuLmUxNjc1ZDFlZDA3ZjgzMzM3MzczNzE3
MTQyYmUzNDdiZTNkY2NkMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgV2Vi
UG9wdXBNZW51UHJveHlHdGtfaAogCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0d0a1BvcHVwTWVudS5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1Bv
cHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNw
cAppbmRleCBhMTg0Njg3OGIzMTA0NjE0YjdhMjZmYzI3Y2VhYjc5YTFhNGI5OGUwLi45M2QzNDZj
ZGM0Mzk1ZGI5ZTUxNjFhZWFlZDk0YmFkOGMwMjQ3ZjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05l
dHNjYXBlUGx1Z2luWDExLmNwcApAQCAtNDEsOCArNDEsOCBAQAogI2lmbmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgogI2luY2x1ZGUgPGd0ay9ndGt4Lmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxQbGF0Zm9y
bS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8Z2RrL2dka3guaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0d0a1ZlcnNpb25pbmcuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChIQVZF
X0VDT1JFX1gpCiAjaW5jbHVkZSA8RWNvcmVfWC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRy
YWdDbGllbnRHdGsuY3BwCmluZGV4IGQ4MDhlZDQ0YmZhMTY4YWY1OGM4MTU3NTE3ZGE3Yjk4ZDIz
MDBkMjguLjY2ODhhODBmMTc2ZTI5YTdlY2UwYjYyODA1NTY1OTg2MDJhMTY3MmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdD
bGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4KKyNp
bmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdE
YXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xp
ZW50R3RrLmNwcAppbmRleCA2N2ZkYzFmNDQ0ZWFkNmJhOGNhNzkxODg0ZmQ1ODE5ZjgyNGYwYzgx
Li44OTJhYzFhMjc5MTBhYzYwNTg3OWVhZGRjMThjYThiYjU0MTE5ZGQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGll
bnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVk
ZSA8UGxhdGZvcm0vRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL1Bhc3RlYm9h
cmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NL
ZXlib2FyZENvZGVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVy
cm9yc0d0ay5jcHAKaW5kZXggODM3NWQwNjdhZWIxMmQ4OTJhZWZhNjhlNjZlYTYzM2M5ODgyNjNj
Yy4uNWQwNWExNjAzZGRlZGFkNGNkN2YzOGQ4ZWIyYzZiZWY5MGViZDZjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9X
ZWJFcnJvcnNHdGsuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgor
I2luY2x1ZGUgPFBsYXRmb3JtL0Vycm9yc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VFcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCA4YjBkYjZlY2MzZTM4
NDIwNzlmZWRhOWE0MTlhNzI5NGVjOTJmMmQyLi4zNjQ4N2IzZDY5ZDBlMTgzYzdkNTQxNjFlMzJh
OTZiYjgzZThhZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIldl
YlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgPFBsYXRm
b3JtL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJv
YXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCmluZGV4IDBmMDdkNzRi
Y2E1YThkNjQ0ZGE2OTA0NzcwNDMxMTUyZWNhNGFmMzMuLjYxYWVlNDkyYzQ4ZWY3ZTYwOGY4MmNi
OTNiZWNlNGMzOTlhZWExYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0yOSw3
ICsyOSw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9FcnJvcnNHdGsuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg3MmU5MzZiM2U1
OWIxN2M3ZjBiYzFjZWYzMDUzMjg2ODIwNWFjYTAuLjg1ODgwMGEzNzZhMTczNjgxYTc2YzkxMGUz
NWQ0Mjk0M2E3ZGQ0NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMy0wMi0yMCAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxh
dGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgdGhlIHBs
YXRmb3JtIGNwcGZsYWdzIHRvIHRoZSBDUFBGTEFHUyBsaXN0cyBmb3IgdGhlIGludGVybmFscwor
ICAgICAgICBsaWJyYXJ5IGFuZCBEdW1wUmVuZGVyVHJlZS4gQWRqdXN0IHRoZSBwYXRoIHRvIEd0
a1ZlcnNpb25pbmcuYyB0aGF0J3MgYnVpbHQgd2l0aAorICAgICAgICBEdW1wUmVuZGVyVHJlZS4g
VGhlIGxhdHRlciBpcyBub3cgYWxzbyBsaW5rZWQgYWdhaW5zdCB0aGUgbGliUGxhdGZvcm1HdGsg
bGlicmFyeS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtOiBBZGQgdGhl
IHBsYXRmb3JtIGNwcGZsYWdzIHRvIHRoZSBDUFBGTEFHUyBsaXN0IGZvciB0aGUKKyAgICAgICAg
VGVzdFdlYktpdEFQSSdzIFRlc3RHVEsgYmluYXJ5LiBBZGp1c3QgcGF0aHMgdG8gdHdvIHNvdXJj
ZSBmaWxlcyB0aGF0IGFyZSBub3cgcGxhY2VkCisgICAgICAgIGluIFNvdXJjZS9QbGF0Zm9ybS9n
dGsuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcDog
SW5jbHVkZSB0aGUgR093blB0ckd0ayBoZWFkZXIgdGhyb3VnaCBhCisgICAgICAgIGZvcndhcmRp
bmcgaGVhZGVyIHRoYXQncyBub3cgcG9pbnRpbmcgaW50byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgor
CiAyMDEzLTAyLTIwICBUYWthc2hpIFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLiBBZGQgbXlzZWxmIHRvIHdhdGNoIGxpc3RzLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBl
Njc0YWUxNzA2OWRmNWI1NGMzNzkyYzE4OTA0Njk2MThmYzE4MmJmLi4zZmMyOWNjNDY5MGY0ODI1
MDQzZDJlYzAxYjAwOGE1OGRkZTc5ZDk2IDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5h
bQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtODUsNiArODUsNyBAQCBsaWJXZWJDb3Jl
SW50ZXJuYWxzX2xhX0NQUEZMQUdTID0gXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJJCh3ZWJj
b3JlX2NwcGZsYWdzKSBcCiAJJCh3ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybWd0
a19jcHBmbGFncykgXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAkkKENBSVJPX0NG
TEFHUykgXAogCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCkBAIC0xMTUsNyArMTE2LDggQEAgUHJvZ3Jh
bXNfRHVtcFJlbmRlclRyZWVfQ1BQRkxBR1MgPSBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrIFwKIAkkKGph
dmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCi0JJCh3ZWJjb3JlX2NwcGZsYWdzKQorCSQod2ViY29y
ZV9jcHBmbGFncykgXAorCSQocGxhdGZvcm1ndGtfY3BwZmxhZ3MpCiAKIGlmIFRBUkdFVF9YMTEK
IFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZMQUdTICs9IFwKQEAgLTE2OCw3ICsxNzAsNyBA
QCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAogCVRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1dv
cmtRdWV1ZUl0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVy
c2lvbmluZy5jCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKIAogUHJvZ3Jh
bXNfRHVtcFJlbmRlclRyZWVfQ1hYRkxBR1MgPSBcCiAJJChnbG9iYWxfY3h4ZmxhZ3MpIFwKQEAg
LTE4NSw2ICsxODcsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DRkxBR1MgPSBcCiBQcm9n
cmFtc19EdW1wUmVuZGVyVHJlZV9MREFERCA9IFwKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VC
S0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5s
YSBcCiAJbGlid2Via2l0Z3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRH
VEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKKwlsaWJQbGF0Zm9ybUd0ay5sYSBcCiAJbGliV2Vi
Q29yZVBsYXRmb3JtLmxhIFwKIAlsaWJXZWJDb3JlTW9kdWxlcy5sYSBcCiAJbGliV2ViQ29yZUlu
dGVybmFscy5sYSBcCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxl
LmFtIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQppbmRleCA3ZDc2NWU0OWIy
OTdmYmRiNWM1MjIxMWQzNzgzODRmM2U4NWJmOGMyLi5mYzU5Y2MwNTJmMzY0MDk3Y2RiNWU1ZmIz
ODc3ZGI3OTZkN2E4ZmVlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KQEAgLTczLDYg
KzczLDcgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX0NQUEZMQUdTID0gXAogCSQo
UHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0V1RGX0NQUEZMQUdTKSBcCiAJJCh3ZWJjb3JlX2Nw
cGZsYWdzKSBcCiAJJCh3ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybWd0a19jcHBm
bGFncykgXAogCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCiAJJChHTElCX0NGTEFHUykgXAogCSQoR1RL
X0NGTEFHUykgXApAQCAtOTQsOCArOTUsOCBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RH
dGtfTERGTEFHUyA9IFwKIFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19TT1VSQ0VTID0g
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJ
L2NvbmZpZy5oIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZp
bHRlci5jcHAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1X
ZWJWaWV3R3RrLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3JtV2ViVmlld0d0
ay5jcHAKaW5kZXggYmE2ZmFiMDQ4NDBjMTI3N2M2ZmIxMzE3N2YxMjI2Njc1Njc0N2MyMS4uMTM5
NmRhOWY5YWNlZWRjZmU2YTk4YjFhZjY5YWU1YWQyZDM4MmU5YSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAKLSNpbmNs
dWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDBiY2QwNjhhZDQ3
MGU0ZmU5YTJjODIyMzg4NjI3NjJhMTc4NjU4ZmQuLjM3YzQxMTk3NDgyMjE0N2Q0YWYwOTViNmU1
MTJhOTIwMjAwNWY0ZTkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAxMy0wMi0yMCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMg
ZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBEZWZpbmUgcmVxdWlyZWQgcGxhdGZv
cm0gbGlicmFyeSB2YXJpYWJsZXMuIEluY2x1ZGUgdGhlIHBsYXRmb3JtIGxpYnJhcnkKKyAgICAg
ICAgbWFrZWZpbGUuIEluY2x1ZGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGJ1aWx0IHNvdXJjZXMg
aW50byB0aGUgbWFpbiBidWlsdCBzb3VyY2VzIGxpc3QuCisgICAgICAgICogY29uZmlndXJlLmFj
OiBUaGUgVXNlckFnZW50IGhlYWRlciBpbnB1dCBmaWxlIGNoYW5nZWQgaXRzIGxvY2F0aW9uLiBU
aGUgdGFyZ2V0IGZpbGUKKyAgICAgICAgaXMgbm93IHBsYWNlZCBpbnRvIERlcml2ZWRTb3VyY2Vz
L1BsYXRmb3JtLgorCiAyMDEzLTAyLTE5ICBDbGF1ZGlvIFNhYXZlZHJhICA8Y3NhYXZlZHJhQGln
YWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9H
TlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IGU0MjBlNGI2MWFjZTE4OGZkYjhk
OGZmOThkMDFiZTNmMzM0NmVhYjEuLmFiNTlmM2E2YmZlNzc5MDIwMWE3OWE2NmUyNWU2ODQ4MzVk
MGUyNGYgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBA
IC03Myw2ICs3Myw5IEBAIGphdmFzY3JpcHRjb3JlX2J1aWx0X3NvdXJjZXMgOj0KIGphdmFzY3Jp
cHRjb3JlX2J1aWx0X25vc291cmNlcyA6PQogbGxpbnRfbm9zb3VyY2VzIDo9CiBvZmZsaW5lYXNt
X25vc291cmNlcyA6PQorcGxhdGZvcm1ndGtfYnVpbHRfc291cmNlcyA6PQorcGxhdGZvcm1ndGtf
Y3BwZmxhZ3MgOj0KK3BsYXRmb3JtZ3RrX3NvdXJjZXMgOj0KIHdlYmNvcmVfcGxhdGZvcm1fc291
cmNlcyA6PQogd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgOj0KIHdlYmNvcmVfc3ZnX2J1aWx0X3Nv
dXJjZXMgOj0KQEAgLTE3NSw2ICsxNzgsNyBAQCBFWFRSQV9ESVNUICs9IFwKICMgSW5jbHVkZSBt
b2R1bGUgbWFrZWZpbGVzCiBpbmNsdWRlIFNvdXJjZS9XVEYvR05VbWFrZWZpbGUuYW0KIGluY2x1
ZGUgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCitpbmNsdWRlIFNvdXJjZS9Q
bGF0Zm9ybS9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQogaW5jbHVkZSBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCkBAIC0xOTQsNiAr
MTk4LDcgQEAgaW5jbHVkZSBUb29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCiBCVUlM
VF9TT1VSQ0VTICs9IFwKIAkkKGphdmFzY3JpcHRjb3JlX2J1aWx0X3NvdXJjZXMpIFwKIAkkKGph
dmFzY3JpcHRjb3JlX2J1aWx0X25vc291cmNlcykgXAorCSQocGxhdGZvcm1ndGtfYnVpbHRfc291
cmNlcykgXAogCSQod2ViY29yZV9idWlsdF9zb3VyY2VzKSBcCiAJJCh3ZWJjb3JlX2J1aWx0X25v
c291cmNlcykgXAogCSQod2ViY29yZV9zdmdfYnVpbHRfc291cmNlcykgXApkaWZmIC0tZ2l0IGEv
Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDBjMzBlZTU1ODY1MGE4MTE4MzA3MjBh
NjcwZjllOTIyYmRlNDI2MmUuLjgzOTk3ZTFmOTRmMzMzNzA2NDRiMDRlZjllYmYyYjdjNGMxYmZi
MTIgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTM2LDcg
KzM2LDcgQEAgbTRfaW5jbHVkZShbU291cmNlL2F1dG90b29scy9TZXR1cEF1dG9tYWtlLm00XSkK
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIEFDX0NPTkZJR19GSUxFUyhbR05VbWFr
ZWZpbGVdKQotQUNfQ09ORklHX0ZJTEVTKFtEZXJpdmVkU291cmNlcy9XZWJDb3JlL1VzZXJBZ2Vu
dEd0ay5oOlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbl0pCitB
Q19DT05GSUdfRklMRVMoW0Rlcml2ZWRTb3VyY2VzL1BsYXRmb3JtL1VzZXJBZ2VudEd0ay5oOlNv
dXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW5dKQogQUNfQ09ORklHX0ZJTEVTKAog
ICAgIFtTb3VyY2UvSmF2YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059LnBjOlNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0ay5w
Yy5pbgogICAgICAgICBTb3VyY2UvV2ViS2l0L2d0ay9KU0NvcmUtJHtXRUJLSVRHVEtfQVBJX1ZF
UlNJT059LmdpcjpTb3VyY2UvV2ViS2l0L2d0ay9KU0NvcmUuZ2lyLmluXSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189734</attachid>
            <date>2013-02-22 03:01:34 -0800</date>
            <delta_ts>2013-02-22 12:53:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110330-20130222115751.patch</filename>
            <type>text/plain</type>
            <size>1279446</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAzZWEzODZjMWMxZjJh
MmY1NWU0MDlmZmNkZTFjODRiMDE1MmY3OTQyLi45NjFkZmNiZmYxMWUwOGRmMmEyZTRkYTUyMjcz
ZmUwZWU5MmM5ZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0wMi0yMiAg
WmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIE1v
dmUgR1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQbGF0Zm9ybQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBHVEst
c3BlY2lmaWMgV2ViQ29yZSBzb3VyY2UgZmlsZXMgaGVyZSwgaW50byBTb3VyY2UvUGxhdGZvcm0v
Z3RrLiBUaGVzZSBmaWxlcworICAgICAgICBhcmUgYnVpbHQgaW50byB0aGUgbGliUGxhdGZvcm0g
c3RhdGljIGxpYnJhcnkuIE5vdGUgdGhhdCB0aGlzIHBhdGNoIG9ubHkgYnJpbmdzIHRoZQorICAg
ICAgICBHVEstc3BlY2lmaWMgZmlsZXMgb3ZlciBmcm9tIFdlYkNvcmUgaW50byBQbGF0Zm9ybS4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBJbmNsdWRlIHRoZSBHTlVtYWtlZmlsZS5saXN0
LmFtIGZpbGUuIEFkZCB0aGUgbmV3IHN1YmRpcmVjdG9yaWVzIHRvCisgICAgICAgIHRoZSBwbGF0
Zm9ybSBsaWJyYXJ5IGNwcGZsYWdzLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFk
ZGVkLiBMaXN0cyBhbGwgdGhlIGJ1aWxkIHRhcmdldHMgdGhhdCBhcmUgbm93IHVuZGVyIFNvdXJj
ZS9QbGF0Zm9ybS9ndGsuCisgICAgICAgICogZ3RrLzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmls
ZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5kZXIgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
LgorICAgICAgICAqIGd0ay9hdWRpby86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRoYXQg
d2VyZSBwcmV2aW91c2x5IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay4K
KyAgICAgICAgKiBndGsvZ3JhcGhpY3MvOiBOb3cgY29udGFpbnMgYWxsIHRoZSBmaWxlcyB0aGF0
IHdlcmUgcHJldmlvdXNseSB1bmRlciBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsuCisgICAgICAgICogZ3RrL25ldHdvcmsvOiBOb3cgY29udGFpbnMgYWxsIHRoZSBmaWxlcyB0
aGF0IHdlcmUgcHJldmlvdXNseSB1bmRlciBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2d0ay4KKyAgICAgICAgKiBndGsvdGV4dC86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRo
YXQgd2VyZSBwcmV2aW91c2x5IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3Rr
LgorCisyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBCdWlsZCBsaWJXZWJDb3JlR3RrLmxhIGFzIGxpYlBsYXRmb3JtLmxhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1NzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBBZGRlZC4gRGVmaW5lIGJ1aWxkIHJ1bGVzIGZvciB0aGUgbGliUGxhdGZvcm0ubGEg
bGlicmFyeSwKKyAgICAgICAgdGFraW5nIHJ1bGVzIGZvciB0aGUgbGliV2ViQ29yZUd0ay5sYSBs
aWJyYXJ5IGFzIHRoZSBiYXNlLgorCiAyMDEzLTAyLTIxICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgZGVwcmVjYXRlZCBX
ZWJDb21wb3NpdG9yU3VwcG9ydDo6Y3JlYXRlTGF5ZXJUcmVlVmlldygpIGRlY2xhcmF0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZTZlOGEwOGJlZTM4MjgwNzJjMjA1MzFmZDFhNGY4ZTc4YmFhNjFkNS4uZDcw
OTFmOWIwN2ZhZTdlMTdhNjkzYjlhODdlZGMzMTBjMDFjNjE3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDU5IEBACisyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5j
b20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJv
bSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSB2YXJpb3VzIGNw
cGZsYWdzIGxpc3RpbmdzIHRoYXQgYXJlIG5vdyBlbXB0eS4KKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOiBSZW1vdmUgYnVpbGQgdGFyZ2V0cyBmb3Igc291cmNlIGZpbGVzIHRoYXQgd2Vy
ZSBtb3ZlZCB0byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay86
IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRvIFNvdXJjZS9QbGF0Zm9ybS9ndGsuCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vZ3RrLzogTW92ZWQgYWxsIHRoZSBzb3VyY2UgZmlsZXMgdG8g
U291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvOiBNb3ZlZCBhbGwgdGhlIHNvdXJjZSBmaWxlcyB0byBTb3VyY2UvUGxhdGZvcm0vZ3RrL2dy
YXBoaWNzLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ3RrLzogTW92ZWQgYWxsIHRoZSBz
b3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrLgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvZ3RrLzogTW92ZWQgYWxsIHRoZSBzb3VyY2UgZmlsZXMgdG8gU291cmNlL1Bs
YXRmb3JtL2d0ay90ZXh0LgorCisyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNl
a0BnbWFpbC5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIGxpYldlYkNvcmVQbGF0Zm9ybS5s
YSwgYnVpbGRpbmcgaXRzIHNvdXJjZXMgaW50byBsaWJQbGF0Zm9ybS5sYQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGJ1aWxkIHJ1bGVzIGZv
ciB0aGUgbGliV2ViQ29yZVBsYXRmb3JtLmxhLCBidWlsZGluZyBpdHMgc291cmNlcyBhcyBhIHBh
cnQKKyAgICAgICAgb2YgdGhlIG5ldyBsaWJQbGF0Zm9ybS5sYSBsaWJyYXJ5LiBUaGlzIGFnYWlu
IGJyaW5ncyBhbGwgdGhlIGNvbXBpbGVkIHNvdXJjZSBjb2RlCisgICAgICAgIHVuZGVyIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtIChhbmQgc29tZSBvdGhlciBwbGF0Zm9ybS1zcGVjaWZpYyBjb2Rl
IHRoZSBHVEsgcG9ydAorICAgICAgICB1c2VzKSBpbnRvIG9uZSBsaWJyYXJ5LiBUaGlzIHdpbGwg
ZWFzZSB0aGUgcHJvY2VzcyBvZiBtb3ZpbmcgYWxsIHRoZXNlIHNvdXJjZSBmaWxlcworICAgICAg
ICBmcm9tIHRoZSBTb3VyY2UvV2ViQ29yZSBkaXJlY3RvcnkgdG8gdGhlIFNvdXJjZS9QbGF0Zm9y
bSBkaXJlY3RvcnksIHN0YXJ0aW5nIHdpdGgKKyAgICAgICAgdGhlIEdUSy1zcGVjaWZpYyBjb2Rl
IGFuZCBzb21lZGF5IGZpbmlzaGluZyBieSBicmluZ2luZyBvdmVyIGFsbCBvZiB0aGUgcGxhdGZv
cm0KKyAgICAgICAgbGF5ZXIgY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBuZXcg
ZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNl
a0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVHdGsubGEgYXMg
bGliUGxhdGZvcm0ubGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMDU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEdpdmVuIHRoZSBpbnRlbnRpb24gb2YgdGhpcyBwYXRjaCBpcyB0byBqdXN0IHJlbmFt
ZSBsaWJXZWJLaXRHVEsubGEgdG8gbGliUGxhdGZvcm0ubGEKKyAgICAgICAgYW5kIGRlZmluZSBp
dHMgYnVpbGQgcnVsZXMgdW5kZXIgU291cmNlL1BsYXRmb3JtLCB0aGVzZSBjaGFuZ2VzIHNpbXBs
eSByZW5hbWUgdGhlCisgICAgICAgIHdlYmNvcmVndGtfc291cmNlcyBhbmQgd2ViY29yZWd0a19j
cHBmbGFncyB0byBwbGF0Zm9ybV9zb3VyY2VzIGFuZCBwbGF0Zm9ybV9jcHBmbGFncywKKyAgICAg
ICAgcmVzcGVjdGl2ZWx5LiBUaGUgYnVpbGQgcnVsZXMgZm9yIGxpYldlYktpdEdUSy5sYSBhcmUg
YWxzbyByZW1vdmVkLCBhbG1vc3QgaWRlbnRpY2FsCisgICAgICAgIHJ1bGVzIGFyZSB1c2VkIGZv
ciB0aGUgbGliUGxhdGZvcm0ubGEgbGlicmFyeSBpbiBTb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZp
bGUuYW0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW06CisKIDIwMTMtMDIt
MjEgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBT
cGxpdCBTZWxlY3RvckNoZWNrZXIncyBmYXN0LWNoZWNraW5nIGxvZ2ljIGludG8gaXRzIG93biBj
bGFzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBmN2VhNGUyMDU4OTlkOTVlY2M5OGJhNmM1ZDJhMzRh
ZDg4OGFlYjlhLi40Y2Y1ZGVjODI1N2ZlZmFlZTA3MzU0MDU5NDFlMjY0NTc1ODc5MWRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAg
PHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZp
YyBwbGF0Zm9ybSBmaWxlcyBmcm9tIFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDMzMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkanVz
dCB0aGUgcGF0aCB0byB0aGUgR3RrVmVyc2lvbmluZy5jIHNvdXJjZSBmaWxlLiBSZW1vdmUgYW4g
dW5uZWNlc3NhcnkKKyAgICAgICAgcmVmZXJlbmNlIHRvIHRoZSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsgZGlyZWN0b3J5IHdoaWNoIGlzIG5vdyBlbXB0eS4KKworMjAxMy0wMi0yMiAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIFJlbW92
ZSBsaWJXZWJDb3JlUGxhdGZvcm0ubGEsIGJ1aWxkaW5nIGl0cyBzb3VyY2VzIGludG8gbGliUGxh
dGZvcm0ubGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06IFJlbW92ZSBsaWJXZWJDb3JlUGxhdGZvcm0ubGEgcmVmZXJlbmNl
LCByZWxhdGVkIGNvZGUgaXMgbm93CisgICAgICAgIGJ1aWx0IGludG8gbGliUGxhdGZvcm0ubGEu
CisKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVHdGsubGEgYXMgbGliUGxhdGZvcm0ubGEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDU3NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06IFJlbmFtaW5nIHdlYmNvcmVndGtfY3BwZmxhZ3MgdG8gcGxhdGZvcm1fY3BwZmxhZ3Ms
IGxpYldlYkNvcmVHdGsubGEgdG8gbGliUGxhdGZvcm0ubGEuCisKIDIwMTMtMDItMjEgIEdlb3Jn
ZSBNY0NvbGxpc3RlciAgPGdlb3JnZS5tY2NvbGxpc3RlckBnbWFpbC5jb20+CiAKICAgICAgICAg
W0dUS10gUmVtb3ZlIHN1YnJlc291cmNlIGxlYWtzIGZyb20gV2ViS2l0MSBhbmQgV2ViS2l0Mgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvcG8vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9ndGsvcG8vQ2hhbmdlTG9nCmluZGV4IDhkZDNkZDhhMTBiNmVlN2ZiZjA5YTJlYTE2YWIyZDRl
NTZhYTBlMzguLjdiMzhjMjJjZTcyNjBiMTZhYzU4NWNiYmM0OTIzNzMyOWQ0MzA3ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9wby9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0wMi0yMiAgWmFuIERvYmVy
c2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR1RLLXNw
ZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogQWRq
dXN0IHBhdGhzIHRvIHZhcmlvdXMgZmlsZXMgdGhhdCB3ZXJlIG1vdmVkIHRvIFNvdXJjZS9QbGF0
Zm9ybS9ndGsuCisKIDIwMTMtMDItMTkgIE1pyJl1IE1vbGRvdmFuICA8ZHVtb2xAZ25vbWUub3Jn
PgogCiAgICAgICAgIFJvbWFuaWFuIHRyYW5zbGF0aW9uIGZvciBXZWJLaXRHdGsrIEhFQUQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBhYTM4YTliMWU5MjUwYjYzOGNmYmFiMTI2YTEwY2RlNDYyNGRkZjdjLi45ODBm
YmNlYTU2NjcyZTFiNjFmZmVhYmNmOTQwMGVjY2EzYzQyZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjMgQEAKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNv
bT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZpYyBwbGF0Zm9ybSBmaWxlcyBmcm9t
IFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBmb3J3YXJkaW5nIGhlYWRlciBnZW5lcmF0aW9uIHRvb2wgbXVzdCBu
b3cgYWxzbyB0YWtlIHRoZSBQbGF0Zm9ybSBmcmFtZXdvcmsgaW50bworICAgICAgICBhY2NvdW50
IGFzIHRoYXQncyB3aGVyZSB0aGUgR1RLLXNwZWNpZmljIHNvdXJjZSBmaWxlcyBhcmUgcGxhY2Vk
IG5vdy4gSW5jbHVzaW9ucyBvZgorICAgICAgICBoZWFkZXJzIHRoYXQgYXJlIG5vdyBsb2NhdGVk
IHRoZXJlIGFyZSBhZGp1c3RlZCB0byBpbmNsdWRlIGZyb20gUGxhdGZvcm0gaW5zdGVhZCBvZiBX
ZWJDb3JlLgorCisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMu
cGw6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3Rr
LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oOgorICAgICAg
ICAqIFNoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50Lmg6CisgICAgICAgICogU2hhcmVkL05hdGl2
ZVdlYldoZWVsRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3Rr
LmNwcDoKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHA6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaW50T3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVSUNsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3Bw
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcDoK
KworMjAxMy0wMi0yMiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisg
ICAgICAgIFtHVEtdIFJlbW92ZSBsaWJXZWJDb3JlUGxhdGZvcm0ubGEsIGJ1aWxkaW5nIGl0cyBz
b3VyY2VzIGludG8gbGliUGxhdGZvcm0ubGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlbW92ZSBsaWJXZWJDb3JlUGxh
dGZvcm0ubGEgcmVmZXJlbmNlLCByZWxhdGVkIGNvZGUgaXMgbm93IGJ1aWx0CisgICAgICAgIGlu
dG8gbGliUGxhdGZvcm0ubGEuIEFkZCB0aGUgR0FNRVBBRF9DRkxBR1MgdG8gdGhlIGxpc3Qgb2Yg
Q1BQRkxBR1MgdGhlIGxpYlBsYXRmb3JtR3RrMgorICAgICAgICBsaWJyYXJ5IHJlcXVpcmVzIHRv
IGFkanVzdCB0byB0aGUgY2hhbmdlcy4KKworMjAxMy0wMi0yMiAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgbGliV2ViQ29yZUd0ay5s
YSBhcyBsaWJQbGF0Zm9ybS5sYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwNTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVuYW1pbmcgd2ViY29yZWd0a18oY3BwZmxh
Z3N8c291cmNlcykgdG8gcGxhdGZvcm1fKGNwcGZsYWdzfHNvdXJjZXMpLAorICAgICAgICBsaWJX
ZWJDb3JlR3RrLmxhIHRvIGxpYlBsYXRmb3JtLmxhLCBsaWJXZWJDb3JlR3RrMi5sYSB0byBsaWJQ
bGF0Zm9ybUd0ay5sYS4KKwogMjAxMy0wMi0yMSAgRGltYSBHb3JiaWsgIDxkZ29yYmlrQGFwcGxl
LmNvbT4KIAogICAgICAgICBRdWlja1RpbWUgcGx1Z2luIGRvZXNuJ3QgbG9hZCB3aGVuIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUuYW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzNiMTk2NGU0YmQyOGY3OTI1NDAwODQ2OTQ2NmEyNWI3NzhmOGYzYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmlsZS5hbQpAQCAtMCwwICsxLDU0IEBA
CitpbmNsdWRlICQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlzdC5hbQor
CitwbGF0Zm9ybV9jcHBmbGFncyArPSBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0
ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpbyBcCisJLUkkKHNyY2Rp
cikvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcyBcCisJLUkkKHNyY2RpcikvU291cmNlL1Bs
YXRmb3JtL2d0ay9uZXR3b3JrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL3Rl
eHQKKworbm9pbnN0X0xUTElCUkFSSUVTICs9IFwKKwlsaWJQbGF0Zm9ybS5sYQorCitsaWJQbGF0
Zm9ybV9sYV9TT1VSQ0VTID0gXAorCSQocGxhdGZvcm1fc291cmNlcykKKworbGliUGxhdGZvcm1f
bGFfQ1hYRkxBR1MgPSBcCisJJChTWU1CT0xfVklTSUJJTElUWV9JTkxJTkVTKSBcCisJJChnbG9i
YWxfY3h4ZmxhZ3MpCisKK2xpYlBsYXRmb3JtX2xhX0NGTEFHUyA9IFwKKwkkKFNZTUJPTF9WSVNJ
QkxJVFkpIFwKKwkkKGdsb2JhbF9jZmxhZ3MpCisKK2xpYlBsYXRmb3JtX2xhX0NQUEZMQUdTID0g
XAorCS1EQlVJTERJTkdfV2ViQ29yZSBcCisJLURCVUlMRElOR19XRUJLSVQgXAorCSQoZ2xvYmFs
X2NwcGZsYWdzKSBcCisJJCh3ZWJjb3JlX2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybV9jcHBmbGFn
cykgXAorCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKwktZm5vLXN0cmljdC1hbGlhc2lu
ZyBcCisJJChISUxET05fQ1BQRkxBR1MpIFwKKwkkKENBSVJPX0NGTEFHUykgXAorCSQoQ0xVVFRF
Ul9DRkxBR1MpIFwKKwkkKENPVkVSQUdFX0NGTEFHUykgXAorCSQoRU5DSEFOVF9DRkxBR1MpIFwK
KwkkKEZSRUVUWVBFX0NGTEFHUykgXAorCSQoR0FJTF9DRkxBR1MpIFwKKwkkKEdBTUVQQURfQ0ZM
QUdTKSBcCisJJChHRU9DTFVFX0NGTEFHUykgXAorCSQoR0xJQl9DRkxBR1MpIFwKKwkkKEdTVFJF
QU1FUl9DRkxBR1MpIFwKKwkkKEdUS19DRkxBR1MpIFwKKwkkKEhJTERPTl9DRkxBR1MpIFwKKwkk
KExJQlNFQ1JFVF9DRkxBR1MpIFwKKwkkKExJQlNPVVBfQ0ZMQUdTKSBcCisJJChMSUJYTUxfQ0ZM
QUdTKSBcCisJJChMSUJYU0xUX0NGTEFHUykgXAorCSQoU1FMSVRFM19DRkxBR1MpIFwKKwkkKFVO
SUNPREVfQ0ZMQUdTKSBcCisJJChYQ09NUE9TSVRFX0NGTEFHUykgXAorCSQoWERBTUFHRV9DRkxB
R1MpIFwKKwkkKFhSRU5ERVJfQ0ZMQUdTKSBcCisJJChYVF9DRkxBR1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVt
YWtlZmlsZS5saXN0LmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiY2I0OTgxZmViYzQxMzA0YTdkMWQ2NjAxMTYz
OGMxN2MzYmFiODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtMCwwICsxLDEwNSBAQAorcGxhdGZvcm1fc291cmNlcyArPSBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0Vy
cm9yc0d0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9MYW5n
dWFnZUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Vc2Vy
QWdlbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaCBcCisJU291cmNlL1BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0
ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAgXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
Q29udGV4dE1lbnVHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRl
bUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2Jq
ZWN0R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0RyYWdJY29uLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
RXZlbnRMb29wR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNw
cCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuY3BwIFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5k
RHJvcEhlbHBlci5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVy
LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvR3RrVXRpbGl0aWVzLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL0dSZWZQdHJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAgXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a1BsdWdpbldpZGdldC5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmggXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrVmVyc2lvbmluZy5jIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAgXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5G
cmFtZVNjcm9sbGJhckd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsu
Y3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtTW91c2VFdmVudEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1T
Y3JlZW5HdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0
ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUnVu
TG9vcEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmggXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbFZp
ZXdHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmggXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Nv
dW5kR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9hdWRpby9BdWRpb0J1c0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3Mv
Q29sb3JHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRp
bGl0aWVzLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxp
dGllcy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0Z1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9J
Y29uR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUJ1ZmZlckd0
ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VHdGsuY3BwIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFBvaW50R3RrLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9JbnRSZWN0R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKKworaWYgVEFSR0VU
X1gxMQorcGxhdGZvcm1fc291cmNlcyArPSBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRn
ZXRCYWNraW5nU3RvcmVYMTEuY3BwCitpZiBVU0VfT1BFTkdMCitwbGF0Zm9ybV9zb3VyY2VzICs9
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCitlbmRp
ZiAjIEVORCBVU0VfT1BFTkdMCitlbmRpZiAjIEVORCBUQVJHRVRfWDExCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzBmYmRhMDg3MzQwYzBi
ZjYxYjFkYjFkNzcwYzg5YzdlZDgzMDI0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtR3RrLmgiCisKKyNpbmNs
dWRlICJBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bT4gQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
QXN5bmNGaWxlU3lzdGVtR3RrKCkpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbTo6b3BlbkZp
bGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRl
bnRpZmllciwgRmlsZVN5c3RlbVR5cGUsIGJvb2wsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjYWxs
YmFja3MtPmRpZEZhaWwoTk9UX1NVUFBPUlRFRF9FUlIpOworfQorCit2b2lkIEFzeW5jRmlsZVN5
c3RlbTo6ZGVsZXRlRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJp
bmcmIHN0b3JhZ2VJZGVudGlmaWVyLCBGaWxlU3lzdGVtVHlwZSB0eXBlLCBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgY2FsbGJhY2tzLT5kaWRGYWlsKE5PVF9TVVBQT1JURURfRVJSKTsKK30KKworQXN5
bmNGaWxlU3lzdGVtR3RrOjpBc3luY0ZpbGVTeXN0ZW1HdGsoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0FzeW5jRmlsZVN5c3RlbUd0azo6fkFzeW5jRmlsZVN5c3RlbUd0aygpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6Om1v
dmUoY29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjb3B5KGNvbnN0
IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVtb3ZlKGNvbnN0IEtVUkwm
IHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJl
bW92ZVJlY3Vyc2l2ZWx5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVGaWxl
KGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVEaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0
aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0ZpbGVT
eXN0ZW1HdGs6OmZpbGVFeGlzdHMoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6ZGlyZWN0b3J5RXhpc3RzKGNvbnN0IEtVUkwm
IHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJl
YWREaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK3Zv
aWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50
KiBjbGllbnQsIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5
c3RlbUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5ZjU3MzcwODFjYTY4NGYwMTEzMjFjNzViYThkZmU1ZGE2
NTVjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5
c3RlbUd0ay5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2hh
bmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisK
KyNpZm5kZWYgIEFzeW5jRmlsZVN5c3RlbUd0a19oCisjZGVmaW5lICBBc3luY0ZpbGVTeXN0ZW1H
dGtfaAorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7CisKK2NsYXNzIEFzeW5jRmlsZVN5
c3RlbUd0ayA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0geworcHVibGljOgorICAgIEFzeW5jRmls
ZVN5c3RlbUd0aygpOworICAgIHZpcnR1YWwgfkFzeW5jRmlsZVN5c3RlbUd0aygpOworCisgICAg
dmlydHVhbCB2b2lkIG1vdmUoY29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVz
dGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAg
IHZpcnR1YWwgdm9pZCBjb3B5KGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRl
c3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVJlY3Vyc2l2ZWx5
KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7
CisgICAgdmlydHVhbCB2b2lkIHJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVG
aWxlKGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVEaXJlY3RvcnkoY29u
c3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGZpbGVFeGlzdHMoY29uc3QgS1VSTCYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlyZWN0b3J5RXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJlYWREaXJlY3RvcnkoY29uc3Qg
S1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVudCosIGNvbnN0IEtV
UkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gIEFzeW5jRmlsZVN5
c3RlbUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYz
YjZjZjhmMmVkYzU5OThmMTVhMDFhZWJjNTcyMmUzNTk2NjQ0YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApAQCAtMCwwICsxLDMzOCBAQAor
LyoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNsaXBib2FyZEd0ay5oIgorCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNs
dWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBDbGlwYm9hcmREYXRhVHlwZSB7Cisg
ICAgQ2xpcGJvYXJkRGF0YVR5cGVUZXh0LAorICAgIENsaXBib2FyZERhdGFUeXBlTWFya3VwLAor
ICAgIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVSTCwK
KyAgICBDbGlwYm9hcmREYXRhVHlwZUltYWdlLAorICAgIENsaXBib2FyZERhdGFUeXBlVW5rbm93
bgorfTsKKworUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2Fy
ZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCit7CisgICAgcmV0
dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rp
c3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQp
LCBmcmFtZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZShD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBm
cmFtZSkKK3sKKyAgICByZXR1cm4gQ2xpcGJvYXJkR3RrOjpjcmVhdGUocG9saWN5LCBkcmFnRGF0
YS0+cGxhdGZvcm1EYXRhKCksIERyYWdBbmREcm9wLCBmcmFtZSk7Cit9CisKK0NsaXBib2FyZEd0
azo6Q2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUpCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBDb3B5
QW5kUGFzdGUpCisgICAgLCBtX2RhdGFPYmplY3QoRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJk
KGNsaXBib2FyZCkpCisgICAgLCBtX2NsaXBib2FyZChjbGlwYm9hcmQpCisgICAgLCBtX2ZyYW1l
KGZyYW1lKQoreworfQorCitDbGlwYm9hcmRHdGs6OkNsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kgcG9saWN5LCBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QsIENs
aXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwgRnJhbWUqIGZyYW1lKQorICAgIDogQ2xpcGJvYXJk
KHBvbGljeSwgY2xpcGJvYXJkVHlwZSkKKyAgICAsIG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQor
ICAgICwgbV9jbGlwYm9hcmQoMCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK0NsaXBi
b2FyZEd0azo6fkNsaXBib2FyZEd0aygpCit7CisgICAgaWYgKG1fZHJhZ0ltYWdlKQorICAgICAg
ICBtX2RyYWdJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworfQorCitzdGF0aWMgQ2xpcGJvYXJk
RGF0YVR5cGUgZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29uc3QgU3RyaW5n
JiByYXdUeXBlKQoreworICAgIFN0cmluZyB0eXBlKHJhd1R5cGUuc3RyaXBXaGl0ZVNwYWNlKCkp
OworCisgICAgLy8gVHdvIHNwZWNpYWwgY2FzZXMgZm9yIElFIGNvbXBhdGliaWxpdHkKKyAgICBp
ZiAodHlwZSA9PSAiVGV4dCIgfHwgdHlwZSA9PSAidGV4dCIpCisgICAgICAgIHJldHVybiBDbGlw
Ym9hcmREYXRhVHlwZVRleHQ7CisgICAgaWYgKHR5cGUgPT0gIlVSTCIpCisgICAgICAgIHJldHVy
biBDbGlwYm9hcmREYXRhVHlwZVVSTDsKKworICAgIC8vIEZyb20gdGhlIE1hYyBwb3J0OiBJZ25v
cmUgYW55IHRyYWlsaW5nIGNoYXJzZXQgLSBKUyBzdHJpbmdzIGFyZQorICAgIC8vIFVuaWNvZGUs
IHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgY2hhcnNldCBpc3N1ZS4KKyAgICBpZiAodHlwZSA9PSAi
dGV4dC9wbGFpbiIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIpKQorICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OworICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwi
IHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9odG1sOyIpKQorICAgICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVNYXJrdXA7CisgICAgaWYgKHR5cGUgPT0gIkZpbGVzIiB8fCB0eXBlID09ICJ0
ZXh0L3VyaS1saXN0IiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvdXJpLWxpc3Q7IikpCisgICAg
ICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q7CisKKyAgICAvLyBOb3QgYSBrbm93
biB0eXBlLCBzbyBqdXN0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIHRleHQgcG9ydGlvbi4KKyAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOworfQorCit2b2lkIENsaXBib2FyZEd0azo6
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3sKKyAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIENsaXBib2FyZERh
dGFUeXBlIHR5cGUgPSBkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlU3Ry
aW5nKTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJ
TGlzdDoKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgorICAgICAgICBtX2RhdGFPYmpl
Y3QtPmNsZWFyVVJJTGlzdCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlTWFya3VwOgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyTWFya3VwKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OgorICAgICAgICBtX2Rh
dGFPYmplY3QtPmNsZWFyVGV4dCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2Fy
ZERhdGFUeXBlSW1hZ2U6CisgICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJJbWFnZSgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVW5rbm93bjoKKyAgICAgICAg
bV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJv
YXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworfQorCisK
K3ZvaWQgQ2xpcGJvYXJkR3RrOjpjbGVhckFsbERhdGEoKQoreworICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZG8gbm90
IGNsZWFyIGZpbGVuYW1lcy4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjOiAiVGhlIGNsZWFyRGF0YSgp
IG1ldGhvZAorICAgIC8vIGRvZXMgbm90IGFmZmVjdCB3aGV0aGVyIGFueSBmaWxlcyB3ZXJlIGlu
Y2x1ZGVkIGluIHRoZSBkcmFnLCBzbyB0aGUgdHlwZXMKKyAgICAvLyBhdHRyaWJ1dGUncyBsaXN0
IG1pZ2h0IHN0aWxsIG5vdCBiZSBlbXB0eSBhZnRlciBjYWxsaW5nIGNsZWFyRGF0YSgpIChpdCB3
b3VsZCAKKyAgICAvLyBzdGlsbCBjb250YWluIHRoZSAiRmlsZXMiIHN0cmluZyBpZiBhbnkgZmls
ZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZykuIgorICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJB
bGxFeGNlcHRGaWxlbmFtZXMoKTsKKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAgICAgICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRD
b250ZW50cyhtX2NsaXBib2FyZCk7Cit9CisKK1N0cmluZyBDbGlwYm9hcmRHdGs6OmdldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKSBjb25zdAoreworICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJk
KTsKKworICAgIENsaXBib2FyZERhdGFUeXBlIHR5cGUgPSBkYXRhT2JqZWN0VHlwZUZyb21IVE1M
Q2xpcGJvYXJkVHlwZSh0eXBlU3RyaW5nKTsKKyAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRh
VHlwZVVSSUxpc3QpCisgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVyaUxpc3QoKTsKKyAg
ICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVSTCkKKyAgICAgICAgcmV0dXJuIG1fZGF0
YU9iamVjdC0+dXJsKCk7CisgICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAp
CisgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPm1hcmt1cCgpOworICAgIGlmICh0eXBlID09
IENsaXBib2FyZERhdGFUeXBlVGV4dCkKKyAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dGV4
dCgpOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIENsaXBib2FyZEd0azo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAg
ICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIENsaXBib2FyZERhdGFUeXBlIHR5
cGUgPSBkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlU3RyaW5nKTsKKyAg
ICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QgfHwgdHlwZSA9PSBDbGlwYm9h
cmREYXRhVHlwZVVSTCkgeworICAgICAgICBtX2RhdGFPYmplY3QtPnNldFVSSUxpc3QoZGF0YSk7
CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9h
cmREYXRhVHlwZU1hcmt1cCkgeworICAgICAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChkYXRh
KTsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgfSBlbHNlIGlmICh0eXBlID09IENsaXBi
b2FyZERhdGFUeXBlVGV4dCkgeworICAgICAgICBtX2RhdGFPYmplY3QtPnNldFRleHQoZGF0YSk7
CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBzdWNjZXNzOwor
fQorCitMaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEd0azo6dHlwZXMoKSBjb25zdAorewor
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlw
Ym9hcmRUeXBlc1JlYWRhYmxlKQorICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigp
OworCisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7
CisKKyAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzOworICAgIGlmIChtX2RhdGFPYmplY3Qt
Pmhhc1RleHQoKSkgeworICAgICAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4iKTsKKyAgICAgICAg
dHlwZXMuYWRkKCJUZXh0Iik7CisgICAgICAgIHR5cGVzLmFkZCgidGV4dCIpOworICAgIH0KKwor
ICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKQorICAgICAgICB0eXBlcy5hZGQoInRl
eHQvaHRtbCIpOworCisgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7CisgICAg
ICAgIHR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICB0eXBlcy5hZGQoIlVSTCIp
OworICAgIH0KKworICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc0ZpbGVuYW1lcygpKQorICAgICAg
ICB0eXBlcy5hZGQoIkZpbGVzIik7CisKKyAgICByZXR1cm4gdHlwZXM7Cit9CisKK1Bhc3NSZWZQ
dHI8RmlsZUxpc3Q+IENsaXBib2FyZEd0azo6ZmlsZXMoKSBjb25zdAoreworICAgIGlmIChwb2xp
Y3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkKKyAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVh
dGUoKTsKKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9h
cmQpOworCisgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUo
KTsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5m
aWxlbmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7
IGkrKykKKyAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzW2ld
LCBGaWxlOjpBbGxDb250ZW50VHlwZXMpKTsKKyAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgp
OworfQorCit2b2lkIENsaXBib2FyZEd0azo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiBpbWFn
ZSwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIHNldERyYWdJbWFnZShpbWFnZSwg
MCwgbG9jYXRpb24pOworfQorCit2b2lkIENsaXBib2FyZEd0azo6c2V0RHJhZ0ltYWdlRWxlbWVu
dChOb2RlKiBlbGVtZW50LCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCit7CisgICAgc2V0RHJh
Z0ltYWdlKDAsIGVsZW1lbnQsIGxvY2F0aW9uKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OnNl
dERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIE5vZGUqIGVsZW1lbnQsIGNvbnN0IEludFBv
aW50JiBsb2NhdGlvbikKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkSW1hZ2VXcml0
YWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fZHJhZ0ltYWdlKQorICAgICAgICBtX2RyYWdJbWFnZS0+cmVtb3ZlQ2xpZW50
KHRoaXMpOworICAgIG1fZHJhZ0ltYWdlID0gaW1hZ2U7CisgICAgaWYgKG1fZHJhZ0ltYWdlKQor
ICAgICAgICBtX2RyYWdJbWFnZS0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgbV9kcmFnTG9jID0g
bG9jYXRpb247CisgICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gZWxlbWVudDsKK30KKworRHJhZ0lt
YWdlUmVmIENsaXBib2FyZEd0azo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBsb2NhdGlvbikg
Y29uc3QKK3sKKyAgICBsb2NhdGlvbiA9IG1fZHJhZ0xvYzsKKworICAgIGlmIChtX2RyYWdJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+
aW1hZ2UoKSk7CisgICAgaWYgKG1fZHJhZ0ltYWdlRWxlbWVudCAmJiBtX2ZyYW1lKQorICAgICAg
ICByZXR1cm4gbV9mcmFtZS0+bm9kZUltYWdlKG1fZHJhZ0ltYWdlRWxlbWVudC5nZXQoKSk7CisK
KyAgICByZXR1cm4gMDsgLy8gV2UgZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNy
ZWF0ZSBhIGRyYWcgaW1hZ2UsIHVzZSB0aGUgZGVmYXVsdCBpY29uLgorfQorCitzdGF0aWMgQ2Fj
aGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgLy8gQXR0
ZW1wdCB0byBwdWxsIENhY2hlZEltYWdlIGZyb20gZWxlbWVudAorICAgIEFTU0VSVChlbGVtZW50
KTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4o
cmVuZGVyZXIpOworICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSAmJiAhaW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlLT5jYWNoZWRJ
bWFnZSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjpkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCit7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRV
UkwodXJsLCBsYWJlbCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3Vw
KGVsZW1lbnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworCisgICAgQ2FjaGVk
SW1hZ2UqIGltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7CisgICAgaWYgKCFpbWFnZSB8
fCAhaW1hZ2UtPmlzTG9hZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVu
dC0+cmVuZGVyZXIoKSktPmdldEdka1BpeGJ1ZigpKTsKKyAgICBpZiAoIXBpeGJ1ZikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9kYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOwor
fQorCit2b2lkIENsaXBib2FyZEd0azo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGxhYmVsLCBGcmFtZSopCit7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCBs
YWJlbCk7CisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJv
YXJkKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlUmFuZ2UoUmFuZ2UqIHJhbmdlLCBG
cmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKHJhbmdlKTsKKworICAgIG1fZGF0YU9iamVjdC0+
c2V0VGV4dChmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKKyAgICBtX2RhdGFPYmpl
Y3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAocmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFu
Z2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQp
CisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndy
aXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworfQorCit2b2lkIENsaXBib2FyZEd0
azo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIG1fZGF0YU9iamVj
dC0+c2V0VGV4dCh0ZXh0KTsKKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVi
b2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250
ZW50cyhtX2NsaXBib2FyZCk7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkR3RrOjpoYXNEYXRhKCkKK3sK
KyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQ
YXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKKwor
ICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmhhc1RleHQoKSB8fCBtX2RhdGFPYmplY3QtPmhhc01h
cmt1cCgpCisgICAgICAgIHx8IG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpIHx8IG1fZGF0YU9i
amVjdC0+aGFzSW1hZ2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRHdGsuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWU5ZDYzY2U0ZjJjZThiYzExMmQwZjIwOTNlZTU4ODM5MzIyOGUzNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRHdGtfaAorI2RlZmluZSBD
bGlwYm9hcmRHdGtfaAorCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKKyNpbmNsdWRl
ICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBDYWNoZWRJbWFnZTsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBj
bGFzcyBQYXN0ZWJvYXJkSGVscGVyOworCisgICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJ
RSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQorICAgIC8vIENyZWF0
ZWQgZnJvbSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQgYnkgdGhlIGRvbQorICAgIGNs
YXNzIENsaXBib2FyZEd0ayA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRJbWFnZUNs
aWVudCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBjcmVhdGUoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRHdGso
cG9saWN5LCBjbGlwYm9hcmQsIGZyYW1lKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5LCBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QsIENsaXBib2FyZFR5cGUg
Y2xpcGJvYXJkVHlwZSwgRnJhbWUqIGZyYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGRhdGFPYmplY3QsIGNsaXBib2Fy
ZFR5cGUsIGZyYW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+Q2xpcGJvYXJkR3Rr
KCk7CisKKyAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZv
aWQgY2xlYXJBbGxEYXRhKCk7CisgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYp
IGNvbnN0OworICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jik7CisKKyAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKwor
ICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7
CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQm
KTsKKyAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3Qg
SW50UG9pbnQmKTsKKworICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2UoSW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFt
ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7
CisKKyAgICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKKworICAgICAgICBQYXNzUmVmUHRy
PERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoKSB7IHJldHVybiBtX2RhdGFPYmplY3Q7IH0KKyAg
ICAgICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVybiBtX2NsaXBib2FyZDsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSwgR3RrQ2xpcGJvYXJkKiwgRnJhbWUqKTsKKyAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2Fy
ZEFjY2Vzc1BvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiwgQ2xpcGJvYXJkVHlwZSwg
RnJhbWUqKTsKKworICAgICAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gbV9kYXRhT2JqZWN0Owor
ICAgICAgICBHdGtDbGlwYm9hcmQqIG1fY2xpcGJvYXJkOworICAgICAgICBGcmFtZSogbV9mcmFt
ZTsKKyAgICB9OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmMwZTc0NDZlMGVlZGUxMjViMTBjYTRhODJl
NjlhN2Y2NWEyNTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRVdGlsaXRpZXNHdGsuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtE
cmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCit7CisgICAgR2RrRHJhZ0FjdGlv
biBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKKyAgICBpZiAoY29y
ZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uTm9uZSkKKyAgICAgICAgcmV0dXJuIGdka0FjdGlvbjsK
KworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCisgICAgICAgIGdka0Fj
dGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IGdka0Fj
dGlvbik7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkKKyAgICAgICAg
Z2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9NT1ZFIHwg
Z2RrQWN0aW9uKTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQorICAg
ICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0xJ
TksgfCBnZGtBY3Rpb24pOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZh
dGUpCisgICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19B
Q1RJT05fUFJJVkFURSB8IGdka0FjdGlvbik7CisKKyAgICByZXR1cm4gZ2RrQWN0aW9uOworfQor
CitHZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09w
ZXJhdGlvbiBjb3JlQWN0aW9uKQoreworICAgIGlmIChjb3JlQWN0aW9uID09IERyYWdPcGVyYXRp
b25FdmVyeSB8fCBjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCisgICAgICAgIHJldHVy
biBHREtfQUNUSU9OX0NPUFk7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92
ZSkKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTU9WRTsKKyAgICBpZiAoY29yZUFjdGlvbiAm
IERyYWdPcGVyYXRpb25MaW5rKQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9MSU5LOworICAg
IGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZhdGUpCisgICAgICAgIHJldHVybiBH
REtfQUNUSU9OX1BSSVZBVEU7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+
KDApOworfQorCitEcmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oR2Rr
RHJhZ0FjdGlvbiBnZGtBY3Rpb24pCit7CisgICAgLy8gV2UgaGF2ZSBubyBnb29kIHdheSB0byBk
ZXRlY3QgRHJhZ09wZXJhdGlvbkV2ZXJ5IG90aGVyIHRoYW4KKyAgICAvLyB0byB1c2UgaXQgd2hl
biBhbGwgYXBwbGljYWJsZSBmbGFncyBhcmUgb24uCisgICAgaWYgKGdka0FjdGlvbiAmIEdES19B
Q1RJT05fQ09QWSAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01PVkUKKyAgICAgICAgJiYgZ2Rr
QWN0aW9uICYgR0RLX0FDVElPTl9MSU5LICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFU
RSkKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25FdmVyeTsKKworICAgIHVuc2lnbmVkIGlu
dCBhY3Rpb24gPSBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FD
VElPTl9DT1BZKQorICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkNvcHk7CisgICAgaWYg
KGdka0FjdGlvbiAmIEdES19BQ1RJT05fTU9WRSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVy
YXRpb25Nb3ZlOworICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0xJTkspCisgICAgICAg
IGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTGluazsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FD
VElPTl9QUklWQVRFKQorICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvblByaXZhdGU7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KGFjdGlvbik7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2
ZjYzNDY5ZTJiOGRlNDVjMDE3Nzc1ZjBiNDI5MmJkNmJhYzQ3NDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oCkBAIC0wLDAgKzEs
MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIENsaXBib2FyZFV0aWxpdGllc0d0a19oCisj
ZGVmaW5lIENsaXBib2FyZFV0aWxpdGllc0d0a19oCisKKyNpbmNsdWRlICJEcmFnQWN0aW9ucy5o
IgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHZGtEcmFn
QWN0aW9uIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKERyYWdPcGVyYXRpb24pOworR2Rr
RHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRp
b24pOworRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdB
Y3Rpb24pOworCit9CisKKyNlbmRpZiAvLyBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ1ZjIzYmI1OTZl
OGMyZWFlYjMyOTcxMGRmNDhlNDc0YzdlYzQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvbXBvc2l0
aW9uUmVzdWx0c19oCisjZGVmaW5lIENvbXBvc2l0aW9uUmVzdWx0c19oCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ29t
cG9zaXRpb25SZXN1bHRzIHsKKyAgICBDb21wb3NpdGlvblJlc3VsdHMoKQorICAgICAgICA6IGFz
c29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZhbHNlKQorICAgIHsKKyAgICB9
CisKKyAgICBDb21wb3NpdGlvblJlc3VsdHMoU3RyaW5nIHNpbXBsZVN0cmluZykKKyAgICAgICAg
OiBzaW1wbGVTdHJpbmcoc2ltcGxlU3RyaW5nKQorICAgICAgICAsIGFzc29jaWF0ZWRXaXRoUGVu
ZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIFJl
c3VsdHNJbmRpY2F0b3IgeyBXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24gfTsKKyAgICBD
b21wb3NpdGlvblJlc3VsdHMoUmVzdWx0c0luZGljYXRvcikKKyAgICAgICAgOiBhc3NvY2lhdGVk
V2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICBi
b29sIGNvbXBvc2l0aW9uVXBkYXRlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXNz
b2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGU7CisgICAgfQorCisgICAgLy8gU29t
ZSBzaW1wbGUgaW5wdXQgbWV0aG9kcyByZXR1cm4gYSBzdHJpbmcgZm9yIGFsbCBrZXlib2FyZCBl
dmVudHMuIFRoaXMKKyAgICAvLyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyB0aGUgc3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBrZXljb2RlLgorICAgIFN0cmluZyBzaW1wbGVTdHJpbmc7
CisKKyAgICBib29sIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOworfTsK
KworfQorCisjZW5kaWYgLy8gQ29tcG9zaXRpb25SZXN1bHRzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9D
b250ZXh0TWVudUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMwMDJjNGQ5ZmQ3ODJmOTI3MDRjNDk3NmM0
MzdlYTFmOWU1ZGRiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVHdGsuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29u
dGV4dE1lbnU6OkNvbnRleHRNZW51KCkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBH
VEtfTUVOVShndGtfbWVudV9uZXcoKSk7Cit9CisKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShj
b25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQorICAgIDogbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKG1lbnUpCit7Cit9CisKK0NvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQoreworICAg
IGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworfQorCit2b2lkIENvbnRleHRNZW51
OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKK3sKKyAgICBBU1NFUlQobV9wbGF0
Zm9ybURlc2NyaXB0aW9uKTsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBwbGF0Zm9ybUl0ZW0g
PSBHVEtfV0lER0VUKGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CisgICAgQVNT
RVJUKHBsYXRmb3JtSXRlbSk7CisKKyAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lk
Z2V0X2dldF9wYXJlbnQocGxhdGZvcm1JdGVtLmdldCgpKSkKKyAgICAgICAgZ3RrX2NvbnRhaW5l
cl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBwbGF0Zm9ybUl0ZW0uZ2V0KCkpOworCisg
ICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiksIHBsYXRmb3JtSXRlbS5nZXQoKSk7CisgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3Jt
SXRlbS5nZXQoKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRp
b24oUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKK3sKKyAgICBBU1NFUlQobWVudSk7Cisg
ICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9PSBtZW51KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KEdUS19XSURHRVQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSk7CisKKyAgICBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24gPSBtZW51OworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVu
dTo6cGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbjsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnJl
bGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKK3sKKyAgICBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBkZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24gPSAwOworCisgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworfQorCit1bnNpZ25lZCBD
b250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKTsKKworICAgIEdPd25QdHI8R0xpc3Q+IGNoaWxkcmVuKGd0a19jb250YWluZXJf
Z2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkpOworICAg
IHJldHVybiBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKK30KKworVmVjdG9yPENvbnRl
eHRNZW51SXRlbT4gY29udGV4dE1lbnVJdGVtVmVjdG9yKGNvbnN0IFBsYXRmb3JtTWVudURlc2Ny
aXB0aW9uIG1lbnUpCit7CisgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbT4gbWVudUl0ZW1WZWN0
b3I7CisKKyAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGls
ZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7CisgICAgaW50IGl0ZW1Db3VudCA9IGdfbGlzdF9s
ZW5ndGgoY2hpbGRyZW4uZ2V0KCkpOworICAgIG1lbnVJdGVtVmVjdG9yLnJlc2VydmVDYXBhY2l0
eShpdGVtQ291bnQpOworCisgICAgZm9yIChHTGlzdCogaXRlbSA9IGNoaWxkcmVuLmdldCgpOyBp
dGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgR3RrV2lkZ2V0KiB3aWRn
ZXQgPSBzdGF0aWNfY2FzdDxHdGtXaWRnZXQqPihpdGVtLT5kYXRhKTsKKyAgICAgICAgaWYgKCFH
VEtfSVNfTUVOVV9JVEVNKHdpZGdldCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bWVudUl0ZW1WZWN0b3IuYXBwZW5kKEdUS19NRU5VX0lURU0od2lkZ2V0KSk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1lbnVJdGVtVmVjdG9yOworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBw
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbihWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0
ZW1zKQoreworICAgIEd0a01lbnUqIG1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJNZW51SXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKHN1Yk1lbnVJdGVtc1tp
XS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKKyAgICAgICAgZ3RrX21lbnVfc2hlbGxf
YXBwZW5kKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBwbGF0Zm9ybUl0ZW0pOworICAgICAgICBndGtf
d2lkZ2V0X3Nob3cocGxhdGZvcm1JdGVtKTsKKyAgICB9CisgICAgcmV0dXJuIG1lbnU7Cit9CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3MGI1YmU2YmRmMGJkOWNmYzc3
OGNhMjA1ZGIyMzg3NTVjMzFlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDT05U
RVhUX01FTlVTKQorCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJD
b250ZXh0TWVudS5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2RlZmluZSBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
TiAid2Via2l0LWNvbnRleHQtbWVudSIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgY2hhciogZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihjb25zdCBDb250ZXh0
TWVudUFjdGlvbiYgYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
b3B5OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NPUFk7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJh
bWVJbk5ld1dpbmRvdzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3
V2luZG93OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NBVkU7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfR09fQkFDSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19HT19GT1JXQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3RvcDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TVE9QOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnUmVsb2FkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1JFRlJFU0g7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
Q1VUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfUEFTVEU7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGU6CisgICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfREVMRVRFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2VsZWN0QWxsOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9BTEw7CisgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgorICAgICAgICByZXR1cm4gMDsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX05POworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzoK
KyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PSzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z090aGVyOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX01JU1NJTkdfSU1BR0U7CisgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKKyAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19GSU5EOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViOgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTkQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
cGVuV2l0aERlZmF1bHRBcHBsaWNhdGlvbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVO
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX1pPT01fSU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tT3V0OgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fT1VUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
UERGQXV0b1NpemU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9GSVQ7CisgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1QREZOZXh0UGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19H
T19GT1JXQVJEOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgLy8gTmV3IHRhZ3MsIG5vdCBwYXJ0
IG9mIEFQSQorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6CisgICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3Bl
bGxpbmc6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1BFTExfQ0hFQ0s7CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxF
Q1RfRk9OVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfRk9OVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0JvbGQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfQk9MRDsKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0l0YWxpYzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19JVEFMSUM7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6CisgICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfVU5ERVJMSU5FOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQ09MT1I7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFMb29wOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJs
VG9DbGlwYm9hcmQ6CisgICAgICAgIC8vIE5vIGljb24gZm9yIHRoaXMuCisgICAgICAgIHJldHVy
biAwOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46Cisg
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRlVMTFNDUkVFTjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRp
b24gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKENvbnRleHRNZW51SXRlbVR5cGUg
dHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29s
IGVuYWJsZWQsIGJvb2wgY2hlY2tlZCkKK3sKKyAgICBpZiAodHlwZSA9PSBTZXBhcmF0b3JUeXBl
KQorICAgICAgICByZXR1cm4gR1RLX01FTlVfSVRFTShndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9u
ZXcoKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGFjdGlvbk5hbWUoZ19zdHJkdXBfcHJpbnRmKCJj
b250ZXh0LW1lbnUtYWN0aW9uLSVkIiwgYWN0aW9uKSk7CisgICAgR1JlZlB0cjxHdGtBY3Rpb24+
IHBsYXRmb3JtQWN0aW9uOworCisgICAgaWYgKHR5cGUgPT0gQ2hlY2thYmxlQWN0aW9uVHlwZSkg
eworICAgICAgICBwbGF0Zm9ybUFjdGlvbiA9IGFkb3B0R1JlZihHVEtfQUNUSU9OKGd0a190b2dn
bGVfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZS51dGY4KCkuZGF0YSgpLCAwLCBn
dGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0aW9uKGFjdGlvbikpKSk7CisgICAgICAgIGd0a190
b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04ocGxhdGZvcm1BY3Rpb24u
Z2V0KCkpLCBjaGVja2VkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGxhdGZvcm1BY3Rpb24gPSBh
ZG9wdEdSZWYoZ3RrX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRh
dGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihhY3Rpb24pKSk7CisgICAg
Z3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKHBsYXRmb3JtQWN0aW9uLmdldCgpLCBlbmFibGVkKTsK
KworICAgIEd0a01lbnVJdGVtKiBpdGVtID0gR1RLX01FTlVfSVRFTShndGtfYWN0aW9uX2NyZWF0
ZV9tZW51X2l0ZW0ocGxhdGZvcm1BY3Rpb24uZ2V0KCkpKTsKKyAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVChpdGVtKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9J
TlRFUihhY3Rpb24pKTsKKworICAgIHJldHVybiBpdGVtOworfQorCisvLyBFeHRyYWN0IHRoZSBB
Y3Rpb25UeXBlIGZyb20gdGhlIG1lbnUgaXRlbQorQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVu
dUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGl0ZW0pCisgICAgOiBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24oaXRlbSkKK3sKKyAgICAvLyBEb24ndCBzaG93IGFjY2VsIGxhYmVscyBpbiBj
b250ZXh0IG1lbnUgaXRlbXMuCisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsK
KyAgICBpZiAoIWFjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtfYWN0aW9u
X2dldF9hY2NlbF9wYXRoKGFjdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIEd0a1dpZGdl
dCogY2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGl0ZW0pKTsKKyAgICBpZiAoR1RL
X0lTX0FDQ0VMX0xBQkVMKGNoaWxkKSkKKyAgICAgICAgZ3RrX2FjY2VsX2xhYmVsX3NldF9hY2Nl
bF9jbG9zdXJlKEdUS19BQ0NFTF9MQUJFTChjaGlsZCksIDApOworfQorCitDb250ZXh0TWVudUl0
ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudSogc3ViTWVudSkKK3sKKyAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVV9JVEVNKGd0a19tZW51X2l0ZW1fbmV3KCkpOworICAg
IGlmIChzdWJNZW51KQorICAgICAgICBzZXRTdWJNZW51KHN1Yk1lbnUpOworfQorCitDb250ZXh0
TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRl
eHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29udGV4dE1lbnUqIHN1
Yk1lbnUpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51
SXRlbURlc2NyaXB0aW9uKHR5cGUsIGFjdGlvbiwgdGl0bGUsIHRydWUsIGZhbHNlKTsKKyAgICBp
ZiAoc3ViTWVudSkKKyAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKK30KKworQ29udGV4dE1l
bnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0
TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9v
bCBjaGVja2VkKQoreworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3Jt
TWVudUl0ZW1EZXNjcmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCBlbmFibGVkLCBjaGVja2Vk
KTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVBY3Rp
b24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tl
ZCwgVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKK3sKKyAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24oU3VibWVu
dVR5cGUsIGFjdGlvbiwgdGl0bGUsIGVuYWJsZWQsIGNoZWNrZWQpOworICAgIHNldFN1Yk1lbnUo
c3ViTWVudUl0ZW1zKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkK
K3sKK30KKworUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cmVs
ZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKQoreworICAgIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlw
dGlvbiBwbGF0Zm9ybURlc2NyaXB0aW9uID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbiA9IDA7CisgICAgcmV0dXJuIHBsYXRmb3JtRGVzY3JpcHRpb247
Cit9CisKK0NvbnRleHRNZW51SXRlbVR5cGUgQ29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QK
K3sKKyAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUl9NRU5VX0lURU0obV9wbGF0Zm9ybURlc2NyaXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIFNlcGFyYXRvclR5cGU7CisgICAgaWYgKEdUS19JU19DSEVD
S19NRU5VX0lURU0obV9wbGF0Zm9ybURlc2NyaXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIENoZWNr
YWJsZUFjdGlvblR5cGU7CisgICAgaWYgKGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUobV9wbGF0
Zm9ybURlc2NyaXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIFN1Ym1lbnVUeXBlOworICAgIHJldHVy
biBBY3Rpb25UeXBlOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShDb250ZXh0
TWVudUl0ZW1UeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKKyAg
ICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfc2VwYXJhdG9y
X21lbnVfaXRlbV9uZXcoKSk7Cit9CisKK0NvbnRleHRNZW51QWN0aW9uIENvbnRleHRNZW51SXRl
bTo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVB
Y3Rpb24+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTikpKTsKK30KKwordm9p
ZCBDb250ZXh0TWVudUl0ZW06OnNldEFjdGlvbihDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7
CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04sIEdJTlRfVE9fUE9JTlRFUihhY3Rpb24pKTsKK30K
KworU3RyaW5nIENvbnRleHRNZW51SXRlbTo6dGl0bGUoKSBjb25zdAoreworICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgcmV0dXJuIGFjdGlvbiA/IFN0cmluZzo6ZnJv
bVVURjgoZ3RrX2FjdGlvbl9nZXRfbGFiZWwoYWN0aW9uKSkgOiBTdHJpbmcoKTsKK30KKwordm9p
ZCBDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAg
R3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uKQorICAgICAg
ICBndGtfYWN0aW9uX3NldF9sYWJlbChhY3Rpb24sIHRpdGxlLnV0ZjgoKS5kYXRhKCkpOworfQor
CitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVu
dSgpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiBzdWJNZW51ID0gZ3RrX21lbnVfaXRlbV9nZXRf
c3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24pOworICAgIHJldHVybiBzdWJNZW51ID8gR1RL
X01FTlUoc3ViTWVudSkgOiAwOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVu
dShDb250ZXh0TWVudSogbWVudSkKK3sKKyAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KG1f
cGxhdGZvcm1EZXNjcmlwdGlvbiwgR1RLX1dJREdFVChtZW51LT5yZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCit7CisgICAgQ29udGV4dE1lbnUgbWVu
dShwbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbihzdWJNZW51SXRlbXMpKTsKKyAgICBzZXRTdWJNZW51
KCZtZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9vbCBzaG91
bGRDaGVjaykKK3sKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOworICAgIGlm
IChhY3Rpb24gJiYgR1RLX0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKKyAgICAgICAgZ3RrX3Rv
Z2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pLCBzaG91bGRD
aGVjayk7Cit9CisKK2Jvb2wgQ29udGV4dE1lbnVJdGVtOjpjaGVja2VkKCkgY29uc3QKK3sKKyAg
ICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOworICAgIGlmIChhY3Rpb24gJiYgR1RL
X0lTX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGd0a190b2dnbGVfYWN0
aW9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIENvbnRleHRNZW51SXRlbTo6ZW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
R3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICByZXR1cm4gYWN0aW9uID8gZ3Rr
X2FjdGlvbl9nZXRfc2Vuc2l0aXZlKGFjdGlvbikgOiBmYWxzZTsKK30KKwordm9pZCBDb250ZXh0
TWVudUl0ZW06OnNldEVuYWJsZWQoYm9vbCBzaG91bGRFbmFibGUpCit7CisgICAgR3RrQWN0aW9u
KiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uKQorICAgICAgICBndGtfYWN0
aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLCBzaG91bGRFbmFibGUpOworfQorCitHdGtBY3Rpb24q
IENvbnRleHRNZW51SXRlbTo6Z3RrQWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX2Fj
dGl2YXRhYmxlX2dldF9yZWxhdGVkX2FjdGlvbihHVEtfQUNUSVZBVEFCTEUobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYjkwNWE5NjRkZTc2MjM0MjA5
YzJmNWM5MWM2Y2RmNzkwNTQyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0N1cnNvckd0ay5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChD
KSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqIENvcHly
aWdodCAoQykgMjAxMC0yMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJzb3JHdGsuaCIKKyNpbmNs
dWRlICJHdGtWZXJzaW9uaW5nLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIklu
dFBvaW50LmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBjcmVhdGVOYW1l
ZEN1cnNvcihDdXN0b21DdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgQ3VzdG9tQ3Vyc29y
IGN1cnNvciA9IEN1c3RvbUN1cnNvcnNbY3Vyc29yVHlwZV07CisgICAgR1JlZlB0cjxHZGtDdXJz
b3I+IGMgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9uYW1lKGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIGN1cnNvci5uYW1lKSk7CisgICAgaWYgKGMpCisgICAgICAgIHJldHVybiBj
OworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc291cmNlID0gYWRvcHRSZWYoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
Y3Vyc29yLmJpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwgNCkpOworICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IG1hc2sgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mb3JfZGF0YShjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjdXJzb3IubWFza19iaXRzKSwg
Q0FJUk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9S
TUFUX0ExLCAzMiwgMzIpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUoc3VyZmFjZS5nZXQoKSkpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX21hc2tfc3VyZmFjZShj
ci5nZXQoKSwgbWFzay5nZXQoKSwgMCwgMCk7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmID0gYWRvcHRHUmVmKGdka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShzdXJmYWNlLmdldCgp
LCAwLCAwLCAzMiwgMzIpKTsKKyAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zy
b21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwgY3Vyc29y
LmhvdF94LCBjdXJzb3IuaG90X3kpKTsKK30KKworc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBj
cmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkK
K3sKKyAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0ZXJtaW5lSG90U3BvdChpbWFn
ZSwgaG90U3BvdCk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihp
bWFnZS0+Z2V0R2RrUGl4YnVmKCkpOworICAgIHJldHVybiBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9u
ZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgcGl4YnVmLmdldCgpLCBl
ZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCkpKTsKK30KKwordm9pZCBD
dXJzb3I6OmVuc3VyZVBsYXRmb3JtQ3Vyc29yKCkgY29uc3QKK3sKKyAgICBpZiAobV9wbGF0Zm9y
bUN1cnNvciB8fCBtX3R5cGUgPT0gQ3Vyc29yOjpQb2ludGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgorICAgICAg
ICAvLyBBIG51bGwgR2RrQ3Vyc29yIGlzIHRoZSBkZWZhdWx0IGN1cnNvciBmb3IgdGhlIHdpbmRv
dy4KKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ3Vyc29yOjpDcm9zczoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihn
ZGtfY3Vyc29yX25ldyhHREtfQ1JPU1MpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJz
b3I6OkhhbmQ6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXcoR0RLX0hBTkQyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpJQmVh
bToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhH
REtfWFRFUk0pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OldhaXQ6CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1dBVENI
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgorICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19RVUVTVElPTl9BUlJP
VykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICBjYXNlIEN1
cnNvcjo6TWlkZGxlUGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfRkxFVVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
dXJzb3I6OkVhc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgorICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19SSUdIVF9T
SURFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFJlc2l6ZToKKyAg
ICBjYXNlIEN1cnNvcjo6Tm9ydGhQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfU0lERSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpOb3J0
aEVhc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19j
dXJzb3JfbmV3KEdES19UT1BfUklHSFRfQ09STkVSKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ3Vyc29yOjpOb3J0aFdlc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBh
bm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9u
ZXcoR0RLX1RPUF9MRUZUX0NPUk5FUikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNv
cjo6U291dGhSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoUGFubmluZzoKKyAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1NJ
REUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZToK
KyAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1JJR0hUX0NPUk5FUikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXplOgorICAg
IGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fTEVGVF9DT1JORVIpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6CisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lERSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1RF
RSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNpemU6Cisg
ICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZToKKyAgICBjYXNlIEN1
cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfSF9ET1VCTEVfQVJST1cpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfVl9ET1VCTEVfQVJS
T1cpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4dDoKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclZl
cnRpY2FsVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgorICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19QTFVT
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckNvbnRl
eHRNZW51KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yQWxpYXMp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6CisgICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JQcm9ncmVzcyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpOb0Ryb3A6CisgICAgY2FzZSBDdXJz
b3I6Ok5vdEFsbG93ZWQ6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1
cnNvcihDdXN0b21DdXJzb3JOb0Ryb3ApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNv
cjo6Q29weToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1
c3RvbUN1cnNvckNvcHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9uZToK
KyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNv
ck5vbmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Wm9vbUluOgorICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yWm9vbUlu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Olpvb21PdXQ6CisgICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3Jab29tT3V0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkdyYWI6CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JHcmFiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkdyYWJiaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYmJpbmcpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gY3JlYXRlQ3VzdG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikK
KyAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCisgICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2Up
CisgICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RTcG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNv
cihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQoreworfQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0
b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCit7CisgICAgbV90eXBlID0gb3RoZXIubV90eXBlOwor
ICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIG1faG90U3BvdCA9IG90aGVyLm1faG90
U3BvdDsKKyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0N1cnNvckd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ODkxOWJhMzM1YTJhZTU0ZjI4YTQ2MTkwNTgz
YjNhNGJhMjQ2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNv
ckd0ay5oCkBAIC0wLDAgKzEsMzgzIEBACisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoq
KioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICog
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9u
cyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96
aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdp
bmFsIENvZGUgaXMKKyAqIFRpbSBDb3BwZXJmaWVsZC4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkg
dGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEKKyAqIHRoZSBJbml0
aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihz
KToKKyAqICAgVGltIENvcHBlcmZpZWxkIDx0aW1lY29wQG5ldHdvcmsuZW1haWwubmUuanA+Cisg
KiAgIENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqCisgKiBBbHRl
cm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRo
ZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGlu
IHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBw
bGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cg
dXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1z
IG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0
bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90
IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2Yg
dGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBC
TE9DSyAqKioqKiAqLworCisjaWZuZGVmIEN1cnNvckd0a19oCisjZGVmaW5lIEN1cnNvckd0a19o
CisKKyNpbmNsdWRlICJDdXJzb3IuaCIKKworLyoKKyBUaGVzZSBjdXJzb3JzIGFyZSBjb3BpZWQg
ZnJvbSBNb3ppbGxhIGNvZGU6CisgIGh0dHA6Ly9seHIubW96aWxsYS5vcmcvbW96aWxsYTEuOC9z
b3VyY2Uvd2lkZ2V0L3NyYy9ndGsyL25zR3RrQ3Vyc29ycy5oCisqLworCisvKiBNT1pfQ1VSU09S
X1ZFUlRJQ0FMX1RFWFQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel92ZXJ0aWNh
bF90ZXh0X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwg
MHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwKKyAgMHgwNiwgMHg2MCwgMHgwMCwg
MHgwMCwgMHhmYywgMHgzZiwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwKKyAg
MHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pf
dmVydGljYWxfdGV4dF9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwg
MHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwKKyAgMHhmZiwg
MHhmZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgw
MCwgMHgwMCwKKyAgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgw
MCwgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0NPTlRF
WFRfTUVOVSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X21lbnVfYml0c1tdID0g
eworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0
LCAweDAwLCAweDAwLCAweDAwLAorICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAw
LCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAweDdjLCAweDAwLCAweDAw
LCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGZkLCAweDAwLCAweDAwLAor
ICAweGZjLCAweGZmLCAweDAwLCAweDAwLCAweDdjLCAweDg0LCAweDAwLCAweDAwLCAweDZjLCAw
eGZjLCAweDAwLCAweDAwLAorICAweGM0LCAweDg0LCAweDAwLCAweDAwLCAweGMwLCAweGZjLCAw
eDAwLCAweDAwLCAweDgwLCAweDg1LCAweDAwLCAweDAwLAorICAweDgwLCAweGZkLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X21hc2tfYml0c1td
ID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAw
eDBlLCAweDAwLCAweDAwLCAweDAwLAorICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAw
eDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAorICAweGZlLCAweDAwLCAw
eDAwLCAweDAwLCAweGZlLCAweGZkLCAweDAwLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAw
LAorICAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZl
LCAweGZlLCAweDAxLCAweDAwLAorICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZm
LCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAweDAxLCAweDAwLAorICAweGMwLCAweGZmLCAweDAx
LCAweDAwLCAweDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfQ09QWSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNoYXIgbW96X2NvcHlfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAweDBjLCAweDAw
LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAw
eGZjLCAweDAxLCAweDAwLCAweDAwLAorICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAw
eDMwLCAweDAwLCAweDAwLCAweDZjLCAweDMwLCAweDAwLCAweDAwLAorICAweGM0LCAweGZjLCAw
eDAwLCAweDAwLCAweGMwLCAweGZjLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAw
LAorICAweDgwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIG1vel9jb3B5X21hc2tfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAorICAweDFlLCAw
eDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAw
LCAweDAwLAorICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAw
LCAweGZlLCAweDAzLCAweDAwLCAweDAwLAorICAweGZlLCAweDM3LCAweDAwLCAweDAwLCAweGZl
LCAweDdiLCAweDAwLCAweDAwLCAweGZlLCAweGZjLCAweDAwLCAweDAwLAorICAweGVlLCAweGZm
LCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAw
eDAwLAorICAweGMwLCAweDdiLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfQUxJQVMg
Ki8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9hbGlhc19iaXRzW10gPSB7CisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAs
IDB4MDAsIDB4MDAsCisgIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCisgIDB4ZmMs
IDB4MDMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZTAsIDB4
MDAsIDB4MDAsCisgIDB4YzQsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YjAsIDB4MDAsIDB4
MDAsIDB4ODAsIDB4MTksIDB4MDAsIDB4MDAsCisgIDB4ODAsIDB4MTksIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsK
Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2FsaWFzX21hc2tfYml0c1tdID0gewor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAw
eDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAorICAweGZlLCAweDAwLCAweDAwLCAw
eDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAweDAwLAorICAw
eGZlLCAweGY3LCAweDAwLCAweDAwLCAweGZlLCAweGZiLCAweDAxLCAweDAwLCAweGZlLCAweGYw
LCAweDAxLCAweDAwLAorICAweGVlLCAweGY5LCAweDAxLCAweDAwLCAweGU0LCAweGY5LCAweDAx
LCAweDAwLCAweGMwLCAweGJmLCAweDAwLCAweDAwLAorICAweGMwLCAweDNmLCAweDAwLCAweDAw
LCAweDgwLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
IH07CisKKy8qIE1PWl9DVVJTT1JfWk9PTV9JTiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo
YXIgbW96X3pvb21faW5fYml0c1tdID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDBj
LCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAorICAweDYyLCAweDA0
LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAweDAwLCAw
eDAwLAorICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAw
eDYyLCAweDA0LCAweDAwLCAweDAwLAorICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAw
eDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAw
eDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIG1vel96b29tX2luX21hc2tfYml0c1tdID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAw
LCAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAorICAweGZl
LCAweDA3LCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAw
eDAwLCAweDAwLAorICAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAw
eDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAorICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAw
eGZjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfWk9P
TV9PVVQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9iaXRzW10g
PSB7CisgIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4
MDIsIDB4MDQsIDB4MDAsIDB4MDAsCisgIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4
MDgsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsCisgIDB4ZjksIDB4MDksIDB4
MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAs
CisgIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjAs
IDB4MWMsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4NDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0X21hc2tf
Yml0c1tdID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAw
eDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAorICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAw
eGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLAorICAweGZmLCAw
eDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAw
LCAweDAwLAorICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAw
LCAweGYwLCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAw
LCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAorICAweDAwLCAweDQw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1JfTk9UX0FMTE9XRUQgKi8KK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9iaXRzW10gPSB7CisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAs
IDB4MDAsCisgIDB4ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAs
IDB4N2MsIDB4ODAsIDB4MDMsIDB4MDAsCisgIDB4ZWMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4Y2Us
IDB4MDEsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MDMsIDB4MDYsIDB4MDAsCisgIDB4MDYsIDB4MDcs
IDB4MDYsIDB4MDAsIDB4MDYsIDB4MGUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MWMsIDB4MDYsIDB4
MDAsCisgIDB4MGUsIDB4MzgsIDB4MDcsIDB4MDAsIDB4MGMsIDB4NzAsIDB4MDMsIDB4MDAsIDB4
MWMsIDB4ZTAsIDB4MDMsIDB4MDAsCisgIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4
ZjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCisgIDB4ODAsIDB4MWYsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X25vdF9hbGxvd2VkX21hc2tfYml0c1tdID0gewor
ICAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLCAweGYwLCAw
eGZmLCAweDAwLCAweDAwLAorICAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGZjLCAweGYwLCAw
eDAzLCAweDAwLCAweGZlLCAweGMwLCAweDA3LCAweDAwLAorICAweGZlLCAweDgxLCAweDA3LCAw
eDAwLCAweGZmLCAweDgzLCAweDBmLCAweDAwLCAweGNmLCAweDA3LCAweDBmLCAweDAwLAorICAw
eDhmLCAweDBmLCAweDBmLCAweDAwLCAweDBmLCAweDFmLCAweDBmLCAweDAwLCAweDBmLCAweDNl
LCAweDBmLCAweDAwLAorICAweDFmLCAweGZjLCAweDBmLCAweDAwLCAweDFlLCAweGY4LCAweDA3
LCAweDAwLCAweDNlLCAweGYwLCAweDA3LCAweDAwLAorICAweGZjLCAweGYwLCAweDAzLCAweDAw
LCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDAwLAorICAweGUw
LCAweDdmLCAweDAwLCAweDAwLCAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
IH07CisKKy8qIE1PWl9DVVJTT1JfU1BJTk5JTkcgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIG1vel9zcGlubmluZ19iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MGMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCisgIDB4ZmMsIDB4M2IsIDB4MDAsIDB4MDAsIDB4N2Ms
IDB4MzgsIDB4MDAsIDB4MDAsIDB4NmMsIDB4NTQsIDB4MDAsIDB4MDAsCisgIDB4YzQsIDB4ZGMs
IDB4MDAsIDB4MDAsIDB4YzAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzksIDB4MDAsIDB4
MDAsCisgIDB4ODAsIDB4MzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNoYXIgbW96X3NwaW5uaW5nX21hc2tfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAw
LCAweDAwLCAweDAwLAorICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAw
LCAweDAwLCAweGZlLCAweDNiLCAweDAwLCAweDAwLAorICAweGZlLCAweDdmLCAweDAwLCAweDAw
LCAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweGZlLCAweGZlLCAweDAwLCAweDAwLAorICAweGVl
LCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweDdmLCAw
eDAwLCAweDAwLAorICAweGMwLCAweDdmLCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9DVVJTT1Jf
Tk9ORSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X25vbmVfYml0c1tdID0gewor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX21hc2tfYml0c1tdID0g
eworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwIH07CisKKy8qIE1PWl9DVVJTT1JfSEFORF9HUkFCICovCitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciBtb3pfaGFuZF9ncmFiX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKyAgMHg2
MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwg
MHgwMSwgMHgwMCwKKyAgMHgyMCwgMHhjOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0OSwgMHgwMiwg
MHgwMCwgMHg1OCwgMHg0MCwgMHgwMiwgMHgwMCwKKyAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMCwg
MHg0NCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKKyAgMHgxMCwg
MHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgw
MCwgMHgwMCwKKyAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgw
MCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBtb3pfaGFuZF9ncmFiX21hc2tfYml0c1tdID0geworICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDYwLCAweDNmLCAweDAwLCAweDAw
LAorICAweGYwLCAweDdmLCAweDAwLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGY4
LCAweGZmLCAweDAzLCAweDAwLAorICAweGYwLCAweGZmLCAweDA3LCAweDAwLCAweGY4LCAweGZm
LCAweDA3LCAweDAwLCAweGZjLCAweGZmLCAweDA3LCAweDAwLAorICAweGZlLCAweGZmLCAweDA3
LCAweDAwLCAweGZlLCAweGZmLCAweDAzLCAweDAwLCAweGZjLCAweGZmLCAweDAzLCAweDAwLAor
ICAweGY4LCAweGZmLCAweDAzLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYwLCAw
eGZmLCAweDAxLCAweDAwLAorICAweGUwLCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweGZmLCAw
eDAwLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKKy8qIE1PWl9D
VVJTT1JfSEFORF9HUkFCQklORyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hh
bmRfZ3JhYmJpbmdfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweGMwLCAweDM2LCAweDAwLCAweDAwLCAweDIwLCAweGM5LCAweDAwLCAweDAwLCAweDIw
LCAweDQwLCAweDAxLCAweDAwLAorICAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDYwLCAweDAw
LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAxLCAweDAwLAorICAweDEwLCAweDAwLCAweDAx
LCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAwLAor
ICAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAw
eDQwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCAgdW5zaWduZWQgY2hh
ciBtb3pfaGFuZF9ncmFiYmluZ19tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgz
NiwgMHgwMCwgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgw
MSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgwMywgMHgw
MCwgMHhmMCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhm
OCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwg
MHgwMSwgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwg
MHgwMCwgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitlbnVtIEN1c3RvbUN1
cnNvclR5cGUgeworICAgIEN1c3RvbUN1cnNvckNvcHkgPSAwLAorICAgIEN1c3RvbUN1cnNvckFs
aWFzLAorICAgIEN1c3RvbUN1cnNvckNvbnRleHRNZW51LAorICAgIEN1c3RvbUN1cnNvclpvb21J
biwKKyAgICBDdXN0b21DdXJzb3Jab29tT3V0LAorICAgIEN1c3RvbUN1cnNvclZlcnRpY2FsVGV4
dCwKKyAgICBDdXN0b21DdXJzb3JOb0Ryb3AsCisgICAgQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3MsCisg
ICAgQ3VzdG9tQ3Vyc29yTm9uZSwKKyAgICBDdXN0b21DdXJzb3JHcmFiLAorICAgIEN1c3RvbUN1
cnNvckdyYWJiaW5nLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIqIG5h
bWU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogYml0czsKKyAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBtYXNrX2JpdHM7CisgICAgaW50IGhvdF94OworICAgIGludCBob3RfeTsKK30gQ3VzdG9t
Q3Vyc29yOworCisvLyBjcmVhdGUgY3VzdG9tIHBpeG1hcCBjdXJzb3IgZnJvbSBjdXJzb3JzIGlu
IG5zR1RLQ3Vyc29yRGF0YS5oCitzdGF0aWMgY29uc3QgQ3VzdG9tQ3Vyc29yIEN1c3RvbUN1cnNv
cnNbXSA9IHsKKyAgICB7ICJjb3B5IiwgbW96X2NvcHlfYml0cywgbW96X2NvcHlfbWFza19iaXRz
LCAyLCAyIH0sCisgICAgeyAiYWxpYXMiLCBtb3pfYWxpYXNfYml0cywgbW96X2FsaWFzX21hc2tf
Yml0cywgMiwgMiB9LAorICAgIHsgImNvbnRleHQtbWVudSIsIG1vel9tZW51X2JpdHMsIG1vel9t
ZW51X21hc2tfYml0cywgMiwgMiB9LAorICAgIHsgInpvb20taW4iLCBtb3pfem9vbV9pbl9iaXRz
LCBtb3pfem9vbV9pbl9tYXNrX2JpdHMsIDYsIDYgfSwKKyAgICB7ICJ6b29tLW91dCIsIG1vel96
b29tX291dF9iaXRzLCBtb3pfem9vbV9vdXRfbWFza19iaXRzLCA2LCA2IH0sCisgICAgeyAidmVy
dGljYWwtdGV4dCIsIG1vel92ZXJ0aWNhbF90ZXh0X2JpdHMsIG1vel92ZXJ0aWNhbF90ZXh0X21h
c2tfYml0cywgOCwgNCB9LAorICAgIHsgImRuZC1uby1kcm9wIiwgbW96X25vdF9hbGxvd2VkX2Jp
dHMsIG1vel9ub3RfYWxsb3dlZF9tYXNrX2JpdHMsIDksICA5IH0sCisgICAgeyAibGVmdF9wdHJf
d2F0Y2giLCBtb3pfc3Bpbm5pbmdfYml0cywgbW96X3NwaW5uaW5nX21hc2tfYml0cywgMiwgIDJ9
LAorICAgIHsgIm5vbmUiLCBtb3pfbm9uZV9iaXRzLCBtb3pfbm9uZV9tYXNrX2JpdHMsIDAsIDAg
fSwKKyAgICB7ICJncmFiIiwgbW96X2hhbmRfZ3JhYl9iaXRzLCBtb3pfaGFuZF9ncmFiX21hc2tf
Yml0cywgMTAsIDEwIH0sCisgICAgeyAiZ3JhYmJpbmciLCBtb3pfaGFuZF9ncmFiYmluZ19iaXRz
LCBtb3pfaGFuZF9ncmFiYmluZ19tYXNrX2JpdHMsIDEwLCAxMCB9Cit9OworCisjZW5kaWYgLy8g
Q3Vyc29yR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFkZmM2NmUwMTVlNTAyMjY3ODhjMjE0NzY4YTE1YjI5MTM2ODQzYjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCkBAIC0wLDAgKzEsMTc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
YXRhT2JqZWN0R3RrLmgiCisKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBy
ZXBsYWNlTm9uQnJlYWtpbmdTcGFjZVdpdGhTcGFjZShTdHJpbmcmIHN0cikKK3sKKyAgICBzdGF0
aWMgY29uc3QgVUNoYXIgTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciA9IDB4QTA7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIFNwYWNlQ2hhcmFjdGVyID0gJyAnOworICAgIHN0ci5yZXBsYWNlKE5v
bkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIsIFNwYWNlQ2hhcmFjdGVyKTsKK30KKworU3RyaW5nIERh
dGFPYmplY3RHdGs6OnRleHQoKSBjb25zdAoreworICAgIGlmIChtX3JhbmdlKQorICAgICAgICBy
ZXR1cm4gbV9yYW5nZS0+dGV4dCgpOworICAgIHJldHVybiBtX3RleHQ7Cit9CisKK1N0cmluZyBE
YXRhT2JqZWN0R3RrOjptYXJrdXAoKSBjb25zdAoreworICAgIGlmIChtX3JhbmdlKQorICAgICAg
ICByZXR1cm4gY3JlYXRlTWFya3VwKG1fcmFuZ2UuZ2V0KCksIDAsIEFubm90YXRlRm9ySW50ZXJj
aGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKTsKKyAgICByZXR1cm4gbV9tYXJrdXA7
Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6c2V0VGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQp
Cit7CisgICAgbV9yYW5nZSA9IDA7CisgICAgbV90ZXh0ID0gbmV3VGV4dDsKKyAgICByZXBsYWNl
Tm9uQnJlYWtpbmdTcGFjZVdpdGhTcGFjZShtX3RleHQpOworfQorCit2b2lkIERhdGFPYmplY3RH
dGs6OnNldE1hcmt1cChjb25zdCBTdHJpbmcmIG5ld01hcmt1cCkKK3sKKyAgICBtX3JhbmdlID0g
MDsKKyAgICBtX21hcmt1cCA9IG5ld01hcmt1cDsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpz
ZXRVUklMaXN0KGNvbnN0IFN0cmluZyYgdXJpTGlzdFN0cmluZykKK3sKKyAgICBtX3VyaUxpc3Qg
PSB1cmlMaXN0U3RyaW5nOworCisgICAgLy8gVGhpcyBjb2RlIGlzIG9yaWdpbmFsbHkgZnJvbTog
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcC4KKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG1ha2UgdGhpcyBjb2RlIGNyb3NzLXBsYXRmb3JtIGV2ZW50dWFsbHkuCisKKyAg
ICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBj
b21wYXRpYmlsaXR5CisgICAgLy8gcmVhc29ucyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4gaGVyZS4K
KyAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OworICAgIHVyaUxpc3RTdHJpbmcuc3BsaXQoJ1xu
JywgdXJpTGlzdCk7CisKKyAgICAvLyBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgY29weSB0aGUgZmly
c3QgdmFsaWQgVVJMIGludG8gdGhlIHVybCBtZW1iZXIuCisgICAgLy8gSW4gY2FzZSBubyBVUkxz
IGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKQorICAgIC8v
IHdpbGwgZ2V0IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1
IHNwZWMgKHNlZQorICAgIC8vICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJm
YWNlcyIpLiBBbHNvIGV4dHJhY3QgYWxsIGZpbGVuYW1lcworICAgIC8vIGZyb20gdGhlIFVSSSBs
aXN0LgorICAgIGJvb2wgc2V0VVJMID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB1cmlMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyYgbGluZSA9IHVyaUxpc3Rb
aV07CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBpZiAo
bGluZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGxpbmVb
MF0gPT0gJyMnKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgS1VSTCB1cmwgPSBL
VVJMKEtVUkwoKSwgbGluZSk7CisgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICBpZiAoIXNldFVSTCkgeworICAgICAgICAgICAgICAgIG1fdXJsID0gdXJsOworICAgICAg
ICAgICAgICAgIHNldFVSTCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1l
KGdfZmlsZW5hbWVfZnJvbV91cmkobGluZS51dGY4KCkuZGF0YSgpLCAwLCAmZXJyb3Iub3V0UHRy
KCkpKTsKKyAgICAgICAgICAgIGlmICghZXJyb3IgJiYgZmlsZW5hbWUpCisgICAgICAgICAgICAg
ICAgbV9maWxlbmFtZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUuZ2V0KCkpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRVUkwoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIG1fdXJsID0gdXJsOworICAg
IG1fdXJpTGlzdCA9IHVybDsKKyAgICBzZXRUZXh0KHVybC5zdHJpbmcoKSk7CisKKyAgICBTdHJp
bmcgYWN0dWFsTGFiZWwobGFiZWwpOworICAgIGlmIChhY3R1YWxMYWJlbC5pc0VtcHR5KCkpCisg
ICAgICAgIGFjdHVhbExhYmVsID0gdXJsOworCisgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7Cisg
ICAgbWFya3VwLmFwcGVuZCgiPGEgaHJlZj1cIiIpOworICAgIG1hcmt1cC5hcHBlbmQodXJsLnN0
cmluZygpKTsKKyAgICBtYXJrdXAuYXBwZW5kKCJcIj4iKTsKKyAgICBHT3duUHRyPGdjaGFyPiBl
c2NhcGVkKGdfbWFya3VwX2VzY2FwZV90ZXh0KGFjdHVhbExhYmVsLnV0ZjgoKS5kYXRhKCksIC0x
KSk7CisgICAgbWFya3VwLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGVzY2FwZWQuZ2V0KCkpKTsK
KyAgICBtYXJrdXAuYXBwZW5kKCI8L2E+Iik7CisgICAgc2V0TWFya3VwKG1hcmt1cC50b1N0cmlu
ZygpKTsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhclRleHQoKQoreworICAgIG1fcmFu
Z2UgPSAwOworICAgIG1fdGV4dCA9ICIiOworfQorCit2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFy
TWFya3VwKCkKK3sKKyAgICBtX3JhbmdlID0gMDsKKyAgICBtX21hcmt1cCA9ICIiOworfQorCitT
dHJpbmcgRGF0YU9iamVjdEd0azo6dXJsTGFiZWwoKSBjb25zdAoreworICAgIGlmIChoYXNUZXh0
KCkpCisgICAgICAgIHJldHVybiB0ZXh0KCk7CisKKyAgICBpZiAoaGFzVVJMKCkpCisgICAgICAg
IHJldHVybiB1cmwoKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBEYXRhT2Jq
ZWN0R3RrOjpjbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygpCit7CisgICAgbV90ZXh0ID0gIiI7Cisg
ICAgbV9tYXJrdXAgPSAiIjsKKyAgICBtX3VyaUxpc3QgPSAiIjsKKyAgICBtX3VybCA9IEtVUkwo
KTsKKyAgICBtX2ltYWdlID0gMDsKKyAgICBtX3JhbmdlID0gMDsKK30KKwordm9pZCBEYXRhT2Jq
ZWN0R3RrOjpjbGVhckFsbCgpCit7CisgICAgY2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKKyAg
ICBtX2ZpbGVuYW1lcy5jbGVhcigpOworfQorCitEYXRhT2JqZWN0R3RrKiBEYXRhT2JqZWN0R3Rr
Ojpmb3JDbGlwYm9hcmQoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCit7CisgICAgc3RhdGljIEhh
c2hNYXA8R3RrQ2xpcGJvYXJkKiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gb2JqZWN0TWFwOwor
CisgICAgaWYgKCFvYmplY3RNYXAuY29udGFpbnMoY2xpcGJvYXJkKSkgeworICAgICAgICBSZWZQ
dHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOwor
ICAgICAgICBvYmplY3RNYXAuc2V0KGNsaXBib2FyZCwgZGF0YU9iamVjdCk7CisgICAgICAgIHJl
dHVybiBkYXRhT2JqZWN0LmdldCgpOworICAgIH0KKworICAgIEhhc2hNYXA8R3RrQ2xpcGJvYXJk
KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID46Oml0ZXJhdG9yIGl0ID0gb2JqZWN0TWFwLmZpbmQo
Y2xpcGJvYXJkKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyODFiMWUxNzhiZjk0N2RhMmMwODBk
MzgzZWFhNTA2YjZhNjM5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
Zm5kZWYgRGF0YU9iamVjdEd0a19oCisjZGVmaW5lIERhdGFPYmplY3RHdGtfaAorCisjaW5jbHVk
ZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFPYmplY3RHdGsg
OiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhT2JqZWN0R3RrPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YU9iamVjdEd0aygpKTsKKyAgICB9CisKKyAgICBjb25zdCBLVVJM
JiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXJpTGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJpTGlzdDsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIEdka1BpeGJ1
ZiogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgdm9pZCBzZXRS
YW5nZShQYXNzUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSkgeyBtX3JhbmdlID0gbmV3UmFuZ2U7IH0K
KyAgICB2b2lkIHNldEltYWdlKEdka1BpeGJ1ZiogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5ld0lt
YWdlOyB9CisgICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAg
IGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1fdGV4dC5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc01hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1f
bWFya3VwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVVJJTGlzdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNVUkwoKSBjb25zdCB7IHJldHVy
biAhbV91cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsgfQorICAgIGJvb2wgaGFzRmls
ZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgdm9pZCBjbGVhclVS
SUxpc3QoKSB7IG1fdXJpTGlzdCA9ICIiOyB9CisgICAgdm9pZCBjbGVhclVSTCgpIHsgbV91cmwg
PSBLVVJMKCk7IH0KKyAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1faW1hZ2UgPSAwOyB9CisKKyAg
ICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFN0cmluZyBtYXJrdXAoKSBjb25zdDsKKyAgICB2
b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRNYXJrdXAoY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBzZXRVUklMaXN0KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB1
cmxMYWJlbCgpIGNvbnN0OworCisgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygpOwor
ICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGNsZWFyVGV4dCgpOworICAgIHZvaWQgY2xl
YXJNYXJrdXAoKTsKKworICAgIHN0YXRpYyBEYXRhT2JqZWN0R3RrKiBmb3JDbGlwYm9hcmQoR3Rr
Q2xpcGJvYXJkKik7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBTdHJpbmcg
bV9tYXJrdXA7CisgICAgS1VSTCBtX3VybDsKKyAgICBTdHJpbmcgbV91cmlMaXN0OworICAgIFZl
Y3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBtX2ltYWdl
OworICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKK307CisKK30KKworI2VuZGlmIC8vIERhdGFP
YmplY3RHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMmE0
NzQ5ZDMzY2JiMjk5YzhkZDY2ZTM1YzAwOTFhYjI4ZjEwYWU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8q
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEcmFnRGF0YS5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiQ2xp
cGJvYXJkR3RrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZy
YWdtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERyYWdEYXRhOjpjb250
YWluc0ZpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNG
aWxlbmFtZXMoKTsKK30KKwordW5zaWduZWQgRHJhZ0RhdGE6Om51bWJlck9mRmlsZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpLnNpemUoKTsK
K30KKwordm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkg
Y29uc3QKK3sKKyAgICByZXN1bHQgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpOwor
fQorCitib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVGV4dCgpOworfQorCitTdHJpbmcgRHJhZ0RhdGE6
OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLT50ZXh0KCk7Cit9CisKK0NvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQ29sb3IoKTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxl
Q29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5zUGxhaW5UZXh0KCkgfHwgY29u
dGFpbnNVUkwoMCkgfHwgbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNNYXJrdXAoKSB8fCBjb250YWlu
c0NvbG9yKCkgfHwgY29udGFpbnNGaWxlcygpOworfQorCitib29sIERyYWdEYXRhOjpjb250YWlu
c1VSTChGcmFtZSogZnJhbWUsIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGlj
eSkgY29uc3QKK3sKKyAgICByZXR1cm4gIWFzVVJMKGZyYW1lLCBmaWxlbmFtZVBvbGljeSkuaXNF
bXB0eSgpOworfQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252
ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAg
IGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNVUkwoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIGlmIChmaWxlbmFtZVBvbGljeSAhPSBDb252ZXJ0RmlsZW5hbWVzKSB7CisgICAg
ICAgIEtVUkwgdXJsKEtVUkwoKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT51cmwoKSk7CisgICAgICAg
IGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgdXJsKG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOworICAgIGlm
ICh0aXRsZSkKKyAgICAgICAgKnRpdGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxMYWJlbCgp
OworICAgIHJldHVybiB1cmw7Cit9CisKKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBE
cmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29s
LCBib29sJikgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzTWFya3Vw
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT5tYXJrdXAoKSwgIiIp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4MTg3NzFjODI5
OWQwMTE1NDk1ZWZjY2M1MDExMmFjZDg0ZWQ3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRHJhZ0ljb24uaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgor
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorc3RhdGljIGdib29sZWFuIGRyYWdJY29uV2luZG93RHJhd0V2ZW50
Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50LCBEcmFnSWNvbiogaWNv
bikKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGdka19jYWlyb19j
cmVhdGUoZXZlbnQtPndpbmRvdykpOworICAgIGljb24tPmRyYXcoY29udGV4dC5nZXQoKSk7Cisg
ICAgcmV0dXJuIFRSVUU7Cit9CisjZWxzZQorc3RhdGljIGdib29sZWFuIGRyYWdJY29uV2luZG93
RHJhd0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiwgY2Fpcm9fdCogY29udGV4dCwgRHJhZ0ljb24q
IGljb24pCit7CisgICAgaWYgKCFnZGtfY2Fpcm9fZ2V0X2NsaXBfcmVjdGFuZ2xlKGNvbnRleHQs
IDApKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWNvbi0+ZHJhdyhjb250ZXh0KTsKKyAg
ICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorCitEcmFnSWNv
bjo6RHJhZ0ljb24oKQorICAgIDogaXNDb21wb3NpdGVkKGdka19zY3JlZW5faXNfY29tcG9zaXRl
ZChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpKQorICAgICwgbV93aW5kb3coMCkKK3sKKyAgICBp
ZiAoIWlzQ29tcG9zaXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93aW5kb3cgPSBndGtf
d2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJleHBvc2UtZXZlbnQiLCBHX0NBTExCQUNL
KGRyYWdJY29uV2luZG93RHJhd0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyNlbHNlCisgICAgZ19z
aWduYWxfY29ubmVjdChtX3dpbmRvdywgImRyYXciLCBHX0NBTExCQUNLKGRyYWdJY29uV2luZG93
RHJhd0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBzdHJhdGVn
eSBvcmlnaW5hbGx5IGNvbWVzIGZyb20gQ2hyb21pdW06IHNyYy9jaHJvbWUvYnJvd3Nlci9ndGsv
dGFiX2NvbnRlbnRzX2RyYWdfc291cmNlLmNjCisgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBndGtf
d2lkZ2V0X2dldF9zY3JlZW4obV93aW5kb3cpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisg
ICAgR2RrQ29sb3JtYXAqIHJnYmEgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX2NvbG9ybWFwKHNjcmVl
bik7CisgICAgaWYgKHJnYmEpCisgICAgICAgIGd0a193aWRnZXRfc2V0X2NvbG9ybWFwKG1fd2lu
ZG93LCByZ2JhKTsKKyNlbHNlCisgICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZGtfc2NyZWVuX2dl
dF9yZ2JhX3Zpc3VhbChzY3JlZW4pOworICAgIGlmICghdmlzdWFsKQorICAgICAgICB2aXN1YWwg
PSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKHNjcmVlbik7CisgICAgZ3RrX3dpZGdldF9z
ZXRfdmlzdWFsKG1fd2luZG93LCB2aXN1YWwpOworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8y
Cit9CisKK0RyYWdJY29uOjp+RHJhZ0ljb24oKQoreworICAgIGlmIChtX3dpbmRvdykKKyAgICAg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2luZG93KTsKK30KKwordm9pZCBEcmFnSWNvbjo6ZHJh
dyhjYWlyb190KiBjb250ZXh0KQoreworICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCAwLCAw
LAorICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX2lt
YWdlLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KG1faW1hZ2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY29udGV4dCwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29u
dGV4dCwgbV9pbWFnZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKK30K
Kwordm9pZCBEcmFnSWNvbjo6c2V0SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKK3sKKyAg
ICBBU1NFUlQoaW1hZ2UpOworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBtX2ltYWdlU2l6ZSA9
IEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpLCBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2UpKTsKKyAgICBpZiAoaXNDb21wb3NpdGVkKSB7Cisg
ICAgICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cobV93aW5kb3cpLCBtX2ltYWdlU2l6
ZS53aWR0aCgpLCBtX2ltYWdlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIG1fcGl4YnVmID0gYWRvcHRHUmVmKGNh
aXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoaW1hZ2UpKTsKKyNlbmRpZgorfQorCit2b2lkIERy
YWdJY29uOjp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQoreworICAgIEludFBv
aW50IGhvdHNwb3QobV9pbWFnZVNpemUpOworICAgIGhvdHNwb3Quc2NhbGUoMC41LCAwLjUpOwor
ICAgIHVzZUZvckRyYWcoY29udGV4dCwgaG90c3BvdCk7Cit9CisKK3ZvaWQgRHJhZ0ljb246OnVz
ZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBob3RzcG90
KQoreworICAgIGlmIChpc0NvbXBvc2l0ZWQpIHsKKyAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25f
d2lkZ2V0KGNvbnRleHQsIG1fd2luZG93LCBob3RzcG90LngoKSwgaG90c3BvdC55KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX2Ry
YWdfc2V0X2ljb25fcGl4YnVmKGNvbnRleHQsIG1fcGl4YnVmLmdldCgpLCBob3RzcG90LngoKSwg
aG90c3BvdC55KCkpOworI2Vsc2UKKyAgICBndGtfZHJhZ19zZXRfaWNvbl9zdXJmYWNlKGNvbnRl
eHQsIG1faW1hZ2UuZ2V0KCkpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvRHJhZ0ljb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmU0MzVkY2JkYTIwZTJlZGQ3YmZjMjZm
N2IwZmYwOWEyOGI4ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9E
cmFnSWNvbi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEcmFnSWNvbl9oCisjZGVmaW5lIERyYWdJY29u
X2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8UmVmUHRyQ2Fpcm8uaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRHJhZ0ljb24geworcHVibGljOgorICAgIERyYWdJY29uKCk7CisgICAgdmlydHVhbCB+
RHJhZ0ljb24oKTsKKworICAgIHZvaWQgZHJhdyhjYWlyb190Kik7CisgICAgdm9pZCBzZXRJbWFn
ZShjYWlyb19zdXJmYWNlX3QqKTsKKyAgICB2b2lkIHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQq
KTsKKyAgICB2b2lkIHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYg
aG90c3BvdCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0NvbXBvc2l0ZWQ7CisgICAgR3RrV2lk
Z2V0KiBtX3dpbmRvdzsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlOworICAg
IEludFNpemUgbV9pbWFnZVNpemU7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gbV9waXhidWY7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmIC8vIERy
YWdJY29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjdj
NGMxNDJlMWNlZjM5ZDI0ZjNiZWU5ZjM0Y2IyZWFkMmJkN2U4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8q
CisgKiAyMDEwIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKKworI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCit7
CisgICAgaWYgKGltYWdlKQorICAgICAgICByZXR1cm4gSW50U2l6ZShjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFn
ZSkpOworCisgICAgcmV0dXJuIEludFNpemUoMCwgMCk7Cit9CisKK3ZvaWQgZGVsZXRlRHJhZ0lt
YWdlKERyYWdJbWFnZVJlZiBpbWFnZSkKK3sKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIGNhaXJv
X3N1cmZhY2VfZGVzdHJveShpbWFnZSk7Cit9CisKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFn
ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKK3sKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBuZXdXaWR0aCA9IHNjYWxlLndpZHRoKCkg
KiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSk7CisgICAgaW50IG5ld0hlaWdo
dCA9IHNjYWxlLmhlaWdodCgpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdl
KTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHNjYWxlZFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2Ny
ZWF0ZV9zaW1pbGFyKGltYWdlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBuZXdXaWR0aCwg
bmV3SGVpZ2h0KTsKKworICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKHNjYWxlZFN1cmZhY2UpKTsKKyAgICBjYWlyb19zY2FsZShjb250ZXh0LmdldCgp
LCBzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRf
ZXh0ZW5kKGNhaXJvX2dldF9zb3VyY2UoY29udGV4dC5nZXQoKSksIENBSVJPX0VYVEVORF9QQUQp
OworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcihjYWlyb19nZXRfc291cmNlKGNvbnRleHQu
Z2V0KCkpLCBDQUlST19GSUxURVJfQkVTVCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRl
eHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKGNvbnRleHQuZ2V0KCksIGltYWdlLCAwLCAwKTsKKyAgICBjYWlyb19wYWludChjb250
ZXh0LmdldCgpKTsKKworICAgIGRlbGV0ZURyYWdJbWFnZShpbWFnZSk7CisgICAgcmV0dXJuIHNj
YWxlZFN1cmZhY2U7Cit9CisKK0RyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rp
b24oRHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCBmcmFjdGlvbikKK3sKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghZ2RrX3NjcmVlbl9pc19jb21wb3NpdGVk
KGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZTsKKworICAg
IFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdlKSk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0RF
U1RfSU4pOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LmdldCgpLCAwLCAwLCAw
LCBmcmFjdGlvbik7CisgICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJu
IGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdl
KiBpbWFnZSwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtKQoreworICAgIE5hdGl2ZUltYWdl
Q2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgcmV0dXJuIG5hdGl2ZUltYWdlID8gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZl
SW1hZ2UtPnN1cmZhY2UoKSkgOiAwOworfQorCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
SWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NGQ1NWU3NjkxNTFlZGMx
ZDQxMTU2YTQzMmNhNzU5NzgxNGJhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0Vycm9yc0d0ay5jcHAKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVycm9y
c0d0ay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNl
LmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbk5ldHdvcmssIE5l
dHdvcmtFcnJvckNhbmNlbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLCBfKCJMb2FkIHJlcXVlc3QgY2FuY2VsbGVkIikpOworfQorCitSZXNvdXJj
ZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yQ2Fu
bm90VXNlUmVzdHJpY3RlZFBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKSwgXygiTm90IGFsbG93ZWQgdG8gdXNlIHJlc3RyaWN0ZWQgbmV0d29yayBw
b3J0IikpOworfQorCitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5Qb2xpY3ksIFBvbGljeUVycm9yQ2Fubm90U2hvd1VSTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBfKCJVUkwgY2Fubm90IGJlIHNob3duIikp
OworfQorCitSZXNvdXJjZUVycm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xp
Y3lDaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmco
KSwgXygiRnJhbWUgbG9hZCB3YXMgaW50ZXJydXB0ZWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3Ig
Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVy
cm9yQ2Fubm90U2hvd01pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
LnVybCgpLnN0cmluZygpLCBfKCJDb250ZW50IHdpdGggdGhlIHNwZWNpZmllZCBNSU1FIHR5cGUg
Y2Fubm90IGJlIHNob3duIikpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RF
cnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVz
b3VyY2VFcnJvcihlcnJvckRvbWFpbk5ldHdvcmssIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhp
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIF8o
IkZpbGUgZG9lcyBub3QgZXhpc3QiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhh
bmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBsdWdpbiwgUGx1Z2luRXJyb3JXaWxsSGFu
ZGxlTG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmco
KSwgXygiUGx1Z2luIHdpbGwgaGFuZGxlIGxvYWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93
bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgbmV0d29ya0Vycm9yKQorewor
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQsIERvd25sb2FkRXJy
b3JOZXR3b3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtFcnJvci5mYWlsaW5n
VVJMKCksIG5ldHdvcmtFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKTsKK30KKworUmVzb3Vy
Y2VFcnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93
bmxvYWQsIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIF8oIlVzZXIgY2FuY2VsbGVkIHRoZSBkb3du
bG9hZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQsIERvd25s
b2FkRXJyb3JEZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51
cmwoKS5zdHJpbmcoKSwgZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmludEVy
cm9yKGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0LCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENv
bnRleHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JHZW5lcmFsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgp
IDogS1VSTCgpLCBlcnJvck1lc3NhZ2UpOworfQorCitSZXNvdXJjZUVycm9yIHByaW50ZXJOb3RG
b3VuZEVycm9yKGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0KQoreworICAgIERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21h
aW5QcmludCwgUHJpbnRFcnJvclByaW50ZXJOb3RGb3VuZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwgXygi
UHJpbnRlciBub3QgZm91bmQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5n
ZVRvUHJpbnQoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQpCit7CisgICAgRG9jdW1l
bnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
blByaW50LCBQcmludEVycm9ySW52YWxpZFBhZ2VSYW5nZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwgXygi
SW52YWxpZCBwYWdlIHJhbmdlIikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9FcnJvcnNHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODJjYzk5ZmJmMjkyZTRjYmNkNzNkNmVmMDlj
ZmM0YzJjOTQ4NmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9FcnJv
cnNHdGsuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgRXJyb3JzR3RrX2gKKyNkZWZpbmUgRXJyb3JzR3RrX2gKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFByaW50Q29udGV4dDsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitjb25zdCBjaGFyKiBjb25zdCBlcnJvckRv
bWFpbk5ldHdvcmsgPSAiV2ViS2l0TmV0d29ya0Vycm9yIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGVy
cm9yRG9tYWluUG9saWN5ID0gIldlYktpdFBvbGljeUVycm9yIjsKK2NvbnN0IGNoYXIqIGNvbnN0
IGVycm9yRG9tYWluUGx1Z2luID0gIldlYktpdFBsdWdpbkVycm9yIjsKK2NvbnN0IGNoYXIqIGNv
bnN0IGVycm9yRG9tYWluRG93bmxvYWQgPSAiV2ViS2l0RG93bmxvYWRFcnJvciI7Citjb25zdCBj
aGFyKiBjb25zdCBlcnJvckRvbWFpblByaW50ID0gIldlYktpdFByaW50RXJyb3IiOworCitlbnVt
IE5ldHdvcmtFcnJvciB7CisgICAgTmV0d29ya0Vycm9yRmFpbGVkID0gMzk5LAorICAgIE5ldHdv
cmtFcnJvclRyYW5zcG9ydCA9IDMwMCwKKyAgICBOZXR3b3JrRXJyb3JVbmtub3duUHJvdG9jb2wg
PSAzMDEsCisgICAgTmV0d29ya0Vycm9yQ2FuY2VsbGVkID0gMzAyLAorICAgIE5ldHdvcmtFcnJv
ckZpbGVEb2VzTm90RXhpc3QgPSAzMDMKK307CisKKy8vIFN5bmMnZCB3aXRoIE1hYydzIFdlYktp
dCBFcnJvcnMuCitlbnVtIFBvbGljeUVycm9yIHsKKyAgICBQb2xpY3lFcnJvckZhaWxlZCA9IDE5
OSwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSA9IDEwMCwKKyAgICBQb2xpY3lF
cnJvckNhbm5vdFNob3dVUkwgPSAxMDEsCisgICAgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1
cHRlZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAorICAgIFBvbGljeUVycm9yQ2Fubm90VXNlUmVzdHJp
Y3RlZFBvcnQgPSAxMDMKK307CisKK2VudW0gUGx1Z2luRXJyb3IgeworICAgIFBsdWdpbkVycm9y
RmFpbGVkID0gMjk5LAorICAgIFBsdWdpbkVycm9yQ2Fubm90RmluZFBsdWdpbiA9IDIwMCwKKyAg
ICBQbHVnaW5FcnJvckNhbm5vdExvYWRQbHVnaW4gPSAyMDEsCisgICAgUGx1Z2luRXJyb3JKYXZh
VW5hdmFpbGFibGUgPSAyMDIsCisgICAgUGx1Z2luRXJyb3JDb25uZWN0aW9uQ2FuY2VsbGVkID0g
MjAzLAorICAgIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQgPSAyMDQKK307CisKK2VudW0gRG93
bmxvYWRFcnJvciB7CisgICAgRG93bmxvYWRFcnJvck5ldHdvcmsgPSA0OTksCisgICAgRG93bmxv
YWRFcnJvckNhbmNlbGxlZEJ5VXNlciA9IDQwMCwKKyAgICBEb3dubG9hZEVycm9yRGVzdGluYXRp
b24gPSA0MDEKK307CisKK2VudW0gUHJpbnRFcnJvciB7CisgICAgUHJpbnRFcnJvckdlbmVyYWwg
PSA1OTksCisgICAgUHJpbnRFcnJvclByaW50ZXJOb3RGb3VuZCA9IDUwMCwKKyAgICBQcmludEVy
cm9ySW52YWxpZFBhZ2VSYW5nZSA9IDUwMQorfTsKKworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGludGVycnVwdGVkRm9y
UG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9y
IGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKK1Jlc291
cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
K1Jlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKK1Jlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGluYXRp
b25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpOworUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNvbnN0IFByaW50Q29udGV4dCosIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJy
b3IoY29uc3QgUHJpbnRDb250ZXh0Kik7CitSZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFuZ2VU
b1ByaW50KGNvbnN0IFByaW50Q29udGV4dCopOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9FdmVudExvb3BHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlZjdiNWNiNzdiOTQ0ZmJlMDU4MTg0Zjg2
MTQ0MDUyYWU2YTUyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0V2
ZW50TG9vcEd0ay5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgi
CisKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBFdmVu
dExvb3A6OmN5Y2xlKCkKK3sKKyAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFM
U0UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lz
dGVtR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTIwNzI5NmM2YTZjYjQ2NjI4Zjc3MDk2MzRlMjRlNzJm
ODg3YzlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lzdGVt
R3RrLmNwcApAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgorI2luY2x1ZGUg
IlVVSUQuaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HbGli
VXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qIE9uIGxpbnV4
IGZpbGUgbmFtZXMgYXJlIGp1c3QgcmF3IGJ5dGVzLCBzbyBhbHNvIHN0cmluZ3MgdGhhdCBjYW5u
b3QgYmUgZW5jb2RlZCBpbiBhbnkgd2F5CisgKiBhcmUgdmFsaWQgZmlsZSBuYW1lcy4gVGhpcyBt
ZWFuIHRoYXQgd2UgY2Fubm90IGp1c3Qgc3RvcmUgYSBmaWxlIG5hbWUgYXMtaXMgaW4gYSBTdHJp
bmcKKyAqIGJ1dCB3ZSBoYXZlIHRvIGVzY2FwZSBpdC4KKyAqIE9uIFdpbmRvd3MgdGhlIEdMaWIg
ZmlsZSBuYW1lIGVuY29kaW5nIGlzIGFsd2F5cyBVVEYtOCBzbyB3ZSBjYW4gb3B0aW1pemUgdGhp
cyBjYXNlLiAqLworU3RyaW5nIGZpbGVuYW1lVG9TdHJpbmcoY29uc3QgY2hhciogZmlsZW5hbWUp
Cit7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisjaWYg
T1MoV0lORE9XUykKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZSk7CisjZWxz
ZQorICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWRTdHJpbmcoZ191cmlfZXNjYXBlX3N0cmluZyhm
aWxlbmFtZSwgIi86IiwgZmFsc2UpKTsKKyAgICByZXR1cm4gZXNjYXBlZFN0cmluZy5nZXQoKTsK
KyNlbmRpZgorfQorCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gcGF0aC51dGY4KCk7Cisj
ZWxzZQorICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1lKGdfdXJpX3VuZXNjYXBlX3N0cmluZyhw
YXRoLnV0ZjgoKS5kYXRhKCksIDApKTsKKyAgICByZXR1cm4gZmlsZW5hbWUuZ2V0KCk7CisjZW5k
aWYKK30KKworLy8gQ29udmVydHMgYSBzdHJpbmcgdG8gc29tZXRoaW5nIHN1aXRhYmxlIHRvIGJl
IGRpc3BsYXllZCB0byB0aGUgdXNlci4KK1N0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gc3RyaW5nOwor
I2Vsc2UKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHN0
cmluZyk7CisgICAgR093blB0cjxnY2hhcj4gZGlzcGxheShnX2ZpbGVuYW1lX3RvX3V0ZjgoZmls
ZW5hbWUuZGF0YSgpLCAwLCAwLCAwLCAwKSk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICBy
ZXR1cm4gc3RyaW5nOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlzcGxheS5nZXQo
KSk7CisjZW5kaWYKK30KKworYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQor
ICAgICAgICByZXN1bHQgPSBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9URVNU
X0VYSVNUUyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQ1N0cmlu
ZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICgh
ZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9IGdfcmVtb3ZlKGZpbGVuYW1lLmRh
dGEoKSkgPT0gMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZGVsZXRlRW1wdHlE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
KworICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9IGdfcm1kaXIo
ZmlsZW5hbWUuZGF0YSgpKSA9PSAwOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBn
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKK3sK
KyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwor
ICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
R1N0YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5k
YXRhKCksICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJlc3VsdFNpemUgPSBzdGF0UmVzdWx0LnN0X3NpemU7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5n
JiBwYXRoLCB0aW1lX3QmIG1vZGlmaWVkVGltZSkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKKyAg
ICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVzdWx0KTsKKyAg
ICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1vZGlmaWVk
VGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CisgICAgcmV0dXJuIHRydWU7CisKK30KKworYm9v
bCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFk
YXRhKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0
KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1bHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBzdGF0UmVz
dWx0LnN0X210aW1lOworICAgIG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsK
KyAgICBtZXRhZGF0YS50eXBlID0gU19JU0RJUihzdGF0UmVzdWx0LnN0X21vZGUpID8gRmlsZU1l
dGFkYXRhOjpUeXBlRGlyZWN0b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKKyAgICByZXR1
cm4gdHJ1ZTsKKworfQorCitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAgaWYgKHBhdGguZW5k
c1dpdGgoR19ESVJfU0VQQVJBVE9SX1MpKQorICAgICAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVu
dDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBwYXRoICsgR19ESVJfU0VQQVJBVE9SX1MgKyBj
b21wb25lbnQ7Cit9CisKK2Jvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZ2ludCByZXN1bHQgPSBnX21rZGlyX3dpdGhfcGFyZW50cyhmaWxlbmFtZS5kYXRhKCks
IFNfSVJXWFUpOworCisgICAgcmV0dXJuIHJlc3VsdCA9PSAwOworfQorCitTdHJpbmcgaG9tZURp
cmVjdG9yeVBhdGgoKQoreworICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGdfZ2V0X2hvbWVf
ZGlyKCkpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aE5h
bWUpCit7CisgICAgaWYgKHBhdGhOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHBhdGhO
YW1lOworCisgICAgQ1N0cmluZyB0bXBGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoTmFtZSk7CisgICAgR093blB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9iYXNl
bmFtZSh0bXBGaWxlbmFtZS5kYXRhKCkpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChi
YXNlTmFtZS5nZXQoKSk7Cit9CisKK0NTdHJpbmcgYXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKCkK
K3sKKyAgICBDU3RyaW5nIHBhdGggPSBnZXRDdXJyZW50RXhlY3V0YWJsZVBhdGgoKTsKKyAgICBp
ZiAoIXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwYXRoOworCisgICAgLy8gSWYgdGhl
IGFib3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUuCisgICAgR093blB0cjxj
aGFyPiBjdXJyZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKGdfZ2V0X3ByZ25hbWUo
KSkpOworICAgIGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAgICAgIHJldHVybiBDU3Ry
aW5nKCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGN1
cnJlbnRFeGVQYXRoLmdldCgpKSk7CisgICAgcmV0dXJuIGRpcm5hbWUuZ2V0KCk7Cit9CisKK0NT
dHJpbmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpCit7CisgICAgc3RhdGljIENTdHJpbmcgY2FjaGVk
UGF0aDsKKyAgICBpZiAoIWNhY2hlZFBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBjYWNo
ZWRQYXRoOworCisjaWYgT1MoV0lORE9XUykKKyAgICBITU9EVUxFIGhtb2R1bGUgPSAwOworICAg
IEdldE1vZHVsZUhhbmRsZUV4QShHRVRfTU9EVUxFX0hBTkRMRV9FWF9GTEFHX0ZST01fQUREUkVT
UywgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2hhcmVkUmVzb3VyY2VzUGF0aCksICZobW9kdWxl
KTsKKworICAgIEdPd25QdHI8Z2NoYXI+IHJ1bnRpbWVEaXIoZ193aW4zMl9nZXRfcGFja2FnZV9p
bnN0YWxsYXRpb25fZGlyZWN0b3J5X29mX21vZHVsZShobW9kdWxlKSk7CisgICAgR093blB0cjxn
Y2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShydW50aW1lRGlyLmdldCgpLCAic2hhcmUi
LCAid2Via2l0Z3RrLSJXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7CisjZWxz
ZQorICAgIEdPd25QdHI8Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRfZmlsZW5hbWUoREFUQV9ESVIs
ICJ3ZWJraXRndGstIldFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkcsIE5VTEwpKTsKKyNlbmRp
ZgorCisgICAgY2FjaGVkUGF0aCA9IGRhdGFQYXRoLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQ
YXRoOworfQorCit1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY29uc3QgY2hhciog
cGF0aCkKK3sKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdf
Zm9yX3BhdGgocGF0aCkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0
R1JlZihnX2ZpbGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRS
SUJVVEVfRklMRVNZU1RFTV9GUkVFLCAwLCAwKSk7CisgICAgaWYgKCFmaWxlSW5mbykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV91aW50
NjQoZmlsZUluZm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9GUkVFKTsKK30K
KworU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8qIE5v
IG51bGwgY2hlY2tpbmcgbmVlZGVkICovCisgICAgR093blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0
aF9nZXRfZGlybmFtZShmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKSk7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlybmFtZS5nZXQoKSk7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZp
bHRlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworCisgICAgQ1N0cmluZyBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBHRGlyKiBkaXIgPSBn
X2Rpcl9vcGVuKGZpbGVuYW1lLmRhdGEoKSwgMCwgMCk7CisgICAgaWYgKCFkaXIpCisgICAgICAg
IHJldHVybiBlbnRyaWVzOworCisgICAgR1BhdHRlcm5TcGVjICpwc3BlYyA9IGdfcGF0dGVybl9z
cGVjX25ldygoZmlsdGVyLnV0ZjgoKSkuZGF0YSgpKTsKKyAgICB3aGlsZSAoY29uc3QgY2hhciog
bmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSB7CisgICAgICAgIGlmICghZ19wYXR0ZXJuX21h
dGNoX3N0cmluZyhwc3BlYywgbmFtZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBHT3duUHRyPGdjaGFyPiBlbnRyeShnX2J1aWxkX2ZpbGVuYW1lKGZpbGVuYW1lLmRhdGEoKSwg
bmFtZSwgTlVMTCkpOworICAgICAgICBlbnRyaWVzLmFwcGVuZChmaWxlbmFtZVRvU3RyaW5nKGVu
dHJ5LmdldCgpKSk7CisgICAgfQorICAgIGdfcGF0dGVybl9zcGVjX2ZyZWUocHNwZWMpOworICAg
IGdfZGlyX2Nsb3NlKGRpcik7CisKKyAgICByZXR1cm4gZW50cmllczsKK30KKworU3RyaW5nIG9w
ZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX3N0cmR1cF9wcmludGYo
IiVzJXMiLCBwcmVmaXgudXRmOCgpLmRhdGEoKSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3duUHRyPGdjaGFyPiB0ZW1wUGF0aChnX2J1aWxkX2Zp
bGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsKKyAgICBHUmVm
UHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgodGVtcFBhdGgu
Z2V0KCkpKTsKKworICAgIGhhbmRsZSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0
KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhh
bmRsZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCh0ZW1wUGF0aC5nZXQoKSk7Cit9CisKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShj
b25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIENTdHJpbmcgZnNS
ZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgaWYgKGZzUmVwLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKworICAgIEdS
ZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmc1JlcC5k
YXRhKCkpKTsKKyAgICBHRmlsZUlPU3RyZWFtKiBpb1N0cmVhbSA9IDA7CisgICAgaWYgKG1vZGUg
PT0gT3BlbkZvclJlYWQpCisgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5fcmVhZHdyaXRl
KGZpbGUuZ2V0KCksIDAsIDApOworICAgIGVsc2UgaWYgKG1vZGUgPT0gT3BlbkZvcldyaXRlKSB7
CisgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmc1JlcC5kYXRhKCksIHN0YXRpY19jYXN0PEdGaWxl
VGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAg
ICAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwg
MCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX2NyZWF0ZV9y
ZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsKKyAgICB9CisK
KyAgICByZXR1cm4gaW9TdHJlYW07Cit9CisKK3ZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSYgaGFuZGxlKQoreworICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShoYW5kbGUpLCAw
LCAwKTsKKyAgICBnX29iamVjdF91bnJlZihoYW5kbGUpOworICAgIGhhbmRsZSA9IGludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGU7Cit9CisKK2xvbmcgbG9uZyBzZWVrRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCit7
CisgICAgR1NlZWtUeXBlIHNlZWtUeXBlID0gR19TRUVLX1NFVDsKKyAgICBzd2l0Y2ggKG9yaWdp
bikgeworICAgIGNhc2UgU2Vla0Zyb21CZWdpbm5pbmc6CisgICAgICAgIHNlZWtUeXBlID0gR19T
RUVLX1NFVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZWVrRnJvbUN1cnJlbnQ6CisgICAg
ICAgIHNlZWtUeXBlID0gR19TRUVLX0NVUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZWVr
RnJvbUVuZDoKKyAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfRU5EOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICBpZiAoIWdfc2Vla2FibGVfc2VlayhHX1NFRUtBQkxFKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9z
dHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCwgc2Vla1R5cGUsIDAsIDApKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGdf
c2Vla2FibGVfdGVsbChHX1NFRUtBQkxFKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19J
T19TVFJFQU0oaGFuZGxlKSkpKTsKK30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgZ3NpemUg
Ynl0ZXNXcml0dGVuOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGwoZ19pb19zdHJlYW1f
Z2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhLCBsZW5ndGgsICZieXRlc1dyaXR0ZW4sIDAsIDApOworICAgIHJl
dHVybiBieXRlc1dyaXR0ZW47Cit9CisKK2ludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBHT3duUHRyPEdFcnJv
cj4gZXJyb3I7CisgICAgZG8geworICAgICAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9z
dHJlYW1fcmVhZChnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRs
ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
LCBsZW5ndGgsIDAsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgPj0g
MCkKKyAgICAgICAgICAgIHJldHVybiBieXRlc1JlYWQ7CisgICAgfSB3aGlsZSAoZXJyb3IgJiYg
ZXJyb3ItPmNvZGUgPT0gR19GSUxFX0VSUk9SX0lOVFIpOworICAgIHJldHVybiAtMTsKK30KKwor
Ym9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworI2lmIE9TKFdJTkRP
V1MpCisgICAgcmV0dXJuIDo6RnJlZUxpYnJhcnkobW9kdWxlKTsKKyNlbHNlCisgICAgcmV0dXJu
IGdfbW9kdWxlX2Nsb3NlKG1vZHVsZSk7CisjZW5kaWYKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25Q
dHJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliNjkzZjQxNWU5NzgyNDdmZDNjOTM4NGQ0ZWQyNTFlZTA0
OWI4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsu
Y3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBT
LkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50PihH
ZGtFdmVudCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdka19ldmVudF9mcmVlKHB0
cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHdGtJY29uSW5mbz4oR3Rr
SWNvbkluZm8qIGluZm8pCit7CisgICAgaWYgKGluZm8pCisgICAgICAgIGd0a19pY29uX2luZm9f
ZnJlZShpbmZvKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HT3du
UHRyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZDVlODM3MWVkMzY4ZjQxNWQ4OTc0MzI0ZWU2MmQ3MWZlYjdhMmQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmgKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBH
T3duUHRyR3RrX2gKKyNkZWZpbmUgR093blB0ckd0a19oCisKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVP
d25lZEdQdHI8R2RrRXZlbnQ+KEdka0V2ZW50Kik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25l
ZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25JbmZvKik7CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTUwNmRmOTAwN2QyNGNjMDc2Nzc2OGRl
ZmQxMDU2NjJmYzM5YjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9H
UmVmUHRyR3RrLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisKKyNkZWZpbmUgU0VDUkVUX1dJVEhfVU5TVEFCTEUgMQor
I2RlZmluZSBTRUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdFIDEKKworI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic2VjcmV0L3NlY3JldC5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmR1B0cihH
dGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3RrX3RhcmdldF9s
aXN0X3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBndGtf
dGFyZ2V0X2xpc3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gU2VjcmV0VmFsdWUqIHJl
ZkdQdHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzZWNyZXRf
dmFsdWVfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBzZWNy
ZXRfdmFsdWVfdW5yZWYocHRyKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0ZW1w
bGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ2RrX2N1cnNvcl9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnZGtfY3Vyc29yX3VucmVmKHB0cik7Cit9CisjZW5kaWYKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0dSZWZQdHJHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTkyODY0YTkyMjlkYWI4ODNiZWZhNTYyYjIz
NWFkOGFjMzk2ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgR1JlZlB0ckd0a19oCisjZGVmaW5lIEdSZWZQdHJHdGtfaAorCisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfU2VjcmV0VmFs
dWUgU2VjcmV0VmFsdWU7CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZSA8PiBHdGtUYXJn
ZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOworCit0ZW1wbGF0ZSA8PiBTZWNyZXRWYWx1ZSog
cmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNl
Y3JldFZhbHVlKiBwdHIpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3RlbXBsYXRlIDw+
IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHZGtDdXJzb3IqIHB0cik7CisjZW5kaWYKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9HYW1lcGFkc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY5NjA5ZGQwODcxMmQxMjg1MjM2NGJm
MjBlNmRiYzNmNGFmZmFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R2FtZXBhZHNHdGsuY3BwCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2FtZXBhZHMuaCIKKworI2lmIEVOQUJMRShHQU1F
UEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCisjaW5jbHVkZSAiR2FtZXBh
ZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRz
dHJlYW0uaD4KKyNpbmNsdWRlIDxndWRldi9ndWRldi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZERldmljZUd0ayA6IHB1YmxpYyBHYW1l
cGFkRGV2aWNlTGludXggeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdhbWVwYWRE
ZXZpY2VHdGs+IGNyZWF0ZShTdHJpbmcgZGV2aWNlRmlsZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgR2FtZXBhZERldmljZUd0ayhkZXZpY2VGaWxlKSk7CisgICAgfQorICAg
IH5HYW1lcGFkRGV2aWNlR3RrKCk7CisKK3ByaXZhdGU6CisgICAgR2FtZXBhZERldmljZUd0ayhT
dHJpbmcgZGV2aWNlRmlsZSk7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVhZENhbGxiYWNrKEdP
YmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKTsKKyAgICBHUmVmUHRyPEdJbnB1
dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwor
fTsKKworR2FtZXBhZERldmljZUd0azo6R2FtZXBhZERldmljZUd0ayhTdHJpbmcgZGV2aWNlRmls
ZSkKKyAgICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZpY2VGaWxlKQoreworICAgIGlmIChtX2Zp
bGVEZXNjcmlwdG9yID09IC0xKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJlYW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZB
TFNFKSk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1f
Y3JlYXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgp
KSwgMCkpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgZ19z
b3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAwKTsKK30KKworR2FtZXBhZERldmljZUd0azo6
fkdhbWVwYWREZXZpY2VHdGsoKQoreworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgZ19zb3Vy
Y2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Cit9CisKK2dib29sZWFuIEdhbWVwYWREZXZpY2VH
dGs6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gcmVpbnRlcnByZXRfY2Fz
dDxHYW1lcGFkRGV2aWNlR3RrKj4oZGF0YSk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKKworICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxhYmxl
X2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5nKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKHBv
bGxhYmxlU3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZXZlbnQsIHNpemVvZihldmVudCksIDAsICZlcnJvci5vdXRQdHIo
KSk7CisKKyAgICAvLyBGSVhNRTogUHJvcGVybHkgbG9nIHRoZSBlcnJvci4KKyAgICAvLyBJbiB0
aGUgY2FzZSBvZiBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLIGVycm9yIHJldHVybiBUUlVFIHRvIHdh
aXQgdW50aWwKKyAgICAvLyB0aGUgc291cmNlIGJlY29tZXMgcmVhZGFibGUgYWdhaW4gYW5kIEZB
TFNFIG90aGVyd2lzZS4KKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBnX2Vycm9yX21h
dGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfV09VTERfQkxPQ0spOwor
CisgICAgQVNTRVJUX1VOVVNFRChsZW4sIGxlbiA9PSBzaXplb2YoZXZlbnQpKTsKKyAgICBnYW1l
cGFkRGV2aWNlLT51cGRhdGVGb3JFdmVudChldmVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K2NsYXNzIEdhbWVwYWRzR3RrIHsKK3B1YmxpYzoKKyAgICBHYW1lcGFkc0d0ayh1bnNpZ25lZCBs
ZW5ndGgpOworCisgICAgdm9pZCByZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsKKworICAgIHZvaWQg
dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqKTsKKworcHJpdmF0ZToKKyAgICB+R2FtZXBh
ZHNHdGsoKTsKKyAgICBzdGF0aWMgdm9pZCBvblVFdmVudENhbGxiYWNrKEdVZGV2Q2xpZW50Kiwg
Z2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBncG9pbnRlciBkYXRhKTsKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKik7CisKKyAgICBWZWN0b3I8T3du
UHRyPEdhbWVwYWREZXZpY2VHdGs+ID4gbV9zbG90czsKKyAgICBIYXNoTWFwPFN0cmluZywgR2Ft
ZXBhZERldmljZUd0ayo+IG1fZGV2aWNlTWFwOworCisgICAgR1JlZlB0cjxHVWRldkNsaWVudD4g
bV9ndWRldkNsaWVudDsKK307CisKK0dhbWVwYWRzR3RrOjpHYW1lcGFkc0d0ayh1bnNpZ25lZCBs
ZW5ndGgpCisgICAgOiBtX3Nsb3RzKGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c3Vic3lzdGVtc1tdID0geyAiaW5wdXQiLCAwIH07CisgICAgbV9ndWRldkNsaWVudCA9IGFkb3B0
R1JlZihnX3VkZXZfY2xpZW50X25ldyhzdWJzeXN0ZW1zKSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX2d1ZGV2Q2xpZW50LmdldCgpLCAidWV2ZW50IiwgR19DQUxMQkFDSyhvblVFdmVudENhbGxi
YWNrKSwgdGhpcyk7CisKKyAgICBHT3duUHRyPEdMaXN0PiBkZXZpY2VzTGlzdChnX3VkZXZfY2xp
ZW50X3F1ZXJ5X2J5X3N1YnN5c3RlbShtX2d1ZGV2Q2xpZW50LmdldCgpLCBzdWJzeXN0ZW1zWzBd
KSk7CisgICAgZm9yIChHTGlzdCogbGlzdEl0ZW0gPSBkZXZpY2VzTGlzdC5nZXQoKTsgbGlzdEl0
ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pKSB7CisgICAgICAgIEdVZGV2RGV2
aWNlKiBkZXZpY2UgPSBHX1VERVZfREVWSUNFKGxpc3RJdGVtLT5kYXRhKTsKKyAgICAgICAgU3Ry
aW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdfdWRldl9kZXZpY2VfZ2V0X2Rldmlj
ZV9maWxlKGRldmljZSkpOworICAgICAgICBpZiAoaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCisg
ICAgICAgICAgICByZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKKyAgICAgICAgZ19vYmplY3Rf
dW5yZWYoZGV2aWNlKTsKKyAgICB9Cit9CisKK0dhbWVwYWRzR3RrOjp+R2FtZXBhZHNHdGsoKQor
eworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2d1ZGV2Q2xpZW50
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKK30KKwordm9p
ZCBHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCit7CisgICAg
TE9HKEdhbWVwYWQsICJHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxl
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmlj
ZUZpbGUpKTsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fc2xvdHMu
c2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGlmICghbV9zbG90c1tpbmRleF0pIHsKKyAgICAg
ICAgICAgIG1fc2xvdHNbaW5kZXhdID0gR2FtZXBhZERldmljZUd0azo6Y3JlYXRlKGRldmljZUZp
bGUpOworICAgICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKGRldmljZUZpbGUsIG1fc2xvdHNbaW5k
ZXhdLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIEdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQorewor
ICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZp
Y2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBBU1NFUlQobV9kZXZpY2VNYXAuY29udGFpbnMo
ZGV2aWNlRmlsZSkpOworCisgICAgR2FtZXBhZERldmljZUd0ayogZ2FtZXBhZERldmljZSA9IG1f
ZGV2aWNlTWFwLnRha2UoZGV2aWNlRmlsZSk7CisgICAgc2l6ZV90IGluZGV4ID0gbV9zbG90cy5m
aW5kKGdhbWVwYWREZXZpY2UpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CisKKyAg
ICBtX3Nsb3RzW2luZGV4XS5jbGVhcigpOworfQorCit2b2lkIEdhbWVwYWRzR3RrOjp1cGRhdGVH
YW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKK3sKKyAgICBBU1NFUlQobV9zbG90cy5zaXpl
KCkgPT0gaW50by0+bGVuZ3RoKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2xvdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9z
bG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKKyAgICAgICAgICAgIEdhbWVwYWREZXZpY2VHdGsqIGdh
bWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOworICAgICAgICAgICAgUmVmUHRyPEdhbWVw
YWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQor
ICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKKworICAgICAgICAg
ICAgZ2FtZXBhZC0+aW5kZXgoaSk7CisgICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2
aWNlLT5pZCgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNl
LT50aW1lc3RhbXAoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2Ut
PmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKKyAgICAgICAgICAgIGdh
bWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZp
Y2UtPmJ1dHRvbnNEYXRhKCkpOworCisgICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW50by0+c2V0KGksIDApOworICAgIH0KK30K
Kwordm9pZCBHYW1lcGFkc0d0azo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCogdWRldkNs
aWVudCwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqIGRldmljZSwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBpZiAoIWlzR2FtZXBhZERldmljZShkZXZpY2UpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHYW1lcGFkc0d0ayogZ2FtZXBhZHNHdGsgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWRz
R3RrKj4oZGF0YSk7CisgICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdf
dWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOworCisgICAgaWYgKCFnX3N0cmNt
cDAoYWN0aW9uLCAiYWRkIikpCisgICAgICAgIGdhbWVwYWRzR3RrLT5yZWdpc3RlckRldmljZShk
ZXZpY2VGaWxlKTsKKyAgICBlbHNlIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgInJlbW92ZSIpKQor
ICAgICAgICBnYW1lcGFkc0d0ay0+dW5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKK30KKwor
Z2Jvb2xlYW4gR2FtZXBhZHNHdGs6OmlzR2FtZXBhZERldmljZShHVWRldkRldmljZSogZGV2aWNl
KQoreworICAgIGNvbnN0IGdjaGFyKiBkZXZpY2VGaWxlID0gZ191ZGV2X2RldmljZV9nZXRfZGV2
aWNlX2ZpbGUoZGV2aWNlKTsKKyAgICBjb25zdCBnY2hhciogc3lzZnNQYXRoID0gZ191ZGV2X2Rl
dmljZV9nZXRfc3lzZnNfcGF0aChkZXZpY2UpOworICAgIGlmICghZGV2aWNlRmlsZSB8fCAhc3lz
ZnNQYXRoKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoIWdfdWRldl9kZXZpY2Vf
aGFzX3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUIikgfHwgIWdfdWRldl9kZXZpY2VfaGFzX3By
b3BlcnR5KGRldmljZSwgIklEX0lOUFVUX0pPWVNUSUNLIikpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIHJldHVybiBnX3N0cl9oYXNfcHJlZml4KGRldmljZUZpbGUsICIvZGV2L2lucHV0
L2pzIik7Cit9CisKK3ZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHYW1lcGFkc0d0aywgZ2FtZXBhZHNHdGssIChpbnRvLT5s
ZW5ndGgoKSkpOworICAgIGdhbWVwYWRzR3RrLnVwZGF0ZUdhbWVwYWRMaXN0KGludG8pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3Bw
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzRhMmVhYjEyOTYzMzRkNGEwMDYwNWE0MjFiMDJmZWFlNDgyZDc3OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3Bw
CkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5oIgorCisjaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGludCBnTGF5b3V0Q29sdW1uU3BhY2luZyA9IDEy
Oworc3RhdGljIGNvbnN0IGludCBnTGF5b3V0Um93U3BhY2luZyA9IDY7CitzdGF0aWMgY29uc3Qg
aW50IGdCdXR0b25TcGFjaW5nID0gNTsKKworR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQorICAgIDogbV9kaWFsb2coMCkKKyAgICAs
IG1fbG9naW5FbnRyeSgwKQorICAgICwgbV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVt
YmVyQ2hlY2tCdXR0b24oMCkKKyAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAgICAsIG1f
Y3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1vZGUpCit7Cit9CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VN
b2RlIG1vZGUpCisgICAgOiBtX2RpYWxvZyhndGtfZGlhbG9nX25ldygpKQorICAgICwgbV9sb2dp
bkVudHJ5KDApCisgICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKKyAgICAsIG1fcmVtZW1iZXJDaGVj
a0J1dHRvbigwKQorICAgICwgbV9jaGFsbGVuZ2UoY2hhbGxlbmdlKQorICAgICwgbV9jcmVkZW50
aWFsU3RvcmFnZU1vZGUobW9kZSkKK3sKKyAgICBHdGtXaWRnZXQqIGNvbnRlbnRBcmVhID0gZ3Rr
X2RpYWxvZ19nZXRfY29udGVudF9hcmVhKEdUS19ESUFMT0cobV9kaWFsb2cpKTsKKyAgICBndGtf
Y29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihHVEtfRElBTE9HKG1fZGlh
bG9nKSksIDUpOworICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChjb250ZW50QXJlYSks
IDIpOyAvKiAyICogNSArIDIgPSAxMiAqLworCisgICAgR3RrV2luZG93KiB3aW5kb3cgPSBHVEtf
V0lORE9XKG1fZGlhbG9nKTsKKyAgICBndGtfd2luZG93X3NldF9yZXNpemFibGUod2luZG93LCBG
QUxTRSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUod2luZG93LCAiIik7CisgICAgZ3RrX3dp
bmRvd19zZXRfaWNvbl9uYW1lKHdpbmRvdywgR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNBVElP
Tik7CisKKyAgICBpZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2luZG93X3NldF90cmFu
c2llbnRfZm9yKHdpbmRvdywgcGFyZW50V2luZG93KTsKKworICAgIGNyZWF0ZUNvbnRlbnRzSW5D
b250YWluZXIoY29udGVudEFyZWEpOworfQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0
YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQor
eworICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0OworICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwg
Ym94KTsKKworICAgIEd0a1dpZGdldCogdGFibGUgPSBndGtfdGFibGVfbmV3KDEsIDIsIEZBTFNF
KTsKKyAgICBndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCBnTGF5
b3V0Q29sdW1uU3BhY2luZyk7CisgICAgZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RB
QkxFKHRhYmxlKSwgZ0xheW91dFJvd1NwYWNpbmcpOworCisgICAgR3RrV2lkZ2V0KiBmaXJzdENv
bHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgIGludCBy
b3dOdW1iZXIgPSAwOworICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgeworICAgICAgICBp
ZiAocm93TnVtYmVyKQorICAgICAgICAgICAgZ3RrX3RhYmxlX3Jlc2l6ZShHVEtfVEFCTEUodGFi
bGUpLCByb3dOdW1iZXIgKyAxLCAyKTsKKworICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVt
bldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICBHdGtB
dHRhY2hPcHRpb25zIGF0dGFjaE9wdGlvbnMgPSBzdGF0aWNfY2FzdDxHdGtBdHRhY2hPcHRpb25z
PihHVEtfRVhQQU5EIHwgR1RLX0ZJTEwpOworICAgICAgICBndGtfdGFibGVfYXR0YWNoKEdUS19U
QUJMRSh0YWJsZSksIGZpcnN0Q29sdW1uV2lkZ2V0LAorICAgICAgICAgICAgMCwgc2Vjb25kQ29s
dW1uV2lkZ2V0ID8gMSA6IDIsCisgICAgICAgICAgICByb3dOdW1iZXIsIHJvd051bWJlciArIDEs
CisgICAgICAgICAgICBhdHRhY2hPcHRpb25zLCBhdHRhY2hPcHRpb25zLAorICAgICAgICAgICAg
MCwgMCk7CisKKyAgICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdldCkKKyAgICAgICAgICAgIGd0
a190YWJsZV9hdHRhY2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRhYmxlKSwgc2Vjb25kQ29sdW1uV2lk
Z2V0LCAxLCAyLCByb3dOdW1iZXIsIHJvd051bWJlciArIDEpOworCisgICAgICAgIGZpcnN0Q29s
dW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJv
d051bWJlcisrOworICAgIH0KKworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgdGFibGUsIEZBTFNFLCBGQUxTRSwgMCk7Cit9
CisjZWxzZQorc3RhdGljIHZvaWQgcGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dpZGdldCog
Ym94LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7CisgICAgdmFfc3RhcnQoYXJn
dW1lbnRMaXN0LCBib3gpOworCisgICAgR3RrV2lkZ2V0KiBncmlkID0gZ3RrX2dyaWRfbmV3KCk7
CisgICAgZ3RrX2dyaWRfc2V0X2NvbHVtbl9zcGFjaW5nKEdUS19HUklEKGdyaWQpLCBnTGF5b3V0
Um93U3BhY2luZyk7CisgICAgZ3RrX2dyaWRfc2V0X3Jvd19zcGFjaW5nKEdUS19HUklEKGdyaWQp
LCBnTGF5b3V0Um93U3BhY2luZyk7CisgICAgZ3RrX2dyaWRfc2V0X2NvbHVtbl9ob21vZ2VuZW91
cyhHVEtfR1JJRChncmlkKSwgVFJVRSk7CisKKyAgICBHdGtXaWRnZXQqIGZpcnN0Q29sdW1uV2lk
Z2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgaW50IHJvd051bWJl
ciA9IDA7CisgICAgd2hpbGUgKGZpcnN0Q29sdW1uV2lkZ2V0KSB7CisgICAgICAgIEd0a1dpZGdl
dCogc2Vjb25kQ29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7
CisgICAgICAgIGludCBmaXJzdFdpZGdldFdpZHRoID0gc2Vjb25kQ29sdW1uV2lkZ2V0ID8gMSA6
IDI7CisKKyAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBmaXJzdENvbHVt
bldpZGdldCwgMCwgcm93TnVtYmVyLCBmaXJzdFdpZGdldFdpZHRoLCAxKTsKKyAgICAgICAgZ3Rr
X3dpZGdldF9zZXRfaGV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7CisgICAgICAgIGd0
a193aWRnZXRfc2V0X3ZleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOworCisgICAgICAg
IGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgICAgIGd0a19ncmlkX2F0dGFjaChH
VEtfR1JJRChncmlkKSwgc2Vjb25kQ29sdW1uV2lkZ2V0LCAxLCByb3dOdW1iZXIsIDEsIDEpOwor
ICAgICAgICAgICAgZ3RrX3dpZGdldF9zZXRfaGV4cGFuZChzZWNvbmRDb2x1bW5XaWRnZXQsIFRS
VUUpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChzZWNvbmRDb2x1bW5XaWRn
ZXQsIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9h
cmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgcm93TnVtYmVyKys7CisgICAg
fQorCisgICAgdmFfZW5kKGFyZ3VtZW50TGlzdCk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQo
R1RLX0JPWChib3gpLCBncmlkLCBGQUxTRSwgRkFMU0UsIDApOworfQorI2VuZGlmCisKK3N0YXRp
YyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxvZ0xhYmVsKGNvbnN0IGNoYXIqIGxhYmVsU3RyaW5nLCBp
bnQgaG9yaXpvbnRhbFBhZGRpbmcgPSAwKQoreworICAgIEd0a1dpZGdldCogbGFiZWwgPSBndGtf
bGFiZWxfbmV3KGxhYmVsU3RyaW5nKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19N
SVNDKGxhYmVsKSwgMCwgMC41KTsKKyAgICBpZiAoaG9yaXpvbnRhbFBhZGRpbmcpCisgICAgICAg
IGd0a19taXNjX3NldF9wYWRkaW5nKEdUS19NSVNDKGxhYmVsKSwgMCwgaG9yaXpvbnRhbFBhZGRp
bmcpOworICAgIHJldHVybiBsYWJlbDsKK30KKworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlRGlh
bG9nRW50cnkoR3RrV2lkZ2V0KiogbWVtYmVyKQoreworICAgICptZW1iZXIgPSBndGtfZW50cnlf
bmV3KCk7CisgICAgZ3RrX2VudHJ5X3NldF9hY3RpdmF0ZXNfZGVmYXVsdChHVEtfRU5UUlkoKm1l
bWJlciksIFRSVUUpOworICAgIHJldHVybiAqbWVtYmVyOworfQorCit2b2lkIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nOjpjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKEd0a1dpZGdldCogY29udGFp
bmVyKQoreworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0KiBoQm94ID0g
Z3RrX2hib3hfbmV3KEZBTFNFLCBnTGF5b3V0Q29sdW1uU3BhY2luZyk7CisjZWxzZQorICAgIEd0
a1dpZGdldCogaEJveCA9IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBn
TGF5b3V0Q29sdW1uU3BhY2luZyk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX3NldF9ib3Jk
ZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihoQm94KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFpbmVyKSwgaEJveCk7CisKKyAgICBHdGtX
aWRnZXQqIGljb24gPSBndGtfaW1hZ2VfbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0RJQUxPR19B
VVRIRU5USUNBVElPTiwgR1RLX0lDT05fU0laRV9ESUFMT0cpOworICAgIGd0a19taXNjX3NldF9h
bGlnbm1lbnQoR1RLX01JU0MoaWNvbiksIDAuNSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1goaEJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBHT3duUHRyPGNo
YXI+IHByb21wdChnX3N0cmR1cF9wcmludGYoCisgICAgICAgIF8oIlRoZSBzaXRlICVzOiVpIHJl
cXVlc3RzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIiksCisgICAgICAgIG1fY2hhbGxlbmdlLnBy
b3RlY3Rpb25TcGFjZSgpLmhvc3QoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICBtX2NoYWxsZW5n
ZS5wcm90ZWN0aW9uU3BhY2UoKS5wb3J0KCkpKTsKKworICAgIG1fcmVtZW1iZXJDaGVja0J1dHRv
biA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMoXygiX1JlbWVtYmVyIHBhc3N3
b3JkIikpOworICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dl
dF9jaGlsZChHVEtfQklOKG1fcmVtZW1iZXJDaGVja0J1dHRvbikpKSwgVFJVRSk7CisgICAgZ3Rr
X3dpZGdldF9zZXRfbm9fc2hvd19hbGwobV9yZW1lbWJlckNoZWNrQnV0dG9uLCBtX2NyZWRlbnRp
YWxTdG9yYWdlTW9kZSA9PSBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlKTsKKworCisgICAgLy8g
V2UgYXJlIGFkZGluZyB0aGUgYnV0dG9uIGJveCBoZXJlIG1hbnVhbGx5IGluc3RlYWQgb2YgdXNp
bmcgdGhlIHJlYWR5LW1hZGUgR3RrRGlhbG9nIGJ1dHRvbnMuCisgICAgLy8gVGhpcyBpcyBzbyB0
aGF0IHdlIGNhbiBzaGFyZSB0aGUgY29kZSB3aXRoIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvIG5v
dCB1c2UgR3RrRGlhbG9nLgorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0
KiBidXR0b25Cb3ggPSBndGtfaGJ1dHRvbl9ib3hfbmV3KCk7CisjZWxzZQorICAgIEd0a1dpZGdl
dCogYnV0dG9uQm94ID0gZ3RrX2J1dHRvbl9ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9O
VEFMKTsKKyNlbmRpZgorICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChidXR0b25Cb3gp
LCBnQnV0dG9uU3BhY2luZyk7CisgICAgZ3RrX2J1dHRvbl9ib3hfc2V0X2xheW91dChHVEtfQlVU
VE9OX0JPWChidXR0b25Cb3gpLCBHVEtfQlVUVE9OQk9YX0VORCk7CisKKyAgICBtX29rYXlCdXR0
b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19PSyk7CisgICAgbV9jYW5j
ZWxCdXR0b24gPSBndGtfYnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19DQU5DRUwpOwor
ICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fY2FuY2VsQnV0dG9u
LCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYnV0dG9u
Qm94KSwgbV9va2F5QnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX29rYXlCdXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhidXR0b25DbGlja2VkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY2FuY2VsQnV0dG9uLCAiY2xpY2tl
ZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7CisKKyAgICBTdHJp
bmcgcmVhbG0gPSBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5yZWFsbSgpOworICAgIGlm
ICghcmVhbG0uaXNFbXB0eSgpKSB7CisgICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveCho
Qm94LAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0
Um93U3BhY2luZyksIE5VTEwsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJTZXJ2
ZXIgbWVzc2FnZToiKSksIGNyZWF0ZURpYWxvZ0xhYmVsKHJlYWxtLnV0ZjgoKS5kYXRhKCkpLAor
ICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiVXNlcm5hbWU6IikpLCBjcmVhdGVEaWFs
b2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8o
IlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fcGFzc3dvcmRFbnRyeSksCisgICAg
ICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIE5VTEwsCisgICAgICAgICAgICBidXR0b25C
b3gsIE5VTEwsIE5VTEwpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgcGFja1R3b0NvbHVtbkxh
eW91dEluQm94KGhCb3gsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9tcHQuZ2V0
KCksIGdMYXlvdXRSb3dTcGFjaW5nKSwgTlVMTCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xh
YmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5FbnRyeSksCisg
ICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNyZWF0ZURpYWxv
Z0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAgbV9yZW1lbWJlckNoZWNrQnV0
dG9uLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxMKTsKKyAg
ICB9CisKKyAgICBndGtfZW50cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKG1fcGFzc3dvcmRF
bnRyeSksIEZBTFNFKTsKKyAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJvbVBlcnNp
c3RlbnRTdG9yYWdlID0gbV9jaGFsbGVuZ2UucHJvcG9zZWRDcmVkZW50aWFsKCk7CisgICAgaWYg
KCFjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLmlzRW1wdHkoKSkgeworICAgICAgICBn
dGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSksIGNyZWRlbnRpYWxGcm9t
UGVyc2lzdGVudFN0b3JhZ2UudXNlcigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBndGtfZW50
cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fcGFzc3dvcmRFbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVy
c2lzdGVudFN0b3JhZ2UucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3RrX3Rv
Z2dsZV9idXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tC
dXR0b24pLCBUUlVFKTsKKyAgICB9Cit9CisKK3ZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6
OnNob3coKQoreworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9kZWZhdWx0KG1fb2theUJ1dHRvbiwg
VFJVRSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2RlZmF1bHQobV9va2F5QnV0dG9uKTsKKyAgICBn
dGtfd2lkZ2V0X2dyYWJfZm9jdXMobV9sb2dpbkVudHJ5KTsKKworICAgIGd0a193aWRnZXRfc2hv
d19hbGwobV9kaWFsb2cpOworfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpkZXN0
cm95KCkKK3sKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9kaWFsb2cpOworICAgIGRlbGV0ZSB0
aGlzOworfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoY29u
c3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3sKKyAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5
KCkpCisgICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVk
UmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChtX2NoYWxsZW5nZSk7CisgICAgZWxz
ZQorICAgICAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZENy
ZWRlbnRpYWwobV9jaGFsbGVuZ2UsIGNyZWRlbnRpYWwpOworfQorCit2b2lkIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nOjpidXR0b25DbGlja2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiBidXR0b24sIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCit7CisgICAgQ3JlZGVudGlhbCBjcmVkZW50
aWFsOworICAgIGlmIChidXR0b24gPT0gZGlhbG9nLT5tX29rYXlCdXR0b24pIHsKKyAgICAgICAg
Y29uc3QgY2hhciAqdXNlcm5hbWUgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGRpYWxv
Zy0+bV9sb2dpbkVudHJ5KSk7CisgICAgICAgIGNvbnN0IGNoYXIgKnBhc3N3b3JkID0gZ3RrX2Vu
dHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fcGFzc3dvcmRFbnRyeSkpOworICAgICAg
ICBib29sIHJlbWVtYmVyUGFzc3dvcmQgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0aXZlKEdU
S19UT0dHTEVfQlVUVE9OKGRpYWxvZy0+bV9yZW1lbWJlckNoZWNrQnV0dG9uKSk7CisgICAgICAg
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBwZXJzaXN0ZW5jZTsKKworICAgICAgICBpZiAocmVtZW1i
ZXJQYXNzd29yZCAmJiBkaWFsb2ctPm1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlID09IEFsbG93UGVy
c2lzdGVudFN0b3JhZ2UpCisgICAgICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRpYWxQZXJz
aXN0ZW5jZVBlcm1hbmVudDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGVyc2lzdGVuY2Ug
PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uOworCisgICAgICAgIGNyZWRlbnRpYWwg
PSBDcmVkZW50aWFsKFN0cmluZzo6ZnJvbVVURjgodXNlcm5hbWUpLCBTdHJpbmc6OmZyb21VVEY4
KHBhc3N3b3JkKSwgcGVyc2lzdGVuY2UpOworICAgIH0KKworICAgIGRpYWxvZy0+YXV0aGVudGlj
YXRlKGNyZWRlbnRpYWwpOworICAgIGRpYWxvZy0+ZGVzdHJveSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzc3YzgxYWRmZWZiZDE5MjY5NzU5YTk4NzE2NjFlZjQ4MTViYTM2
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAorI2RlZmlu
ZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZW51bSBDcmVkZW50aWFsU3RvcmFnZU1vZGUgewor
ICAgICAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNlciBpcyBhc2tlZCB3aGV0
aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCisgICAgICAgIERpc2FsbG93UGVy
c2lzdGVudFN0b3JhZ2UgLy8gQ3JlZGVudGlhbCBpbmZvcm1hdGlvbiBpcyBvbmx5IGtlcHQgaW4g
dGhlIHNlc3Npb24uCisgICAgfTsKKworICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKKyAgICBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgdmlydHVhbCB+R3RrQXV0aGVu
dGljYXRpb25EaWFsb2coKSB7IH0KKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGRlc3Ryb3ko
KTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtX
aWRnZXQqIGNvbnRhaW5lcik7CisgICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0ZShjb25zdCBD
cmVkZW50aWFsJik7CisgICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKKyAgICBHdGtXaWRnZXQqIG1f
bG9naW5FbnRyeTsKKyAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKKyAgICBHdGtXaWRn
ZXQqIG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKKyAgICBHdGtXaWRnZXQqIG1fb2theUJ1dHRvbjsK
KyAgICBHdGtXaWRnZXQqIG1fY2FuY2VsQnV0dG9uOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2
b2lkIGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyopOworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hhbGxlbmdlOworICAgIENy
ZWRlbnRpYWxTdG9yYWdlTW9kZSBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2M4YTMy
YzAyNjVlZDExNWQ4ZDc2MWVkN2E0ZmZkMjEzZWFkZDNmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrQ2xp
Y2tDb3VudGVyLmgiCisKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0d0a0NsaWNrQ291bnRlcjo6R3RrQ2xpY2tD
b3VudGVyKCkKKyAgICA6IG1fY3VycmVudENsaWNrQ291bnQoMCkKKyAgICAsIG1fcHJldmlvdXND
bGlja0J1dHRvbigwKQorICAgICwgbV9wcmV2aW91c0NsaWNrVGltZSgwKQoreworfQorCit2b2lk
IEd0a0NsaWNrQ291bnRlcjo6cmVzZXQoKQoreworICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAw
OworICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoKTsKKyAgICBtX3ByZXZpb3Vz
Q2xpY2tUaW1lID0gMDsKKyAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSAwOworfQorCitib29s
IEd0a0NsaWNrQ291bnRlcjo6c2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KEdka0V2ZW50QnV0dG9u
KiBidXR0b25FdmVudCkKK3sKKyAgICAvLyBGb3IgZG91YmxlIGFuZCB0cmlwbGUgY2xpY2tzIEdE
SyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVudAorICAgIC8vIGFuZCBhIHNw
ZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3ZSBkZXRlY3QgYSBzcGVj
aWFsIHByZXNzCisgICAgLy8gY29taW5nIHVwLCBpZ25vcmUgdGhpcyBldmVudCBhcyBpdCBjZXJ0
YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3IgdHJpcGxlCisgICAgLy8gY2xpY2suIFRoZSBj
b25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdvIERPTSBidXR0b24gcHJl
c3MgZXZlbnRzCisgICAgLy8gYXJlIGdlbmVyYXRlZC4KKyAgICBHT3duUHRyPEdka0V2ZW50PiBu
ZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7CisgICAgaWYgKCFuZXh0RXZlbnQpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18yQlVUVE9O
X1BSRVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGd1aW50MzIg
Z2V0RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBndWludDMyIHRpbWUgPSBnZGtf
ZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOworICAgIGlmICh0aW1lKQorICAgICAgICByZXR1cm4gdGlt
ZTsKKworICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXplcm8gdGltZSwgYnV0
IGV2ZW50cyBzeW50aGVzaXplZAorICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90IGFuZCB3ZSBtdXN0
IGNhbGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQorICAgIC8vIGlzIG5vdCBjYWxj
dWxhdGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aAor
ICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBvbiBzeW50aGVzaXpl
ZCBldmVudHMuCisgICAgR1RpbWVWYWwgdGltZVZhbHVlOworICAgIGdfZ2V0X2N1cnJlbnRfdGlt
ZSgmdGltZVZhbHVlKTsKKyAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMgKiAxMDAwKSArICh0
aW1lVmFsdWUudHZfdXNlYyAvIDEwMDApOworfQorCitpbnQgR3RrQ2xpY2tDb3VudGVyOjpjbGlj
a0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9u
KiBidXR0b25FdmVudCkKK3sKKyAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7Cisg
ICAgZ2ludCBkb3VibGVDbGlja1RpbWUgPSA1OworICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9
IGd0a19zZXR0aW5nc19nZXRfZm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0
KSk7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAiZ3RrLWRv
dWJsZS1jbGljay1kaXN0YW5jZSIsICZkb3VibGVDbGlja0Rpc3RhbmNlLAorICAgICAgICAgICAg
ICAgICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwgJmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7CisK
KyAgICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRvIHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJDb3Jl
IHdhbnRzIHRvIGtub3cgYWJvdXQKKyAgICAvLyBxdWFkcnVwbGUgY2xpY2tzLCBxdWludHVwbGUg
Y2xpY2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0aGUKKyAgICAvLyBHREsg
bG9naWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KKyAgICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSk7CisgICAgZ3VpbnQzMiBldmVudFRpbWUg
PSBnZXRFdmVudFRpbWUoZXZlbnQpOworCisgICAgaWYgKChldmVudC0+dHlwZSA9PSBHREtfMkJV
VFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAgICAgICAg
fHwgKChhYnMoYnV0dG9uRXZlbnQtPnggLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC54KCkpIDwgZG91
YmxlQ2xpY2tEaXN0YW5jZSkKKyAgICAgICAgICAgICYmIChhYnMoYnV0dG9uRXZlbnQtPnkgLSBt
X3ByZXZpb3VzQ2xpY2tQb2ludC55KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKKyAgICAgICAg
ICAgICYmIChldmVudFRpbWUgLSBtX3ByZXZpb3VzQ2xpY2tUaW1lIDwgc3RhdGljX2Nhc3Q8Z3Vp
bnQ+KGRvdWJsZUNsaWNrVGltZSkpCisgICAgICAgICAgICAmJiAoYnV0dG9uRXZlbnQtPmJ1dHRv
biA9PSBtX3ByZXZpb3VzQ2xpY2tCdXR0b24pKSkKKyAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3Vu
dCsrOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCA9IDE7CisKKyAgICBn
ZG91YmxlIHgsIHk7CisgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7Cisg
ICAgbV9wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKKyAgICBtX3ByZXZpb3Vz
Q2xpY2tCdXR0b24gPSBidXR0b25FdmVudC0+YnV0dG9uOworICAgIG1fcHJldmlvdXNDbGlja1Rp
bWUgPSBldmVudFRpbWU7CisKKyAgICByZXR1cm4gbV9jdXJyZW50Q2xpY2tDb3VudDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9H
dGtDbGlja0NvdW50ZXIuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjZjYTFkZWM5MTgwNzk0ZjJmNzUxOWI4YmM1MmI2Nzk0YjFmOTdjZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHdGtDbGlja0NvdW50
ZXJfaAorI2RlZmluZSBHdGtDbGlja0NvdW50ZXJfaAorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIK
KwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50QnV0dG9uIEdka0V2ZW50QnV0dG9uOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEd0a0NsaWNrQ291bnRlciB7CitwdWJsaWM6CisgICAg
R3RrQ2xpY2tDb3VudGVyKCk7CisgICAgdm9pZCByZXNldCgpOworICAgIGJvb2wgc2hvdWxkUHJv
Y2Vzc0J1dHRvbkV2ZW50KEdka0V2ZW50QnV0dG9uKik7CisgICAgaW50IGNsaWNrQ291bnRGb3JH
ZGtCdXR0b25FdmVudChHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRvbiopOworCitwcml2YXRlOgor
ICAgIGludCBtX2N1cnJlbnRDbGlja0NvdW50OworICAgIEludFBvaW50IG1fcHJldmlvdXNDbGlj
a1BvaW50OworICAgIHVuc2lnbmVkIGludCBtX3ByZXZpb3VzQ2xpY2tCdXR0b247CisgICAgaW50
IG1fcHJldmlvdXNDbGlja1RpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE1N2E2MDdhMTg5YjU0Yjg2NGE1OThmZmI4NTg1M2E1OGQ3YjM2YjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNw
cApAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMu
TC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHdGtEcmFnQW5kRHJvcEhlbHBlci5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJHdGtVdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUGFzdGVib2Fy
ZEhlbHBlci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0IHsKKyAgICBEcm9wcGluZ0NvbnRleHQoR2RrRHJhZ0Nv
bnRleHQqIGdka0NvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKKyAgICAgICAgOiBn
ZGtDb250ZXh0KGdka0NvbnRleHQpCisgICAgICAgICwgZGF0YU9iamVjdChEYXRhT2JqZWN0R3Rr
OjpjcmVhdGUoKSkKKyAgICAgICAgLCBsYXN0TW90aW9uUG9zaXRpb24ocG9zaXRpb24pCisgICAg
ICAgICwgZHJvcEhhcHBlbmVkKGZhbHNlKQorICAgICAgICAsIGV4aXRlZENhbGxiYWNrKDApCisg
ICAgeworICAgIH0KKworICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0OworICAgIFJlZlB0
cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OworICAgIFdlYkNvcmU6OkludFBv
aW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBpbnQgcGVuZGluZ0RhdGFSZXF1ZXN0czsKKyAg
ICBib29sIGRyb3BIYXBwZW5lZDsKKyAgICBEcmFnRXhpdGVkQ2FsbGJhY2sgZXhpdGVkQ2FsbGJh
Y2s7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9wcGluZ0NvbnRl
eHQqPiBEcm9wcGluZ0NvbnRleHRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQq
LCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOworCitHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6fkd0a0RyYWdBbmREcm9wSGVscGVyKCkKK3sKKyAgICBkZWxldGVB
bGxWYWx1ZXMobV9kcm9wcGluZ0NvbnRleHRzKTsKK30KKworYm9vbCBHdGtEcmFnQW5kRHJvcEhl
bHBlcjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCogZHJhZ0NvbnRleHQpCit7CisgICAg
RHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0
YU9iamVjdHMuZmluZChkcmFnQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJhZ2dp
bmdEYXRhT2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kcmFn
Z2luZ0RhdGFPYmplY3RzLnJlbW92ZShpdGVyYXRvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250
ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZv
KQoreworICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9k
cmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1f
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNl
bGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKSk7Cit9CisKK3N0cnVjdCBI
YW5kbGVEcmFnTGF0ZXJEYXRhIHsKKyAgICBEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQ7CisgICAg
R3RrRHJhZ0FuZERyb3BIZWxwZXIqIGdsdWU7Cit9OworCitzdGF0aWMgZ2Jvb2xlYW4gaGFuZGxl
RHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayhIYW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhKQoreworICAg
IGRhdGEtPmdsdWUtPmhhbmRsZURyYWdMZWF2ZUxhdGVyKGRhdGEtPmNvbnRleHQpOworICAgIGRl
bGV0ZSBkYXRhOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBHdGtEcmFnQW5kRHJvcEhl
bHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBpbmdDb250ZXh0KiBjb250ZXh0KQorewor
ICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29u
dGV4dHMuZmluZChjb250ZXh0LT5nZGtDb250ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9k
cm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUg
dmlldyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0aGVyZSBhcmUgc3RpbGwgcGVu
ZGluZyBkYXRhKQorICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgZHJhZy4KKyAgICBpZiAoY29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gY29u
dGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGNvbnRleHQt
PmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV93aWRnZXQsIHBvc2l0aW9uKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBEcmFnT3BlcmF0aW9uTm9uZSk7CisgICAgY29udGV4dC0+ZXhpdGVkQ2Fs
bGJhY2sobV93aWRnZXQsICZkcmFnRGF0YSwgY29udGV4dC0+ZHJvcEhhcHBlbmVkKTsKKworICAg
IG1fZHJvcHBpbmdDb250ZXh0cy5yZW1vdmUoaXRlcmF0b3IpOworICAgIGRlbGV0ZSBjb250ZXh0
OworfQorCit2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhdmUoR2RrRHJh
Z0NvbnRleHQqIGdka0NvbnRleHQsIERyYWdFeGl0ZWRDYWxsYmFjayBleGl0ZWRDYWxsYmFjaykK
K3sKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGlu
Z0NvbnRleHRzLmZpbmQoZ2RrQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBp
bmdDb250ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRHVyaW5nIGEgZHJv
cCBHVEsrIHdpbGwgZmlyZSBhIGRyYWctbGVhdmUgc2lnbmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcK
KyAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJh
Zy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKKyAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBz
Y2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgorICAgIEhhbmRsZURy
YWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0YTsKKyAgICBkYXRhLT5j
b250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGRhdGEtPmNvbnRleHQtPmV4aXRlZENhbGxi
YWNrID0gZXhpdGVkQ2FsbGJhY2s7CisgICAgZGF0YS0+Z2x1ZSA9IHRoaXM7CisgICAgZ190aW1l
b3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoYW5kbGVEcmFnTGVhdmVM
YXRlckNhbGxiYWNrKSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXJ5TmV3RHJvcENvbnRl
eHREYXRhKERyb3BwaW5nQ29udGV4dCogZHJvcENvbnRleHQsIEd0a1dpZGdldCogd2lkZ2V0LCBn
dWludCB0aW1lKQoreworICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0ID0gZHJvcENvbnRl
eHQtPmdka0NvbnRleHQ7CisgICAgVmVjdG9yPEdka0F0b20+IGFjY2VwdGFibGVUYXJnZXRzKFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmRyb3BBdG9tc0ZvckNv
bnRleHQod2lkZ2V0LCBnZGtDb250ZXh0KSk7CisgICAgZHJvcENvbnRleHQtPnBlbmRpbmdEYXRh
UmVxdWVzdHMgPSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7IGkrKykKKyAgICAgICAgZ3RrX2RyYWdf
Z2V0X2RhdGEod2lkZ2V0LCBnZGtDb250ZXh0LCBhY2NlcHRhYmxlVGFyZ2V0cy5hdChpKSwgdGlt
ZSk7Cit9CisKK0RhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFn
TW90aW9uKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24s
IHVuc2lnbmVkIHRpbWUpCit7CisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQg
PSAwOworICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGlu
Z0NvbnRleHRzLmVuZCgpKSB7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IG5ldyBEcm9wcGlu
Z0NvbnRleHQoY29udGV4dCwgcG9zaXRpb24pOworICAgICAgICBtX2Ryb3BwaW5nQ29udGV4dHMu
c2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7CisgICAgICAgIHF1ZXJ5TmV3RHJvcENvbnRl
eHREYXRhKGRyb3BwaW5nQ29udGV4dCwgbV93aWRnZXQsIHRpbWUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgZHJvcHBp
bmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9CisKKyAgICAv
LyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUg
cmV0cmlldmVkIGFsbAorICAgIC8vIHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBP
dGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQKKyAgICAvLyBmb3IgdGhlIGRyYWcn
cyBkYXRhLgorICAgIEFTU0VSVChkcm9wcGluZ0NvbnRleHQpOworICAgIGlmIChkcm9wcGluZ0Nv
bnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Cit9CisKK0RhdGFPYmpl
Y3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0Ry
YWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNp
Z25lZCBpbmZvLCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgRHJvcHBpbmdDb250ZXh0TWFw
OjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQpOwor
ICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRv
ci0+dmFsdWU7CisgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07Cisg
ICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbERhdGFP
YmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5k
YXRhT2JqZWN0LmdldCgpKTsKKworICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRh
UmVxdWVzdHMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gVGhlIGNvb3JkaW5hdGVzIHBh
c3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2lnbmFsIGFyZSBzb21ldGltZXMKKyAgICAvLyBp
bmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbGFzdCBtb3Rp
b24gZXZlbnQuCisgICAgcG9zaXRpb24gPSBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3Np
dGlvbjsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgcmVxdWVzdHMsIHN0
YXJ0IHNlbmRpbmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJDb3JlLgorICAgIHJldHVybiBkcm9wcGlu
Z0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Cit9CisKK0RhdGFPYmplY3RHdGsqIEd0a0RyYWdB
bmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0Nv
bnRleHRzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250
ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRy
b3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICBkcm9wcGluZ0NvbnRleHQtPmRy
b3BIYXBwZW5lZCA9IHRydWU7CisKKyAgICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2Jq
ZWN0LmdldCgpOworfQorCit2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpzdGFydGVkRHJhZyhH
ZGtEcmFnQ29udGV4dCogY29udGV4dCwgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAg
ICBtX2RyYWdnaW5nRGF0YU9iamVjdHMuc2V0KGNvbnRleHQsIGRhdGFPYmplY3QpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9w
SGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0YjAyYzRiN2EzZjg3MzAxMzVjZGY2MTY0YWUwNjlmYWUz
ZDU5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERy
b3BIZWxwZXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBJ
Z2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHdGtE
cmFnQW5kRHJvcEhlbHBlcl9oCisjZGVmaW5lIEd0a0RyYWdBbmREcm9wSGVscGVyX2gKKworI2lu
Y2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0OworY2xh
c3MgRHJhZ0RhdGE7CisKK3R5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lk
Z2V0KiwgRHJhZ0RhdGEqLCBib29sIGRyb3BIYXBwZW5lZCk7CisKK2NsYXNzIEd0a0RyYWdBbmRE
cm9wSGVscGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5kRHJvcEhlbHBl
cik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBHdGtEcmFn
QW5kRHJvcEhlbHBlcigpCisgICAgICAgIDogbV93aWRnZXQoMCkKKyAgICB7CisgICAgfQorICAg
IH5HdGtEcmFnQW5kRHJvcEhlbHBlcigpOworCisgICAgdm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0
KiB3aWRnZXQpIHsgbV93aWRnZXQgPSB3aWRnZXQ7IH0KKyAgICBib29sIGhhbmRsZURyYWdFbmQo
R2RrRHJhZ0NvbnRleHQqKTsKKyAgICB2b2lkIGhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250
ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50IGluZm8pOworICAgIHZvaWQgaGFuZGxlRHJh
Z0xlYXZlKEdka0RyYWdDb250ZXh0KiwgRHJhZ0V4aXRlZENhbGxiYWNrKTsKKyAgICB2b2lkIGhh
bmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCopOworICAgIERhdGFPYmplY3RHdGsq
IGhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIHVuc2ln
bmVkIHRpbWUpOworICAgIERhdGFPYmplY3RHdGsqIGhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2Rr
RHJhZ0NvbnRleHQqLCBHdGtTZWxlY3Rpb25EYXRhKiwgdW5zaWduZWQgaW5mbywgSW50UG9pbnQm
KTsKKyAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCopOwor
ICAgIHZvaWQgc3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRleHQqLCBEYXRhT2JqZWN0R3RrKik7CisK
K3ByaXZhdGU6CisgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICBIYXNoTWFwPEdka0RyYWdD
b250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gbV9kcm9wcGluZ0NvbnRleHRzOworICAgIEhhc2hN
YXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBtX2RyYWdnaW5nRGF0
YU9iamVjdHM7Cit9OworCit9CisKKyNlbmRpZiAvLyBEYXRhT2JqZWN0R3RrX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjk5ODBi
NTQ2YTJhNDljNjQ2MDU0NTExNWUwNDZhMTM2NWJjNDIzZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0wLDAgKzEsMzUy
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a0lu
cHV0TWV0aG9kRmlsdGVyLmgiCisKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgiCisjaW5jbHVkZSAi
R3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKy8vIFRoZSBXaW5kb3dz
IGNvbXBvc2l0aW9uIGtleSBldmVudCBjb2RlIGlzIDI5OSBvciBWS19QUk9DRVNTS0VZLiBXZSBu
ZWVkIHRvCisvLyBlbWl0IHRoaXMgY29kZSBmb3Igd2ViIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3
aGVuIGtleSBldmVudHMgdHJpZ2dlcgorLy8gY29tcG9zaXRpb24gcmVzdWx0cy4gR0RLIGRvZXNu
J3QgaGF2ZSBhbiBlcXVpdmFsZW50LCBzbyB3ZSBzZW5kIFZvaWRTeW1ib2wKKy8vIGhlcmUgdG8g
V2ViQ29yZS4gUGxhdGZvcm1LZXlFdmVudCBrbm93cyB0byBjb252ZXJ0IHRoaXMgY29kZSBpbnRv
CisvLyBWS19QUk9DRVNTS0VZLgorY29uc3QgaW50IGdDb21wb3NpdGlvbkV2ZW50S2V5Q29kZSA9
IEdES19LRVlfVm9pZFN5bWJvbDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9p
ZCBoYW5kbGVDb21taXRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBjb25zdCBjaGFyKiBjb21wb3Np
dGlvblN0cmluZywgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBmaWx0ZXIt
PmhhbmRsZUNvbW1pdChjb21wb3NpdGlvblN0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRs
ZVByZWVkaXRTdGFydENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVy
KiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0U3RhcnQoKTsKK30KKworc3Rh
dGljIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJ
bnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdENo
YW5nZWQoKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdEVuZENhbGxiYWNrKEd0a0lN
Q29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5o
YW5kbGVQcmVlZGl0RW5kKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVdpZGdldFJlYWxpemUo
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAg
R2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBB
U1NFUlQod2luZG93KTsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhmaWx0
ZXItPmNvbnRleHQoKSwgd2luZG93KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6
c2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIEFTU0VSVCghbV93aWRnZXQpOwor
CisgICAgbV93aWRnZXQgPSB3aWRnZXQ7CisgICAgaWYgKGd0a193aWRnZXRfZ2V0X3dpbmRvdyht
X3dpZGdldCkpCisgICAgICAgIGhhbmRsZVdpZGdldFJlYWxpemUobV93aWRnZXQsIHRoaXMpOwor
ICAgIGVsc2UKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9hZnRlcih3aWRnZXQsICJyZWFsaXpl
IiwgR19DQUxMQkFDSyhoYW5kbGVXaWRnZXRSZWFsaXplKSwgdGhpcyk7Cit9CisKK3ZvaWQgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OnNldEN1cnNvclJlY3QoY29uc3QgSW50UmVjdCYgY3Vyc29yUmVj
dCkKK3sKKyAgICAvLyBEb24ndCBtb3ZlIHRoZSB3aW5kb3cgdW5sZXNzIHRoZSBjdXJzb3IgYWN0
dWFsbHkgbW92ZXMgbW9yZSB0aGFuIDEwCisgICAgLy8gcGl4ZWxzLiBUaGlzIHByZXZlbnRzIHVz
IGZyb20gbWFraW5nIHRoZSB3aW5kb3cgZmxhc2ggZHVyaW5nIG1pbm9yCisgICAgLy8gY3Vyc29y
IGFkanVzdG1lbnRzLgorICAgIHN0YXRpYyBjb25zdCBpbnQgd2luZG93TW92ZW1lbnRUaHJlc2hv
bGQgPSAxMCAqIDEwOworICAgIGlmIChjdXJzb3JSZWN0LmxvY2F0aW9uKCkuZGlzdGFuY2VTcXVh
cmVkVG9Qb2ludChtX2xhc3RDYXJlTG9jYXRpb24pIDwgd2luZG93TW92ZW1lbnRUaHJlc2hvbGQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdENhcmVMb2NhdGlvbiA9IGN1cnNvclJlY3Qu
bG9jYXRpb24oKTsKKyAgICBJbnRSZWN0IHRyYW5zbGF0ZWRSZWN0ID0gY3Vyc29yUmVjdDsKKwor
ICAgIEFTU0VSVChtX3dpZGdldCk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24obV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyAgICB0
cmFuc2xhdGVkUmVjdC5tb3ZlKGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsKKworICAgIEdk
a1JlY3RhbmdsZSBnZGtDdXJzb3JSZWN0ID0gY3Vyc29yUmVjdDsKKyAgICBndGtfaW1fY29udGV4
dF9zZXRfY3Vyc29yX2xvY2F0aW9uKG1fY29udGV4dC5nZXQoKSwgJmdka0N1cnNvclJlY3QpOwor
fQorCitHdGtJbnB1dE1ldGhvZEZpbHRlcjo6R3RrSW5wdXRNZXRob2RGaWx0ZXIoKQorICAgIDog
bV9jdXJzb3JPZmZzZXQoMCkKKyAgICAsIG1fY29udGV4dChhZG9wdEdSZWYoZ3RrX2ltX211bHRp
Y29udGV4dF9uZXcoKSkpCisgICAgLCBtX3dpZGdldCgwKQorICAgICwgbV9lbmFibGVkKGZhbHNl
KQorICAgICwgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KGZhbHNlKQorICAgICwgbV9maWx0ZXJp
bmdLZXlFdmVudChmYWxzZSkKKyAgICAsIG1fcHJlZWRpdENoYW5nZWQoZmFsc2UpCisgICAgLCBt
X3ByZXZlbnROZXh0Q29tbWl0KGZhbHNlKQorICAgICwgbV9qdXN0U2VudEZha2VLZXlVcChmYWxz
ZSkKKyAgICAsIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyhHREtfS0VZ
X1ZvaWRTeW1ib2wpCit7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJj
b21taXQiLCBHX0NBTExCQUNLKGhhbmRsZUNvbW1pdENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19z
aWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LXN0YXJ0IiwgR19DQUxMQkFD
SyhoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhoYW5kbGVQ
cmVlZGl0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2Nv
bnRleHQuZ2V0KCksICJwcmVlZGl0LWVuZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdEVuZENh
bGxiYWNrKSwgdGhpcyk7Cit9CisKK0d0a0lucHV0TWV0aG9kRmlsdGVyOjp+R3RrSW5wdXRNZXRo
b2RGaWx0ZXIoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyht
X2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZUNvbW1pdENhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1f
Y29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdFN0YXJ0
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0
Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxl
UHJlZWRpdEVuZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKG1fd2lkZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVXaWRn
ZXRSZWFsaXplKSwgdGhpcyk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldEVu
YWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgaWYg
KGVuYWJsZWQpCisgICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQo
KSk7CisgICAgZWxzZQorICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQobV9jb250ZXh0
LmdldCgpKTsKK30KKworYm9vbCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6ZmlsdGVyS2V5RXZlbnQo
R2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIGlmICghY2FuRWRpdCgpIHx8ICFtX2VuYWJsZWQp
CisgICAgICAgIHJldHVybiBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQpOworCisgICAgbV9wcmVl
ZGl0Q2hhbmdlZCA9IGZhbHNlOworICAgIG1fZmlsdGVyaW5nS2V5RXZlbnQgPSB0cnVlOworCisg
ICAgdW5zaWduZWQgaW50IGxhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBt
X2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHM7CisgICAgbV9sYXN0RmlsdGVy
ZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gR0RLX0tFWV9Wb2lkU3ltYm9sOworCisgICAg
Ym9vbCBmaWx0ZXJlZCA9IGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyhtX2NvbnRleHQu
Z2V0KCksIGV2ZW50KTsKKyAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gZmFsc2U7CisKKyAgICBi
b29sIGp1c3RTZW50RmFrZUtleVVwID0gbV9qdXN0U2VudEZha2VLZXlVcDsKKyAgICBtX2p1c3RT
ZW50RmFrZUtleVVwID0gZmFsc2U7CisgICAgaWYgKGp1c3RTZW50RmFrZUtleVVwICYmIGV2ZW50
LT50eXBlID09IEdES19LRVlfUkVMRUFTRSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBTaW1wbGUgaW5wdXQgbWV0aG9kcyB3b3JrIHN1Y2ggdGhhdCBldmVuIG5vcm1hbCBrZXlzdHJv
a2VzIGZpcmUgdGhlCisgICAgLy8gY29tbWl0IHNpZ25hbC4gV2UgZGV0ZWN0IHRob3NlIHNpdHVh
dGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgbm9ybWFsCisgICAgLy8ga2V5IGV2ZW50cywgc3VwcGx5
aW5nIHRoZSBjb21taXQgc3RyaW5nIGFzIHRoZSBrZXkgY2hhcmFjdGVyLgorICAgIGlmIChmaWx0
ZXJlZCAmJiAhbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ICYmICFtX3ByZWVkaXRDaGFuZ2VkICYm
IG1fY29uZmlybWVkQ29tcG9zaXRpb24ubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICBib29sIHJl
c3VsdCA9IHNlbmRTaW1wbGVLZXlFdmVudChldmVudCwgbV9jb25maXJtZWRDb21wb3NpdGlvbik7
CisgICAgICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoZmlsdGVyZWQgJiYgZXZlbnQtPnR5cGUgPT0g
R0RLX0tFWV9QUkVTUykgeworICAgICAgICBpZiAoIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25m
aXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkgeworICAgICAgICAgICAgbV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2Rl
V2l0aE5vUmVzdWx0cyA9IGV2ZW50LT5rZXl2YWw7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0ID0gc2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyhldmVudCk7CisgICAgICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlv
bi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZh
bHNlOworICAgICAgICAgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLy8gSWYgd2UgcHJl
dmlvdXNseSBmaWx0ZXJlZCBhIGtleSBwcmVzcyBldmVudCBhbmQgaXQgeWllbGRlZCBubyByZXN1
bHRzLiBTdXBwcmVzcworICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGtleSByZWxlYXNlIGV2ZW50
IHRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgd2ViIGNvbnRlbnQuCisgICAgaWYgKGV2ZW50LT50eXBl
ID09IEdES19LRVlfUkVMRUFTRSAmJiBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1
bHRzID09IGV2ZW50LT5rZXl2YWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQXQg
dGhpcyBwb2ludCBhIGtleXN0cm9rZSB3YXMgZWl0aGVyOgorICAgIC8vIDEuIFVuZmlsdGVyZWQK
KyAgICAvLyAyLiBBIGZpbHRlcmVkIGtleXVwIGV2ZW50LiBBcyB0aGUgSU1FIGNvZGUgaW4gRWRp
dG9yQ2xpZW50LmggZG9lc24ndAorICAgIC8vICAgIGV2ZXIgbG9vayBhdCBrZXl1cCBldmVudHMs
IHdlIHNlbmQgYW55IGNvbXBvc2l0aW9uIHJlc3VsdHMgYmVmb3JlCisgICAgLy8gICAgdGhlIGtl
eSBldmVudC4KKyAgICAvLyBCb3RoIG1pZ2h0IGhhdmUgY29tcG9zaXRpb24gcmVzdWx0cyBvciBu
b3QuCisgICAgLy8KKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBzZW5kIHRoZSBjb21wb3NpdGlv
biByZXN1bHRzIGJlZm9yZSB0aGUgZXZlbnQKKyAgICAvLyBiZWNhdXNlIHNvbWUgSU0gbW9kdWxl
cyBvcGVyYXRlIHRoYXQgd2F5LiBGb3IgZXhhbXBsZSAodGFrZW4gZnJvbQorICAgIC8vIHRoZSBD
aHJvbWl1bSBzb3VyY2UpLCB0aGUgbGF0aW4tcG9zdCBpbnB1dCBtZXRob2QgZ2l2ZXMgdGhpcyBz
ZXF1ZW5jZQorICAgIC8vIHdoZW4geW91IHByZXNzICdhJyBhbmQgdGhlbiBiYWNrc3BhY2U6Cisg
ICAgLy8gIDEuIGtleWRvd24gJ2EnIChmaWx0ZXJlZCkKKyAgICAvLyAgMi4gcHJlZWRpdCBjaGFu
Z2VkIHRvICJhIgorICAgIC8vICAzLiBrZXl1cCAnYScgKHVuZmlsdGVyZWQpCisgICAgLy8gIDQu
IGtleWRvd24gQmFja3NwYWNlICh1bmZpbHRlcmVkKQorICAgIC8vICA1LiBjb21taXQgImEiCisg
ICAgLy8gIDYuIHByZWVkaXQgZW5kCisgICAgaWYgKCFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlz
RW1wdHkoKSkKKyAgICAgICAgY29uZmlybUNvbXBvc2l0aW9uKCk7CisgICAgaWYgKG1fcHJlZWRp
dENoYW5nZWQpCisgICAgICAgIHVwZGF0ZVByZWVkaXQoKTsKKyAgICByZXR1cm4gc2VuZFNpbXBs
ZUtleUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5
TW91c2VCdXR0b25QcmVzcygpCit7CisgICAgLy8gQ29uZmlybWluZyB0aGUgY29tcG9zaXRpb24g
bWF5IHRyaWdnZXIgYSBzZWxlY3Rpb24gY2hhbmdlLCB3aGljaAorICAgIC8vIG1pZ2h0IHRyaWdn
ZXIgZnVydGhlciB1bndhbnRlZCBhY3Rpb25zIG9uIHRoZSBjb250ZXh0LCBzbyB3ZSBwcmV2ZW50
CisgICAgLy8gdGhhdCBieSBzZXR0aW5nIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSB0byBmYWxz
ZS4KKyAgICBpZiAobV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQorICAgICAgICBjb25maXJtQ3Vy
cmVudENvbXBvc2l0aW9uKCk7CisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7
CisgICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OnJlc2V0Q29udGV4dCgpCit7CisKKyAgICAvLyBXZSBhbHdheXMgY2FuY2VsIHRo
ZSBjdXJyZW50IFdlYkNvcmUgY29tcG9zaXRpb24gaGVyZSwgaW4gY2FzZSB0aGUKKyAgICAvLyBj
b21wb3NpdGlvbiB3YXMgc2V0IG91dHNpZGUgdGhlIEdUSysgSU1FIHBhdGggKHZpYSBhIHNjcmlw
dCwgZm9yCisgICAgLy8gaW5zdGFuY2UpIGFuZCB3ZSBhcmVuJ3QgdHJhY2tpbmcgaXQuCisgICAg
Y2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCk7CisKKyAgICBpZiAoIW1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9
IGZhbHNlOworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworfQorCit2b2lkIEd0a0lu
cHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKQoreworICAgIG1fcHJl
dmVudE5leHRDb21taXQgPSAhbV9wcmVlZGl0LmlzRW1wdHkoKTsKKworICAgIGd0a19pbV9jb250
ZXh0X3Jlc2V0KG1fY29udGV4dC5nZXQoKSk7CisKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50
bHkgPSBmYWxzZTsKKyAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gZmFsc2U7CisgICAgbV9wcmVl
ZGl0ID0gU3RyaW5nKCk7CisgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwor
fQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlGb2N1c2VkSW4oKQoreworICAg
IG1fZW5hYmxlZCA9IHRydWU7CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4obV9jb250ZXh0
LmdldCgpKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZE91
dCgpCit7CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAgICAgIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRp
b24oKTsKKyAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKKyAgICBndGtfaW1fY29udGV4
dF9mb2N1c19vdXQobV9jb250ZXh0LmdldCgpKTsKKyAgICBtX2VuYWJsZWQgPSBmYWxzZTsKK30K
Kwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6Y29uZmlybUNvbXBvc2l0aW9uKCkKK3sKKyAg
ICBjb25maXJtQ29tcG9zaXRpb25UZXh0KG1fY29uZmlybWVkQ29tcG9zaXRpb24pOworICAgIG1f
Y29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhv
ZEZpbHRlcjo6dXBkYXRlUHJlZWRpdCgpCit7CisgICAgc2V0UHJlZWRpdChtX3ByZWVkaXQsIG1f
Y3Vyc29yT2Zmc2V0KTsKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gZmFsc2U7Cit9CisKK3ZvaWQg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtl
eUV2ZW50cyhSZXN1bHRzVG9TZW5kIHJlc3VsdHNUb1NlbmQpCit7CisgICAgR093blB0cjxHZGtF
dmVudD4gZXZlbnQoZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BSRVNTKSk7CisgICAgZXZlbnQtPmtl
eS50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICBldmVudC0+a2V5LmtleXZhbCA9IGdDb21w
b3NpdGlvbkV2ZW50S2V5Q29kZTsKKyAgICBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1
bHRzKCZldmVudC0+a2V5LCByZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkKTsKKworICAgIG1fY29u
ZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENv
bXBvc2l0aW9uKQorICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKwor
ICAgIGV2ZW50LT50eXBlID0gR0RLX0tFWV9SRUxFQVNFOworICAgIHNlbmRTaW1wbGVLZXlFdmVu
dCgmZXZlbnQtPmtleSwgU3RyaW5nKCksIEV2ZW50RmFrZWQpOworICAgIG1fanVzdFNlbnRGYWtl
S2V5VXAgPSB0cnVlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVDb21t
aXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpCit7CisgICAgaWYgKG1fcHJldmVudE5l
eHRDb21taXQpIHsKKyAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24uYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoY29t
cG9zaXRpb25TdHJpbmcpKTsKKworICAgIC8vIElmIHRoZSBjb21taXQgd2FzIHRyaWdnZXJlZCBv
dXRzaWRlIG9mIGEga2V5IGV2ZW50LCBqdXN0IHNlbmQKKyAgICAvLyB0aGUgSU1FIGV2ZW50IG5v
dy4gSWYgd2UgYXJlIGhhbmRsaW5nIGEga2V5IGV2ZW50LCB3ZSdsbCBkZWNpZGUKKyAgICAvLyBs
YXRlciBob3cgdG8gaGFuZGxlIHRoaXMuCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQor
ICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoQ29tcG9z
aXRpb24pOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0U3Rh
cnQoKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX3ByZWVkaXQg
PSAiIjsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdENoYW5n
ZWQoKQoreworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBHT3du
UHRyPGdjaGFyPiBuZXdQcmVlZGl0OworICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0
cmluZyhtX2NvbnRleHQuZ2V0KCksICZuZXdQcmVlZGl0Lm91dFB0cigpLCAwLCAmbV9jdXJzb3JP
ZmZzZXQpOworCisgICAgaWYgKG1fcHJldmVudE5leHRDb21taXQpIHsKKyAgICAgICAgaWYgKHN0
cmxlbihuZXdQcmVlZGl0LmdldCgpKSA+IDApCisgICAgICAgICAgICBtX3ByZXZlbnROZXh0Q29t
bWl0ID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3ByZWVkaXQgPSBTdHJpbmc6OmZyb21VVEY4KG5ld1ByZWVkaXQuZ2V0KCkpOworICAg
IG1fY3Vyc29yT2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgobV9jdXJzb3JPZmZzZXQsIDApLCBz
dGF0aWNfY2FzdDxpbnQ+KG1fcHJlZWRpdC5sZW5ndGgoKSkpOworCisgICAgbV9jb21wb3NpbmdU
ZXh0Q3VycmVudGx5ID0gIW1fcHJlZWRpdC5pc0VtcHR5KCk7CisgICAgbV9wcmVlZGl0Q2hhbmdl
ZCA9IHRydWU7CisKKyAgICBpZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQpCisgICAgICAgIHNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhQcmVlZGl0KTsKK30KKwordm9p
ZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdEVuZCgpCit7CisgICAgaWYgKG1f
cHJldmVudE5leHRDb21taXQgfHwgIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wcmVlZGl0ID0gU3RyaW5nKCk7CisgICAgbV9jdXJzb3JPZmZzZXQgPSAwOworICAgIG1fcHJl
ZWRpdENoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAg
ICAgICB1cGRhdGVQcmVlZGl0KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5w
dXRNZXRob2RGaWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTQ4MjUzNDg4ZDEwNGU4NTQzYmEwZjEyOGFh
NjMzNDFlY2E3YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtJ
bnB1dE1ldGhvZEZpbHRlci5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCisjZGVmaW5l
IEd0a0lucHV0TWV0aG9kRmlsdGVyX2gKKworI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4
dDsKK3R5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEd0a0lucHV0TWV0aG9kRmlsdGVyIHsKK3B1YmxpYzoKKyAgICBHdGtJ
bnB1dE1ldGhvZEZpbHRlcigpOworICAgIH5HdGtJbnB1dE1ldGhvZEZpbHRlcigpOworCisgICAg
Ym9vbCBmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSopOworICAgIHZvaWQgbm90aWZ5TW91c2VC
dXR0b25QcmVzcygpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZEluKCk7CisgICAgdm9pZCBub3Rp
ZnlGb2N1c2VkT3V0KCk7CisgICAgdm9pZCByZXNldENvbnRleHQoKTsKKyAgICB2b2lkIHNldEVu
YWJsZWQoYm9vbCk7CisKKyAgICB2b2lkIGhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3Np
dGlvblN0cmluZyk7CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOworICAgIHZvaWQg
aGFuZGxlUHJlZWRpdFN0YXJ0KCk7CisgICAgdm9pZCBoYW5kbGVQcmVlZGl0RW5kKCk7CisKKyAg
ICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIHZvaWQgY2FuY2VsQ29udGV4dENvbXBv
c2l0aW9uKCk7CisgICAgdm9pZCB1cGRhdGVQcmVlZGl0KCk7CisgICAgdm9pZCBzZXRDdXJzb3JS
ZWN0KGNvbnN0IEludFJlY3QmIGxvY2F0aW9uKTsKKworICAgIEd0a0lNQ29udGV4dCogY29udGV4
dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorCisgICAgZW51bSBFdmVudEZha2VkRm9y
Q29tcG9zaXRpb24geworICAgICAgICBFdmVudEZha2VkLAorICAgICAgICBFdmVudE5vdEZha2Vk
CisgICAgfTsKKworcHJvdGVjdGVkOgorICAgIGVudW0gUmVzdWx0c1RvU2VuZCB7CisgICAgICAg
IFByZWVkaXQgPSAxIDw8IDEsCisgICAgICAgIENvbXBvc2l0aW9uID0gMSA8PCAyLAorICAgICAg
ICBQcmVlZGl0QW5kQ29tcG9zaXRpb24gPSBQcmVlZGl0ICsgQ29tcG9zaXRpb24KKyAgICB9Owor
CisgICAgdm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0Kik7CisgICAgdmlydHVhbCBib29sIGNhbkVk
aXQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtl
eSosIFdURjo6U3RyaW5nIGV2ZW50U3RyaW5nID0gU3RyaW5nKCksIEV2ZW50RmFrZWRGb3JDb21w
b3NpdGlvbiA9IEV2ZW50Tm90RmFrZWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2
ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQgPSBQ
cmVlZGl0QW5kQ29tcG9zaXRpb24sIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiA9IEV2ZW50Tm90
RmFrZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJp
bmcgY29tcG9zaXRpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21w
b3NpdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9u
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0KFN0cmluZywgaW50IGN1cnNvck9m
ZnNldCkgPSAwOworCisgICAgV1RGOjpTdHJpbmcgbV9jb25maXJtZWRDb21wb3NpdGlvbjsKKyAg
ICBXVEY6OlN0cmluZyBtX3ByZWVkaXQ7CisgICAgaW50IG1fY3Vyc29yT2Zmc2V0OworCitwcml2
YXRlOgorICAgIHZvaWQgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRz
KFJlc3VsdHNUb1NlbmQpOworCisgICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IG1fY29udGV4dDsK
KyAgICBHdGtXaWRnZXQqIG1fd2lkZ2V0OworICAgIGJvb2wgbV9lbmFibGVkOworICAgIGJvb2wg
bV9jb21wb3NpbmdUZXh0Q3VycmVudGx5OworICAgIGJvb2wgbV9maWx0ZXJpbmdLZXlFdmVudDsK
KyAgICBib29sIG1fcHJlZWRpdENoYW5nZWQ7CisgICAgYm9vbCBtX3ByZXZlbnROZXh0Q29tbWl0
OworICAgIGJvb2wgbV9qdXN0U2VudEZha2VLZXlVcDsKKyAgICB1bnNpZ25lZCBpbnQgbV9sYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOworICAgIEludFBvaW50IG1fbGFzdENh
cmVMb2NhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEd0
a0lucHV0TWV0aG9kRmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
UGx1Z2luV2lkZ2V0LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40Y2YxYjY4MGRiYWJhMzYxZmQxYzUwM2Q0YjY2ZmM5YTFhOWNlMjk5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3Bw
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1BsdWdpbldpZGdldC5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlNj
cm9sbFZpZXcuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitHdGtQbHVnaW5XaWRnZXQ6Okd0a1BsdWdpbldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkK
KyAgICA6IFdpZGdldCh3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9oaWRlKHdpZGdldCk7Cit9
CisKK0d0a1BsdWdpbldpZGdldDo6fkd0a1BsdWdpbldpZGdldCgpCit7CisgICAgZ3RrX2NvbnRh
aW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZvcm1X
aWRnZXQoKSkpLCBwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwordm9pZCBHdGtQbHVnaW5XaWRnZXQ6
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvcmVSZWN0KQoreworICAgIC8qIG5vIG5l
ZWQgdG8gKi8KKyAgICBpZiAoIWd0a193aWRnZXRfZ2V0X2hhc193aW5kb3cocGxhdGZvcm1XaWRn
ZXQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkpOworICAgIGlmICghd2luZG93KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IGNvcmVSZWN0OworICAgIGdk
a193aW5kb3dfaW52YWxpZGF0ZV9yZWN0KHdpbmRvdywgJnJlY3QsIEZBTFNFKTsKK30KKwordm9p
ZCBHdGtQbHVnaW5XaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKK3sKKyAgICBJbnRSZWN0IHJl
Y3QgPSBmcmFtZVJlY3QoKTsKKyAgICBJbnRQb2ludCBsb2MgPSBwYXJlbnQoKS0+Y29udGVudHNU
b1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgbG9jLngoKSwgbG9jLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisKKyAg
ICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QocGxhdGZvcm1XaWRnZXQoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZv
cm1XaWRnZXQoKSwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdp
ZGdldCgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQbHVn
aW5XaWRnZXQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzM3M2VjNTkwYjJmMjIxZTNiYjk4MTdkMGQzMzdlZTFmNDMzZDc5MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmgKQEAgLTAsMCAr
MSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEd0a1BsdWdpbldp
ZGdldF9oCisjZGVmaW5lIEd0a1BsdWdpbldpZGdldF9oCisKKyNpbmNsdWRlICJXaWRnZXQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEd0a1BsdWdpbldpZGdldCA6IHB1Ymxp
YyBXaWRnZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgR3RrUGx1Z2luV2lkZ2V0KEd0a1dpZGdl
dCopOworICAgICAgICB2aXJ0dWFsIH5HdGtQbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgdm9pZCBp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgZnJhbWVSZWN0c0No
YW5nZWQoKTsKKyAgICB9OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrUG9wdXBNZW51LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42ZjU3YTE3ZGMzMjNiY2Y3YjM1N2IyNzdmMDgwYWRlZjA5MTM1MmY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3Bw
CkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVw
IG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisg
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1BvcHVwTWVudS5oIgorCisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBnU2VhcmNoVGltZW91dE1zID0gMTAw
MDsKKworR3RrUG9wdXBNZW51OjpHdGtQb3B1cE1lbnUoKQorICAgIDogbV9wb3B1cChndGtfbWVu
dV9uZXcoKSkKKyAgICAsIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcigwKQorICAgICwgbV9j
dXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKDApCit7CisgICAgbV9rZXlQcmVzc0hhbmRsZXJJRCA9
IGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FM
TEJBQ0soR3RrUG9wdXBNZW51OjprZXlQcmVzc0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKK30KKwor
R3RrUG9wdXBNZW51Ojp+R3RrUG9wdXBNZW51KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rp
c2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgbV9rZXlQcmVzc0hhbmRsZXJJRCk7Cit9CisKK3ZvaWQg
R3RrUG9wdXBNZW51OjpjbGVhcigpCit7CisgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoKEdUS19D
T05UQUlORVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrQ2FsbGJhY2s+KG1l
bnVSZW1vdmVJdGVtKSwgdGhpcyk7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjphcHBlbmRTZXBh
cmF0b3IoKQoreworICAgIEd0a1dpZGdldCogbWVudUl0ZW0gPSBndGtfc2VwYXJhdG9yX21lbnVf
aXRlbV9uZXcoKTsKKyAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobV9w
b3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOwor
fQorCit2b2lkIEd0a1BvcHVwTWVudTo6YXBwZW5kSXRlbShHdGtBY3Rpb24qIGFjdGlvbikKK3sK
KyAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKGFj
dGlvbik7CisgICAgZ3RrX3dpZGdldF9zZXRfdG9vbHRpcF90ZXh0KG1lbnVJdGVtLCBndGtfYWN0
aW9uX2dldF90b29sdGlwKGFjdGlvbikpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobWVudUl0ZW0s
ICJzZWxlY3QiLCBHX0NBTExCQUNLKEd0a1BvcHVwTWVudTo6c2VsZWN0SXRlbUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAu
Z2V0KCkpLCBtZW51SXRlbSk7CisKKyAgICBpZiAoZ3RrX2FjdGlvbl9pc192aXNpYmxlKGFjdGlv
bikpCisgICAgICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Cit9CisKK3ZvaWQgR3RrUG9w
dXBNZW51Ojpwb3BVcChjb25zdCBJbnRTaXplJiBtZW51U2l6ZSwgY29uc3QgSW50UG9pbnQmIG1l
bnVQb3NpdGlvbiwgaW50IGl0ZW1Db3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29uc3QgR2RrRXZl
bnQqIGV2ZW50KQoreworICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgbV9tZW51
UG9zaXRpb24gPSBtZW51UG9zaXRpb247CisgICAgZ3RrX21lbnVfc2V0X2FjdGl2ZShHVEtfTUVO
VShtX3BvcHVwLmdldCgpKSwgc2VsZWN0ZWRJdGVtKTsKKworICAgIC8vIFRoaXMgYXBwcm9hY2gg
Zm9sbG93cyB0aGUgb25lIGluIGd0a2NvbWJvYm94LmMuCisgICAgR3RrUmVxdWlzaXRpb24gcmVx
dWlzaXRpb247CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCks
IC0xLCAtMSk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfd2lkZ2V0X3NpemVf
cmVxdWVzdChtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRpb24pOworI2Vsc2UKKyAgICBndGtfd2lk
Z2V0X2dldF9wcmVmZXJyZWRfc2l6ZShtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRpb24sIDApOwor
I2VuZGlmCisKKyAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QobV9wb3B1cC5nZXQoKSwg
c3RkOjptYXgobWVudVNpemUud2lkdGgoKSwgcmVxdWlzaXRpb24ud2lkdGgpLCAtMSk7CisKKyAg
ICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJ
TkVSKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICBHTGlzdCogcCA9IGNoaWxkcmVuOworICAgIGlmIChp
dGVtQ291bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtQ291bnQ7IGkrKykg
eworICAgICAgICAgICAgaWYgKGkgPiBzZWxlY3RlZEl0ZW0pCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIEd0a1dpZGdldCogaXRlbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3Rr
V2lkZ2V0Kj4ocC0+ZGF0YSk7CisgICAgICAgICAgICBHdGtSZXF1aXNpdGlvbiBpdGVtUmVxdWlz
aXRpb247CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICAgICAgICAgIGd0a193aWRnZXRf
Z2V0X2NoaWxkX3JlcXVpc2l0aW9uKGl0ZW0sICZpdGVtUmVxdWlzaXRpb24pOworI2Vsc2UKKyAg
ICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKGl0ZW0sICZpdGVtUmVxdWlz
aXRpb24sIDApOworI2VuZGlmCisgICAgICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVu
dVBvc2l0aW9uLnkoKSAtIGl0ZW1SZXF1aXNpdGlvbi5oZWlnaHQpOworCisgICAgICAgICAgICBw
ID0gZ19saXN0X25leHQocCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBD
ZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhlIGNvbWJvIGJveCBhcmVhLgor
ICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIG1lbnVTaXpl
LmhlaWdodCgpIC8gMik7CisgICAgfQorICAgIGdfbGlzdF9mcmVlKGNoaWxkcmVuKTsKKworICAg
IGd1aW50IGJ1dHRvbjsKKyAgICBndWludDMyIGFjdGl2YXRlVGltZTsKKyAgICBpZiAoZXZlbnQp
IHsKKyAgICAgICAgYnV0dG9uID0gZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUyA/IGV2
ZW50LT5idXR0b24uYnV0dG9uIDogMTsKKyAgICAgICAgYWN0aXZhdGVUaW1lID0gZ2RrX2V2ZW50
X2dldF90aW1lKGV2ZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBidXR0b24gPSAxOworICAg
ICAgICBhY3RpdmF0ZVRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOworICAgIH0KKworI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCisgICAgZ3RrX21lbnVfcG9wdXAoR1RLX01FTlUobV9wb3B1cC5nZXQo
KSksIDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBvc2l0
aW9uRnVuY3Rpb24pLCB0aGlzLCBidXR0b24sIGFjdGl2YXRlVGltZSk7CisjZWxzZQorICAgIGd0
a19tZW51X3BvcHVwX2Zvcl9kZXZpY2UoR1RLX01FTlUobV9wb3B1cC5nZXQoKSksIGV2ZW50ID8g
Z2RrX2V2ZW50X2dldF9kZXZpY2UoZXZlbnQpIDogMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBv
c2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBidXR0b24sIGFjdGl2YXRlVGltZSk7CisjZW5kaWYK
K30KKwordm9pZCBHdGtQb3B1cE1lbnU6OnBvcERvd24oKQoreworICAgIGd0a19tZW51X3BvcGRv
d24oR1RLX01FTlUobV9wb3B1cC5nZXQoKSkpOworICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRl
KCk7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjptZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqIHdp
ZGdldCwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCit7CisgICAgQVNTRVJUKHBvcHVwTWVudS0+
bV9wb3B1cCk7CisgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwb3B1cE1l
bnUtPm1fcG9wdXAuZ2V0KCkpLCB3aWRnZXQpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6bWVu
dVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBw
dXNoSW4sIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgICp4ID0gcG9wdXBNZW51LT5t
X21lbnVQb3NpdGlvbi54KCk7CisgICAgKnkgPSBwb3B1cE1lbnUtPm1fbWVudVBvc2l0aW9uLnko
KTsKKyAgICAqcHVzaEluID0gdHJ1ZTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6OnJlc2V0VHlw
ZUFoZWFkRmluZFN0YXRlKCkKK3sKKyAgICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSAw
OworICAgIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlciA9IDA7CisgICAgbV9jdXJyZW50U2Vh
cmNoU3RyaW5nID0gIiI7Cit9CisKK2Jvb2wgR3RrUG9wdXBNZW51Ojp0eXBlQWhlYWRGaW5kKEdk
a0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICAvLyBJZiB3ZSB3ZXJlIGdpdmVuIGEgbm9uLXByaW50
YWJsZSBjaGFyYWN0ZXIganVzdCBza2lwIGl0LgorICAgIGd1bmljaGFyIHVuaWNvZGVDaGFyYWN0
ZXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZXZlbnQtPmtleXZhbCk7CisgICAgaWYgKCFnX3Vu
aWNoYXJfaXNwcmludCh1bmljb2RlQ2hhcmFjdGVyKSkgeworICAgICAgICByZXNldFR5cGVBaGVh
ZEZpbmRTdGF0ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ2xvbmcg
Y2hhcmFjdGVyc1dyaXR0ZW47CisgICAgR093blB0cjxndW5pY2hhcjI+IHV0ZjE2U3RyaW5nKGdf
dWNzNF90b191dGYxNigmdW5pY29kZUNoYXJhY3RlciwgMSwgMCwgJmNoYXJhY3RlcnNXcml0dGVu
LCAwKSk7CisgICAgaWYgKCF1dGYxNlN0cmluZykgeworICAgICAgICByZXNldFR5cGVBaGVhZEZp
bmRTdGF0ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgdGhl
IGNoYXJhY3RlciBpcyB0aGUgc2FtZSBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIsIHRoZSB1c2VyIGlz
IHByb2JhYmx5IHRyeWluZyB0bworICAgIC8vIGN5Y2xlIHRocm91Z2ggdGhlIG1lbnVsaXN0IGVu
dHJpZXMuIFRoaXMgbWF0Y2hlcyB0aGUgV2ViQ29yZSBiZWhhdmlvciBmb3IgY29sbGFwc2VkCisg
ICAgLy8gbWVudWxpc3RzLgorICAgIGJvb2wgcmVwZWF0aW5nQ2hhcmFjdGVyID0gdW5pY29kZUNo
YXJhY3RlciAhPSBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXI7CisgICAgaWYgKGV2ZW50LT50
aW1lIC0gbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wID4gZ1NlYXJjaFRpbWVvdXRNcykKKyAg
ICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPih1dGYxNlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNXcml0dGVuKTsKKyAgICBlbHNlIGlm
IChyZXBlYXRpbmdDaGFyYWN0ZXIpCisgICAgICAgIG1fY3VycmVudFNlYXJjaFN0cmluZy5hcHBl
bmQoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPih1dGYxNlN0cmluZy5nZXQoKSksIGNo
YXJhY3RlcnNXcml0dGVuKSk7CisKKyAgICBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAgPSBl
dmVudC0+dGltZTsKKyAgICBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIgPSB1bmljb2RlQ2hh
cmFjdGVyOworCisgICAgLy8gTGlrZSB0aGUgQ2hyb21pdW0gcG9ydCwgd2UgY2FzZSBmb2xkIGJl
Zm9yZSBzZWFyY2hpbmcsIGJlY2F1c2UgCisgICAgLy8gc3RybmNtcCBkb2VzIG5vdCBoYW5kbGUg
bm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgR093blB0cjxnY2hhcj4gc2VhcmNoU3RyaW5nV2l0
aENhc2VGb2xkZWQoZ191dGY4X2Nhc2Vmb2xkKG1fY3VycmVudFNlYXJjaFN0cmluZy51dGY4KCku
ZGF0YSgpLCAtMSkpOworICAgIHNpemVfdCBwcmVmaXhMZW5ndGggPSBzdHJsZW4oc2VhcmNoU3Ry
aW5nV2l0aENhc2VGb2xkZWQuZ2V0KCkpOworCisgICAgR0xpc3QqIGNoaWxkcmVuID0gZ3RrX2Nv
bnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSk7CisgICAg
aWYgKCFjaGlsZHJlbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiBhIG1lbnUg
aXRlbSBoYXMgYWxyZWFkeSBiZWVuIHNlbGVjdGVkLCBzdGFydCBzZWFyY2hpbmcgZnJvbSB0aGUg
Y3VycmVudAorICAgIC8vIGl0ZW0gZG93biB0aGUgbGlzdC4gVGhpcyB3aWxsIG1ha2UgbXVsdGlw
bGUga2V5IHByZXNzZXMgb2YgdGhlIHNhbWUgY2hhcmFjdGVyCisgICAgLy8gYWR2YW5jZSB0aGUg
c2VsZWN0aW9uLgorICAgIEdMaXN0KiBjdXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsKKyAgICBpZiAo
bV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKSB7CisgICAgICAgIGN1cnJlbnRDaGlsZCA9IGdf
bGlzdF9maW5kKGNoaWxkcmVuLCBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0pOworICAgICAg
ICBpZiAoIWN1cnJlbnRDaGlsZCkgeworICAgICAgICAgICAgbV9jdXJyZW50bHlTZWxlY3RlZE1l
bnVJdGVtID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUmVwZWF0aW5nIGNoYXJhY3RlcnMgc2hvdWxkIGl0ZXJhdGUuCisg
ICAgICAgIGlmIChyZXBlYXRpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgIGlmIChHTGlzdCog
bmV4dENoaWxkID0gZ19saXN0X25leHQoY3VycmVudENoaWxkKSkKKyAgICAgICAgICAgICAgICBj
dXJyZW50Q2hpbGQgPSBuZXh0Q2hpbGQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGlzdCog
Zmlyc3RDaGlsZCA9IGN1cnJlbnRDaGlsZDsKKyAgICBkbyB7CisgICAgICAgIGN1cnJlbnRDaGls
ZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCk7CisgICAgICAgIGlmICghY3VycmVudENoaWxk
KQorICAgICAgICAgICAgY3VycmVudENoaWxkID0gY2hpbGRyZW47CisKKyAgICAgICAgR093blB0
cjxnY2hhcj4gaXRlbVRleHQoZ191dGY4X2Nhc2Vmb2xkKGd0a19tZW51X2l0ZW1fZ2V0X2xhYmVs
KEdUS19NRU5VX0lURU0oY3VycmVudENoaWxkLT5kYXRhKSksIC0xKSk7CisgICAgICAgIGlmICgh
c3RybmNtcChzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZC5nZXQoKSwgaXRlbVRleHQuZ2V0KCks
IHByZWZpeExlbmd0aCkpIHsKKyAgICAgICAgICAgIGd0a19tZW51X3NoZWxsX3NlbGVjdF9pdGVt
KEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBHVEtfV0lER0VUKGN1cnJlbnRDaGlsZC0+
ZGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjdXJy
ZW50Q2hpbGQgIT0gZmlyc3RDaGlsZCk7CisKKyAgICBnX2xpc3RfZnJlZShjaGlsZHJlbik7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjpzZWxlY3RJdGVtQ2FsbGJh
Y2soR3RrTWVudUl0ZW0qIGl0ZW0sIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgIHBv
cHVwTWVudS0+bV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0gR1RLX1dJREdFVChpdGVtKTsK
K30KKworZ2Jvb2xlYW4gR3RrUG9wdXBNZW51OjprZXlQcmVzc0V2ZW50Q2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUp
Cit7CisgICAgcmV0dXJuIHBvcHVwTWVudS0+dHlwZUFoZWFkRmluZChldmVudCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
UG9wdXBNZW51LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdjNmFkNDRmN2RkMTY2NDBjNDJmNTlmMmJhYjA0MGIzNmVmODM3MzAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgR3RrUG9wdXBNZW51X2gKKyNkZWZpbmUgR3RrUG9wdXBNZW51X2gKKworI2luY2x1ZGUg
IkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtQb3B1cE1lbnUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEd0a1BvcHVwTWVudSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxHdGtQb3B1cE1lbnU+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEd0a1BvcHVwTWVudSgpKTsK
KyAgICB9CisKKyAgICB+R3RrUG9wdXBNZW51KCk7CisKKyAgICBHdGtXaWRnZXQqIHBsYXRmb3Jt
TWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7IH0KKyAgICB2b2lkIGNsZWFyKCk7
CisgICAgdm9pZCBhcHBlbmRTZXBhcmF0b3IoKTsKKyAgICB2b2lkIGFwcGVuZEl0ZW0oR3RrQWN0
aW9uKik7CisgICAgdm9pZCBwb3BVcChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UG9pbnQmLCBp
bnQgaXRlbXNDb3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29uc3QgR2RrRXZlbnQqKTsKKyAgICB2
b2lkIHBvcERvd24oKTsKKworcHJpdmF0ZToKKyAgICBHdGtQb3B1cE1lbnUoKTsKKworICAgIHZv
aWQgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAgICBib29sIHR5cGVBaGVhZEZpbmQoR2Rr
RXZlbnRLZXkqKTsKKworICAgIHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJ
dGVtKiwgR3RrUG9wdXBNZW51Kik7CisgICAgc3RhdGljIHZvaWQgbWVudVBvc2l0aW9uRnVuY3Rp
b24oR3RrTWVudSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xlYW4qLCBHdGtQb3B1cE1lbnUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBtZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqLCBHdGtQb3B1cE1lbnUqKTsK
KyAgICBzdGF0aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qLCBHdGtQb3B1
cE1lbnUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dp
ZGdldCosIEdka0V2ZW50S2V5KiwgR3RrUG9wdXBNZW51Kik7CisKKyAgICBHUmVmUHRyPEd0a1dp
ZGdldD4gbV9wb3B1cDsKKyAgICBJbnRQb2ludCBtX21lbnVQb3NpdGlvbjsKKyAgICBTdHJpbmcg
bV9jdXJyZW50U2VhcmNoU3RyaW5nOworICAgIHVpbnQzMl90IG1fcHJldmlvdXNLZXlFdmVudFRp
bWVzdGFtcDsKKyAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOwor
ICAgIEd0a1dpZGdldCogbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtOworICAgIHVuc2lnbmVk
IGludCBtX2tleVByZXNzSGFuZGxlcklEOworfTsKKworfQorCisjZW5kaWYgLy8gR3RrUG9wdXBN
ZW51X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOThiNWJh
MzYyODRkOGMxNzlhZGY0MWNkNDYyMGUzOWRlZGE5ODBhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgi
CisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitJbnRQb2ludCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50
KEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgLy8gRklY
TUU6IFRoaXMgaXMgYWN0dWFsbHkgYSB2ZXJ5IHRyaWNreSBvcGVyYXRpb24gYW5kIHRoZSByZXN1
bHRzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkCisgICAgLy8gb25seSBiZSB0aG91Z2h0IG9mIGFz
IGEgZ3Vlc3MuIEZvciBpbnN0YW5jZSwgc29tZXRpbWVzIGl0IG1heSBub3QgY29ycmVjdGx5IHRh
a2UgaW50bworICAgIC8vIGFjY291bnQgd2luZG93IGRlY29yYXRpb25zLgorCisgICAgR3RrV2lk
Z2V0KiB0b3BsZXZlbFdpZGdldCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7Cisg
ICAgaWYgKCF0b3BsZXZlbFdpZGdldCB8fCAhZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZl
bFdpZGdldCkgfHwgIUdUS19JU19XSU5ET1codG9wbGV2ZWxXaWRnZXQpKQorICAgICAgICByZXR1
cm4gcG9pbnQ7CisKKyAgICBHZGtXaW5kb3cqIGdka1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh0b3BsZXZlbFdpZGdldCk7CisgICAgaWYgKCFnZGtXaW5kb3cpCisgICAgICAgIHJldHVy
biBwb2ludDsKKworICAgIGludCB4SW5XaW5kb3csIHlJbldpbmRvdzsKKyAgICBndGtfd2lkZ2V0
X3RyYW5zbGF0ZV9jb29yZGluYXRlcyh3aWRnZXQsIHRvcGxldmVsV2lkZ2V0LCBwb2ludC54KCks
IHBvaW50LnkoKSwgJnhJbldpbmRvdywgJnlJbldpbmRvdyk7CisKKyAgICBpbnQgd2luZG93T3Jp
Z2luWCwgd2luZG93T3JpZ2luWTsKKyAgICBnZGtfd2luZG93X2dldF9vcmlnaW4oZ2RrV2luZG93
LCAmd2luZG93T3JpZ2luWCwgJndpbmRvd09yaWdpblkpOworCisgICAgcmV0dXJuIEludFBvaW50
KHdpbmRvd09yaWdpblggKyB4SW5XaW5kb3csIHdpbmRvd09yaWdpblkgKyB5SW5XaW5kb3cpOwor
fQorCitib29sIHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9pc190b3BsZXZlbCh3aWRnZXQpICYmIEdUS19J
U19XSU5ET1cod2lkZ2V0KSAmJiAhR1RLX0lTX09GRlNDUkVFTl9XSU5ET1cod2lkZ2V0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtVdGlsaXRpZXMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjliZGRlNjU5OGYwMmQzMzU3YTAwYTcxMzM4OTZiYWM1NGMyZGEyYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKQEAgLTAsMCAr
MSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHdGtVdGlsaXRpZXNfaCAKKyNk
ZWZpbmUgR3RrVXRpbGl0aWVzX2ggCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50
UG9pbnQ7CisKK0ludFBvaW50IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQoR3RrV2lk
Z2V0KiwgY29uc3QgSW50UG9pbnQmKTsKK2Jvb2wgd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2lu
ZG93KEd0a1dpZGdldCopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBH
dGtVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9u
aW5nLmMgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YzJmODRjMmVmODg2NmMwM2MwNmYxNmRjMjE1OWZmZWE5OTdjZGM4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKQEAgLTAsMCArMSwzODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcu
aCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisj
aW5jbHVkZSA8WDExL1hhdG9tLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorCisj
aWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQordm9pZCBndGtfYWRqdXN0bWVudF9zZXRf
dmFsdWUoR3RrQWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKQoreworICAgICAg
ICBtX2FkanVzdG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtfYWRqdXN0
bWVudF92YWx1ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7Cit9CisKK3ZvaWQgZ3RrX2FkanVzdG1l
bnRfY29uZmlndXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdkb3VibGUgdmFsdWUsIGdk
b3VibGUgbG93ZXIsIGdkb3VibGUgdXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZG91YmxlIHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFnZUluY3JlbWVudCwgZ2RvdWJsZSBw
YWdlU2l6ZSkKK3sKKyAgICBnX29iamVjdF9mcmVlemVfbm90aWZ5KEdfT0JKRUNUKGFkanVzdG1l
bnQpKTsKKworICAgIGdfb2JqZWN0X3NldChhZGp1c3RtZW50LAorICAgICAgICAgICAgICAgICAi
bG93ZXIiLCBsb3dlciwKKyAgICAgICAgICAgICAgICAgInVwcGVyIiwgdXBwZXIsCisgICAgICAg
ICAgICAgICAgICJzdGVwLWluY3JlbWVudCIsIHN0ZXBJbmNyZW1lbnQsCisgICAgICAgICAgICAg
ICAgICJwYWdlLWluY3JlbWVudCIsIHBhZ2VJbmNyZW1lbnQsCisgICAgICAgICAgICAgICAgICJw
YWdlLXNpemUiLCBwYWdlU2l6ZSwKKyAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBnX29i
amVjdF90aGF3X25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7CisKKyAgICBndGtfYWRqdXN0
bWVudF9jaGFuZ2VkKGFkanVzdG1lbnQpOworICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5n
ZWQoYWRqdXN0bWVudCk7Cit9CisjZW5kaWYKKworR2RrRGV2aWNlICpnZXREZWZhdWx0R0RLUG9p
bnRlckRldmljZShHZGtXaW5kb3cqIHdpbmRvdykKK3sKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyAgICBHZGtEZXZpY2VNYW5hZ2VyICptYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9kZXZp
Y2VfbWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KHdpbmRvdykpOworICAgIHJldHVybiBn
ZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFnZXIpOworI2Vsc2UKKyAg
ICByZXR1cm4gZ2RrX2RldmljZV9nZXRfY29yZV9wb2ludGVyKCk7CisjZW5kaWYgLy8gR1RLX0FQ
SV9WRVJTSU9OXzIKK30KKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKK3ZvaWQg
Z2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwgZ2lu
dCB5LCBnaW50KiByb290WCwgZ2ludCogcm9vdFkpCit7CisgICAgZ2RrX3dpbmRvd19nZXRfcm9v
dF9vcmlnaW4od2luZG93LCByb290WCwgcm9vdFkpOworICAgICpyb290WCA9ICpyb290WCArIHg7
CisgICAgKnJvb3RZID0gKnJvb3RZICsgeTsKK30KKyNlbmRpZgorCitHZGtDdXJzb3IgKiBibGFu
a0N1cnNvcigpCit7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCisgICAgcmV0dXJu
IGdka19jdXJzb3JfbmV3KEdES19CTEFOS19DVVJTT1IpOworI2Vsc2UKKyAgICBHZGtDdXJzb3Ig
KiBjdXJzb3I7CisgICAgR2RrUGl4bWFwICogc291cmNlOworICAgIEdka1BpeG1hcCAqIG1hc2s7
CisgICAgR2RrQ29sb3IgZm9yZWdyb3VuZCA9IHsgMCwgNjU1MzUsIDAsIDAgfTsgLy8gUmVkLgor
ICAgIEdka0NvbG9yIGJhY2tncm91bmQgPSB7IDAsIDAsIDAsIDY1NTM1IH07IC8vIEJsdWUuCisg
ICAgc3RhdGljIGdjaGFyIGN1cnNvckJpdHNbXSA9IHsweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwg
MHgwLCAweDAsIDB4MH07CisKKyAgICBzb3VyY2UgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2Rh
dGEoMCwgY3Vyc29yQml0cywgOCwgOCk7CisgICAgbWFzayA9IGdka19iaXRtYXBfY3JlYXRlX2Zy
b21fZGF0YSgwLCBjdXJzb3JCaXRzLCA4LCA4KTsKKyAgICBjdXJzb3IgPSBnZGtfY3Vyc29yX25l
d19mcm9tX3BpeG1hcChzb3VyY2UsIG1hc2ssICZmb3JlZ3JvdW5kLCAmYmFja2dyb3VuZCwgOCwg
OCk7CisgICAgZ2RrX3BpeG1hcF91bnJlZihzb3VyY2UpOworICAgIGdka19waXhtYXBfdW5yZWYo
bWFzayk7CisgICAgcmV0dXJuIGN1cnNvcjsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAxNiwgMCkKK30KKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKK2NvbnN0IGdj
aGFyKiBndGtfbWVudV9pdGVtX2dldF9sYWJlbChHdGtNZW51SXRlbSogbWVudUl0ZW0pCit7Cisg
ICAgR3RrV2lkZ2V0ICogbGFiZWwgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1lbnVJdGVt
KSk7CisgICAgaWYgKEdUS19JU19MQUJFTChsYWJlbCkpCisgICAgICAgIHJldHVybiBndGtfbGFi
ZWxfZ2V0X3RleHQoR1RLX0xBQkVMKGxhYmVsKSk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
Mgorc3RhdGljIGNhaXJvX2Zvcm1hdF90CitnZGtfY2Fpcm9fZm9ybWF0X2Zvcl9jb250ZW50KGNh
aXJvX2NvbnRlbnRfdCBjb250ZW50KQoreworICAgIHN3aXRjaCAoY29udGVudCkgeworICAgIGNh
c2UgQ0FJUk9fQ09OVEVOVF9DT0xPUjoKKyAgICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9SR0Iy
NDsKKyAgICBjYXNlIENBSVJPX0NPTlRFTlRfQUxQSEE6CisgICAgICAgIHJldHVybiBDQUlST19G
T1JNQVRfQTg7CisgICAgY2FzZSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBOgorICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfQVJHQjMyOworICAgIH0KK30KKworc3Rh
dGljIGNhaXJvX3N1cmZhY2VfdCoKK2dka19jYWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBo
ZWlnaHQpCit7CisgICAgY2Fpcm9fc3VyZmFjZV90ICogY29weTsKKyAgICBjYWlyb190ICogY3I7
CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJG
QUNFX1RZUEVfSU1BR0UKKyAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJm
YWNlKSA9PSBjb250ZW50CisgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRo
KHN1cmZhY2UpID49IHdpZHRoCisgICAgICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzdXJmYWNlKSA+PSBoZWlnaHQpCisgICAgICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3Jl
ZmVyZW5jZShzdXJmYWNlKTsKKworICAgIGNvcHkgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZShnZGtfY2Fpcm9fZm9ybWF0X2Zvcl9jb250ZW50KGNvbnRlbnQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVpZ2h0KTsKKworICAgIGNyID0gY2Fpcm9fY3JlYXRlKGNvcHkpOworICAg
IGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAsIDApOworICAgIGNhaXJvX3BhaW50
KGNyKTsKKyAgICBjYWlyb19kZXN0cm95KGNyKTsKKworICAgIHJldHVybiBjb3B5OworfQorCitz
dGF0aWMgdm9pZAorY29udmVydF9hbHBoYShndWNoYXIgKiBkZXN0RGF0YSwgaW50IGRlc3RTdHJp
ZGUsCisgICAgICAgICAgICAgIGd1Y2hhciAqIHNyY0RhdGEsIGludCBzcmNTdHJpZGUsCisgICAg
ICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorewor
ICAgIGludCB4LCB5OworCisgICAgc3JjRGF0YSArPSBzcmNTdHJpZGUgKiBzcmNZICsgc3JjWSAq
IDQ7CisKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZ3VpbnQz
MiAqIHNyYyA9IChndWludDMyICopIHNyY0RhdGE7CisKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8
IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgIGd1aW50IGFscGhhID0gc3JjW3hdID4+IDI0Owor
CisgICAgICAgICAgICBpZiAoIWFscGhhKSB7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAq
IDQgKyAwXSA9IDA7CisgICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAxXSA9IDA7Cisg
ICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAyXSA9IDA7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAoKChzcmNbeF0gJiAw
eGZmMDAwMCkgPj4gMTYpICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOworICAgICAgICAgICAg
ICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAoKChzcmNbeF0gJiAweDAwZmYwMCkgPj4gIDgpICog
MjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0
ICsgMl0gPSAoKChzcmNbeF0gJiAweDAwMDBmZikgPj4gIDApICogMjU1ICsgYWxwaGEgLyAyKSAv
IGFscGhhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAzXSA9
IGFscGhhOworICAgICAgICB9CisKKyAgICAgICAgc3JjRGF0YSArPSBzcmNTdHJpZGU7CisgICAg
ICAgIGRlc3REYXRhICs9IGRlc3RTdHJpZGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY29u
dmVydF9ub19hbHBoYShndWNoYXIgKiBkZXN0RGF0YSwgaW50IGRlc3RTdHJpZGUsIGd1Y2hhciAq
IHNyY0RhdGEsCisgICAgICAgICAgICAgICAgIGludCBzcmNTdHJpZGUsIGludCBzcmNYLCBpbnQg
c3JjWSwKKyAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlu
dCB4LCB5OworCisgICAgc3JjRGF0YSArPSBzcmNTdHJpZGUgKiBzcmNZICsgc3JjWCAqIDQ7CisK
KyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZ3VpbnQzMiAqIHNy
YyA9IChndWludDMyICopIHNyY0RhdGE7CisKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRo
OyB4KyspIHsKKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiAzICsgMF0gPSBzcmNbeF0gPj4gMTY7
CisgICAgICAgICAgICBkZXN0RGF0YVt4ICogMyArIDFdID0gc3JjW3hdID4+ICA4OworICAgICAg
ICAgICAgZGVzdERhdGFbeCAqIDMgKyAyXSA9IHNyY1t4XTsKKyAgICAgICAgfQorCisgICAgICAg
IHNyY0RhdGEgKz0gc3JjU3RyaWRlOworICAgICAgICBkZXN0RGF0YSArPSBkZXN0U3RyaWRlOwor
ICAgIH0KK30KKworLyoqCisgKiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2U6CisgKiBAc3Vy
ZmFjZTogc3VyZmFjZSB0byBjb3B5IGZyb20KKyAqIEBzcmNfeDogU291cmNlIFggY29vcmRpbmF0
ZSB3aXRoaW4gQHN1cmZhY2UKKyAqIEBzcmNfeTogU291cmNlIFkgY29vcmRpbmF0ZSB3aXRoaW4g
QHN1cmZhY2UKKyAqIEB3aWR0aDogV2lkdGggaW4gcGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKKyAq
IEBoZWlnaHQ6IEhlaWdodCBpbiBwaXhlbHMgb2YgcmVnaW9uIHRvIGdldAorICoKKyAqIFRyYW5z
ZmVycyBpbWFnZSBkYXRhIGZyb20gYSAjY2Fpcm9fc3VyZmFjZV90IGFuZCBjb252ZXJ0cyBpdCB0
byBhbiBSR0IoQSkKKyAqIHJlcHJlc2VudGF0aW9uIGluc2lkZSBhICNHZGtQaXhidWYuIFRoaXMg
YWxsb3dzIHlvdSB0byBlZmZpY2llbnRseSByZWFkCisgKiBpbmRpdmlkdWFsIHBpeGVscyBmcm9t
IGNhaXJvIHN1cmZhY2VzLiBGb3IgI0dka1dpbmRvd3MsIHVzZQorICogZ2RrX3BpeGJ1Zl9nZXRf
ZnJvbV93aW5kb3coKSBpbnN0ZWFkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUg
YW4gUkdCIHBpeGJ1ZiB3aXRoIDggYml0cyBwZXIgY2hhbm5lbC4gVGhlIHBpeGJ1ZgorICogd2ls
bCBjb250YWluIGFuIGFscGhhIGNoYW5uZWwgaWYgdGhlIEBzdXJmYWNlIGNvbnRhaW5zIG9uZS4K
KyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxsKTogQSBuZXdseS1jcmVhdGVkIHBp
eGJ1ZiB3aXRoIGEgcmVmZXJlbmNlIGNvdW50CisgKiBvZiAxLCBvciAlTlVMTCBvbiBlcnJvcgor
ICoqLworR2RrUGl4YnVmKgorZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKGNhaXJvX3N1cmZh
Y2VfdCAqIHN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY1gsIGlu
dCBzcmNZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKK3sKKyAgICBjYWlyb19jb250ZW50X3QgY29udGVudDsKKyAgICBHZGtQaXhidWYgKiBkZXN0
OworCisgICAgLyogR2VuZXJhbCBzYW5pdHkgY2hlY2tzICovCisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc3VyZmFjZSwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3JjWCA+PSAw
ICYmIHNyY1kgPj0gMCwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod2lkdGggPiAw
ICYmIGhlaWdodCA+IDAsIE5VTEwpOworCisgICAgY29udGVudCA9IGNhaXJvX3N1cmZhY2VfZ2V0
X2NvbnRlbnQoc3VyZmFjZSkgfCBDQUlST19DT05URU5UX0NPTE9SOworICAgIGRlc3QgPSBnZGtf
cGl4YnVmX25ldyhHREtfQ09MT1JTUEFDRV9SR0IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICEhKGNvbnRlbnQgJiBDQUlST19DT05URU5UX0FMUEhBKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBzdXJmYWNlID0gZ2RrX2NhaXJvX3N1cmZhY2VfY29lcmNlX3RvX2ltYWdlKHN1cmZhY2UsIGNv
bnRlbnQsIHNyY1ggKyB3aWR0aCwgc3JjWSArIGhlaWdodCk7CisgICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChzdXJmYWNlKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgfHwg
IWRlc3QpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZ2RrX3BpeGJ1Zl9nZXRfaGFzX2FscGhh
KGRlc3QpKQorICAgICAgICBjb252ZXJ0X2FscGhhKGdka19waXhidWZfZ2V0X3BpeGVscyhkZXN0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGRlc3Qp
LAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1
cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgIHNyY1gsIHNyY1ksCisgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgY29u
dmVydF9ub19hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1
cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNYLCBzcmNZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShzdXJmYWNlKTsKKyAgICByZXR1cm4gZGVzdDsKK30KKworI2lmIEdUS19DSEVDS19WRVJT
SU9OKDIsIDI0LCAwKQordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdh
YmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEdE
S19JU19QSVhNQVAoZHJhd2FibGUpIHx8IEdES19JU19XSU5ET1coZHJhd2FibGUpKTsKKworICAg
IGlmIChHREtfSVNfUElYTUFQKGRyYXdhYmxlKSkgeworICAgICAgICBnZGtfcGl4bWFwX2dldF9z
aXplKEdES19QSVhNQVAoZHJhd2FibGUpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEdka1dpbmRvdyAqd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7
CisgICAgKndpZHRoID0gZ2RrX3dpbmRvd19nZXRfd2lkdGgod2luZG93KTsKKyAgICAqaGVpZ2h0
ID0gZ2RrX3dpbmRvd19nZXRfaGVpZ2h0KHdpbmRvdyk7Cit9CisjZWxzZQordm9pZCBnZXRHZGtE
cmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdo
dCkKK3sKKyAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUoZHJhd2FibGUsIHdpZHRoLCBoZWlnaHQp
OworfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQorCisjZW5kaWYgLy8g
R1RLX0FQSV9WRVJTSU9OXzIKKworI2lmICFHTElCX0NIRUNLX1ZFUlNJT04oMiwgMjcsIDEpCitn
Ym9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9maXJzdF93aW5zKEdTaWduYWxJbnZvY2F0aW9u
SGludCAqaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSAqcmV0dXJuQWNjdW11bGF0b3IsIGNvbnN0IEdW
YWx1ZSAqaGFuZGxlclJldHVybiwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBnX3ZhbHVlX2NvcHko
aGFuZGxlclJldHVybiwgcmV0dXJuQWNjdW11bGF0b3IpOworICAgIHJldHVybiBGQUxTRTsKK30K
KyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQorY2Fpcm9fc3VyZmFj
ZV90ICpnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoR2RrV2luZG93ICp3aW5kb3cs
IGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAg
Y2Fpcm9fdCAqY2Fpcm9Db250ZXh0ID0gZ2RrX2NhaXJvX2NyZWF0ZSh3aW5kb3cpOworICAgIGNh
aXJvX3N1cmZhY2VfdCAqY2Fpcm9TdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjYWlyb0NvbnRl
eHQpOworICAgIGNhaXJvX3N1cmZhY2VfdCAqbmV3U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfY3Jl
YXRlX3NpbWlsYXIoY2Fpcm9TdXJmYWNlLCBjb250ZW50LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBj
YWlyb19kZXN0cm95KGNhaXJvQ29udGV4dCk7CisgICAgcmV0dXJuIG5ld1N1cmZhY2U7Cit9Cisj
ZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCisKKyNpZiAhR1RLX0NIRUNLX1ZF
UlNJT04oMywgMywgNikKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorc3RhdGljIGludCBnZXRT
Y3JlZW5DdXJyZW50RGVza3RvcChHZGtTY3JlZW4gKnNjcmVlbikKK3sKKyAgICBEaXNwbGF5ICpk
aXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3Jl
ZW4pKTsKKyAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3BsYXksIEdES19T
Q1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKKyAgICBBdG9tIGN1cnJlbnREZXNrdG9wID0gWEludGVy
bkF0b20oZGlzcGxheSwgIl9ORVRfQ1VSUkVOVF9ERVNLVE9QIiwgVHJ1ZSk7CisKKyAgICBBdG9t
IHR5cGU7CisgICAgaW50IGZvcm1hdDsKKyAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5
dGVzQWZ0ZXI7CisgICAgdW5zaWduZWQgY2hhciAqcmV0dXJuZWREYXRhID0gTlVMTDsKKyAgICBY
R2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRvdywgY3VycmVudERlc2t0b3AsIDAs
IEdfTUFYTE9ORywgRmFsc2UsIFhBX0NBUkRJTkFMLAorICAgICAgICAgICAgICAgICAgICAgICAm
dHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0FmdGVyLCAmcmV0dXJuZWREYXRhKTsK
KworICAgIGludCB3b3Jrc3BhY2UgPSAwOworICAgIGlmICh0eXBlID09IFhBX0NBUkRJTkFMICYm
IGZvcm1hdCA9PSAzMiAmJiBpdGVtc0NvdW50ID4gMCkKKyAgICAgICAgd29ya3NwYWNlID0gKGlu
dClyZXR1cm5lZERhdGFbMF07CisKKyAgICBpZiAocmV0dXJuZWREYXRhKQorICAgICAgICBYRnJl
ZShyZXR1cm5lZERhdGEpOworCisgICAgcmV0dXJuIHdvcmtzcGFjZTsKK30KKworc3RhdGljIHZv
aWQgZ2V0U2NyZWVuV29ya0FyZWEoR2RrU2NyZWVuICpzY3JlZW4sIEdka1JlY3RhbmdsZSAqYXJl
YSkKK3sKKyAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3Nj
cmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKKyAgICBBdG9tIHdvcmtBcmVhID0gWEludGVybkF0
b20oZGlzcGxheSwgIl9ORVRfV09SS0FSRUEiLCBUcnVlKTsKKworICAgIC8qIERlZmF1bHRzIGlu
IGNhc2Ugb2YgZXJyb3IuICovCisgICAgYXJlYS0+eCA9IDA7CisgICAgYXJlYS0+eSA9IDA7Cisg
ICAgYXJlYS0+d2lkdGggPSBnZGtfc2NyZWVuX2dldF93aWR0aChzY3JlZW4pOworICAgIGFyZWEt
PmhlaWdodCA9IGdka19zY3JlZW5fZ2V0X2hlaWdodChzY3JlZW4pOworCisgICAgaWYgKHdvcmtB
cmVhID09IE5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIFdpbmRvdyByb290V2luZG93ID0g
WFJvb3RXaW5kb3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVNQkVSKHNjcmVlbikpOworICAgIEF0
b20gdHlwZTsKKyAgICBpbnQgZm9ybWF0OworICAgIHVuc2lnbmVkIGxvbmcgaXRlbXNDb3VudCwg
Ynl0ZXNBZnRlcjsKKyAgICB1bnNpZ25lZCBjaGFyICpyZXR1cm5lZERhdGEgPSAwOworICAgIGlu
dCByZXN1bHQgPSBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRvdywgd29ya0Fy
ZWEsIDAsIDQgKiAzMiAvKiBNYXggbGVuZ3RoICovLCBGYWxzZSwgQW55UHJvcGVydHlUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZpdGVt
c0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7CisgICAgaWYgKHJlc3VsdCAhPSBT
dWNjZXNzIHx8IHR5cGUgPT0gTm9uZSB8fCAhZm9ybWF0IHx8IGJ5dGVzQWZ0ZXIgfHwgaXRlbXND
b3VudCAlIDQpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBkZXNrdG9wID0gZ2V0U2NyZWVu
Q3VycmVudERlc2t0b3Aoc2NyZWVuKTsKKyAgICBsb25nICp3b3JrQXJlYXMgPSAobG9uZyAqKXJl
dHVybmVkRGF0YTsKKyAgICBhcmVhLT54ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0XTsKKyAgICBh
cmVhLT55ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMV07CisgICAgYXJlYS0+d2lkdGggPSB3
b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAyXTsKKyAgICBhcmVhLT5oZWlnaHQgPSB3b3JrQXJlYXNb
ZGVza3RvcCAqIDQgKyAzXTsKKworICAgIFhGcmVlKHJldHVybmVkRGF0YSk7Cit9CisjZW5kaWYg
Ly8gR0RLX1dJTkRPV0lOR19YMTEKKwordm9pZCBnZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmth
cmVhKEdka1NjcmVlbiAqc2NyZWVuLCBpbnQgbW9uaXRvciwgR2RrUmVjdGFuZ2xlICphcmVhKQor
eworICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCBh
cmVhKTsKKworI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisgICAgR2RrUmVjdGFuZ2xlIHdvcmtB
cmVhOworICAgIGdldFNjcmVlbldvcmtBcmVhKHNjcmVlbiwgJndvcmtBcmVhKTsKKyAgICBnZGtf
cmVjdGFuZ2xlX2ludGVyc2VjdCgmd29ya0FyZWEsIGFyZWEsIGFyZWEpOworI2VuZGlmCit9Cisj
ZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJz
aW9uaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzAzOWVlMmRjMGE1NDQxMGFhODdkZTFjNjRmYmM2ZGM0NDUy
ODdmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmlu
Zy5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9y
YSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgR3RrVmVyc2lvbmluZ19oCisjZGVmaW5lIEd0a1ZlcnNpb25pbmdfaAorCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaW5jbHVkZSA8Z2Rr
L2dka2tleXN5bXMtY29tcGF0Lmg+CisjZW5kaWYKKworR19CRUdJTl9ERUNMUworCisvLyBNYWNy
b3MgdG8gYXZvaWQgZGVwcmVjYXRpb24gY2hlY2tpbmcgY2h1cm4KKyNpZm5kZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyNkZWZpbmUgR0RLX1dJTkRPV19YV0lORE9XKHdpbmRvdykgKGdka194MTFfd2lu
ZG93X2dldF94aWQod2luZG93KSkKKyNlbHNlCitHZGtQaXhidWYqIGdka19waXhidWZfZ2V0X2Zy
b21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGludCBzcmNYLCBpbnQgc3JjWSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhl
aWdodCk7Cit2b2lkIGdldEdka0RyYXdhYmxlU2l6ZShHZGtEcmF3YWJsZSogZHJhd2FibGUsIGlu
dCogd2lkdGgsIGludCogaGVpZ2h0KTsKKyNlbmRpZgorCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDIzLCA0KQorI2RlZmluZSBnZGtfcGl4bWFwX2dldF9zaXplIGdka19kcmF3YWJsZV9nZXRf
c2l6ZQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCA0KQorCisjaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDIzLCAwKQorI2RlZmluZSBnZGtfd2luZG93X2dldF9kaXNwbGF5KHdp
bmRvdykgZ2RrX2RyYXdhYmxlX2dldF9kaXNwbGF5KHdpbmRvdykKKyNkZWZpbmUgZ2RrX3dpbmRv
d19nZXRfdmlzdWFsIGdka19kcmF3YWJsZV9nZXRfdmlzdWFsCisjZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMjMsIDApCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCitj
YWlyb19zdXJmYWNlX3QqIGdka193aW5kb3dfY3JlYXRlX3NpbWlsYXJfc3VyZmFjZShHZGtXaW5k
b3cqIHdpbmRvdywgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsIGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDApCisKKyNpZiAhR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMjEsIDIpCisjZGVmaW5lIGdka192aXN1YWxfZ2V0X2RlcHRoKHZpc3Vh
bCkgKHZpc3VhbCktPmRlcHRoCisjZGVmaW5lIGdka192aXN1YWxfZ2V0X2JpdHNfcGVyX3JnYih2
aXN1YWwpICh2aXN1YWwpLT5iaXRzX3Blcl9yZ2IKKyNkZWZpbmUgZ2RrX2RyYWdfY29udGV4dF9n
ZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpIChjb250ZXh0KS0+YWN0aW9uCisjZGVmaW5lIGdk
a19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkgKGNvbnRleHQpLT5hY3Rpb25zCisj
ZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjEsIDIpCisKKyNpZiAhR1RLX0NIRUNLX1ZF
UlNJT04oMiwgMjAsIDApCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkg
R1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpCisjZGVmaW5lIGd0a193aWRnZXRfc2V0X3JlYWxp
emVkKHdpZGdldCwgVFJVRSkgR1RLX1dJREdFVF9TRVRfRkxBR1MoKHdpZGdldCksIEdUS19SRUFM
SVpFRCkKKyNkZWZpbmUgZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3NpemUocmFuZ2UpIChyYW5n
ZSktPm1pbl9zbGlkZXJfc2l6ZQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAw
KQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE5LCAwKQorI2RlZmluZSBndGtfd2lkZ2V0
X2lzX3RvcGxldmVsKHdpZGdldCkgR1RLX1dJREdFVF9UT1BMRVZFTCh3aWRnZXQpCisjZGVmaW5l
IGd0a193aWRnZXRfZ2V0X3JlYWxpemVkKHdpZGdldCkgR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRn
ZXQpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X2hhc193aW5kb3cod2lkZ2V0KSAhR1RLX1dJREdF
VF9OT19XSU5ET1cod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9jYW5fZm9jdXMod2lk
Z2V0KSBHVEtfV0lER0VUX0NBTl9GT0NVUyh3aWRnZXQpCisjZGVmaW5lIGd0a193aWRnZXRfaXNf
c2Vuc2l0aXZlKHdpZGdldCkgR1RLX1dJREdFVF9JU19TRU5TSVRJVkUod2lkZ2V0KQorI2VuZGlm
IC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE5LCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDE4LCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF92aXNpYmxlKHdpZGdldCwgRkFMU0Up
IEdUS19XSURHRVRfVU5TRVRfRkxBR1MoKHdpZGdldCksIEdUS19WSVNJQkxFKQorI2RlZmluZSBn
dGtfd2lkZ2V0X2dldF92aXNpYmxlKHdpZGdldCkgKEdUS19XSURHRVRfRkxBR1Mod2lkZ2V0KSAm
IEdUS19WSVNJQkxFKQorCisjZGVmaW5lIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIG5l
d193aW5kb3cpICh3aWRnZXQpLT53aW5kb3cgPSAobmV3X3dpbmRvdykKKyNkZWZpbmUgZ3RrX3dp
ZGdldF9zZXRfY2FuX2ZvY3VzKHdpZGdldCwgVFJVRSkgR1RLX1dJREdFVF9TRVRfRkxBR1MoKHdp
ZGdldCksIEdUS19DQU5fRk9DVVMpCisjZGVmaW5lIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24o
d2lkZ2V0LCBhbGxvYykgKCooYWxsb2MpID0gKHdpZGdldCktPmFsbG9jYXRpb24pCisjZGVmaW5l
IGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCBhbGxvYykgKCh3aWRnZXQpLT5hbGxv
Y2F0aW9uID0gKihhbGxvYykpCisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDAp
CisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCit2b2lkIGdka193aW5kb3dfZ2V0
X3Jvb3RfY29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQgeSwgZ2ludCogcm9v
dFgsIGdpbnQqIHJvb3RZKTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykK
KworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKK2NvbnN0IGdjaGFyKiBndGtfbWVu
dV9pdGVtX2dldF9sYWJlbChHdGtNZW51SXRlbSopOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE2LCAwKQorCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTQsIDApCisjZGVm
aW5lIGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpICh3aWRnZXQpLT53aW5kb3cKKyNkZWZp
bmUgZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkaikgKGFkaiktPnZhbHVlCisjZGVmaW5lIGd0
a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpIChkaWFsb2cpLT52Ym94CisjZGVmaW5l
IGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRpYWxvZykgKGRpYWxvZyktPmFjdGlvbl9hcmVh
CisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEpIChkYXRhKS0+bGVu
Z3RoCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSAoZGF0YSktPmRh
dGEKKyNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90YXJnZXQoZGF0YSkgKGRhdGEpLT50
YXJnZXQKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGosIG5ld1ZhbHVl
KSAoKGFkaiktPnBhZ2Vfc2l6ZSA9IG5ld1ZhbHVlKQorI2RlZmluZSBndGtfYWRqdXN0bWVudF9z
ZXRfdmFsdWUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT52YWx1ZSA9IG5ld1ZhbHVlKQorI2RlZmlu
ZSBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT5sb3dlciA9
IG5ld1ZhbHVlKQorI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfdXBwZXIoYWRqLCBuZXdWYWx1
ZSkgKChhZGopLT51cHBlciA9IG5ld1ZhbHVlKQorCit2b2lkIGd0a19hZGp1c3RtZW50X2NvbmZp
Z3VyZShHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxv
d2VyLCBnZG91YmxlIHVwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJs
ZSBzdGVwSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUp
OworCit2b2lkIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShHdGtBZGp1c3RtZW50KiBhZGp1c21l
bnQsIGdkb3VibGUgdmFsdWUpOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAw
KQorCitHZGtEZXZpY2UqIGdldERlZmF1bHRHREtQb2ludGVyRGV2aWNlKEdka1dpbmRvdyogd2lu
ZG93KTsKK0dka0N1cnNvciogYmxhbmtDdXJzb3IoKTsKKworI2lmICFHTElCX0NIRUNLX1ZFUlNJ
T04oMiwgMjcsIDEpCitnYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9maXJzdF93aW5zKEdT
aWduYWxJbnZvY2F0aW9uSGludCogaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSogcmV0dXJuQWNjdW11
bGF0b3IsIGNvbnN0IEdWYWx1ZSogaGFuZGxlclJldHVybiwgZ3BvaW50ZXIgZGF0YSk7CisjZW5k
aWYKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCA2KQordm9pZCBnZGtfc2NyZWVuX2dl
dF9tb25pdG9yX3dvcmthcmVhKEdka1NjcmVlbiAqLCBpbnQgbW9uaXRvciwgR2RrUmVjdGFuZ2xl
ICphcmVhKTsKKyNlbmRpZgorCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gR3RrVmVyc2lvbmlu
Z19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9y
ZVgxMS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjAzNzZiYzc3MTRiMzk1NDkwMDEyYjk3Nzk2YTE5OTdmY2EzYzBjYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0
b3JlWDExLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
SWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXRCYWNraW5nU3RvcmUuaCIKKworI2luY2x1ZGUgIkd0
a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgPFgxMS9Y
bGliLmg+CisjaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5j
bHVkZSA8Z2RrL2dka3guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXaWRnZXRC
YWNraW5nU3RvcmVQcml2YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXaWRnZXRCYWNr
aW5nU3RvcmVQcml2YXRlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGlj
OgorICAgIERpc3BsYXkqIG1fZGlzcGxheTsKKyAgICBQaXhtYXAgbV9waXhtYXA7CisgICAgR0Mg
bV9nYzsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisKKyAgICBzdGF0
aWMgUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlPiBjcmVhdGUoR3RrV2lkZ2V0
KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUod2lkZ2V0LCBzaXplKSk7CisgICAg
fQorCisgICAgfldpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUoKQorICAgIHsKKyAgICAgICAgWEZy
ZWVQaXhtYXAobV9kaXNwbGF5LCBtX3BpeG1hcCk7CisgICAgICAgIFhGcmVlR0MobV9kaXNwbGF5
LCBtX2djKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gV2Uga2VlcCB0d28gY29waWVzIG9m
IHRoZSBzdXJmYWNlIGhlcmUsIHdoaWNoIHdpbGwgZG91YmxlIHRoZSBtZW1vcnkgdXNhZ2UsIGJ1
dCBpbmNyZWFzZQorICAgIC8vIHNjcm9sbGluZyBwZXJmb3JtYW5jZSBzaW5jZSB3ZSBkbyBub3Qg
aGF2ZSB0byBrZWVwIHJlYWxsb2NhdGluZyBhIG1lbW9yeSByZWdpb24gZHVyaW5nCisgICAgLy8g
cXVpY2sgc2Nyb2xsaW5nIHJlcXVlc3RzLgorICAgIFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUo
R3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBH
ZGtWaXN1YWwqIHZpc3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3aWRnZXQpOworICAgICAg
ICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka192aXN1YWxfZ2V0X3NjcmVlbih2aXN1YWwpOworICAg
ICAgICBtX2Rpc3BsYXkgPSBHREtfU0NSRUVOX1hESVNQTEFZKHNjcmVlbik7CisgICAgICAgIG1f
cGl4bWFwID0gWENyZWF0ZVBpeG1hcChtX2Rpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHREtfV0lORE9XX1hJRChnZGtfc2NyZWVuX2dldF9yb290X3dpbmRvdyhzY3Jl
ZW4pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka192aXN1YWxf
Z2V0X2RlcHRoKHZpc3VhbCkpOworICAgICAgICBtX2djID0gWENyZWF0ZUdDKG1fZGlzcGxheSwg
bV9waXhtYXAsIDAsIDApOworCisgICAgICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX3hs
aWJfc3VyZmFjZV9jcmVhdGUobV9kaXNwbGF5LCBtX3BpeG1hcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfVklTVUFMX1hWSVNVQUwo
dmlzdWFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICB9Cit9OworCitQYXNz
T3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZT4gV2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR3Rr
V2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmUod2lkZ2V0LCBzaXplKSk7Cit9CisKK1dpZGdldEJh
Y2tpbmdTdG9yZTo6V2lkZ2V0QmFja2luZ1N0b3JlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJ
bnRTaXplJiBzaXplKQorICAgIDogbV9wcml2YXRlKFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGU6
OmNyZWF0ZSh3aWRnZXQsIHNpemUpKQorICAgICwgbV9zaXplKHNpemUpCit7Cit9CisKK1dpZGdl
dEJhY2tpbmdTdG9yZTo6fldpZGdldEJhY2tpbmdTdG9yZSgpCit7Cit9CisKK2NhaXJvX3N1cmZh
Y2VfdCogV2lkZ2V0QmFja2luZ1N0b3JlOjpjYWlyb1N1cmZhY2UoKQoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPm1fc3VyZmFjZS5nZXQoKTsKK30KKwordm9pZCBXaWRnZXRCYWNraW5nU3RvcmU6
OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpCit7CisgICAgSW50UmVjdCB0YXJnZXRSZWN0KHNjcm9sbFJlY3QpOworICAgIHRhcmdl
dFJlY3QubW92ZShzY3JvbGxPZmZzZXQpOworICAgIHRhcmdldFJlY3QuaW50ZXJzZWN0KHNjcm9s
bFJlY3QpOworICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3ByaXZhdGUtPm1fc3VyZmFjZS5nZXQoKSk7Cisg
ICAgWENvcHlBcmVhKG1fcHJpdmF0ZS0+bV9kaXNwbGF5LCBtX3ByaXZhdGUtPm1fcGl4bWFwLCBt
X3ByaXZhdGUtPm1fcGl4bWFwLCBtX3ByaXZhdGUtPm1fZ2MsIAorICAgICAgICAgICAgICB0YXJn
ZXRSZWN0LngoKSAtIHNjcm9sbE9mZnNldC53aWR0aCgpLCB0YXJnZXRSZWN0LnkoKSAtIHNjcm9s
bE9mZnNldC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCkpOworICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9wcml2YXRl
LT5tX3N1cmZhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0tVUkxHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZDFmZWFjYTk2YTRhMDlmNGJiZDA3MDgwOWI2OGUxODU0NDE2OGYyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcApAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS1VS
TC5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgo
KSBjb25zdAoreworICAgIGlmICghaXNWYWxpZCgpIHx8ICFpc0xvY2FsRmlsZSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVm
KGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aCgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHT3duUHRy
PGNoYXI+IGZpbGVuYW1lKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7CisgICAgcmV0dXJu
IGZpbGVuYW1lVG9TdHJpbmcoZmlsZW5hbWUuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xh
dG9yLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjViZDBmYjhjZThjMGMxOGJlYmE4YmE2MjVjZDcwMGQxMzcwNmJiMDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNw
cApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIktleUJpbmRpbmdUcmFuc2xhdG9yLmgiCisKKyNpbmNsdWRlICJHdGtW
ZXJzaW9uaW5nLmgiCisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQs
IGNvbnN0IGNoYXIqPiBJbnRDb25zdENoYXJIYXNoTWFwOworCitzdGF0aWMgdm9pZCBiYWNrc3Bh
Y2VDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5z
bGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImJh
Y2tzcGFjZSIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJEZWxl
dGVCYWNrd2FyZCIpOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RBbGxDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgZ2Jvb2xlYW4gc2VsZWN0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNs
YXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2Vs
ZWN0LWFsbCIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHNlbGVj
dCA/ICJTZWxlY3RBbGwiIDogIlVuc2VsZWN0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGN1dENsaXBi
b2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJh
bnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
Y3V0LWNsaXBib2FyZCIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5k
KCJDdXQiKTsKK30KKworc3RhdGljIHZvaWQgY29weUNsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAgICBnX3Np
Z25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiY29weS1jbGlwYm9hcmQiKTsKKyAg
ICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ29weSIpOworfQorCitzdGF0
aWMgdm9pZCBwYXN0ZUNsaXBib2FyZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5k
aW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9u
X2J5X25hbWUod2lkZ2V0LCAicGFzdGUtY2xpcGJvYXJkIik7CisgICAgdHJhbnNsYXRvci0+YWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQoIlBhc3RlIik7Cit9CisKK3N0YXRpYyB2b2lkIHRvZ2dsZU92
ZXJ3cml0ZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciop
Cit7CisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0b2dnbGluZyB0aGUgb3ZlcndyaXRlIG1vZGUs
IGJ1dCB0aGUgZGVmYXVsdCBjYWxsYmFjayBleHBlY3RzCisgICAgLy8gdGhlIEd0a1RleHRWaWV3
IHRvIGhhdmUgYSBsYXlvdXQsIHNvIHdlIGhhbmRsZSB0aGlzIHNpZ25hbCBqdXN0IHRvIHN0b3Ag
aXQuCisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInRvZ2dsZS1v
dmVyd3JpdGUiKTsKK30KKworLy8gR1RLKyB3aWxsIHN0aWxsIHNlbmQgdGhlc2Ugc2lnbmFscyB0
byB0aGUgd2ViIHZpZXcuIFNvIHdlIGNhbiBzYWZlbHkgc3RvcCBzaWduYWwKKy8vIGVtaXNzaW9u
IHdpdGhvdXQgYnJlYWtpbmcgYWNjZXNzaWJpbGl0eS4KK3N0YXRpYyB2b2lkIHBvcHVwTWVudUNh
bGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciopCit7CisgICAg
Z19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBvcHVwLW1lbnUiKTsKK30K
Kworc3RhdGljIHZvaWQgc2hvd0hlbHBDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5Qmlu
ZGluZ1RyYW5zbGF0b3IqKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3
aWRnZXQsICJzaG93LWhlbHAiKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGd0a0Rl
bGV0ZUNvbW1hbmRzW11bMl0gPSB7CisgICAgeyAiRGVsZXRlQmFja3dhcmQiLCAgICAgICAgICAg
ICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgIH0sIC8vIENoYXJhY3Rl
cnMKKyAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3
YXJkIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gV29yZCBlbmRzCisgICAgeyAiRGVsZXRlV29y
ZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAg
ICAgIH0sIC8vIFdvcmRzCisgICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICJE
ZWxldGVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgIH0sIC8vIExpbmVzCisgICAgeyAi
RGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUiLCAgICAgICJEZWxldGVUb0VuZE9mTGluZSIgICAgICAg
ICAgICAgICAgICAgIH0sIC8vIExpbmUgZW5kcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZQ
YXJhZ3JhcGgiLCAiRGVsZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAgICAgICB9LCAvLyBQ
YXJhZ3JhcGggZW5kcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAiRGVs
ZXRlVG9FbmRPZlBhcmFncmFwaCIgICAgICAgICAgICAgICB9LCAvLyBQYXJhZ3JhcGhzCisgICAg
eyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gLy8gV2hpdGVzcGFjZSAoTS1cIGluIEVtYWNzKQorfTsKKworc3Rh
dGljIHZvaWQgZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtE
ZWxldGVUeXBlIGRlbGV0ZVR5cGUsIGdpbnQgY291bnQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0
cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQs
ICJkZWxldGUtZnJvbS1jdXJzb3IiKTsKKyAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8g
MSA6IDA7CisKKyAgICAvLyBFbnN1cmluZyB0aGF0IGRlbGV0ZVR5cGUgPD0gR19OX0VMRU1FTlRT
IGhlcmUgcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcKKyAgICAvLyB0aGF0IHRoZSBjb25k
aXRpb24gaXMgYWx3YXlzIHRydWUuCisKKyAgICBpZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRF
X1dPUkRTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKSB7CisgICAgICAgICAgICB0cmFuc2xh
dG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7CisgICAgICAg
ICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2Fy
ZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGlu
Z0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKKyAgICAgICAgICAgIHRyYW5zbGF0
b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEZvcndhcmQiKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX0RJU1BMQVlfTElORVMp
IHsKKyAgICAgICAgaWYgKCFkaXJlY3Rpb24pCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3Zl
VG9FbmRPZkxpbmUiKTsKKyAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9Q
QVJBR1JBUEhTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICAgICAgdHJhbnNs
YXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0
b3JDb21tYW5kKCJNb3ZlVG9FbmRPZlBhcmFncmFwaCIpOworICAgIH0KKworICAgIGNvbnN0IGNo
YXIqIHJhd0NvbW1hbmQgPSBndGtEZWxldGVDb21tYW5kc1tkZWxldGVUeXBlXVtkaXJlY3Rpb25d
OworICAgIGlmICghcmF3Q29tbWFuZCkKKyAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQorICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5n
RWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGd0a01vdmVDb21tYW5kc1tdWzRdID0geworICAgIHsgIk1vdmVCYWNrd2FyZCIsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmQiLAorICAgICAgIk1vdmVCYWNr
d2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8vIEZvcndhcmQvYmFja3dhcmQgZ3JhcGhl
bWUKKyAgICB7ICJNb3ZlTGVmdCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIk1vdmVSaWdodCIsCisgICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwg
ICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAg
ICAgfSwgLy8gTGVmdC9yaWdodCBncmFwaGVtZQorICAgIHsgIk1vdmVXb3JkQmFja3dhcmQiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVdvcmRGb3J3YXJkIiwKKyAgICAgICJN
b3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgIk1vdmVXb3Jk
Rm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJk
IHdvcmQKKyAgICB7ICJNb3ZlVXAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk1vdmVEb3duIiwKKyAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAg
ICAgICB9LCAvLyBVcC9kb3duIGxpbmUKKyAgICB7ICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZSIsCisgICAgICAiTW92ZVRv
QmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICJNb3ZlVG9FbmRPZkxp
bmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lIGVuZHMKKyAg
ICB7ICJNb3ZlUGFyYWdyYXBoRm9yd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1v
dmVQYXJhZ3JhcGhCYWNrd2FyZCIsCisgICAgICAiTW92ZVBhcmFncmFwaEZvcndhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24iLCAgICAgICAgICJNb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgfSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCisgICAgeyAiTW92ZVRvQmVnaW5uaW5n
T2ZQYXJhZ3JhcGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaCIs
CisgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iLCAg
ICJNb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93
biBwYXJhZ3JhcGggZW5kcy4KKyAgICB7ICJNb3ZlUGFnZVVwIiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIsCisgICAgICAiTW92ZVBhZ2VVcEFuZE1v
ZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlT
ZWxlY3Rpb24iICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCisgICAgeyAiTW92ZVRvQmVn
aW5uaW5nT2ZEb2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3Vt
ZW50IiwKKyAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9u
IiwgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LCAvLyBC
ZWdpbi9lbmQgb2YgYnVmZmVyCisgICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKK307CisKK3N0YXRpYyB2b2lk
IG1vdmVDdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92ZW1lbnRTdGVwIHN0
ZXAsIGdpbnQgY291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgS2V5QmluZGluZ1RyYW5z
bGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgIm1vdmUtY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/
IDEgOiAwOworICAgIGlmIChleHRlbmRTZWxlY3Rpb24pCisgICAgICAgIGRpcmVjdGlvbiArPSAy
OworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBHX05fRUxFTUVOVFMo
Z3RrTW92ZUNvbW1hbmRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogcmF3
Q29tbWFuZCA9IGd0a01vdmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOworICAgIGlmICghcmF3
Q29tbWFuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMo
Y291bnQpOyBpKyspCisgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5k
KHJhd0NvbW1hbmQpOworfQorCitLZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5QmluZGluZ1RyYW5z
bGF0b3IoKQorICAgIDogbV9uYXRpdmVXaWRnZXQoZ3RrX3RleHRfdmlld19uZXcoKSkKK3sKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFja3NwYWNlIiwgR19D
QUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhjdXRDbGlw
Ym9hcmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRn
ZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNsaXBib2FyZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
InBhc3RlLWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRDYWxsYmFjayksIHRo
aXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJzZWxlY3Qt
YWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIsIEdfQ0FMTEJBQ0so
bW92ZUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2
ZVdpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJBQ0soZGVsZXRlRnJv
bUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdp
ZGdldC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRvZ2dsZU92ZXJ3cml0
ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5n
ZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxiYWNrKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInNob3ctaGVscCIs
IEdfQ0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOworfQorCitzdHJ1Y3QgS2V5Q29t
YmluYXRpb25FbnRyeSB7CisgICAgdW5zaWduZWQgZ2RrS2V5Q29kZTsKKyAgICB1bnNpZ25lZCBz
dGF0ZTsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0IEtleUNvbWJp
bmF0aW9uRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7IEdES19iLCAgICAgICAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgIH0sCisgICAgeyBH
REtfaSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJUb2dnbGVJdGFs
aWMiICB9LAorICAgIHsgR0RLX0VzY2FwZSwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiQ2FuY2VsIiAgICAgICAgfSwKKyAgICB7IEdES19ncmVhdGVyLCAgIEdES19DT05UUk9M
X01BU0ssICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCit9OworCisvLyBUaGVzZSBj
b21tYW5kcyBhcmUgdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIHNvIHNob3VsZCB0YWtlIHBsYWNl
CisvLyB3aGlsZSBoYW5kbGluZyB0aGUgS2V5UHJlc3MgZXZlbnQuCitzdGF0aWMgY29uc3QgS2V5
Q29tYmluYXRpb25FbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7IEdES19UYWIsICAg
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgIH0sCisg
ICAgeyBHREtfVGFiLCAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICJJbnNl
cnRCYWNrdGFiIiB9LAorfTsKKwordm9pZCBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6Z2V0RWRpdG9y
Q29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIEV2ZW50VHlwZSB0eXBlLCBW
ZWN0b3I8V1RGOjpTdHJpbmc+JiBjb21tYW5kTGlzdCkKK3sKKyAgICBtX3BlbmRpbmdFZGl0b3JD
b21tYW5kcy5jbGVhcigpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfYmlu
ZGluZ3NfYWN0aXZhdGVfZXZlbnQoR1RLX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGV2
ZW50KTsKKyNlbHNlCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdfT0JKRUNUKG1f
bmF0aXZlV2lkZ2V0LmdldCgpKSwgZXZlbnQpOworI2VuZGlmCisKKyAgICBpZiAoIW1fcGVuZGlu
Z0VkaXRvckNvbW1hbmRzLmlzRW1wdHkoKSkgeworICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQo
bV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlEb3duQ29tbWFuZHNN
YXAsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtl
eVByZXNzQ29tbWFuZHNNYXAsICgpKTsKKworICAgIGlmIChrZXlEb3duQ29tbWFuZHNNYXAuaXNF
bXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMo
a2V5RG93bkVudHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAuc2V0
KGtleURvd25FbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0uZ2RrS2V5
Q29kZSwga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKyspCisgICAgICAgICAg
ICBrZXlQcmVzc0NvbW1hbmRzTWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0uc3RhdGUgPDwgMTYg
fCBrZXlQcmVzc0VudHJpZXNbaV0uZ2RrS2V5Q29kZSwga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUp
OworICAgIH0KKworICAgIC8vIFNwZWNpYWwtY2FzZSBlbnRlciBrZXlzIGZvciB3ZSB3YW50IHRo
ZW0gdG8gd29yayByZWdhcmRsZXNzIG9mIG1vZGlmaWVyLgorICAgIGlmICgoZXZlbnQtPmtleXZh
bCA9PSBHREtfUmV0dXJuIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0tQX0VudGVyIHx8IGV2ZW50
LT5rZXl2YWwgPT0gR0RLX0lTT19FbnRlcikgJiYgdHlwZSA9PSBLZXlQcmVzcykgeworICAgICAg
ICBjb21tYW5kTGlzdC5hcHBlbmQoIkluc2VydE5ld0xpbmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdhbnQgY2hhckNvZGUoKSwg
YnV0IGtleUNvZGUoKSBkb2VzIHRoYXQuCisgICAgaW50IG1hcEtleSA9IGV2ZW50LT5zdGF0ZSA8
PCAxNiB8IGV2ZW50LT5rZXl2YWw7CisgICAgaWYgKG1hcEtleSkgeworICAgICAgICBIYXNoTWFw
PGludCwgY29uc3QgY2hhcio+KiBjb21tYW5kTWFwID0gdHlwZSA9PSBLZXlEb3duID8gICZrZXlE
b3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKKyAgICAgICAgaWYgKGNvbnN0
IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5KSkgeworICAgICAg
ICAgICAgY29tbWFuZExpc3QuYXBwZW5kKGNvbW1hbmRTdHJpbmcpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY0MzZk
ZTZjYjg2M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEtleUJpbmRpbmdUcmFuc2xhdG9yX2gKKyNk
ZWZpbmUgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAorCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEtleUJpbmRpbmdUcmFuc2xhdG9yIHsKK3B1YmxpYzoKKyAgICBL
ZXlCaW5kaW5nVHJhbnNsYXRvcigpOworCisgICAgZW51bSBFdmVudFR5cGUgeyBLZXlEb3duLCBL
ZXlQcmVzcyB9OworICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVu
dEtleSosIEV2ZW50VHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYpOworICAgIHZvaWQgYWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkgeyBtX3BlbmRpbmdFZGl0b3JD
b21tYW5kcy5hcHBlbmQoY29tbWFuZCk7IH0KKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPEd0a1dp
ZGdldD4gbV9uYXRpdmVXaWRnZXQ7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX3BlbmRpbmdF
ZGl0b3JDb21tYW5kczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zN2E3MWU1NjFjNTM0
NGMwNWVmMDNiZjEyODMzNTZmYzUyYTQyZmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzaW5n
IHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkgaGVyZSBpcyBub3QgYW4gb3B0aW9uLCBiZWNh
dXNlCisvLyBpdCBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxvY2FsZSBpbiBydW50aW1l
LCBzbyBpdCByZXR1cm5zCisvLyBhbHdheXMgdGhlIHNhbWUgdmFsdWUuCitzdGF0aWMgU3RyaW5n
IHBsYXRmb3JtTGFuZ3VhZ2UoKQoreworICAgIGNoYXIqIGxvY2FsZURlZmF1bHQgPSBzZXRsb2Nh
bGUoTENfQ1RZUEUsIE5VTEwpOworCisgICAgaWYgKCFsb2NhbGVEZWZhdWx0KQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCJjIik7CisKKyAgICBHT3duUHRyPGdjaGFyPiBub3JtYWxpemVkRGVmYXVs
dChnX2FzY2lpX3N0cmRvd24obG9jYWxlRGVmYXVsdCwgLTEpKTsKKyAgICBjaGFyKiBwdHIgPSBz
dHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICdfJyk7CisKKyAgICBpZiAocHRyKQorICAg
ICAgICAqcHRyID0gJy0nOworCisgICAgcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0Lmdl
dCgpLCAnLicpOworCisgICAgaWYgKHB0cikKKyAgICAgICAgKnB0ciA9ICdcMCc7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpKTsKK30KKworVmVjdG9yPFN0cmlu
Zz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBw
ZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7CisgICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXM7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xvY2FsaXpl
ZFN0cmluZ3NHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMDJjYWEyZjlkZjI1MmY2OTI1YmEyMDM0ZTRjYTQ1OTFiYzE1YjZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdz
R3RrLmNwcApAQCAtMCwwICsxLDc4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlz
dGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogZ3RrU3RvY2tMYWJlbChj
b25zdCBjaGFyKiBzdG9ja0lEKQoreworICAgIEd0a1N0b2NrSXRlbSBpdGVtOworICAgIGlmICgh
Z3RrX3N0b2NrX2xvb2t1cChzdG9ja0lELCAmaXRlbSkpCisgICAgICAgIHJldHVybiBzdG9ja0lE
OworICAgIHJldHVybiBpdGVtLmxhYmVsOworfQorCitTdHJpbmcgc3VibWl0QnV0dG9uRGVmYXVs
dExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJTdWJtaXQiKSk7Cit9
CisKK1N0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJTdWJtaXQiKSk7Cit9CisKK1N0cmluZyByZXNldEJ1dHRvbkRlZmF1bHRMYWJl
bCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUmVzZXQiKSk7Cit9CisKK1N0
cmluZyBkZWZhdWx0RGV0YWlsc1N1bW1hcnlUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJEZXRhaWxzIikpOworfQorCitTdHJpbmcgc2VhcmNoYWJsZUluZGV4SW50cm9k
dWN0aW9uKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJUaGlzIGlzIGEgc2Vh
cmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAiKSk7Cit9CisKK1N0cmluZyBm
aWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJDaG9vc2UgRmlsZSIpKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VNdWx0aXBs
ZUZpbGVzTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNob29zZSBG
aWxlcyIpKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSkiKSk7Cit9CisKK1N0cmluZyBm
aWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIihOb25lKSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4g
TGluayBpbiBOZXcgX1dpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0Rv
d25sb2FkIExpbmtlZCBGaWxlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29w
eUxpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29w
eSBMaW5rIExvY19hdGlvbiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5J
bWFnZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVu
IF9JbWFnZSBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
RG93bmxvYWRJbWFnZVRvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
U2FfdmUgSW1hZ2UgQXMiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1h
Z2VUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29wX3kg
SW1hZ2UiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0Ns
aXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29weSBJbWFnZSBf
QWRkcmVzcyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3
V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVuIF9WaWRlbyBp
biBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlv
SW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0F1
ZGlvIGluIE5ldyBXaW5kb3ciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5
VmlkZW9MaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IkNvcF95IFZpZGVvIExpbmsgTG9jYXRpb24iKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDb3B5QXVkaW9MaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNvcF95IEF1ZGlvIExpbmsgTG9jYXRpb24iKSk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfVG9nZ2xlIE1lZGlhIENvbnRyb2xzIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJUb2dnbGUgTWVkaWEgX0xvb3AgUGxheWJhY2siKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiU3dpdGNoIFZpZGVvIHRvIF9GdWxsc2NyZWVuIikpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfUGxheSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01l
ZGlhUGF1c2UoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9QYXVzZSIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiX011dGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHkoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ09QWSkpOworICAgIHJldHVybiBz
dG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkKK3sKKyAg
ICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFi
ZWwoR1RLX1NUT0NLX0RFTEVURSkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0
b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1NFTEVD
VF9BTEwpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1VuaWNvZGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9JbnNl
cnQgVW5pY29kZSBDb250cm9sIENoYXJhY3RlciIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0lucHV0TWV0aG9kcygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
SW5wdXQgX01ldGhvZHMiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2so
KQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3Rr
U3RvY2tMYWJlbChHVEtfU1RPQ0tfR09fQkFDSykpOworICAgIHJldHVybiBzdG9ja0xhYmVsOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkKK3sKKyAgICBzdGF0aWMg
U3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NU
T0NLX0dPX0ZPUldBUkQpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1N0b3AoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9
IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfU1RPUCkpOworICAgIHJl
dHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUmVsb2FkIikpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFi
ZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0NVVCkpOworICAg
IHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUo
KQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3Rr
U3RvY2tMYWJlbChHVEtfU1RPQ0tfUEFTVEUpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJObyBHdWVzc2VzIEZvdW5kIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIl9JZ25vcmUgU3BlbGxpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJfTGVhcm4gU3BlbGxpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTZWFy
Y2hXZWIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9TZWFyY2ggdGhlIFdl
YiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeShj
b25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9Mb29rIFVw
IGluIERpY3Rpb25hcnkiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlu
aygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX09wZW4gTGluayIpKTsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIklnbm9yZSBfR3JhbW1hciIpKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiU3BlbGxpbmcgYW5kIF9HcmFtbWFyIikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoYm9vbCBzaG93KQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHNob3cgPyBfKCJfU2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIpIDogXygi
X0hpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJf
Q2hlY2sgRG9jdW1lbnQgTm93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJDaGVjayBTcGVsbGluZyBXaGlsZSBfVHlwaW5nIikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxsaW5nIikpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIl9Gb250IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQm9sZCgp
Cit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtT
dG9ja0xhYmVsKEdUS19TVE9DS19CT0xEKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQoreworICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfSVRB
TElDKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdVbmRlcmxpbmUoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfVU5ERVJMSU5FKSk7CisgICAgcmV0
dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3V0bGluZSIpKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJJbnNwZWN0IF9FbGVtZW50IikpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkxSTSBfTGVmdC10by1yaWdodCBtYXJrIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlJMTSBfUmlnaHQtdG8tbGVmdCBtYXJrIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcmsoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9lbWJlZGRpbmciKSk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyaygpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxFIFJpZ2h0LXRvLWxlZnQgZV9tYmVkZGluZyIp
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk9NYXJrKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk8gTGVmdC10by1yaWdodCBfb3Zl
cnJpZGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxP
TWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxPIFJpZ2h0LXRvLWxl
ZnQgb192ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFBERk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBERiBfUG9w
IGRpcmVjdGlvbmFsIGZvcm1hdHRpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdVbmljb2RlSW5zZXJ0WldTTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiWldTIF9aZXJvIHdpZHRoIHNwYWNlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydFpXSk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpKTsKK30KKworU3RyaW5nIHNlYXJj
aE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiTm8gcmVjZW50IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgc2VhcmNoTWVudVJlY2Vu
dFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUmVjZW50
IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNU
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfQ2xlYXIgcmVjZW50IHNl
YXJjaGVzIikpOworfQorCitTdHJpbmcgQVhEZWZpbml0aW9uVGV4dCgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiZGVmaW5pdGlvbiIpKTsKK30KKworU3RyaW5nIEFYRGVzY3Jp
cHRpb25MaXN0VGVybVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRl
cm0iKSk7Cit9CisKK1N0cmluZyBBWERlc2NyaXB0aW9uTGlzdERldGFpbFRleHQoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlc2NyaXB0aW9uIikpOworfQorCitTdHJpbmcg
QVhGb290ZXJSb2xlRGVzY3JpcHRpb25UZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJmb290ZXIiKSk7Cit9CisKK1N0cmluZyBBWEJ1dHRvbkFjdGlvblZlcmIoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInByZXNzIikpOworfQorCitTdHJpbmcgQVhS
YWRpb0J1dHRvbkFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
InNlbGVjdCIpKTsKK30KKworU3RyaW5nIEFYVGV4dEZpZWxkQWN0aW9uVmVyYigpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYWN0aXZhdGUiKSk7Cit9CisKK1N0cmluZyBBWENo
ZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInVuY2hlY2siKSk7Cit9CisKK1N0cmluZyBBWFVuY2hlY2tlZENoZWNrQm94QWN0aW9uVmVy
YigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY2hlY2siKSk7Cit9CisKK1N0
cmluZyBBWExpbmtBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJqdW1wIikpOworfQorCitTdHJpbmcgQVhNZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpCit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK1N0cmluZyBtaXNzaW5nUGx1Z2luVGV4
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTWlzc2luZyBQbHVnLWluIikp
OworfQorCitTdHJpbmcgY3Jhc2hlZFBsdWdpblRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGx1Zy1pbiBGYWlsdXJlIikpOwor
fQorCitTdHJpbmcgYmxvY2tlZFBsdWdpbkJ5Q29udGVudFNlY3VyaXR5UG9saWN5VGV4dCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBpbnNlY3VyZVBsdWdpblZlcnNpb25UZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGluYWN0aXZlUGx1Z2luVGV4dCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBtdWx0aXBsZUZpbGVVcGxvYWRUZXh0KHVuc2lnbmVkIG51bWJlck9mRmlsZXMpCit7CisgICAg
Ly8gRklYTUU6IElmIHRoaXMgZmlsZSBnZXRzIGxvY2FsaXplZCwgdGhpcyBzaG91bGQgcmVhbGx5
IGJlIGxvY2FsaXplZCBhcyBvbmUgc3RyaW5nIHdpdGggYSB3aWxkY2FyZCBmb3IgdGhlIG51bWJl
ci4KKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyT2ZGaWxlcykgKyBTdHJpbmc6OmZy
b21VVEY4KF8oIiBmaWxlcyIpKTsKK30KKworU3RyaW5nIHVua25vd25GaWxlU2l6ZVRleHQoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlVua25vd24iKSk7Cit9CisKK1N0cmlu
ZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZihDXygiVGl0bGUg
c3RyaW5nIGZvciBpbWFnZXMiLCAiJXMgICglZHglZCBwaXhlbHMpIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZS51dGY4KCkuZGF0YSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkp
OworfQorCisKKyNpZiBFTkFCTEUoVklERU8pCisKK1N0cmluZyBtZWRpYUVsZW1lbnRMb2FkaW5n
U3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMb2FkaW5nLi4u
IikpOworfQorCitTdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTGl2ZSBCcm9hZGNhc3QiKSk7Cit9CisK
K1N0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBjb250cm9sbGVyIikpOworICAgIGlm
IChuYW1lID09ICJWaWRlb0VsZW1lbnQiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJ2aWRlbyBlbGVtZW50IGNvbnRyb2xsZXIiKSk7CisgICAgaWYgKG5hbWUgPT0gIk11dGVC
dXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtdXRlIikpOworICAg
IGlmIChuYW1lID09ICJVbk11dGVCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJ1bm11dGUiKSk7CisgICAgaWYgKG5hbWUgPT0gIlBsYXlCdXR0b24iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwbGF5IikpOworICAgIGlmIChuYW1lID09ICJQ
YXVzZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBhdXNlIikp
OworICAgIGlmIChuYW1lID09ICJTbGlkZXIiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJtb3ZpZSB0aW1lIikpOworICAgIGlmIChuYW1lID09ICJTbGlkZXJUaHVtYiIpCisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRpbWVsaW5lIHNsaWRlciB0aHVtYiIp
KTsKKyAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiYmFjayAzMCBzZWNvbmRzIikpOworICAgIGlmIChuYW1lID09ICJSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
cmV0dXJuIHRvIHJlYWx0aW1lIikpOworICAgIGlmIChuYW1lID09ICJDdXJyZW50VGltZURpc3Bs
YXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbGFwc2VkIHRpbWUiKSk7
CisgICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygicmVtYWluaW5nIHRpbWUiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlN0YXR1c0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGF0
dXMiKSk7CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisgICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImVudGVyIGZ1bGxzY3JlZW4iKSk7CisgICAgaWYg
KG5hbWUgPT0gIkV4aXRGdWxsc2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiZXhpdCBmdWxsc2NyZWVuIikpOworICAgIGlmIChuYW1lID09ICJTZWVrRm9y
d2FyZEJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImZhc3QgZm9y
d2FyZCIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmYXN0IHJldmVyc2UiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInNob3cgY2xvc2VkIGNhcHRpb25zIikpOworICAgIGlmIChuYW1lID09ICJIaWRlQ2xv
c2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJo
aWRlIGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBpZiAobmFtZSA9PSAiQ29udHJvbHNQYW5lbCIp
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1lZGlhIGNvbnRyb2xzIikpOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBwbGF5YmFjayBjb250cm9scyBhbmQg
c3RhdHVzIGRpc3BsYXkiKSk7CisgICAgaWYgKG5hbWUgPT0gIlZpZGVvRWxlbWVudCIpCisgICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZpZGVvIGVsZW1lbnQgcGxheWJhY2sgY29u
dHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOworICAgIGlmIChuYW1lID09ICJNdXRlQnV0dG9u
IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibXV0ZSBhdWRpbyB0cmFja3Mi
KSk7CisgICAgaWYgKG5hbWUgPT0gIlVuTXV0ZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInVubXV0ZSBhdWRpbyB0cmFja3MiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlBsYXlCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJiZWdpbiBw
bGF5YmFjayIpKTsKKyAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXVzZSBwbGF5YmFjayIpKTsKKyAgICBpZiAobmFtZSA9
PSAiU2xpZGVyIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGlt
ZSBzY3J1YmJlciIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2xpZGVyVGh1bWIiKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIHNjcnViYmVyIHRodW1iIikpOwor
ICAgIGlmIChuYW1lID09ICJSZXdpbmRCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJzZWVrIG1vdmllIGJhY2sgMzAgc2Vjb25kcyIpKTsKKyAgICBpZiAobmFtZSA9
PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInJldHVybiBzdHJlYW1pbmcgbW92aWUgdG8gcmVhbCB0aW1lIikpOworICAgIGlmIChu
YW1lID09ICJDdXJyZW50VGltZURpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJjdXJyZW50IG1vdmllIHRpbWUgaW4gc2Vjb25kcyIpKTsKKyAgICBpZiAobmFtZSA9
PSAiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJudW1iZXIgb2Ygc2Vjb25kcyBvZiBtb3ZpZSByZW1haW5pbmciKSk7CisgICAgaWYgKG5h
bWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJjdXJyZW50IG1vdmllIHN0YXR1cyIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0
b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgYmFj
ayIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgZm9yd2FyZCIpKTsKKyAgICBpZiAo
bmFtZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiUGxheSBtb3ZpZSBpbiBmdWxsc2NyZWVuIG1vZGUiKSk7CisgICAgaWYgKG5h
bWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkV4aXQgZnVsbHNjcmVlbiBtb2RlIikpOworICAgIGlmIChuYW1lID09ICJTaG93
Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJzdGFydCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBpZiAobmFtZSA9PSAi
SGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygic3RvcCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXpl
ZE1lZGlhVGltZURlc2NyaXB0aW9uKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKCFzdGQ6OmlzZmlu
aXRlKHRpbWUpKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJpbmRlZmluaXRl
IHRpbWUiKSk7CisKKyAgICBpbnQgc2Vjb25kcyA9IHN0YXRpY19jYXN0PGludD4oYWJzKHRpbWUp
KTsKKyAgICBpbnQgZGF5cyA9IHNlY29uZHMgLyAoNjAgKiA2MCAqIDI0KTsKKyAgICBpbnQgaG91
cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOworICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2
MCkgJSA2MDsKKyAgICBzZWNvbmRzICU9IDYwOworCisgICAgaWYgKGRheXMpIHsKKyAgICAgICAg
R093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgZGF5cyAlZCBob3VycyAl
ZCBtaW51dGVzICVkIHNlY29uZHMiLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcykpOwor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworICAgIH0KKwor
ICAgIGlmIChob3VycykgeworICAgICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBf
cHJpbnRmKCIlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29uZHMiLCBob3VycywgbWludXRlcywg
c2Vjb25kcykpOworICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkp
OworICAgIH0KKworICAgIGlmIChtaW51dGVzKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0
cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIsIG1pbnV0ZXMsIHNl
Y29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsK
KyAgICB9CisKKyAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBz
ZWNvbmRzIiwgc2Vjb25kcykpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5n
ZXQoKSk7Cit9CisjZW5kaWYgIC8vIEVOQUJMRShWSURFTykKKworU3RyaW5nIHZhbGlkYXRpb25N
ZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygidmFsdWUgbWlzc2luZyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVN
aXNzaW5nRm9yQ2hlY2tib3hUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yRmlsZVRleHQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgp
OworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JNdWx0aXBsZUZp
bGVUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9u
TWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VmFsdWVNaXNzaW5nRm9yUmFkaW9UZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yU2VsZWN0VGV4dCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdU
ZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
dHlwZSBtaXNtYXRjaCIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21h
dGNoRm9yRW1haWxUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2
YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRp
b25NZXNzYWdlVHlwZU1pc21hdGNoRm9yTXVsdGlwbGVFbWFpbFRleHQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4
dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JVUkxUZXh0
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2Fn
ZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUGF0dGVy
bk1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF0dGVy
biBtaXNtYXRjaCIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQo
aW50LCBpbnQpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidG9vIGxvbmciKSk7
Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93VGV4dChjb25zdCBT
dHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJhbmdlIHVuZGVyZmxv
dyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQoY29u
c3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyYW5nZSBvdmVy
ZmxvdyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlU3RlcE1pc21hdGNoVGV4dChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInN0ZXAgbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB1bmFjY2VwdGFibGVUTFNDZXJ0
aWZpY2F0ZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVW5hY2NlcHRhYmxl
IFRMUyBjZXJ0aWZpY2F0ZSIpKTsKK30KKworU3RyaW5nIGxvY2FsaXplZFN0cmluZyhjb25zdCBj
aGFyKiBrZXkpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoa2V5LCBzdHJsZW4oa2V5
KSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZUJhZElucHV0Rm9yTnVtYmVyVGV4dCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VU
eXBlTWlzbWF0Y2hUZXh0KCk7Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitTdHJpbmcg
dGV4dFRyYWNrQ2xvc2VkQ2FwdGlvbnNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChDXygiQ2xvc2VkIENhcHRpb25zIiwgIk1lbnUgc2VjdGlvbiBoZWFkaW5nIGZvciBjbG9z
ZWQgY2FwdGlvbnMiKSk7Cit9CisKK1N0cmluZyB0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiU3VidGl0bGVzIiwgIk1lbnUgc2VjdGlv
biBoZWFkaW5nIGZvciBzdWJ0aXRsZXMiKSk7Cit9CisKK1N0cmluZyB0ZXh0VHJhY2tPZmZUZXh0
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiT2ZmIiwgIk1lbnUgaXRlbSBs
YWJlbCBmb3IgdGhlIHRyYWNrIHRoYXQgcmVwcmVzZW50cyBkaXNhYmxpbmcgY2xvc2VkIGNhcHRp
b25zIikpOworfQorCitTdHJpbmcgdGV4dFRyYWNrTm9MYWJlbFRleHQoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KENfKCJObyBsYWJlbCIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIGEg
Y2xvc2VkIGNhcHRpb25zIHRyYWNrIHRoYXQgaGFzIG5vIG90aGVyIG5hbWUiKSk7Cit9CisjZW5k
aWYKKworU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxUaXRsZSgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoQ18oIlNuYXBzaG90dGVkIFBsdWctSW4iLCAiVGl0bGUgb2YgdGhl
IGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOworfQorCitTdHJpbmcg
c25hcHNob3R0ZWRQbHVnSW5MYWJlbFN1YnRpdGxlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChDXygiQ2xpY2sgdG8gcmVzdGFydCIsICJTdWJ0aXRsZSBvZiB0aGUgbGFiZWwgdG8g
c2hvdyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xv
Z2dpbmdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4OThhZjdkOGJlYmNiZTA1YzlhYmU3ZmY0YTQxZTE3
YzkwOGNmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdH
dGsuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bml0aWFsaXplTG9nZ2luZy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2lmICFMT0dfRElT
QUJMRUQKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbnNw
aXJlZCBieSB0aGUgY29kZSB1c2VkIGJ5IHRoZSBRdCBwb3J0CisKK3ZvaWQgaW5pdGlhbGl6ZUxv
Z2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFs
aXplTG9nZ2luZ0NoYW5uZWxzID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVMb2dnaW5n
Q2hhbm5lbHMpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZEluaXRpYWxpemVMb2dnaW5nQ2hh
bm5lbHMgPSB0cnVlOworCisgICAgY2hhciogbG9nRW52ID0gZ2V0ZW52KCJXRUJLSVRfREVCVUci
KTsKKyAgICBpZiAoIWxvZ0VudikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gd2Ugc2V0IHVw
IHRoZSBsb2dzIGFueXdheSBiZWNhdXNlIHNvbWUgb2Ygb3VyIGxvZ2dpbmcsIHN1Y2ggYXMKKyAg
ICAvLyBzb3VwJ3MgaXMgYXZhaWxhYmxlIGluIHJlbGVhc2UgYnVpbGRzCisjaWYgZGVmaW5lZChO
REVCVUcpCisgICAgZ193YXJuaW5nKCJXRUJLSVRfREVCVUcgaXMgbm90IGVtcHR5LCBidXQgdGhp
cyBpcyBhIHJlbGVhc2UgYnVpbGQuIE5vdGljZSB0aGF0IG1hbnkgbG9nIG1lc3NhZ2VzIHdpbGwg
b25seSBhcHBlYXIgaW4gYSBkZWJ1ZyBidWlsZC4iKTsKKyNlbmRpZgorCisgICAgY2hhcioqIGxv
Z3YgPSBnX3N0cnNwbGl0KGxvZ0VudiwgIiAiLCAtMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
bG9ndltpXTsgaSsrKSB7CisgICAgICAgIGlmIChXVEZMb2dDaGFubmVsKiBjaGFubmVsID0gZ2V0
Q2hhbm5lbEZyb21OYW1lKGxvZ3ZbaV0pKQorICAgICAgICAgICAgY2hhbm5lbC0+c3RhdGUgPSBX
VEZMb2dDaGFubmVsT247CisgICAgfQorCisgICAgZ19zdHJmcmVldihsb2d2KTsKKworICAgIC8v
IHRvIGRpc2FibGUgbG9nZ2luZyBub3RJbXBsZW1lbnRlZCBzZXQgdGhlIERJU0FCTEVfTklfV0FS
TklORworICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIDEKKyAgICBMb2dOb3RZZXRJbXBs
ZW1lbnRlZC5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTUlN
RVR5cGVSZWdpc3RyeUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY3ZjE0Y2Q4ZGY3YTU2MmIwMmVjMzJi
OGRmYTJmNGNmOTZmYjJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
TUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKKyAg
ICBjb25zdCBjaGFyKiBleHRlbnNpb247CisgICAgY29uc3QgY2hhciogbWltZVR5cGU7Cit9Owor
CitzdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKKyAgICB7ICJi
bXAiLCAiaW1hZ2UvYm1wIiB9LAorICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKKyAgICB7ICJn
aWYiLCAiaW1hZ2UvZ2lmIiB9LAorICAgIHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAi
aHRtbCIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwKKyAg
ICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWciIH0s
CisgICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAorICAgIHsgInBkZiIs
ICJhcHBsaWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKKyAgICB7
ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3Zn
K3htbCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidHh0IiwgInRl
eHQvcGxhaW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKKyAgICB7ICJ4
bWwiLCAidGV4dC94bWwiIH0sCisgICAgeyAieHNsIiwgInRleHQveHNsIiB9LAorICAgIHsgInho
dG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7ICJ3bWwiLCAidGV4dC92bmQu
d2FwLndtbCIgfSwKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIgfSwK
KyAgICB7IDAsIDAgfQorfTsKKworU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOworICAgIGNvbnN0IEV4dGVuc2lv
bk1hcCAqZSA9IGV4dGVuc2lvbk1hcDsKKyAgICB3aGlsZSAoZS0+ZXh0ZW5zaW9uKSB7CisgICAg
ICAgIGlmIChzID09IGUtPmV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlw
ZTsKKyAgICAgICAgKytlOworICAgIH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9v
bCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWMxY2M4M2EwMjM0OThj
MWFiMmI4NGRjMTA5ZTlhOWM1Zjg1MGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIHpl
Y2tlQHNlbGZpc2gub3JnCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSA8Z25zQGdub21lLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYWlu
RnJhbWVTY3JvbGxiYXJHdGsuaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitQYXNzUmVmUHRyPE1haW5G
cmFtZVNjcm9sbGJhckd0az4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVhdGUoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1haW5GcmFtZVNjcm9sbGJhckd0ayhzY3JvbGxh
YmxlQXJlYSwgb3JpZW50YXRpb24pKTsKK30KKworLy8gQSBNYWluRnJhbWVTY3JvbGxiYXIgaXMg
anVzdCBhIG5vbi1wYWludGluZyBzY3JvbGxiYXIuIE90aGVyd2lzZSBpdCBpcyBmdWxseQorLy8g
ZnVuY3Rpb25hbC4gQSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyIGFsbG93cyBhIG1haW4tZnJhbWUg
U2Nyb2xsVmlldyB0byB1c2UKKy8vIGEgY29udGFpbmluZyBHdGtTY3JvbGxlZFdpbmRvdyBhcyBp
dHMgdXNlciBpbnRlcmZhY2UuIFRoZSBDaHJvbWVDbGllbnQgaW4gdGhlCisvLyBXZWJLaXQgbGF5
ZXIganVzdCBsaXN0ZW5zIGZvciBzY3JvbGxpbmcgYW5kIHNpemluZyBjaGFuZ2VzIGFuZCB1cGRh
dGVzIGl0cworLy8gY29udGFpbmVyICh0aGUgR3RrU2Nyb2xsZWRXaW5kb3cpIGFjY29yZGluZ2x5
LiBUaGUgU2Nyb2xsVmlldyBpcyByZXNwb25zaWJsZQorLy8gZm9yIGRlY2lkaW5nIHdoZXRoZXIg
b3Igbm90IHRvIGNyZWF0ZSBhIE1haW5GcmFtZVNjcm9sbGJhciBvciBuYXRpdmUgc2Nyb2xsYmFy
LgorTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
KyAgICA6IFNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3Jv
bGxiYXIpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0YWtlIHVwIGFueSBzcGFjZS4KKyAg
ICByZXNpemUoMCwgMCk7Cit9CisKK3ZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
TWFpbiBmcmFtZSBzY3JvbGxiYXJzIGFyZSBub3QgcGFpbnRlZCBieSBXZWJDb3JlLgorICAgIHJl
dHVybjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xs
YmFyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdiOGNiNjM4ZmRhY2M5YjBjMjVjNjA0ODE4NWQ3NTBhNzBmNTQwZjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5o
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgTWFpbkZyYW1lU2Ny
b2xsYmFyR3RrX2gKKyNkZWZpbmUgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrX2gKKworI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrIDogcHVibGljIFNjcm9sbGJh
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
PiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworcHJp
dmF0ZToKKyAgICBNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxi
YXJPcmllbnRhdGlvbik7Cit9OworCit9CisKKyNlbmRpZiAvLyBTY3JvbGxiYXJHdGtfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E3YTNmOTc5OTUwYWZk
OGE2OGRhNGMwMTVmMzE4OTQ5NGMzMWI5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5o
IgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkdPd25QdHJHdGsuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJY
TGlua05hbWVzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXN0ZWJvYXJk
KiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAgc3RhdGljIFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAgIHJldHVybiBwYXN0ZWJvYXJk
OworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3sKK30KKwordm9pZCBQYXN0ZWJvYXJk
Ojp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlP
ckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwor
CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBi
b2FyZChjbGlwYm9hcmQpOworICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOworICAgIGRh
dGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKKyAgICBoZWxw
ZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkLCBjYW5TbWFydENvcHlPckRlbGV0
ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBl
cjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBs
YWNlT3B0aW9uKQoreworICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2Fy
ZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElP
Tl9DTElQQk9BUkQpOworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0
R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgp
OworCisgICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0ZXh0KTsKKyAgICBQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBi
b2FyZCwKKyAgICAgICAgKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpID8g
UGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpE
b05vdEluY2x1ZGVTbWFydFBhc3RlKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFzdGVib2FyZEhl
bHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KTsKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBi
b2FyZChmcmFtZSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVj
dEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwo
KTsKKworICAgIGRhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKKyAgICBoZWxwZXItPndy
aXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKK30KKworc3RhdGljIEtVUkwgZ2V0VVJM
Rm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgLy8gRklYTUU6IExhdGVyIHRoaXMgY29k
ZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hhbmNlcyBhcmUgYWxs
IHBsYXRmb3JtcyB3YW50IGl0LgorICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7CisgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisjaWYgRU5B
QkxFKFNWRykKKyAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRh
ZykpCisgICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0
QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyNlbmRpZgorICAgIGVsc2UgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdFRhZykpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+Z2V0
QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2RlLT5kb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5n
KSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisKKyAgICBp
ZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1h
Z2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVu
ZGVyZXItPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFn
ZS0+ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisgICAgSW1hZ2UqIGltYWdlID0g
Y2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgIEFTU0VSVChpbWFn
ZSk7CisKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zv
cl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJP
QVJEKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKworICAg
IEtVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VOb2RlKG5vZGUpOworICAgIGlmICghdXJsLmlzRW1w
dHkoKSkgeworICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CisKKyAgICAg
ICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgIH0KKworICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1
ZigpKTsKKyAgICBkYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOworCisgICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRD
b250ZW50cyhjbGlwYm9hcmQpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJk
KENsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAgIEd0a0NsaXBib2FyZCogZ3RrQ2xpcGJvYXJk
ID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+Y2xpcGJvYXJkKCk7Cisg
ICAgaWYgKGd0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhndGtDbGlwYm9hcmQpOwor
fQorCit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKK3sKKyAgICBndGtfY2xpcGJvYXJkX2NsZWFy
KGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCks
IEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6Y2FuU21h
cnRSZXBsYWNlKCkKK3sKKyAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKAorICAg
ICAgICBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNz
UmVmUHRyPFJhbmdlPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3Nl
UGxhaW5UZXh0KQoreworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRI
ZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOworICAgIERhdGFPYmpl
Y3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJk
KTsKKyAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7CisKKyAgICBj
aG9zZVBsYWluVGV4dCA9IGZhbHNlOworCisgICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgp
KSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVjdC0+bWFya3VwKCks
ICIiLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRlZCk7CisgICAgICAg
IGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAgICAgIGNob3NlUGxhaW5UZXh0ID0g
dHJ1ZTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBkYXRhT2JqZWN0LT50ZXh0KCkpOworICAg
ICAgICBpZiAoZnJhZ21lbnQpCisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5U
ZXh0KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOworICAgIEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKKyAgICBE
YXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNs
aXBib2FyZCk7CisKKyAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7
CisgICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQoKTsKK30KKworYm9vbCBQYXN0ZWJvYXJkOjpp
c1NlbGVjdGlvbk1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT51c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKCk7
Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6c2V0U2VsZWN0aW9uTW9kZShib29sIHNlbGVjdGlvbk1v
ZGUpCit7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
c2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChzZWxlY3Rpb25Nb2RlKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZhOTc1
NDM3MDc4Y2JlYjY4MTExOTlmMWRlYzI1MDkxOGJhODMxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKQEAgLTAsMCArMSwzMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIu
aCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURl
Y29kZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHZGtBdG9tIHRleHRQbGFp
bkF0b207CitzdGF0aWMgR2RrQXRvbSBtYXJrdXBBdG9tOworc3RhdGljIEdka0F0b20gbmV0c2Nh
cGVVUkxBdG9tOworc3RhdGljIEdka0F0b20gdXJpTGlzdEF0b207CitzdGF0aWMgR2RrQXRvbSBz
bWFydFBhc3RlQXRvbTsKK3N0YXRpYyBTdHJpbmcgZ01hcmt1cFByZWZpeDsKKworc3RhdGljIHZv
aWQgcmVtb3ZlTWFya3VwUHJlZml4KFN0cmluZyYgbWFya3VwKQoreworICAgIC8vIFRoZSBtYXJr
dXAgcHJlZml4IGlzIG5vdCBoYXJtZnVsLCBidXQgd2UgcmVtb3ZlIGl0IGZyb20gdGhlIHN0cmlu
ZyBhbnl3YXksIHNvIHRoYXQKKyAgICAvLyB3ZSBjYW4gaGF2ZSBjb25zaXN0ZW50IHJlc3VsdHMg
d2l0aCBvdGhlciBwb3J0cyBkdXJpbmcgdGhlIGxheW91dCB0ZXN0cy4KKyAgICBpZiAobWFya3Vw
LnN0YXJ0c1dpdGgoZ01hcmt1cFByZWZpeCkpCisgICAgICAgIG1hcmt1cC5yZW1vdmUoMCwgZ01h
cmt1cFByZWZpeC5sZW5ndGgoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRHZGtBdG9tcygpCit7
CisgICAgc3RhdGljIGdib29sZWFuIGluaXRpYWxpemVkID0gRkFMU0U7CisKKyAgICBpZiAoaW5p
dGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluaXRpYWxpemVkID0gVFJVRTsKKwor
ICAgIHRleHRQbGFpbkF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvcGxhaW47Y2hhcnNldD11
dGYtOCIsIEZBTFNFKTsKKyAgICBtYXJrdXBBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0
bWwiLCBGQUxTRSk7CisgICAgbmV0c2NhcGVVUkxBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJfTkVU
U0NBUEVfVVJMIiwgRkFMU0UpOworICAgIHVyaUxpc3RBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0
ZXh0L3VyaS1saXN0IiwgRkFMU0UpOworICAgIHNtYXJ0UGFzdGVBdG9tID0gZ2RrX2F0b21faW50
ZXJuKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUiLCBGQUxTRSk7CisgICAg
Z01hcmt1cFByZWZpeCA9ICI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVu
dD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiI7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXIq
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFBhc3RlYm9hcmRIZWxwZXIsIGRlZmF1bHRIZWxwZXIsICgpKTsKKyAg
ICByZXR1cm4gJmRlZmF1bHRIZWxwZXI7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXI6OlBhc3RlYm9h
cmRIZWxwZXIoKQorICAgIDogbV90YXJnZXRMaXN0KGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkp
CisgICAgLCBtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoZmFsc2UpCit7CisgICAgaW5p
dEdka0F0b21zKCk7CisKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhtX3Rh
cmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVUZXh0KTsKKyAgICBndGtfdGFy
Z2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbWFya3VwQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBl
cjo6VGFyZ2V0VHlwZU1hcmt1cCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0
cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVVUklMaXN0KTsKKyAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbmV0c2NhcGVVUkxBdG9tLCAwLCBQ
YXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlTmV0c2NhcGVVUkwpOworICAgIGd0a190YXJnZXRf
bGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRh
cmdldFR5cGVJbWFnZSwgVFJVRSk7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXI6On5QYXN0ZWJvYXJk
SGVscGVyKCkKK3sKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYobV90YXJnZXRMaXN0KTsKK30K
Kworc3RhdGljIGlubGluZSBHZGtEaXNwbGF5KiBkaXNwbGF5RnJvbUZyYW1lKEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
OworICAgIEFTU0VSVChwYWdlKTsKKyAgICBDaHJvbWUqIGNocm9tZSA9IHBhZ2UtPmNocm9tZSgp
OworICAgIEFTU0VSVChjaHJvbWUpOworICAgIFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQgPSBj
aHJvbWUtPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIHJldHVybiBjbGllbnQgPyBndGtfd2lk
Z2V0X2dldF9kaXNwbGF5KGNsaWVudCkgOiBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpOworfQor
CitHdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxwZXI6OmdldEN1cnJlbnRDbGlwYm9hcmQoRnJh
bWUqIGZyYW1lKQoreworICAgIGlmIChtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQpCisg
ICAgICAgIHJldHVybiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZyYW1lKTsKKyAgICBy
ZXR1cm4gZ2V0Q2xpcGJvYXJkKGZyYW1lKTsKK30KKworR3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJk
SGVscGVyOjpnZXRDbGlwYm9hcmQoRnJhbWUqIGZyYW1lKSBjb25zdAoreworICAgIHJldHVybiBn
dGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNwbGF5RnJvbUZyYW1lKGZyYW1lKSwgR0RL
X1NFTEVDVElPTl9DTElQQk9BUkQpOworfQorCitHdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxw
ZXI6OmdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoRnJhbWUqIGZyYW1lKSBjb25zdAorewor
ICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNwbGF5RnJvbUZyYW1l
KGZyYW1lKSwgR0RLX1NFTEVDVElPTl9QUklNQVJZKTsKK30KKworR3RrVGFyZ2V0TGlzdCogUGFz
dGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGFyZ2V0
TGlzdDsKK30KKworc3RhdGljIFN0cmluZyBzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKEd0a1Nl
bGVjdGlvbkRhdGEqIGRhdGEpCit7CisgICAgLy8gZ19zdHJuZHVwIGd1YXJkcyBhZ2FpbnN0IHNl
bGVjdGlvbiBkYXRhIHRoYXQgaXMgbm90IG51bGwtdGVybWluYXRlZC4KKyAgICBHT3duUHRyPGdj
aGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19zZWxlY3Rpb25fZGF0YV9n
ZXRfbGVuZ3RoKGRhdGEpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgobWFya3VwU3Ry
aW5nLmdldCgpKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9hcmRDb250
ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgQVNT
RVJUKGRhdGFPYmplY3QpOworCisgICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190ZXh0X2F2
YWlsYWJsZShjbGlwYm9hcmQpKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRleHREYXRhKGd0
a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKTsKKyAgICAgICAgaWYgKHRleHRE
YXRhKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRl
eHREYXRhLmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190
YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKKyAgICAgICAgaWYgKEd0
a1NlbGVjdGlvbkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNs
aXBib2FyZCwgbWFya3VwQXRvbSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtYXJrdXAoc2VsZWN0
aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgICAgICAgICByZW1vdmVNYXJrdXBQcmVm
aXgobWFya3VwKTsKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChtYXJrdXApOwor
ICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0YSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xp
cGJvYXJkLCB1cmlMaXN0QXRvbSkpIHsKKyAgICAgICAgaWYgKEd0a1NlbGVjdGlvbkRhdGEqIGRh
dGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgdXJpTGlzdEF0
b20pKSB7CisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFU
b1VURjhTdHJpbmcoZGF0YSkpOworICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUo
ZGF0YSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Zmls
bFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5m
bywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBpZiAoaW5mbyA9PSBUYXJnZXRU
eXBlVGV4dCkKKyAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbkRh
dGEsIGRhdGFPYmplY3QtPnRleHQoKS51dGY4KCkuZGF0YSgpLCAtMSk7CisKKyAgICBlbHNlIGlm
IChpbmZvID09IFRhcmdldFR5cGVNYXJrdXApIHsKKyAgICAgICAgLy8gU29tZSBMaW51eCBhcHBs
aWNhdGlvbnMgcmVmdXNlIHRvIGFjY2VwdCBwYXN0ZWQgbWFya3VwIHVubGVzcyBpdCBpcworICAg
ICAgICAvLyBwcmVmaXhlZCBieSBhIGNvbnRlbnQtdHlwZSBtZXRhIHRhZy4KKyAgICAgICAgQ1N0
cmluZyBtYXJrdXAgPSBTdHJpbmcoZ01hcmt1cFByZWZpeCArIGRhdGFPYmplY3QtPm1hcmt1cCgp
KS51dGY4KCk7CisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwg
bWFya3VwQXRvbSwgOCwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFy
Kj4obWFya3VwLmRhdGEoKSksIG1hcmt1cC5sZW5ndGgoKSArIDEpOworCisgICAgfSBlbHNlIGlm
IChpbmZvID09IFRhcmdldFR5cGVVUklMaXN0KSB7CisgICAgICAgIENTdHJpbmcgdXJpTGlzdCA9
IGRhdGFPYmplY3QtPnVyaUxpc3QoKS51dGY4KCk7CisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0
YV9zZXQoc2VsZWN0aW9uRGF0YSwgdXJpTGlzdEF0b20sIDgsCisgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KHVyaUxpc3QuZGF0YSgpKSwgdXJpTGlzdC5sZW5ndGgo
KSArIDEpOworCisgICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVOZXRzY2FwZVVSTCAm
JiBkYXRhT2JqZWN0LT5oYXNVUkwoKSkgeworICAgICAgICBTdHJpbmcgdXJsKGRhdGFPYmplY3Qt
PnVybCgpKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCh1cmwpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKCJcbiIpOworCisgICAgICAgIGlmIChkYXRhT2JqZWN0LT5oYXNUZXh0KCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGRhdGFPYmplY3QtPnRleHQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXJsKTsKKworICAgICAgICBHT3duUHRyPGdjaGFyPiBy
ZXN1bHREYXRhKGdfc3RyZHVwKHJlc3VsdC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGd0a19z
ZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwgbmV0c2NhcGVVUkxBdG9tLCA4LAorICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihyZXN1bHREYXRhLmdldCgp
KSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpICsgMSk7CisKKyAgICB9IGVsc2UgaWYgKGluZm8g
PT0gVGFyZ2V0VHlwZUltYWdlKQorICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1
ZihzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKKworICAgIGVsc2UgaWYgKGlu
Zm8gPT0gVGFyZ2V0VHlwZVNtYXJ0UGFzdGUpCisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9z
ZXRfdGV4dChzZWxlY3Rpb25EYXRhLCAiIiwgLTEpOworfQorCitHdGtUYXJnZXRMaXN0KiBQYXN0
ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0LCBTbWFydFBhc3RlSW5jbHVzaW9uIHNob3VsZElubHVkZVNtYXJ0UGFzdGUpCit7Cisg
ICAgR3RrVGFyZ2V0TGlzdCogbGlzdCA9IGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCk7CisKKyAg
ICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRk
X3RleHRfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlVGV4dCk7CisKKyAgICBpZiAoZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgbWFya3Vw
QXRvbSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVVJJ
TGlzdCgpKSB7CisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMobGlzdCwg
VGFyZ2V0VHlwZVVSSUxpc3QpOworICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QsIG5l
dHNjYXBlVVJMQXRvbSwgMCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKKyAgICB9CisKKyAgICBp
ZiAoZGF0YU9iamVjdC0+aGFzSW1hZ2UoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9p
bWFnZV90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7CisKKyAgICBpZiAoc2hv
dWxkSW5sdWRlU21hcnRQYXN0ZSA9PSBJbmNsdWRlU21hcnRQYXN0ZSkKKyAgICAgICAgZ3RrX3Rh
cmdldF9saXN0X2FkZChsaXN0LCBzbWFydFBhc3RlQXRvbSwgMCwgVGFyZ2V0VHlwZVNtYXJ0UGFz
dGUpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3ZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Zmls
bERhdGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSwgZ3VpbnQgaW5m
bywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBpZiAoIWd0a19zZWxlY3Rpb25f
ZGF0YV9nZXRfZGF0YShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrQXRvbSB0YXJn
ZXQgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3RhcmdldChkYXRhKTsKKyAgICBpZiAodGFyZ2V0
ID09IHRleHRQbGFpbkF0b20pCisgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQoc2VsZWN0aW9u
RGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IG1hcmt1cEF0
b20pIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRh
dGEpKTsKKyAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7CisgICAgICAgIGRhdGFP
YmplY3QtPnNldE1hcmt1cChtYXJrdXApOworICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IHVyaUxp
c3RBdG9tKSB7CisgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRv
VVRGOFN0cmluZyhkYXRhKSk7CisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gbmV0c2NhcGVVUkxB
dG9tKSB7CisgICAgICAgIFN0cmluZyB1cmxXaXRoTGFiZWwoc2VsZWN0aW9uRGF0YVRvVVRGOFN0
cmluZyhkYXRhKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBpZWNlczsKKyAgICAgICAgdXJs
V2l0aExhYmVsLnNwbGl0KCJcbiIsIHBpZWNlcyk7CisKKyAgICAgICAgLy8gR2l2ZSBwcmVmZXJl
bmNlIHRvIHRleHQvdXJpLWxpc3QgaGVyZSwgYXMgaXQgY2FuIGhvbGQgbW9yZQorICAgICAgICAv
LyB0aGFuIG9uZSBVUkkgYnV0IHN0aWxsIHRha2UgIHRoZSBsYWJlbCBpZiB0aGVyZSBpcyBvbmUu
CisgICAgICAgIGlmICghZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKQorICAgICAgICAgICAgZGF0
YU9iamVjdC0+c2V0VVJJTGlzdChwaWVjZXNbMF0pOworICAgICAgICBpZiAocGllY2VzLnNpemUo
KSA+IDEpCisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHBpZWNlc1sxXSk7CisgICAg
fQorfQorCitWZWN0b3I8R2RrQXRvbT4gUGFzdGVib2FyZEhlbHBlcjo6ZHJvcEF0b21zRm9yQ29u
dGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
Ly8gQWx3YXlzIHNlYXJjaCBmb3IgdGhlc2UgY29tbW9uIGF0b21zLgorICAgIFZlY3RvcjxHZGtB
dG9tPiBkcm9wQXRvbXM7CisgICAgZHJvcEF0b21zLmFwcGVuZCh0ZXh0UGxhaW5BdG9tKTsKKyAg
ICBkcm9wQXRvbXMuYXBwZW5kKG1hcmt1cEF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQodXJp
TGlzdEF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQobmV0c2NhcGVVUkxBdG9tKTsKKworICAg
IC8vIEZvciBpbWFnZXMsIHRyeSB0byBmaW5kIHRoZSBtb3N0IGFwcGxpY2FibGUgaW1hZ2UgdHlw
ZS4KKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QgPSBhZG9wdEdSZWYoZ3RrX3Rhcmdl
dF9saXN0X25ldygwLCAwKSk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9pbWFnZV90YXJnZXRz
KGxpc3QuZ2V0KCksIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7CisgICAgR2RrQXRvbSBhdG9tID0g
Z3RrX2RyYWdfZGVzdF9maW5kX3RhcmdldCh3aWRnZXQsIGNvbnRleHQsIGxpc3QuZ2V0KCkpOwor
ICAgIGlmIChhdG9tICE9IEdES19OT05FKQorICAgICAgICBkcm9wQXRvbXMuYXBwZW5kKGF0b20p
OworCisgICAgcmV0dXJuIGRyb3BBdG9tczsKK30KKworc3RhdGljIERhdGFPYmplY3RHdGsqIHNl
dHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0gMDsKKworc3RhdGljIHZvaWQgZ2V0Q2xpcGJvYXJk
Q29udGVudHNDYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0
YSAqc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBi
b2FyZCk7CisgICAgQVNTRVJUKGRhdGFPYmplY3QpOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEs
IGluZm8sIGRhdGFPYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBjbGVhckNsaXBib2FyZENvbnRl
bnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2Fy
ZChjbGlwYm9hcmQpOworICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKKworICAgIC8vIE9ubHkgY2xl
YXIgdGhlIERhdGFPYmplY3QgZm9yIHRoaXMgY2xpcGJvYXJkIGlmIHdlIGFyZSBub3QgY3VycmVu
dGx5IHNldHRpbmcgaXQuCisgICAgaWYgKGRhdGFPYmplY3QgIT0gc2V0dGluZ0NsaXBib2FyZERh
dGFPYmplY3QpCisgICAgICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBpZiAoIWRh
dGEpCisgICAgICAgIHJldHVybjsKKworICAgIEdDbG9zdXJlKiBjYWxsYmFjayA9IHN0YXRpY19j
YXN0PEdDbG9zdXJlKj4oZGF0YSk7CisgICAgR1ZhbHVlIGZpcnN0QXJndW1lbnQgPSB7MCwge3sw
fX19OworICAgIGdfdmFsdWVfaW5pdCgmZmlyc3RBcmd1bWVudCwgR19UWVBFX1BPSU5URVIpOwor
ICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIoJmZpcnN0QXJndW1lbnQsIGNsaXBib2FyZCk7CisgICAg
Z19jbG9zdXJlX2ludm9rZShjYWxsYmFjaywgMCwgMSwgJmZpcnN0QXJndW1lbnQsIDApOworICAg
IGdfY2xvc3VyZV91bnJlZihjYWxsYmFjayk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZEhlbHBlcjo6
d3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgU21hcnRQYXN0
ZUluY2x1c2lvbiBpbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqIGNhbGxiYWNrKQoreworICAg
IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQo
Y2xpcGJvYXJkKTsKKyAgICBHdGtUYXJnZXRMaXN0KiBsaXN0ID0gdGFyZ2V0TGlzdEZvckRhdGFP
YmplY3QoZGF0YU9iamVjdCwgaW5jbHVkZVNtYXJ0UGFzdGUpOworCisgICAgaW50IG51bWJlck9m
VGFyZ2V0czsKKyAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBndGtfdGFyZ2V0X3RhYmxlX25l
d19mcm9tX2xpc3QobGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7CisKKyAgICBpZiAobnVtYmVyT2ZU
YXJnZXRzID4gMCAmJiB0YWJsZSkgeworICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVj
dCA9IGRhdGFPYmplY3Q7CisKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhKGNs
aXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywKKyAgICAgICAgICAgIGdldENsaXBib2Fy
ZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjaywgY2FsbGJh
Y2spOworICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5fc3RvcmUoY2xpcGJvYXJkLCAwLCAw
KTsKKworICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7CisKKyAgICB9IGVs
c2UKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihjbGlwYm9hcmQpOworCisgICAgaWYgKHRh
YmxlKQorICAgICAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFibGUsIG51bWJlck9mVGFyZ2V0
cyk7CisgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKGxpc3QpOworfQorCitib29sIFBhc3RlYm9h
cmRIZWxwZXI6OmNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCkKK3sKKyAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF93YWl0X2lzX3Rhcmdl
dF9hdmFpbGFibGUoY2xpcGJvYXJkLCBzbWFydFBhc3RlQXRvbSk7Cit9CisKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjM4ZjgwZGQ4MWZjZTZm
NzRmOWVkMjU2NzQxYzQ2YmY4N2Q4OTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBMdWNhIEJydW5vIDxsZXRoYWxtYW44OEBnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBQYXN0ZWJvYXJkSGVscGVyX2gKKyNkZWZpbmUgUGFzdGVib2FyZEhlbHBlcl9oCisKKyNp
bmNsdWRlICJGcmFtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFPYmpl
Y3RHdGs7CisKK2NsYXNzIFBhc3RlYm9hcmRIZWxwZXIgeworcHVibGljOgorICAgIFBhc3RlYm9h
cmRIZWxwZXIoKTsKKyAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgc3RhdGlj
IFBhc3RlYm9hcmRIZWxwZXIqIGRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisKKyAgICB2b2lk
IHNldFVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoYm9vbCB1c2VQcmltYXJ5KSB7IG1fdXNl
UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCA9IHVzZVByaW1hcnk7IH0KKyAgICBib29sIHVzZVBy
aW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKSB7IHJldHVybiBtX3VzZVByaW1hcnlTZWxlY3Rpb25D
bGlwYm9hcmQ7IH0KKworICAgIGVudW0gU21hcnRQYXN0ZUluY2x1c2lvbiB7IEluY2x1ZGVTbWFy
dFBhc3RlLCBEb05vdEluY2x1ZGVTbWFydFBhc3RlIH07CisKKyAgICBHdGtDbGlwYm9hcmQqIGdl
dEN1cnJlbnRDbGlwYm9hcmQoRnJhbWUqKTsKKyAgICBHdGtDbGlwYm9hcmQqIGdldENsaXBib2Fy
ZChGcmFtZSopIGNvbnN0OworICAgIEd0a0NsaXBib2FyZCogZ2V0UHJpbWFyeVNlbGVjdGlvbkNs
aXBib2FyZChGcmFtZSopIGNvbnN0OworICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QoKSBj
b25zdDsKKyAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2Jq
ZWN0R3RrKiwgU21hcnRQYXN0ZUluY2x1c2lvbiA9IERvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOwor
ICAgIHZvaWQgZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50LCBEYXRh
T2JqZWN0R3RrKik7CisgICAgdm9pZCBmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxl
Y3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKKyAgICBWZWN0b3I8R2RrQXRvbT4g
ZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCopOworICAgIHZv
aWQgd3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqLCBTbWFydFBhc3RlSW5jbHVz
aW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqID0gMCk7CisgICAgdm9pZCBn
ZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqKTsKKworICAgIGVudW0gUGFzdGVib2Fy
ZFRhcmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRUeXBlVGV4dCwgVGFyZ2V0VHlw
ZUltYWdlLCBUYXJnZXRUeXBlVVJJTGlzdCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMLCBUYXJnZXRU
eXBlU21hcnRQYXN0ZSwgVGFyZ2V0VHlwZVVua25vd24gfTsKKyAgICBib29sIGNsaXBib2FyZENv
bnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9hcmQqKTsKKworcHJpdmF0ZToKKyAg
ICBHdGtUYXJnZXRMaXN0KiBtX3RhcmdldExpc3Q7CisgICAgYm9vbCBtX3VzZVByaW1hcnlTZWxl
Y3Rpb25DbGlwYm9hcmQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBQYXN0ZWJvYXJkSGVscGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MDZkNmUyNWM5OTAwNWEyNDIwMGNhOWQ0ZjA1MDI1NWZlMjJmNGM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRH
dGsuY3BwCkBAIC0wLDAgKzEsNjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJXaW5kb3dzS2V5
Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdkay9nZGtr
ZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2Ug
dGhpcyB0byBtaXJyb3IKKy8vIG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVy
YXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCisvLyBhdCBidWlsZCB0aW1lLgorU3RyaW5nIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUodW5zaWduZWQg
a2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAgICAgICAgY2FzZSBHREtfTWVu
dToKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6CisgICAgICAgIGNhc2UgR0RLX0FsdF9SOgorICAg
ICAgICAgICAgcmV0dXJuICJBbHQiOworICAgICAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAg
ICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIEdES19Eb3duOgorICAgICAgICAgICAg
cmV0dXJuICJEb3duIjsKKyAgICAgICAgICAgIC8vICJFbmQiCisgICAgICAgIGNhc2UgR0RLX0Vu
ZDoKKyAgICAgICAgICAgIHJldHVybiAiRW5kIjsKKyAgICAgICAgICAgIC8vICJFbnRlciIKKyAg
ICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKKyAg
ICAgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAg
ICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOworICAg
ICAgICBjYXNlIEdES19GMToKKyAgICAgICAgICAgIHJldHVybiAiRjEiOworICAgICAgICBjYXNl
IEdES19GMjoKKyAgICAgICAgICAgIHJldHVybiAiRjIiOworICAgICAgICBjYXNlIEdES19GMzoK
KyAgICAgICAgICAgIHJldHVybiAiRjMiOworICAgICAgICBjYXNlIEdES19GNDoKKyAgICAgICAg
ICAgIHJldHVybiAiRjQiOworICAgICAgICBjYXNlIEdES19GNToKKyAgICAgICAgICAgIHJldHVy
biAiRjUiOworICAgICAgICBjYXNlIEdES19GNjoKKyAgICAgICAgICAgIHJldHVybiAiRjYiOwor
ICAgICAgICBjYXNlIEdES19GNzoKKyAgICAgICAgICAgIHJldHVybiAiRjciOworICAgICAgICBj
YXNlIEdES19GODoKKyAgICAgICAgICAgIHJldHVybiAiRjgiOworICAgICAgICBjYXNlIEdES19G
OToKKyAgICAgICAgICAgIHJldHVybiAiRjkiOworICAgICAgICBjYXNlIEdES19GMTA6CisgICAg
ICAgICAgICByZXR1cm4gIkYxMCI7CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgICAg
IHJldHVybiAiRjExIjsKKyAgICAgICAgY2FzZSBHREtfRjEyOgorICAgICAgICAgICAgcmV0dXJu
ICJGMTIiOworICAgICAgICBjYXNlIEdES19GMTM6CisgICAgICAgICAgICByZXR1cm4gIkYxMyI7
CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgICAgIHJldHVybiAiRjE0IjsKKyAgICAg
ICAgY2FzZSBHREtfRjE1OgorICAgICAgICAgICAgcmV0dXJuICJGMTUiOworICAgICAgICBjYXNl
IEdES19GMTY6CisgICAgICAgICAgICByZXR1cm4gIkYxNiI7CisgICAgICAgIGNhc2UgR0RLX0Yx
NzoKKyAgICAgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICAgICAgY2FzZSBHREtfRjE4OgorICAg
ICAgICAgICAgcmV0dXJuICJGMTgiOworICAgICAgICBjYXNlIEdES19GMTk6CisgICAgICAgICAg
ICByZXR1cm4gIkYxOSI7CisgICAgICAgIGNhc2UgR0RLX0YyMDoKKyAgICAgICAgICAgIHJldHVy
biAiRjIwIjsKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICAgICAgcmV0dXJuICJGMjEi
OworICAgICAgICBjYXNlIEdES19GMjI6CisgICAgICAgICAgICByZXR1cm4gIkYyMiI7CisgICAg
ICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgICAgIHJldHVybiAiRjIzIjsKKyAgICAgICAgY2Fz
ZSBHREtfRjI0OgorICAgICAgICAgICAgcmV0dXJuICJGMjQiOworICAgICAgICBjYXNlIEdES19I
ZWxwOgorICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKKyAgICAgICAgY2FzZSBHREtfSG9tZToK
KyAgICAgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgICAgIGNhc2UgR0RLX0luc2VydDoKKyAg
ICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAgICAg
ICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKKyAgICAg
ICAgICAgIHJldHVybiAiUGFnZURvd24iOworICAgICAgICBjYXNlIEdES19QYWdlX1VwOgorICAg
ICAgICAgICAgcmV0dXJuICJQYWdlVXAiOworICAgICAgICBjYXNlIEdES19QYXVzZToKKyAgICAg
ICAgICAgIHJldHVybiAiUGF1c2UiOworICAgICAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVu
OgorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVybiAiUHJpbnRTY3Jl
ZW4iOworICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgICAgIHJldHVybiAiUmlnaHQi
OworICAgICAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgICAgICByZXR1cm4gIlNlbGVjdCI7
CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAgICAgICAgICAgcmV0dXJuICJVcCI7CisgICAgICAg
ICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgorICAgICAgICBj
YXNlIEdES19EZWxldGU6CisgICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7CisgICAgICAgIGNh
c2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA4IjsKKyAgICAgICAg
Y2FzZSBHREtfSVNPX0xlZnRfVGFiOgorICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6Cisg
ICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA5IjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwg
Z2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBwZXIoa2V5Q29kZSkpKTsKKyAg
ICB9Cit9CisKK2ludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2Rr
S2V5Q29kZSh1bnNpZ25lZCBrZXljb2RlKQoreworICAgIHN3aXRjaCAoa2V5Y29kZSkgeworICAg
ICAgICBjYXNlIEdES19LUF8wOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYw
KSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgICAgICBjYXNlIEdES19LUF8xOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAgICAg
ICBjYXNlIEdES19LUF8yOgorICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQyOyAvLyAoNjIp
IE51bWVyaWMga2V5cGFkIDIga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzM6CisgICAgICAgICAg
ICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgICAg
ICBjYXNlIEdES19LUF80OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkg
TnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfNToKKyAgICAgICAgICAg
IHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKKyAgICAgICAg
Y2FzZSBHREtfS1BfNjoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51
bWVyaWMga2V5cGFkIDYga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzc6CisgICAgICAgICAgICBy
ZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgICAgICBj
YXNlIEdES19LUF84OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7IC8vICg2OCkgTnVt
ZXJpYyBrZXlwYWQgOCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfOToKKyAgICAgICAgICAgIHJl
dHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgICAgIGNh
c2UgR0RLX0tQX011bHRpcGx5OgorICAgICAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAo
NkEpIE11bHRpcGx5IGtleQorICAgICAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfU3VidHJh
Y3Q6CisgICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5
CisgICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6CisgICAgICAgICAgICByZXR1cm4gVktfREVD
SU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQorICAgICAgICBjYXNlIEdES19LUF9EaXZpZGU6Cisg
ICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBrZXkKKworICAgICAg
ICBjYXNlIEdES19LUF9QYWdlX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAo
MjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93bjoKKyAgICAgICAg
ICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAgICAgICAgY2FzZSBH
REtfS1BfRW5kOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5Cisg
ICAgICAgIGNhc2UgR0RLX0tQX0hvbWU6CisgICAgICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8g
KDI0KSBIT01FIGtleQorICAgICAgICBjYXNlIEdES19LUF9MZWZ0OgorICAgICAgICAgICAgcmV0
dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfS1Bf
VXA6CisgICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5CisgICAg
ICAgIGNhc2UgR0RLX0tQX1JpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAo
MjcpIFJJR0hUIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19LUF9Eb3duOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKKworICAgICAgICBjYXNl
IEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNL
U1BBQ0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKKyAgICAgICAgY2FzZSBH
REtfMzI3MF9CYWNrVGFiOgorICAgICAgICBjYXNlIEdES19UYWI6CisgICAgICAgICAgICByZXR1
cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKKyAgICAgICAgY2FzZSBHREtfQ2xlYXI6CisgICAg
ICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5CisgICAgICAgIGNhc2Ug
R0RLX0lTT19FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgICAgIGNhc2Ug
R0RLX1JldHVybjoKKyAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4g
a2V5CisKKyAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5CisgICAgICAgICAg
ICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKKworICAgICAgICBjYXNlIEdES19NZW51Ogor
ICAgICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5h
dHVyYWwga2V5Ym9hcmQpCisKKyAgICAgICAgICAgIC8vIFZLX01FTlUgKDEyKSBBTFQga2V5CisK
KyAgICAgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8v
ICgxMykgUEFVU0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKKyAgICAgICAgICAg
IHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICAgICAgY2FzZSBH
REtfS2FuYV9Mb2NrOgorICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0OgorICAgICAgICAgICAg
cmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1v
ZGUKKyAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdV
TDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgICAgICAgICAvLyBWS19K
VU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElN
RSBmaW5hbCBtb2RlCisgICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKKyAgICAgICAgICAg
IHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQorICAgICAgICBjYXNlIEdE
S19LYW5qaToKKyAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2Fuamkg
bW9kZQorICAgICAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgICAgICByZXR1cm4gVktfRVND
QVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUg
Y29udmVydAorICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0
CisgICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0CisgICAgICAgICAgICAv
LyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKKyAgICAgICAgY2Fz
ZSBHREtfc3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VC
QVIKKyAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUklP
UjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246CisgICAg
ICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgICAgIGNh
c2UgR0RLX0VuZDoKKyAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQor
ICAgICAgICBjYXNlIEdES19Ib21lOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgy
NCkgSE9NRSBrZXkKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBW
S19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgICAgICBjYXNl
IEdES19SaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBB
UlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19E
T1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQorICAgICAgICBj
YXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVybiBWS19TTkFQU0hPVDsgLy8gKDJDKSBQ
UklOVCBTQ1JFRU4ga2V5CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5CisgICAgICAgIGNhc2UgR0RLX0lu
c2VydDoKKyAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgorICAgICAgICAgICAgcmV0dXJuIFZL
X0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKKyAgICAg
ICAgY2FzZSBHREtfS1BfRGVsZXRlOgorICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8g
KDJFKSBERUwga2V5CisgICAgICAgIGNhc2UgR0RLX0hlbHA6CisgICAgICAgICAgICByZXR1cm4g
VktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgICAgICBjYXNlIEdES18wOgorICAgICAgICBj
YXNlIEdES19wYXJlbnJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzAp
IDApIGtleQorICAgICAgICBjYXNlIEdES18xOgorICAgICAgICBjYXNlIEdES19leGNsYW06Cisg
ICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQorICAgICAgICBjYXNlIEdE
S18yOgorICAgICAgICBjYXNlIEdES19hdDoKKyAgICAgICAgICAgIHJldHVybiBWS18yOyAvLyAg
KDMyKSAyICYga2V5CisgICAgICAgIGNhc2UgR0RLXzM6CisgICAgICAgIGNhc2UgR0RLX251bWJl
cnNpZ246CisgICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2FzZSAnIyc7Cisg
ICAgICAgIGNhc2UgR0RLXzQ6CisgICAgICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBr
ZXkgJyQnOworICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgICAgIGNhc2UgR0RLXzU6Cisg
ICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6CisgICAgICAgICAgICByZXR1cm4gVktfNTsgLy8gICgz
NSkgNSBrZXkgICclJworICAgICAgICBjYXNlIEdES182OgorICAgICAgICBjYXNlIEdES19hc2Np
aWNpcmN1bToKKyAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2IGtleSAgJ14nCisg
ICAgICAgIGNhc2UgR0RLXzc6CisgICAgICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoKKyAgICAgICAg
ICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAgICAgICAgY2FzZSBH
REtfODoKKyAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAgICAgICAgICByZXR1cm4gVktf
ODsgLy8gICgzOCkgOCBrZXkgICcqJworICAgICAgICBjYXNlIEdES185OgorICAgICAgICBjYXNl
IEdES19wYXJlbmxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkg
JygnCisgICAgICAgIGNhc2UgR0RLX2E6CisgICAgICAgIGNhc2UgR0RLX0E6CisgICAgICAgICAg
ICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4g
MHg0MTsKKyAgICAgICAgY2FzZSBHREtfYjoKKyAgICAgICAgY2FzZSBHREtfQjoKKyAgICAgICAg
ICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2FzZSAnQic6IHJldHVy
biAweDQyOworICAgICAgICBjYXNlIEdES19jOgorICAgICAgICBjYXNlIEdES19DOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0
dXJuIDB4NDM7CisgICAgICAgIGNhc2UgR0RLX2Q6CisgICAgICAgIGNhc2UgR0RLX0Q6CisgICAg
ICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiBy
ZXR1cm4gMHg0NDsKKyAgICAgICAgY2FzZSBHREtfZToKKyAgICAgICAgY2FzZSBHREtfRToKKyAg
ICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6
IHJldHVybiAweDQ1OworICAgICAgICBjYXNlIEdES19mOgorICAgICAgICBjYXNlIEdES19GOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5IGNhc2UgJ2YnOiBjYXNlICdG
JzogcmV0dXJuIDB4NDY7CisgICAgICAgIGNhc2UgR0RLX2c6CisgICAgICAgIGNhc2UgR0RLX0c6
CisgICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2FzZSAnZyc6IGNhc2Ug
J0cnOiByZXR1cm4gMHg0NzsKKyAgICAgICAgY2FzZSBHREtfaDoKKyAgICAgICAgY2FzZSBHREtf
SDoKKyAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2Fz
ZSAnSCc6IHJldHVybiAweDQ4OworICAgICAgICBjYXNlIEdES19pOgorICAgICAgICBjYXNlIEdE
S19JOgorICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBj
YXNlICdJJzogcmV0dXJuIDB4NDk7CisgICAgICAgIGNhc2UgR0RLX2o6CisgICAgICAgIGNhc2Ug
R0RLX0o6CisgICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6
IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKKyAgICAgICAgY2FzZSBHREtfazoKKyAgICAgICAgY2Fz
ZSBHREtfSzoKKyAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAgKDRCKSBLIGtleSBjYXNlICdr
JzogY2FzZSAnSyc6IHJldHVybiAweDRCOworICAgICAgICBjYXNlIEdES19sOgorICAgICAgICBj
YXNlIEdES19MOgorICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNhc2Ug
J2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAgICAgIGNhc2UgR0RLX206CisgICAgICAg
IGNhc2UgR0RLX006CisgICAgICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2Fz
ZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKKyAgICAgICAgY2FzZSBHREtfbjoKKyAgICAg
ICAgY2FzZSBHREtfTjoKKyAgICAgICAgICAgIHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBj
YXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOworICAgICAgICBjYXNlIEdES19vOgorICAg
ICAgICBjYXNlIEdES19POgorICAgICAgICAgICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5
IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7CisgICAgICAgIGNhc2UgR0RLX3A6Cisg
ICAgICAgIGNhc2UgR0RLX1A6CisgICAgICAgICAgICByZXR1cm4gVktfUDsgLy8gICg1MCkgUCBr
ZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKKyAgICAgICAgY2FzZSBHREtfcToK
KyAgICAgICAgY2FzZSBHREtfUToKKyAgICAgICAgICAgIHJldHVybiBWS19ROyAvLyAgKDUxKSBR
IGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOworICAgICAgICBjYXNlIEdES19y
OgorICAgICAgICBjYXNlIEdES19SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIp
IFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7CisgICAgICAgIGNhc2UgR0RL
X3M6CisgICAgICAgIGNhc2UgR0RLX1M6CisgICAgICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1
MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKKyAgICAgICAgY2FzZSBH
REtfdDoKKyAgICAgICAgY2FzZSBHREtfVDoKKyAgICAgICAgICAgIHJldHVybiBWS19UOyAvLyAg
KDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAweDU0OworICAgICAgICBjYXNl
IEdES191OgorICAgICAgICBjYXNlIEdES19VOgorICAgICAgICAgICAgcmV0dXJuIFZLX1U7IC8v
ICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7CisgICAgICAgIGNh
c2UgR0RLX3Y6CisgICAgICAgIGNhc2UgR0RLX1Y6CisgICAgICAgICAgICByZXR1cm4gVktfVjsg
Ly8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKKyAgICAgICAg
Y2FzZSBHREtfdzoKKyAgICAgICAgY2FzZSBHREtfVzoKKyAgICAgICAgICAgIHJldHVybiBWS19X
OyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAweDU3OworICAgICAg
ICBjYXNlIEdES194OgorICAgICAgICBjYXNlIEdES19YOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJuIDB4NTg7CisgICAg
ICAgIGNhc2UgR0RLX3k6CisgICAgICAgIGNhc2UgR0RLX1k6CisgICAgICAgICAgICByZXR1cm4g
VktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1cm4gMHg1OTsKKyAg
ICAgICAgY2FzZSBHREtfejoKKyAgICAgICAgY2FzZSBHREtfWjoKKyAgICAgICAgICAgIHJldHVy
biBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJldHVybiAweDVBOwor
ICAgICAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8g
KDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICAg
ICAgY2FzZSBHREtfTWV0YV9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1Qykg
UmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgICAgICAvLyBWS19T
TEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAgICAgLy8gVktfU0VQQVJBVE9S
ICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0
cmFjdCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAg
ICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAgICAgICAgICAgLy8gaGFu
ZGxlZCBieSBrZXkgY29kZSBhYm92ZQorCisgICAgICAgIGNhc2UgR0RLX051bV9Mb2NrOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sga2V5CisKKyAgICAg
ICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgICAgICByZXR1cm4gVktfU0NST0xMOyAv
LyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAgIGNhc2UgR0RLX1NoaWZ0X0w6CisgICAg
ICAgICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQgU0hJRlQga2V5CisgICAgICAg
IGNhc2UgR0RLX1NoaWZ0X1I6CisgICAgICAgICAgICByZXR1cm4gVktfUlNISUZUOyAvLyAoQTEp
IFJpZ2h0IFNISUZUIGtleQorICAgICAgICBjYXNlIEdES19Db250cm9sX0w6CisgICAgICAgICAg
ICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05UUk9MIGtleQorICAgICAgICBj
YXNlIEdES19Db250cm9sX1I6CisgICAgICAgICAgICByZXR1cm4gVktfUkNPTlRST0w7IC8vIChB
MykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6CisgICAgICAgICAg
ICByZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtleQorICAgICAgICBjYXNlIEdE
S19BbHRfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1KSBSaWdodCBNRU5V
IGtleQorCisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAv
WFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAo
QTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtleQorICAgICAgICAgICAgLy8g
VktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gg
a2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkg
V2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JS
T1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBr
ZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDog
QnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKKyAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9NVVRF
IChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKKyAgICAgICAgICAgIC8vIFZL
X1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKKyAgICAg
ICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtl
eQorICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9Y
UDogTmV4dCBUcmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIx
KSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorICAgICAgICAgICAgLy8gVktf
TUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBNZWRpYSBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1
c2UgTWVkaWEga2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3Mg
MjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9NRURJQV9T
RUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAgICAgICAgICAg
IC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlv
biAxIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAv
WFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisKKyAgICAgICAgICAgIC8vIFZLX09FTV8xIChC
QSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
Jzs6JyBrZXkKKyAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgorICAgICAgICBjYXNlIEdES19j
b2xvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAnOic6
IHJldHVybiAweEJBOworICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIw
MDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgICAgIGNhc2Ug
R0RLX3BsdXM6CisgICAgICAgIGNhc2UgR0RLX2VxdWFsOgorICAgICAgICAgICAgcmV0dXJuIFZL
X09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7CisgICAgICAgICAg
ICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9y
ZWdpb24sIHRoZSAnLCcga2V5CisgICAgICAgIGNhc2UgR0RLX2NvbW1hOgorICAgICAgICBjYXNl
IEdES19sZXNzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsgLy9jYXNlICcsJzog
Y2FzZSAnPCc6IHJldHVybiAweEJDOworICAgICAgICAgICAgLy8gVktfT0VNX01JTlVTIChCRCkg
V2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQorICAg
ICAgICBjYXNlIEdES19taW51czoKKyAgICAgICAgY2FzZSBHREtfdW5kZXJzY29yZToKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4g
MHhCRDsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6
IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAgICAgIGNhc2UgR0RLX3Bl
cmlvZDoKKyAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKKyAgICAgICAgICAgIHJldHVybiBWS19P
RU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7CisgICAgICAgICAg
ICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICcvPycga2V5CisgICAgICAgIGNhc2UgR0RLX3NsYXNoOgorICAgICAg
ICBjYXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMjsgLy9jYXNl
ICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgICAgICAgICAgLy8gVktfT0VNXzMgKEMw
KSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJv
YXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAn
YH4nIGtleQorICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgorICAgICAgICBjYXNlIEdES19x
dW90ZWxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2FzZSAnYCc6IGNhc2Ug
J34nOiByZXR1cm4gMHhDMDsKKyAgICAgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAg
ICAgICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6CisgICAgICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoK
KyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAneyc6IHJldHVy
biAweERCOworICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5l
b3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6
IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgICAgICBjYXNl
IEdES19iYWNrc2xhc2g6CisgICAgICAgIGNhc2UgR0RLX2JhcjoKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhEQzsKKyAgICAgICAg
ICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKKyAgICAgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0
OgorICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX09F
TV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOworICAgICAgICAgICAgLy8g
VktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2
YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5
Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5CisgICAgICAgIGNhc2Ug
R0RLX3F1b3RlcmlnaHQ6CisgICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgorICAgICAgICAgICAg
cmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKKyAg
ICAgICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KKyAgICAgICAgICAgIC8vIFZLX09FTV8xMDIg
KEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhl
IGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICAgICAgICAgIC8v
IFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2lu
ZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAgICAgIC8vIFZLX1BBQ0tFVCAo
RTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBp
ZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3Jk
IG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1
dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVU
LFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCisgICAgICAgICAgICAvLyBWS19B
VFROIChGNikgQXR0biBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5
CisgICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQorICAgICAgICAgICAgLy8g
VktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5CisgICAgICAgICAgICAvLyBWS19QTEFZIChGQSkg
UGxheSBrZXkKKyAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQorICAgICAgICAg
ICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICAgICAgICAg
IC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAgICAgICAgICAgIC8vIFZLX09FTV9DTEVBUiAoRkUp
IENsZWFyIGtleQorICAgICAgICBjYXNlIEdES19GMToKKyAgICAgICAgY2FzZSBHREtfRjI6Cisg
ICAgICAgIGNhc2UgR0RLX0YzOgorICAgICAgICBjYXNlIEdES19GNDoKKyAgICAgICAgY2FzZSBH
REtfRjU6CisgICAgICAgIGNhc2UgR0RLX0Y2OgorICAgICAgICBjYXNlIEdES19GNzoKKyAgICAg
ICAgY2FzZSBHREtfRjg6CisgICAgICAgIGNhc2UgR0RLX0Y5OgorICAgICAgICBjYXNlIEdES19G
MTA6CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgY2FzZSBHREtfRjEyOgorICAgICAg
ICBjYXNlIEdES19GMTM6CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgY2FzZSBHREtf
RjE1OgorICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgIGNhc2UgR0RLX0YxNzoKKyAgICAg
ICAgY2FzZSBHREtfRjE4OgorICAgICAgICBjYXNlIEdES19GMTk6CisgICAgICAgIGNhc2UgR0RL
X0YyMDoKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICBjYXNlIEdES19GMjI6CisgICAg
ICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgY2FzZSBHREtfRjI0OgorICAgICAgICAgICAgcmV0
dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOworICAgICAgICBjYXNlIEdES19LRVlfVm9p
ZFN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNTS0VZOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9CisKK1N0cmluZyBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCB2YWwpCit7Cisg
ICAgc3dpdGNoICh2YWwpIHsKKyAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgICAgICBj
YXNlIEdES19LUF9FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygiXHIiKTsKKyAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygiXHg4Iik7CisgICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoIlx0Iik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7CisgICAgICAgICAgICBn
bG9uZyBud2M7CisgICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBnX3VjczRfdG9fdXRm
MTYoJmMsIDEsIDAsICZud2MsIDApOworCisgICAgICAgICAgICBTdHJpbmcgcmV0VmFsOworICAg
ICAgICAgICAgaWYgKHVjaGFyMTYpCisgICAgICAgICAgICAgICAgcmV0VmFsID0gU3RyaW5nKChV
Q2hhciopdWNoYXIxNiwgbndjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXRWYWwgPSBTdHJpbmcoKTsKKworICAgICAgICAgICAgZ19mcmVlKHVjaGFyMTYpOworCisgICAg
ICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6
OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAg
IHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpL
ZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50
OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQor
eworICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOworICAgIGlmIChldmVudC0+c3RhdGUg
JiBHREtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdES18zMjcwX0JhY2tUYWIpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoZXZl
bnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRm
b3JtRXZlbnQ6OkN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0sp
CisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CisgICAgaWYgKGV2
ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9y
bUV2ZW50OjpNZXRhS2V5OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUV2ZW50OjpN
b2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKKy8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhl
IG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycworUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25zdCBDb21wb3Np
dGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKKyAgICA6IFBsYXRmb3JtRXZlbnQoZXZl
bnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtLZXlFdmVudChldmVu
dCksIGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX3RleHQoY29tcG9zaXRpb25SZXN1bHRzLnNpbXBs
ZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcgOiBzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX3VubW9kaWZpZWRUZXh0
KG1fdGV4dCkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29k
ZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NL
ZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fbmF0aXZlVmlydHVh
bEtleUNvZGUoZXZlbnQtPmtleXZhbCkKKyAgICAsIG1fbWFjQ2hhckNvZGUoMCkKKyAgICAsIG1f
YXV0b1JlcGVhdChmYWxzZSkKKyAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtleXZhbCA+PSBHREtf
S1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkKKyAgICAsIG1faXNTeXN0ZW1L
ZXkoZmFsc2UpCisgICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQorICAgICwgbV9jb21wb3NpdGlv
blJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQoreworICAgIC8vIFRvIG1hdGNoIHRoZSBiZWhh
dmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMgdGhhdCB0cmlnZ2Vy
ZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KKyAgICBpZiAoY29tcG9zaXRpb25SZXN1bHRzLmNvbXBv
c2l0aW9uVXBkYXRlZCgpKQorICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IFZLX1BS
T0NFU1NLRVk7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVL
ZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCit7
CisgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24g
b3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBtX3R5cGUgPSB0eXBlOworCisgICAg
aWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKKyAgICAgICAgbV90ZXh0ID0g
U3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBvc2l0aW9uUmVzdWx0
cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkgeworICAgICAgICAvLyBIYXZpbmcgZW1wdHkgdGV4dCwg
cHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlwcmVzcykgZXZlbnQKKyAgICAg
ICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQgdHJpZ2dlciBjb21wb3NpdGlv
biBldmVudHMgc2hvdWxkIG5vdAorICAgICAgICAvLyBmaXJlIGtleXByZXNzLgorICAgICAgICBt
X3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAg
ICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQorfQorCitib29sIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAgIHJldHVybiBnZGtf
a2V5bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKGJv
b2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFLZXkp
Cit7CisgICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOworICAgIGd0a19nZXRfY3VycmVudF9ldmVu
dF9zdGF0ZSgmc3RhdGUpOworCisgICAgc2hpZnRLZXkgPSBzdGF0ZSAmIEdES19TSElGVF9NQVNL
OworICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAgYWx0S2V5ID0g
c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1ldGFLZXkgPSBzdGF0ZSAmIEdES19NRVRBX01B
U0s7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3Vz
ZUV2ZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNDEwMWMxZmEzZDcyODY2Y2JjOTUzZjg0YjU3Mjg1OTM3ZjMyMTNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZl
bnRHdGsuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBt
b2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KKwor
Ly8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3Ry
dWN0b3JzCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudEJ1
dHRvbiogZXZlbnQpCit7CisgICAgbV90aW1lc3RhbXAgPSBldmVudC0+dGltZTsKKyAgICBtX3Bv
c2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eCwgKGludClldmVudC0+eSk7CisgICAgbV9n
bG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+
eV9yb290KTsKKworICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYg
R0RLX1NISUZUX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlm
IChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8
PSBDdHJsS2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQorICAgICAg
ICBtX21vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRB
X01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7CisKKyAgICBzd2l0Y2ggKGV2
ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJC
VVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19C
VVRUT05fUkVMRUFTRToKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVz
c2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7Cisg
ICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOworICAgICAg
ICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9
PSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKKyAgICAg
ICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCisgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAyOworICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtf
M0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7CisKKyAgICAgICAg
aWYgKGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRv
bjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgbV9i
dXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0g
MykKKyAgICAgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30K
KworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24q
IG1vdGlvbikKK3sKKyAgICBtX3RpbWVzdGFtcCA9IG1vdGlvbi0+dGltZTsKKyAgICBtX3Bvc2l0
aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKKyAgICBtX2ds
b2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24t
Pnlfcm9vdCk7CisKKyAgICBtX21vZGlmaWVycyA9IDA7CisgICAgaWYgKG1vdGlvbi0+c3RhdGUg
JiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAg
aWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtX21vZGlmaWVy
cyB8PSBDdHJsS2V5OworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAg
ICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5OworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RL
X01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKKworICAgIHN3aXRj
aCAobW90aW9uLT50eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAg
bV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBO
b0J1dHRvbjsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIGlm
IChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAgbV9idXR0b24gPSBM
ZWZ0QnV0dG9uOworICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQlVUVE9OMl9NQVNL
KQorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAgICBlbHNlIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRv
bjsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5H
dGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBjNWY5MTZjOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCkBAIC0w
LDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3Rp
YW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgR3RrV2lkZ2V0
KiBnZXRUb3BsZXZlbChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxl
dmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsKKyAgICByZXR1cm4gZ3RrX3dp
ZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgPyB0b3BsZXZlbCA6IDA7Cit9CisKK3N0YXRpYyBH
ZGtWaXN1YWwqIGdldFZpc3VhbChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIGNv
bnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoIWNvbnRhaW5lcikgeworICAg
ICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICAg
ICAgcmV0dXJuIHNjcmVlbiA/IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKSA6
IDA7CisgICAgfQorCisgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9yZWFsaXplZChjb250YWluZXIp
KQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOworICAgIHJldHVy
biBjb250YWluZXIgPyBnZGtfd2luZG93X2dldF92aXN1YWwoZ3RrX3dpZGdldF9nZXRfd2luZG93
KGNvbnRhaW5lcikpIDogMDsKK30KKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQor
eworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdpZGdldCk7CisgICAgaWYgKCF2
aXN1YWwpCisgICAgICAgIHJldHVybiAyNDsKKyAgICByZXR1cm4gZ2RrX3Zpc3VhbF9nZXRfZGVw
dGgodmlzdWFsKTsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lk
Z2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdpZGdldCk7CisgICAg
aWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiA4OworCisgICAgcmV0dXJuIGdka192aXN1YWxf
Z2V0X2JpdHNfcGVyX3JnYih2aXN1YWwpOworfQorCitib29sIHNjcmVlbklzTW9ub2Nocm9tZShX
aWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4gc2NyZWVuRGVwdGgod2lkZ2V0KSA8IDI7Cit9
CisKKworc3RhdGljIEdka1NjcmVlbiogZ2V0U2NyZWVuKEd0a1dpZGdldCogd2lkZ2V0KQorewor
ICAgIHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0KSA/IGd0a193aWRnZXRfZ2V0
X3NjcmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworfQorCitGbG9hdFJl
Y3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIGNvbnRhaW5l
ciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoY29udGFpbmVyKQorICAgICAgICBjb250
YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOworCisgICAgR2RrU2NyZWVuKiBzY3JlZW4g
PSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1
bHQoKTsKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisg
ICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93
aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOworCisg
ICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OworICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2Vv
bWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0cnkpOworCisgICAgcmV0dXJuIEZsb2F0UmVj
dChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0
KTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7
CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBHVEtfV0lER0VUKHdpZGdldC0+
cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSA6IDA7CisgICAgaWYg
KGNvbnRhaW5lciAmJiAhZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQoY29udGFpbmVyKSkKKyAgICAg
ICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKKworICAgIEdka1NjcmVlbiogc2NyZWVuID0g
Y29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0
KCk7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2lu
ZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKKworICAg
IEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmth
cmVhKHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVhKTsKKworICAgIHJldHVybiBGbG9hdFJlY3Qo
d29ya0FyZWEueCwgd29ya0FyZWEueSwgd29ya0FyZWEud2lkdGgsIHdvcmtBcmVhLmhlaWdodCk7
CisKK30KKwordm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQcm9maWxlJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTIwYmY5
YTg5ZDc2ZDA1ZjUyOGVkMzQ5ZGUwNTM2NzI3MTJkZjhhNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcApAQCAtMCwwICsxLDk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25z
dHJ1Y3RvcnMKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVsdGEgPSAxOworCisg
ICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAgbV90aW1lc3RhbXAgPSBjdXJy
ZW50VGltZSgpOworCisgICAgbV9tb2RpZmllcnMgPSAwOworICAgIGlmIChldmVudC0+c3RhdGUg
JiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAg
aWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJz
IHw9IEN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAg
ICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01F
VEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKKworICAgIG1fZGVsdGFY
ID0gMDsKKyAgICBtX2RlbHRhWSA9IDA7CisKKyAgICAvLyBEb2NzIHNheSBhbiB1cHdhcmRzIHNj
cm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMgYSBwb3NpdGl2ZSBkZWx0YQorICAgIHN3aXRj
aCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEdES19TQ1JPTExfVVA6CisgICAg
ICAgICAgICBtX2RlbHRhWSA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR0RLX1NDUk9MTF9ET1dOOgorICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGE7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6CisgICAgICAgICAg
ICBtX2RlbHRhWCA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0RL
X1NDUk9MTF9SSUdIVDoKKyAgICAgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhOworICAgICAgICAg
ICAgYnJlYWs7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCisgICAgICAgIGNhc2Ug
R0RLX1NDUk9MTF9TTU9PVEg6IHsKKyAgICAgICAgICAgICAgICBnZG91YmxlIGRlbHRhWCwgZGVs
dGFZOworICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmZGVsdGFYLCAmZGVsdGFZKTsKKyAgICAgICAg
ICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YVg7CisgICAgICAgICAgICAgICAgbV9kZWx0YVkgPSAt
ZGVsdGFZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9
CisgICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOworICAgIG1fd2hlZWxUaWNrc1kgPSBtX2Rl
bHRhWTsKKworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50
LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkpOworICAgIG1fZ2xvYmFsUG9zaXRpb24g
PSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpLCBzdGF0aWNfY2FzdDxp
bnQ+KGV2ZW50LT55X3Jvb3QpKTsKKyAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdo
ZWVsRXZlbnQ7CisgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBmYWxzZTsKKwor
ICAgIC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0aGUgbnVtYmVyIG9m
IGxpbmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50CisgICAgbV9kZWx0YVggKj0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgbV9k
ZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
ZjUxN2IwMWVjNTI5YzVkZmE1MDJiN2FhNTBiN2VmODA0ODBlNmZjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRp
b24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQb3B1cE1lbnVHdGsuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdWludDMy
X3QgZ1NlYXJjaFRpbWVvdXRNcyA9IDEwMDA7CisKK1BvcHVwTWVudUd0azo6UG9wdXBNZW51R3Rr
KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCit7
Cit9CisKK1BvcHVwTWVudUd0azo6flBvcHVwTWVudUd0aygpCit7CisgICAgaWYgKG1fcG9wdXAp
IHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fcG9wdXAt
PnBsYXRmb3JtTWVudSgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
KyAgICAgICAgaGlkZSgpOworICAgIH0KK30KKworR3RrQWN0aW9uKiBQb3B1cE1lbnVHdGs6OmNy
ZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGludCBpdGVtSW5kZXgpCit7CisgICAgR093blB0cjxj
aGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigicG9wdXAtbWVudS1hY3Rpb24tJWQiLCBp
dGVtSW5kZXgpKTsKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3Rpb25fbmV3KGFjdGlv
bk5hbWUuZ2V0KCksIGNsaWVudCgpLT5pdGVtVGV4dChpdGVtSW5kZXgpLnV0ZjgoKS5kYXRhKCks
IGNsaWVudCgpLT5pdGVtVG9vbFRpcChpdGVtSW5kZXgpLnV0ZjgoKS5kYXRhKCksIDApOworICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksICJwb3B1cC1tZW51LWFjdGlvbi1p
bmRleCIsIEdJTlRfVE9fUE9JTlRFUihpdGVtSW5kZXgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhtZW51SXRlbUFjdGl2YXRlZCksIHRoaXMp
OworICAgIC8vIEZJWE1FOiBBcHBseSB0aGUgUG9wdXBNZW51U3R5bGUgZnJvbSBjbGllbnQoKS0+
aXRlbVN0eWxlKGkpCisgICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sICFjbGllbnQo
KS0+aXRlbVN0eWxlKGl0ZW1JbmRleCkuaXNEaXNwbGF5Tm9uZSgpKTsKKyAgICBndGtfYWN0aW9u
X3NldF9zZW5zaXRpdmUoYWN0aW9uLCBjbGllbnQoKS0+aXRlbUlzRW5hYmxlZChpdGVtSW5kZXgp
KTsKKworICAgIHJldHVybiBhY3Rpb247Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjpzaG93KGNv
bnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQoreworICAgIEFT
U0VSVChjbGllbnQoKSk7CisKKyAgICBpZiAoIW1fcG9wdXApIHsKKyAgICAgICAgbV9wb3B1cCA9
IEd0a1BvcHVwTWVudTo6Y3JlYXRlKCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1
cC0+cGxhdGZvcm1NZW51KCksICJ1bm1hcCIsIEdfQ0FMTEJBQ0soUG9wdXBNZW51R3RrOjptZW51
VW5tYXBwZWQpLCB0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wb3B1cC0+Y2xlYXIoKTsK
KworICAgIGNvbnN0IGludCBzaXplID0gY2xpZW50KCktPmxpc3RTaXplKCk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKGNsaWVudCgpLT5pdGVtSXNT
ZXBhcmF0b3IoaSkpCisgICAgICAgICAgICBtX3BvcHVwLT5hcHBlbmRTZXBhcmF0b3IoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9uID0gYWRv
cHRHUmVmKGNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGkpKTsKKyAgICAgICAgICAgIG1fcG9w
dXAtPmFwcGVuZEl0ZW0oYWN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElu
dFBvaW50IG1lbnVQb3NpdGlvbiA9IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQoR1RL
X1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwgdmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBtZW51UG9zaXRpb24ubW92
ZSgwLCByZWN0LmhlaWdodCgpKTsKKworICAgIG1fcG9wdXAtPnBvcFVwKHJlY3Quc2l6ZSgpLCBt
ZW51UG9zaXRpb24sIHNpemUsIGluZGV4LCBndGtfZ2V0X2N1cnJlbnRfZXZlbnQoKSk7CisKKyAg
ICAvLyBHVEsgY2FuIHJlZnVzZSB0byBhY3R1YWxseSBvcGVuIHRoZSBtZW51IHdoZW4gbW91c2Ug
Z3JhYnMgZmFpbHMuCisgICAgLy8gRW5zdXJlIFdlYkNvcmUgZG9lcyBub3QgZ28gaW50byBzb21l
IHBlc2t5IHN0YXRlLgorICAgIGlmICghZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShtX3BvcHVwLT5w
bGF0Zm9ybU1lbnUoKSkpCisgICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhpZGUoKTsKK30KKwor
dm9pZCBQb3B1cE1lbnVHdGs6OmhpZGUoKQoreworICAgIEFTU0VSVChtX3BvcHVwKTsKKyAgICBt
X3BvcHVwLT5wb3BEb3duKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjp1cGRhdGVGcm9tRWxl
bWVudCgpCit7CisgICAgY2xpZW50KCktPnNldFRleHRGcm9tSXRlbShjbGllbnQoKS0+c2VsZWN0
ZWRJbmRleCgpKTsKK30KKwordm9pZCBQb3B1cE1lbnVHdGs6OmRpc2Nvbm5lY3RDbGllbnQoKQor
eworICAgIG1fcG9wdXBDbGllbnQgPSAwOworfQorCit2b2lkIFBvcHVwTWVudUd0azo6bWVudUl0
ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIFBvcHVwTWVudUd0ayogdGhhdCkKK3sKKyAg
ICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOworICAgIHRoYXQtPmNsaWVudCgpLT52YWx1ZUNoYW5n
ZWQoR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksICJw
b3B1cC1tZW51LWFjdGlvbi1pbmRleCIpKSk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjptZW51
VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51R3RrKiB0aGF0KQoreworICAgIEFTU0VSVCh0
aGF0LT5jbGllbnQoKSk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlkSGlkZSgpOworfQor
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkODExZmJmNWZl
MzlmN2Q0ZjRjMmMyY2IwYjgwMzUyYTZkOTA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFBvcHVwTWVudUd0a19oCisjZGVmaW5lIFBvcHVwTWVudUd0a19oCisKKyNp
bmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
UG9wdXBNZW51LmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBQ
b3B1cE1lbnVHdGsgOiBwdWJsaWMgUG9wdXBNZW51IHsKK3B1YmxpYzoKKyAgICBQb3B1cE1lbnVH
dGsoUG9wdXBNZW51Q2xpZW50Kik7CisgICAgflBvcHVwTWVudUd0aygpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCBpbmRleCk7CisgICAg
dmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVudCgpOworCitwcml2YXRlOgorICAg
IFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cENsaWVudDsg
fQorICAgIEd0a0FjdGlvbiogY3JlYXRlR3RrQWN0aW9uRm9yTWVudUl0ZW0oaW50IGl0ZW1JbmRl
eCk7CisKKyAgICBzdGF0aWMgdm9pZCBtZW51VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51
R3RrKik7CisgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiwgUG9w
dXBNZW51R3RrKik7CisKKyAgICBQb3B1cE1lbnVDbGllbnQqIG1fcG9wdXBDbGllbnQ7CisgICAg
T3duUHRyPEd0a1BvcHVwTWVudT4gbV9wb3B1cDsKK307CisKK30KKworI2VuZGlmIC8vIFBvcHVw
TWVudUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0NTI1OGYzNmFjZjc0MzczZGYxMDAyNmZkOGM5ODk0
NjBmZjZjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
aCIKKworI2lmIFVTRShHTFgpCisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRl
Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2luY2x1ZGUgPGNhaXJv
LXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdyo+IFdpbmRvd0hhc2hNYXA7CitzdGF0aWMgV2luZG93SGFzaE1hcCYgZ2V0V2luZG93SGFz
aE1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFwLCB3aW5kb3dI
YXNoTWFwLCAoKSk7CisgICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Cit9CisKK3N0YXRpYyBpbnQg
Z0RhbWFnZUV2ZW50QmFzZTsKK3N0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2
ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQsIHZvaWQqKQoreworICAg
IFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50KTsKKyAgICBp
ZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQorICAg
ICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAgIFhEYW1hZ2VOb3RpZnlFdmVu
dCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+KHhF
dmVudCk7CisgICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdpbmRvd0hhc2hN
YXAoKTsKKyAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93SGFzaE1hcC5maW5k
KGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7CisgICAgaWYgKGkgPT0gd2luZG93SGFzaE1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAgICBpLT52YWx1ZS0+
Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7CisgICAgWERhbWFnZVN1YnRyYWN0KEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VFdmVudC0+ZGFt
YWdlLCBOb25lLCBOb25lKTsKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Cit9CisKK3N0
YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQoreworICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9
IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gaGFzRXh0ZW5z
aW9uczsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGludCBlcnJvckJhc2U7Cisg
ICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCkpOworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZn
RGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihkaXNw
bGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCisgICAgaW50
IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpv
ciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+
IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
R0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKK3sKKyAgICByZXR1cm4gc3VwcG9ydHNYRGFt
YWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93KHNpemUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKK30KKworUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNp
emUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwgbV9waXhtYXAo
MCkKKyAgICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKKyAgICAsIG1fc3VyZmFjZSgw
KQorICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQorICAgICwgbV9kYW1h
Z2UoMCkKKyAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKKyAgICAsIG1fZGFtYWdlTm90
aWZ5RGF0YSgwKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBTY3JlZW4qIHNjcmVlbiA9IERlZmF1
bHRTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSk7CisKKyAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNv
ZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRf
c3VyZmFjZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0
ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAg
bV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisgICAgICAgIFJvb3RXaW5k
b3dPZlNjcmVlbihzY3JlZW4pLAorICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAw
LCAxLCAxLAorICAgICAgICAwLAorICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgSW5w
dXRPdXRwdXQsCisgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICBDV092ZXJyaWRlUmVk
aXJlY3QsCisgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3Bs
YXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9
IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRp
cmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5k
b3cpOworCisgICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdk
a193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZp
bHRlclhEYW1hZ2VFdmVudCksIDApOworICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5k
b3csIHRoaXMpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50IGV2ZW50OworICAg
ICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ss
ICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54
bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBY
U2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKKyAgICBYQ29tcG9z
aXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0TWFu
dWFsKTsKKyAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3csIFhE
YW1hZ2VSZXBvcnROb25FbXB0eSk7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQoreworICAgIEFTU0VSVChtX2RhbWFnZSk7Cisg
ICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOworCisgICAg
Z2V0V2luZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7CisgICAgaWYgKGdldFdpbmRvd0hh
c2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcigwLCBy
ZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwor
CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCkpOworICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsK
KyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgWERlc3Ryb3lXaW5k
b3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOworICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExB
WV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBYUmVzaXplV2luZG93
KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAg
WEZsdXNoKGRpc3BsYXkpOworCisgICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29u
dGV4dCkgeworICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKKyAgICAgICAgLy8gVGhp
cyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJv
dW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCisgICAgICAgIC8vIHdoZXJlIGEgc3dhcCBp
cyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBwcm9w
ZXJseSByZXNpemVkLgorICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4dDo6Z2V0Q3Vy
cmVudCgpKQorICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOworICAgIH0KKwor
ICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gdHJ1
ZTsKK30KKworR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y29udGV4dCgp
Cit7CisgICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCk7CisKKyAg
ICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAg
QVNTRVJUKG1fd2luZG93KTsKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRl
eHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAg
cmV0dXJuIG1fY29udGV4dC5nZXQoKTsKK30KKwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQoreworICAgIGlmICghbV9waXht
YXApCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFj
ZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7CisgICAgbV9waXhtYXAg
PSAwOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1
cmZhY2UpCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CisKKyAgICBtX25lZWRzTmV3
UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQg
dGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBh
cyB0aGUgdGFyZ2V0CisgICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUg
MTAweCBzbG93ZXIuCisgICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZ
X1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7CisgICAgUGl4bWFwIG5l
d1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1f
d2luZG93KTsKKyAgICBpZiAoIW5ld1BpeG1hcCkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBYV2luZG93
QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0
ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgeworICAg
ICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICBYRnJlZVBpeG1h
cChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAgLy8gTnZpZGlhIGRy
aXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3lu
Y2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8vIG9mIGEgc2Vjb25kIGFm
dGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBj
b25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNr
aW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5k
IHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUg
dG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdl
dCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsK
KyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJv
X3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3Vy
ZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1fc3VyZmFjZSA9IG5ld1N1
cmZhY2U7CisKKyAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworfQorCit2b2lkIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQoreworICAgIGlm
IChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQorICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNr
KG1fZGFtYWdlTm90aWZ5RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYyYTQ4YjJlYTVjNGFmNjYwMTQzN2Q5ZjVjOTIx
OGE2MjQ0MGQ5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5lICBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvd19oCisKKyNpZiBVU0UoR0xYKQorCisjaW5jbHVkZSAiR0xDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisKK3R5
cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93
OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKK3R5cGVkZWYgdm9pZCAoKkRhbWFnZU5v
dGlmeUNhbGxiYWNrKSh2b2lkKik7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworcHVibGljOgorICAgIGVudW0gR0xDb250ZXh0TmVl
ZGVkIHsgQ3JlYXRlR0xDb250ZXh0LCBEb05vdENyZWF0ZUdMQ29udGV4dCB9OworICAgIHN0YXRp
YyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50
U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCA9IENyZWF0ZUdMQ29udGV4dCk7CisgICAgdmlydHVhbCB+
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKTsKKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkg
eyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdT
aXplKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQoKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGNh
aXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqKTsKKyAgICBXaW5kb3cgd2luZG93SWQoKSB7
IHJldHVybiBtX3dpbmRvdzsgfQorICAgIHZvaWQgY2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7
CisKKyAgICB2b2lkIHNldERhbWFnZU5vdGlmeUNhbGxiYWNrKERhbWFnZU5vdGlmeUNhbGxiYWNr
IGNhbGxiYWNrLCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgbV9kYW1hZ2VOb3RpZnlDYWxs
YmFjayA9IGNhbGxiYWNrOworICAgICAgICBtX2RhbWFnZU5vdGlmeURhdGEgPSBkYXRhOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRT
aXplJiwgR0xDb250ZXh0TmVlZGVkKTsKKyAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCk7CisKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBXaW5kb3cgbV93aW5kb3c7Cisg
ICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBtX3BpeG1hcDsKKyAgICBHTENv
bnRleHROZWVkZWQgbV9uZWVkc0NvbnRleHQ7CisgICAgT3duUHRyPEdMQ29udGV4dD4gbV9jb250
ZXh0OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICB1bnNpZ25l
ZCBpbnQgbV9wZW5kaW5nUmVzaXplU291cmNlSWQ7CisgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFw
QWZ0ZXJSZXNpemU7CisKKyAgICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgRGFtYWdlTm90aWZ5Q2Fs
bGJhY2sgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjazsKKyAgICB2b2lkKiBtX2RhbWFnZU5vdGlmeURh
dGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR0xYKQor
CisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmYyNzI3ZWFlMmMxYWVlYzM3ZGE4YWE5
YjBiOWUwNGM2OWY5OGVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVHdGsuaCIKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2lu
Y2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVk
ZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1F
TlQpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFRoaXMgd291bGQgYmUgYSBzdGF0aWMgbWV0aG9kLCBleGNlcHQgdGhhdCBm
b3J3YXJkIGRlY2xhcmluZyBHVHlwZSBpcyB0cmlja3ksIHNpbmNlIGl0cworLy8gZGVmaW5pdGlv
biBkZXBlbmRzIG9uIGluY2x1ZGluZyBnbGliLmgsIG5lZ2F0aW5nIHRoZSBiZW5lZml0IG9mIHVz
aW5nIGEgZm9yd2FyZCBkZWNsYXJhdGlvbi4KK2V4dGVybiBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0
U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQg
ZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKTsKK2V4dGVybiBHUmVmUHRyPEdk
a1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5
cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIgKmZhbGxiYWNrU3Rv
Y2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwor
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKFZJREVPKQorc3RhdGlj
IEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoUmVuZGVy
T2JqZWN0KiBvKQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbWVk
aWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0hvc3QoKSA6IDA7CisgICAgaWYgKCFtZWRpYU5v
ZGUpCisgICAgICAgIG1lZGlhTm9kZSA9IG5vZGU7CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgIW1l
ZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obWVkaWFO
b2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVHdGs6OmluaXRNZWRpYUJ1dHRvbnMoKQoreworICAgIHN0YXRpYyBib29sIGljb25z
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmIChpY29uc0luaXRpYWxpemVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a0ljb25GYWN0b3J5PiBpY29uRmFjdG9yeSA9IGFk
b3B0R1JlZihndGtfaWNvbl9mYWN0b3J5X25ldygpKTsKKyAgICBHdGtJY29uU291cmNlKiBpY29u
U291cmNlID0gZ3RrX2ljb25fc291cmNlX25ldygpOworICAgIGNvbnN0IGNoYXIqIGljb25zW10g
PSB7ICJhdWRpby12b2x1bWUtaGlnaCIsICJhdWRpby12b2x1bWUtbXV0ZWQiIH07CisKKyAgICBn
dGtfaWNvbl9mYWN0b3J5X2FkZF9kZWZhdWx0KGljb25GYWN0b3J5LmdldCgpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGljb25zKTsgKytpKSB7CisgICAgICAg
IGd0a19pY29uX3NvdXJjZV9zZXRfaWNvbl9uYW1lKGljb25Tb3VyY2UsIGljb25zW2ldKTsKKyAg
ICAgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19pY29uX3NldF9uZXcoKTsKKyAgICAgICAg
Z3RrX2ljb25fc2V0X2FkZF9zb3VyY2UoaWNvblNldCwgaWNvblNvdXJjZSk7CisgICAgICAgIGd0
a19pY29uX2ZhY3RvcnlfYWRkKGljb25GYWN0b3J5LmdldCgpLCBpY29uc1tpXSwgaWNvblNldCk7
CisgICAgICAgIGd0a19pY29uX3NldF91bnJlZihpY29uU2V0KTsKKyAgICB9CisKKyAgICBndGtf
aWNvbl9zb3VyY2VfZnJlZShpY29uU291cmNlKTsKKworICAgIGljb25zSW5pdGlhbGl6ZWQgPSB0
cnVlOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lR3Rr
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVHdGsoKSk7
Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVH
dGs6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gcnQ7Cit9CisKK1JlbmRlclRoZW1l
R3RrOjpSZW5kZXJUaGVtZUd0aygpCisgICAgOiBtX3BhbmVsQ29sb3IoQ29sb3I6OndoaXRlKQor
ICAgICwgbV9zbGlkZXJDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3NsaWRlclRodW1iQ29s
b3IoQ29sb3I6OndoaXRlKQorICAgICwgbV9tZWRpYUljb25TaXplKDE2KQorICAgICwgbV9tZWRp
YVNsaWRlckhlaWdodCgxNCkKK3sKKyAgICBwbGF0Zm9ybUluaXQoKTsKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgaW5pdE1lZGlhQnV0dG9ucygpOworI2Vu
ZGlmCit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5j
ZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2Fz
ZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBNZW51
bGlzdFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6Cisg
ICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFy
dDoKKyAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CisgICAgY2FzZSBNZWRpYVZvbHVtZVNs
aWRlclBhcnQ6CisgICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVkaWFF
bnRlckZ1bGxzY3JlZW5CdXR0b25QYXJ0OgorICAgIGNhc2UgTWVkaWFTbGlkZXJQYXJ0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5
bGUtPmFwcGVhcmFuY2UoKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICByZXR1cm4gaXNF
bmFibGVkKG8pOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OmJhc2VsaW5lUG9zaXRpb24oY29u
c3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmICghby0+aXNCb3goKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzdHJhdGVneSBpcyBwb3NzaWJseSBp
bmNvcnJlY3QgZm9yIHRoZSBHVEsrIHBvcnQuCisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBDaGVja2JveFBhcnQKKyAgICAgICAgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVy
Qm94KG8pOworICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkg
LSAyOworICAgIH0KKworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihv
KTsKK30KKworLy8gVGhpcyBpcyB1c2VkIGluIFJlbmRlclRoZW1lR3RrMiBhbmQgUmVuZGVyVGhl
bWVHdGszLiBOb3JtYWxseSwgaXQgd291bGQgYmUgaW4KKy8vIHRoZSBSZW5kZXJUaGVtZUd0ayBo
ZWFkZXIgKHBlcmhhcHMgYXMgYSBzdGF0aWMgbWV0aG9kKSwgYnV0IHdlIHdhbnQgdG8gYXZvaWQK
Ky8vIGhhdmluZyB0byBpbmNsdWRlIEdUSysgaGVhZGVycyBvbmx5IGZvciB0aGUgR3RrVGV4dERp
cmVjdGlvbiBlbnVtLgorR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBS
VEw6CisgICAgICAgIHJldHVybiBHVEtfVEVYVF9ESVJfUlRMOworICAgIGNhc2UgTFRSOgorICAg
ICAgICByZXR1cm4gR1RLX1RFWFRfRElSX0xUUjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gR1RLX1RFWFRfRElSX05PTkU7CisgICAgfQorfQorCitzdGF0aWMgR3RrU3RhdGVUeXBlIGd0
a0ljb25TdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
KQoreworICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBy
ZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZFOworICAgIGlmICh0
aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVf
UFJFTElHSFQ7CisKKyAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU29tZSBsYXlvdXQg
dGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IGJ1dHRvbnMgaWdub3JlIGxpbmUtaGVpZ2h0Lgor
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KQorICAgICAgICBz
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gVGhlIHRl
c3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBidXR0b25zIGlnbm9yZSBsaW5l
IGhlaWdodC4KKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7CisKKyAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcg
d2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KKyAgICBzdHlsZS0+
cmVzZXRCb3JkZXJSYWRpdXMoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0TWVudUxpc3RTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvYmpl
Y3QsIGluZm8sIHJlY3QpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVh
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKworc3RhdGljIHZvaWQg
cGFpbnRHZGtQaXhidWYoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHZGtQaXhidWYq
IGljb24sIGNvbnN0IEludFJlY3QmIGljb25SZWN0KQoreworICAgIEludFNpemUgaWNvblNpemUo
Z2RrX3BpeGJ1Zl9nZXRfd2lkdGgoaWNvbiksIGdka19waXhidWZfZ2V0X2hlaWdodChpY29uKSk7
CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHNjYWxlZEljb247CisgICAgaWYgKGljb25SZWN0LnNp
emUoKSAhPSBpY29uU2l6ZSkgeworICAgICAgICAvLyBXZSBjb3VsZCB1c2UgY2Fpcm9fc2NhbGUo
KSBoZXJlIGJ1dCBjYWlyby9waXhtYW4gZG93bnNjYWxlIHF1YWxpdHkgaXMgcXVpdGUgYmFkLgor
ICAgICAgICBzY2FsZWRJY29uID0gYWRvcHRHUmVmKGdka19waXhidWZfc2NhbGVfc2ltcGxlKGlj
b24sIGljb25SZWN0LndpZHRoKCksIGljb25SZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19JTlRFUlBfQklMSU5F
QVIpKTsKKyAgICAgICAgaWNvbiA9IHNjYWxlZEljb24uZ2V0KCk7CisgICAgfQorCisgICAgY2Fp
cm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19z
YXZlKGNyKTsKKyAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhidWYoY3IsIGljb24sIGljb25S
ZWN0LngoKSwgaWNvblJlY3QueSgpKTsKKyAgICBjYWlyb19wYWludChjcik7CisgICAgY2Fpcm9f
cmVzdG9yZShjcik7Cit9CisKKy8vIERlZmluZWQgaW4gR1RLKyAoZ3RrL2d0a2ljb25mYWN0b3J5
LmMpCitzdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZU1lbnUgPSAxNjsKK3N0YXRpYyBjb25z
dCBnaW50IGd0a0ljb25TaXplU21hbGxUb29sYmFyID0gMTg7CitzdGF0aWMgY29uc3QgZ2ludCBn
dGtJY29uU2l6ZUJ1dHRvbiA9IDIwOworc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVMYXJn
ZVRvb2xiYXIgPSAyNDsKK3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplRG5kID0gMzI7Citz
dGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURpYWxvZyA9IDQ4OworCitzdGF0aWMgR3RrSWNv
blNpemUgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZ2ludCBwaXhlbFNpemUpCit7CisgICAgaWYg
KHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplU21hbGxUb29sYmFyKQorICAgICAgICByZXR1cm4gR1RL
X0lDT05fU0laRV9NRU5VOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3RrSWNvblNpemVTbWFsbFRv
b2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVCdXR0b24pCisgICAgICAgIHJldHVybiBH
VEtfSUNPTl9TSVpFX1NNQUxMX1RPT0xCQVI7CisgICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29u
U2l6ZUJ1dHRvbiAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUxhcmdlVG9vbGJhcikKKyAgICAg
ICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3Rr
SWNvblNpemVMYXJnZVRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVEbmQpCisgICAg
ICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RPT0xCQVI7CisgICAgaWYgKHBpeGVsU2l6
ZSA+PSBndGtJY29uU2l6ZURuZCAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZURpYWxvZykKKyAg
ICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRE5EOworCisgICAgcmV0dXJuIEdUS19JQ09OX1NJ
WkVfRElBTE9HOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgaSwgcmVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3sK
KyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisK
KyAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplLgorICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlmIChmb250U2l6ZSA8IGd0a0lj
b25TaXplTWVudSkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBG
aXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKKyAgICBndGtfaWNvbl9zaXplX2xvb2t1cChnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShmb250
U2l6ZSksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0
aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
R2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVsZW1lbnQuCisgICAgTm9kZSogaW5wdXQgPSBy
ZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIGlmICghaW5wdXQpCisgICAg
ICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVy
ZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIElmIHBv
c3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSByZWN0IHZlcnRpY2FsbHkgaW4g
dGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgorICAgIC8vIFdlIGFsc28gYWRkIG9uZSBwaXhlbCBo
ZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMgcm91bmRlZCB1cCBmb3IgYm94
IGhlaWdodHMKKyAgICAvLyB0aGF0IGFyZSBldmVuLCB3aGljaCBsb29rcyBpbiByZWxhdGlvbiB0
byB0aGUgYm94IHRleHQuCisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSB0b1JlbmRlckJv
eChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRlQ29udGVudEJveCgpOworCisgICAgLy8gTWFr
ZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGlu
IGl0cyBwYXJlbnQncyBib3guCisgICAgaW50IGljb25TaXplID0gc3RkOjptaW4oaW5wdXRDb250
ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgcmVjdC5o
ZWlnaHQoKSkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0LngoKSwgaW5wdXRDb250ZW50
Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBpY29uU2l6ZSArIDEpIC8gMiwg
aWNvblNpemUsIGljb25TaXplKTsKKyAgICByZXR1cm4gc2NhbGVkUmVjdDsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVjdFZlcnRpY2Fs
bHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOworICAgIGlmIChpY29u
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9FTlRSWSwg
R1RLX1NUT0NLX0ZJTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJY29uU2l6
ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CisgICAgcGFpbnRHZGtQaXhidWYocGFpbnRJ
bmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7
CisgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVu
dElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOworICAgIGlmIChpY29uUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBp
Y29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9FTlRSWSwgR1RLX1NUT0NL
X0NMRUFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQaXhl
bFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250
ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFdlIGNhbm5vdCBn
aXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZv
cnR1bmF0ZWx5LgorICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRU
ZXh0RmllbGQobywgaSwgcmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIFRoZSBvdGhlciBw
YWludCBtZXRob2RzIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBwYWludGluZyBpcyBkaXNh
YmxlZCBiZWNhdXNlIFJlbmRlclRoZW1lIGFscmVhZHkgY2hlY2tzIGl0CisgICAgLy8gYmVmb3Jl
IGNhbGxpbmcgdGhlbSwgYnV0IHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoKSBpcyBjYWxsZWQgYnkg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIHdoaWNoIGRvZXNuJ3QgY2hlY2sgaXQuCisgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaW50IGljb25TaXplID0gc3RkOjptaW4ocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZv
cldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9DS19DQVBTX0xPQ0tfV0FSTklORywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
Z2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKworICAgIC8vIE9ubHkgcmUtc2Nh
bGUgdGhlIGljb24gd2hlbiBpdCdzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBpY29uIHNpemUu
CisgICAgaWYgKGljb25TaXplID49IGd0a0ljb25TaXplTWVudSkKKyAgICAgICAgaWNvblNpemUg
PSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNvbi5nZXQoKSk7CisKKyAgICAvLyBHVEsrIGxvY2F0
ZXMgdGhlIGljb24gcmlnaHQgYWxpZ25lZCBpbiB0aGUgZW50cnkuIFRoZSBnaXZlbiByZWN0YW5n
bGUgaXMgYWxyZWFkeQorICAgIC8vIGNlbnRlcmVkIHZlcnRpY2FsbHkgYnkgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLgorICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgLSBpY29uU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3Qu
aGVpZ2h0KCkgLSBpY29uU2l6ZSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgaWNvblNpemUs
IGljb25TaXplKTsKKyAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5n
ZXQoKSwgaWNvblJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZh
bCgpIGNvbnN0Cit7CisgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dl
dF9kZWZhdWx0KCk7CisKKyAgICBnYm9vbGVhbiBzaG91bGRCbGluazsKKyAgICBnaW50IHRpbWU7
CisKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstY3Vyc29yLWJsaW5rIiwgJnNob3Vs
ZEJsaW5rLCAiZ3RrLWN1cnNvci1ibGluay10aW1lIiwgJnRpbWUsIE5VTEwpOworCisgICAgaWYg
KCFzaG91bGRCbGluaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gdGltZSAvIDIw
MDAuOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpCit7CisgICAg
Ly8gRklYTUU6IFJlYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgd2lkZ2V0J3Mgc2NyZWVuLgorICAg
IEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAgIGlmICgh
c2NyZWVuKQorICAgICAgICByZXR1cm4gOTY7IC8vIERlZmF1bHQgdG8gOTYgRFBJLgorCisgICAg
ZmxvYXQgZHBpID0gZ2RrX3NjcmVlbl9nZXRfcmVzb2x1dGlvbihzY3JlZW4pOworICAgIGlmIChk
cGkgPD0gMCkKKyAgICAgICAgcmV0dXJuIDk2OworICAgIHJldHVybiBkcGk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OnN5c3RlbUZvbnQoaW50LCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK3sKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGlu
Z3NfZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBUaGlzIHdpbGwgYmUgYSBmb250IHNlbGVjdGlvbiBzdHJpbmcgbGlrZSAiU2FucyAx
MCIgc28gd2UgY2Fubm90IHVzZSBpdCBhcyB0aGUgZmFtaWx5IG5hbWUuCisgICAgR093blB0cjxn
Y2hhcj4gZm9udE5hbWU7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWZvbnQtbmFt
ZSIsICZmb250TmFtZS5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlv
biogcGFuZ29EZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJvbV9zdHJpbmco
Zm9udE5hbWUuZ2V0KCkpOworICAgIGlmICghcGFuZ29EZXNjcmlwdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShwYW5nb0Rlc2NyaXB0aW9uKSk7CisKKyAgICBp
bnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUocGFuZ29EZXNjcmlwdGlv
bikgLyBQQU5HT19TQ0FMRTsKKyAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgZm9udCBpcyBpbiBw
b2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMuCisgICAgaWYgKCFwYW5nb19m
b250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29sdXRlKHBhbmdvRGVzY3JpcHRpb24pKQor
ICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5EUEkoKSAvIDcyLjApOworCisgICAgZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmlj
RmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxp
YyhmYWxzZSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKHBhbmdvRGVzY3JpcHRp
b24pOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIGluaXRNZWRpYUNvbG9ycygpOworI2VuZGlmCisg
ICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKKyNpZiBFTkFC
TEUoVklERU8pCitTdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0d0a1VzZXJBZ2VudFN0
eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5bGVTaGVldCkpOwor
fQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpl
eHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cisj
ZW5kaWYKKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUpCit7CisgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIChyZWN0
LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgIHJl
Y3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKKyAgICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKKyAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShH
VEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFt
ZSwKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGljb25SZWN0LndpZHRo
KCkpOworICAgIHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6Omhhc093bkRpc2Fi
bGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAoreworICAgIHJldHVy
biAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QsICJ2aWV3LWZ1bGxzY3JlZW4tc3ltYm9saWMiLCBHVEtfU1RPQ0tfRlVMTFNDUkVFTik7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRN
ZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCk7CisgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgbXV0ZWQgPSBtZWRp
YUVsZW1lbnQtPm11dGVkKCk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2Jq
ZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwKKyAgICAgICAgbXV0ZWQgPyAiYXVkaW8tdm9s
dW1lLW11dGVkLXN5bWJvbGljIiA6ICJhdWRpby12b2x1bWUtaGlnaC1zeW1ib2xpYyIsCisgICAg
ICAgIG11dGVkID8gImF1ZGlvLXZvbHVtZS1tdXRlZCIgOiAiYXVkaW8tdm9sdW1lLWhpZ2giKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIE5vZGUqIG5vZGUgPSByZW5kZXJPYmplY3QtPm5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5vZGUtPmlzTWVk
aWFDb250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHBs
YXkgPSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKSA9PSBNZWRpYVBsYXlCdXR0b247Cisg
ICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4
dCwgcmVjdCwKKyAgICAgICAgcGxheSA/ICJtZWRpYS1wbGF5YmFjay1zdGFydC1zeW1ib2xpYyIg
OiAibWVkaWEtcGxheWJhY2stcGF1c2Utc3ltYm9saWMiLAorICAgICAgICBwbGF5ID8gR1RLX1NU
T0NLX01FRElBX1BMQVkgOiBHVEtfU1RPQ0tfTUVESUFfUEFVU0UpOworfQorCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNv
bnRleHQsIHJlY3QsICJtZWRpYS1zZWVrLWJhY2t3YXJkLXN5bWJvbGljIiwgR1RLX1NUT0NLX01F
RElBX1JFV0lORCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrRm9y
d2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVkaWFC
dXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgIm1lZGlhLXNlZWst
Zm9yd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9GT1JXQVJEKTsKK30KKworc3RhdGlj
IFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUpCit7CisgICAgcmV0dXJuIFJvdW5kZWRSZWN0OjpSYWRpaSgKKyAgICAgICAgSW50U2l6ZShz
dHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJv
cmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6
ZShzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxl
LT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAorICAgICAgICBJ
bnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgp
LCBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAor
ICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCku
aW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50
VmFsdWUoKSkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVu
dE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRl
eHQ7CisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5v
U3Ryb2tlKTsKKworICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0
aW9uKCk7CisgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgpOworICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVS
YW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChpbmRleCwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgICAgIGZsb2F0IHN0YXJ0UmF0aW8gPSBzdGFydCAvIG1lZGlhRHVyYXRpb247
CisgICAgICAgIGZsb2F0IGxlbmd0aFJhdGlvID0gKGVuZCAtIHN0YXJ0KSAvIG1lZGlhRHVyYXRp
b247CisgICAgICAgIGlmICghbGVuZ3RoUmF0aW8pCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBJbnRSZWN0IHJhbmdlUmVjdChyKTsKKyAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRo
KGxlbmd0aFJhdGlvICogdG90YWxUcmFja1dpZHRoKTsKKyAgICAgICAgaWYgKGluZGV4KQorICAg
ICAgICAgICAgcmFuZ2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7
CisgICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChSb3VuZGVkUmVjdChyYW5nZVJlY3Qs
IGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIH0KKworICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVk
UmVjdChSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFj
ZSgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0g
dG9QYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmbG9hdCB2b2x1bWUgPSBtZWRpYUVsZW1l
bnQtPnZvbHVtZSgpOworICAgIGlmICghdm9sdW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgIGNv
bnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisK
KyAgICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgdHJhY2tIZWln
aHQgPSByZWN0SGVpZ2h0ICogdm9sdW1lOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
ck9iamVjdC0+c3R5bGUoKTsKKyAgICBJbnRSZWN0IHZvbHVtZVJlY3QocmVjdCk7CisgICAgdm9s
dW1lUmVjdC5tb3ZlKDAsIHJlY3RIZWlnaHQgLSB0cmFja0hlaWdodCk7CisgICAgdm9sdW1lUmVj
dC5zZXRIZWlnaHQoY2VpbCh0cmFja0hlaWdodCkpOworCisgICAgY29udGV4dC0+ZmlsbFJvdW5k
ZWRSZWN0KFJvdW5kZWRSZWN0KHZvbHVtZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxl
KSksCisgICAgICAgIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNZWRp
YVNsaWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKK30KKworU3RyaW5n
IFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3Vy
cmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNU
aW1lKGR1cmF0aW9uKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUN1cnJl
bnRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQordm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
fQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmNwcAorc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0g
NTsKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKK3N0YXRp
YyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OworZG91Ymxl
IFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRl
cnZhbDsKK30KKworZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NB
bmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZv
ciBiYWNrIGFuZCBmb3J0aDsKK30KKworSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRl
UHJvZ3Jlc3NSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBm
dWxsQmFyUmVjdCkKK3sKKyAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Cisg
ICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5k
ZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKSB7Cisg
ICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiByZW5kZXJQ
cm9ncmVzcy0+cG9zaXRpb24oKTsKKyAgICAgICAgaWYgKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jl
c3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJvZ3Jlc3NXaWR0aCk7CisgICAg
ICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRoKTsKKyAgICAgICAgcmV0dXJu
IHByb2dyZXNzUmVjdDsKKyAgICB9CisKKyAgICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MgPSBy
ZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKKworICAgIC8vIE5ldmVyIGxldCB0
aGUgcHJvZ3Jlc3MgcmVjdCBzaHJpbmsgc21hbGxlciB0aGFuIDIgcGl4ZWxzLgorICAgIGludCBu
ZXdXaWR0aCA9IG1heCgyLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlC
bG9ja3MpOworICAgIGludCBtb3ZhYmxlV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIG5l
d1dpZHRoOworICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChuZXdXaWR0aCk7CisKKyAgICAvLyBX
ZSB3YW50IHRoZSBmaXJzdCAwLjUgdW5pdHMgb2YgdGhlIGFuaW1hdGlvbiBwcm9ncmVzcyB0byBy
ZXByZXNlbnQgdGhlCisgICAgLy8gZm9yd2FyZCBtb3Rpb24gYW5kIHRoZSBzZWNvbmQgMC41IHVu
aXRzIHRvIHJlcHJlc2VudCB0aGUgYmFja3dhcmQgbW90aW9uLAorICAgIC8vIHRodXMgd2UgbXVs
dGlwbHkgYnkgdHdvIGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHN3ZWVwIG9mIHRoZSBwcm9ncmVzcyBi
YXIgd2l0aAorICAgIC8vIGVhY2ggZGlyZWN0aW9uLgorICAgIGlmIChhbmltYXRpb25Qcm9ncmVz
cyA8IDAuNSkKKyAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIChh
bmltYXRpb25Qcm9ncmVzcyAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKKyAgICBlbHNlCisgICAgICAg
IHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoKDEuMCAtIGFuaW1hdGlvblBy
b2dyZXNzKSAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKKyAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0Owor
fQorI2VuZGlmCisKK1N0cmluZyBSZW5kZXJUaGVtZUd0azo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgo
Y29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgsIGJv
b2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Cit7CisgICAgaWYgKHdpZHRoIDw9IDApCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkgPiAx
KQorICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKG11bHRpcGxl
RmlsZVVwbG9hZFRleHQoZmlsZUxpc3QtPmxlbmd0aCgpKSwgd2lkdGgsIGZvbnQsIFN0cmluZ1Ry
dW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CisKKyAgICBTdHJpbmcgc3RyaW5nOworICAg
IGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkpCisgICAgICAgIHN0cmluZyA9IHBhdGhHZXRGaWxlTmFt
ZShmaWxlTGlzdC0+aXRlbSgwKS0+cGF0aCgpKTsKKyAgICBlbHNlIGlmIChtdWx0aXBsZUZpbGVz
QWxsb3dlZCkKKyAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVs
KCk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRM
YWJlbCgpOworCisgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoc3Ry
aW5nLCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsK
K30KKworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorSW50U2l6ZSBSZW5kZXJUaGVtZUd0
azo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNl
dCB0aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1hcmsuCisgICAgcmV0dXJuIEludFNpemUo
MCwgMCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6c2xpZGVyVGlja09mZnNldEZyb21UcmFj
a0NlbnRlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc2V0IHRoaXMgdG8g
dGhlIHBvc2l0aW9uIG9mIHRoZSB0aWNrIG1hcmtzLgorICAgIHJldHVybiAwOworfQorI2VuZGlm
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTU4MDgw
MTU3OWYxZjI0ZjBjNzZlODRlYTYxZGQzN2QzN2M3OTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBAIC0wLDAgKzEsMjU2IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lR3RrX2gKKyNk
ZWZpbmUgUmVuZGVyVGhlbWVHdGtfaAorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK3R5cGVkZWYgc3RydWN0IF9HZGtDb2xvcm1h
cCBHZGtDb2xvcm1hcDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUaGVt
ZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Citwcml2YXRlOgorICAgIFJlbmRlclRoZW1lR3Rr
KCk7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKKworICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2lu
ZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBBIG1ldGhv
ZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0
aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAgIC8v
IEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9y
dGVkIGF0IGFsbC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworCisgICAgLy8gQSBtZXRob2QgdG8gb2J0
YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2ls
bCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQorICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBk
ZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRp
byBidXR0b25zIGFyZSBleGFtcGxlcyBvZgorICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBk
byB0aGlzLgorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IEJv
eCBzZWxlY3Rpb24gY29sb3IKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1
YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworCisgICAgLy8gU3lzdGVt
IGZvbnRzIGFuZCBjb2xvcnMuCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJ
ZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xv
cihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNw
YWNlT3JSZXR1cm4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShm
bG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OworCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRnVsbFNjcmVlblN0eWxlU2hl
ZXQoKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKKyAg
ICAvLyBSZXR1cm5zIHNpemUgb2Ygb25lIHNsaWRlciB0aWNrIG1hcmsgZm9yIGEgaG9yaXpvbnRh
bCB0cmFjay4KKyAgICAvLyBGb3IgdmVydGljYWwgdHJhY2tzIHdlIHJvdGF0ZSBpdCBhbmQgdXNl
IGl0LiBpLmUuIFdpZHRoIGlzIGFsd2F5cyBsZW5ndGggYWxvbmcgdGhlIHRyYWNrLgorICAgIHZp
cnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0OworICAgIC8vIFJldHVybnMgdGhl
IGRpc3RhbmNlIG9mIHNsaWRlciB0aWNrIG9yaWdpbiBmcm9tIHRoZSBzbGlkZXIgdHJhY2sgY2Vu
dGVyLgorICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBj
b25zdDsKKyNlbmRpZgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtXaWRnZXQq
IGd0a0NvbnRhaW5lcigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsK
KyAgICBHdGtXaWRnZXQqIGd0a1ZTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0
a0hTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBnZXRJbmRpY2F0b3JNZXRyaWNz
KENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3BhY2luZyk7
CisjZWxzZQorICAgIEd0a1N0eWxlQ29udGV4dCogZ3RrU2Nyb2xsYmFyU3R5bGUoKTsKKyNlbmRp
ZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAg
IHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHls
ZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgLy8gVGhlIE1hYyBwb3J0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4g
dGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBidXR0b24uIgorICAgIC8vIFRoZSBm
b3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRvbiBoYXMgYmVlbiBzdHlsZWQuIFRo
aXMgaXMgdXNlZCB0byBlbnN1cmUKKyAgICAvLyBBcXVhIHRoZW1lZCBjb250cm9scyB3aGVuZXZl
ciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdUSysgdGhlbWluZywgc28KKyAgICAv
LyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlhdGlvbi4KKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgdm9p
ZCBpbml0TWVkaWFCdXR0b25zKCk7CisgICAgdmlydHVhbCBib29sIGhhc093bkRpc2FibGVkU3Rh
dGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrQmFj
a0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoUFJP
R1JFU1NfRUxFTUVOVCkKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBkb3Vi
bGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChj
b25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxl
c0FsbG93ZWQpIGNvbnN0IE9WRVJSSURFOworCisgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlKik7CisgICAgc3Rh
dGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBib29s
IHBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxi
YWNrU3RvY2tJY29uTmFtZSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5U
KQorICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5kZXJPYmplY3Qq
LCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIG11dGFibGUgQ29sb3IgbV9wYW5lbENv
bG9yOworICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJDb2xvcjsKKyAgICBtdXRhYmxlIENvbG9y
IG1fc2xpZGVyVGh1bWJDb2xvcjsKKyAgICBjb25zdCBpbnQgbV9tZWRpYUljb25TaXplOworICAg
IGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVpZ2h0OworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyAgICB2b2lkIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiwgR3Rr
V2lkZ2V0KikgY29uc3Q7CisgICAgdm9pZCByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0
OworICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50JiBsZWZ0LCBp
bnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0OworICAgIGludCBnZXRDb21i
b0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3Q7CisgICAgaW50IGNvbWJvQm94QXJyb3dTaXplKFJl
bmRlclN0eWxlKikgY29uc3Q7CisKKyAgICBHdGtXaWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0Owor
ICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1ZT
Y2FsZSgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrSFNjYWxlKCkgY29uc3Q7CisgICAgR3Rr
V2lkZ2V0KiBndGtSYWRpb0J1dHRvbigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ2hlY2tC
dXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1Byb2dyZXNzQmFyKCkgY29uc3Q7Cisg
ICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveCgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ29t
Ym9Cb3hCdXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94QXJyb3coKSBj
b25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3Q7CisgICAg
R3RrV2lkZ2V0KiBndGtTcGluQnV0dG9uKCkgY29uc3Q7CisKKyAgICBHZGtDb2xvcm1hcCogbV9j
b2xvcm1hcDsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7CisgICAgbXV0YWJs
ZSBHdGtXaWRnZXQqIG1fZ3RrQ29udGFpbmVyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a0J1dHRvbjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtFbnRyeTsKKyAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtUcmVlVmlldzsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtW
U2NhbGU7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNjYWxlOworICAgIG11dGFibGUg
R3RrV2lkZ2V0KiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a0NoZWNrQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1Byb2dyZXNzQmFyOwor
ICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94OworICAgIG11dGFibGUgR3RrV2lk
Z2V0KiBtX2d0a0NvbWJvQm94QnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0Nv
bWJvQm94QXJyb3c7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0
b3I7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjcm9sbGJhcjsKKyAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtIU2Nyb2xsYmFyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a1NwaW5CdXR0b247CisgICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworICAg
IGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OworI2VuZGlmCit9OworCit9CisK
KyNlbmRpZiAvLyBSZW5kZXJUaGVtZUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODIzYTA0ODVlN2NkMTY4ZTlhYTdlMjUxZjU4YzQxMWQ2Mzc4
NWIwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcApAQCAtMCwwICsxLDk2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0
ay5oIgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworLy8gV2UgbmVlZCB0aGlzIHRvIGFs
bG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VUX0ZMQUdTLiBJdCdzIGRlcHJl
Y2F0ZWQKKy8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWlyZSBpdCB0byBlbnN1cmUgcHJv
cGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgorI3VuZGVmIEdUS19ESVNBQkxFX0RF
UFJFQ0FURUQKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRzLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPGdk
ay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdh
cyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCitzdGF0aWMg
Y29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OworCisvLyBUaGlzIGlzIG5vdCBh
IHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RLKyBoZWFk
ZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0
RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9y
bUluaXQoKQoreworICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSB0cnVlOworICAg
IG1fZ3RrV2luZG93ID0gMDsKKyAgICBtX2d0a0NvbnRhaW5lciA9IDA7CisgICAgbV9ndGtCdXR0
b24gPSAwOworICAgIG1fZ3RrRW50cnkgPSAwOworICAgIG1fZ3RrVHJlZVZpZXcgPSAwOworICAg
IG1fZ3RrVlNjYWxlID0gMDsKKyAgICBtX2d0a0hTY2FsZSA9IDA7CisgICAgbV9ndGtSYWRpb0J1
dHRvbiA9IDA7CisgICAgbV9ndGtDaGVja0J1dHRvbiA9IDA7CisgICAgbV9ndGtQcm9ncmVzc0Jh
ciA9IDA7CisgICAgbV9ndGtDb21ib0JveCA9IDA7CisgICAgbV9ndGtDb21ib0JveEJ1dHRvbiA9
IDA7CisgICAgbV9ndGtDb21ib0JveEFycm93ID0gMDsKKyAgICBtX2d0a0NvbWJvQm94U2VwYXJh
dG9yID0gMDsKKyAgICBtX2d0a1ZTY3JvbGxiYXIgPSAwOworICAgIG1fZ3RrSFNjcm9sbGJhciA9
IDA7CisgICAgbV9ndGtTcGluQnV0dG9uID0gMDsKKworICAgIG1fY29sb3JtYXAgPSBnZGtfc2Ny
ZWVuX2dldF9yZ2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgaWYg
KCFtX2NvbG9ybWFwKSB7CisgICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBm
YWxzZTsKKyAgICAgICAgbV9jb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRfY29sb3Jt
YXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICB9Cit9CisKK1JlbmRlclRoZW1lR3Rr
Ojp+UmVuZGVyVGhlbWVHdGsoKQoreworICAgIGlmIChtX2d0a1dpbmRvdykKKyAgICAgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCit7CisgICAgR3RrU3R5bGUqIHN0
eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250YWluZXIoKSkpOwor
ICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXTsKKyAgICBtX3Ns
aWRlckNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVdOworICAgIG1fc2xpZGVyVGh1
bWJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfU0VMRUNURURdOworfQorI2VuZGlmCisKK3N0
YXRpYyB2b2lkIGFkanVzdFJlY3RGb3JGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgSW50UmVjdCYg
cmVjdCwgYm9vbCBpZ25vcmVJbnRlcmlvckZvY3VzUHJvcGVydHkgPSBmYWxzZSkKK3sKKyAgICBn
aW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIGdib29sZWFuIGludGVyaW9yRm9jdXMgPSAw
OworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKKyAgICBpZiAoIWln
bm9yZUludGVyaW9yRm9jdXNQcm9wZXJ0eSAmJiBpbnRlcmlvckZvY3VzKQorICAgICAgICByZXR1
cm47CisgICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0KQoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5k
ZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAg
ICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICAvLyBX
ZSBpZ25vcmUgdGhlIGludGVyaW9yIGZvY3VzIHByb3BlcnR5IGFuZCBhbHdheXMgZXhwYW5kIHRo
ZSBmb2N1cyByZWN0LiBJbiBHVEsrLCB0aGUKKyAgICAgICAgLy8gZm9jdXMgaW5kaWNhdG9yIGlz
IHVzdWFsbHkgb24gdGhlIHRleHQgbmV4dCB0byBhIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbiwg
YnV0IHRoYXQgZG9lc24ndAorICAgICAgICAvLyBoYXBwZW4gaW4gV2ViQ29yZS4gQnkgZXhwYW5k
aW5nIHRoZSBmb2N1cyByZWN0YW5nbGUgdW5jb25kaXRpb25hbGx5IHdlIGluY3JlYXNlIGl0cyBw
cm9taW5lbmNlLgorICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMocGFydCA9PSBDaGVja2JveFBh
cnQgPyBndGtDaGVja0J1dHRvbigpIDogZ3RrUmFkaW9CdXR0b24oKSwgcmVjdCwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgorICAg
ICAgICAvLyBTZWUgcGFpbnRJbm5lclNwaW5CdXR0b24gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdo
eSB3ZSBleHBhbmQgdGhlIHBhaW50aW5nIHJlY3QuCisgICAgICAgIHJlY3QuaW5mbGF0ZVkoMik7
CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpICsgMik7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIEd0a1N0YXRlVHlwZSBnZXRHdGtT
dGF0ZVR5cGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQob2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNv
bnRyb2wob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAg
ICBpZiAodGhlbWUtPmlzUHJlc3NlZChvYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRF
X0FDVElWRTsKKyAgICBpZiAodGhlbWUtPmlzSG92ZXJlZChvYmplY3QpKQorICAgICAgICByZXR1
cm4gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOworfQor
CitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBUaGUgd2lk
dGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2Ug
dGhlbS4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0
eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2ludCBpbmRp
Y2F0b3JTaXplOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwgImluZGljYXRvci1z
aXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRv
clNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAg
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKK30KKwor
c3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBXZSBkbyBub3QgY2FsbCBndGtfdG9n
Z2xlX2J1dHRvbl9zZXRfYWN0aXZlIGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVtZXMgYmVnaW4gYSBz
ZXJpZXMgb2YKKyAgICAvLyBhbmltYXRpb24gZnJhbWVzIGluIGEgInRvZ2dsZWQiIHNpZ25hbCBo
YW5kbGVyLiBUaGlzIHB1dHMgc29tZSBjaGVja2JveGVzIGluIGEgaGFsZi13YXkKKyAgICAvLyBj
aGVja2VkIHN0YXRlLiBFdmVyeSBHVEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVseSBsb29rcyBhdCB0
aGUgc2hhZG93IHR5cGUgKGFuZCBub3QgdGhlCisgICAgLy8gJ2FjdGl2ZScgcHJvcGVydHkpIHRv
IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBjaGVjay4KKyAgICBndGtfd2lk
Z2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCB0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkg
JiYgIXRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKworICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9IHRoZW1l
LT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKKyAgICBndGtfdG9nZ2xlX2J1dHRvbl9z
ZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGluZGV0ZXJtaW5hdGUp
OworCisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19PVVQ7CisgICAg
aWYgKGluZGV0ZXJtaW5hdGUpIC8vIFRoaXMgb3JpZ2luYXRlcyBmcm9tIHRoZSBNb3ppbGxhIGNv
ZGUuCisgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hFRF9JTjsKKyAgICBlbHNl
IGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHNoYWRvd1R5cGUg
PSBHVEtfU0hBRE9XX0lOOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250
ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50
KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBHdGtTdGF0ZVR5cGUgdG9nZ2xlU3RhdGUgPSBnZXRHdGtT
dGF0ZVR5cGUodGhlbWUsIHJlbmRlck9iamVjdCk7CisgICAgY29uc3QgY2hhciogZGV0YWlsID0g
MDsKKyAgICBpZiAoR1RLX0lTX1JBRElPX0JVVFRPTih3aWRnZXQpKSB7CisgICAgICAgIGRldGFp
bCA9ICJyYWRpb2J1dHRvbiI7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRPcHRpb24o
YnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBkZXRhaWwgPSAiY2hlY2tidXR0b24iOworICAgICAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Q2hlY2soYnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwg
c2hhZG93VHlwZSwgZGV0YWlsKTsKKyAgICB9CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChy
ZW5kZXJPYmplY3QpKSB7CisgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KGJ1dHRvblJlY3QpOwor
ICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMod2lkZ2V0LCBmb2N1c1JlY3QsIHRydWUpOworICAg
ICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0LCB3aWRnZXQsIHRvZ2ds
ZVN0YXRlLCBkZXRhaWwpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hl
Y2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBzZXRUb2dnbGVTaXpl
KHRoaXMsIHN0eWxlLCBndGtDaGVja0J1dHRvbigpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBhaW50VG9nZ2xlKHRoaXMs
IHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3RrQ2hlY2tCdXR0b24oKSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0a1Jh
ZGlvQnV0dG9uKCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0LCBpbmZvLCBy
ZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2
b2lkIHNldFdpZGdldEhhc0ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBoYXNGb2N1
cykKK3sKKyAgICBnX29iamVjdF9zZXQod2lkZ2V0LCAiaGFzLWZvY3VzIiwgaGFzRm9jdXMsIE5V
TEwpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGluIEdUSysgMi4y
MiwgeWV0IHRoZW1lIGVuZ2luZXMgc3RpbGwgbG9vaworICAgIC8vIGF0IHRoZXNlIGZsYWdzIHdo
ZW4gZGV0ZXJtaW5pbmcgaWYgYSB3aWRnZXQgaGFzIGZvY3VzLCBzbyB3ZSBtdXN0IHVzZSB0aGVt
LgorICAgIGlmIChoYXNGb2N1cykKKyAgICAgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0
LCBHVEtfSEFTX0ZPQ1VTKTsKKyAgICBlbHNlCisgICAgICAgIEdUS19XSURHRVRfVU5TRVRfRkxB
R1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0g
Z3RrQnV0dG9uKCk7CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6
ZSgpKTsKKyAgICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKKworICAgIEd0a1N0YXRl
VHlwZSBzdGF0ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOworICAgIGd0a193aWRn
ZXRfc2V0X3N0YXRlKHdpZGdldCwgc3RhdGUpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OworCisgICAgaWYgKGlzRm9jdXNlZChvYmplY3QpKSB7CisgICAgICAgIHNldFdpZGdldEhhc0Zv
Y3VzKHdpZGdldCwgVFJVRSk7CisKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1cyA9IDAs
IGZvY3VzV2lkdGggPSAwLCBmb2N1c1BhZGRpbmcgPSAwOworICAgICAgICBndGtfd2lkZ2V0X3N0
eWxlX2dldCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1m
b2N1cyIsICZpbnRlcmlvckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9j
dXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIE5VTEwpOworICAgICAgICAvLyBJZiB3
ZSBhcmUgdXNpbmcgZXh0ZXJpb3IgZm9jdXMsIHdlIHNocmluayB0aGUgYnV0dG9uIHJlY3QgZG93
biBiZWZvcmUKKyAgICAgICAgLy8gZHJhd2luZy4gSWYgd2UgYXJlIHVzaW5nIGludGVyaW9yIGZv
Y3VzIHdlIHNocmluayB0aGUgZm9jdXMgcmVjdC4gVGhpcworICAgICAgICAvLyBhcHByb2FjaCBv
cmlnaW5hdGVzIGZyb20gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIChndGsyZHJhd2lu
Zy5jKS4KKyAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgICAgIEd0a1N0eWxl
KiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgICAgICAgICBmb2N1
c1JlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5nKTsKKyAgICAg
ICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MgLSBmb2N1c1BhZGRp
bmcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlWCgt
Zm9jdXNXaWR0aCAtIGZvY3VzUGFkZGluZyk7CisgICAgICAgICAgICBidXR0b25SZWN0LmluZmxh
dGVZKC1mb2N1c1BhZGRpbmcgLSBmb2N1c1BhZGRpbmcpOworICAgICAgICB9CisgICAgfQorCisg
ICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVj
dCk7CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gc3RhdGUgPT0gR1RLX1NUQVRFX0FD
VElWRSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKyAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGUsIHNoYWRvd1R5cGUsICJidXR0
b24iKTsKKyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgc3RhdGUsICJidXR0b24iKTsKKworICAg
IHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwgRkFMU0UpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworaW50IFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3QK
K3sKKyAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2VwYXJhdG9yKCk7Cisg
ICAgaWYgKCFzZXBhcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2Jvb2xlYW4gaGFz
V2lkZVNlcGFyYXRvcnMgPSBGQUxTRTsKKyAgICBnaW50IHNlcGFyYXRvcldpZHRoID0gMDsKKyAg
ICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIndpZGUtc2VwYXJhdG9ycyIsICZoYXNXaWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChoYXNXaWRlU2VwYXJhdG9ycykKKyAgICAg
ICAgcmV0dXJuIHNlcGFyYXRvcldpZHRoOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHls
ZShzZXBhcmF0b3IpLT54dGhpY2tuZXNzOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OmNvbWJv
Qm94QXJyb3dTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBUYWtpbmcg
dGhlIGZvbnQgc2l6ZSBhbmQgcmV2ZXJzaW5nIHRoZSBEUEkgY29udmVyc2lvbiBzZWVtcyB0byBt
YXRjaAorICAgIC8vIEdUSysgcmVuZGVyaW5nIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuCisgICAg
cmV0dXJuIHN0eWxlLT5mb250KCkuc2l6ZSgpICogKDcyLjAgLyBSZW5kZXJUaGVtZUd0azo6Z2V0
U2NyZWVuRFBJKCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRCdXR0b25Jbm5lckJvcmRlcihHdGtX
aWRnZXQqIGJ1dHRvbiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0
b20pCit7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoYnV0dG9u
KTsKKyAgICBpbnQgb3V0ZXJCb3JkZXIgPSBndGtfY29udGFpbmVyX2dldF9ib3JkZXJfd2lkdGgo
R1RLX0NPTlRBSU5FUihidXR0b24pKTsKKyAgICBzdGF0aWMgR3RrQm9yZGVyIGRlZmF1bHRJbm5l
ckJvcmRlciA9IHsxLCAxLCAxLCAxfTsKKyAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyOworICAg
IGd0a193aWRnZXRfc3R5bGVfZ2V0KGJ1dHRvbiwgImlubmVyLWJvcmRlciIsICZpbm5lckJvcmRl
ciwgTlVMTCk7CisgICAgaWYgKCFpbm5lckJvcmRlcikKKyAgICAgICAgaW5uZXJCb3JkZXIgPSAm
ZGVmYXVsdElubmVyQm9yZGVyOworCisgICAgbGVmdCA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3Jk
ZXItPmxlZnQgKyBzdHlsZS0+eHRoaWNrbmVzczsKKyAgICByaWdodCA9IG91dGVyQm9yZGVyICsg
aW5uZXJCb3JkZXItPnJpZ2h0ICsgc3R5bGUtPnh0aGlja25lc3M7CisgICAgdG9wID0gb3V0ZXJC
b3JkZXIgKyBpbm5lckJvcmRlci0+dG9wICsgc3R5bGUtPnl0aGlja25lc3M7CisgICAgYm90dG9t
ID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+Ym90dG9tICsgc3R5bGUtPnl0aGlja25lc3M7
CisKKyAgICBpZiAoaW5uZXJCb3JkZXIgIT0gJmRlZmF1bHRJbm5lckJvcmRlcikKKyAgICAgICAg
Z3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyKTsKK30KKworCit2b2lkIFJlbmRlclRoZW1lR3Rr
OjpnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQmIGxlZnQsIGludCYg
dG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGlzIG1l
bnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVtZSwgd2UKKyAg
ICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2ViQ29yZSBhbHJl
YWR5IHVzZXMuCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBjb21ibyBib3ggYnV0dG9uIGlzIGEgYnV0dG9u
IHdpdGggd2lkZ2V0cyBwYWNrZWQgaW50byBpdC4KKyAgICBHdGtTdHlsZSogYnV0dG9uV2lkZ2V0
U3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsKKyAgICBn
ZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOworCisgICAgLy8gQWRkIHh0aGlja25lc3MgYW1vdW50IG9mIHBhZGRpbmcgZm9y
IGVhY2ggc2lkZSBvZiB0aGUgc2VwYXJhdG9yLiBUaGlzIGVuc3VyZXMKKyAgICAvLyB0aGF0IHRo
ZSB0ZXh0IGRvZXMgbm90IGJ1bXAgdXAgYWdhaW5zdCB0aGUgc2VwYXJhdG9yLgorICAgIGludCBh
cnJvd0FuZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCisgICAg
ICAgIGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUt
Pnh0aGlja25lc3MpOworCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAg
ICAgIGxlZnQgKz0gYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7CisgICAgZWxzZQorICAgICAgICBy
aWdodCArPSBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKK30KKworaW50IFJlbmRlclRoZW1lR3Rr
Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorewor
ICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOworICAgIGdl
dENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBy
ZXR1cm4gbGVmdDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRv
cCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5
bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCitp
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90
dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7CisgICAgcmV0dXJuIHRvcDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAg
aW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CisgICAgZ2V0Q29t
Ym9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIHJldHVy
biBib3R0b207Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBNZW51IGxpc3QgYnV0dG9uIHBhaW50aW5nIHN0cmF0ZWd5
LgorICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1saXN0IHNldCB0byBmYWxzZSAo
aGF2aW5nIGEgc2VwYXJhdG9yKToKKyAgICAvLyB8IGxlZnQgYm9yZGVyIHwgQnV0dG9uIHRleHQg
fCB4dGhpY2tuZXNzIHwgdnNlcGFyYXRvciB8IHh0aGlja25lc3MgfCBhcnJvdyB8IHh0aGlja25l
c3MgfCByaWdodCBib3JkZXIgfAorICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1s
aXN0IHNldCB0byB0cnVlIChub3QgaGF2aW5nIGEgc2VwYXJhdG9yKToKKyAgICAvLyB8IGxlZnQg
Ym9yZGVyIHwgQnV0dG9uIHRleHQgfCBhcnJvdyB8IHh0aGlja25lc3MgfCByaWdodCBib3JkZXIg
fAorCisgICAgaW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJvdHRvbUJvcmRl
ciA9IDAsIHRvcEJvcmRlciA9IDA7CisgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29tYm9C
b3hCdXR0b24oKSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwgYm90dG9tQm9y
ZGVyKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgaW50
IGFycm93U2l6ZSA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKTsKKyAgICBHdGtTdHlsZSogYnV0
dG9uU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsKKwor
ICAgIEludFJlY3QgYXJyb3dSZWN0KDAsIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAvIDIs
IGFycm93U2l6ZSwgYXJyb3dTaXplKTsKKyAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJU
TCkKKyAgICAgICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhp
Y2tuZXNzKTsKKyAgICBlbHNlCisgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAt
IHJpZ2h0Qm9yZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOworICAg
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IGlzUHJlc3NlZChvYmplY3QpID8gR1RLX1NIQURP
V19JTiA6IEdUS19TSEFET1dfT1VUOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRn
ZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlw
ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOworICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRBcnJvdyhhcnJvd1JlY3QsIGd0a0NvbWJvQm94QXJyb3coKSwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgImFycm93Iik7CisKKyAgICAvLyBTb21lIGNvbWJvIGJv
eGVzIGRvIG5vdCBoYXZlIGEgc2VwYXJhdG9yLgorICAgIEd0a1dpZGdldCogc2VwYXJhdG9yID0g
Z3RrQ29tYm9Cb3hTZXBhcmF0b3IoKTsKKyAgICBpZiAoIXNlcGFyYXRvcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gV2Ugd2FudCB0byBkZWNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRo
ZSBzZXBhcmF0b3IgYmFzZWQgb24gdGhlIGZvY3VzIHBhZGRpbmcgb2YgdGhlIGJ1dHRvbi4KKyAg
ICBnaW50IGZvY3VzUGFkZGluZyA9IDAsIGZvY3VzV2lkdGggPSAwOyAKKyAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldChndGtDb21ib0JveEJ1dHRvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWRkaW5nLCBOVUxMKTsKKyAgICB0b3BCb3JkZXIg
Kz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKKyAgICBib3R0b21Cb3JkZXIgKz0gZm9jdXNQ
YWRkaW5nICsgZm9jdXNXaWR0aDsKKyAgICBpbnQgc2VwYXJhdG9yV2lkdGggPSBnZXRDb21ib0Jv
eFNlcGFyYXRvcldpZHRoKCk7CisgICAgSW50UmVjdCBzZXBhcmF0b3JSZWN0KDAsIHRvcEJvcmRl
ciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BCb3JkZXIgLSBib3R0b21Cb3Jk
ZXIpOworICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICBzZXBhcmF0
b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSArIGFycm93UmVjdC53aWR0aCgpICsgYnV0dG9uU3R5
bGUtPnh0aGlja25lc3MgKyBzZXBhcmF0b3JXaWR0aCk7CisgICAgZWxzZQorICAgICAgICBzZXBh
cmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSAtIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzIC0g
c2VwYXJhdG9yV2lkdGgpOworCisgICAgZ2Jvb2xlYW4gaGFzV2lkZVNlcGFyYXRvcnMgPSBGQUxT
RTsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsICJ3aWRlLXNlcGFyYXRvcnMi
LCAmaGFzV2lkZVNlcGFyYXRvcnMsIE5VTEwpOworICAgIGlmIChoYXNXaWRlU2VwYXJhdG9ycykK
KyAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChzZXBhcmF0b3JSZWN0LCBzZXBhcmF0
b3IsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfRVRDSEVEX09VVCwgInZzZXBhcmF0b3Ii
KTsKKyAgICBlbHNlCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRWTGluZShzZXBhcmF0
b3JSZWN0LCBzZXBhcmF0b3IsIEdUS19TVEFURV9OT1JNQUwsICJ2c2VwYXJhdG9yIik7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxk
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwor
CisgICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYgIWlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCk7CisgICAgR3RrU3RhdGVUeXBlIGJhY2tncm91bmRTdGF0
ZSA9IGVuYWJsZWQgPyBHVEtfU1RBVEVfTk9STUFMIDogR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwor
ICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsIGVuYWJsZWQpOworICAgIGd0a193
aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwg
aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3
aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCB0ZXh0RmllbGRS
ZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIFRoZSBlbnRyeSBiYWNrZ3Jv
dW5kIGlzIG9ubHkgcGFpbnRlZCBvdmVyIHRoZSBpbnRlcmlvciBwYXJ0IG9mIHRoZSBHVEsrIGVu
dHJ5LCBub3QKKyAgICAvLyB0aGUgZW50aXJlIGZyYW1lLiBUaGlzIGhhcHBlbnMgaW4gdGhlIE1v
emlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIGFzIHdlbGwuCisgICAgSW50UmVjdCBpbnRlcmlvclJl
Y3QodGV4dEZpZWxkUmVjdCk7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KTsKKyAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tu
ZXNzKTsKKyAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tuZXNzKTsKKyAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50RmxhdEJveChpbnRlcmlvclJlY3QsIHdpZGdldCwgYmFj
a2dyb3VuZFN0YXRlLCBHVEtfU0hBRE9XX05PTkUsICJlbnRyeV9iZyIpOworCisgICAgLy8gVGhp
cyBpcyByZXNwb25zaWJsZSBmb3IgZHJhd2luZyB0aGUgYWN0dWFsIGZyYW1lLgorICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRTaGFkb3codGV4dEZpZWxkUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVf
Tk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50cnkiKTsKKworICAgIGdib29sZWFuIGludGVyaW9y
Rm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdp
ZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZm
b2N1c1dpZHRoLCAgTlVMTCk7CisgICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpICYmICFp
bnRlcmlvckZvY3VzKSB7CisgICAgICAgIC8vIFdoZW4gR1RLKyBwYWludHMgYSB0ZXh0IGVudHJ5
IHdpdGggZm9jdXMsIGl0IHNocmlua3MgdGhlIHNpemUgb2YgdGhlIGZyYW1lIGFyZWEgYnkgdGhl
CisgICAgICAgIC8vIGZvY3VzIHdpZHRoIGFuZCBwYWludHMgb3ZlciB0aGUgcHJldmlvdXNseSB1
bmZvY3VzZWQgdGV4dCBlbnRyeS4gV2UgbmVlZCB0byBlbXVsYXRlIHRoYXQKKyAgICAgICAgLy8g
YnkgZHJhd2luZyBib3RoIHRoZSB1bmZvY3VzZWQgZnJhbWUgYWJvdmUgYW5kIHRoZSBmb2N1c2Vk
IGZyYW1lIGhlcmUuCisgICAgICAgIEludFJlY3Qgc2hhZG93UmVjdCh0ZXh0RmllbGRSZWN0KTsK
KyAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1mb2N1c1dpZHRoKTsKKyAgICAgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyhzaGFkb3dSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9OT1JN
QUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOworCisgICAgICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRGb2N1cyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9OT1JNQUwsICJlbnRy
eSIpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChpbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29udHJvbFBh
cnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIEFTU0VSVChwYXJ0
ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8
IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKKworICAgIC8vIFdlIHNocmluayB0aGUg
dHJvdWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9jdXMgaW5kaWNhdG9y
LgorICAgIEludFJlY3QgdHJvdWdoUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7IC8vIFRo
aXMgaXMgcmVsYXRpdmUgdG8gcmVjdC4KKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IDA7CisgICAg
aWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKKyAgICAgICAgd2lkZ2V0ID0gZ3Rr
SFNjYWxlKCk7CisgICAgICAgIHRyb3VnaFJlY3QuaW5mbGF0ZVgoLWd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCktPnh0aGlja25lc3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpZGdldCA9
IGd0a1ZTY2FsZSgpOworICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZKC1ndGtfd2lkZ2V0X2dl
dF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKKyAgICB9CisgICAgZ3RrX3dpZGdldF9zZXRf
ZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5m
by5jb250ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJl
Y3QsIHdpZGdldCwgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsK
KyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRGb2N1cyhJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgd2lkZ2V0LCBnZXRHdGtT
dGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgInRyb3VnaCIpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCk7CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBw
YXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYlBhcnQpOworCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOworICAgIGNvbnN0IGNo
YXIqIGRldGFpbCA9IDA7CisgICAgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICB3aWRnZXQgPSBn
dGtIU2NhbGUoKTsKKyAgICAgICAgZGV0YWlsID0gImhzY2FsZSI7CisgICAgICAgIG9yaWVudGF0
aW9uID0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
d2lkZ2V0ID0gZ3RrVlNjYWxlKCk7CisgICAgICAgIGRldGFpbCA9ICJ2c2NhbGUiOworICAgICAg
ICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsKKyAgICB9CisgICAgZ3Rr
X3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0
eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICAvLyBPbmx5IHNvbWUgdGhlbWVzIGhhdmUgc2xp
ZGVyIHRodW1icyByZXNwb25kIHRvIGNsaWNrcyBhbmQgc29tZSBkb24ndC4gVGhpcyBpbmZvcm1h
dGlvbiBpcworICAgIC8vIGdhdGhlcmVkIHZpYSB0aGUgJ2FjdGl2YXRlLXNsaWRlcicgcHJvcGVy
dHksIGJ1dCBpdCdzIGRlcHJlY2F0ZWQgaW4gR1RLKyAyLjIyIGFuZCByZW1vdmVkIGluCisgICAg
Ly8gR1RLKyAzLnguIFRoZSBkcmF3YmFjayBvZiBub3QgaG9ub3JpbmcgaXQgaXMgdGhhdCBzbGlk
ZXIgdGh1bWJzIGNoYW5nZSBjb2xvciB3aGVuIHlvdSBjbGljaworICAgIC8vIG9uIHRoZW0uIAor
ICAgIEludFJlY3QgdGh1bWJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKKyAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2xpZGVyKHRodW1iUmVjdCwgd2lkZ2V0LCBnZXRHdGtT
dGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgR1RLX1NIQURPV19PVVQsIGRldGFpbCwgb3JpZW50YXRp
b24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7Cisg
ICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQg
IT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IGd0a0hTY2FsZSgpIDogZ3RrVlNjYWxlKCk7
CisgICAgaW50IGxlbmd0aCA9IDAsIHdpZHRoID0gMDsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl9sZW5ndGgiLCAmbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfd2lkdGgiLCAmd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAocGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsK
KyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKK30KKworI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtQcm9ncmVzc0Jhcigp
OworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24o
cmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKKyAgICBJ
bnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOworICAg
IHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFByb2dyZXNzQmFyUmVjdCwgd2lkZ2V0LCBH
VEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAidHJvdWdoIik7CisKKyAgICBHdGtTdHls
ZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOworICAgIEludFJlY3QgcHJv
Z3Jlc3NSZWN0KGZ1bGxQcm9ncmVzc0JhclJlY3QpOworICAgIHByb2dyZXNzUmVjdC5pbmZsYXRl
WCgtc3R5bGUtPnh0aGlja25lc3MpOworICAgIHByb2dyZXNzUmVjdC5pbmZsYXRlWSgtc3R5bGUt
Pnl0aGlja25lc3MpOworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxh
dGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOworCisgICAgaWYgKCFw
cm9ncmVzc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94
KHByb2dyZXNzUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfUFJFTElHSFQsIEdUS19TSEFET1dfT1VU
LCAiYmFyIik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgR3RrU3R5bGUqIGd0a1N0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrU3BpbkJ1dHRvbigpKTsKKyAgICBjb25zdCBQYW5n
b0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uID0gZ3RrU3R5bGUtPmZvbnRfZGVzYzsK
KyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZShmb250
RGVzY3JpcHRpb24pOworCisgICAgLy8gRm9yY2UgYW4gb2RkIGFycm93IHNpemUgaGVyZS4gR1RL
KyAzLnggZm9yY2VzIGV2ZW4gaW4gdGhpcyBjYXNlLCBidXQKKyAgICAvLyBOb2Rva2EtYmFzZWQg
dGhlbWVzIGxvb2sgaW5jb3JyZWN0IHdpdGggYW4gZXZlbiBhcnJvdyBzaXplLgorICAgIGludCB3
aWR0aCA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dTaXpl
KTsKKyAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+eHRoaWNrbmVz
czsKKworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5
bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxzIG9uIHRoZSB0b3AgYW5k
IGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCisgICAgLy8gaXMgYmVjYXVz
ZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBib3ggYm9yZGVycywgYnV0
IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKKyAgICAvLyBzcGluIGJ1dHRvbiBpbnNpZGUgdGhl
IHRleHQgYm94LgorICAgIEludFJlY3QgZXhwYW5kZWRSZWN0KHJlY3QpOworICAgIGV4cGFuZGVk
UmVjdC5pbmZsYXRlWSgyKTsKKyAgICBleHBhbmRlZFJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgp
ICsgMik7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQocGFpbnRJ
bmZvLmNvbnRleHQsIGV4cGFuZGVkUmVjdCk7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtT
cGluQnV0dG9uKCk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICBJ
bnRSZWN0IGZ1bGxTcGluQnV0dG9uUmVjdChJbnRQb2ludCgpLCBleHBhbmRlZFJlY3Quc2l6ZSgp
KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxTcGluQnV0dG9uUmVjdCwgd2lk
Z2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic3BpbmJ1dHRvbiIpOworCisg
ICAgYm9vbCB1cFByZXNzZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVj
dCk7CisgICAgYm9vbCB1cEhvdmVyZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRl
ck9iamVjdCk7CisgICAgYm9vbCBjb250cm9sQWN0aXZlID0gaXNFbmFibGVkKHJlbmRlck9iamVj
dCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7CisgICAgR3RrU2hhZG93VHlw
ZSBzaGFkb3dUeXBlID0gdXBQcmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VU
OworCisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9JTlNFTlNJVElWRTsK
KyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAgICAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9i
amVjdCkgJiYgdXBQcmVzc2VkKQorICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0FD
VElWRTsKKyAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkgJiYgdXBIb3Zl
cmVkKQorICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOworICAgIH0K
KyAgICBJbnRSZWN0IHRvcFJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7Cisg
ICAgdG9wUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC8gMik7CisgICAgd2lk
Z2V0Q29udGV4dC5ndGtQYWludEJveCh0b3BSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93
VHlwZSwgInNwaW5idXR0b25fdXAiKTsKKworICAgIC8vIFRoZSBhcnJvdyBzaXplL3Bvc2l0aW9u
IGNhbGN1bGF0aW9uIGhlcmUgaXMgYmFzZWQgb24gdGhlIGFyYml0cmFyeSBneW1uYXN0aWNzIHRo
YXQgaGFwcGVuCisgICAgLy8gaW4gZ3Rrc3BpbmJ1dHRvbi5jLiBJdCBpc24ndCBwcmV0dHkgdGhl
cmUgYW5kIGl0IGlzbid0IHByZXR0eSBoZXJlLiBUaGlzIG1hbmFnZXMgdG8gbWFrZQorICAgIC8v
IHRoZSBidXR0b24gbG9vayBuYXRpdmUgZm9yIG1hbnkgdGhlbWVzIHRob3VnaC4KKyAgICBJbnRS
ZWN0IGFycm93UmVjdDsKKyAgICBpbnQgYXJyb3dTaXplID0gKGV4cGFuZGVkUmVjdC53aWR0aCgp
IC0gMykgLyAyOworICAgIGFycm93U2l6ZSAtPSAoYXJyb3dTaXplICUgMikgLSAxOyAvLyBGb3Jj
ZSBvZGQuCisgICAgYXJyb3dSZWN0LnNldFdpZHRoKGFycm93U2l6ZSk7CisgICAgYXJyb3dSZWN0
LnNldEhlaWdodChhcnJvd1NpemUpOworICAgIGFycm93UmVjdC5tb3ZlKChleHBhbmRlZFJlY3Qu
d2lkdGgoKSAtIGFycm93UmVjdC53aWR0aCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgKHRv
cFJlY3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QuaGVpZ2h0KCkpIC8gMiArIDEpOworICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBHVEtfQVJST1dfVVAsICJzcGluYnV0dG9uIik7CisKKyAgICBzaGFkb3dUeXBlID0g
aXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCA/IEdUS19TSEFET1dfSU4gOiBH
VEtfU0hBRE9XX09VVDsKKyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAgICAgICBpZiAoaXNQ
cmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCkKKyAgICAgICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJP
YmplY3QpICYmICF1cEhvdmVyZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVf
UFJFTElHSFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9OT1JNQUw7CisgICAgfQorICAgIEludFJlY3QgYm90dG9tUmVjdChJbnRQb2ludCgwLCBleHBh
bmRlZFJlY3QuaGVpZ2h0KCkgLyAyKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7CisgICAgYm90dG9t
UmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC0gYm90dG9tUmVjdC55KCkpOwor
ICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYm90dG9tUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5
cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX2Rvd24iKTsKKworICAgIGFycm93UmVjdC5zZXRZ
KGFycm93UmVjdC55KCkgKyBib3R0b21SZWN0LnkoKSAtIDEpOworICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBH
VEtfQVJST1dfRE9XTiwgInNwaW5idXR0b24iKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
R1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0
VHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBn
aW50IGljb25TaXplKQoreworICAgIEFTU0VSVCh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NPTlRB
SU5FUiB8fCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKTsKKworICAgIFJlbmRlclRoZW1l
R3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLmdldCgpKTsKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfQ09OVEFJTkVSID8gR1RLX1dJREdFVCh0aGVtZS0+Z3RrQ29udGFpbmVyKCkp
IDogdGhlbWUtPmd0a0VudHJ5KCk7CisKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZSh3aWRnZXQpOworICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfc3R5bGVf
bG9va3VwX2ljb25fc2V0KHN0eWxlLCBpY29uTmFtZSk7CisgICAgcmV0dXJuIGFkb3B0R1JlZihn
dGtfaWNvbl9zZXRfcmVuZGVyX2ljb24oaWNvblNldCwgc3R5bGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlv
bj4oZGlyZWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxHdGtTdGF0ZVR5cGU+KHN0YXRlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNv
blNpemUpLCAwLCAwKSk7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja1N5bWJvbGlj
SWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogc3ltYm9saWNJ
Y29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBnaW50IGRpcmVjdGlv
biwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sKKyAgICByZXR1cm4gZ2V0U3RvY2tJY29u
Rm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGRpcmVjdGlv
biwgc3RhdGUsIGljb25TaXplKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdp
ZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKK30KKworQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJu
IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnko
KTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RB
VEVfQUNUSVZFXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0g
Z3RrVHJlZVZpZXcoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+
YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6aW5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtX
aWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Cit9CisKK0NvbG9yIFJlbmRl
clRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0
a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30K
KworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygp
OworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0W0dUS19TVEFU
RV9BQ1RJVkVdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNz
c1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7CisgICAgY2FzZSBD
U1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0X2dldF9z
dHlsZShndGtCdXR0b24oKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsKKyAgICBjYXNlIENTU1Zh
bHVlQ2FwdGlvbnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0X2dldF9zdHls
ZShndGtFbnRyeSgpKS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKK3sKKyAgICAvLyBG
SVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkgdGlt
ZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KKyAgICByZW5kZXJUaGVt
ZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBXaWRn
ZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9yZWFsaXplKHdpZGdldCk7
CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJn
LWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3Rr
OjpzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtXaWRn
ZXQqIHdpbmRvdykgY29uc3QKK3sKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHdpbmRvdyksIHdpZGdldCk7CisgICAgc2V0dXBXaWRnZXQod2lkZ2V0KTsKKworICAgIC8vIEZJ
WE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB0aGUgY29udGFpbmlu
ZyB3aW5kb3cgb3IgcGFyZW50IGNvbnRhaW5lci4KKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpZGdl
dCwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIGNvbnN0X2Nh
c3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVH
dGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29udGFpbmVyKQorICAg
ICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CisKKyAgICBtX2d0a1dpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIGd0a193aWRnZXRfc2V0X2NvbG9ybWFwKG1f
Z3RrV2luZG93LCBtX2NvbG9ybWFwKTsKKyAgICBzZXR1cFdpZGdldChtX2d0a1dpbmRvdyk7Cisg
ICAgZ3RrX3dpZGdldF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemlsbGFHdGtXaWRnZXQiKTsK
KworICAgIG1fZ3RrQ29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOworICAgIHNldHVwV2lkZ2V0
QW5kQWRkVG9Db250YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2luZG93KTsKKyAgICByZXR1
cm4gbV9ndGtDb250YWluZXI7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0J1
dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQnV0dG9uKQorICAgICAgICByZXR1cm4gbV9n
dGtCdXR0b247CisgICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOworICAgIHNldHVw
V2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAg
ICByZXR1cm4gbV9ndGtCdXR0b247Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0
a0VudHJ5KCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtFbnRyeSkKKyAgICAgICAgcmV0dXJuIG1f
Z3RrRW50cnk7CisgICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBzZXR1cFdp
ZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5lcigpKTsKKyAgICBy
ZXR1cm4gbV9ndGtFbnRyeTsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVHJl
ZVZpZXcoKSBjb25zdAoreworICAgIGlmIChtX2d0a1RyZWVWaWV3KQorICAgICAgICByZXR1cm4g
bV9ndGtUcmVlVmlldzsKKyAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3RyZWVfdmlld19uZXcoKTsK
KyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJlZVZpZXcsIGd0a0NvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKK30KKworR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrVlNjYWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtWU2NhbGUpCisg
ICAgICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKKyAgICBtX2d0a1ZTY2FsZSA9IGd0a192c2NhbGVf
bmV3KDApOworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtWU2NhbGUsIGd0
a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtWU2NhbGU7Cit9CisKK0d0a1dpZGdldCog
UmVuZGVyVGhlbWVHdGs6Omd0a0hTY2FsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrSFNjYWxl
KQorICAgICAgICByZXR1cm4gbV9ndGtIU2NhbGU7CisgICAgbV9ndGtIU2NhbGUgPSBndGtfaHNj
YWxlX25ldygwKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrSFNjYWxl
LCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrSFNjYWxlOworfQorCitHdGtXaWRn
ZXQqIFJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1f
Z3RrUmFkaW9CdXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG1f
Z3RrUmFkaW9CdXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldygwKTsKKyAgICBzZXR1cFdpZGdl
dEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUmFkaW9CdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAg
ICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0
azo6Z3RrQ2hlY2tCdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a0NoZWNrQnV0dG9uKQor
ICAgICAgICByZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKKyAgICBtX2d0a0NoZWNrQnV0dG9uID0g
Z3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVy
KG1fZ3RrQ2hlY2tCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtDaGVj
a0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrUHJvZ3Jlc3NCYXIo
KSBjb25zdAoreworICAgIGlmIChtX2d0a1Byb2dyZXNzQmFyKQorICAgICAgICByZXR1cm4gbV9n
dGtQcm9ncmVzc0JhcjsKKyAgICBtX2d0a1Byb2dyZXNzQmFyID0gZ3RrX3Byb2dyZXNzX2Jhcl9u
ZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUHJvZ3Jlc3NCYXIs
IGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsKK30KKworc3Rh
dGljIHZvaWQgZ2V0R3RrQ29tYm9Cb3hCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVy
IHRhcmdldCkKK3sKKyAgICBpZiAoIUdUS19JU19UT0dHTEVfQlVUVE9OKHdpZGdldCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBHdGtXaWRnZXQqKiB3aWRnZXRUYXJnZXQgPSBzdGF0aWNfY2FzdDxH
dGtXaWRnZXQqKj4odGFyZ2V0KTsKKyAgICAqd2lkZ2V0VGFyZ2V0ID0gd2lkZ2V0OworfQorCit0
eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiBhcnJvdzsKKyAgICBHdGtXaWRnZXQqIHNl
cGFyYXRvcjsKK30gQ29tYm9Cb3hXaWRnZXRQaWVjZXM7CisKK3N0YXRpYyB2b2lkIGdldEd0a0Nv
bWJvQm94UGllY2VzKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlm
IChHVEtfSVNfQVJST1cod2lkZ2V0KSkgeworICAgICAgICBzdGF0aWNfY2FzdDxDb21ib0JveFdp
ZGdldFBpZWNlcyo+KGRhdGEpLT5hcnJvdyA9IHdpZGdldDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSAKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+c2VwYXJhdG9yID0gd2lkZ2V0OworfQor
CitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fZ3RrQ29tYm9Cb3gpCisgICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94OworICAgIG1f
Z3RrQ29tYm9Cb3ggPSBndGtfY29tYm9fYm94X25ldygpOworICAgIHNldHVwV2lkZ2V0QW5kQWRk
VG9Db250YWluZXIobV9ndGtDb21ib0JveCwgZ3RrQ29udGFpbmVyKCkpOworICAgIHJldHVybiBt
X2d0a0NvbWJvQm94OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpyZWZyZXNoQ29tYm9Cb3hD
aGlsZHJlbigpIGNvbnN0Cit7CisgICAgZ3RrQ29tYm9Cb3goKTsgLy8gRW5zdXJlIHRoYXQgd2Un
dmUgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveC4KKworICAgIC8vIFNvbWUgdGhlbWVzIGxvb2sg
YXQgd2lkZ2V0IGFuY2VzdHJ5IHRvIGRldGVybWluZSBob3cgdG8gcmVuZGVyIHdpZGdldHMsIHNv
CisgICAgLy8gZ2V0IHRoZSBHdGtCdXR0b24gdGhhdCBpcyB0aGUgYWN0dWFsIGNoaWxkIG9mIHRo
ZSBjb21ibyBib3guCisgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihtX2d0
a0NvbWJvQm94KSwgZ2V0R3RrQ29tYm9Cb3hCdXR0b24sICZtX2d0a0NvbWJvQm94QnV0dG9uKTsK
KyAgICBBU1NFUlQobV9ndGtDb21ib0JveEJ1dHRvbik7CisgICAgc2V0dXBXaWRnZXQobV9ndGtD
b21ib0JveEJ1dHRvbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCht
X2d0a0NvbWJvQm94QnV0dG9uKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0Nv
bWJvQm94QnV0dG9uKSk7CisKKyAgICBDb21ib0JveFdpZGdldFBpZWNlcyBwaWVjZXMgPSB7IDAs
IDAgfTsKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbkNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RL
X0JJTihndGtDb21ib0JveEJ1dHRvbigpKSk7CisgICAgaWYgKEdUS19JU19IQk9YKGJ1dHRvbkNo
aWxkKSkKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihidXR0b25D
aGlsZCksIGdldEd0a0NvbWJvQm94UGllY2VzLCAmcGllY2VzKTsKKyAgICBlbHNlIGlmIChHVEtf
SVNfQVJST1coYnV0dG9uQ2hpbGQpKQorICAgICAgICBwaWVjZXMuYXJyb3cgPSBidXR0b25DaGls
ZDsKKworICAgIEFTU0VSVChwaWVjZXMuYXJyb3cpOworICAgIG1fZ3RrQ29tYm9Cb3hBcnJvdyA9
IHBpZWNlcy5hcnJvdzsKKyAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94QXJyb3cpOworICAg
IC8vIFdoZW4gdGhlIHN0eWxlIGNoYW5nZXMsIHRoZSBjb21ibyBib3ggbWF5IGRlc3Ryb3kgaXRz
IGNoaWxkcmVuLgorICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtD
b21ib0JveEFycm93KSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94
QXJyb3cpKTsKKworICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSBwaWVjZXMuc2VwYXJhdG9y
OworICAgIGlmIChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSB7CisgICAgICAgIHNldHVwV2lkZ2V0
KG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpOworICAgICAgICAvLyBXaGVuIHRoZSBzdHlsZSBjaGFu
Z2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4KKyAgICAgICAgZ19v
YmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSk7Cisg
ICAgfQorfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveEJ1dHRvbigp
IGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29tYm9Cb3hCdXR0b24pCisgICAgICAgIHJldHVybiBt
X2d0a0NvbWJvQm94QnV0dG9uOworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAg
QVNTRVJUKG1fZ3RrQ29tYm9Cb3hCdXR0b24pOworICAgIHJldHVybiBtX2d0a0NvbWJvQm94QnV0
dG9uOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveEFycm93KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9ndGtDb21ib0JveEFycm93KQorICAgICAgICByZXR1cm4gbV9n
dGtDb21ib0JveEFycm93OworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAgQVNT
RVJUKG1fZ3RrQ29tYm9Cb3hBcnJvdyk7CisgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hBcnJvdzsK
K30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hTZXBhcmF0b3IoKSBj
b25zdAoreworICAgIC8vIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgbWF5IGJlIG51bGwgZWl0aGVy
IGJlY2F1c2Ugd2UgaGF2ZW4ndCBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94CisgICAgLy8gb3Ig
YmVjYXVzZSB0aGUgY29tYm8gYm94ZXMgaW4gdGhpcyB0aGVtZSBkb24ndCBoYXZlIHNlcGFyYXRv
cnMuIElmIG1fZ3RrQ29tYm9Cb3hBcnJvdworICAgIC8vIGFycm93IGlzbid0IG51bGwsIHdlIGRl
ZmluaXRlbHkgaGF2ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94LgorICAgIGlmIChtX2d0a0Nv
bWJvQm94QXJyb3cgfHwgbV9ndGtDb21ib0JveEJ1dHRvbikKKyAgICAgICAgcmV0dXJuIG1fZ3Rr
Q29tYm9Cb3hTZXBhcmF0b3I7CisgICAgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKTsKKyAgICBy
ZXR1cm4gbV9ndGtDb21ib0JveFNlcGFyYXRvcjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVt
ZUd0azo6Z3RrSFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrSFNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKKyAgICBtX2d0a0hTY3JvbGxiYXIgPSBn
dGtfaHNjcm9sbGJhcl9uZXcoMCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lciht
X2d0a0hTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtIU2Nyb2xs
YmFyOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtWU2Nyb2xsYmFyKCkgY29u
c3QKK3sKKyAgICBpZiAobV9ndGtWU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9ndGtWU2Ny
b2xsYmFyOworICAgIG1fZ3RrVlNjcm9sbGJhciA9IGd0a192c2Nyb2xsYmFyX25ldygwKTsKKyAg
ICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjcm9sbGJhciwgZ3RrQ29udGFp
bmVyKCkpOworICAgIHJldHVybiBtX2d0a1ZTY3JvbGxiYXI7Cit9CisKK0d0a1dpZGdldCogUmVu
ZGVyVGhlbWVHdGs6Omd0a1NwaW5CdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a1NwaW5C
dXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247CisgICAgbV9ndGtTcGluQnV0
dG9uID0gZ3RrX3NwaW5fYnV0dG9uX25ld193aXRoX3JhbmdlKDAsIDEwLCAxKTsKKyAgICBzZXR1
cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrU3BpbkJ1dHRvbiwgZ3RrQ29udGFpbmVyKCkp
OworICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE3ZjVhMmEyZDMwMDIwZDgyMjQzY2UyYWFmOGIy
MDU2MGZhZDUxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGszLmNwcApAQCAtMCwwICsxLDEwMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWVHdGsuaCIKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorCisjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWludElu
Zm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGdkay9nZGsuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBp
cyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVk
IGFzIE1JTl9BUlJPV19TSVpFIGluIGd0a2Fycm93LmMuCitzdGF0aWMgY29uc3QgaW50IG1pbkFy
cm93U2l6ZSA9IDE1OworLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdU
SyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0
dG9uLmMuCitzdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OworCit0
eXBlZGVmIEhhc2hNYXA8R1R5cGUsIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiA+IFN0eWxlQ29u
dGV4dE1hcDsKK3N0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpOworCitz
dGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyop
Cit7CisgICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZUNvbnRl
eHRNYXAoKS5lbmQoKTsKKyAgICBmb3IgKFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisg
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFsdWUuZ2V0KCkpOwor
CisgICAgUGFnZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBhZ2VzKCk7Cit9CisK
K3N0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHlsZUNvbnRleHRNYXAsIG1hcCwgKCkpOworCisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAg
IEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstdGhlbWUtbmFtZSIs
IEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9yLXNjaGVtZSIsIEdfQ0FMTEJB
Q0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgR3RrU3R5bGVDb250ZXh0
KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKK3sKKyAgICBTdHlsZUNvbnRleHRN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwg
MCk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CisKKyAgICBHdGtXaWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dp
ZGdldF9wYXRoX25ldygpOworICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3
aWRnZXRUeXBlKTsKKworICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NDUk9MTEJBUikK
KyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlM
RV9DTEFTU19TQ1JPTExCQVIpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
RU5UUlkpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBH
VEtfU1RZTEVfQ0xBU1NfRU5UUlkpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZ
UEVfQVJST1cpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAw
LCAiYXJyb3ciKTsKKyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0JVVFRPTikK
KyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlM
RV9DTEFTU19CVVRUT04pOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0NB
TEUpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtf
U1RZTEVfQ0xBU1NfU0NBTEUpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
U0VQQVJBVE9SKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwg
MCwgR1RLX1NUWUxFX0NMQVNTX1NFUEFSQVRPUik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9
PSBHVEtfVFlQRV9QUk9HUkVTU19CQVIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2Fk
ZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOworICAgIGVsc2Ug
aWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU1BJTl9CVVRUT04pCisgICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU1BJTkJVVFRP
Tik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9UUkVFX1ZJRVcpCisgICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xB
U1NfVklFVyk7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRU
T04pCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtf
U1RZTEVfQ0xBU1NfQ0hFQ0spOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
UkFESU9fQlVUVE9OKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0
aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKKworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKKyAgICBndGtf
d2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsKKworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBj
b250ZXh0OworICAgIHJldHVybiBjb250ZXh0LmdldCgpOworfQorCitHdGtTdHlsZUNvbnRleHQq
IFJlbmRlclRoZW1lR3RrOjpndGtTY3JvbGxiYXJTdHlsZSgpCit7CisgICAgcmV0dXJuIGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9TQ1JPTExCQVIpOworfQorCisvLyBUaGlzIGlzIG5vdCBhIHN0
YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RLKyBoZWFkZXJz
IGluIFJlbmRlclRoZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGly
ZWN0aW9uKFRleHREaXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUlu
aXQoKQoreworfQorCitSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKCkKK3sKK30KKwor
I2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygp
Cit7CisgICAgR2RrUkdCQSBjb2xvcjsKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRhaW5lckNv
bnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJTkVSKTsKKworICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19T
VEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKKyAgICBtX3BhbmVsQ29sb3IgPSBjb2xvcjsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0
LCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZjb2xvcik7CisgICAgbV9zbGlkZXJDb2xvciA9IGNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5l
ckNvbnRleHQsIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmY29sb3IpOworICAgIG1fc2xpZGVy
VGh1bWJDb2xvciA9IGNvbG9yOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFkanVzdFJlY3RG
b3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJlY3QpCit7CisgICAg
Z2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUt
d2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZv
Y3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOworICAgIHJlY3QuaW5mbGF0ZShmb2N1c1dp
ZHRoICsgZm9jdXNQYWQpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50
UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSAwOworICAgIGJvb2wgY2hlY2tJbnRlcmlv
ckZvY3VzID0gZmFsc2U7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgQ2hlY2ti
b3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OIDogR1RL
X1RZUEVfUkFESU9fQlVUVE9OKTsKKworICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Cisg
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNw
YWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7CisgICAgICAgIHJlY3QuaW5mbGF0ZShp
bmRpY2F0b3JTcGFjaW5nKTsKKworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTbGlkZXJWZXJ0
aWNhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICAgICAgY29udGV4
dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKKyAgICBjYXNl
IE1lbnVsaXN0UGFydDoKKyAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQ
RV9CVVRUT04pOworICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6Cisg
ICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOworICAgICAg
ICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlm
IChjaGVja0ludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsK
KyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1m
b2N1cyIsICZpbnRlcmlvckZvY3VzLCBOVUxMKTsKKyAgICAgICAgaWYgKGludGVyaW9yRm9jdXMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250
ZXh0LCByZWN0KTsKK30KKworc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRl
eHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICAvLyBUaGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4K
KyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3RoZXIgcG9ydHMg
aGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZp
bmVkIGJ5IEdUSysuCisgICAgLy8gR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZl
IGxvb2suCisgICAgLy8gSXQgY291bGQgYmUgbWFkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZh
bHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUgY29tcGF0aWJpbGl0eS4KKyAg
ICBnaW50IGluZGljYXRvclNpemU7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNv
bnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKKworICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisKKyAgICBpZiAoc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0
b3JTaXplLCBGaXhlZCkpOworfQorCitzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5k
ZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJl
Y3QpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdp
ZGdldFR5cGUpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICAv
LyBTb21lIHRoZW1lcyBkbyBub3QgcmVuZGVyIGxhcmdlIHRvZ2dsZSBidXR0b25zIHByb3Blcmx5
LCBzbyB3ZSBzaW1wbHkKKyAgICAvLyBzaHJpbmsgdGhlIHJlY3RhbmdsZSBiYWNrIGRvd24gdG8g
dGhlIGRlZmF1bHQgc2l6ZSBhbmQgdGhlbiBjZW50ZXIgaXQKKyAgICAvLyBpbiB0aGUgZnVsbCB0
b2dnbGUgYnV0dG9uIHJlZ2lvbi4gVGhlIHJlYXNvbiBmb3Igbm90IHNpbXBseSBmb3JjaW5nIHRv
Z2dsZQorICAgIC8vIGJ1dHRvbnMgdG8gYmUgYSBzbWFsbGVyIHNpemUgaXMgdGhhdCB3ZSBkb24n
dCB3YW50IHRvIGJyZWFrIHNpdGUgbGF5b3V0cy4KKyAgICBnaW50IGluZGljYXRvclNpemU7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIs
ICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKKyAgICBJbnRSZWN0IHJlY3QoZnVsbFJlY3QpOworICAg
IGlmIChyZWN0LndpZHRoKCkgPiBpbmRpY2F0b3JTaXplKSB7CisgICAgICAgIHJlY3QuaW5mbGF0
ZVgoLShyZWN0LndpZHRoKCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOworICAgICAgICByZWN0LnNl
dFdpZHRoKGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3Qud2lkdGgoKSB3YXMgZXF1YWwg
dG8gaW5kaWNhdG9yU2l6ZSArIDEuCisgICAgfQorCisgICAgaWYgKHJlY3QuaGVpZ2h0KCkgPiBp
bmRpY2F0b3JTaXplKSB7CisgICAgICAgIHJlY3QuaW5mbGF0ZVkoLShyZWN0LmhlaWdodCgpIC0g
aW5kaWNhdG9yU2l6ZSkgLyAyKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQoaW5kaWNhdG9yU2l6
ZSk7IC8vIEluIGNhc2UgcmVjdC5oZWlnaHQoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6ZSAr
IDEuCisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OID8gR1RL
X1NUWUxFX0NMQVNTX0NIRUNLIDogR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKKworICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCB0
aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdI
VDsKKyAgICBpZiAodGhlbWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5kZXJPYmplY3QpKQorICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTkNPTlNJU1RFTlQ7CisgICAgZWxzZSBpZiAodGhl
bWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19BQ1RJVkU7CisgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdz
KSk7CisKKyAgICBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04pCisgICAg
ICAgIGd0a19yZW5kZXJfY2hlY2soY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgZWxzZQorICAgICAgICBndGtfcmVuZGVyX29wdGlvbihjb250ZXh0LCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGlmICh0aGVtZS0+aXNG
b2N1c2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgSW50UmVjdCBpbmRpY2F0b3JSZWN0KHJl
Y3QpOworICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7CisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNhdG9y
U3BhY2luZywgTlVMTCk7CisgICAgICAgIGluZGljYXRvclJlY3QuaW5mbGF0ZShpbmRpY2F0b3JT
cGFjaW5nKTsKKyAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGluZGljYXRvclJlY3QueCgpLCBpbmRpY2F0
b3JSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3JSZWN0LndpZHRo
KCksIGluZGljYXRvclJlY3QuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc2V0VG9nZ2xlU2l6ZShn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKSwgc3R5bGUpOworfQorCitib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9DSEVDS19CVVRUT04sIHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc2V0
VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUkFESU9fQlVUVE9OKSwgc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9SQURJT19CVVRUT04sIHJlbmRl
ck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3QgYnV0dG9uUmVjdChy
ZWN0KTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQo
cmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkK
KyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBp
ZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmpl
Y3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+
KGZsYWdzKSk7CisKKyAgICBpZiAodGhlbWUtPmlzRGVmYXVsdChyZW5kZXJPYmplY3QpKSB7Cisg
ICAgICAgIEd0a0JvcmRlciogYm9yZGVyUHRyID0gMDsKKyAgICAgICAgR3RrQm9yZGVyIGJvcmRl
ciA9IHsgMSwgMSwgMSwgMSB9OworCisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LCAiZGVmYXVsdC1ib3JkZXIiLCAmYm9yZGVyUHRyLCBOVUxMKTsKKyAgICAgICAg
aWYgKGJvcmRlclB0cikgeworICAgICAgICAgICAgYm9yZGVyID0gKmJvcmRlclB0cjsKKyAgICAg
ICAgICAgIGd0a19ib3JkZXJfZnJlZShib3JkZXJQdHIpOworICAgICAgICB9CisKKyAgICAgICAg
YnV0dG9uUmVjdC5tb3ZlKGJvcmRlci5sZWZ0LCBib3JkZXIudG9wKTsKKyAgICAgICAgYnV0dG9u
UmVjdC5zZXRXaWR0aChidXR0b25SZWN0LndpZHRoKCkgLSAoYm9yZGVyLmxlZnQgKyBib3JkZXIu
cmlnaHQpKTsKKyAgICAgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQoYnV0dG9uUmVjdC5oZWlnaHQo
KSAtIChib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSkpOworCisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfREVGQVVMVCk7CisgICAg
fQorCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgp
LCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5k
ZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwg
YnV0dG9uUmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJP
YmplY3QpKSB7CisgICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgICAgIGdi
b29sZWFuIGRpc3BsYWNlRm9jdXMsIGludGVyaW9yRm9jdXM7CisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9j
dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzcGxhY2UtZm9jdXMi
LCAmZGlzcGxhY2VGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworCisgICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7CisgICAgICAgICAgICBHdGtCb3Jk
ZXIgYm9yZGVyV2lkdGg7CisgICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVy
KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSwgJmJvcmRlcldpZHRo
KTsKKworICAgICAgICAgICAgYnV0dG9uUmVjdCA9IEludFJlY3QoYnV0dG9uUmVjdC54KCkgKyBi
b3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNQYWQsIGJ1dHRvblJlY3QueSgpICsgYm9yZGVyV2lkdGgu
dG9wICsgZm9jdXNQYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25S
ZWN0LndpZHRoKCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgubGVmdCArIGJvcmRlcldp
ZHRoLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblJlY3Qu
aGVpZ2h0KCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgudG9wICsgYm9yZGVyV2lkdGgu
Ym90dG9tKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRl
KGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CisKKyAgICAgICAgaWYgKGRpc3BsYWNlRm9jdXMgJiYg
dGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgICAgICBnaW50IGNoaWxk
RGlzcGxhY2VtZW50WDsKKyAgICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOworICAg
ICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNo
aWxkRGlzcGxhY2VtZW50WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNwbGFjZW1lbnRZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgYnV0dG9u
UmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1lbnRZKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55
KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisgICAgfQorfQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9C
VVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHRE
aXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICByZW5kZXJCdXR0b24odGhpcywgY29udGV4dCwgcmVu
ZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVz
dG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZ2V0
Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGlu
dCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQoreworICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1
dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQorICAgIC8vIGRvbid0
IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4K
KyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfQ09NQk9fQk9YKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQp
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4
dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+
ZGlyZWN0aW9uKCkpKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsKKworICAgIGdib29s
ZWFuIGludGVyaW9yRm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFk
LCBOVUxMKTsKKyAgICBmb2N1cyA9IGludGVyaW9yRm9jdXMgPyBmb2N1c1dpZHRoICsgZm9jdXNQ
YWQgOiAwOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAg
IGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0
eWxlLT5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgInNlcGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7CisgICAg
Z2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIs
ICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFy
YXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCk7CisKKyAgICAvLyBHVEsrIGFsd2F5cyB1c2VzIGJvcmRlci5sZWZ0LCByZWdh
cmRsZXNzIG9mIHRleHQgZGlyZWN0aW9uLiBTZWUgZ3Rrc2VwZXJhdG9yLmMuCisgICAgaWYgKCF3
aWRlU2VwYXJhdG9ycykKKyAgICAgICAgc2VwYXJhdG9yV2lkdGggPSBib3JkZXIubGVmdDsKKwor
ICAgIHNlcGFyYXRvciA9IHNlcGFyYXRvcldpZHRoOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
cmVzdG9yZShjb250ZXh0KTsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFs
UGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEd0a0JvcmRlciBi
b3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2Vw
YXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lk
dGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgbGVmdCA9IGJvcmRlcldp
ZHRoLmxlZnQgKyBmb2N1c1dpZHRoOworICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KQorICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOworICAgIHJl
dHVybiBsZWZ0OworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEd0a0JvcmRlciBib3JkZXJX
aWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9y
V2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZv
Y3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5y
aWdodCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisg
ICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOworICAgIHJldHVy
biByaWdodDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRo
ID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0
aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNX
aWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVybiBib3JkZXJXaWR0aC50b3AgKyBmb2N1
c1dpZHRoOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBHdGtCb3JkZXIgYm9yZGVyV2lk
dGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldp
ZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1
c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAgcmV0dXJuIGJvcmRlcldpZHRoLmJvdHRvbSAr
IGZvY3VzV2lkdGg7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBHdGtUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rp
b24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgLy8gUGFpbnQg
dGhlIGJ1dHRvbi4KKyAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxlQ29udGV4dCA9IGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0
aW9uKGJ1dHRvblN0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsK
KyAgICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0LCByZW5kZXJPYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7CisKKyAgICAvLyBHZXQgdGhlIGlubmVyIHJlY3RhbmdsZS4KKyAg
ICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXJQ
dHIgPSAwOworICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OworICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXJQdHIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5n
IiwgJmZvY3VzUGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAg
ICBpZiAoaW5uZXJCb3JkZXJQdHIpIHsKKyAgICAgICAgaW5uZXJCb3JkZXIgPSAqaW5uZXJCb3Jk
ZXJQdHI7CisgICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJvcmRlclB0cik7CisgICAgfQor
CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOworICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGJ1dHRvblN0eWxlQ29udGV4dCwgc3RhdGUsICZib3Jk
ZXJXaWR0aCk7CisKKyAgICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOworICAgIEludFJlY3QgaW5u
ZXJSZWN0KHJlY3QueCgpICsgaW5uZXJCb3JkZXIubGVmdCArIGJvcmRlcldpZHRoLmxlZnQgKyBm
b2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgaW5uZXJCb3JkZXIu
dG9wICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICByZWN0LndpZHRoKCkgLSBib3JkZXJXaWR0aC5sZWZ0IC0gYm9yZGVyV2lkdGgucmlnaHQgLSBp
bm5lckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIucmlnaHQgLSAoMiAqIGZvY3VzV2lkdGgpLAor
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBib3JkZXJXaWR0aC50b3AgLSBi
b3JkZXJXaWR0aC5ib3R0b20gLSBpbm5lckJvcmRlci50b3AgLSBpbm5lckJvcmRlci5ib3R0b20g
LSAoMiAqIGZvY3VzV2lkdGgpKTsKKworICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkg
eworICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKKyAgICAgICAgZ2ludCBjaGlsZERp
c3BsYWNlbWVudFk7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25T
dHlsZUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQt
ZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2Vt
ZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAg
ICBpbm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7
CisgICAgfQorICAgIGlubmVyUmVjdC5zZXRXaWR0aChtYXgoMSwgaW5uZXJSZWN0LndpZHRoKCkp
KTsKKyAgICBpbm5lclJlY3Quc2V0SGVpZ2h0KG1heCgxLCBpbm5lclJlY3QuaGVpZ2h0KCkpKTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKwor
ICAgIC8vIFBhaW50IHRoZSBhcnJvdy4KKyAgICBHdGtTdHlsZUNvbnRleHQqIGFycm93U3R5bGVD
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0FSUk9XKTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zYXZlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ciKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19CVVRUT04pOworCisgICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdy1zY2FsaW5nIiwgJmFy
cm93U2NhbGluZywgTlVMTCk7CisKKyAgICBJbnRTaXplIGFycm93U2l6ZShtaW5BcnJvd1NpemUs
IGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVy
UmVjdC5sb2NhdGlvbigpKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIp
CisgICAgICAgIGFycm93UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lkdGgoKSAtIGFycm93U2l6
ZS53aWR0aCgpLCAwKTsKKworICAgIC8vIEdUSysgYWN0dWFsbHkgZmV0Y2hlcyB0aGUgeGFsaWdu
IGFuZCB2YWxpZ24gdmFsdWVzIGZyb20gdGhlIHdpZGdldCwgYnV0IHNpbmNlIHdlCisgICAgLy8g
ZG9uJ3QgaGF2ZSBhIHdpZGdldCBoZXJlLCB3ZSBhcmUganVzdCB1c2luZyB0aGUgZGVmYXVsdCB4
YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgb2YgMC41LgorICAgIGdpbnQgZXh0ZW50ID0gc3RkOjpt
aW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6ZS5oZWlnaHQoKSkgKiBhcnJvd1NjYWxpbmc7
CisgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJvd1NpemUud2lkdGgoKSAtIGV4dGVudCkgLyAy
LCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250ZXh0LCBzdGF0ZSk7CisgICAgZ3RrX3JlbmRl
cl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0LCBHX1BJLCBhcnJvd1Bvc2l0
aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4dGVudCk7CisKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAgIC8vIFBhaW50IHRoZSBzZXBh
cmF0b3IgaWYgbmVlZGVkLgorICAgIEd0a1N0eWxlQ29udGV4dCogc2VwYXJhdG9yU3R5bGVDb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgInNl
cGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7CisgICAgZ2ludCBzZXBh
cmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoc2VwYXJhdG9yU3R5
bGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0
b3JzIiwgJndpZGVTZXBhcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAod2lkZVNlcGFyYXRvcnMgJiYgIXNlcGFyYXRvcldp
ZHRoKSB7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVD
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlKTsKKyAgICBJbnRQ
b2ludCBzZXBhcmF0b3JQb3NpdGlvbihhcnJvd1Bvc2l0aW9uLngoKSwgaW5uZXJSZWN0LnkoKSk7
CisgICAgaWYgKHdpZGVTZXBhcmF0b3JzKSB7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RL
X1RFWFRfRElSX0xUUikKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLXNlcGFy
YXRvcldpZHRoLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRp
b24ubW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICAgICAgZ3RrX3JlbmRlcl9mcmFt
ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JXaWR0aCwgaW5uZXJSZWN0LmhlaWdodCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICAgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSwg
JnBhZGRpbmcpOworICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOworICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfYm9yZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUsICZib3JkZXIp
OworCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAg
ICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQgKyBib3JkZXIubGVmdCks
IDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKGFy
cm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgICAgICBjYWlyb19zYXZlKGNhaXJvQ29udGV4dCk7
CisKKyAgICAgICAgLy8gQW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0aGUgc2VwYXJhdG9yIGJsZWVk
aW5nIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgYmVjYXVzZSBvZiBzdWJwaXhl
bCBwb3NpdGlvbmluZy4KKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgc2Vw
YXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksIGJvcmRlci5sZWZ0LCBp
bm5lclJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19jbGlwKGNhaXJvQ29udGV4dCk7Cisg
ICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJh
dG9yUG9zaXRpb24ueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRp
b24ueCgpLCBpbm5lclJlY3QubWF4WSgpKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0Nv
bnRleHQpOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9y
U3R5bGVDb250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtTdHlsZUNv
bnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZ
KTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmpl
Y3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9
IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5k
ZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0
ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAo
aXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgaXNFbmFibGVkKHJlbmRlck9iamVjdCkpIHsKKyAg
ICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKKyAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBm
b2N1c1BhZDsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50
ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1s
aW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpOworICAgICAgICBpZiAoIWludGVyaW9yRm9jdXMpIHsKKyAgICAg
ICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICAgICAgZm9jdXNSZWN0Lmlu
ZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKKyAgICAgICAgICAgIGd0a19yZW5kZXJfZm9j
dXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgp
LCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nl
cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIENvbnRyb2xQYXJ0IHBhcnQpCit7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7
CisgICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KQorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Mo
Y29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOworICAgIGVsc2UgaWYgKHBhcnQg
PT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQp
CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVf
Q0xBU1NfVkVSVElDQUwpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVy
T2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgQVNTRVJUX1VOVVNFRChwYXJ0LCBw
YXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0
IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKKworICAgIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9k
aXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRl
eHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkg
fHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFKTsKKwor
ICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVy
X2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKworICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewor
ICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7CisgICAg
ICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShm
b2N1c1dpZHRoICsgZm9jdXNQYWQpOworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lk
dGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4
dF9yZXN0b3JlKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQ29u
dHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAg
IEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0
KTsKKworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9TQ0FMRSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJT
dHlsZUNvbnRleHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsKKworICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBpZiAoaXNQcmVzc2Vk
KHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0a19yZW5kZXJfc2xpZGVyKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAg
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gR1RLX09SSUVOVEFUSU9OX0hPUkla
T05UQUwgOiBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOworCisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNl
KCk7CisgICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBnaW50IHNs
aWRlcldpZHRoLCBzbGlkZXJMZW5ndGg7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxl
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzbGlkZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRlckxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1
bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRl
ckxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVy
V2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKHBhcnQg
PT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRo
dW1iUGFydCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7Cit9
CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVuZGVyT2Jq
ZWN0LT5pc1Byb2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1BST0dSRVNTX0JBUik7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAg
IGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShj
b250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19QUk9HUkVT
U0JBUik7CisKKworICAgIEd0a0JvcmRlciBwYWRkaW5nOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmcGFk
ZGluZyk7CisgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QocmVjdC54KCkgKyBwYWRkaW5nLmxlZnQs
IHJlY3QueSgpICsgcGFkZGluZy50b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53
aWR0aCgpIC0gKHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSAocGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSkp
OworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1Jl
Y3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOworCisgICAgaWYgKCFwcm9ncmVzc1JlY3Qu
aXNFbXB0eSgpKQorICAgICAgICBndGtfcmVuZGVyX2FjdGl2aXR5KGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NSZWN0LngoKSwgcHJv
Z3Jlc3NSZWN0LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNzUmVjdC5oZWlnaHQo
KSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZgorCitzdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb25zdCBQYW5nb0ZvbnREZXNjcmlwdGlv
biogZm9udERlc2NyaXB0aW9uOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldChjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgImZvbnQiLCAmZm9udERlc2NyaXB0aW9uLCBO
VUxMKTsKKyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6
ZShmb250RGVzY3JpcHRpb24pOworICAgIGdpbnQgYXJyb3dTaXplID0gbWF4KFBBTkdPX1BJWEVM
Uyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUpOworCisgICAgcmV0dXJuIGFycm93
U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4uCit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CisKKyAgICBHdGtC
b3JkZXIgcGFkZGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOworCisgICAgaW50IHdp
ZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCArIHBhZGRp
bmcucmlnaHQ7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworfQorCitzdGF0aWMg
dm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUgYXJyb3dUeXBl
KQoreworICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFycm93VHlwZSA9
PSBHVEtfQVJST1dfRE9XTik7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xB
U1NfQlVUVE9OKTsKKworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X2RpcmVjdGlvbihjb250ZXh0KTsKKyAgICBndWludCBzdGF0ZSA9IHN0YXRp
Y19jYXN0PGd1aW50PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dCkpOworICAg
IGlmICghKHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUpKSB7CisgICAgICAgIGlm
ICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmICgoYXJy
b3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FS
Uk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVj
dCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpIHsKKyAgICAg
ICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBC
dXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgICAgIHx8IChhcnJv
d1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRIb3Zl
cmVkKHJlbmRlck9iamVjdCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9G
TEFHX1BSRUxJR0hUOworICAgICAgICB9CisgICAgfQorICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihzdGF0ZSkpOworCisg
ICAgLy8gUGFpbnQgYnV0dG9uLgorICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKKyAgICBn
dWludCBqdW5jdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9qdW5jdGlvbl9zaWRlcyhjb250
ZXh0KTsKKyAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkKKyAgICAgICAganVuY3Rp
b24gfD0gR1RLX0pVTkNUSU9OX0JPVFRPTTsKKyAgICBlbHNlIHsKKyAgICAgICAganVuY3Rpb24g
fD0gR1RLX0pVTkNUSU9OX1RPUDsKKyAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKDAsIHJlY3QuaGVp
Z2h0KCkgLyAyKTsKKyAgICB9CisgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQo
KSAvIDIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9qdW5jdGlvbl9zaWRlcyhjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlvblNpZGVzPihqdW5jdGlvbikpOworCisgICAgZ3RrX3Jl
bmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0Lndp
ZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0
LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWln
aHQoKSk7CisKKyAgICAvLyBQYWludCBhcnJvdyBjZW50ZXJlZCBpbnNpZGUgYnV0dG9uLgorICAg
IC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBndGtzcGluYnV0dG9uLmMgY29kZS4KKyAgICBJbnRS
ZWN0IGFycm93UmVjdDsKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChhcnJvd1R5cGUgPT0g
R1RLX0FSUk9XX1VQKSB7CisgICAgICAgIGFuZ2xlID0gMDsKKyAgICAgICAgYXJyb3dSZWN0LnNl
dFkocmVjdC55KCkpOworICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkg
LyAyIC0gMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5nbGUgPSBHX1BJOworICAgICAgICBh
cnJvd1JlY3Quc2V0WShyZWN0LnkoKSArIGJ1dHRvblJlY3QueSgpKTsKKyAgICAgICAgYXJyb3dS
ZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gYXJyb3dSZWN0LnkoKSAtIDIpOworICAgIH0K
KyAgICBhcnJvd1JlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0gMyk7CisgICAgaWYgKGRpcmVj
dGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0Lngo
KSArIDEpOworICAgIGVsc2UKKyAgICAgICAgYXJyb3dSZWN0LnNldFgocmVjdC54KCkgKyAyKTsK
KworICAgIGdpbnQgd2lkdGggPSBhcnJvd1JlY3Qud2lkdGgoKSAvIDI7CisgICAgd2lkdGggLT0g
d2lkdGggJSAyIC0gMTsgLy8gRm9yY2Ugb2RkLgorICAgIGdpbnQgaGVpZ2h0ID0gKHdpZHRoICsg
MSkgLyAyOworCisgICAgYXJyb3dSZWN0Lm1vdmUoKGFycm93UmVjdC53aWR0aCgpIC0gd2lkdGgp
IC8gMiwgKGFycm93UmVjdC5oZWlnaHQoKSAtIGhlaWdodCkgLyAyKTsKKyAgICBndGtfcmVuZGVy
X2Fycm93KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgYW5nbGUsIGFycm93UmVjdC54KCksIGFycm93UmVjdC55KCksIHdpZHRoKTsKKworICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtT
dHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJTl9CVVRU
T04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBHdGtUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKKworICAg
IGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlz
UmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFU
RV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfRU5UUlkpOworCisgICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29u
dGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19VUCk7CisgICAg
cGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludElu
Zm8sIHJlY3QsIEdUS19BUlJPV19ET1dOKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVm
PiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIq
IGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sK
KyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlw
ZSk7CisgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19zdHlsZV9jb250ZXh0X2xvb2t1cF9p
Y29uX3NldChjb250ZXh0LCBpY29uTmFtZSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KGNvbnRleHQpOworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmIChzdGF0ZSA9PSBHVEtf
U1RBVEVfUFJFTElHSFQpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hU
OworICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJVElWRSkKKyAgICAgICAg
ZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3Mp
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOworICAgIEdka1BpeGJ1ZiogaWNvbiA9
IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbl9waXhidWYoaWNvblNldCwgY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGFkb3B0R1JlZihpY29uKTsKK30KKworR1Jl
ZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3
aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyICpmYWxs
YmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25T
aXplKQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3
aWRnZXRUeXBlKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAg
ICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKHN0YXRlID09IEdUS19TVEFURV9QUkVMSUdIVCkK
KyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgZWxzZSBpZiAo
c3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19JTlNFTlNJVElWRTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVj
dGlvbj4oZGlyZWN0aW9uKSk7CisgICAgR3RrSWNvbkluZm8qIGluZm8gPSBndGtfaWNvbl90aGVt
ZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBzeW1ib2xpY0ljb25O
YW1lLCBpY29uU2l6ZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3RrSWNvbkxvb2t1cEZsYWdzPihH
VEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHIHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NJWkUpKTsK
KyAgICBHZGtQaXhidWYqIGljb24gPSAwOworICAgIGlmIChpbmZvKSB7CisgICAgICAgIGljb24g
PSBndGtfaWNvbl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaW5mbywgY29udGV4dCwg
MCwgMCk7CisgICAgICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZvKTsKKyAgICB9CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgaWYgKCFpY29uKQorICAg
ICAgICByZXR1cm4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplKTsKKworICAgIHJldHVy
biBhZG9wdEdSZWYoaWNvbik7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtS
R0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0
U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZn
ZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRl
clRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtf
U1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29s
b3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRS
WSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4g
Z2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JB
Q29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Cisg
ICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JHQkEg
Z2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19TRUxF
Q1RFRCwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVf
VklFVyksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJu
IGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3Ip
OworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpp
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdk
a1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAm
Z2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5k
ZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgR2Rr
UkdCQSBnZGtSR0JBQ29sb3I7CisKKyAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKKyAgICBjYXNl
IENTU1ZhbHVlQnV0dG9udGV4dDoKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZs
YWdzPigwKSwgJmdka1JHQkFDb2xvcik7CisgICAgICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cisg
ICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oMCksICZnZGtSR0JBQ29sb3IpOworICAgICAgICByZXR1cm4gZ2RrUkdCQUNv
bG9yOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29s
b3IoY3NzVmFsdWVJZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvUnVuTG9vcEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5MGYzNWNhNjZkMjIwYjQwZDRmNjNmN2Q5ZjZjOTg0Mjc1Nzc3MWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCkBAIC0wLDAg
KzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNp
bmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1J1bkxvb3A6OlJ1bkxvb3AoKQoreworICAgIC8vIGdfbWFpbl9jb250
ZXh0X2RlZmF1bHQoKSBkb2Vzbid0IGFkZCBhbiBleHRyYSByZWZlcmVuY2UuCisgICAgbV9ydW5M
b29wQ29udGV4dCA9IGlzTWFpblRocmVhZCgpID8gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpIDog
YWRvcHRHUmVmKGdfbWFpbl9jb250ZXh0X25ldygpKTsKKyAgICBBU1NFUlQobV9ydW5Mb29wQ29u
dGV4dCk7CisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYo
Z19tYWluX2xvb3BfbmV3KG1fcnVuTG9vcENvbnRleHQuZ2V0KCksIEZBTFNFKSk7CisgICAgQVNT
RVJUKGlubmVybW9zdExvb3ApOworICAgIG1fcnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoaW5uZXJt
b3N0TG9vcCk7Cit9CisKK1J1bkxvb3A6On5SdW5Mb29wKCkKK3sKKyAgICBmb3IgKGludCBpID0g
bV9ydW5Mb29wTWFpbkxvb3BzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlm
ICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX3J1bkxvb3BNYWluTG9vcHNbaV0uZ2V0KCkpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29w
TWFpbkxvb3BzW2ldLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUnVuTG9vcDo6cnVuKCkKK3sK
KyAgICBSdW5Mb29wKiBtYWluUnVuTG9vcCA9IFJ1bkxvb3A6OmN1cnJlbnQoKTsKKyAgICBHTWFp
bkxvb3AqIGlubmVybW9zdExvb3AgPSBtYWluUnVuTG9vcC0+aW5uZXJtb3N0TG9vcCgpOworICAg
IGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhpbm5lcm1vc3RMb29wKSkgeworICAgICAgICBn
X21haW5fbG9vcF9ydW4oaW5uZXJtb3N0TG9vcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBDcmVhdGUgYW5kIHJ1biBhIG5lc3RlZCBsb29wIGlmIHRoZSBpbm5lcm1vc3Qgb25l
IHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisgICAgR01haW5Mb29wKiBuZXN0ZWRNYWluTG9vcCA9IGdf
bWFpbl9sb29wX25ldygwLCBGQUxTRSk7CisgICAgbWFpblJ1bkxvb3AtPnB1c2hOZXN0ZWRNYWlu
TG9vcChuZXN0ZWRNYWluTG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKG5lc3RlZE1haW5Mb29w
KTsKKyAgICBtYWluUnVuTG9vcC0+cG9wTmVzdGVkTWFpbkxvb3AoKTsKK30KKworR01haW5Mb29w
KiBSdW5Mb29wOjppbm5lcm1vc3RMb29wKCkKK3sKKyAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4g
bG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxv
b3BzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fcnVuTG9vcE1haW5Mb29wc1swXS5nZXQoKTsK
K30KKwordm9pZCBSdW5Mb29wOjpwdXNoTmVzdGVkTWFpbkxvb3AoR01haW5Mb29wKiBuZXN0ZWRM
b29wKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUg
dGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKKyAgICBt
X3J1bkxvb3BNYWluTG9vcHMuYXBwZW5kKGFkb3B0R1JlZihuZXN0ZWRMb29wKSk7Cit9CisKK3Zv
aWQgUnVuTG9vcDo6cG9wTmVzdGVkTWFpbkxvb3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3Qg
bWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BN
YWluTG9vcHMuaXNFbXB0eSgpKTsKKyAgICBtX3J1bkxvb3BNYWluTG9vcHMucmVtb3ZlTGFzdCgp
OworfQorCit2b2lkIFJ1bkxvb3A6OnN0b3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFp
biBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWlu
TG9vcHMuaXNFbXB0eSgpKTsKKyAgICBHUmVmUHRyPEdNYWluTG9vcD4gbGFzdE1haW5Mb29wID0g
bV9ydW5Mb29wTWFpbkxvb3BzLmxhc3QoKTsKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmlu
ZyhsYXN0TWFpbkxvb3AuZ2V0KCkpKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxhc3RNYWlu
TG9vcC5nZXQoKSk7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OnF1ZXVlV29yayhSdW5Mb29wKiBy
dW5Mb29wKQoreworICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBz
b3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgZ19zb3VyY2Vfc2V0
X3ByaW9yaXR5KHNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2soc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PigmUnVuTG9vcDo6cXVldWVXb3JrKSwgdGhpcywgMCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKHNv
dXJjZS5nZXQoKSwgbV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7CisKKyAgICBnX21haW5fY29udGV4
dF93YWtldXAobV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFz
ZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCisgICAgOiBtX3J1bkxvb3AocnVuTG9vcCkK
KyAgICAsIG1fdGltZXJTb3VyY2UoMCkKK3sKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjp+VGlt
ZXJCYXNlKCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpj
bGVhclRpbWVyU291cmNlKCkKK3sKKyAgICBtX3RpbWVyU291cmNlID0gMDsKK30KKworZ2Jvb2xl
YW4gUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJC
YXNlKiB0aW1lcikKK3sKKyAgICBHU291cmNlKiBjdXJyZW50VGltZXJTb3VyY2UgPSB0aW1lci0+
bV90aW1lclNvdXJjZS5nZXQoKTsKKyAgICBib29sIGlzUmVwZWF0aW5nID0gdGltZXItPmlzUmVw
ZWF0aW5nKCk7CisgICAgLy8gVGhpcyBjYW4gY2hhbmdlIHRoZSB0aW1lclNvdXJjZSBieSBzdGFy
dGluZyBhIG5ldyB0aW1lciB3aXRoaW4gdGhlIGNhbGxiYWNrLgorICAgIHRpbWVyLT5maXJlZCgp
OworICAgIGlmICghaXNSZXBlYXRpbmcgJiYgY3VycmVudFRpbWVyU291cmNlID09IHRpbWVyLT5t
X3RpbWVyU291cmNlLmdldCgpKQorICAgICAgICB0aW1lci0+Y2xlYXJUaW1lclNvdXJjZSgpOwor
ICAgIHJldHVybiBpc1JlcGVhdGluZzsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0
YXJ0KGRvdWJsZSBmaXJlSW50ZXJ2YWwsIGJvb2wgcmVwZWF0KQoreworICAgIGlmIChtX3RpbWVy
U291cmNlKQorICAgICAgICBzdG9wKCk7CisKKyAgICBtX3RpbWVyU291cmNlID0gYWRvcHRHUmVm
KGdfdGltZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihmaXJlSW50ZXJ2YWwgKiAx
MDAwKSkpOworICAgIG1faXNSZXBlYXRpbmcgPSByZXBlYXQ7CisgICAgZ19zb3VyY2Vfc2V0X2Nh
bGxiYWNrKG1fdGltZXJTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KCZSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDApOworICAg
IGdfc291cmNlX2F0dGFjaChtX3RpbWVyU291cmNlLmdldCgpLCBtX3J1bkxvb3AtPm1fcnVuTG9v
cENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCit7
CisgICAgaWYgKCFtX3RpbWVyU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NvdXJj
ZV9kZXN0cm95KG1fdGltZXJTb3VyY2UuZ2V0KCkpOworICAgIGNsZWFyVGltZXJTb3VyY2UoKTsK
K30KKworYm9vbCBSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90aW1lclNvdXJjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIwNWE1N2I3ZGUyOTRiNjNj
ODZmZDUyZTc0OGYwMGY5MTIzMjA4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBDb2xsYWJvcmEgTHRkLgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRl
ICJNYWluRnJhbWVTY3JvbGxiYXJHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sKKyAgICAvLyBJbnRlcmlvciBmcmFtZSBT
Y3JvbGxWaWV3cyBuZXZlciBoYXZlIE1haW5GcmFtZVNjcm9sbGJhcnMuCisgICAgaWYgKHNjcm9s
bFZpZXctPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBk
b24ndCBoYXZlIGEgaG9zdCB3aW5kb3cgb3IgYSBjb250YWluaW5nIHdpZGdldCAoYWxhIFdlYktp
dDIpLgorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBzY3JvbGxWaWV3LT5ob3N0V2luZG93
KCk7CisgICAgaWYgKCFob3N0V2luZG93IHx8ICFob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2Jvb2xlYW4gc2VsZlNjcm9sbGlu
ZyA9IEZBTFNFOworICAgIGdfb2JqZWN0X2dldChob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSwgInNlbGYtc2Nyb2xsaW5nIiwgJnNlbGZTY3JvbGxpbmcsIE5VTEwpOworICAgIHJldHVy
biAhc2VsZlNjcm9sbGluZzsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbFZpZXc6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAg
ICBpZiAoc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMpKQorICAgICAgICByZXR1
cm4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVhdGUodGhpcywgb3JpZW50YXRpb24pOworICAg
IHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlv
biwgUmVndWxhclNjcm9sbGJhcik7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNv
bnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJ
bmNsdXNpb24pIGNvbnN0Cit7CisgICAgYm9vbCBpbmNsdWRlU2Nyb2xsYmFycyA9IHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFyczsKKworICAgIC8vIElmIHdlIGFyZSBhbiBp
bnRlcmlvciBmcmFtZSBzY3JvbGxiYXIgb3IgYXJlIGluIHNvbWUgc29ydCBvZiB0cmFuc2l0aW9u
CisgICAgLy8gc3RhdGUsIGp1c3QgY2FsY3VsYXRlIG91ciBzaXplIGJhc2VkIG9uIHdoYXQgdGhl
IEdUSysgdGhlbWUgc2F5cyB0aGUKKyAgICAvLyBzY3JvbGxiYXIgd2lkdGggc2hvdWxkIGJlLgor
ICAgIGlmICghc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMpKSB7CisgICAgICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xs
T2Zmc2V0LmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShtYXgoMCwg
d2lkdGgoKSAtICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IHZl
cnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4KDAsIGhlaWdodCgpIC0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaW5j
bHVkZVNjcm9sbGJhcnMgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDogMCkpKSk7
CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCwgc28gd2UgYXJlIHRoZSBt
YWluIGZyYW1lIGFuZCB0aHVzIGhhdmUKKyAgICAvLyBhIHBhcmVudCB3aWRnZXQgd2hpY2ggd2Ug
Y2FuIHVzZSB0byBtZWFzdXJlIHRoZSB2aXNpYmxlIHJlZ2lvbi4KKyAgICBHdGtXaWRnZXQqIG1l
YXN1cmVkV2lkZ2V0ID0gaG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBH
dGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtZWFzdXJlZFdp
ZGdldCk7CisKKyAgICAvLyBXZSBtYXkgbm90IGJlIGluIGEgd2lkZ2V0IHRoYXQgZGlzcGxheXMg
c2Nyb2xsYmFycywgYnV0IHdlIG1heQorICAgIC8vIGhhdmUgb3RoZXIga2luZHMgb2YgZGVjb3Jh
dGlvbiB0aGF0IG1ha2UgdXMgc21hbGxlci4KKyAgICBpZiAocGFyZW50V2lkZ2V0ICYmIGluY2x1
ZGVTY3JvbGxiYXJzKQorICAgICAgICBtZWFzdXJlZFdpZGdldCA9IHBhcmVudFdpZGdldDsKKwor
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0
aW9uKG1lYXN1cmVkV2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgcmV0dXJuIEludFJlY3QoSW50
UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAor
ICAgICAgICAgICAgICAgICAgIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5o
ZWlnaHQpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxi
YXJNb2RlIGhvcml6b250YWxNb2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwgYm9vbCBo
b3Jpem9udGFsTG9jaywgYm9vbCB2ZXJ0aWNhbExvY2spCit7CisgICAgLy8gRklYTUU6IFJlc3Ry
dWN0dXJlIHRoZSBTY3JvbGxWaWV3IGFic3RyYWN0aW9uIHNvIHRoYXQgd2UgZG8gbm90IGhhdmUg
dG8KKyAgICAvLyBjb3B5IHRoaXMgdmVyYmF0aW0gZnJvbSBTY3JvbGxWaWV3LmNwcC4gVW50aWwg
dGhlbiwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzCisgICAgLy8gaXMga2VwdCBpbiBzeW5jLgor
ICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKworICAgIGlmIChob3Jpem9udGFsTW9kZSAh
PSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpICYmICFtX2hvcml6b250YWxTY3JvbGxiYXJMb2Nr
KSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBob3Jpem9udGFsTW9kZTsK
KyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgIH0KKworICAgIGlmICh2ZXJ0aWNhbE1v
ZGUgIT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKCkgJiYgIW1fdmVydGljYWxTY3JvbGxiYXJMb2Nr
KSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlID0gdmVydGljYWxNb2RlOworICAg
ICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGhvcml6b250YWxMb2Nr
KQorICAgICAgICBzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTG9jaygpOworCisgICAgaWYgKHZlcnRp
Y2FsTG9jaykKKyAgICAgICAgc2V0VmVydGljYWxTY3JvbGxiYXJMb2NrKCk7CisKKyAgICBpZiAo
bmVlZHNVcGRhdGUpCisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwor
CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBvcnQgcG9saWN5IGNoYW5nZXMgb24gU2Nyb2xs
VmlldydzIHVubGVzcyB0aGlzCisgICAgLy8gb25lIGhhcyBhbiBhZGp1c3RtZW50IGF0dGFjaGVk
IGFuZCBpdCBpcyBhIG1haW4gZnJhbWUuCisgICAgaWYgKHBhcmVudCgpIHx8ICFpc0ZyYW1lVmll
dygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3IgZnJhbWVzIHRoYXQgZG8gaGF2ZSBh
ZGp1c3RtZW50cyBhdHRhY2hlZCwgd2Ugd2FudCB0byByZXBvcnQKKyAgICAvLyBwb2xpY3kgY2hh
bmdlcywgc28gdGhhdCB0aGV5IG1heSBiZSBhcHBsaWVkIHRvIHRoZSB3aWRnZXQgdG8KKyAgICAv
LyB3aGljaCB0aGUgV2ViVmlldydzIGNvbnRhaW5lciAoZS5nLiBHdGtTY3JvbGxlZFdpbmRvdyku
CisgICAgaWYgKGhvc3RXaW5kb3coKSkKKyAgICAgICAgaG9zdFdpbmRvdygpLT5zY3JvbGxiYXJz
TW9kZURpZENoYW5nZSgpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJU
aGVtZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlM2ZkNzZmN2ZmYzUyMzBmYzg0N2ZmOWZlY2FmNDNk
YzQ2ZmEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hTZXQ8
U2Nyb2xsYmFyVGhlbWVDbGllbnQqPiogZ1Njcm9sbGJhcnM7CisKK1Njcm9sbGJhclRoZW1lKiBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVt
ZUd0ayB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCitTY3JvbGxiYXJUaGVtZUd0azo6
flNjcm9sbGJhclRoZW1lR3RrKCkKK3sKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cmVn
aXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBp
ZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICBnU2Nyb2xsYmFycyA9IG5ldyBIYXNoU2V0PFNjcm9s
bGJhclRoZW1lQ2xpZW50Kj47CisgICAgZ1Njcm9sbGJhcnMtPmFkZChzY3JvbGxiYXIpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgZ1Njcm9sbGJhcnMtPnJlbW92ZShzY3JvbGxi
YXIpOworICAgIGlmIChnU2Nyb2xsYmFycy0+aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSBn
U2Nyb2xsYmFyczsKKyAgICAgICAgZ1Njcm9sbGJhcnMgPSAwOworICAgIH0KK30KKwordm9pZCBT
Y3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCkKK3sKKyAg
ICBpZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBVcGRhdGUgdGhl
IHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlvciBmcmFtZSBzY3JvbGxiYXIgd2lkZ2V0LiBUaGUK
KyAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGxiYXIgdGhlbSBjb2RlIGlzbid0IHll
dCBzbWFydCBlbm91Z2ggdG8gZ2V0CisgICAgLy8gdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGl0IHBh
aW50cy4KKyAgICBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZCA9
IGdTY3JvbGxiYXJzLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGll
bnQqPjo6aXRlcmF0b3IgaXQgPSBnU2Nyb2xsYmFycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIgPSAoKml0KTsKKwor
ICAgICAgICAvLyBUb3AtbGV2ZWwgc2Nyb2xsYmFyIGkuZS4gc2Nyb2xsYmFycyB3aG8gaGF2ZSBh
IHBhcmVudCBTY3JvbGxWaWV3CisgICAgICAgIC8vIHdpdGggbm8gcGFyZW50IGFyZSBuYXRpdmUs
IGFuZCB0aHVzIGRvIG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQuCisgICAgICAgIGlmICghc2Nyb2xs
YmFyLT5wYXJlbnQoKSB8fCAhc2Nyb2xsYmFyLT5wYXJlbnQoKS0+cGFyZW50KCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVz
cyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXIt
PnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIHNjcm9sbGJhci0+cGFyZW50KCktPmhlaWdodCgpIC0g
dGhpY2tuZXNzLCBzY3JvbGxiYXItPndpZHRoKCksIHRoaWNrbmVzcykpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KHNjcm9sbGJhci0+
cGFyZW50KCktPndpZHRoKCkgLSB0aGlja25lc3MsIDAsIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSkpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1bWIo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBp
cyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0aW1pemF0aW9uIHRvIHNlZSBpZgorICAg
IC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tpcHBlZC4gIFdlIGRvbid0IGhhdmUgdG8g
YmUgZXhhY3QgaGVyZS4KKyAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSA+IDA7Cit9
CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK3sKKyAgICBp
ZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNCYWNrQnV0dG9uRW5kUGFydCkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3Rh
cnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpCisgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisKKyAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgpICsgbV90cm91Z2hCb3JkZXJXaWR0
aDsKKyAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aDsKKyAg
ICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CisgICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIEJhY2tCdXR0b25FbmRQYXJ0IChhbHRl
cm5hdGUgYnV0dG9uKQorICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBz
Y3JvbGxiYXItPndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIgKiBzaXplLndpZHRo
KCkpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gVmVydGljYWxT
Y3JvbGxiYXIgYWx0ZXJuYXRlIGJ1dHRvbgorICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJh
ci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAq
IHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitJbnRS
ZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCit7CisgICAgaWYgKHBh
cnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChwYXJ0ID09IEZvcndhcmRC
dXR0b25FbmRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0KQorICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworCisgICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIp
OworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgeworICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0
aDsKKyAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCisgICAgICAgICAg
ICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgoKSAtIHNp
emUud2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHksIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICAgICAgLy8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRl
IGJ1dHRvbikKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBtX3Ryb3Vn
aEJvcmRlcldpZHRoICsgc2l6ZS53aWR0aCgpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworICAgIH0KKworICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFyCisgICAgaW50IHggPSBzY3Jv
bGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7CisgICAgaWYgKHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgp
ICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCkgLSBtX3Ryb3VnaEJvcmRlcldp
ZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKKyAgICByZXR1cm4gSW50UmVjdCh4LCBzY3Jv
bGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGggKyBzaXplLmhlaWdodCgpLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0
cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgYm9vbCkKK3sKKyAgICAv
LyBUaGUgcGFkZGluZyBhbG9uZyB0aGUgdGh1bWIgbW92ZW1lbnQgYXhpcyBpbmNsdWRlcyB0aGUg
dHJvdWdoIGJvcmRlcgorICAgIC8vIHBsdXMgdGhlIHNpemUgb2Ygc3RlcHBlciBzcGFjaW5nICh0
aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlcHBlciBhbmQKKyAgICAvLyB0aGUgcGxhY2Ugd2hlcmUg
dGhlIHRodW1iIHN0b3BzKS4gVGhlcmUgaXMgb2Z0ZW4gbm8gc3RlcHBlciBzcGFjaW5nLgorICAg
IGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV90cm91Z2hCb3JkZXJXaWR0aCArIG1fc3RlcHBl
clNwYWNpbmc7CisKKyAgICAvLyBUaGUgZmF0bmVzcyBvZiB0aGUgc2Nyb2xsYmFyIG9uIHRoZSBu
b24tbW92ZW1lbnQgYXhpcy4KKyAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNz
KHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisKKyAgICBpbnQgc3RhcnRCdXR0b25zT2Zmc2V0
ID0gMDsKKyAgICBpbnQgYnV0dG9uc1dpZHRoID0gMDsKKyAgICBpZiAobV9oYXNGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0KSB7CisgICAgICAgIHN0YXJ0QnV0dG9uc09mZnNldCArPSBtX3N0ZXBwZXJT
aXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICB9CisgICAg
aWYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkgeworICAgICAgICBzdGFydEJ1dHRvbnNPZmZz
ZXQgKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNp
emU7CisgICAgfQorICAgIGlmIChtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KQorICAgICAgICBidXR0
b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICBpZiAobV9oYXNGb3J3YXJkQnV0dG9uRW5k
UGFydCkKKyAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisKKyAgICBpZiAo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAg
ICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxlciB0aGFuIHRoZSBuYXR1cmFs
IHNpemUgb2YgdGhlCisgICAgICAgIC8vIHR3byBidXR0b25zLCB0aGUgdHJhY2sgZGlzYXBwZWFy
cy4KKyAgICAgICAgaWYgKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiB0aGlja25lc3MpCisgICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxi
YXItPngoKSArIG1vdmVtZW50QXhpc1BhZGRpbmcgKyBzdGFydEJ1dHRvbnNPZmZzZXQsIHNjcm9s
bGJhci0+eSgpLAorICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgLSAo
MiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoLCB0aGlja25lc3MpOworICAg
IH0KKworICAgIGlmIChzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAqIHRoaWNrbmVzcykKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwg
c2Nyb2xsYmFyLT55KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtICgy
ICogbW92ZW1lbnRBeGlzUGFkZGluZykgLSBidXR0b25zV2lkdGgpOworfQorCitJbnRSZWN0IFNj
cm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCkKK3sKKyAgICBJbnRSZWN0
IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMoc2Nyb2xsYmFyLCB1
bmNvbnN0cmFpbmVkVHJhY2tSZWN0KTsKKyAgICBpbnQgdGh1bWJQb3MgPSB0aHVtYlBvc2l0aW9u
KHNjcm9sbGJhcik7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50UmVjdCh0cmFja1JlY3QueCgpICsgdGh1
bWJQb3MsIHRyYWNrUmVjdC55KCkgKyAodHJhY2tSZWN0LmhlaWdodCgpIC0gbV90aHVtYkZhdG5l
c3MpIC8gMiwgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSwgbV90aHVtYkZhdG5lc3MpOyAKKworICAg
IC8vIFZlcnRpY2FsU2Nyb2xsYmFyCisgICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0LngoKSAr
ICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRyYWNrUmVjdC55KCkg
KyB0aHVtYlBvcywgbV90aHVtYkZhdG5lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOworfQor
Citib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSB0aGUgU2Nyb2xsYmFy
Q29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0CisgICAgU2Nyb2xsYmFyQ29u
dHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7CisKKyAgICBJbnRSZWN0IGJhY2tCdXR0
b25TdGFydFBhaW50UmVjdDsKKyAgICBJbnRSZWN0IGJhY2tCdXR0b25FbmRQYWludFJlY3Q7Cisg
ICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3Q7CisgICAgSW50UmVjdCBmb3J3
YXJkQnV0dG9uRW5kUGFpbnRSZWN0OworICAgIGlmIChoYXNCdXR0b25zKHNjcm9sbGJhcikpIHsK
KyAgICAgICAgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xs
YmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3Qu
aW50ZXJzZWN0cyhiYWNrQnV0dG9uU3RhcnRQYWludFJlY3QpKQorICAgICAgICAgICAgc2Nyb2xs
TWFzayB8PSBCYWNrQnV0dG9uU3RhcnRQYXJ0OworICAgICAgICBiYWNrQnV0dG9uRW5kUGFpbnRS
ZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCwgdHJ1ZSk7
CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoYmFja0J1dHRvbkVuZFBhaW50UmVj
dCkpCisgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJhY2tCdXR0b25FbmRQYXJ0OworICAgICAg
ICBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxi
YXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQsIHRydWUpOworICAgICAgICBpZiAoZGFtYWdlUmVj
dC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCkpCisgICAgICAgICAgICBz
Y3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25TdGFydFBhcnQ7CisgICAgICAgIGZvcndhcmRCdXR0
b25FbmRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0
b25FbmRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhmb3J3
YXJkQnV0dG9uRW5kUGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQ7CisgICAgfQorCisgICAgSW50UmVjdCB0cmFja1BhaW50UmVjdCA9IHRy
YWNrUmVjdChzY3JvbGxiYXIsIHRydWUpOworICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMo
dHJhY2tQYWludFJlY3QpKQorICAgICAgICBzY3JvbGxNYXNrIHw9IFRyYWNrQkdQYXJ0OworCisg
ICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycyAmJiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25T
dGFydFBhcnQKKyAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydAor
ICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25TdGFydFBhcnQKKyAgICAg
ICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkpCisgICAgICAgIHNj
cm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7CisKKyAgICBib29sIHRodW1iUHJlc2VudCA9IGhhc1Ro
dW1iKHNjcm9sbGJhcik7CisgICAgSW50UmVjdCBjdXJyZW50VGh1bWJSZWN0OworICAgIGlmICh0
aHVtYlByZXNlbnQpIHsKKyAgICAgICAgSW50UmVjdCB0cmFjayA9IHRyYWNrUmVjdChzY3JvbGxi
YXIsIGZhbHNlKTsKKyAgICAgICAgY3VycmVudFRodW1iUmVjdCA9IHRodW1iUmVjdChzY3JvbGxi
YXIsIHRyYWNrKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhjdXJyZW50VGh1
bWJSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gVGh1bWJQYXJ0OworICAgIH0KKwor
ICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxCdXR0b25zID0gQmFja0J1dHRvblN0YXJ0
UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8IEZvcndhcmRCdXR0b25FbmRQYXJ0
OworICAgIGlmIChzY3JvbGxNYXNrICYgVHJhY2tCR1BhcnQgfHwgc2Nyb2xsTWFzayAmIFRodW1i
UGFydCB8fCBzY3JvbGxNYXNrICYgYWxsQnV0dG9ucykKKyAgICAgICAgcGFpbnRTY3JvbGxiYXJC
YWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyKTsKKyAgICAgICAgcGFpbnRUcmFj
a0JhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsK
KworICAgIC8vIFBhaW50IHRoZSBiYWNrIGFuZCBmb3J3YXJkIGJ1dHRvbnMuCisgICAgaWYgKHNj
cm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICBwYWludEJ1dHRvbihncmFw
aGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0LCBCYWNrQnV0
dG9uU3RhcnRQYXJ0KTsKKyAgICBpZiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25FbmRQYXJ0KQor
ICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRv
bkVuZFBhaW50UmVjdCwgQmFja0J1dHRvbkVuZFBhcnQpOworICAgIGlmIChzY3JvbGxNYXNrICYg
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250
ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCwgRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCk7CisgICAgaWYgKHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkK
KyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRC
dXR0b25FbmRQYWludFJlY3QsIEZvcndhcmRCdXR0b25FbmRQYXJ0KTsKKworICAgIC8vIFBhaW50
IHRoZSB0aHVtYi4KKyAgICBpZiAoc2Nyb2xsTWFzayAmIFRodW1iUGFydCkKKyAgICAgICAgcGFp
bnRUaHVtYihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgY3VycmVudFRodW1iUmVjdCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6c2hvdWxkQ2Vu
dGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgcmV0dXJuIChldmVudC5zaGlmdEtleSgpICYmIGV2ZW50LmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHx8IChldmVudC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b24pOwor
fQorCitpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJD
b250cm9sU2l6ZSkKK3sKKyAgICByZXR1cm4gbV90aHVtYkZhdG5lc3MgKyAobV90cm91Z2hCb3Jk
ZXJXaWR0aCAqIDIpOworfQorCitJbnRTaXplIFNjcm9sbGJhclRoZW1lR3RrOjpidXR0b25TaXpl
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYgKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFNp
emUobV90aHVtYkZhdG5lc3MsIG1fc3RlcHBlclNpemUpOworCisgICAgLy8gSG9yaXpvbnRhbFNj
cm9sbGJhcgorICAgIHJldHVybiBJbnRTaXplKG1fc3RlcHBlclNpemUsIG1fdGh1bWJGYXRuZXNz
KTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lR3RrOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gbV9taW5UaHVtYkxlbmd0
aDsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRo
ZW1lR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTczZGYyODU1MDFiNTgyNmRjMDU5YjgzYmZjM2Q5YTQxNzBkNGJhMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaApAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVHdGtfaAorI2RlZmluZSBTY3JvbGxiYXJUaGVtZUd0a19o
CisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVHdGsgOiBw
dWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworcHVibGljOgorICAgIFNjcm9sbGJhclRo
ZW1lR3RrKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVHdGsoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAg
IHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNj
cm9sbGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVj
dChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1
YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sKTsKKyAgICBJ
bnRSZWN0IHRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmIHVu
Y29uc3RyYWluZWRUcmFja1JlY3QpOworICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2
b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJU
aGVtZUNsaWVudCopOworICAgIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBw
YWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQq
LCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbGJh
clRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgdmlydHVhbCBJbnRTaXplIGJ1
dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVt
VGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKworICAgIC8vIFRPRE86IFRoZXNl
IGFyZSB0aGUgZGVmYXVsdCBHVEsrIHZhbHVlcy4gQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgcHVs
bCB0aGVzZSBmcm9tIHRoZSB0aGVtZSBpdHNlbGYuCisgICAgdmlydHVhbCBkb3VibGUgaW5pdGlh
bEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4yMDsgfQorICAgIHZpcnR1YWwgZG91
YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4wMjsgfQorICAgIHZvaWQgdXBk
YXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlj
a25lc3MoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7
CisKK3Byb3RlY3RlZDoKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtTdHlsZUNv
bnRleHQqIG1fY29udGV4dDsKKyNlbmRpZgorICAgIGludCBtX3RodW1iRmF0bmVzczsKKyAgICBp
bnQgbV90cm91Z2hCb3JkZXJXaWR0aDsKKyAgICBpbnQgbV9zdGVwcGVyU2l6ZTsKKyAgICBpbnQg
bV9zdGVwcGVyU3BhY2luZzsKKyAgICBpbnQgbV9taW5UaHVtYkxlbmd0aDsKKyAgICBnYm9vbGVh
biBtX3Ryb3VnaFVuZGVyU3RlcHBlcnM7CisgICAgZ2Jvb2xlYW4gbV9oYXNGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0OworICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7CisgICAg
Z2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0OworICAgIGdib29sZWFuIG1faGFzQmFj
a0J1dHRvbkVuZFBhcnQ7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGsyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjZiYjhhMWQyZjcxYWE4NjRlYTU3ZWQz
MDNmMTM2MDcyYzFjNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9T
Y3JvbGxiYXJUaGVtZUd0azIuY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKwor
I2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyB2b2lkIGd0a1N0eWxlU2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBw
cmV2aW91cywgU2Nyb2xsYmFyVGhlbWVHdGsqIHNjcm9sbGJhclRoZW1lKQoreworICAgIHNjcm9s
bGJhclRoZW1lLT51cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKK30KKworU2Nyb2xsYmFyVGhlbWVH
dGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKK3sKKyAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrSFNjcm9sbGJhcigpLAorICAgICAgICAg
InN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoaXMpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQoreworICAg
IEd0a1dpZGdldCogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtIU2Nyb2xsYmFyKCk7CisgICAgZ3Rr
X3dpZGdldF9zdHlsZV9nZXQoc2Nyb2xsYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICJz
bGlkZXJfd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
InRyb3VnaF9ib3JkZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAic3RlcHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3VnaFVuZGVyU3RlcHBlcnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFz
QmFja0J1dHRvblN0YXJ0UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWZvcndh
cmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRC
dXR0b25TdGFydFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1zZWNvbmRhcnkt
YmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25FbmRQYXJ0LCBOVUxMKTsKKyAgICBt
X21pblRodW1iTGVuZ3RoID0gZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3NpemUoR1RLX1JBTkdF
KHNjcm9sbGJhcikpOworICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOworfQor
CitzdGF0aWMgR3RrV2lkZ2V0KiBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7
CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
ciA/IHRoZW1lLT5ndGtWU2Nyb2xsYmFyKCkgOiB0aGVtZS0+Z3RrSFNjcm9sbGJhcigpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgLy8gUGFpbnQgdGhlIHRyYWNrIGJhY2tncm91bmQuIElmIHRo
ZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMgcHJvcGVydHkgaXMgdHJ1ZSwgdGhpcworICAgIC8vIHNo
b3VsZCBiZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBzY3JvbGxiYXIsIGJ1dCBpZiBpcyBmYWxzZSwg
aXQgc2hvdWxkIG9ubHkgYmUgdGhlCisgICAgLy8gdHJhY2sgcmVjdC4KKyAgICBJbnRSZWN0IGZ1
bGxTY3JvbGxiYXJSZWN0KHJlY3QpOworICAgIGlmIChtX3Ryb3VnaFVuZGVyU3RlcHBlcnMpCisg
ICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xs
YmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisKKyAg
ICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVsbFNjcm9s
bGJhclJlY3QpOworICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGZ1bGxTY3JvbGxi
YXJSZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChwYWludFJlY3Qs
IGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19JTiwgInRyb3VnaCIpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQorewor
ICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBz
Y3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsK
KworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxs
U2Nyb2xsYmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsU2Nyb2xs
YmFyUmVjdCwgZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic2Nyb2xs
ZWRfd2luZG93Iik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ2V0V2lkZ2V0
Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgZ2Jvb2xlYW4gYWN0aXZhdGVTbGlkZXI7Cisg
ICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiYWN0aXZhdGUtc2xpZGVyIiwgJmFjdGl2
YXRlU2xpZGVyLCBOVUxMKTsKKworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RB
VEVfTk9STUFMOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VU
OworICAgIGlmIChhY3RpdmF0ZVNsaWRlciAmJiBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0g
VGh1bWJQYXJ0KSB7CisgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAg
ICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOworICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCB8fCBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkg
PT0gVGh1bWJQYXJ0KQorICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7CisK
KyAgICAvLyBUaGUgYWRqdXN0bWVudCBjb250cm9scyB0aGUgcmVuZGVyaW5nIG9mIHRoZSBzY3Jv
bGxiYXIgdGh1bWIuIElmIGl0J3Mgbm90IHNldAorICAgIC8vIHByb3Blcmx5IHRoZSB0aGVtZSBt
YXkgbm90IGRyYXcgdGhlIHRodW1iIGJvcmRlcnMgcHJvcGVybHkuCisgICAgR3RrQWRqdXN0bWVu
dCogYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0Uod2lkZ2V0
KSk7CisgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQsIHNjcm9sbGJhci0+
Y3VycmVudFBvcygpKTsKKyAgICBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqdXN0bWVudCwg
MCk7CisgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVyKGFkanVzdG1lbnQsIHNjcm9sbGJhci0+
bWF4aW11bSgpKTsKKworICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gR1RLX09SSUVO
VEFUSU9OX0hPUklaT05UQUw7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXpl
KGFkanVzdG1lbnQsIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19P
UklFTlRBVElPTl9WRVJUSUNBTDsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRf
c2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50LCByZWN0LndpZHRoKCkpOworCisgICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOworICAgIEludFJlY3Qg
c2xpZGVyUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludFNsaWRlcihzbGlkZXJSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwg
InNsaWRlciIsIG9yaWVudGF0aW9uKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCit7Cisg
ICAgLy8gVGhlIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCBpZiB0aGUgdGh1bWIgaXMgYXMgdGhl
IGFwcHJvcHJpYXRlIGV4dHJlbWUuCisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RL
X1NIQURPV19PVVQ7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9JTlNF
TlNJVElWRTsKKyAgICBib29sIHByZXNzZWQgPSAocGFydCA9PSBzY3JvbGxiYXItPnByZXNzZWRQ
YXJ0KCkpOworCisgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0
ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQorICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1h
eGltdW0oKSkKKyAgICAgICAgfHwgKEZvcndhcmRCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBz
Y3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkpIHsKKyAgICAg
ICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKKyAgICAgICAgaWYgKHByZXNzZWQpIHsK
KyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgICAgICBz
aGFkb3dUeXBlID0gR1RLX1NIQURPV19JTjsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09IHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9QUkVMSUdIVDsKKyAgICB9CisKKyAgICAvLyBUaGVtZXMgZGV0ZXJtaW5lIGhvdyB0byBkcmF3
IHRoZSBidXR0b24gKHdoaWNoIGJ1dHRvbiB0byBkcmF3KSBiYXNlZCBvbiB0aGUgYWxsb2NhdGlv
bgorICAgIC8vIG9mIHRoZSB3aWRnZXQuIFdoZXJlIHRoZSB0YXJnZXQgcmVjdCBpcyBpbiByZWxh
dGlvbiB0byB0aGUgdG90YWwgd2lkZ2V0IGFsbG9jYXRpb24KKyAgICAvLyBkZXRlcm1pbmVzIHRo
ZSBidXR0b24uCisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCk7CisgICAgaW50IGJ1dHRvblNpemUgPSAob3JpZW50YXRpb24gPT0g
VmVydGljYWxTY3JvbGxiYXIpID8gcmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lkdGgoKTsKKyAgICBp
bnQgdG90YWxBbGxvY2F0aW9uID0gYnV0dG9uU2l6ZSAqIDU7IC8vIE9uZSBzcGFjZSBmb3IgZWFj
aCBidXR0b24gYW5kIG9uZSBleHRyYS4KKyAgICBpbnQgYnV0dG9uT2Zmc2V0ID0gMDsKKyAgICBp
ZiAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0KQorICAgICAgICBidXR0b25PZmZzZXQg
PSBidXR0b25TaXplOworICAgIGVsc2UgaWYgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQpCisg
ICAgICAgIGJ1dHRvbk9mZnNldCA9IDMgKiBidXR0b25TaXplOworICAgIGVsc2UgaWYgKEZvcndh
cmRCdXR0b25FbmRQYXJ0ID09IHBhcnQpCisgICAgICAgIGJ1dHRvbk9mZnNldCA9IDQgKiBidXR0
b25TaXplOworCisgICAgLy8gTm93IHdlIHdhbnQgdGhlIGFsbG9jYXRpb24gdG8gYmUgcmVsYXRp
dmUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcGFpbnRlZCByZWN0LgorICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxs
b2NhdGlvbik7CisgICAgYWxsb2NhdGlvbi54ID0gYWxsb2NhdGlvbi55ID0gMDsKKyAgICBhbGxv
Y2F0aW9uLndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gcmVj
dC5oZWlnaHQoKTsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikg
eworICAgICAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHRvdGFsQWxsb2NhdGlvbjsKKyAgICAgICAg
YWxsb2NhdGlvbi55IC09IGJ1dHRvbk9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBhbGxv
Y2F0aW9uLndpZHRoID0gdG90YWxBbGxvY2F0aW9uOworICAgICAgICBhbGxvY2F0aW9uLnggLT0g
YnV0dG9uT2Zmc2V0OworICAgIH0KKyAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdl
dCwgJmFsbG9jYXRpb24pOworCisgICAgY29uc3QgY2hhciogZGV0YWlsID0gb3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIgPyAidnNjcm9sbGJhciIgOiAiaHNjcm9sbGJhciI7CisgICAg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOworCisg
ICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBkZXRhaWwpOworCisgICAgZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a193aWRn
ZXRfc3R5bGVfZ2V0KHdpZGdldCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxM
KTsKKyAgICBJbnRTaXplIGFycm93U2l6ZSA9IHJlY3Quc2l6ZSgpOworICAgIGFycm93U2l6ZS5z
Y2FsZShhcnJvd1NjYWxpbmcpOworICAgIEludFJlY3QgYXJyb3dSZWN0KEludFBvaW50KGJ1dHRv
blJlY3QueCgpICsgKGJ1dHRvblJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpKSAvIDIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC55KCkgKyAoYnV0dG9u
UmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZS5oZWlnaHQoKSkgLyAyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICBhcnJvd1NpemUpOworICAgIGlmIChwcmVzc2VkKSB7CisgICAgICAgIGludCBhcnJv
d0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKKyAgICAgICAgZ3RrX3dpZGdldF9z
dHlsZV9nZXQod2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyb3ctZGlz
cGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgYXJyb3dSZWN0Lm1vdmUo
YXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVudFkpOworICAgIH0KKworICAgIEd0
a0Fycm93VHlwZSBhcnJvd1R5cGUgPSBHVEtfQVJST1dfRE9XTjsKKyAgICBpZiAob3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRv
bkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICAgICAgYXJy
b3dUeXBlID0gR1RLX0FSUk9XX1VQOworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfUklHSFQ7
CisgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja0J1
dHRvblN0YXJ0UGFydCkKKyAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19MRUZUOwor
ICAgIH0KKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCB3aWRnZXQs
IHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgYXJyb3dUeXBlLCBkZXRhaWwpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NDljNTQzZjNk
ZGY2YjMxNWVmZmI5OGE3NTlmZjViMDAyZDcwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCisKKyNpZm5kZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNp
bmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGd0a1N0eWxl
Q2hhbmdlZENhbGxiYWNrKEd0a1dpZGdldCosIFNjcm9sbGJhclRoZW1lR3RrKiBzY3JvbGxiYXJU
aGVtZSkKK3sKKyAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Cit9
CisKK1Njcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCisgICAgOiBtX2NvbnRl
eHQoc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCkuZ2V0KCkpLT5ndGtTY3JvbGxiYXJTdHlsZSgpKQoreworICAgIHVwZGF0ZVRoZW1lUHJvcGVy
dGllcygpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LCAiY2hhbmdlZCIsIEdfQ0FM
TEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKK3sKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibWluLXNsaWRlci1sZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZtX3RodW1iRmF0bmVzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC1ib3JkZXIiLCAmbV90cm91Z2hCb3Jk
ZXJXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc2l6ZSIs
ICZtX3N0ZXBwZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RlcHBl
ci1zcGFjaW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0cm91Z2gtdW5kZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJhY2t3YXJkLXN0ZXBwZXIiLCAm
bV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaGFzLWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVw
cGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0
b25TdGFydFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAg
IHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOworfQorCitzdGF0aWMgdm9pZCBhcHBs
eVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIG9yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyID8gIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCA6IEdUS19TVFlMRV9DTEFTU19I
T1JJWk9OVEFMKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIFBhaW50IHRoZSB0cmFjayBi
YWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUs
IHRoaXMKKyAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBi
dXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQorICAgIC8vIHRyYWNrIHJlY3Qu
CisgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKKyAgICBpZiAobV90cm91Z2hV
bmRlclN0ZXBwZXJzKQorICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdCA9IEludFJlY3Qoc2Nyb2xs
YmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCksIHNjcm9sbGJhci0+
aGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOworCisg
ICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250
ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3Vu
ZChtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1bGxTY3JvbGxiYXJSZWN0
LnkoKSwgZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9sbGJhclJlY3QuaGVpZ2h0
KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0Lngo
KSwgZnVsbFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53aWR0aCgpLCBmdWxs
U2Nyb2xsYmFyUmVjdC5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFy
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwor
CisgICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9j
b250ZXh0LCAic2Nyb2xsZWQtd2luZG93Iik7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRl
eHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzY3JvbGxiYXItPngoKSwgc2Ny
b2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisK
KyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOworICAgIGFwcGx5
U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1Nf
U0xJREVSKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
QUNUSVZFOworICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQor
ICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOworCisgICAgZ3RrX3JlbmRlcl9zbGlkZXIobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05f
SE9SSVpPTlRBTCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUobV9jb250ZXh0KTsKKworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0g
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0
Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsK
KyAgICBpZiAoKEJhY2tCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJl
bnRQb3MoKSkKKyAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBw
YXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKQor
ICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+
Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgeworICAgICAgICBpZiAocGFy
dCA9PSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpCisgICAgICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19BQ1RJVkU7CisgICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJl
ZFBhcnQoKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwor
ICAgIH0gZWxzZQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNz
KG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAgZ3RrX3JlbmRlcl9iYWNr
Z3JvdW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVu
ZGVyX2ZyYW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGdm
bG9hdCBhcnJvd1NjYWxpbmc7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29u
dGV4dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKKworICAgIGRvdWJs
ZSBhcnJvd1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpICogYXJy
b3dTY2FsaW5nOworICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSArIChyZWN0Lndp
ZHRoKCkgLSBhcnJvd1NpemUpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55
KCkgKyAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyKTsKKworICAgIGlmIChmbGFncyAm
IEdUS19TVEFURV9GTEFHX0FDVElWRSkgeworICAgICAgICBnaW50IGFycm93RGlzcGxhY2VtZW50
WCwgYXJyb3dEaXNwbGFjZW1lbnRZOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUobV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93
LWRpc3BsYWNlbWVudC14IiwgJmFycm93RGlzcGxhY2VtZW50WCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteSIsICZhcnJvd0Rpc3BsYWNl
bWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAg
ICAgYXJyb3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZ
KTsKKyAgICB9CisKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChvcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIDogMDsK
KyAgICB9IGVsc2UgeworICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQ
YXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIC8gMiA6IDMgKiAo
R19QSSAvIDIpOworICAgIH0KKworICAgIGd0a19yZW5kZXJfYXJyb3cobV9jb250ZXh0LCBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UG9pbnQueCgpLCBhcnJv
d1BvaW50LnkoKSwgYXJyb3dTaXplKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
bV9jb250ZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUdU
S19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBv
cHVwTWVudUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjQxMzc3M2U1OGM2MDVjNDA4MTNhOWMwN2I4OTAwM2Q2MWZkODEwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3Rr
LmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1
cE1lbnVHdGsuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU2VhcmNoUG9wdXBNZW51R3RrOjpTZWFyY2hQb3B1cE1lbnVHdGsoUG9wdXBN
ZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVH
dGsoY2xpZW50KSkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUG9wdXBNZW51KiBT
ZWFyY2hQb3B1cE1lbnVHdGs6OnBvcHVwTWVudSgpCit7CisgICAgcmV0dXJuIG1fcG9wdXAuZ2V0
KCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpzYXZlUmVjZW50U2VhcmNoZXMoY29u
c3QgQXRvbWljU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpsb2FkUmVjZW50U2VhcmNo
ZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9wdXBNZW51R3RrOjplbmFibGVkKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUzYzYzZDdjMmI3Yjg0
ZTQyNjM1NjI2M2E5ZDZiOTI0OTIxMWU4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFNlYXJjaFBvcHVwTWVudUd0a19oCisjZGVmaW5lIFNlYXJjaFBv
cHVwTWVudUd0a19oCisKKyNpbmNsdWRlICJQb3B1cE1lbnVHdGsuaCIKKyNpbmNsdWRlICJTZWFy
Y2hQb3B1cE1lbnUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZWFyY2hQb3B1
cE1lbnVHdGsgOiBwdWJsaWMgU2VhcmNoUG9wdXBNZW51IHsKK3B1YmxpYzoKKyAgICBTZWFyY2hQ
b3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIFBvcHVwTWVudSog
cG9wdXBNZW51KCk7CisgICAgdmlydHVhbCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7CisgICAgdmlydHVhbCBib29sIGVuYWJs
ZWQoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UG9wdXBNZW51R3RrPiBtX3BvcHVwOworfTsK
KworfQorCisjZW5kaWYgLy8gU2VhcmNoUG9wdXBNZW51R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
U2hhcmVkQnVmZmVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzA0MGYyOGU5ZGY3MWU0ZWVkMGUxYTAx
MjZlNjY1MGQzNWM2MzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9T
aGFyZWRCdWZmZXJHdGsuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRl
IDxnbGliLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkKK3sKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
ZmlsZVBhdGgpOworICAgIGdjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBzaXplOworICAgIEdF
cnJvciogZXJyb3IgPSAwOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlbmFtZS5k
YXRhKCksICZjb250ZW50cywgJnNpemUsICZlcnJvcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMiLCBmaWxlbmFtZUZv
ckRpc3BsYXkoZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAg
ICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVu
dHMsIHNpemUpOworICAgIGdfZnJlZShjb250ZW50cyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1No
YXJlZFRpbWVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzFhMzUyZjczM2YwZWIzYTc2OGY5ODIxYTQw
MjU2NDMwMzA0ZjYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFy
ZWRUaW1lckd0ay5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFy
ZWRUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBndWludCBzaGFyZWRUaW1lcjsKK3N0YXRp
YyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOworCit2b2lkIHNldFNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBzaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24gPSBmOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlcikKK3sK
KyAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBzaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGlt
ZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIEFTU0VSVChzaGFyZWRUaW1l
ckZpcmVkRnVuY3Rpb24pOworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ+KGludGVydmFsICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVkVGltZXIoKTsKKyAgICBz
aGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfUkVEUkFXLCBpbnRl
cnZhbEluTVMsIHRpbWVvdXRfY2IsIDAsIDApOworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigp
Cit7CisgICAgaWYgKHNoYXJlZFRpbWVyID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGdi
b29sZWFuIHJlbW92ZWRTb3VyY2UgPSBnX3NvdXJjZV9yZW1vdmUoc2hhcmVkVGltZXIpOworICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZFNvdXJjZSwgcmVtb3ZlZFNvdXJjZSk7CisgICAgc2hhcmVk
VGltZXIgPSAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5k
R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJm
NzMxNmNhZmQyZWNlZjdiNjFlOGFkZjEyOTM2MjY4YTkyMjRjNGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkKK3sKKyAgICBnZGtf
YmVlcCgpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2IzNDQ0OTNkNWIzMWQ4ZGQ4
NTAzOTg5MzY4ZmFhYjAzNTRhMzM5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQ29va2llU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgIkROUy5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgorI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMg
KG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbmFtZXNwYWNlIFdlYkNvcmUg
ewordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQorU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNp
Z25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBL
VVJMICZ1cmwpIHsgcmV0dXJuIFN0cmluZygpOyB9CitmbG9hdCB1c2VySWRsZVRpbWUoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBGTFRfTUFYOyB9IC8vIHJldHVybiBhbiBhcmJpdHJhcmls
eSBoaWdoIHVzZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2luZyBwYWdlcyBmcm9tIHRoZSBwYWdl
IGNhY2hlIGlzbid0IHBvc3Rwb25lZAorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1VzZXJBZ2VudEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjNiYzczMzM4Yzk0OGU2OTc3MzI3NDk5NGQzNWEyMWJkMjA2ZTBkOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcApA
QCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRHdGsuaCIKKwor
I2luY2x1ZGUgPGdsaWIuaD4KKworI2lmIE9TKFVOSVgpCisjaW5jbHVkZSA8c3lzL3V0c25hbWUu
aD4KKyNlbGlmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIHBsYXRmb3JtRm9yVUFT
dHJpbmcoKQoreworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICByZXR1cm4gIlgxMSI7CisjZWxpZiBP
UyhXSU5ET1dTKQorICAgIHJldHVybiAiIjsKKyNlbGlmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1
cm4gIk1hY2ludG9zaCI7CisjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfRElSRUNURkIpCisg
ICAgcmV0dXJuICJEaXJlY3RGQiI7CisjZWxzZQorICAgIHJldHVybiAiVW5rbm93biI7CisjZW5k
aWYKK30KKworc3RhdGljIFN0cmluZyBwbGF0Zm9ybVZlcnNpb25Gb3JVQVN0cmluZygpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVhT1NWZXJzaW9uLCAoU3RyaW5nKCkpKTsK
KyAgICBpZiAoIXVhT1NWZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHVhT1NWZXJz
aW9uOworCisjaWYgT1MoV0lORE9XUykKKyAgICB1YU9TVmVyc2lvbiA9IHdpbmRvd3NWZXJzaW9u
Rm9yVUFTdHJpbmcoKTsKKyNlbGlmIE9TKERBUldJTikKKyNpZiBDUFUoWDg2KQorICAgIHVhT1NW
ZXJzaW9uID0gIkludGVsIE1hYyBPUyBYIjsKKyNlbHNlCisgICAgdWFPU1ZlcnNpb24gPSAiUFBD
IE1hYyBPUyBYIjsKKyNlbmRpZgorI2VsaWYgT1MoVU5JWCkKKyAgICBzdHJ1Y3QgdXRzbmFtZSBu
YW1lOworICAgIGlmICh1bmFtZSgmbmFtZSkgIT0gLTEpCisgICAgICAgIHVhT1NWZXJzaW9uID0g
U3RyaW5nOjpmb3JtYXQoIiVzICVzIiwgbmFtZS5zeXNuYW1lLCBuYW1lLm1hY2hpbmUpOworICAg
IGVsc2UKKyAgICAgICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKKyNlbHNlCisg
ICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKKyNlbmRpZgorICAgIHJldHVybiB1
YU9TVmVyc2lvbjsKK30KKworU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYg
YXBwbGljYXRpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVyc2lvbikKK3sKKyAg
ICAvLyBDcmVhdGUgYSBkZWZhdWx0IHVzZXIgYWdlbnQgc3RyaW5nIHdpdGggYSBsaWJlcmFsIGlu
dGVycHJldGF0aW9uIG9mIAorICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
LVVTL2RvY3MvVXNlcl9BZ2VudF9TdHJpbmdzX1JlZmVyZW5jZQorICAgIC8vCisgICAgLy8gRm9y
bWluZyBhIGZ1bmN0aW9uYWwgdXNlciBhZ2VudCBpcyByZWFsbHkgZGlmZmljdWx0LiBXZSBtdXN0
IG1lbnRpb24gU2FmYXJpLCBiZWNhdXNlIHNvbWUKKyAgICAvLyBzaXRlcyBjaGVjayBmb3IgdGhh
dCB3aGVuIGRldGVjdGluZyBXZWJLaXQgYnJvd3NlcnMuIEFkZGl0aW9uYWxseSBzb21lIHNpdGVz
IGFzc3VtZSB0aGF0CisgICAgLy8gYnJvd3NlcnMgdGhhdCBhcmUgIlNhZmFyaSIgYnV0IG5vdCBy
dW5uaW5nIG9uIE9TIFggYXJlIHRoZSBTYWZhcmkgaU9TIGJyb3dzZXIsIHNvIHdlCisgICAgLy8g
YWxzbyBjbGFpbSB0byBiZSAgQ2hyb21pdW0uIEdldHRpbmcgdGhpcyB3cm9uZyBjYW4gY2F1c2Ug
c2l0ZXMgdG8gbG9hZCB0aGUgd3JvbmcgSmF2YVNjcmlwdCwKKyAgICAvLyBDU1MsIG9yIGN1c3Rv
bSBmb250cy4gSW4gc29tZSBjYXNlcyBzaXRlcyB3b24ndCBsb2FkIHJlc291cmNlcyBhdCBhbGwu
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBDU3RyaW5nLCB1YVZlcnNpb24sIChTdHJp
bmc6OmZvcm1hdCgiJWkuJWkiLCBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OLCBXRUJL
SVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OKS51dGY4KCkpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgc3RhdGljVUEsIChTdHJpbmc6OmZvcm1hdCgiTW96aWxsYS81
LjAgKCVzOyAlcykgQXBwbGVXZWJLaXQvJXMgKEtIVE1MLCBsaWtlIEdlY2tvKSAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkNocm9taXVtLzI1LjAuMTM0OS4yIENocm9tZS8yNS4wLjEzNDkuMiBTYWZhcmkvJXMiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsYXRmb3JtRm9yVUFTdHJpbmcoKSwgcGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcoKS51
dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVhVmVyc2lvbi5kYXRhKCksIHVhVmVyc2lvbi5kYXRhKCkp
KSk7CisgICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBz
dGF0aWNVQTsKKworICAgIFN0cmluZyBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IGFwcGxpY2F0
aW9uVmVyc2lvbjsKKyAgICBpZiAoZmluYWxBcHBsaWNhdGlvblZlcnNpb24uaXNFbXB0eSgpKQor
ICAgICAgICBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IHVhVmVyc2lvbi5kYXRhKCk7CisKKyAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzICVzLyVzIiwgc3RhdGljVUEudXRmOCgpLmRhdGEo
KSwgYXBwbGljYXRpb25OYW1lLnV0ZjgoKS5kYXRhKCksIGZpbmFsQXBwbGljYXRpb25WZXJzaW9u
LnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW4gYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1VzZXJBZ2VudEd0ay5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhNTBiN2EzMmQyOGYwMjFlODQ2
Mzc2ODdkN2RkOWI2YzkwYzc1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1VzZXJBZ2VudEd0ay5oLmluCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFVzZXJBZ2VudEd0a19oCisjZGVm
aW5lIFVzZXJBZ2VudEd0a19oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNkZWZpbmUgV0VCS0lUX1VTRVJfQUdFTlRf
TUFKT1JfVkVSU0lPTiAoQFdFQktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT05AKQorI2RlZmlu
ZSBXRUJLSVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OIChAV0VCS0lUX1VTRVJfQUdFTlRfTUlO
T1JfVkVSU0lPTkApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIHN0YW5kYXJkVXNl
ckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lID0gIiIsIGNvbnN0IFN0cmluZyYg
YXBwbGljYXRpb25WZXJzaW9uID0gIiIpOworCit9CisKKyNlbmRpZiAvLyBVc2VyQWdlbnRHdGtf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAzZjNjOWM3YzlhNmUy
YzlhMzRjMDkxZWU5NGJjYjEzNzhjNmYzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdl
dC5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lk
Z2V0IHdpZGdldCkKK3sKKyAgICBpbml0KHdpZGdldCk7Cit9CisKK1dpZGdldDo6fldpZGdldCgp
Cit7CisgICAgQVNTRVJUKCFwYXJlbnQoKSk7CisKKyAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQo
KTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKK3sKK30KKwordm9p
ZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBTY3JvbGxW
aWV3KiB2aWV3ID0gcm9vdCgpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAg
IHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKKworICAgIGlmIChpc1BhcmVu
dFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBndGtfd2lkZ2V0X3Nob3co
cGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBzZXRT
ZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZv
cm1XaWRnZXQoKSkKKyAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3JtV2lkZ2V0KCkpOwor
fQorCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sIGlz
U2VsZWN0ZWQpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBTZWUgaWYgdGhlIHBsYXRmb3JtV2lkZ2V0IGhhcyBhIHdlYmtpdC13aWRnZXQt
aXMtc2VsZWN0ZWQgcHJvcGVydHkKKyAgICAvLyBhbmQgc2V0IGl0IGFmdGVyd2FyZHMuCisgICAg
R1BhcmFtU3BlYyogc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1Rf
R0VUX0NMQVNTKHBsYXRmb3JtV2lkZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQtd2lkZ2V0LWlzLXNlbGVjdGVkIik7Cisg
ICAgaWYgKCFzcGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXQocGxhdGZv
cm1XaWRnZXQoKSwgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQiLCBpc1NlbGVjdGVkLCBOVUxM
KTsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBmcmFtZVJlY3RzQ2hhbmdlZCgpOwor
fQorCit2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICByZXR1cm47CisgICAgZ19vYmplY3RfdW5yZWYocGxh
dGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZXRhaW5QbGF0Zm9ybVdpZGdldCgp
Cit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICAgcmV0dXJuOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHBsYXRmb3JtV2lkZ2V0KCkpOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWY1ZGE1
NDY4MzAzODUzNjMxMzcxYzRjN2VmMzYzZTcxNGY4MTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMCwwICsxLDI0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlJlbmRlclRo
ZW1lR3RrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgR2RrUGl4bWFwKiBnU2NyYXRjaEJ1ZmZlciA9IDA7Citz
dGF0aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKQoreworICAgIGlmIChnU2NyYXRjaEJ1ZmZl
cikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZ1NjcmF0Y2hCdWZmZXIpOworICAgIGdTY3JhdGNo
QnVmZmVyID0gMDsKK30KKworLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBhIHNjcmF0Y2ggaW1h
Z2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQorLy8gcmVuZGVyLiBJbnN0ZWFk
IG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlv
biwKKy8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVy
Z2VkIHZpYSBhIHRpbWVyLgorY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMg
VGltZXJCYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNj
cmF0Y2hCdWZmZXIoKTsgfQorfTsKKworc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHVyZ2VTY3JhdGNoQnVmZmVyVGlt
ZXIsIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCAoKSk7CisgICAgaWYgKHB1cmdlU2NyYXRjaEJ1
ZmZlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0
b3AoKTsKKyAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdGFydE9uZVNob3QoMik7Cit9CisK
K1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCisgICAg
OiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgLCBtX3RhcmdldFJlY3Qo
dGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJyb3IoZmFsc2UpCit7CisgICAgUmVuZGVyVGhlbWVH
dGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCkuZ2V0KCkpOworCisgICAgLy8gRmFsbGJhY2s6IFdlIGZhaWxlZCB0byBjcmVh
dGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJvcGVybHkgcGFpbnQg
CisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUgdHJhbnNwYXJlbmN5
LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKKyAgICAvLyBwYWludCBk
aXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90IHJlbmRlciBDU1Mg
cm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgorICAgIGlmICghdGhlbWUtPm1fdGhlbWVQ
YXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkgewor
ICAgICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNjcmF0
Y2ggYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG91ciB0YXJnZXQgR2RrRHJhd2FibGUu
CisgICAgLy8gVGhpcyBwcmV2ZW50cyBnaWFudCBwaXhtYXAgYWxsb2NhdGlvbnMgZm9yIHZlcnkg
bGFyZ2Ugd2lkZ2V0cyBpbiBzbWFsbGVyIHZpZXdzLgorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IGltcGxlbWVudCB0aGlzIGNoZWNrIGZvciBXZWJLaXQyIGFzIHdlbGwuCisgICAgaWYgKGdyYXBo
aWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKKyAgICAgICAgaW50IG1heFdpZHRoID0gMCwgbWF4
SGVpZ2h0ID0gMDsKKyAgICAgICAgZ2V0R2RrRHJhd2FibGVTaXplKGdyYXBoaWNzQ29udGV4dC0+
Z2RrV2luZG93KCksICZtYXhXaWR0aCwgJm1heEhlaWdodCk7CisgICAgICAgIG1fdGFyZ2V0UmVj
dC5zZXRTaXplKG1fdGFyZ2V0UmVjdC5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtYXhXaWR0aCwg
bWF4SGVpZ2h0KSkpOworICAgIH0KKworICAgIC8vIFdpZGdldHMgc29tZXRpbWVzIG5lZWQgdG8g
ZHJhdyBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMgZm9yIHRoaW5ncyBzdWNoIGFzCisgICAgLy8g
ZXh0ZXJpb3IgZm9jdXMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzb21lIGV4dHJhIHBpeGVscyBp
biBvdXIgc3VyZmFjZSBmb3IgdGhpcy4KKyAgICBzdGF0aWMgaW50IGV4dHJhU3BhY2UgPSAxNTsK
KyAgICBtX3RhcmdldFJlY3QuaW5mbGF0ZShleHRyYVNwYWNlKTsKKworICAgIC8vIFRoaXMgb2Zm
c2V0IHdpbGwgbWFwIGEgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSB3aWRn
ZXQgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludGluZyBidWZmZXIuCisgICAg
bV9wYWludE9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtIG1fdGFyZ2V0UmVjdC5sb2Nh
dGlvbigpOworCisgICAgaW50IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRoKCkgKyAoZXh0cmFT
cGFjZSAqIDIpOworICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCkgKyAoZXh0
cmFTcGFjZSAqIDIpOworICAgIGludCBzY3JhdGNoV2lkdGggPSAwOworICAgIGludCBzY3JhdGNo
SGVpZ2h0ID0gMDsKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdka19waXhtYXBf
Z2V0X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lkdGgsICZzY3JhdGNoSGVpZ2h0KTsK
KworICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGN1
cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICBpZiAoIWdTY3JhdGNoQnVmZmVyIHx8
IHNjcmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWlnaHQgPCBoZWlnaHQpIHsKKyAgICAg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisgICAgICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0
IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBzaW1pbGFyIHNpemVk
IHJlcXVlc3RzLgorICAgICAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OworICAg
ICAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7CisKKyAgICAgICAgZ1NjcmF0
Y2hCdWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwgaGVpZ2h0LCBnZGtfY29sb3JtYXBf
Z2V0X3Zpc3VhbCh0aGVtZS0+bV9jb2xvcm1hcCktPmRlcHRoKTsKKyAgICAgICAgZ2RrX2RyYXdh
YmxlX3NldF9jb2xvcm1hcChnU2NyYXRjaEJ1ZmZlciwgdGhlbWUtPm1fY29sb3JtYXApOworICAg
IH0KKyAgICBtX3RhcmdldCA9IGdTY3JhdGNoQnVmZmVyOworCisgICAgLy8gQ2xlYXIgdGhlIHNj
cmF0Y2ggYnVmZmVyLgorICAgIFJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9
IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsKKyAgICBjYWlyb19z
ZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NM
RUFSKTsKKyAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Cit9CisK
K1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAg
ICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdldCBpbiB0aGUgZmFs
bGJhY2sgY2FzZS4gU2VlIGFib3ZlLgorICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgp
KTsKKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIG1fZ3Jh
cGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG9u
J3QgcGFpbnQgdGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisgICAgaWYg
KG1faGFkRXJyb3IpIHsKKyAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgaXQg
aXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBoZXJlLgorICAgIGNh
aXJvX3QqIGNhaXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKTsKKyAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJjZShjYWly
b19nZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOworCisgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2Vf
cGl4bWFwKGNhaXJvQ29udGV4dCwgZ1NjcmF0Y2hCdWZmZXIsIG1fdGFyZ2V0UmVjdC54KCksIG1f
dGFyZ2V0UmVjdC55KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRleHQsIG1fdGFy
Z2V0UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCksIG1fdGFyZ2V0UmVjdC53aWR0aCgpLCBtX3Rh
cmdldFJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250ZXh0KTsKKyAgICBj
YWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2UuZ2V0KCkpOworICAg
IHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Y2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgR2RrUmVjdGFu
Z2xlKiBjbGlwUmVjdCkKK3sKKyAgICBjbGlwUmVjdC0+eCA9IG1fcGFpbnRPZmZzZXQud2lkdGgo
KSArIHJlY3QueCgpOworICAgIGNsaXBSZWN0LT55ID0gbV9wYWludE9mZnNldC5oZWlnaHQoKSAr
IHJlY3QueSgpOworICAgIGNsaXBSZWN0LT53aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpOwor
ICAgIGNsaXBSZWN0LT5oZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCk7Cit9CisKK3ZvaWQg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgY2xp
cFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKKworICAgIC8v
IFNvbWUgd2lkZ2V0cyBhbHNvIG5lZWQgdGhlaXIgYWxsb2NhdGlvbiBhZGp1c3RlZCB0byBhY2Nv
dW50IGZvciBleHRyYSBzcGFjZS4KKyAgICAvLyBSaWdodCBub3cgb25seSBzY3JvbGxiYXIgYnV0
dG9ucyBoYXZlIHNpZ25pZmljYW50IGFsbG9jYXRpb25zLgorICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRp
b24pOworICAgIGFsbG9jYXRpb24ueCArPSBjbGlwUmVjdC54OworICAgIGFsbG9jYXRpb24ueSAr
PSBjbGlwUmVjdC55OworICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxs
b2NhdGlvbik7CisKKyAgICBndGtfcGFpbnRfYm94KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwKKyAgICAgICAg
ICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
Omd0a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwg
R3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBn
Y2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxh
dGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9mbGF0X2JveChndGtf
d2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBl
LCAmY2xpcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlw
UmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2
b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYg
cmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdj
aGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0
ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2ZvY3VzKGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lk
Z2V0LAorICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0Lnks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwg
Y29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlw
UmVjdCk7CisgICAgZ3RrX3BhaW50X3NsaWRlcihndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
LCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAg
ICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpLCBvcmllbnRhdGlvbik7Cit9CisKK3ZvaWQgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
KyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9j
aGVjayhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBz
aGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgZGV0YWls
LCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
fQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0aW9uKGNvbnN0IElu
dFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBH
dGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2Rr
UmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVj
dCk7CisgICAgZ3RrX3BhaW50X29wdGlvbihndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBt
X3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAgICAg
ICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojpn
dGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
U3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hh
ciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVD
bGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9zaGFkb3coZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNs
aXBSZWN0LCB3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0Lngs
IGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBH
dGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBz
aGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7Cisg
ICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZj
bGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2Fycm93KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBk
ZXRhaWwsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a0Fycm93VHlwZT4oYXJy
b3dEaXJlY3Rpb24pLCBUUlVFLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1Bh
aW50VkxpbmUoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRl
VHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xl
IGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAg
Z3RrX3BhaW50X3ZsaW5lKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBz
dGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWwsCisgICAgICAgICAgICAgICAgICAg
IGNsaXBSZWN0LnksIGNsaXBSZWN0LnkgKyByZWN0LmhlaWdodCgpLCBjbGlwUmVjdC54KTsKKwor
fQorCit9CisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWYyYzhhNzcxYzBlMTY3
MzM3NDhkZDY0ZjQ0ZWNhYzBlMGNmOTkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCisjZGVmaW5lIFdpZGdldFJlbmRl
cmluZ0NvbnRleHRfaAorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworI2luY2x1ZGUgIklu
dFJlY3QuaCIKKworLy8gVXN1YWxseSB0aGlzIGlzIHRvbyBleHBlbnNpdmUgdG8gaGF2ZSBpbiBo
ZWFkZXJzLCBidXQgR3RrU3RhdGVUeXBlIEd0a1NoYWRvd1R5cGUgYXJlCisvLyBlbnVtcyBhbmQg
Y2Fubm90IGJlIGZvcndhcmQgZGVjbGFyZWQuIFdpZGdldFJlbmRlcmluZ0NvbnRleHQuaCBpcyBj
dXJyZW50bHkgb25seQorLy8gaW5jbHVkZWQgaW4gUmVuZGVyVGhlbWVHdGsyLmNwcCBhbmQgU2Ny
b2xsYmFyVGhlbWVHdGsyLmNwcC4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUmVuZGVyVGhlbWVHdGs7
CisKK2NsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgeworcHVibGljOgorICAgIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIH5X
aWRnZXRSZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICB2b2lkIGd0a1BhaW50Qm94KGNvbnN0IElu
dFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdj
aGFyKik7CisgICAgdm9pZCBndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdl
dCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lk
IGd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwg
Y29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50U2xpZGVyKGNvbnN0IEludFJlY3QmLCBH
dGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiwgR3Rr
T3JpZW50YXRpb24pOworICAgIHZvaWQgZ3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiwgR3Rr
V2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOworICAg
IHZvaWQgZ3RrUGFpbnRPcHRpb24oY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50U2hh
ZG93KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludEFycm93KGNvbnN0IEludFJlY3Qm
LCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGludCBhcnJvd0RpcmVj
dGlvbiwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50VkxpbmUoY29uc3QgSW50UmVj
dCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgY29uc3QgZ2NoYXIqKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmLCBHZGtSZWN0YW5nbGUq
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7CisgICAgSW50UmVj
dCBtX3RhcmdldFJlY3Q7CisgICAgSW50U2l6ZSBtX3BhaW50T2Zmc2V0OworICAgIGJvb2wgbV9o
YWRFcnJvcjsKKyAgICBHZGtEcmF3YWJsZSogbV90YXJnZXQ7CisKK307CisKK30KKworI2VuZGlm
IC8vIEdUS19BUElfVkVSU0lPTl8yCisjZW5kaWYgLy8gV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvYXVkaW8vQXVkaW9CdXNHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
Yzc4N2Y1MDVhY2ZkMzBiMmVmNmE3NjM3YzBiMDRhOThhMDNjNmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcApAQCAtMCwwICsxLDQ5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKworI2luY2x1ZGUgIkF1ZGlvRmlsZVJl
YWRlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRlIDxn
bGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxBdWRpb0J1cz4gQXVk
aW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGZsb2F0IHNhbXBs
ZVJhdGUpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIl
cy53YXYiLCBuYW1lKSk7CisgICAgY29uc3QgY2hhciogZW52aXJvbm1lbnRQYXRoID0gZ2V0ZW52
KCJBVURJT19SRVNPVVJDRVNfUEFUSCIpOworICAgIEdPd25QdHI8Z2NoYXI+IGFic29sdXRlRmls
ZW5hbWU7CisgICAgaWYgKGVudmlyb25tZW50UGF0aCkKKyAgICAgICAgYWJzb2x1dGVGaWxlbmFt
ZS5zZXQoZ19idWlsZF9maWxlbmFtZShlbnZpcm9ubWVudFBhdGgsIGZpbGVuYW1lLmdldCgpLCBO
VUxMKSk7CisgICAgZWxzZQorICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNldChnX2J1aWxkX2Zp
bGVuYW1lKHNoYXJlZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJyZXNvdXJjZXMiLCAiYXVkaW8i
LCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOworICAgIHJldHVybiBjcmVhdGVCdXNGcm9tQXVkaW9G
aWxlKGFic29sdXRlRmlsZW5hbWUuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9ncmFwaGljcy9Db2xvckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY1NmJhNmZi
NGUwYjY1YTk5YzI3M2QzYjQ3MGJmZGI2YjM1YjlhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDb2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCisgICAgOiBtX2NvbG9yKG1ha2VS
R0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCisgICAgLCBtX3ZhbGlk
KHRydWUpCit7Cit9CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKK0NvbG9yOjpDb2xvcihj
b25zdCBHZGtSR0JBJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+
KGMucmVkICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmdyZWVuICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmJsdWUgKiAyNTUpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
YWxwaGEgKiAyNTUpKSkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKK30KKworQ29sb3I6Om9wZXJh
dG9yIEdka1JHQkEoKSBjb25zdAoreworICAgIGRvdWJsZSByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YTsKKyAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBHZGtSR0JBIHJn
YmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgcmV0dXJuIHJnYmE7Cit9Cisj
ZW5kaWYKKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTlkN2YyZjVkZjMxNGZmM2E0NmNlNDJjNWI4NDc0OTQ5M2YwYmFiZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckd0ay5jcHAKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoTkFUSVZFX0ZVTExT
Q1JFRU5fVklERU8pCisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgi
CisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgorI2luY2x1
ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCIKKworI2luY2x1ZGUgPGdkay9nZGsu
aD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGli
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2RlZmluZSBIVURfQVVUT19ISURFX0lOVEVSVkFMIDMwMDAgLy8gMyBzZWNvbmRzCisjZGVm
aW5lIFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwgMTUwIC8vIDE1MG1zCisKKy8vIFVzZSBz
eW1ib2xpYyBpY29ucyBvbmx5IGlmIHdlIGJ1aWxkIHdpdGggR1RLKy0zIHN1cHBvcnQuIFRoZXkg
Y291bGQKKy8vIGJlIGVuYWJsZWQgZm9yIHRoZSBHVEsrMiBidWlsZCBidXQgd2UnZCBuZWVkIHRv
IGJ1bXAgdGhlIHJlcXVpcmVkCisvLyB2ZXJzaW9uIHRvIGF0IGxlYXN0IDIuMjIuCisjaWYgR1RL
X01BSk9SX1ZFUlNJT04gPiAyCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVggIi1zeW1ib2xpYyIK
KyNlbHNlCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVgKKyNlbmRpZgorCisjZGVmaW5lIFBMQVlf
SUNPTl9OQU1FICJtZWRpYS1wbGF5YmFjay1zdGFydCJJQ09OX05BTUVfU1VGRklYCisjZGVmaW5l
IFBBVVNFX0lDT05fTkFNRSAibWVkaWEtcGxheWJhY2stcGF1c2UiSUNPTl9OQU1FX1NVRkZJWAor
I2RlZmluZSBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FICJ2aWV3LXJlc3RvcmUiSUNPTl9OQU1F
X1NVRkZJWAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBnYm9vbGVhbiBoaWRlSHVk
Q2FsbGJhY2soRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAg
ICBjb250cm9sbGVyLT5oaWRlSHVkKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gb25GdWxsc2NyZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCwgIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsq
IGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2hvd0h1ZCh0cnVlKTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgb25GdWxsc2NyZWVuR3RrQWN0aXZlTm90aWZpY2F0
aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHUGFyYW1TcGVjKiBwcm9wZXJ0eSwgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBpZiAoIWd0a193aW5kb3dfaXNf
YWN0aXZlKEdUS19XSU5ET1cod2lkZ2V0KSkpCisgICAgICAgIGNvbnRyb2xsZXItPmhpZGVIdWQo
KTsKK30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNjcmVlbkd0a0NvbmZpZ3VyZUV2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudENvbmZpZ3VyZSogZXZlbnQsIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+Z3RrQ29uZmln
dXJlKGV2ZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgb25GdWxsc2Ny
ZWVuR3RrRGVzdHJveShHdGtXaWRnZXQqIHdpZGdldCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOwor
fQorCitzdGF0aWMgdm9pZCB0b2dnbGVQbGF5UGF1c2VBY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rp
b24sIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29u
dHJvbGxlci0+dG9nZ2xlUGxheSgpOworfQorCitzdGF0aWMgdm9pZCBleGl0RnVsbHNjcmVlbkFj
dGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayog
Y29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0T25Vc2VyUmVxdWVzdCgpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gcHJvZ3Jlc3NCYXJVcGRhdGVDYWxsYmFjayhGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIHJldHVybiBjb250cm9sbGVyLT51
cGRhdGVIdWRQcm9ncmVzc0JhcigpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZVNjYWxlQnV0
dG9uUHJlc3NlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50LCBGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIGlmIChldmVudC0+
dHlwZSAhPSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBj
b250cm9sbGVyLT5iZWdpblNlZWsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB0aW1lU2NhbGVCdXR0b25SZWxlYXNlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnRCdXR0b24qIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVy
KQoreworICAgIGNvbnRyb2xsZXItPmVuZFNlZWsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyB2b2lkIHRpbWVTY2FsZVZhbHVlQ2hhbmdlZChHdGtXaWRnZXQqIHdpZGdldCwgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVy
LT5kb1NlZWsoKTsKK30KKworc3RhdGljIHZvaWQgdm9sdW1lVmFsdWVDaGFuZ2VkKEd0a1NjYWxl
QnV0dG9uICpidXR0b24sIGdkb3VibGUgdmFsdWUsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2V0Vm9sdW1lKHN0YXRpY19jYXN0
PGZsb2F0Pih2YWx1ZSkpOworfQorCisKK0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OkZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSogcGxheWVyKQorICAgIDogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcihwbGF5
ZXIpCisgICAgLCBtX2h1ZFRpbWVvdXRJZCgwKQorICAgICwgbV9wcm9ncmVzc0JhclVwZGF0ZUlk
KDApCisgICAgLCBtX3NlZWtMb2NrKGZhbHNlKQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1f
aHVkV2luZG93KDApCisgICAgLCBtX3ZvbHVtZUJ1dHRvbigwKQorICAgICwgbV9rZXlQcmVzc1Np
Z25hbElkKDApCisgICAgLCBtX2Rlc3Ryb3lTaWduYWxJZCgwKQorICAgICwgbV9pc0FjdGl2ZVNp
Z25hbElkKDApCisgICAgLCBtX21vdGlvbk5vdGlmeVNpZ25hbElkKDApCisgICAgLCBtX2NvbmZp
Z3VyZUV2ZW50U2lnbmFsSWQoMCkKKyAgICAsIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQoMCkK
KyAgICAsIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkKDApCisgICAgLCBtX3RpbWVT
Y2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQoMCkKKyAgICAsIG1fcGxheUFjdGlvbkFjdGl2YXRl
U2lnbmFsSWQoMCkKKyAgICAsIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQo
MCkKK3sKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpndGtDb25maWd1
cmUoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQoreworICAgIHVwZGF0ZUh1ZFBvc2l0aW9uKCk7
Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6c2hvd0h1ZChib29sIGF1
dG9IaWRlKQoreworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1l
b3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQorCisgICAgLy8gU2hv
dyB0aGUgY3Vyc29yLgorICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KG1fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCAwKTsKKwor
ICAgIC8vIFVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyIGltbWVkaWF0ZWx5IGJlZm9yZSBzaG93aW5n
IHRoZSB3aW5kb3cuCisgICAgdXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsKKyAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKG1faHVkV2luZG93KTsKKyAgICB1cGRhdGVIdWRQb3NpdGlvbigpOworCisgICAg
Ly8gU3RhcnQgcGVyaW9kaWMgdXBkYXRlcyBvZiB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIGlmICgh
bV9wcm9ncmVzc0JhclVwZGF0ZUlkKQorICAgICAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSBn
X3RpbWVvdXRfYWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2spLCB0aGlzKTsKKworICAg
IC8vIEhpZGUgdGhlIGh1ZCBpbiBmZXcgc2Vjb25kcywgaWYgcmVxdWVzdGVkLgorICAgIGlmIChh
dXRvSGlkZSkKKyAgICAgICAgbV9odWRUaW1lb3V0SWQgPSBnX3RpbWVvdXRfYWRkKEhVRF9BVVRP
X0hJREVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhpZGVIdWRDYWxs
YmFjayksIHRoaXMpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Omhp
ZGVIdWQoKQoreworICAgIGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAg
fQorCisgICAgaWYgKCFtX2h1ZFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gS2Vl
cCB0aGUgaHVkIHZpc2libGUgaWYgYSBzZWVrIGlzIGluIHByb2dyZXNzIG9yIGlmIHRoZSB2b2x1
bWUKKyAgICAvLyBwb3B1cCBpcyB2aXNpYmxlLgorICAgIEd0a1dpZGdldCogdm9sdW1lUG9wdXAg
PSBndGtfc2NhbGVfYnV0dG9uX2dldF9wb3B1cChHVEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0
dG9uKSk7CisgICAgaWYgKG1fc2Vla0xvY2sgfHwgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh2b2x1
bWVQb3B1cCkpIHsKKyAgICAgICAgc2hvd0h1ZCh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2lu
ZG93KTsKKyAgICBHZGtDdXJzb3IqIGN1cnNvciA9IGJsYW5rQ3Vyc29yKCk7CisgICAgZ2RrX3dp
bmRvd19zZXRfY3Vyc29yKHdpbmRvdywgY3Vyc29yKTsKKworICAgIGd0a193aWRnZXRfaGlkZSht
X2h1ZFdpbmRvdyk7CisKKyAgICBpZiAobV9wcm9ncmVzc0JhclVwZGF0ZUlkKSB7CisgICAgICAg
IGdfc291cmNlX3JlbW92ZShtX3Byb2dyZXNzQmFyVXBkYXRlSWQpOworICAgICAgICBtX3Byb2dy
ZXNzQmFyVXBkYXRlSWQgPSAwOworICAgIH0KK30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNj
cmVlbkd0a0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVu
dCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBzd2l0
Y2ggKGV2ZW50LT5rZXl2YWwpIHsKKyAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgIGNvbnRy
b2xsZXItPmV4aXRPblVzZXJSZXF1ZXN0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RL
X3NwYWNlOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgY29udHJvbGxlci0+dG9nZ2xl
UGxheSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19VcDoKKyAgICAgICAgY29udHJv
bGxlci0+aW5jcmVhc2VWb2x1bWUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfRG93
bjoKKyAgICAgICAgY29udHJvbGxlci0+ZGVjcmVhc2VWb2x1bWUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6aW5pdGlhbGl6ZVdpbmRv
dygpCit7CisgICAgbV93aW5kb3cgPSByZWludGVycHJldF9jYXN0PEd0a1dpZGdldCo+KG1fZ3N0
cmVhbWVyR1dvcmxkLT5wbGF0Zm9ybVZpZGVvV2luZG93KCktPndpbmRvdygpKTsKKworICAgIGlm
ICghbV9odWRXaW5kb3cpCisgICAgICAgIGNyZWF0ZUh1ZCgpOworCisgICAgLy8gRW5zdXJlIGJs
YWNrIGJhY2tncm91bmQuCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtDb2xvciBj
b2xvciA9IHsgMSwgMCwgMCwgMCB9OworICAgIGd0a193aWRnZXRfbW9kaWZ5X2JnKG1fd2luZG93
LCBHVEtfU1RBVEVfTk9STUFMLCAmY29sb3IpOworI2Vsc2UKKyAgICBHZGtSR0JBIGNvbG9yID0g
eyAwLCAwLCAwLCAxfTsKKyAgICBndGtfd2lkZ2V0X292ZXJyaWRlX2JhY2tncm91bmRfY29sb3Io
bV93aW5kb3csIEdUS19TVEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKKyNlbmRpZgorICAgIGd0
a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChtX3dpbmRvdywgRkFMU0UpOworCisgICAgbV9r
ZXlQcmVzc1NpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImtleS1wcmVzcy1l
dmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrS2V5UHJlc3NFdmVudCksIHRoaXMpOwor
ICAgIG1fZGVzdHJveVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImRlc3Ry
b3kiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3kpLCB0aGlzKTsKKyAgICBtX2lz
QWN0aXZlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAibm90aWZ5Ojppcy1h
Y3RpdmUiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0FjdGl2ZU5vdGlmaWNhdGlvbiksIHRo
aXMpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7CisKKyAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7CisgICAgR1JlZlB0
cjxHZGtDdXJzb3I+IGN1cnNvcihhZG9wdEdSZWYoYmxhbmtDdXJzb3IoKSkpOworICAgIGdka193
aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNvci5nZXQoKSk7CisKKyAgICBtX21vdGlvbk5v
dGlmeVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgIm1vdGlvbi1ub3RpZnkt
ZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KSwgdGhp
cyk7CisgICAgbV9jb25maWd1cmVFdmVudFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dp
bmRvdywgImNvbmZpZ3VyZS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrQ29uZmln
dXJlRXZlbnQpLCB0aGlzKTsKKworICAgIGd0a193aW5kb3dfZnVsbHNjcmVlbihHVEtfV0lORE9X
KG1fd2luZG93KSk7CisgICAgc2hvd0h1ZCh0cnVlKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrOjp1cGRhdGVIdWRQb3NpdGlvbigpCit7CisgICAgaWYgKCFtX2h1ZFdp
bmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBzY3JlZW4gcmVjdGFuZ2xl
LgorICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpbmRvd19nZXRfc2NyZWVuKEdUS19XSU5E
T1cobV93aW5kb3cpKTsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyhtX3dpbmRvdyk7CisgICAgR2RrUmVjdGFuZ2xlIGZ1bGxzY3JlZW5SZWN0YW5nbGU7Cisg
ICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIGdka19zY3JlZW5fZ2V0
X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93KSwgJmZ1bGxzY3JlZW5SZWN0YW5nbGUp
OworCisgICAgLy8gR2V0IHRoZSBwb3B1cCB3aW5kb3cgc2l6ZS4KKyAgICBpbnQgaHVkV2lkdGgs
IGh1ZEhlaWdodDsKKyAgICBndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5ET1cobV9odWRXaW5k
b3cpLCAmaHVkV2lkdGgsICZodWRIZWlnaHQpOworCisgICAgLy8gUmVzaXplIHRoZSBodWQgdG8g
dGhlIGZ1bGwgd2lkdGggb2YgdGhlIHNjcmVlbi4KKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtf
V0lORE9XKG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3RhbmdsZS53aWR0aCwgaHVkSGVpZ2h0
KTsKKworICAgIC8vIE1vdmUgdGhlIGh1ZCB0byB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uCisg
ICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBmdWxsc2NyZWVuUmVj
dGFuZ2xlLngsIGZ1bGxzY3JlZW5SZWN0YW5nbGUuaGVpZ2h0ICsgZnVsbHNjcmVlblJlY3Rhbmds
ZS55IC0gaHVkSGVpZ2h0KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
OjpkZXN0cm95V2luZG93KCkKK3sKKyAgICBpZiAoIW1faHVkV2luZG93KQorICAgICAgICByZXR1
cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fa2V5UHJl
c3NTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBt
X2Rlc3Ryb3lTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2lu
ZG93LCBtX2lzQWN0aXZlU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX3dpbmRvdywgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0KG1fd2luZG93LCBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFsSWQpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2h1ZFdpbmRvdywgbV9odWRNb3Rpb25Ob3RpZnlT
aWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhTY2FsZSwg
bV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRTaWduYWxJ
ZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhTY2FsZSwgbV9oc2Nh
bGVVcGRhdGVJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdm9sdW1lQnV0
dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qo
bV9wbGF5UGF1c2VBY3Rpb24sIG1fcGxheUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2V4aXRGdWxsc2NyZWVuQWN0aW9uLCBtX2V4aXRG
dWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKTsKKworICAgIGlmIChtX2h1ZFRpbWVvdXRJ
ZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBt
X2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJ
ZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0JhclVwZGF0ZUlkKTsKKyAg
ICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gMDsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0
X2hpZGUobV93aW5kb3cpOworCisgICAgaWYgKG1faHVkV2luZG93KQorICAgICAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kobV9odWRXaW5kb3cpOworICAgIG1faHVkV2luZG93ID0gMDsKK30KKwordm9p
ZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpwbGF5U3RhdGVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9jbGllbnQtPm1lZGlhUGxheWVySXNQYXVzZWQoKSkKKyAgICAgICAgZ19vYmplY3Rf
c2V0KG1fcGxheVBhdXNlQWN0aW9uLCAidG9vbHRpcCIsIF8oIlBsYXkiKSwgImljb24tbmFtZSIs
IFBMQVlfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGdfb2JqZWN0X3NldCht
X3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0aXAiLCBfKCJQYXVzZSIpLCAiaWNvbi1uYW1lIiwgUEFV
U0VfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBzaG93SHVkKCFtX2NsaWVudC0+bWVkaWFQbGF5ZXJJ
c1BhdXNlZCgpKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjp2b2x1
bWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fdm9sdW1lQnV0dG9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Jsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVw
ZGF0ZUlkKTsKKyAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9O
KG1fdm9sdW1lQnV0dG9uKSwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOworfQorCit2b2lk
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Om11dGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
IW1fdm9sdW1lQnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVy
X2Jsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBndGtfc2NhbGVf
YnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0dG9uKSwgbV9wbGF5
ZXItPm11dGVkKCkgPyAwIDogbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOworfQorCit2b2lk
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmJlZ2luU2VlaygpCit7CisgICAgbV9zZWVr
TG9jayA9IHRydWU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZG9T
ZWVrKCkKK3sKKyAgICBpZiAoIW1fc2Vla0xvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGxheWVyLT5zZWVrKGd0a19yYW5nZV9nZXRfdmFsdWUoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSkp
Km1fcGxheWVyLT5kdXJhdGlvbigpIC8gMTAwKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjplbmRTZWVrKCkKK3sKKyAgICBtX3NlZWtMb2NrID0gZmFsc2U7Cit9CisK
K2dib29sZWFuIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnVwZGF0ZUh1ZFByb2dyZXNz
QmFyKCkKK3sKKyAgICBmbG9hdCBtZWRpYUR1cmF0aW9uKG1fcGxheWVyLT5kdXJhdGlvbigpKTsK
KyAgICBmbG9hdCBtZWRpYVBvc2l0aW9uKG1fcGxheWVyLT5jdXJyZW50VGltZSgpKTsKKworICAg
IGlmICghbV9zZWVrTG9jaykgeworICAgICAgICBnZG91YmxlIHZhbHVlID0gMC4wOworCisgICAg
ICAgIGlmIChtZWRpYVBvc2l0aW9uICYmIG1lZGlhRHVyYXRpb24pCisgICAgICAgICAgICB2YWx1
ZSA9IChtZWRpYVBvc2l0aW9uICogMTAwLjApIC8gbWVkaWFEdXJhdGlvbjsKKworICAgICAgICBH
dGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gZ3RrX3JhbmdlX2dldF9hZGp1c3RtZW50KEdUS19S
QU5HRShtX3RpbWVIU2NhbGUpKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFk
anVzdG1lbnQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBndGtfcmFuZ2Vfc2V0X2ZpbGxfbGV2ZWwo
R1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIChtX3BsYXllci0+bWF4VGltZUxvYWRlZCgpIC8gbWVk
aWFEdXJhdGlvbikqIDEwMCk7CisKKyAgICBnY2hhciogbGFiZWwgPSBnX3N0cmR1cF9wcmludGYo
IiVzIC8gJXMiLCB0aW1lVG9TdHJpbmcobWVkaWFQb3NpdGlvbikudXRmOCgpLmRhdGEoKSwgdGlt
ZVRvU3RyaW5nKG1lZGlhRHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOworICAgIGd0a19sYWJlbF9z
ZXRfdGV4dChHVEtfTEFCRUwobV90aW1lTGFiZWwpLCBsYWJlbCk7CisgICAgZ19mcmVlKGxhYmVs
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrOjpjcmVhdGVIdWQoKQoreworICAgIG1faHVkV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19QT1BVUCk7CisgICAgZ3RrX3dpbmRvd19zZXRfZ3Jhdml0eShHVEtfV0lORE9XKG1f
aHVkV2luZG93KSwgR0RLX0dSQVZJVFlfU09VVEhfV0VTVCk7CisgICAgZ3RrX3dpbmRvd19zZXRf
dHlwZV9oaW50KEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBHREtfV0lORE9XX1RZUEVfSElOVF9O
T1JNQUwpOworCisgICAgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5l
Y3QobV9odWRXaW5kb3csICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxz
Y3JlZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMpOworCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDQpOworI2Vs
c2UKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9S
SVpPTlRBTCwgNCk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KG1faHVkV2luZG93KSwgaGJveCk7CisKKyAgICBtX3BsYXlQYXVzZUFjdGlvbiA9IGd0a19hY3Rp
b25fbmV3KCJwbGF5IiwgXygiUGxheSAvIFBhdXNlIiksIF8oIlBsYXkgb3IgcGF1c2UgdGhlIG1l
ZGlhIiksIFBBVVNFX0lDT05fTkFNRSk7CisgICAgbV9wbGF5QWN0aW9uQWN0aXZhdGVTaWduYWxJ
ZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5UGF1c2VBY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FM
TEJBQ0sodG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKSwgdGhpcyk7CisKKyAgICBHdGtXaWRnZXQq
IGl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV90b29sX2l0ZW0obV9wbGF5UGF1c2VBY3Rpb24pOwor
ICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBpdGVtLCBGQUxTRSwgVFJVRSwg
MCk7CisKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhfKCJUaW1lOiIpKTsK
KyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbGFiZWwsIEZBTFNFLCBUUlVF
LCAwKTsKKworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBHVEtfQURKVVNUTUVOVChn
dGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDEwMC4wLCAwLjEsIDEuMCwgMS4wKSk7CisjaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBtX3RpbWVIU2NhbGUgPSBndGtfaHNjYWxlX25ldyhh
ZGp1c3RtZW50KTsKKyNlbHNlCisgICAgbV90aW1lSFNjYWxlID0gZ3RrX3NjYWxlX25ldyhHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgYWRqdXN0bWVudCk7CisjZW5kaWYKKyAgICBndGtfc2Nh
bGVfc2V0X2RyYXdfdmFsdWUoR1RLX1NDQUxFKG1fdGltZUhTY2FsZSksIEZBTFNFKTsKKyAgICBn
dGtfcmFuZ2Vfc2V0X3Nob3dfZmlsbF9sZXZlbChHVEtfUkFOR0UobV90aW1lSFNjYWxlKSwgVFJV
RSk7CisgICAgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25u
ZWN0KG1fdGltZUhTY2FsZSwgImJ1dHRvbi1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0sodGltZVNj
YWxlQnV0dG9uUHJlc3NlZCksIHRoaXMpOworICAgIG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRT
aWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAiYnV0dG9uLXJlbGVhc2Ut
ZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZUJ1dHRvblJlbGVhc2VkKSwgdGhpcyk7CisgICAg
bV9oc2NhbGVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAidmFsdWUt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGltZVNjYWxlVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAg
ICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbV90aW1lSFNjYWxlLCBUUlVFLCBU
UlVFLCAwKTsKKworICAgIG1fdGltZUxhYmVsID0gZ3RrX2xhYmVsX25ldygiIik7CisgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUxhYmVsLCBGQUxTRSwgVFJVRSwg
MCk7CisKKyAgICAvLyBWb2x1bWUgYnV0dG9uLgorICAgIG1fdm9sdW1lQnV0dG9uID0gZ3RrX3Zv
bHVtZV9idXR0b25fbmV3KCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCks
IG1fdm9sdW1lQnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX3NjYWxlX2J1dHRvbl9z
ZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT52b2x1
bWUoKSk7CisgICAgbV92b2x1bWVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV92b2x1bWVC
dXR0b24sICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2b2x1bWVWYWx1ZUNoYW5nZWQpLCB0
aGlzKTsKKworICAgIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24gPSBndGtfYWN0aW9uX25ldygiZXhp
dCIsIF8oIkV4aXQgRnVsbHNjcmVlbiIpLCBfKCJFeGl0IGZyb20gZnVsbHNjcmVlbiBtb2RlIiks
IEVYSVRfRlVMTFNDUkVFTl9JQ09OX05BTUUpOworICAgIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFj
dGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24s
ICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soZXhpdEZ1bGxzY3JlZW5BY3RpdmF0ZWQpLCB0aGlzKTsK
KyAgICBnX29iamVjdF9zZXQobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgImljb24tbmFtZSIsIEVY
SVRfRlVMTFNDUkVFTl9JQ09OX05BTUUsIE5VTEwpOworICAgIGl0ZW0gPSBndGtfYWN0aW9uX2Ny
ZWF0ZV90b29sX2l0ZW0obV9leGl0RnVsbHNjcmVlbkFjdGlvbik7CisgICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goaGJveCksIGl0ZW0sIEZBTFNFLCBUUlVFLCAwKTsKKworICAgIG1fcHJv
Z3Jlc3NCYXJVcGRhdGVJZCA9IGdfdGltZW91dF9hZGQoUFJPR1JFU1NfQkFSX1VQREFURV9JTlRF
UlZBTCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocHJvZ3Jlc3NCYXJVcGRhdGVDYWxs
YmFjayksIHRoaXMpOworCisgICAgcGxheVN0YXRlQ2hhbmdlZCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3Jh
cGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU3
NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQxYjJjNDNiNjkxNDRiYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
ay5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBT
LkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKKyNk
ZWZpbmUgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCisKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKKworI2lu
Y2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrIDogcHVibGlj
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIgeworcHVibGljOgorICAgIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSop
OworCisgICAgdm9pZCBndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUqKTsKKworICAgIHZv
aWQgcGxheVN0YXRlQ2hhbmdlZCgpOworCisgICAgdm9pZCBiZWdpblNlZWsoKTsKKyAgICB2b2lk
IGRvU2VlaygpOworICAgIHZvaWQgZW5kU2VlaygpOworCisgICAgdm9pZCBoaWRlSHVkKCk7Cisg
ICAgdm9pZCBzaG93SHVkKGJvb2wpOworICAgIGdib29sZWFuIHVwZGF0ZUh1ZFByb2dyZXNzQmFy
KCk7CisKKyAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICB2b2lkIG11dGVDaGFuZ2VkKCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplV2luZG93KCk7CisgICAgdm9pZCBkZXN0
cm95V2luZG93KCk7CisKKyAgICB2b2lkIGNyZWF0ZUh1ZCgpOworICAgIHZvaWQgdXBkYXRlSHVk
UG9zaXRpb24oKTsKKworICAgIGd1aW50IG1faHVkVGltZW91dElkOworICAgIGd1aW50IG1fcHJv
Z3Jlc3NCYXJVcGRhdGVJZDsKKyAgICBndWludCBtX3Byb2dyZXNzQmFyRmlsbFVwZGF0ZUlkOwor
ICAgIGd1aW50IG1faHNjYWxlVXBkYXRlSWQ7CisgICAgZ3VpbnQgbV92b2x1bWVVcGRhdGVJZDsK
KyAgICBib29sIG1fc2Vla0xvY2s7CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsKKyAgICBHdGtX
aWRnZXQqIG1faHVkV2luZG93OworICAgIEd0a0FjdGlvbiogbV9wbGF5UGF1c2VBY3Rpb247Cisg
ICAgR3RrQWN0aW9uKiBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uOworICAgIEd0a1dpZGdldCogbV90
aW1lSFNjYWxlOworICAgIEd0a1dpZGdldCogbV90aW1lTGFiZWw7CisgICAgR3RrV2lkZ2V0KiBt
X3ZvbHVtZUJ1dHRvbjsKKworICAgIHVuc2lnbmVkIGxvbmcgbV9rZXlQcmVzc1NpZ25hbElkOwor
ICAgIHVuc2lnbmVkIGxvbmcgbV9kZXN0cm95U2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBt
X2lzQWN0aXZlU2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBtX21vdGlvbk5vdGlmeVNpZ25h
bElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9jb25maWd1cmVFdmVudFNpZ25hbElkOworICAgIHVu
c2lnbmVkIGxvbmcgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25n
IG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV90
aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9wbGF5
QWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXhpdEZ1bGxjcmVl
bkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQ7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODAxOGEzMGYwYzQx
ZTBlNGNlNWRjYzM4NGE5NTE5ZjU0NzA0NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkd0
a1ZlcnNpb25pbmcuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorCitHZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKQoreworICAgIHJldHVybiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uo
c3VyZmFjZSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtD
YWlyb1V0aWxpdGllcy5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0
aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmNWIzZWRlZmMxMTFkYjk0NmUzMmFjODFkMGZjMmEwNTBj
ZTAyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dk
a0NhaXJvVXRpbGl0aWVzLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2RrQ2Fpcm9VdGlsaXRpZXNfaAorI2Rl
ZmluZSBHZGtDYWlyb1V0aWxpdGllc19oCisKK0dka1BpeGJ1ZiogY2Fpcm9JbWFnZVN1cmZhY2VU
b0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOworCisjZW5kaWYgLy8gR2RrQ2Fp
cm9VdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9J
Y29uR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2U5NTdiMzQ1Y2U1ZmIyNzExYTEwYzY2ODAyNTNkYzUyNGVjODhmNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0ay5jcHAKQEAg
LTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ljb246Okljb24oKQorICAgIDog
bV9pY29uKDApCit7Cit9CisKK0ljb246On5JY29uKCkKK3sKKyAgICBpZiAobV9pY29uKQorICAg
ICAgICBnX29iamVjdF91bnJlZihtX2ljb24pOworfQorCitzdGF0aWMgU3RyaW5nIGxvb2t1cElj
b25OYW1lKFN0cmluZyBNSU1FVHlwZSkKK3sKKyAgICAvKgorICAgICBMb29rdXAgYW4gYXBwcm9w
cmlhdGUgaWNvbiBhY2NvcmRpbmcgdG8gZWl0aGVyIHRoZSBJY29uIE5hbWluZyBTcGVjCisgICAg
IG9yIGNvbnZlbnRpb25hbCBHbm9tZSBpY29uIG5hbWVzIHJlc3BlY3RpdmVseS4KKworICAgICBT
ZWUgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvaWNvbi1uYW1pbmctc3BlYy9pY29u
LW5hbWluZy1zcGVjLWxhdGVzdC5odG1sCisKKyAgICAgVGhlIGljb24gdGhlbWUgaXMgcHJvYmVk
IGZvciB0aGUgZm9sbG93aW5nIG5hbWVzOgorICAgICAxLiBtZWRpYS1zdWJ0eXBlCisgICAgIDIu
IGdub21lLW1pbWUtbWVkaWEtc3VidHlwZQorICAgICAzLiBtZWRpYS14LWdlbmVyaWMKKyAgICAg
NC4gZ25vbWUtbWltZS1tZWRpYQorCisgICAgIEluIHRoZSB3b3JzdCBjYXNlIGl0IGZhbGxzIGJh
Y2sgdG8gdGhlIHN0b2NrIGZpbGUgaWNvbi4KKyAgICAqLworICAgIGludCBwb3MgPSBNSU1FVHlw
ZS5maW5kKCcvJyk7CisgICAgaWYocG9zID49IDApIHsKKyAgICAgICAgU3RyaW5nIG1lZGlhID0g
TUlNRVR5cGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIFN0cmluZyBzdWJ0eXBlID0gTUlN
RVR5cGUuc3Vic3RyaW5nKHBvcyArIDEpOworICAgICAgICBHdGtJY29uVGhlbWUqIGljb25UaGVt
ZSA9IGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCk7CisgICAgICAgIFN0cmluZyBpY29uTmFt
ZSA9IG1lZGlhICsgIi0iICsgc3VidHlwZTsKKyAgICAgICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFz
X2ljb24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBpY29uTmFtZTsKKyAgICAgICAgaWNvbk5hbWUgPSAiZ25vbWUtbWltZS0iICsgbWVkaWEg
KyAiLSIgKyBzdWJ0eXBlOworICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29u
VGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGljb25O
YW1lOworICAgICAgICBpY29uTmFtZSA9IG1lZGlhICsgIi14LWdlbmVyaWMiOworICAgICAgICBp
ZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRh
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOworICAgICAgICBpY29uTmFtZSA9IG1l
ZGlhICsgImdub21lLW1pbWUtIiArIG1lZGlhOworICAgICAgICBpZihndGtfaWNvbl90aGVtZV9o
YXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAg
cmV0dXJuIGljb25OYW1lOworICAgIH0KKyAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTEU7Cit9CisK
Ky8vIEZJWE1FOiBNb3ZlIHRoZSBjb2RlIHRvIENocm9tZUNsaWVudDo6aWNvbkZvckZpbGVzKCku
CitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKKyAgICAg
ICAgaWYgKCFnX3BhdGhfc2tpcF9yb290KGZpbGVuYW1lc1swXS51dGY4KCkuZGF0YSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBNSU1FVHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlbmFtZXNbMF0pOworICAgICAgICBTdHJp
bmcgaWNvbk5hbWUgPSBsb29rdXBJY29uTmFtZShNSU1FVHlwZSk7CisKKyAgICAgICAgUmVmUHRy
PEljb24+IGljb24gPSBhZG9wdFJlZihuZXcgSWNvbik7CisgICAgICAgIGljb24tPm1faWNvbiA9
IGd0a19pY29uX3RoZW1lX2xvYWRfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBp
Y29uTmFtZS51dGY4KCkuZGF0YSgpLCAxNiwgR1RLX0lDT05fTE9PS1VQX1VTRV9CVUlMVElOLCAw
KTsKKyAgICAgICAgaWYgKCFpY29uLT5tX2ljb24pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIGljb24ucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vRklYTUU6IEltcGxl
bWVudCB0aGlzCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRPRE86IFNj
YWxlL2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KKyAgICBjYWlyb190KiBjciA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGdk
a19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgbV9pY29uLCByZWN0LngoKSwgcmVjdC55KCkp
OworICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUJ1ZmZlckd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlQnVmZmVyR3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NmZmNTNiNGZlMTExZDI0MzAyMjlmNjAzNjc2N2FjYTdlYmQ0ZDg1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUJ1ZmZlckd0ay5j
cHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiR1JlZlB0ckd0
ay5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUq
IHF1YWxpdHksIEdPd25QdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQorewor
ICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20g
dGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25v
bWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGst
cGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJz
dHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9
ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1w
IikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1
ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1
cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRh
VVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291
cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEu
CisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9f
Rk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
c3VyZmFjZSkpKTsKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNl
VG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhi
dWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Cisg
ICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdFcnJvciogZXJy
b3IgPSAwOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcg
PSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAg
KyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCks
ICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJv
ciwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworICAgIH0g
ZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1
ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLCBO
VUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgQ29v
cmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIEdPd25Q
dHI8Z2NoYXI+IGJ1ZmZlcigwKTsKKyAgICBnc2l6ZSBidWZmZXJTaXplOworICAgIGlmICghZW5j
b2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVm
ZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUsIGJh
c2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dy
YXBoaWNzL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlkOWZiZWZmMDI1ODQyYzJmMWY4NWVkNDk5ZjY0MTU5MjBlNDUy
ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdl
R3RrLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdPd25QdHJH
dGsuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNoYXIqIGdldFBhdGhUb0ltYWdlUmVzb3VyY2UoY2hh
ciogcmVzb3VyY2UpCit7CisgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVRfVE9QX0xFVkVMIikpCisg
ICAgICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0ZW52KCJXRUJLSVRfVE9QX0xFVkVM
IiksICJTb3VyY2UiLCAiV2ViQ29yZSIsICJSZXNvdXJjZXMiLCByZXNvdXJjZSwgTlVMTCk7CisK
KyAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQYXRoKCkuZGF0YSgp
LCAiaW1hZ2VzIiwgcmVzb3VyY2UsIE5VTEwpOworfQorCitzdGF0aWMgQ1N0cmluZyBnZXRUaGVt
ZUljb25GaWxlTmFtZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKK3sKKyAgICBHdGtJY29u
SW5mbyogaWNvbkluZm8gPSBndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVt
ZV9nZXRfZGVmYXVsdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUsIHNpemUsIEdUS19JQ09OX0xPT0tVUF9OT19TVkcpOworICAg
IC8vIFRyeSB0byBmYWxsYmFjayBvbiBNSVNTSU5HX0lNQUdFLgorICAgIGlmICghaWNvbkluZm8p
CisgICAgICAgIGljb25JbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2ljb24oZ3RrX2ljb25f
dGhlbWVfZ2V0X2RlZmF1bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwgc2l6ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfSUNPTl9MT09LVVBfTk9fU1ZHKTsK
KyAgICBpZiAoaWNvbkluZm8pIHsKKyAgICAgICAgR093blB0cjxHdGtJY29uSW5mbz4gaW5mbyhp
Y29uSW5mbyk7CisgICAgICAgIHJldHVybiBDU3RyaW5nKGd0a19pY29uX2luZm9fZ2V0X2ZpbGVu
YW1lKGluZm8uZ2V0KCkpKTsKKyAgICB9CisKKyAgICAvLyBObyBpY29uIHdhcyBmb3VuZCwgdGhp
cyBjYW4gaGFwcGVuIGlmIG5vdCBHVEsgdGhlbWUgaXMgc2V0LiBJbgorICAgIC8vIHRoYXQgY2Fz
ZSBhbiBlbXB0eSBJbWFnZSB3aWxsIGJlIGNyZWF0ZWQuCisgICAgcmV0dXJuIENTdHJpbmcoKTsK
K30KKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVzb3VyY2VTaGFyZWRC
dWZmZXIoQ1N0cmluZyBuYW1lKQoreworICAgIEdPd25QdHI8Z2NoYXI+IGNvbnRlbnQ7CisgICAg
Z3NpemUgbGVuZ3RoOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhuYW1lLmRhdGEoKSwg
JmNvbnRlbnQub3V0UHRyKCksICZsZW5ndGgsIDApKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoKTsKKworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50
LmdldCgpLCBsZW5ndGgpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKCkKK3sKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gbG9hZEltYWdlRnJvbUZpbGUoQ1N0
cmluZyBmaWxlTmFtZSkKK3sKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGltZyA9IEJpdG1hcElt
YWdlOjpjcmVhdGUoKTsKKyAgICBpZiAoIWZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihmaWxl
TmFtZSk7CisgICAgICAgIGltZy0+c2V0RGF0YShidWZmZXIucmVsZWFzZSgpLCB0cnVlKTsKKyAg
ICB9CisgICAgcmV0dXJuIGltZy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIENTdHJp
bmcgZmlsZU5hbWU7CisgICAgaWYgKCFzdHJjbXAoIm1pc3NpbmdJbWFnZSIsIG5hbWUpKQorICAg
ICAgICBmaWxlTmFtZSA9IGdldFRoZW1lSWNvbkZpbGVOYW1lKEdUS19TVE9DS19NSVNTSU5HX0lN
QUdFLCAxNik7CisgICAgaWYgKGZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIEdPd25QdHI8
Z2NoYXI+IGltYWdlTmFtZShnX3N0cmR1cF9wcmludGYoIiVzLnBuZyIsIG5hbWUpKTsKKyAgICAg
ICAgR093blB0cjxnY2hhcj4gZ2xpYkZpbGVOYW1lKGdldFBhdGhUb0ltYWdlUmVzb3VyY2UoaW1h
Z2VOYW1lLmdldCgpKSk7CisgICAgICAgIGZpbGVOYW1lID0gZ2xpYkZpbGVOYW1lLmdldCgpOwor
ICAgIH0KKworICAgIHJldHVybiBsb2FkSW1hZ2VGcm9tRmlsZShmaWxlTmFtZSk7Cit9CisKK1Bh
c3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24oY29uc3QgY2hhciog
bmFtZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIGxvYWRJbWFnZUZyb21GaWxlKGdldFRoZW1l
SWNvbkZpbGVOYW1lKG5hbWUsIHNpemUpKTsKK30KKworR2RrUGl4YnVmKiBCaXRtYXBJbWFnZTo6
Z2V0R2RrUGl4YnVmKCkKK3sKKyAgICBOYXRpdmVJbWFnZUNhaXJvKiBpbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIGltYWdlID8gY2Fpcm9JbWFnZVN1cmZh
Y2VUb0dka1BpeGJ1ZihpbWFnZS0+c3VyZmFjZSgpKSA6IDA7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQwMjE1ODFl
OGVkOTRhOWViZWMxZGVlYmM5NWJkMDEzMjU2NzM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwCkBAIC0wLDAgKzEsNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisKKyNpbmNsdWRlIDxnZGsv
Z2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6OkludFBvaW50KGNvbnN0
IEdka1BvaW50JiBwKQorICAgIDogbV94KHAueCkKKyAgICAsIG1feShwLnkpCit7Cit9CisKK0lu
dFBvaW50OjpvcGVyYXRvciBHZGtQb2ludCgpIGNvbnN0Cit7CisgICAgR2RrUG9pbnQgcCA9IHsg
eCgpLCB5KCkgfTsKKyAgICByZXR1cm4gcDsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBl
dApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRSZWN0R3RrLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWYzMTI4MTlhZmNhMTFhZDc3N2QzNDJjN2EzOTQwNjQ3OWYyMzU4ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmIHIpCisgICAg
OiBtX2xvY2F0aW9uKEludFBvaW50KHIueCwgci55KSkKKyAgICAsIG1fc2l6ZShyLndpZHRoLCBy
LmhlaWdodCkKK3sKK30KKworSW50UmVjdDo6b3BlcmF0b3IgR2RrUmVjdGFuZ2xlKCkgY29uc3QK
K3sKKyAgICBHZGtSZWN0YW5nbGUgciA9IHsgeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpIH07
CisgICAgcmV0dXJuIHI7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0
MjNmYTVkZWQyMjZkZWI5N2NlNzMzYjE3ZWRjMTliYjdjZDY5NDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAK
QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgor
CisjZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEKKyNkZWZpbmUgU0VDUkVUX0FQSV9TVUJK
RUNUX1RPX0NIQU5HRSAxCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNs
dWRlIDxsaWJzZWNyZXQvc2VjcmV0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVk
ZW50aWFsQmFja2luZ1N0b3JlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENyZWRlbnRp
YWxCYWNraW5nU3RvcmUsIGJhY2tpbmdTdG9yZSwgKCkpOworICAgIHJldHVybiBiYWNraW5nU3Rv
cmU7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdIYXNoVGFibGU+IGNyZWF0ZUF0dHJpYnV0ZUhhc2hU
YWJsZUZyb21DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IENyZWRlbnRpYWwoKSkKK3sKKyAgICBT
b3VwVVJJKiB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShjaGFsbGVuZ2Uuc291cE1lc3NhZ2Uo
KSk7CisgICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3Jl
dF9hdHRyaWJ1dGVzX2J1aWxkKAorICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JL
LAorICAgICAgICAiZG9tYWluIiwgc291cF9hdXRoX2dldF9yZWFsbShjaGFsbGVuZ2Uuc291cEF1
dGgoKSksCisgICAgICAgICJzZXJ2ZXIiLCB1cmktPmhvc3QsCisgICAgICAgICJwcm90b2NvbCIs
IHVyaS0+c2NoZW1lLAorICAgICAgICAiYXV0aHR5cGUiLCBzb3VwX2F1dGhfZ2V0X3NjaGVtZV9u
YW1lKGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKKyAgICAgICAgInBvcnQiLCB1cmktPnBvcnQsCisg
ICAgICAgIE5VTEwpKTsKKyAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGVzOworCisgICAgZ19oYXNoX3RhYmxlX2luc2VydChhdHRyaWJ1dGVzLmdl
dCgpLCBnX3N0cmR1cCgidXNlciIpLCBnX3N0cmR1cChjcmVkZW50aWFsLnVzZXIoKS51dGY4KCku
ZGF0YSgpKSk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Cit9CisKK3N0cnVjdCBDcmVkZW50aWFs
Rm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSB7CisgICAgQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZTo6Q3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZv
aWQqIGRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNS
ZWFkeUNhbGxiYWNrKFNlY3JldFNlcnZpY2UqIHNlcnZpY2UsIEdBc3luY1Jlc3VsdCogYXN5bmNS
ZXN1bHQsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxs
YmFja0RhdGEpCit7CisgICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3JlZGVudGlhbEZvckNo
YWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrID0gY2FsbGJhY2tEYXRhLT5jYWxsYmFjazsKKyAgICB2
b2lkKiBkYXRhID0gY2FsbGJhY2tEYXRhLT5kYXRhOworICAgIGRlbGV0ZSBjYWxsYmFja0RhdGE7
CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR093blB0cjxHTGlzdD4gZWxlbWVu
dHMoc2VjcmV0X3NlcnZpY2Vfc2VhcmNoX2ZpbmlzaChzZXJ2aWNlLCBhc3luY1Jlc3VsdCwgJmVy
cm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yIHx8ICFlbGVtZW50cyB8fCAhZWxlbWVudHMt
PmRhdGEpIHsKKyAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8U2VjcmV0SXRlbT4gc2VjcmV0SXRlbSA9IGFk
b3B0R1JlZihzdGF0aWNfY2FzdDxTZWNyZXRJdGVtKj4oZWxlbWVudHMtPmRhdGEpKTsKKyAgICBH
UmVmUHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0
X2F0dHJpYnV0ZXMoc2VjcmV0SXRlbS5nZXQoKSkpOworICAgIFN0cmluZyB1c2VyID0gU3RyaW5n
Ojpmcm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChh
dHRyaWJ1dGVzLmdldCgpLCAidXNlciIpKSk7CisgICAgaWYgKHVzZXIuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIEdSZWZQdHI8U2VjcmV0VmFsdWU+IHNlY3Jl
dFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9zZWNyZXQoc2VjcmV0SXRlbS5nZXQo
KSkpOworICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRGF0YSA9IHNlY3JldF92YWx1ZV9nZXQoc2Vj
cmV0VmFsdWUuZ2V0KCksICZsZW5ndGgpOworICAgIFN0cmluZyBwYXNzd29yZCA9IFN0cmluZzo6
ZnJvbVVURjgocGFzc3dvcmREYXRhLCBsZW5ndGgpOworCisgICAgY2FsbGJhY2soQ3JlZGVudGlh
bCh1c2VyLCBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KSwgZGF0YSk7
Cit9CisKK3ZvaWQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Y3JlZGVudGlhbEZvckNoYWxsZW5n
ZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsRm9y
Q2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGRhdGEpCit7CisgICAgLy8gVGhlIGRl
ZmF1bHQgZmxhZyBvbmx5IHJldHVybnMgdGhlIG1vc3QgcmVjZW50IGl0ZW0sIG5vdCBhbGwgb2Yg
dGhlbS4KKyAgICBTZWNyZXRTZWFyY2hGbGFncyBzZWFyY2hGbGFncyA9IHN0YXRpY19jYXN0PFNl
Y3JldFNlYXJjaEZsYWdzPihTRUNSRVRfU0VBUkNIX1VOTE9DSyB8IFNFQ1JFVF9TRUFSQ0hfTE9B
RF9TRUNSRVRTKTsKKyAgICBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNr
RGF0YSogY2FsbGJhY2tEYXRhID0gbmV3IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5
Q2FsbGJhY2tEYXRhOworICAgIGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAg
ICBjYWxsYmFja0RhdGEtPmRhdGEgPSBkYXRhOworCisgICAgc2VjcmV0X3NlcnZpY2Vfc2VhcmNo
KAorICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNyZXRTZXJ2aWNlLgorICAgICAgICBTRUNS
RVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorICAgICAgICBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFi
bGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSkuZ2V0KCksCisgICAgICAgIHNlYXJjaEZsYWdzLAor
ICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2sp
LAorICAgICAgICBjYWxsYmFja0RhdGEpOworfQorCit2b2lkIENyZWRlbnRpYWxCYWNraW5nU3Rv
cmU6OnN0b3JlQ3JlZGVudGlhbHNGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3sKKyAgICBD
U3RyaW5nIHV0ZjhQYXNzd29yZCA9IGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCk7CisgICAg
R1JlZlB0cjxTZWNyZXRWYWx1ZT4gbmV3U2VjcmV0VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X3Zh
bHVlX25ldyh1dGY4UGFzc3dvcmQuZGF0YSgpLCB1dGY4UGFzc3dvcmQubGVuZ3RoKCksICJ0ZXh0
L3BsYWluIikpOworCisgICAgc2VjcmV0X3NlcnZpY2Vfc3RvcmUoCisgICAgICAgIDAsIC8vIFRo
ZSBkZWZhdWx0IFNlY3JldFNlcnZpY2UuCisgICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05F
VFdPUkssCisgICAgICAgIGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hh
bGxlbmdlLCBjcmVkZW50aWFsKS5nZXQoKSwKKyAgICAgICAgU0VDUkVUX0NPTExFQ1RJT05fREVG
QVVMVCwKKyAgICAgICAgXygiV2ViS2l0R1RLKyBwYXNzd29yZCIpLAorICAgICAgICBuZXdTZWNy
ZXRWYWx1ZS5nZXQoKSwKKyAgICAgICAgMCwgLy8gY2FuY2VsbGFibGUKKyAgICAgICAgMCwgLy8g
Y2FsbGJhY2sKKyAgICAgICAgMCk7IC8vIGRhdGEKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2lu
Z1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBkYTlhMTU3ZmJjMTk2ZTYyODcwNDIyYWNlOWVmZTg5NzQ4
ZWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVk
ZW50aWFsQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCisjZGVm
aW5lIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwor
CitjbGFzcyBDcmVkZW50aWFsQmFja2luZ1N0b3JlIHsKK1dURl9NQUtFX05PTkNPUFlBQkxFKENy
ZWRlbnRpYWxCYWNraW5nU3RvcmUpOworcHVibGljOgorICAgIGZyaWVuZCBDcmVkZW50aWFsQmFj
a2luZ1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7CisgICAgdmlydHVhbCB+Q3JlZGVu
dGlhbEJhY2tpbmdTdG9yZSgpIHsgfQorCisgICAgdHlwZWRlZiB2b2lkICgqQ3JlZGVudGlhbEZv
ckNoYWxsZW5nZUNhbGxiYWNrKShjb25zdCBDcmVkZW50aWFsJiwgdm9pZCogZGF0YSk7CisKKyAg
ICB2b2lkIGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmLCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2ssIHZvaWQqIGRhdGEpOworICAgIHZv
aWQgc3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKK3ByaXZhdGU6CisgICAgQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZSgpIHsgfQorfTsKKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJh
Y2tpbmdTdG9yZSgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDcmVk
ZW50aWFsQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4
dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
NWU1YTA1ZmE0OTE5NWZiMzBiZjY5ZGVkNTYyZDU0M2I4YjYxMDE4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VH
dGsuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25z
dCBjaGFyKiBjdXJyZW50U2VhcmNoTG9jYWxlSUQoKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQg
dXNlIHN5c3RlbSBsb2NhbGUuCisgICAgcmV0dXJuICIiOworfQorCitjb25zdCBjaGFyKiBjdXJy
ZW50VGV4dEJyZWFrTG9jYWxlSUQoKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHN5c3Rl
bSBsb2NhbGUuCisgICAgcmV0dXJuICJlbl91cyI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggNzYyM2I5ZGU4MzUyNTE3ZDY5OGRiMDcyZjEzYzVkYzc0ZGVlZjFjYy4uZjRhMzMxZTg5
ZDU5ZTVhMzkwMmExMTdiYzJkY2E2YWE2MjI0MWI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTc5LDcgKzc5LDYgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0IFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIgXApAQCAtMTA4LDcg
KzEwNyw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlIFwKIAktRERBVEFfRElSPVwiJHtkYXRhZGlyfVwiCiAK
LXdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAorcGxhdGZvcm1fY3BwZmxhZ3MgKz0gXAogCS1EV0VC
S0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORz1cIkBXRUJLSVRHVEtfQVBJX1ZFUlNJT05AXCIgXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKQEAgLTEyMyw4ICsxMjIsNiBAQCB3ZWJj
b3JlZ3RrX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWdsIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFudAogCkBA
IC0xMzIsNyArMTI5LDcgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAjIFdpbmRvd3MgcGx1
Z2luIHN1cHBvcnQKICMgLS0tCiBpZiBUQVJHRVRfV0lOMzIKLXdlYmNvcmVndGtfY3BwZmxhZ3Mg
Kz0gXAorcGxhdGZvcm1fY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbgogZW5kaWYgIyBFTkQgVEFSR0VUX1dJTjMyCiAKQEAgLTE3
Myw3ICsxNzAsNyBAQCBsaWJXZWJDb3JlU1ZHX2xhX0NQUEZMQUdTID0gXAogCS1EQlVJTERJTkdf
V0VCS0lUIFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCSQod2ViY29yZV9jcHBmbGFncykgXAot
CSQod2ViY29yZWd0a19jcHBmbGFncykgXAorCSQocGxhdGZvcm1fY3BwZmxhZ3MpIFwKIAkkKGph
dmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJLWZuby1zdHJpY3QtYWxpYXNpbmcgXAogCSQoQ0FJ
Uk9fQ0ZMQUdTKSBcCkBAIC00MjIsMTAgKzQxOSw5IEBAIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmg6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW50
CiAjIElETCBnZW5lcmF0aW9uIHRha2VzIGEgbG9uZyB0aW1lLiBUaGUgcGlwZSByZXByZXNlbnRz
IGFuIG9yZGVyLW9ubHkgZGVwZW5kZW5jeSwKICMgd2hpY2ggbWVhbnMgdGhhdCBHTlVtYWtlIHdp
bGwgb25seSB0cnkgdG8gYnVpbGQgdGhlIGRlcGVuZGVuY2llcyBmaXJzdCwgYnV0CiAjIG5vdCBy
ZWJ1aWxkIGFsbCB0aGUgdGFyZ2V0cyBpZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZS4KLSQod2Vi
a2l0Z3RrX3NvdXJjZXMpICQod2Via2l0Ml9zb3VyY2VzKSAkKHdlYmtpdDJfcGx1Z2luX3Byb2Nl
c3Nfc291cmNlcykgJCh3ZWJjb3JlX3NvdXJjZXMpICQod2ViY29yZWd0a19zb3VyY2VzKSA6IHwg
JChzdXBwbGVtZW50YWxfZGVwZW5kZW5jeV9maWxlKSAkKHdlYmNvcmVfYnVpbHRfc291cmNlcykK
KyQod2Via2l0Z3RrX3NvdXJjZXMpICQod2Via2l0Ml9zb3VyY2VzKSAkKHdlYmtpdDJfcGx1Z2lu
X3Byb2Nlc3Nfc291cmNlcykgJCh3ZWJjb3JlX3NvdXJjZXMpICQocGxhdGZvcm1fc291cmNlcykg
OiB8ICQoc3VwcGxlbWVudGFsX2RlcGVuZGVuY3lfZmlsZSkgJCh3ZWJjb3JlX2J1aWx0X3NvdXJj
ZXMpCiAKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCi0JbGliV2ViQ29yZVBsYXRmb3JtLmxhIFwK
IAlsaWJXZWJDb3JlTW9kdWxlcy5sYSBcCiAJbGliV2ViQ29yZS5sYQogCkBAIC00NzUsNyArNDcx
LDcgQEAgbGliV2ViQ29yZV9sYV9DUFBGTEFHUyA9IFwKIAktREJVSUxESU5HX1dFQktJVCBcCiAJ
JChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKLQkkKHdlYmNvcmVn
dGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29y
ZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAkkKENBSVJPX0NGTEFHUykg
XApAQCAtNTI2LDkxICs1MjIsNiBAQCBsaWJMZXZlbERCX2xhX0NQUEZMQUdTICs9IFwKIAktRExF
VkVMREJfUExBVEZPUk1fUE9TSVgKIGVuZGlmCiAKLWxpYldlYkNvcmVQbGF0Zm9ybV9sYV9TT1VS
Q0VTID0gXAotCSQod2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzKQotbGliV2ViQ29yZVBsYXRmb3Jt
X2xhX0NYWEZMQUdTID0gXAotCSQoU1lNQk9MX1ZJU0lCSUxJVFlfSU5MSU5FUykgXAotCSQoZ2xv
YmFsX2N4eGZsYWdzKQotbGliV2ViQ29yZVBsYXRmb3JtX2xhX0NGTEFHUyA9IFwKLQkkKFNZTUJP
TF9WSVNJQklMSVRZKSBcCi0JJChnbG9iYWxfY2ZsYWdzKQotbGliV2ViQ29yZVBsYXRmb3JtX2xh
X0NQUEZMQUdTID0gXAotCS1EQlVJTERJTkdfV0VCS0lUIFwKLQkkKGdsb2JhbF9jcHBmbGFncykg
XAotCSQod2ViY29yZV9jcHBmbGFncykgXAotCSQod2ViY29yZWd0a19jcHBmbGFncykgXAotCSQo
amF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKLQktZm5vLXN0cmljdC1hbGlhc2luZyBcCi0JJChD
QUlST19DRkxBR1MpIFwKLQkkKENMVVRURVJfQ0ZMQUdTKSBcCi0JJChDT1ZFUkFHRV9DRkxBR1Mp
IFwKLQkkKEVOQ0hBTlRfQ0ZMQUdTKSBcCi0JJChGUkVFVFlQRV9DRkxBR1MpIFwKLQkkKEdBTUVQ
QURfQ0ZMQUdTKSBcCi0JJChHRU9DTFVFX0NGTEFHUykgXAotCSQoR0xJQl9DRkxBR1MpIFwKLQkk
KEdTVFJFQU1FUl9DRkxBR1MpIFwKLQkkKExJQlNFQ1JFVF9DRkxBR1MpIFwKLQkkKExJQlNPVVBf
Q0ZMQUdTKSBcCi0JJChMSUJYTUxfQ0ZMQUdTKSBcCi0JJChMSUJYU0xUX0NGTEFHUykgXAotCSQo
UEFOR09fQ0ZMQUdTKSBcCi0JJChTUUxJVEUzX0NGTEFHUykgXAotCSQoVU5JQ09ERV9DRkxBR1Mp
IFwKLQkkKFhSRU5ERVJfQ0ZMQUdTKSBcCi0JJChYVF9DRkxBR1MpCi0KLSMgV2UgaGF2ZSBhIGRp
ZmZlcmVudCBsaWJyYXJ5IHdpdGggb25seSB0aGUgZmlsZXMgdGhhdCByZXF1aXJlIEdUSysuIEl0
IGFsbG93cyB1cwotIyB0byBidWlsZCBhIGNvbW1vbiBXZWJDb3JlIGxpYiBhbmQgdHdvIGRpZmZl
cmVudCBndGsgV2ViQ29yZSBsaWJzIGRlcGVuZGluZyBvbgotIyB0aGUgZ3RrIHZlcnNpb24uIElu
IFdlS2l0MiBndGsyIGlzIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGUgcGx1Z2luIHByb2Nlc3MgbmVl
ZHMgdG8KLSMgYmUgYnVpbHQgdXNpbmcgZ3RrMiBiZWNhdXNlIHBsdWdpbnMgbGlrZSBmbGFzaCBz
dGlsbCB1c2UgZ3RrMi4gRm9yIFdlYktpdDIsIHdlIGJ1aWxkCi0jIHRoZSBjb21tb24gbGliV2Vi
Q29yZSBhbmQgdHdvIGxpYldlYkNvcmVHdGssIG9uZSB1c2luZyBndGszIGFuZCB0aGUgb3RoZXIg
b25lIHVzaW5nIGd0azIuCi1ub2luc3RfTFRMSUJSQVJJRVMgKz0gXAotCWxpYldlYkNvcmVHdGsu
bGEKLQotbGliV2ViQ29yZUd0a19sYV9TT1VSQ0VTID0gXAotCSQod2ViY29yZWd0a19zb3VyY2Vz
KQotCi1saWJXZWJDb3JlR3RrX2xhX0NYWEZMQUdTID0gXAotCSQoU1lNQk9MX1ZJU0lCSUxJVFlf
SU5MSU5FUykgXAotCSQoZ2xvYmFsX2N4eGZsYWdzKQotCi1saWJXZWJDb3JlR3RrX2xhX0NGTEFH
UyA9IFwKLQkkKFNZTUJPTF9WSVNJQklMSVRZKSBcCi0JJChnbG9iYWxfY2ZsYWdzKQotCi1saWJX
ZWJDb3JlR3RrX2xhX0NQUEZMQUdTID0gXAotCS1EQlVJTERJTkdfV2ViQ29yZSBcCi0JLURCVUlM
RElOR19XRUJLSVQgXAotCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCi0JJCh3ZWJjb3JlX2NwcGZsYWdz
KSBcCi0JJCh3ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCi0JJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFn
cykgXAotCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKLQkkKEhJTERPTl9DUFBGTEFHUykgXAotCSQo
Q0FJUk9fQ0ZMQUdTKSBcCi0JJChDTFVUVEVSX0NGTEFHUykgXAotCSQoQ09WRVJBR0VfQ0ZMQUdT
KSBcCi0JJChFTkNIQU5UX0NGTEFHUykgXAotCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCi0JJChHQUlM
X0NGTEFHUykgXAotCSQoR0FNRVBBRF9DRkxBR1MpIFwKLQkkKEdFT0NMVUVfQ0ZMQUdTKSBcCi0J
JChHTElCX0NGTEFHUykgXAotCSQoR1NUUkVBTUVSX0NGTEFHUykgXAotCSQoR1RLX0NGTEFHUykg
XAotCSQoSElMRE9OX0NGTEFHUykgXAotCSQoTElCU0VDUkVUX0NGTEFHUykgXAotCSQoTElCU09V
UF9DRkxBR1MpIFwKLQkkKExJQlhNTF9DRkxBR1MpIFwKLQkkKExJQlhTTFRfQ0ZMQUdTKSBcCi0J
JChTUUxJVEUzX0NGTEFHUykgXAotCSQoVU5JQ09ERV9DRkxBR1MpIFwKLQkkKFhDT01QT1NJVEVf
Q0ZMQUdTKSBcCi0JJChYREFNQUdFX0NGTEFHUykgXAotCSQoWFJFTkRFUl9DRkxBR1MpIFwKLQkk
KFhUX0NGTEFHUykKLQogRVhUUkFfRElTVCArPSBcCiAJJCh3aWxkY2FyZCAkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtLyouaWRsKSBcCiAJJCh3aWxkY2FyZCAkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkLyouaWRsKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCBlYzRlMjczYmEyZjFjNDFhZDg3NTE3ZmQ5ZDJkNDBlMzg0
ZTQ2NGIzLi40ZjYwYjM0ZmIzNzdmOGIxNzc1MjZmZDg2Yzc5MzA3NTY0MWEyNjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTUzMDEsNyArNTMwMSw3IEBAIHdlYmNvcmVfc3Zn
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgKIAotd2ViY29yZV9wbGF0Zm9ybV9zb3Vy
Y2VzICs9IFwKK3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2FuaW1hdGlvbi9BbmltYXRpb24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25MaXN0LmNwcCBcCkBAIC01NzMxLDE2ICs1NzMxLDYgQEAgd2ViY29yZV9wbGF0Zm9y
bV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaW5kUnVs
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0Lmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9L
VVJMR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0hvc3RXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmcuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcCBcCkBAIC01ODk3LDgg
KzU4ODcsNiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0
b3JlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlh
bEJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBcCkBAIC02MDAxLDcg
KzU5ODksNiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1N5c3RlbVRpbWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9l
bmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaVJlc29sdmVyLmggXApAQCAtNjA4NCw3ICs2MDcxLDcgQEAgd2ViY29yZV9w
bGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaW5kb3dzS2V5
Ym9hcmRDb2Rlcy5oCiAKICMgV2ViQ29yZSBmaWxlcyB0aGF0IHVzZSBHVEsvR0RLIG9yIGFueSBv
dGhlciBkZXBlbmRlbmN5IHRoYXQgcmVxdWlyZXMgR1RLKy4KLXdlYmNvcmVndGtfc291cmNlcyAr
PSBcCitwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaCBcCkBAIC02MTE4LDcgKzYx
MDUsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Z3RrL0ZyYW1lU2VsZWN0aW9uR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJh
Z0NvbnRyb2xsZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRs
ZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3Rv
cmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3Zp
ZGVyR2VvY2x1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0
aW9uUHJvdmlkZXJHZW9jbHVlLmNwcCBcCkBAIC02MTQwLDExMCArNjEyNiwyNyBAQCB3ZWJjb3Jl
Z3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9QbGF0Zm9ybVZpZGVvV2luZG93R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3cuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9y
R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJv
VXRpbGl0aWVzLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dk
a0NhaXJvVXRpbGl0aWVzLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRVdGlsaXRpZXNHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xp
cGJvYXJkVXRpbGl0aWVzR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db21w
b3NpdGlvblJlc3VsdHMuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRl
bUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RyYWdEYXRhR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29u
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrQ2xpY2tDb3VudGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ns
aWNrQ291bnRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERy
b3BIZWxwZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERy
b3BIZWxwZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dSZWZQdHJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0
ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a1ZlcnNpb25pbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRT
dHJpbmdzR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNj
cm9sbGJhckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVT
Y3JvbGxiYXJHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRH
dGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5Mb29wR3Rr
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU291bmRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0Nv
bnRleHQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5oCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1Zp
ZGVvU2lua0dTdHJlYW1lci5oCiAKIGlmIFRBUkdFVF9YMTEKLXdlYmNvcmVndGtfc291cmNlcyAr
PSBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgx
MS5jcHAgXAorcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCiBpZiBVU0VfT1BFTkdMCi13ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAorcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKIGVuZGlmICMgRU5EIFVTRV9PUEVO
R0wKIGlmIFVTRV9FR0wKLXdlYmNvcmVndGtfc291cmNlcyArPSBcCitwbGF0Zm9ybV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdM
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVH
TC5oCiBlbmRpZiAjIEVORCBVU0VfRUdMCiBpZiBVU0VfR0xYCi13ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXAorcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dseC9HTENvbnRleHRHTFguaAogZW5kaWYgIyBFTkQgVVNFX0dMWApAQCAtNjI2Nyw3
ICs2MTcwLDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAotd2ViY29yZWd0a19zb3VyY2VzICs9IFwK
K3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dp
ZGdldEJhY2tpbmdTdG9yZUNhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAKIGVsc2UKQEAgLTYyOTMsNyArNjE5Niw3IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiBlbmRpZiAjIEVORCBVU0VfR0xFUzIKIAogaWYgVVNFX0dTVFJFQU1FUgotd2Vi
Y29yZWd0a19zb3VyY2VzICs9IFwKK3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lclV0aWxpdGllcy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
R05VbWFrZWZpbGUuYW0KaW5kZXggMjExNGZhOGUzOGNjZDQwMmUzMDE1NmY5NWFhOGFhZTA2NTRj
ZjQ5Yi4uYTI4ZDk0YTBmNzgwMjViNmZiMzk0MDY1OTRmYjZhY2ZkNjAxZmI3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCkBAIC01MzMsNyAr
NTMzLDcgQEAgbGliV2ViQ29yZURPTV9sYV9DUFBGTEFHUyA9IFwKIAktSSQoR0VOU09VUkNFU19X
RUJLSVRET00pIFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXAogCSQod2ViY29yZV9jcHBmbGFncykg
XAotCSQod2ViY29yZWd0a19jcHBmbGFncykgXAorCSQocGxhdGZvcm1fY3BwZmxhZ3MpIFwKIAkk
KGphdmFzY3JpcHRjb3JlX2NwcGZsYWdzKSBcCiAJJChDQUlST19DRkxBR1MpIFwKIAkkKEZSRUVU
WVBFX0NGTEFHUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3RrL0F1ZGlvQnVzR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9B
dWRpb0J1c0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYzc4N2Y1MDVh
Y2ZkMzBiMmVmNmE3NjM3YzBiMDRhOThhMDNjNmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1
ZGlvQnVzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNs
dWRlICJBdWRpb0J1cy5oIgotCi0jaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBH
T3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX3N0cmR1cF9wcmludGYoIiVzLndhdiIsIG5hbWUpKTsK
LSAgICBjb25zdCBjaGFyKiBlbnZpcm9ubWVudFBhdGggPSBnZXRlbnYoIkFVRElPX1JFU09VUkNF
U19QQVRIIik7Ci0gICAgR093blB0cjxnY2hhcj4gYWJzb2x1dGVGaWxlbmFtZTsKLSAgICBpZiAo
ZW52aXJvbm1lbnRQYXRoKQotICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNldChnX2J1aWxkX2Zp
bGVuYW1lKGVudmlyb25tZW50UGF0aCwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFic29sdXRlRmlsZW5hbWUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoc2hhcmVkUmVz
b3VyY2VzUGF0aCgpLmRhdGEoKSwgInJlc291cmNlcyIsICJhdWRpbyIsIGZpbGVuYW1lLmdldCgp
LCBOVUxMKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoYWJzb2x1dGVGaWxl
bmFtZS5nZXQoKSwgZmFsc2UsIHNhbXBsZVJhdGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhmNTZiYTZmYjRlMGI2NWE5OWMyNzNkM2I0NzBiZmRiNmIzNWI5YWYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Db2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCi0gICAgOiBt
X2NvbG9yKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCi0g
ICAgLCBtX3ZhbGlkKHRydWUpCi17Ci19Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLUNv
bG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjKQotICAgIDogbV9jb2xvcihtYWtlUkdCQShzdGF0
aWNfY2FzdDxpbnQ+KGMucmVkICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihjLmdyZWVuICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihjLmJsdWUgKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSkKLSAgICAsIG1fdmFsaWQodHJ1ZSkKLXsKLX0KLQot
Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAotewotICAgIGRvdWJsZSByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYTsKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICBHZGtSR0JBIHJnYmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07Ci0gICAgcmV0dXJu
IHJnYmE7Ci19Ci0jZW5kaWYKLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlOWQ3ZjJmNWRmMzE0ZmYzYTQ2Y2U0MmM1Yjg0NzQ5NDkzZjBiYWJmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2Fs
aWEgUy5MCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURF
TykgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotCi0j
aW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIgotCi0jaW5jbHVkZSAiRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsu
aCIKLSNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2Rr
L2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgSFVEX0FV
VE9fSElERV9JTlRFUlZBTCAzMDAwIC8vIDMgc2Vjb25kcwotI2RlZmluZSBQUk9HUkVTU19CQVJf
VVBEQVRFX0lOVEVSVkFMIDE1MCAvLyAxNTBtcwotCi0vLyBVc2Ugc3ltYm9saWMgaWNvbnMgb25s
eSBpZiB3ZSBidWlsZCB3aXRoIEdUSystMyBzdXBwb3J0LiBUaGV5IGNvdWxkCi0vLyBiZSBlbmFi
bGVkIGZvciB0aGUgR1RLKzIgYnVpbGQgYnV0IHdlJ2QgbmVlZCB0byBidW1wIHRoZSByZXF1aXJl
ZAotLy8gdmVyc2lvbiB0byBhdCBsZWFzdCAyLjIyLgotI2lmIEdUS19NQUpPUl9WRVJTSU9OID4g
MgotI2RlZmluZSBJQ09OX05BTUVfU1VGRklYICItc3ltYm9saWMiCi0jZWxzZQotI2RlZmluZSBJ
Q09OX05BTUVfU1VGRklYCi0jZW5kaWYKLQotI2RlZmluZSBQTEFZX0lDT05fTkFNRSAibWVkaWEt
cGxheWJhY2stc3RhcnQiSUNPTl9OQU1FX1NVRkZJWAotI2RlZmluZSBQQVVTRV9JQ09OX05BTUUg
Im1lZGlhLXBsYXliYWNrLXBhdXNlIklDT05fTkFNRV9TVUZGSVgKLSNkZWZpbmUgRVhJVF9GVUxM
U0NSRUVOX0lDT05fTkFNRSAidmlldy1yZXN0b3JlIklDT05fTkFNRV9TVUZGSVgKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgZ2Jvb2xlYW4gaGlkZUh1ZENhbGxiYWNrKEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+aGlk
ZUh1ZCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIG9uRnVsbHNj
cmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vdGlv
biogZXZlbnQsICBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewot
ICAgIGNvbnRyb2xsZXItPnNob3dIdWQodHJ1ZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0
YXRpYyB2b2lkIG9uRnVsbHNjcmVlbkd0a0FjdGl2ZU5vdGlmaWNhdGlvbihHdGtXaWRnZXQqIHdp
ZGdldCwgR1BhcmFtU3BlYyogcHJvcGVydHksIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsq
IGNvbnRyb2xsZXIpCi17Ci0gICAgaWYgKCFndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9X
KHdpZGdldCkpKQotICAgICAgICBjb250cm9sbGVyLT5oaWRlSHVkKCk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtDb25maWd1cmVFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRDb25maWd1cmUqIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBj
b250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPmd0a0NvbmZpZ3VyZShldmVudCk7Ci0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3koR3Rr
V2lkZ2V0KiB3aWRnZXQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIp
Ci17Ci0gICAgY29udHJvbGxlci0+ZXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotc3RhdGljIHZvaWQg
dG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9uLCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPnRvZ2dsZVBs
YXkoKTsKLX0KLQotc3RhdGljIHZvaWQgZXhpdEZ1bGxzY3JlZW5BY3RpdmF0ZWQoR3RrQWN0aW9u
KiBhY3Rpb24sIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0g
ICAgY29udHJvbGxlci0+ZXhpdE9uVXNlclJlcXVlc3QoKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2soRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayog
Y29udHJvbGxlcikKLXsKLSAgICByZXR1cm4gY29udHJvbGxlci0+dXBkYXRlSHVkUHJvZ3Jlc3NC
YXIoKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVTY2FsZUJ1dHRvblByZXNzZWQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBpZiAoZXZlbnQtPnR5cGUgIT0gR0RLX0JVVFRP
Tl9QUkVTUykKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgY29udHJvbGxlci0+YmVnaW5T
ZWVrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gdGltZVNjYWxl
QnV0dG9uUmVsZWFzZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCwg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9s
bGVyLT5lbmRTZWVrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0aW1l
U2NhbGVWYWx1ZUNoYW5nZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+ZG9TZWVrKCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHZvbHVtZVZhbHVlQ2hhbmdlZChHdGtTY2FsZUJ1dHRvbiAqYnV0dG9uLCBn
ZG91YmxlIHZhbHVlLCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQot
ewotICAgIGNvbnRyb2xsZXItPnNldFZvbHVtZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsK
LX0KLQotCi1GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLSAgICA6
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIocGxheWVyKQotICAgICwgbV9odWRU
aW1lb3V0SWQoMCkKLSAgICAsIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCgwKQotICAgICwgbV9zZWVr
TG9jayhmYWxzZSkKLSAgICAsIG1fd2luZG93KDApCi0gICAgLCBtX2h1ZFdpbmRvdygwKQotICAg
ICwgbV92b2x1bWVCdXR0b24oMCkKLSAgICAsIG1fa2V5UHJlc3NTaWduYWxJZCgwKQotICAgICwg
bV9kZXN0cm95U2lnbmFsSWQoMCkKLSAgICAsIG1faXNBY3RpdmVTaWduYWxJZCgwKQotICAgICwg
bV9tb3Rpb25Ob3RpZnlTaWduYWxJZCgwKQotICAgICwgbV9jb25maWd1cmVFdmVudFNpZ25hbElk
KDApCi0gICAgLCBtX2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkKDApCi0gICAgLCBtX3RpbWVTY2Fs
ZUJ1dHRvblByZXNzZWRTaWduYWxJZCgwKQotICAgICwgbV90aW1lU2NhbGVCdXR0b25SZWxlYXNl
ZFNpZ25hbElkKDApCi0gICAgLCBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkKDApCi0gICAg
LCBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKDApCi17Ci19Ci0KLXZvaWQg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6Z3RrQ29uZmlndXJlKEdka0V2ZW50Q29uZmln
dXJlKiBldmVudCkKLXsKLSAgICB1cGRhdGVIdWRQb3NpdGlvbigpOwotfQotCi12b2lkIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnNob3dIdWQoYm9vbCBhdXRvSGlkZSkKLXsKLSAgICBp
ZiAoIW1faHVkV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9odWRUaW1lb3V0
SWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElkKTsKLSAgICAgICAg
bV9odWRUaW1lb3V0SWQgPSAwOwotICAgIH0KLQotICAgIC8vIFNob3cgdGhlIGN1cnNvci4KLSAg
ICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7Ci0g
ICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgMCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhl
IHByb2dyZXNzIGJhciBpbW1lZGlhdGVseSBiZWZvcmUgc2hvd2luZyB0aGUgd2luZG93LgotICAg
IHVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2h1ZFdp
bmRvdyk7Ci0gICAgdXBkYXRlSHVkUG9zaXRpb24oKTsKLQotICAgIC8vIFN0YXJ0IHBlcmlvZGlj
IHVwZGF0ZXMgb2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICBpZiAoIW1fcHJvZ3Jlc3NCYXJVcGRh
dGVJZCkKLSAgICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gZ190aW1lb3V0X2FkZChQUk9H
UkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihw
cm9ncmVzc0JhclVwZGF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICAvLyBIaWRlIHRoZSBodWQg
aW4gZmV3IHNlY29uZHMsIGlmIHJlcXVlc3RlZC4KLSAgICBpZiAoYXV0b0hpZGUpCi0gICAgICAg
IG1faHVkVGltZW91dElkID0gZ190aW1lb3V0X2FkZChIVURfQVVUT19ISURFX0lOVEVSVkFMLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihoaWRlSHVkQ2FsbGJhY2spLCB0aGlzKTsKLX0K
LQotdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpoaWRlSHVkKCkKLXsKLSAgICBp
ZiAobV9odWRUaW1lb3V0SWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91
dElkKTsKLSAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAwOwotICAgIH0KLQotICAgIGlmICghbV9o
dWRXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEtlZXAgdGhlIGh1ZCB2aXNpYmxl
IGlmIGEgc2VlayBpcyBpbiBwcm9ncmVzcyBvciBpZiB0aGUgdm9sdW1lCi0gICAgLy8gcG9wdXAg
aXMgdmlzaWJsZS4KLSAgICBHdGtXaWRnZXQqIHZvbHVtZVBvcHVwID0gZ3RrX3NjYWxlX2J1dHRv
bl9nZXRfcG9wdXAoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbikpOwotICAgIGlmICht
X3NlZWtMb2NrIHx8IGd0a193aWRnZXRfZ2V0X3Zpc2libGUodm9sdW1lUG9wdXApKSB7Ci0gICAg
ICAgIHNob3dIdWQodHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7Ci0gICAgR2RrQ3Vy
c29yKiBjdXJzb3IgPSBibGFua0N1cnNvcigpOwotICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3
aW5kb3csIGN1cnNvcik7Ci0KLSAgICBndGtfd2lkZ2V0X2hpZGUobV9odWRXaW5kb3cpOwotCi0g
ICAgaWYgKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCkgewotICAgICAgICBnX3NvdXJjZV9yZW1vdmUo
bV9wcm9ncmVzc0JhclVwZGF0ZUlkKTsKLSAgICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0g
MDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtLZXlQcmVzc0V2
ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgc3dpdGNoIChldmVudC0+a2V5dmFs
KSB7Ci0gICAgY2FzZSBHREtfRXNjYXBlOgotICAgICAgICBjb250cm9sbGVyLT5leGl0T25Vc2Vy
UmVxdWVzdCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdES19zcGFjZToKLSAgICBjYXNl
IEdES19SZXR1cm46Ci0gICAgICAgIGNvbnRyb2xsZXItPnRvZ2dsZVBsYXkoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHREtfVXA6Ci0gICAgICAgIGNvbnRyb2xsZXItPmluY3JlYXNlVm9s
dW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0RLX0Rvd246Ci0gICAgICAgIGNvbnRy
b2xsZXItPmRlY3JlYXNlVm9sdW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQotCi12b2lkIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmluaXRpYWxpemVXaW5kb3coKQotewotICAgIG1fd2lu
ZG93ID0gcmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQqPihtX2dzdHJlYW1lckdXb3JsZC0+cGxh
dGZvcm1WaWRlb1dpbmRvdygpLT53aW5kb3coKSk7Ci0KLSAgICBpZiAoIW1faHVkV2luZG93KQot
ICAgICAgICBjcmVhdGVIdWQoKTsKLQotICAgIC8vIEVuc3VyZSBibGFjayBiYWNrZ3JvdW5kLgot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrQ29sb3IgY29sb3IgPSB7IDEsIDAsIDAs
IDAgfTsKLSAgICBndGtfd2lkZ2V0X21vZGlmeV9iZyhtX3dpbmRvdywgR1RLX1NUQVRFX05PUk1B
TCwgJmNvbG9yKTsKLSNlbHNlCi0gICAgR2RrUkdCQSBjb2xvciA9IHsgMCwgMCwgMCwgMX07Ci0g
ICAgZ3RrX3dpZGdldF9vdmVycmlkZV9iYWNrZ3JvdW5kX2NvbG9yKG1fd2luZG93LCBHVEtfU1RB
VEVfRkxBR19OT1JNQUwsICZjb2xvcik7Ci0jZW5kaWYKLSAgICBndGtfd2lkZ2V0X3NldF9kb3Vi
bGVfYnVmZmVyZWQobV93aW5kb3csIEZBTFNFKTsKLQotICAgIG1fa2V5UHJlc3NTaWduYWxJZCA9
IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJrZXktcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNL
KG9uRnVsbHNjcmVlbkd0a0tleVByZXNzRXZlbnQpLCB0aGlzKTsKLSAgICBtX2Rlc3Ryb3lTaWdu
YWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJkZXN0cm95IiwgR19DQUxMQkFDSyhv
bkZ1bGxzY3JlZW5HdGtEZXN0cm95KSwgdGhpcyk7Ci0gICAgbV9pc0FjdGl2ZVNpZ25hbElkID0g
Z19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgIm5vdGlmeTo6aXMtYWN0aXZlIiwgR19DQUxMQkFD
SyhvbkZ1bGxzY3JlZW5HdGtBY3RpdmVOb3RpZmljYXRpb24pLCB0aGlzKTsKLQotICAgIGd0a193
aWRnZXRfc2hvd19hbGwobV93aW5kb3cpOwotCi0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjdXJz
b3IoYWRvcHRHUmVmKGJsYW5rQ3Vyc29yKCkpKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJzb3Io
d2luZG93LCBjdXJzb3IuZ2V0KCkpOwotCi0gICAgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCA9IGdf
c2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFD
SyhvbkZ1bGxzY3JlZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMpOwotICAgIG1fY29uZmln
dXJlRXZlbnRTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJjb25maWd1cmUt
ZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0NvbmZpZ3VyZUV2ZW50KSwgdGhpcyk7
Ci0KLSAgICBndGtfd2luZG93X2Z1bGxzY3JlZW4oR1RLX1dJTkRPVyhtX3dpbmRvdykpOwotICAg
IHNob3dIdWQodHJ1ZSk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
dXBkYXRlSHVkUG9zaXRpb24oKQotewotICAgIGlmICghbV9odWRXaW5kb3cpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIEdldCB0aGUgc2NyZWVuIHJlY3RhbmdsZS4KLSAgICBHZGtTY3JlZW4q
IHNjcmVlbiA9IGd0a193aW5kb3dfZ2V0X3NjcmVlbihHVEtfV0lORE9XKG1fd2luZG93KSk7Ci0g
ICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwot
ICAgIEdka1JlY3RhbmdsZSBmdWxsc2NyZWVuUmVjdGFuZ2xlOwotICAgIGdka19zY3JlZW5fZ2V0
X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRv
dyhzY3JlZW4sIHdpbmRvdyksICZmdWxsc2NyZWVuUmVjdGFuZ2xlKTsKLQotICAgIC8vIEdldCB0
aGUgcG9wdXAgd2luZG93IHNpemUuCi0gICAgaW50IGh1ZFdpZHRoLCBodWRIZWlnaHQ7Ci0gICAg
Z3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgJmh1ZFdpZHRoLCAm
aHVkSGVpZ2h0KTsKLQotICAgIC8vIFJlc2l6ZSB0aGUgaHVkIHRvIHRoZSBmdWxsIHdpZHRoIG9m
IHRoZSBzY3JlZW4uCi0gICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX2h1ZFdpbmRv
dyksIGZ1bGxzY3JlZW5SZWN0YW5nbGUud2lkdGgsIGh1ZEhlaWdodCk7Ci0KLSAgICAvLyBNb3Zl
IHRoZSBodWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLgotICAgIGd0a193aW5kb3dfbW92
ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3RhbmdsZS54LCBmdWxsc2Ny
ZWVuUmVjdGFuZ2xlLmhlaWdodCArIGZ1bGxzY3JlZW5SZWN0YW5nbGUueSAtIGh1ZEhlaWdodCk7
Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZGVzdHJveVdpbmRvdygp
Ci17Ci0gICAgaWYgKCFtX2h1ZFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWdu
YWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBtX2tleVByZXNzU2lnbmFsSWQpOwotICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9kZXN0cm95U2lnbmFsSWQp
OwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9pc0FjdGl2ZVNp
Z25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fbW90
aW9uTm90aWZ5U2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dp
bmRvdywgbV9jb25maWd1cmVFdmVudFNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rp
c2Nvbm5lY3QobV9odWRXaW5kb3csIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQpOwotICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9u
UHJlc3NlZFNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV90aW1l
SFNjYWxlLCBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQpOwotICAgIGdfc2lnbmFs
X2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1faHNjYWxlVXBkYXRlSWQpOwotICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRh
dGVJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fcGxheVBhdXNlQWN0aW9u
LCBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rp
c2Nvbm5lY3QobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgbV9leGl0RnVsbGNyZWVuQWN0aW9uQWN0
aXZhdGVTaWduYWxJZCk7Ci0KLSAgICBpZiAobV9odWRUaW1lb3V0SWQpIHsKLSAgICAgICAgZ19z
b3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElkKTsKLSAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAw
OwotICAgIH0KLQotICAgIGlmIChtX3Byb2dyZXNzQmFyVXBkYXRlSWQpIHsKLSAgICAgICAgZ19z
b3VyY2VfcmVtb3ZlKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCk7Ci0gICAgICAgIG1fcHJvZ3Jlc3NC
YXJVcGRhdGVJZCA9IDA7Ci0gICAgfQotCi0gICAgZ3RrX3dpZGdldF9oaWRlKG1fd2luZG93KTsK
LQotICAgIGlmIChtX2h1ZFdpbmRvdykKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faHVk
V2luZG93KTsKLSAgICBtX2h1ZFdpbmRvdyA9IDA7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0azo6cGxheVN0YXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fY2xpZW50LT5t
ZWRpYVBsYXllcklzUGF1c2VkKCkpCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlQYXVzZUFj
dGlvbiwgInRvb2x0aXAiLCBfKCJQbGF5IiksICJpY29uLW5hbWUiLCBQTEFZX0lDT05fTkFNRSwg
TlVMTCk7Ci0gICAgZWxzZQotICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5UGF1c2VBY3Rpb24s
ICJ0b29sdGlwIiwgXygiUGF1c2UiKSwgImljb24tbmFtZSIsIFBBVVNFX0lDT05fTkFNRSwgTlVM
TCk7Ci0gICAgc2hvd0h1ZCghbV9jbGllbnQtPm1lZGlhUGxheWVySXNQYXVzZWQoKSk7Ci19Ci0K
LXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6dm9sdW1lQ2hhbmdlZCgpCi17Ci0g
ICAgaWYgKCFtX3ZvbHVtZUJ1dHRvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxf
aGFuZGxlcl9ibG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7Ci0gICAgZ3Rr
X3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiks
IG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl91bmJsb2NrKG1fdm9s
dW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjptdXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX3ZvbHVtZUJ1dHRvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9ibG9jayhtX3ZvbHVtZUJ1
dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7Ci0gICAgZ3RrX3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUo
R1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT5tdXRlZCgpID8gMCA6
IG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl91bmJsb2NrKG1fdm9s
dW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjpiZWdpblNlZWsoKQotewotICAgIG1fc2Vla0xvY2sgPSB0cnVlOwotfQot
Ci12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmRvU2VlaygpCi17Ci0gICAgaWYg
KCFtX3NlZWtMb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXllci0+c2VlayhndGtf
cmFuZ2VfZ2V0X3ZhbHVlKEdUS19SQU5HRShtX3RpbWVIU2NhbGUpKSptX3BsYXllci0+ZHVyYXRp
b24oKSAvIDEwMCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZW5k
U2VlaygpCi17Ci0gICAgbV9zZWVrTG9jayA9IGZhbHNlOwotfQotCi1nYm9vbGVhbiBGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR3RrOjp1cGRhdGVIdWRQcm9ncmVzc0JhcigpCi17Ci0gICAgZmxv
YXQgbWVkaWFEdXJhdGlvbihtX3BsYXllci0+ZHVyYXRpb24oKSk7Ci0gICAgZmxvYXQgbWVkaWFQ
b3NpdGlvbihtX3BsYXllci0+Y3VycmVudFRpbWUoKSk7Ci0KLSAgICBpZiAoIW1fc2Vla0xvY2sp
IHsKLSAgICAgICAgZ2RvdWJsZSB2YWx1ZSA9IDAuMDsKLQotICAgICAgICBpZiAobWVkaWFQb3Np
dGlvbiAmJiBtZWRpYUR1cmF0aW9uKQotICAgICAgICAgICAgdmFsdWUgPSAobWVkaWFQb3NpdGlv
biAqIDEwMC4wKSAvIG1lZGlhRHVyYXRpb247Ci0KLSAgICAgICAgR3RrQWRqdXN0bWVudCogYWRq
dXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0UobV90aW1lSFNjYWxl
KSk7Ci0gICAgICAgIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGp1c3RtZW50LCB2YWx1ZSk7
Ci0gICAgfQotCi0gICAgZ3RrX3JhbmdlX3NldF9maWxsX2xldmVsKEdUS19SQU5HRShtX3RpbWVI
U2NhbGUpLCAobV9wbGF5ZXItPm1heFRpbWVMb2FkZWQoKSAvIG1lZGlhRHVyYXRpb24pKiAxMDAp
OwotCi0gICAgZ2NoYXIqIGxhYmVsID0gZ19zdHJkdXBfcHJpbnRmKCIlcyAvICVzIiwgdGltZVRv
U3RyaW5nKG1lZGlhUG9zaXRpb24pLnV0ZjgoKS5kYXRhKCksIHRpbWVUb1N0cmluZyhtZWRpYUR1
cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsKLSAgICBndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVM
KG1fdGltZUxhYmVsKSwgbGFiZWwpOwotICAgIGdfZnJlZShsYWJlbCk7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6Y3JlYXRlSHVkKCkK
LXsKLSAgICBtX2h1ZFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwot
ICAgIGd0a193aW5kb3dfc2V0X2dyYXZpdHkoR1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksIEdES19H
UkFWSVRZX1NPVVRIX1dFU1QpOwotICAgIGd0a193aW5kb3dfc2V0X3R5cGVfaGludChHVEtfV0lO
RE9XKG1faHVkV2luZG93KSwgR0RLX1dJTkRPV19UWVBFX0hJTlRfTk9STUFMKTsKLQotICAgIG1f
aHVkTW90aW9uTm90aWZ5U2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1faHVkV2luZG93LCAi
bW90aW9uLW5vdGlmeS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrTW90aW9uTm90
aWZ5RXZlbnQpLCB0aGlzKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lk
Z2V0KiBoYm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCA0KTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0
KiBoYm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIDQpOwotI2Vu
ZGlmCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2h1ZFdpbmRvdyksIGhi
b3gpOwotCi0gICAgbV9wbGF5UGF1c2VBY3Rpb24gPSBndGtfYWN0aW9uX25ldygicGxheSIsIF8o
IlBsYXkgLyBQYXVzZSIpLCBfKCJQbGF5IG9yIHBhdXNlIHRoZSBtZWRpYSIpLCBQQVVTRV9JQ09O
X05BTUUpOwotICAgIG1fcGxheUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25u
ZWN0KG1fcGxheVBhdXNlQWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKHRvZ2dsZVBsYXlQ
YXVzZUFjdGl2YXRlZCksIHRoaXMpOwotCi0gICAgR3RrV2lkZ2V0KiBpdGVtID0gZ3RrX2FjdGlv
bl9jcmVhdGVfdG9vbF9pdGVtKG1fcGxheVBhdXNlQWN0aW9uKTsKLSAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChoYm94KSwgaXRlbSwgRkFMU0UsIFRSVUUsIDApOwotCi0gICAgR3RrV2lk
Z2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcoXygiVGltZToiKSk7Ci0gICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goaGJveCksIGxhYmVsLCBGQUxTRSwgVFJVRSwgMCk7Ci0KLSAgICBHdGtB
ZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3
KDAuMCwgMC4wLCAxMDAuMCwgMC4xLCAxLjAsIDEuMCkpOwotI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCi0gICAgbV90aW1lSFNjYWxlID0gZ3RrX2hzY2FsZV9uZXcoYWRqdXN0bWVudCk7Ci0jZWxz
ZQotICAgIG1fdGltZUhTY2FsZSA9IGd0a19zY2FsZV9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUkla
T05UQUwsIGFkanVzdG1lbnQpOwotI2VuZGlmCi0gICAgZ3RrX3NjYWxlX3NldF9kcmF3X3ZhbHVl
KEdUS19TQ0FMRShtX3RpbWVIU2NhbGUpLCBGQUxTRSk7Ci0gICAgZ3RrX3JhbmdlX3NldF9zaG93
X2ZpbGxfbGV2ZWwoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIFRSVUUpOwotICAgIG1fdGltZVNj
YWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3RpbWVIU2NhbGUs
ICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZUJ1dHRvblByZXNzZWQp
LCB0aGlzKTsKLSAgICBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQgPSBnX3NpZ25h
bF9jb25uZWN0KG1fdGltZUhTY2FsZSwgImJ1dHRvbi1yZWxlYXNlLWV2ZW50IiwgR19DQUxMQkFD
Syh0aW1lU2NhbGVCdXR0b25SZWxlYXNlZCksIHRoaXMpOwotICAgIG1faHNjYWxlVXBkYXRlSWQg
PSBnX3NpZ25hbF9jb25uZWN0KG1fdGltZUhTY2FsZSwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExC
QUNLKHRpbWVTY2FsZVZhbHVlQ2hhbmdlZCksIHRoaXMpOwotCi0gICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUhTY2FsZSwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICBt
X3RpbWVMYWJlbCA9IGd0a19sYWJlbF9uZXcoIiIpOwotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGhib3gpLCBtX3RpbWVMYWJlbCwgRkFMU0UsIFRSVUUsIDApOwotCi0gICAgLy8gVm9s
dW1lIGJ1dHRvbi4KLSAgICBtX3ZvbHVtZUJ1dHRvbiA9IGd0a192b2x1bWVfYnV0dG9uX25ldygp
OwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBtX3ZvbHVtZUJ1dHRvbiwg
RkFMU0UsIFRSVUUsIDApOwotICAgIGd0a19zY2FsZV9idXR0b25fc2V0X3ZhbHVlKEdUS19TQ0FM
RV9CVVRUT04obV92b2x1bWVCdXR0b24pLCBtX3BsYXllci0+dm9sdW1lKCkpOwotICAgIG1fdm9s
dW1lVXBkYXRlSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lQnV0dG9uLCAidmFsdWUtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sodm9sdW1lVmFsdWVDaGFuZ2VkKSwgdGhpcyk7Ci0KLSAgICBtX2V4
aXRGdWxsc2NyZWVuQWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoImV4aXQiLCBfKCJFeGl0IEZ1bGxz
Y3JlZW4iKSwgXygiRXhpdCBmcm9tIGZ1bGxzY3JlZW4gbW9kZSIpLCBFWElUX0ZVTExTQ1JFRU5f
SUNPTl9OQU1FKTsKLSAgICBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkID0g
Z19zaWduYWxfY29ubmVjdChtX2V4aXRGdWxsc2NyZWVuQWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NB
TExCQUNLKGV4aXRGdWxsc2NyZWVuQWN0aXZhdGVkKSwgdGhpcyk7Ci0gICAgZ19vYmplY3Rfc2V0
KG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24sICJpY29uLW5hbWUiLCBFWElUX0ZVTExTQ1JFRU5fSUNP
Tl9OQU1FLCBOVUxMKTsKLSAgICBpdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfdG9vbF9pdGVtKG1f
ZXhpdEZ1bGxzY3JlZW5BY3Rpb24pOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhi
b3gpLCBpdGVtLCBGQUxTRSwgVFJVRSwgMCk7Ci0KLSAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQg
PSBnX3RpbWVvdXRfYWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2spLCB0aGlzKTsKLQot
ICAgIHBsYXlTdGF0ZUNoYW5nZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDU3NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQxYjJjNDNiNjkxNDRiYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5o
CisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MTMgSWdhbGlhIFMuTAotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXJHdGtfaAotI2RlZmluZSBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKLQotI2lmIEVO
QUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJ
REVPKQotCi0jaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGsgOiBwdWJsaWMgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lciB7Ci1wdWJsaWM6
Ci0gICAgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlKik7Ci0KLSAgICB2b2lkIGd0a0NvbmZpZ3VyZShHZGtFdmVudENvbmZpZ3VyZSop
OwotCi0gICAgdm9pZCBwbGF5U3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIGJlZ2luU2Vlaygp
OwotICAgIHZvaWQgZG9TZWVrKCk7Ci0gICAgdm9pZCBlbmRTZWVrKCk7Ci0KLSAgICB2b2lkIGhp
ZGVIdWQoKTsKLSAgICB2b2lkIHNob3dIdWQoYm9vbCk7Ci0gICAgZ2Jvb2xlYW4gdXBkYXRlSHVk
UHJvZ3Jlc3NCYXIoKTsKLQotICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgpOwotICAgIHZvaWQgbXV0
ZUNoYW5nZWQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemVXaW5kb3coKTsKLSAg
ICB2b2lkIGRlc3Ryb3lXaW5kb3coKTsKLQotICAgIHZvaWQgY3JlYXRlSHVkKCk7Ci0gICAgdm9p
ZCB1cGRhdGVIdWRQb3NpdGlvbigpOwotCi0gICAgZ3VpbnQgbV9odWRUaW1lb3V0SWQ7Ci0gICAg
Z3VpbnQgbV9wcm9ncmVzc0JhclVwZGF0ZUlkOwotICAgIGd1aW50IG1fcHJvZ3Jlc3NCYXJGaWxs
VXBkYXRlSWQ7Ci0gICAgZ3VpbnQgbV9oc2NhbGVVcGRhdGVJZDsKLSAgICBndWludCBtX3ZvbHVt
ZVVwZGF0ZUlkOwotICAgIGJvb2wgbV9zZWVrTG9jazsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93
OwotICAgIEd0a1dpZGdldCogbV9odWRXaW5kb3c7Ci0gICAgR3RrQWN0aW9uKiBtX3BsYXlQYXVz
ZUFjdGlvbjsKLSAgICBHdGtBY3Rpb24qIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb247Ci0gICAgR3Rr
V2lkZ2V0KiBtX3RpbWVIU2NhbGU7Ci0gICAgR3RrV2lkZ2V0KiBtX3RpbWVMYWJlbDsKLSAgICBH
dGtXaWRnZXQqIG1fdm9sdW1lQnV0dG9uOwotCi0gICAgdW5zaWduZWQgbG9uZyBtX2tleVByZXNz
U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2Rlc3Ryb3lTaWduYWxJZDsKLSAgICB1bnNp
Z25lZCBsb25nIG1faXNBY3RpdmVTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fbW90aW9u
Tm90aWZ5U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFs
SWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkOwotICAgIHVu
c2lnbmVkIGxvbmcgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQ7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV9l
eGl0RnVsbGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKLX07Ci0KLX0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwMThhMzBmMGM0MWUwZTRjZTVkY2Mz
ODRhOTUxOWY1NDcwNDVkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGls
aXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQot
I2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1HZGtQaXhidWYqIGNh
aXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewot
ICAgIHJldHVybiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKLX0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0
aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGls
aXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1YjNlZGVmYzExMWRiOTQ2
ZTMyYWM4MWQwZmMyYTA1MGNlMDI2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fp
cm9VdGlsaXRpZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdka0NhaXJvVXRpbGl0
aWVzX2gKLSNkZWZpbmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAotCi1HZGtQaXhidWYqIGNhaXJvSW1h
Z2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKTsKLQotI2VuZGlm
IC8vIEdka0NhaXJvVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JY29uR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5
NTdiMzQ1Y2U1ZmIyNzExYTEwYzY2ODAyNTNkYzUyNGVjODhmNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSWNvbkd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkljb24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotSWNvbjo6SWNvbigpCi0gICAgOiBtX2ljb24oMCkKLXsKLX0KLQot
SWNvbjo6fkljb24oKQotewotICAgIGlmIChtX2ljb24pCi0gICAgICAgIGdfb2JqZWN0X3VucmVm
KG1faWNvbik7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgbG9va3VwSWNvbk5hbWUoU3RyaW5nIE1JTUVU
eXBlKQotewotICAgIC8qCi0gICAgIExvb2t1cCBhbiBhcHByb3ByaWF0ZSBpY29uIGFjY29yZGlu
ZyB0byBlaXRoZXIgdGhlIEljb24gTmFtaW5nIFNwZWMKLSAgICAgb3IgY29udmVudGlvbmFsIEdu
b21lIGljb24gbmFtZXMgcmVzcGVjdGl2ZWx5LgotCi0gICAgIFNlZSBodHRwOi8vc3RhbmRhcmRz
LmZyZWVkZXNrdG9wLm9yZy9pY29uLW5hbWluZy1zcGVjL2ljb24tbmFtaW5nLXNwZWMtbGF0ZXN0
Lmh0bWwKLQotICAgICBUaGUgaWNvbiB0aGVtZSBpcyBwcm9iZWQgZm9yIHRoZSBmb2xsb3dpbmcg
bmFtZXM6Ci0gICAgIDEuIG1lZGlhLXN1YnR5cGUKLSAgICAgMi4gZ25vbWUtbWltZS1tZWRpYS1z
dWJ0eXBlCi0gICAgIDMuIG1lZGlhLXgtZ2VuZXJpYwotICAgICA0LiBnbm9tZS1taW1lLW1lZGlh
Ci0KLSAgICAgSW4gdGhlIHdvcnN0IGNhc2UgaXQgZmFsbHMgYmFjayB0byB0aGUgc3RvY2sgZmls
ZSBpY29uLgotICAgICovCi0gICAgaW50IHBvcyA9IE1JTUVUeXBlLmZpbmQoJy8nKTsKLSAgICBp
Zihwb3MgPj0gMCkgewotICAgICAgICBTdHJpbmcgbWVkaWEgPSBNSU1FVHlwZS5zdWJzdHJpbmco
MCwgcG9zKTsKLSAgICAgICAgU3RyaW5nIHN1YnR5cGUgPSBNSU1FVHlwZS5zdWJzdHJpbmcocG9z
ICsgMSk7Ci0gICAgICAgIEd0a0ljb25UaGVtZSogaWNvblRoZW1lID0gZ3RrX2ljb25fdGhlbWVf
Z2V0X2RlZmF1bHQoKTsKLSAgICAgICAgU3RyaW5nIGljb25OYW1lID0gbWVkaWEgKyAiLSIgKyBz
dWJ0eXBlOwotICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGlj
b25OYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOwotICAg
ICAgICBpY29uTmFtZSA9ICJnbm9tZS1taW1lLSIgKyBtZWRpYSArICItIiArIHN1YnR5cGU7Ci0g
ICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRm
OCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7Ci0gICAgICAgIGljb25O
YW1lID0gbWVkaWEgKyAiLXgtZ2VuZXJpYyI7Ci0gICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hh
c19pY29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gaWNvbk5hbWU7Ci0gICAgICAgIGljb25OYW1lID0gbWVkaWEgKyAiZ25vbWUtbWltZS0i
ICsgbWVkaWE7Ci0gICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVtZSwg
aWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7Ci0g
ICAgfQotICAgIHJldHVybiBHVEtfU1RPQ0tfRklMRTsKLX0KLQotLy8gRklYTUU6IE1vdmUgdGhl
IGNvZGUgdG8gQ2hyb21lQ2xpZW50OjppY29uRm9yRmlsZXMoKS4KLVBhc3NSZWZQdHI8SWNvbj4g
SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMp
Ci17Ci0gICAgaWYgKGZpbGVuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewotICAgICAgICBpZiAoIWdfcGF0aF9za2lw
X3Jvb3QoZmlsZW5hbWVzWzBdLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAgICAgU3RyaW5nIE1JTUVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5
cGVGb3JQYXRoKGZpbGVuYW1lc1swXSk7Ci0gICAgICAgIFN0cmluZyBpY29uTmFtZSA9IGxvb2t1
cEljb25OYW1lKE1JTUVUeXBlKTsKLQotICAgICAgICBSZWZQdHI8SWNvbj4gaWNvbiA9IGFkb3B0
UmVmKG5ldyBJY29uKTsKLSAgICAgICAgaWNvbi0+bV9pY29uID0gZ3RrX2ljb25fdGhlbWVfbG9h
ZF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksIGljb25OYW1lLnV0ZjgoKS5kYXRh
KCksIDE2LCBHVEtfSUNPTl9MT09LVVBfVVNFX0JVSUxUSU4sIDApOwotICAgICAgICBpZiAoIWlj
b24tPm1faWNvbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaWNvbi5y
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgLy9GSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVE9ETzogU2NhbGUvY2xpcCB0aGUgaW1hZ2Ug
aWYgbmVjZXNzYXJ5LgotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCk7Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgZ2RrX2NhaXJvX3NldF9zb3VyY2Vf
cGl4YnVmKGNyLCBtX2ljb24sIHJlY3QueCgpLCByZWN0LnkoKSk7Ci0gICAgY2Fpcm9fcGFpbnQo
Y3IpOwotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmZjUzYjRmZTExMWQyNDMwMjI5ZjYwMzY3NjdhY2E3
ZWJkNGQ4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiR2RrQ2Fpcm9V
dGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxj
YWlyby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1h
Z2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBkb3VibGUqIHF1YWxpdHksIEdPd25QdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJT
aXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNv
bWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZl
bG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcu
aHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1l
VHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAm
JiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlw
ZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhi
dWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBk
b2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRo
YXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAvLyBjb21w
b3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBv
cnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvSW1h
Z2VTdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAg
ICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihzdXJm
YWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdF
cnJvciogZXJyb3IgPSAwOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpx
dWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1YWxp
dHlTdHJpbmcgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5
ICogMTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhi
dWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRh
KCksICZlcnJvciwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwp
OwotICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5n
ZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwg
JmVycm9yLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVh
bGl0eSwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQot
ICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcigwKTsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAg
IGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1
ZmZlciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShidWZmZXIuZ2V0KCksIGJ1ZmZl
clNpemUsIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7
YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWQ5ZmJlZmYwMjU4NDJjMmYxZjg1ZWQ0OTlmNjQxNTkyMGU0NTJmOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiR2Rr
Q2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPGNh
aXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjaGFyKiBnZXRQYXRoVG9JbWFnZVJlc291cmNlKGNoYXIqIHJlc291cmNlKQotewotICAg
IGlmIChnX2dldGVudigiV0VCS0lUX1RPUF9MRVZFTCIpKQotICAgICAgICByZXR1cm4gZ19idWls
ZF9maWxlbmFtZShnX2dldGVudigiV0VCS0lUX1RPUF9MRVZFTCIpLCAiU291cmNlIiwgIldlYkNv
cmUiLCAiUmVzb3VyY2VzIiwgcmVzb3VyY2UsIE5VTEwpOwotCi0gICAgcmV0dXJuIGdfYnVpbGRf
ZmlsZW5hbWUoc2hhcmVkUmVzb3VyY2VzUGF0aCgpLmRhdGEoKSwgImltYWdlcyIsIHJlc291cmNl
LCBOVUxMKTsKLX0KLQotc3RhdGljIENTdHJpbmcgZ2V0VGhlbWVJY29uRmlsZU5hbWUoY29uc3Qg
Y2hhciogbmFtZSwgaW50IHNpemUpCi17Ci0gICAgR3RrSWNvbkluZm8qIGljb25JbmZvID0gZ3Rr
X2ljb25fdGhlbWVfbG9va3VwX2ljb24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
LCBzaXplLCBHVEtfSUNPTl9MT09LVVBfTk9fU1ZHKTsKLSAgICAvLyBUcnkgdG8gZmFsbGJhY2sg
b24gTUlTU0lOR19JTUFHRS4KLSAgICBpZiAoIWljb25JbmZvKQotICAgICAgICBpY29uSW5mbyA9
IGd0a19pY29uX3RoZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NL
X01JU1NJTkdfSU1BR0UsIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX0lDT05fTE9PS1VQX05PX1NWRyk7Ci0gICAgaWYgKGljb25JbmZvKSB7
Ci0gICAgICAgIEdPd25QdHI8R3RrSWNvbkluZm8+IGluZm8oaWNvbkluZm8pOwotICAgICAgICBy
ZXR1cm4gQ1N0cmluZyhndGtfaWNvbl9pbmZvX2dldF9maWxlbmFtZShpbmZvLmdldCgpKSk7Ci0g
ICAgfQotCi0gICAgLy8gTm8gaWNvbiB3YXMgZm91bmQsIHRoaXMgY2FuIGhhcHBlbiBpZiBub3Qg
R1RLIHRoZW1lIGlzIHNldC4gSW4KLSAgICAvLyB0aGF0IGNhc2UgYW4gZW1wdHkgSW1hZ2Ugd2ls
bCBiZSBjcmVhdGVkLgotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVyKENTdHJpbmcgbmFtZSkK
LXsKLSAgICBHT3duUHRyPGdjaGFyPiBjb250ZW50OwotICAgIGdzaXplIGxlbmd0aDsKLSAgICBp
ZiAoIWdfZmlsZV9nZXRfY29udGVudHMobmFtZS5kYXRhKCksICZjb250ZW50Lm91dFB0cigpLCAm
bGVuZ3RoLCAwKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7Ci0KLSAg
ICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5nZXQoKSwgbGVuZ3RoKTsKLX0K
LQotdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCi17Ci19Ci0KLVBh
c3NSZWZQdHI8SW1hZ2U+IGxvYWRJbWFnZUZyb21GaWxlKENTdHJpbmcgZmlsZU5hbWUpCi17Ci0g
ICAgUmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7Ci0gICAg
aWYgKCFmaWxlTmFtZS5pc051bGwoKSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBi
dWZmZXIgPSBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXIoZmlsZU5hbWUpOwotICAgICAgICBpbWct
PnNldERhdGEoYnVmZmVyLnJlbGVhc2UoKSwgdHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBpbWcu
cmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBDU3RyaW5nIGZpbGVOYW1lOwotICAgIGlm
ICghc3RyY21wKCJtaXNzaW5nSW1hZ2UiLCBuYW1lKSkKLSAgICAgICAgZmlsZU5hbWUgPSBnZXRU
aGVtZUljb25GaWxlTmFtZShHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwgMTYpOwotICAgIGlmIChm
aWxlTmFtZS5pc051bGwoKSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiBpbWFnZU5hbWUoZ19z
dHJkdXBfcHJpbnRmKCIlcy5wbmciLCBuYW1lKSk7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IGds
aWJGaWxlTmFtZShnZXRQYXRoVG9JbWFnZVJlc291cmNlKGltYWdlTmFtZS5nZXQoKSkpOwotICAg
ICAgICBmaWxlTmFtZSA9IGdsaWJGaWxlTmFtZS5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bG9hZEltYWdlRnJvbUZpbGUoZmlsZU5hbWUpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFn
ZTo6bG9hZFBsYXRmb3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKQotewot
ICAgIHJldHVybiBsb2FkSW1hZ2VGcm9tRmlsZShnZXRUaGVtZUljb25GaWxlTmFtZShuYW1lLCBz
aXplKSk7Ci19Ci0KLUdka1BpeGJ1ZiogQml0bWFwSW1hZ2U6OmdldEdka1BpeGJ1ZigpCi17Ci0g
ICAgTmF0aXZlSW1hZ2VDYWlybyogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwotICAgIHJldHVybiBpbWFnZSA/IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoaW1hZ2Ut
PnN1cmZhY2UoKSkgOiAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzQwMjE1ODFlOGVkOTRhOWViZWMxZGVlYmM5NWJkMDEzMjU2NzM2Zi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLQotI2luY2x1
ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRQb2ludDo6SW50UG9p
bnQoY29uc3QgR2RrUG9pbnQmIHApCi0gICAgOiBtX3gocC54KQotICAgICwgbV95KHAueSkKLXsK
LX0KLQotSW50UG9pbnQ6Om9wZXJhdG9yIEdka1BvaW50KCkgY29uc3QKLXsKLSAgICBHZGtQb2lu
dCBwID0geyB4KCksIHkoKSB9OwotICAgIHJldHVybiBwOwotfQotCi19Ci0KLS8vIHZpbTogdHM9
NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW50UmVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
SW50UmVjdEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzEyODE5YWZj
YTExYWQ3NzdkMzQyYzdhMzk0MDY0NzlmMjM1OGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ludFJlY3RHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi0j
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UmVjdDo6
SW50UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEludFBvaW50
KHIueCwgci55KSkKLSAgICAsIG1fc2l6ZShyLndpZHRoLCByLmhlaWdodCkKLXsKLX0KLQotSW50
UmVjdDo6b3BlcmF0b3IgR2RrUmVjdGFuZ2xlKCkgY29uc3QKLXsKLSAgICBHZGtSZWN0YW5nbGUg
ciA9IHsgeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpIH07Ci0gICAgcmV0dXJuIHI7Ci19Ci0K
LX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5j
RmlsZVN5c3RlbUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxl
U3lzdGVtR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmYmRhMDg3MzQw
YzBiZjYxYjFkYjFkNzcwYzg5YzdlZDgzMDI0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxl
U3lzdGVtR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1HdGsuaCIKLQotI2luY2x1ZGUg
IkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBB
c3luY0ZpbGVTeXN0ZW06OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBc3lu
Y0ZpbGVTeXN0ZW1HdGsoKSk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5
c3RlbShjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlm
aWVyLCBGaWxlU3lzdGVtVHlwZSwgYm9vbCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNhbGxiYWNr
cy0+ZGlkRmFpbChOT1RfU1VQUE9SVEVEX0VSUik7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVt
OjpkZWxldGVGaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYg
c3RvcmFnZUlkZW50aWZpZXIsIEZpbGVTeXN0ZW1UeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICBjYWxsYmFja3MtPmRpZEZhaWwoTk9UX1NVUFBPUlRFRF9FUlIpOwotfQotCi1Bc3luY0Zp
bGVTeXN0ZW1HdGs6OkFzeW5jRmlsZVN5c3RlbUd0aygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotQXN5bmNGaWxlU3lzdGVtR3RrOjp+QXN5bmNGaWxlU3lzdGVtR3RrKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6bW92ZShj
b25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNvcHkoY29uc3QgS1VS
TCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZW1vdmUoY29uc3QgS1VSTCYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVtb3Zl
UmVjdXJzaXZlbHkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEFzeW5jRmlsZVN5c3RlbUd0azo6cmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZUZpbGUoY29u
c3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZURpcmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBi
b29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3Rl
bUd0azo6ZmlsZUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpkaXJlY3RvcnlFeGlzdHMoY29uc3QgS1VSTCYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVhZERp
cmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBB
c3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0FzeW5jRmlsZVN5c3RlbUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWY1
NzM3MDgxY2E2ODRmMDExMzIxYzc1YmE4ZGZlNWRhNjU1YzcxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9B
c3luY0ZpbGVTeXN0ZW1HdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgIEFzeW5jRmlsZVN5c3RlbUd0a19oCi0j
ZGVmaW5lICBBc3luY0ZpbGVTeXN0ZW1HdGtfaAotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQot
Ci0jaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M7Ci0KLWNsYXNzIEFzeW5jRmlsZVN5c3RlbUd0ayA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0g
ewotcHVibGljOgotICAgIEFzeW5jRmlsZVN5c3RlbUd0aygpOwotICAgIHZpcnR1YWwgfkFzeW5j
RmlsZVN5c3RlbUd0aygpOwotCi0gICAgdmlydHVhbCB2b2lkIG1vdmUoY29uc3QgS1VSTCYgc291
cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5KGNvbnN0IEtVUkwmIHNv
dXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGNvbnN0IEtVUkwm
IHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZVJlY3Vyc2l2ZWx5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWRNZXRhZGF0YShj
b25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVGaWxlKGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVz
aXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVEaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGZp
bGVFeGlzdHMoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlyZWN0b3J5RXhpc3RzKGNvbnN0IEtVUkwmIHBh
dGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2
b2lkIHJlYWREaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV3JpdGVyKEFzeW5jRmls
ZVdyaXRlckNsaWVudCosIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gIEFzeW5jRmlsZVN5c3RlbUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
NjNiNmNmOGYyZWRjNTk5OGYxNWEwMWFlYmM1NzIyZTM1OTY2NDRhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDbGlwYm9hcmRHdGsuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAi
RHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgot
I2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gQ2xpcGJvYXJkRGF0YVR5cGUgewotICAgIENs
aXBib2FyZERhdGFUeXBlVGV4dCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCwKLSAgICBD
bGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsCi0gICAg
Q2xpcGJvYXJkRGF0YVR5cGVJbWFnZSwKLSAgICBDbGlwYm9hcmREYXRhVHlwZVVua25vd24KLX07
Ci0KLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBD
bGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5
KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSwgZnJh
bWUpOwotfQotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUp
Ci17Ci0gICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBs
YXRmb3JtRGF0YSgpLCBEcmFnQW5kRHJvcCwgZnJhbWUpOwotfQotCi1DbGlwYm9hcmRHdGs6OkNs
aXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNs
aXBib2FyZCwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBh
c3RlKQotICAgICwgbV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlw
Ym9hcmQpKQotICAgICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAgICwgbV9mcmFtZShmcmFt
ZSkKLXsKLX0KLQotQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9h
cmRUeXBlIGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6IENsaXBib2FyZChwb2xp
Y3ksIGNsaXBib2FyZFR5cGUpCi0gICAgLCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkKLSAgICAs
IG1fY2xpcGJvYXJkKDApCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1DbGlwYm9hcmRH
dGs6On5DbGlwYm9hcmRHdGsoKQotewotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9k
cmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLX0KLQotc3RhdGljIENsaXBib2FyZERhdGFU
eXBlIGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3
VHlwZSkKLXsKLSAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKLQot
ICAgIC8vIFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5Ci0gICAgaWYgKHR5
cGUgPT0gIlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVUZXh0OwotICAgIGlmICh0eXBlID09ICJVUkwiKQotICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVVUkw7Ci0KLSAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFu
eSB0cmFpbGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKLSAgICAvLyBVbmljb2RlLCB3aGlj
aCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCi0gICAgaWYgKHR5cGUgPT0gInRleHQv
cGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKLSAgICAgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVGV4dDsKLSAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0
eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlTWFya3VwOwotICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91
cmktbGlzdCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQotICAgICAgICBy
ZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OwotCi0gICAgLy8gTm90IGEga25vd24gdHlw
ZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCi0gICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVW5rbm93bjsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFy
RGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENs
aXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDbGlwYm9hcmREYXRhVHlw
ZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6
Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5j
bGVhclVSSUxpc3QoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZU1hcmt1cDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhck1hcmt1cCgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVGV4dDoKLSAgICAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhclRleHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZUltYWdlOgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFySW1hZ2UoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246Ci0gICAgICAgIG1fZGF0
YU9iamVjdC0+Y2xlYXJBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG1f
Y2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotCi12b2lk
IENsaXBib2FyZEd0azo6Y2xlYXJBbGxEYXRhKCkKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xp
cGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGRvIG5vdCBjbGVh
ciBmaWxlbmFtZXMuIEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRo
b2QKLSAgICAvLyBkb2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRl
ZCBpbiB0aGUgZHJhZywgc28gdGhlIHR5cGVzCi0gICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdo
dCBzdGlsbCBub3QgYmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQg
Ci0gICAgLy8gc3RpbGwgY29udGFpbiB0aGUgIkZpbGVzIiBzdHJpbmcgaWYgYW55IGZpbGVzIHdl
cmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcpLiIKLSAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsRXhj
ZXB0RmlsZW5hbWVzKCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVu
dHMobV9jbGlwYm9hcmQpOwotfQotCi1TdHJpbmcgQ2xpcGJvYXJkR3RrOjpnZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZVN0cmluZykgY29uc3QKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0K
LSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBi
b2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVV
UklMaXN0KQotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7Ci0gICAgaWYg
KHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmpl
Y3QtPnVybCgpOwotICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlTWFya3VwKQotICAg
ICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5tYXJrdXAoKTsKLSAgICBpZiAodHlwZSA9PSBDbGlw
Ym9hcmREYXRhVHlwZVRleHQpCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRleHQoKTsK
LQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCi17Ci0gICAgaWYg
KHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0g
ZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgaWYg
KHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJvYXJkRGF0
YVR5cGVVUkwpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOwotICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0
YVR5cGVNYXJrdXApIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0YSk7Ci0g
ICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9hcmRE
YXRhVHlwZVRleHQpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEpOwotICAg
ICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQot
TGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKLXsKLSAgICBp
ZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJk
VHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKLQot
ICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0g
ICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNU
ZXh0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIHR5cGVz
LmFkZCgiVGV4dCIpOwotICAgICAgICB0eXBlcy5hZGQoInRleHQiKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L2h0
bWwiKTsKLQotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAgICB0
eXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMoKSkKLSAgICAgICAgdHlw
ZXMuYWRkKCJGaWxlcyIpOwotCi0gICAgcmV0dXJuIHR5cGVzOwotfQotCi1QYXNzUmVmUHRyPEZp
bGVMaXN0PiBDbGlwYm9hcmRHdGs6OmZpbGVzKCkgY29uc3QKLXsKLSAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7
Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
LQotICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5h
bWVzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lc1tpXSwgRmls
ZTo6QWxsQ29udGVudFR5cGVzKSk7Ci0gICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKLX0K
LQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFBvaW50JiBsb2NhdGlvbikKLXsKLSAgICBzZXREcmFnSW1hZ2UoaW1hZ2UsIDAsIGxv
Y2F0aW9uKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9k
ZSogZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQotewotICAgIHNldERyYWdJbWFn
ZSgwLCBlbGVtZW50LCBsb2NhdGlvbik7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFn
SW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBOb2RlKiBlbGVtZW50LCBjb25zdCBJbnRQb2ludCYg
bG9jYXRpb24pCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZEltYWdlV3JpdGFibGUg
JiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlz
KTsKLSAgICBtX2RyYWdJbWFnZSA9IGltYWdlOwotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAg
ICAgbV9kcmFnSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKLQotICAgIG1fZHJhZ0xvYyA9IGxvY2F0
aW9uOwotICAgIG1fZHJhZ0ltYWdlRWxlbWVudCA9IGVsZW1lbnQ7Ci19Ci0KLURyYWdJbWFnZVJl
ZiBDbGlwYm9hcmRHdGs6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgbG9jYXRpb24pIGNvbnN0
Ci17Ci0gICAgbG9jYXRpb24gPSBtX2RyYWdMb2M7Ci0KLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdl
KCkpOwotICAgIGlmIChtX2RyYWdJbWFnZUVsZW1lbnQgJiYgbV9mcmFtZSkKLSAgICAgICAgcmV0
dXJuIG1fZnJhbWUtPm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOwotCi0gICAg
cmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjcmVhdGUg
YSBkcmFnIGltYWdlLCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KLX0KLQotc3RhdGljIENhY2hlZElt
YWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQotewotICAgIC8vIEF0dGVtcHQg
dG8gcHVsbCBDYWNoZWRJbWFnZSBmcm9tIGVsZW1lbnQKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0g
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Ci0gICAgaWYg
KCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRl
cmVyKTsKLSAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdy
aXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBsYWJlbCwgRnJhbWUqIGZyYW1lKQotewotICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVy
bCwgbGFiZWwpOwotICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChlbGVt
ZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKLQotICAgIENhY2hlZEltYWdl
KiBpbWFnZSA9IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOwotICAgIGlmICghaW1hZ2UgfHwgIWlt
YWdlLT5pc0xvYWRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJl
bmRlcmVyKCkpLT5nZXRHZGtQaXhidWYoKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKLX0KLQot
dm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBsYWJlbCwgRnJhbWUqKQotewotICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwp
OwotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVs
dFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7
Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjp3cml0ZVJhbmdlKFJhbmdlKiByYW5nZSwgRnJhbWUq
IGZyYW1lKQotewotICAgIEFTU0VSVChyYW5nZSk7Ci0KLSAgICBtX2RhdGFPYmplY3QtPnNldFRl
eHQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT5z
ZXRNYXJrdXAoY3JlYXRlTWFya3VwKHJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBm
YWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAg
ICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNs
aXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6Ondy
aXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICBtX2RhdGFPYmplY3QtPnNl
dFRleHQodGV4dCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRI
ZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMo
bV9jbGlwYm9hcmQpOwotfQotCi1ib29sIENsaXBib2FyZEd0azo6aGFzRGF0YSgpCi17Ci0gICAg
aWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0KLSAgICBy
ZXR1cm4gbV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAo
KQotICAgICAgICB8fCBtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSB8fCBtX2RhdGFPYmplY3Qt
Pmhhc0ltYWdlKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9h
cmRHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU5ZDYzY2U0ZjJjZThiYzEx
MmQwZjIwOTNlZTU4ODM5MzIyOGUzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENs
aXBib2FyZEd0a19oCi0jZGVmaW5lIENsaXBib2FyZEd0a19oCi0KLSNpbmNsdWRlICJDYWNoZWRJ
bWFnZUNsaWVudC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkRhdGFPYmpl
Y3RHdGsuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIENhY2hlZEltYWdlOwot
ICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIFBhc3RlYm9hcmRIZWxwZXI7Ci0KLSAgICAvLyBT
dGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBj
b3B5L3Bhc3RlCi0gICAgLy8gQ3JlYXRlZCBmcm9tIHRoZSBFdmVudEhhbmRsZXJHdGsgdG8gYmUg
dXNlZCBieSB0aGUgZG9tCi0gICAgY2xhc3MgQ2xpcGJvYXJkR3RrIDogcHVibGljIENsaXBib2Fy
ZCwgcHVibGljIENhY2hlZEltYWdlQ2xpZW50IHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRH
dGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNs
aXBib2FyZCwgRnJhbWUqIGZyYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGNsaXBib2FyZCwgZnJhbWUpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZEd0az4gY3JlYXRlKENs
aXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0
YU9iamVjdCwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBGcmFtZSogZnJhbWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkR3RrKHBvbGlj
eSwgZGF0YU9iamVjdCwgY2xpcGJvYXJkVHlwZSwgZnJhbWUpKTsKLSAgICAgICAgfQotICAgICAg
ICB2aXJ0dWFsIH5DbGlwYm9hcmRHdGsoKTsKLQotICAgICAgICB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcmKTsKLSAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKLSAgICAgICAgU3RyaW5n
IGdldERhdGEoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2V0RGF0YShjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICB2aXJ0dWFsIExpc3RIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVM
aXN0PiBmaWxlcygpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZElt
YWdlKiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50
KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwotICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNo
ZWRJbWFnZSosIE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgICAgIHZpcnR1YWwgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlVVJMKGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVBs
YWluVGV4dChjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgp
OwotCi0gICAgICAgIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCgpIHsgcmV0
dXJuIG1fZGF0YU9iamVjdDsgfQotICAgICAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCgpIHsg
cmV0dXJuIG1fY2xpcGJvYXJkOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDbGlwYm9hcmRH
dGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBHdGtDbGlwYm9hcmQqLCBGcmFtZSopOwotICAgICAg
ICBDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBQYXNzUmVmUHRyPERhdGFPYmpl
Y3RHdGs+LCBDbGlwYm9hcmRUeXBlLCBGcmFtZSopOwotCi0gICAgICAgIFJlZlB0cjxEYXRhT2Jq
ZWN0R3RrPiBtX2RhdGFPYmplY3Q7Ci0gICAgICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7
Ci0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgIH07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZjMGU3NDQ2ZTBlZWRlMTI1YjEwY2E0YTgy
ZTY5YTdmNjVhMjU1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0
aW9ucyhEcmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCi17Ci0gICAgR2RrRHJhZ0FjdGlvbiBnZGtB
Y3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLSAgICBpZiAoY29yZUFjdGlv
biA9PSBEcmFnT3BlcmF0aW9uTm9uZSkKLSAgICAgICAgcmV0dXJuIGdka0FjdGlvbjsKLQotICAg
IGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAgICAgIGdka0FjdGlvbiA9
IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IGdka0FjdGlvbik7
Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkKLSAgICAgICAgZ2RrQWN0
aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9NT1ZFIHwgZ2RrQWN0
aW9uKTsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICBn
ZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0xJTksgfCBn
ZGtBY3Rpb24pOwotICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZhdGUpCi0g
ICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05f
UFJJVkFURSB8IGdka0FjdGlvbik7Ci0KLSAgICByZXR1cm4gZ2RrQWN0aW9uOwotfQotCi1HZGtE
cmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09wZXJhdGlv
biBjb3JlQWN0aW9uKQotewotICAgIGlmIChjb3JlQWN0aW9uID09IERyYWdPcGVyYXRpb25FdmVy
eSB8fCBjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAgICAgIHJldHVybiBHREtf
QUNUSU9OX0NPUFk7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkKLSAg
ICAgICAgcmV0dXJuIEdES19BQ1RJT05fTU9WRTsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdP
cGVyYXRpb25MaW5rKQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9MSU5LOwotICAgIGlmIChj
b3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZhdGUpCi0gICAgICAgIHJldHVybiBHREtfQUNU
SU9OX1BSSVZBVEU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KDApOwot
fQotCi1EcmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oR2RrRHJhZ0Fj
dGlvbiBnZGtBY3Rpb24pCi17Ci0gICAgLy8gV2UgaGF2ZSBubyBnb29kIHdheSB0byBkZXRlY3Qg
RHJhZ09wZXJhdGlvbkV2ZXJ5IG90aGVyIHRoYW4KLSAgICAvLyB0byB1c2UgaXQgd2hlbiBhbGwg
YXBwbGljYWJsZSBmbGFncyBhcmUgb24uCi0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05f
Q09QWSAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01PVkUKLSAgICAgICAgJiYgZ2RrQWN0aW9u
ICYgR0RLX0FDVElPTl9MSU5LICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKLSAg
ICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25FdmVyeTsKLQotICAgIHVuc2lnbmVkIGludCBhY3Rp
b24gPSBEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9D
T1BZKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkNvcHk7Ci0gICAgaWYgKGdka0Fj
dGlvbiAmIEdES19BQ1RJT05fTU9WRSkKLSAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25N
b3ZlOwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0xJTkspCi0gICAgICAgIGFjdGlv
biB8PSBEcmFnT3BlcmF0aW9uTGluazsKLSAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9Q
UklWQVRFKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvblByaXZhdGU7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KGFjdGlvbik7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmNjM0NjllMmI4ZGU0NWMwMTc3NzVmMGI0Mjky
YmQ2YmFjNDc0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJ
Z2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBDbGlw
Ym9hcmRVdGlsaXRpZXNHdGtfaAotI2RlZmluZSBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAotCi0j
aW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9u
cyhEcmFnT3BlcmF0aW9uKTsKLUdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2Rr
RHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9uKTsKLURyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRv
RHJhZ09wZXJhdGlvbihHZGtEcmFnQWN0aW9uKTsKLQotfQotCi0jZW5kaWYgLy8gQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9D
b21wb3NpdGlvblJlc3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db21wb3Np
dGlvblJlc3VsdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1ZjIzYmI1OTZl
OGMyZWFlYjMyOTcxMGRmNDhlNDc0YzdlYzQ1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRp
b25SZXN1bHRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29tcG9zaXRpb25SZXN1
bHRzX2gKLSNkZWZpbmUgQ29tcG9zaXRpb25SZXN1bHRzX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb21wb3NpdGlv
blJlc3VsdHMgewotICAgIENvbXBvc2l0aW9uUmVzdWx0cygpCi0gICAgICAgIDogYXNzb2NpYXRl
ZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IENvbXBvc2l0aW9uUmVzdWx0cyhTdHJpbmcgc2ltcGxlU3RyaW5nKQotICAgICAgICA6IHNpbXBs
ZVN0cmluZyhzaW1wbGVTdHJpbmcpCi0gICAgICAgICwgYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29t
cG9zaXRpb25VcGRhdGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGVudW0gUmVzdWx0c0lu
ZGljYXRvciB7IFdpbGxTZW5kQ29tcG9zaXRpb25SZXN1bHRzU29vbiB9OwotICAgIENvbXBvc2l0
aW9uUmVzdWx0cyhSZXN1bHRzSW5kaWNhdG9yKQotICAgICAgICA6IGFzc29jaWF0ZWRXaXRoUGVu
ZGluZ0NvbXBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY29t
cG9zaXRpb25VcGRhdGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc3NvY2lhdGVk
V2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKLSAgICB9Ci0KLSAgICAvLyBTb21lIHNpbXBs
ZSBpbnB1dCBtZXRob2RzIHJldHVybiBhIHN0cmluZyBmb3IgYWxsIGtleWJvYXJkIGV2ZW50cy4g
VGhpcwotICAgIC8vIHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIGtleWNvZGUuCi0gICAgU3RyaW5nIHNpbXBsZVN0cmluZzsKLQotICAg
IGJvb2wgYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGU7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBDb21wb3NpdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhjMDAyYzRkOWZkNzgyZjkyNzA0YzQ5NzZjNDM3ZWExZjllNWRkYjkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNsdWRlICJD
b250ZXh0TWVudS5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKLXsKLSAgICBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7Ci19Ci0KLUNvbnRl
eHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQot
ICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCi17Ci19Ci0KLUNvbnRleHRNZW51Ojp+
Q29udGV4dE1lbnUoKQotewotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0gICAgICAg
IGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwot
fQotCi12b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkK
LXsKLSAgICBBU1NFUlQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLQotICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0PiBwbGF0Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVz
Y3JpcHRpb24oKSk7Ci0gICAgQVNTRVJUKHBsYXRmb3JtSXRlbSk7Ci0KLSAgICBpZiAoR3RrV2lk
Z2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZvcm1JdGVtLmdldCgpKSkK
LSAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBwbGF0
Zm9ybUl0ZW0uZ2V0KCkpOwotCi0gICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NI
RUxMKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIHBsYXRmb3JtSXRlbS5nZXQoKSk7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbS5nZXQoKSk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnU6
OnNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLXsK
LSAgICBBU1NFUlQobWVudSk7Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9PSBtZW51
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKLSAgICAg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSk7
Ci0KLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBtZW51OwotfQotCi1QbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gQ29udGV4dE1lbnU6OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKLXsKLSAgICBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlv
bjsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSAwOwotCi0gICAgcmV0dXJuIGRlc2NyaXB0
aW9uOwotfQotCi11bnNpZ25lZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLQotICAgIEdPd25QdHI8R0xpc3Q+IGNo
aWxkcmVuKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wbGF0Zm9y
bURlc2NyaXB0aW9uKSkpOwotICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgp
KTsKLX0KLQotVmVjdG9yPENvbnRleHRNZW51SXRlbT4gY29udGV4dE1lbnVJdGVtVmVjdG9yKGNv
bnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAgVmVjdG9yPENvbnRleHRN
ZW51SXRlbT4gbWVudUl0ZW1WZWN0b3I7Ci0KLSAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihn
dGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgaW50
IGl0ZW1Db3VudCA9IGdfbGlzdF9sZW5ndGgoY2hpbGRyZW4uZ2V0KCkpOwotICAgIG1lbnVJdGVt
VmVjdG9yLnJlc2VydmVDYXBhY2l0eShpdGVtQ291bnQpOwotCi0gICAgZm9yIChHTGlzdCogaXRl
bSA9IGNoaWxkcmVuLmdldCgpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKLSAg
ICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxHdGtXaWRnZXQqPihpdGVtLT5k
YXRhKTsKLSAgICAgICAgaWYgKCFHVEtfSVNfTUVOVV9JVEVNKHdpZGdldCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgbWVudUl0ZW1WZWN0b3IuYXBwZW5kKEdUS19NRU5VX0lURU0o
d2lkZ2V0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lbnVJdGVtVmVjdG9yOwotfQotCi1QbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbiBwbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbihWZWN0b3I8Q29udGV4
dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQotewotICAgIEd0a01lbnUqIG1lbnUgPSBHVEtfTUVO
VShndGtfbWVudV9uZXcoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJNZW51SXRl
bXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybUl0ZW0gPSBHVEtf
V0lER0VUKHN1Yk1lbnVJdGVtc1tpXS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKLSAg
ICAgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBwbGF0Zm9y
bUl0ZW0pOwotICAgICAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1JdGVtKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1lbnU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRl
bUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwYjViZTZiZGYwYmQ5Y2ZjNzc4
Y2EyMDVkYjIzODc1NWMzMWUyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVYVF9NRU5V
UykKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgotCi0jaW5jbHVkZSAiQ29udGV4dE1l
bnUuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04gIndlYmtp
dC1jb250ZXh0LW1lbnUiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgQ29udGV4dE1lbnVBY3Rp
b24mIGFjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1l
ZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKLSAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19DT1BZOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFn
ZUluTmV3V2luZG93OgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3c6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoK
LSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRJbWFnZVRvRGlzazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TQVZFOwotICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JB
Q0s7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6Ci0gICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6
Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1JlbG9hZDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOwotICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NVVDsKLSAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X1BBU1RFOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgotICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX0RFTEVURTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFs
bDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOwotICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19OTzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6Ci0gICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfT0s7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoK
LSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFOwotICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGlnaHQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
RklORDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19GSU5EOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhE
ZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVBERlpvb21JbjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19a
T09NX0lOOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19aT09NX09VVDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9T
aXplOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklUOwotICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FS
RDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19HT19CQUNLOwotICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkK
LSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX09QRU47Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgot
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOwotICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnRm9udE1lbnU6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7
Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6Ci0gICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOgot
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0JPTEQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdJdGFsaWM6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOwotICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVS
TElORTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6Ci0gICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfU0VMRUNUX0NPTE9SOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFDb250cm9sczoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1l
ZGlhTG9vcDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJv
YXJkOgotICAgICAgICAvLyBObyBpY29uIGZvciB0aGlzLgotICAgICAgICByZXR1cm4gMDsKLSAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgotICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX0ZVTExTQ1JFRU47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi1zdGF0aWMgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGNyZWF0
ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENv
bnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVk
LCBib29sIGNoZWNrZWQpCi17Ci0gICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAg
ICAgcmV0dXJuIEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOwot
Ci0gICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigiY29udGV4dC1t
ZW51LWFjdGlvbi0lZCIsIGFjdGlvbikpOwotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBwbGF0Zm9y
bUFjdGlvbjsKLQotICAgIGlmICh0eXBlID09IENoZWNrYWJsZUFjdGlvblR5cGUpIHsKLSAgICAg
ICAgcGxhdGZvcm1BY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlv
bl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJ
REZyb21Db250ZXh0TWVudUFjdGlvbihhY3Rpb24pKSkpOwotICAgICAgICBndGtfdG9nZ2xlX2Fj
dGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9uLmdldCgpKSwg
Y2hlY2tlZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBsYXRmb3JtQWN0aW9uID0gYWRvcHRHUmVm
KGd0a19hY3Rpb25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAs
IGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpOwotICAgIGd0a19hY3Rp
b25fc2V0X3NlbnNpdGl2ZShwbGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5hYmxlZCk7Ci0KLSAgICBH
dGtNZW51SXRlbSogaXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9p
dGVtKHBsYXRmb3JtQWN0aW9uLmdldCgpKSk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoaXRlbSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0
aW9uKSk7Ci0KLSAgICByZXR1cm4gaXRlbTsKLX0KLQotLy8gRXh0cmFjdCB0aGUgQWN0aW9uVHlw
ZSBmcm9tIHRoZSBtZW51IGl0ZW0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBs
YXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtKQotICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0
aW9uKGl0ZW0pCi17Ci0gICAgLy8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJlbHMgaW4gY29udGV4dCBt
ZW51IGl0ZW1zLgotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYg
KCFhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZ3RrX2FjdGlvbl9nZXRfYWNj
ZWxfcGF0aChhY3Rpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIGNoaWxk
ID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihpdGVtKSk7Ci0gICAgaWYgKEdUS19JU19BQ0NF
TF9MQUJFTChjaGlsZCkpCi0gICAgICAgIGd0a19hY2NlbF9sYWJlbF9zZXRfYWNjZWxfY2xvc3Vy
ZShHVEtfQUNDRUxfTEFCRUwoY2hpbGQpLCAwKTsKLX0KLQotQ29udGV4dE1lbnVJdGVtOjpDb250
ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfbWVudV9pdGVtX25ldygpKTsKLSAgICBpZiAoc3Vi
TWVudSkKLSAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKLX0KLQotQ29udGV4dE1lbnVJdGVt
OjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFj
dGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQot
ewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNj
cmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7Ci0gICAgaWYgKHN1Yk1l
bnUpCi0gICAgICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6
Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rp
b24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tl
ZCkKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24odHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7Ci19Ci0K
LUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51QWN0aW9uIGFjdGlv
biwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQsIFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKFN1Ym1lbnVUeXBlLCBh
Y3Rpb24sIHRpdGxlLCBlbmFibGVkLCBjaGVja2VkKTsKLSAgICBzZXRTdWJNZW51KHN1Yk1lbnVJ
dGVtcyk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCi17Ci19Ci0K
LVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0
Zm9ybURlc2NyaXB0aW9uKCkKLXsKLSAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gcGxh
dGZvcm1EZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLSAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSAwOwotICAgIHJldHVybiBwbGF0Zm9ybURlc2NyaXB0aW9uOwotfQotCi1D
b250ZXh0TWVudUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCi0g
ICAgICAgIHJldHVybiBTZXBhcmF0b3JUeXBlOwotICAgIGlmIChHVEtfSVNfQ0hFQ0tfTUVOVV9J
VEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBDaGVja2FibGVBY3Rp
b25UeXBlOwotICAgIGlmIChndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNj
cmlwdGlvbikpCi0gICAgICAgIHJldHVybiBTdWJtZW51VHlwZTsKLSAgICByZXR1cm4gQWN0aW9u
VHlwZTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJdGVt
VHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0
ZW1fbmV3KCkpOwotfQotCi1Db250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPihH
UE9JTlRFUl9UT19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04pKSk7Ci19Ci0KLXZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQotewotICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Ci19Ci0KLVN0cmlu
ZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlv
biA9IGd0a0FjdGlvbigpOwotICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZyb21VVEY4KGd0
a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQotewotICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbikKLSAgICAgICAgZ3RrX2Fj
dGlvbl9zZXRfbGFiZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25z
dAotewotICAgIEd0a1dpZGdldCogc3ViTWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUo
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLSAgICByZXR1cm4gc3ViTWVudSA/IEdUS19NRU5VKHN1
Yk1lbnUpIDogMDsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4
dE1lbnUqIG1lbnUpCi17Ci0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3BsYXRmb3Jt
RGVzY3JpcHRpb24sIEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24o
KSkpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4
dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQotewotICAgIENvbnRleHRNZW51IG1lbnUocGxhdGZv
cm1NZW51RGVzY3JpcHRpb24oc3ViTWVudUl0ZW1zKSk7Ci0gICAgc2V0U3ViTWVudSgmbWVudSk7
Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2sp
Ci17Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9u
ICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAgIGd0a190b2dnbGVfYWN0
aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwgc2hvdWxkQ2hlY2spOwot
fQotCi1ib29sIENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0Ci17Ci0gICAgR3RrQWN0
aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dH
TEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRf
YWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAotewotICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgcmV0dXJuIGFjdGlvbiA/IGd0a19hY3Rpb25f
Z2V0X3NlbnNpdGl2ZShhY3Rpb24pIDogZmFsc2U7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVt
OjpzZXRFbmFibGVkKGJvb2wgc2hvdWxkRW5hYmxlKQotewotICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbikKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRf
c2Vuc2l0aXZlKGFjdGlvbiwgc2hvdWxkRW5hYmxlKTsKLX0KLQotR3RrQWN0aW9uKiBDb250ZXh0
TWVudUl0ZW06Omd0a0FjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0a19hY3RpdmF0YWJs
ZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlv
bikpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhmYjkwNWE5NjRkZTc2MjM0MjA5YzJmNWM5MWM2Y2RmNzkwNTQyMDcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdv
dG9hc3RzLmRlPgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSWdhbGlhIFMuTC4KLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkN1cnNvckd0ay5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2luY2x1ZGUgIklt
YWdlLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgot
I2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR1JlZlB0cjxH
ZGtDdXJzb3I+IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclR5cGUgY3Vyc29yVHlwZSkK
LXsKLSAgICBDdXN0b21DdXJzb3IgY3Vyc29yID0gQ3VzdG9tQ3Vyc29yc1tjdXJzb3JUeXBlXTsK
LSAgICBHUmVmUHRyPEdka0N1cnNvcj4gYyA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9t
X25hbWUoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgY3Vyc29yLm5hbWUpKTsKLSAgICBpZiAo
YykKLSAgICAgICAgcmV0dXJuIGM7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzb3Vy
Y2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjb25zdF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihjdXJzb3IuYml0cyksIENBSVJPX0ZPUk1BVF9BMSwgMzIsIDMy
LCA0KSk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbWFzayA9IGFkb3B0UmVmKGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGN1cnNvci5tYXNrX2JpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwgNCkpOwotICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQTEsIDMyLCAzMikpOwotICAgIFJlZlB0cjxjYWlyb190
PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHNvdXJjZS5nZXQoKSwgMCwgMCk7Ci0gICAg
Y2Fpcm9fbWFza19zdXJmYWNlKGNyLmdldCgpLCBtYXNrLmdldCgpLCAwLCAwKTsKLQotICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9z
dXJmYWNlKHN1cmZhY2UuZ2V0KCksIDAsIDAsIDMyLCAzMikpOwotICAgIHJldHVybiBhZG9wdEdS
ZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwg
cGl4YnVmLmdldCgpLCBjdXJzb3IuaG90X3gsIGN1cnNvci5ob3RfeSkpOwotfQotCi1zdGF0aWMg
R1JlZlB0cjxHZGtDdXJzb3I+IGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFBvaW50JiBob3RTcG90KQotewotICAgIEludFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBk
ZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7Ci0gICAgcmV0dXJuIGFk
b3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpLCBwaXhidWYuZ2V0KCksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90
LnkoKSkpOwotfQotCi12b2lkIEN1cnNvcjo6ZW5zdXJlUGxhdGZvcm1DdXJzb3IoKSBjb25zdAot
ewotICAgIGlmIChtX3BsYXRmb3JtQ3Vyc29yIHx8IG1fdHlwZSA9PSBDdXJzb3I6OlBvaW50ZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBDdXJz
b3I6OlBvaW50ZXI6Ci0gICAgICAgIC8vIEEgbnVsbCBHZGtDdXJzb3IgaXMgdGhlIGRlZmF1bHQg
Y3Vyc29yIGZvciB0aGUgd2luZG93LgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gMDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNyb3NzOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19DUk9TUykpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEN1cnNvcjo6SGFuZDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfSEFORDIpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDdXJzb3I6OklCZWFtOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRH
UmVmKGdka19jdXJzb3JfbmV3KEdES19YVEVSTSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEN1cnNvcjo6V2FpdDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ldyhHREtfV0FUQ0gpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6
OkhlbHA6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9u
ZXcoR0RLX1FVRVNUSU9OX0FSUk9XKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29y
OjpNb3ZlOgotICAgIGNhc2UgQ3Vyc29yOjpNaWRkbGVQYW5uaW5nOgotICAgICAgICBtX3BsYXRm
b3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19GTEVVUikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6
RWFzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXcoR0RLX1JJR0hUX1NJREUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJz
b3I6Ok5vcnRoUmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFBhbm5pbmc6Ci0gICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9TSURF
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RSZXNpemU6Ci0g
ICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9SSUdIVF9DT1JORVIpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFJlc2l6ZToKLSAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhXZXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFk
b3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX0xFRlRfQ09STkVSKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6U291
dGhQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJz
b3JfbmV3KEdES19CT1RUT01fU0lERSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNv
cjo6U291dGhFYXN0UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19C
T1RUT01fUklHSFRfQ09STkVSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpT
b3V0aFdlc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFBhbm5pbmc6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRP
TV9MRUZUX0NPUk5FUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6V2VzdFJl
c2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25l
dyhHREtfTEVGVF9TSURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0
aFNvdXRoUmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19j
dXJzb3JfbmV3KEdES19UT1BfVEVFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29y
OjpFYXN0V2VzdFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6V2VzdFBhbm5pbmc6Ci0gICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lE
RSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0
UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemU6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklO
RykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Q29sdW1uUmVzaXplOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TQl9I
X0RPVUJMRV9BUlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Um93UmVz
aXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3
KEdES19TQl9WX0RPVUJMRV9BUlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNv
cjo6VmVydGljYWxUZXh0OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRD
dXJzb3IoQ3VzdG9tQ3Vyc29yVmVydGljYWxUZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDdXJzb3I6OkNlbGw6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2Rr
X2N1cnNvcl9uZXcoR0RLX1BMVVMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6
OkNvbnRleHRNZW51OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJz
b3IoQ3VzdG9tQ3Vyc29yQ29udGV4dE1lbnUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1
cnNvcjo6QWxpYXM6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNv
cihDdXN0b21DdXJzb3JBbGlhcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpQ
cm9ncmVzczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1
c3RvbUN1cnNvclByb2dyZXNzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5v
RHJvcDoKLSAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvck5vRHJvcCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDb3B5OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
Y3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yQ29weSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ3Vyc29yOjpOb25lOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFt
ZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yTm9uZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vy
c29yOjpab29tSW46Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNv
cihDdXN0b21DdXJzb3Jab29tSW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6
Wm9vbU91dDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1
c3RvbUN1cnNvclpvb21PdXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6R3Jh
YjoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1
cnNvckdyYWIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6Ci0g
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JH
cmFiYmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDdXN0b206Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVDdXN0b21DdXJzb3IobV9pbWFnZS5nZXQoKSwg
bV9ob3RTcG90KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1DdXJzb3I6OkN1cnNvcihj
b25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKLSAgICAsIG1f
aW1hZ2Uob3RoZXIubV9pbWFnZSkKLSAgICAsIG1faG90U3BvdChvdGhlci5tX2hvdFNwb3QpCi0g
ICAgLCBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpCi17Ci19Ci0KLUN1
cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBtX3R5
cGUgPSBvdGhlci5tX3R5cGU7Ci0gICAgbV9pbWFnZSA9IG90aGVyLm1faW1hZ2U7Ci0gICAgbV9o
b3RTcG90ID0gb3RoZXIubV9ob3RTcG90OwotICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBvdGhlci5t
X3BsYXRmb3JtQ3Vyc29yOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotQ3Vyc29yOjp+Q3Vyc29y
KCkKLXsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1
cnNvckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njg5MTliYTMzNWEyYWU1NGYyOGE0NjE5MDU4M2Iz
YTRiYTI0NjYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaAorKysgL2Rldi9udWxsCkBA
IC0xLDM4MyArMCwwIEBACi0vKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0gKiBW
ZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKLSAqCi0gKiBUaGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24KLSAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0g
KgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQotICogZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0
aGUKLSAqIExpY2Vuc2UuCi0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcg
Y29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUg
aXMKLSAqIFRpbSBDb3BwZXJmaWVsZC4KLSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRp
YWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEKLSAqIHRoZSBJbml0aWFsIERldmVs
b3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb250cmlidXRvcihzKToKLSAqICAg
VGltIENvcHBlcmZpZWxkIDx0aW1lY29wQG5ldHdvcmsuZW1haWwubmUuanA+Ci0gKiAgIENocmlz
dGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5
LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBv
ZgotICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3Ig
bGF0ZXIgKHRoZSAiR1BMIiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSAqIGluIHdoaWNoIGNh
c2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBp
bnN0ZWFkCi0gKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhl
ciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotICogdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGlu
ZGljYXRlIHlvdXIKLSAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3Zl
IGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQgb3RoZXIgcHJvdmlzaW9u
cyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQot
ICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwg
dGhlIEdQTCBvciB0aGUgTEdQTC4KLSAqCi0gKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioq
KiAqLwotCi0jaWZuZGVmIEN1cnNvckd0a19oCi0jZGVmaW5lIEN1cnNvckd0a19oCi0KLSNpbmNs
dWRlICJDdXJzb3IuaCIKLQotLyoKLSBUaGVzZSBjdXJzb3JzIGFyZSBjb3BpZWQgZnJvbSBNb3pp
bGxhIGNvZGU6Ci0gIGh0dHA6Ly9seHIubW96aWxsYS5vcmcvbW96aWxsYTEuOC9zb3VyY2Uvd2lk
Z2V0L3NyYy9ndGsyL25zR3RrQ3Vyc29ycy5oCi0qLwotCi0vKiBNT1pfQ1VSU09SX1ZFUlRJQ0FM
X1RFWFQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel92ZXJ0aWNhbF90ZXh0X2Jp
dHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgw
MCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwKLSAgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwgMHhm
YywgMHgzZiwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwKLSAgMHgwMiwgMHg0
MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxf
dGV4dF9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhl
MCwgMHgwMCwgMHgwMCwgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHhmZiwgMHgw
MCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwK
LSAgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwNywg
MHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0NPTlRFWFRfTUVOVSAq
Lwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X21lbnVfYml0c1tdID0gewotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAw
eDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAw
eDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAw
eGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGZkLCAweDAwLCAweDAwLAotICAweGZjLCAw
eGZmLCAweDAwLCAweDAwLCAweDdjLCAweDg0LCAweDAwLCAweDAwLCAweDZjLCAweGZjLCAweDAw
LCAweDAwLAotICAweGM0LCAweDg0LCAweDAwLCAweDAwLCAweGMwLCAweGZjLCAweDAwLCAweDAw
LCAweDgwLCAweDg1LCAweDAwLCAweDAwLAotICAweDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0K
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X21hc2tfYml0c1tdID0gewotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAw
LCAweDAwLCAweDAwLAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAw
LCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAw
LCAweGZlLCAweGZkLCAweDAwLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLAotICAweGZl
LCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZlLCAw
eDAxLCAweDAwLAotICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAxLCAw
eDAwLCAweGMwLCAweGZmLCAweDAxLCAweDAwLAotICAweGMwLCAweGZmLCAweDAxLCAweDAwLCAw
eDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07
Ci0KLS8qIE1PWl9DVVJTT1JfQ09QWSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96
X2NvcHlfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAw
eDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAx
LCAweDAwLCAweDAwLAotICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAweDMwLCAweDAw
LCAweDAwLCAweDZjLCAweDMwLCAweDAwLCAweDAwLAotICAweGM0LCAweGZjLCAweDAwLCAweDAw
LCAweGMwLCAweGZjLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLAotICAweDgw
LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9j
b3B5X21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAw
LCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAweDFlLCAweDAwLCAweDAw
LCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAot
ICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAw
eDAzLCAweDAwLCAweDAwLAotICAweGZlLCAweDM3LCAweDAwLCAweDAwLCAweGZlLCAweDdiLCAw
eDAwLCAweDAwLCAweGZlLCAweGZjLCAweDAwLCAweDAwLAotICAweGVlLCAweGZmLCAweDAxLCAw
eDAwLCAweGU0LCAweGZmLCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLAotICAw
eGMwLCAweDdiLCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfQUxJQVMgKi8KLXN0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9hbGlhc19iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
M2MsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCi0gIDB4ZmMsIDB4MDMsIDB4
MDAsIDB4MDAsIDB4N2MsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZTAsIDB4MDAsIDB4MDAs
Ci0gIDB4YzQsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAs
IDB4MTksIDB4MDAsIDB4MDAsCi0gIDB4ODAsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2FsaWFzX21hc2tfYml0c1tdID0gewotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAw
LCAweDAwLAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAw
LCAweDdlLCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZl
LCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAweDAwLAotICAweGZlLCAweGY3
LCAweDAwLCAweDAwLCAweGZlLCAweGZiLCAweDAxLCAweDAwLCAweGZlLCAweGYwLCAweDAxLCAw
eDAwLAotICAweGVlLCAweGY5LCAweDAxLCAweDAwLCAweGU0LCAweGY5LCAweDAxLCAweDAwLCAw
eGMwLCAweGJmLCAweDAwLCAweDAwLAotICAweGMwLCAweDNmLCAweDAwLCAweDAwLCAweDgwLCAw
eDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8q
IE1PWl9DVVJTT1JfWk9PTV9JTiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pv
b21faW5fYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAw
eDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAotICAweDYyLCAweDA0LCAweDAwLCAw
eDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAweDAwLCAweDAwLAotICAw
eGY5LCAweDA5LCAweDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweDYyLCAweDA0
LCAweDAwLCAweDAwLAotICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAw
LCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAweDAwLCAweDM4LCAweDAwLCAweDAw
LCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96
b29tX2luX21hc2tfYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAw
eDAzLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAw
eDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAw
LAotICAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZl
LCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBm
LCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAweDAwLCAweDM4LCAweDAw
LCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfWk9PTV9PVVQgKi8K
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9iaXRzW10gPSB7Ci0gIDB4
ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQs
IDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDAs
IDB4MDAsIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsCi0gIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAs
IDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsCi0gIDB4MDIs
IDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0X21hc2tfYml0c1tdID0g
ewotICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweGZl
LCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZmLCAweDBm
LCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLAotICAweGZmLCAweDBmLCAweDAw
LCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAot
ICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAw
eDFjLCAweDAwLCAweDAwLAotICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAw
eDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfTk9UX0FMTE9XRUQgKi8KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCi0g
IDB4ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4
ODAsIDB4MDMsIDB4MDAsCi0gIDB4ZWMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4
MDcsIDB4MDAsIDB4ODYsIDB4MDMsIDB4MDYsIDB4MDAsCi0gIDB4MDYsIDB4MDcsIDB4MDYsIDB4
MDAsIDB4MDYsIDB4MGUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MWMsIDB4MDYsIDB4MDAsCi0gIDB4
MGUsIDB4MzgsIDB4MDcsIDB4MDAsIDB4MGMsIDB4NzAsIDB4MDMsIDB4MDAsIDB4MWMsIDB4ZTAs
IDB4MDMsIDB4MDAsCi0gIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4MDAs
IDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCi0gIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIgbW96X25vdF9hbGxvd2VkX21hc2tfYml0c1tdID0gewotICAweDgwLCAw
eDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLCAweGYwLCAweGZmLCAweDAw
LCAweDAwLAotICAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGZjLCAweGYwLCAweDAzLCAweDAw
LCAweGZlLCAweGMwLCAweDA3LCAweDAwLAotICAweGZlLCAweDgxLCAweDA3LCAweDAwLCAweGZm
LCAweDgzLCAweDBmLCAweDAwLCAweGNmLCAweDA3LCAweDBmLCAweDAwLAotICAweDhmLCAweDBm
LCAweDBmLCAweDAwLCAweDBmLCAweDFmLCAweDBmLCAweDAwLCAweDBmLCAweDNlLCAweDBmLCAw
eDAwLAotICAweDFmLCAweGZjLCAweDBmLCAweDAwLCAweDFlLCAweGY4LCAweDA3LCAweDAwLCAw
eDNlLCAweGYwLCAweDA3LCAweDAwLAotICAweGZjLCAweGYwLCAweDAzLCAweDAwLCAweGY4LCAw
eGZmLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDAwLAotICAweGUwLCAweDdmLCAw
eDAwLCAweDAwLCAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8q
IE1PWl9DVVJTT1JfU1BJTk5JTkcgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9z
cGlubmluZ19iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MGMsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4
MDEsIDB4MDAsIDB4MDAsCi0gIDB4ZmMsIDB4M2IsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MzgsIDB4
MDAsIDB4MDAsIDB4NmMsIDB4NTQsIDB4MDAsIDB4MDAsCi0gIDB4YzQsIDB4ZGMsIDB4MDAsIDB4
MDAsIDB4YzAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzksIDB4MDAsIDB4MDAsCi0gIDB4
ODAsIDB4MzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96
X3NwaW5uaW5nX21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2
LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAweDFlLCAweDAw
LCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAw
eDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAw
eGZlLCAweDNiLCAweDAwLCAweDAwLAotICAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweGZlLCAw
eDdmLCAweDAwLCAweDAwLCAweGZlLCAweGZlLCAweDAwLCAweDAwLAotICAweGVlLCAweGZmLCAw
eDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweDdmLCAweDAwLCAweDAw
LAotICAweGMwLCAweDdmLCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfTk9ORSAqLwot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X25vbmVfYml0c1tdID0gewotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX21hc2tfYml0c1tdID0gewotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0K
LS8qIE1PWl9DVVJTT1JfSEFORF9HUkFCICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBt
b3pfaGFuZF9ncmFiX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKLSAgMHg2MCwgMHgzOSwg
MHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMSwgMHgw
MCwKLSAgMHgyMCwgMHhjOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0OSwgMHgwMiwgMHgwMCwgMHg1
OCwgMHg0MCwgMHgwMiwgMHgwMCwKLSAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKLSAgMHgxMCwgMHgwMCwgMHgw
MSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwK
LSAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwg
MHg0MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh
ciBtb3pfaGFuZF9ncmFiX21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDYwLCAweDNmLCAweDAwLCAweDAwLAotICAweGYw
LCAweDdmLCAweDAwLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGY4LCAweGZmLCAw
eDAzLCAweDAwLAotICAweGYwLCAweGZmLCAweDA3LCAweDAwLCAweGY4LCAweGZmLCAweDA3LCAw
eDAwLCAweGZjLCAweGZmLCAweDA3LCAweDAwLAotICAweGZlLCAweGZmLCAweDA3LCAweDAwLCAw
eGZlLCAweGZmLCAweDAzLCAweDAwLCAweGZjLCAweGZmLCAweDAzLCAweDAwLAotICAweGY4LCAw
eGZmLCAweDAzLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAx
LCAweDAwLAotICAweGUwLCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAw
LCAweGMwLCAweGZmLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfSEFO
RF9HUkFCQklORyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJp
bmdfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweGMw
LCAweDM2LCAweDAwLCAweDAwLCAweDIwLCAweGM5LCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAw
eDAxLCAweDAwLAotICAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAxLCAw
eDAwLCAweDEwLCAweDAwLCAweDAxLCAweDAwLAotICAweDEwLCAweDAwLCAweDAxLCAweDAwLCAw
eDEwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAwLAotICAweDQwLCAw
eDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCAgdW5zaWduZWQgY2hhciBtb3pfaGFu
ZF9ncmFiYmluZ19tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgzNiwgMHgwMCwg
MHgwMCwKLSAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwg
MHhmMCwgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhlMCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmMCwg
MHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhmOCwgMHhmZiwg
MHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgw
MCwKLSAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhj
MCwgMHg3ZiwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1lbnVtIEN1c3RvbUN1cnNvclR5cGUg
ewotICAgIEN1c3RvbUN1cnNvckNvcHkgPSAwLAotICAgIEN1c3RvbUN1cnNvckFsaWFzLAotICAg
IEN1c3RvbUN1cnNvckNvbnRleHRNZW51LAotICAgIEN1c3RvbUN1cnNvclpvb21JbiwKLSAgICBD
dXN0b21DdXJzb3Jab29tT3V0LAotICAgIEN1c3RvbUN1cnNvclZlcnRpY2FsVGV4dCwKLSAgICBD
dXN0b21DdXJzb3JOb0Ryb3AsCi0gICAgQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3MsCi0gICAgQ3VzdG9t
Q3Vyc29yTm9uZSwKLSAgICBDdXN0b21DdXJzb3JHcmFiLAotICAgIEN1c3RvbUN1cnNvckdyYWJi
aW5nLAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAg
Y29uc3QgdW5zaWduZWQgY2hhciogYml0czsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtYXNr
X2JpdHM7Ci0gICAgaW50IGhvdF94OwotICAgIGludCBob3RfeTsKLX0gQ3VzdG9tQ3Vyc29yOwot
Ci0vLyBjcmVhdGUgY3VzdG9tIHBpeG1hcCBjdXJzb3IgZnJvbSBjdXJzb3JzIGluIG5zR1RLQ3Vy
c29yRGF0YS5oCi1zdGF0aWMgY29uc3QgQ3VzdG9tQ3Vyc29yIEN1c3RvbUN1cnNvcnNbXSA9IHsK
LSAgICB7ICJjb3B5IiwgbW96X2NvcHlfYml0cywgbW96X2NvcHlfbWFza19iaXRzLCAyLCAyIH0s
Ci0gICAgeyAiYWxpYXMiLCBtb3pfYWxpYXNfYml0cywgbW96X2FsaWFzX21hc2tfYml0cywgMiwg
MiB9LAotICAgIHsgImNvbnRleHQtbWVudSIsIG1vel9tZW51X2JpdHMsIG1vel9tZW51X21hc2tf
Yml0cywgMiwgMiB9LAotICAgIHsgInpvb20taW4iLCBtb3pfem9vbV9pbl9iaXRzLCBtb3pfem9v
bV9pbl9tYXNrX2JpdHMsIDYsIDYgfSwKLSAgICB7ICJ6b29tLW91dCIsIG1vel96b29tX291dF9i
aXRzLCBtb3pfem9vbV9vdXRfbWFza19iaXRzLCA2LCA2IH0sCi0gICAgeyAidmVydGljYWwtdGV4
dCIsIG1vel92ZXJ0aWNhbF90ZXh0X2JpdHMsIG1vel92ZXJ0aWNhbF90ZXh0X21hc2tfYml0cywg
OCwgNCB9LAotICAgIHsgImRuZC1uby1kcm9wIiwgbW96X25vdF9hbGxvd2VkX2JpdHMsIG1vel9u
b3RfYWxsb3dlZF9tYXNrX2JpdHMsIDksICA5IH0sCi0gICAgeyAibGVmdF9wdHJfd2F0Y2giLCBt
b3pfc3Bpbm5pbmdfYml0cywgbW96X3NwaW5uaW5nX21hc2tfYml0cywgMiwgIDJ9LAotICAgIHsg
Im5vbmUiLCBtb3pfbm9uZV9iaXRzLCBtb3pfbm9uZV9tYXNrX2JpdHMsIDAsIDAgfSwKLSAgICB7
ICJncmFiIiwgbW96X2hhbmRfZ3JhYl9iaXRzLCBtb3pfaGFuZF9ncmFiX21hc2tfYml0cywgMTAs
IDEwIH0sCi0gICAgeyAiZ3JhYmJpbmciLCBtb3pfaGFuZF9ncmFiYmluZ19iaXRzLCBtb3pfaGFu
ZF9ncmFiYmluZ19tYXNrX2JpdHMsIDEwLCAxMCB9Ci19OwotCi0jZW5kaWYgLy8gQ3Vyc29yR3Rr
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmYzY2ZTAxNWU1MDIyNjc4OGMyMTQ3NjhhMTVi
MjkxMzY4NDNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydGlu
IFJvYmluc29uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotCi0jaW5jbHVkZSAibWFya3VwLmgi
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIHZvaWQgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5n
JiBzdHIpCi17Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0
ZXIgPSAweEEwOwotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNoYXJhY3RlciA9ICcgJzsK
LSAgICBzdHIucmVwbGFjZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rl
cik7Ci19Ci0KLVN0cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAo
bV9yYW5nZSkKLSAgICAgICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKLSAgICByZXR1cm4gbV90
ZXh0OwotfQotCi1TdHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9yYW5nZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAw
LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7Ci0g
ICAgcmV0dXJuIG1fbWFya3VwOwotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OnNldFRleHQoY29u
c3QgU3RyaW5nJiBuZXdUZXh0KQotewotICAgIG1fcmFuZ2UgPSAwOwotICAgIG1fdGV4dCA9IG5l
d1RleHQ7Ci0gICAgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UobV90ZXh0KTsKLX0K
LQotdm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRNYXJrdXAoY29uc3QgU3RyaW5nJiBuZXdNYXJrdXAp
Ci17Ci0gICAgbV9yYW5nZSA9IDA7Ci0gICAgbV9tYXJrdXAgPSBuZXdNYXJrdXA7Ci19Ci0KLXZv
aWQgRGF0YU9iamVjdEd0azo6c2V0VVJJTGlzdChjb25zdCBTdHJpbmcmIHVyaUxpc3RTdHJpbmcp
Ci17Ci0gICAgbV91cmlMaXN0ID0gdXJpTGlzdFN0cmluZzsKLQotICAgIC8vIFRoaXMgY29kZSBp
cyBvcmlnaW5hbGx5IGZyb206IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29kZSBjcm9zcy1wbGF0Zm9y
bSBldmVudHVhbGx5LgotCi0gICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0
ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eQotICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBh
bGxvdyBqdXN0IFxuIGhlcmUuCi0gICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKLSAgICB1cmlM
aXN0U3RyaW5nLnNwbGl0KCdcbicsIHVyaUxpc3QpOwotCi0gICAgLy8gUHJvY2VzcyB0aGUgaW5w
dXQgYW5kIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVtYmVyLgotICAg
IC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0
RGF0YSgiVVJMIikKLSAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4g
bGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAvLyAiVGhlIERyYWdFdmVudCBhbmQg
RGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4gQWxzbyBleHRyYWN0IGFsbCBmaWxlbmFtZXMKLSAg
ICAvLyBmcm9tIHRoZSBVUkkgbGlzdC4KLSAgICBib29sIHNldFVSTCA9IGZhbHNlOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJp
bmcmIGxpbmUgPSB1cmlMaXN0W2ldOwotICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKLSAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIEtVUkwgdXJsID0gS1VSTChLVVJMKCksIGxpbmUpOwotICAgICAgICBpZiAodXJsLmlz
VmFsaWQoKSkgewotICAgICAgICAgICAgaWYgKCFzZXRVUkwpIHsKLSAgICAgICAgICAgICAgICBt
X3VybCA9IHVybDsKLSAgICAgICAgICAgICAgICBzZXRVUkwgPSB0cnVlOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHT3du
UHRyPGdjaGFyPiBmaWxlbmFtZShnX2ZpbGVuYW1lX2Zyb21fdXJpKGxpbmUudXRmOCgpLmRhdGEo
KSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoIWVycm9yICYmIGZpbGVu
YW1lKQotICAgICAgICAgICAgICAgIG1fZmlsZW5hbWVzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4
KGZpbGVuYW1lLmdldCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRGF0YU9iamVj
dEd0azo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKLXsKLSAg
ICBtX3VybCA9IHVybDsKLSAgICBtX3VyaUxpc3QgPSB1cmw7Ci0gICAgc2V0VGV4dCh1cmwuc3Ry
aW5nKCkpOwotCi0gICAgU3RyaW5nIGFjdHVhbExhYmVsKGxhYmVsKTsKLSAgICBpZiAoYWN0dWFs
TGFiZWwuaXNFbXB0eSgpKQotICAgICAgICBhY3R1YWxMYWJlbCA9IHVybDsKLQotICAgIFN0cmlu
Z0J1aWxkZXIgbWFya3VwOwotICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKLSAgICBt
YXJrdXAuYXBwZW5kKHVybC5zdHJpbmcoKSk7Ci0gICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7Ci0g
ICAgR093blB0cjxnY2hhcj4gZXNjYXBlZChnX21hcmt1cF9lc2NhcGVfdGV4dChhY3R1YWxMYWJl
bC51dGY4KCkuZGF0YSgpLCAtMSkpOwotICAgIG1hcmt1cC5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChlc2NhcGVkLmdldCgpKSk7Ci0gICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOwotICAgIHNldE1h
cmt1cChtYXJrdXAudG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJU
ZXh0KCkKLXsKLSAgICBtX3JhbmdlID0gMDsKLSAgICBtX3RleHQgPSAiIjsKLX0KLQotdm9pZCBE
YXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCi17Ci0gICAgbV9yYW5nZSA9IDA7Ci0gICAgbV9t
YXJrdXAgPSAiIjsKLX0KLQotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkgY29uc3QK
LXsKLSAgICBpZiAoaGFzVGV4dCgpKQotICAgICAgICByZXR1cm4gdGV4dCgpOwotCi0gICAgaWYg
KGhhc1VSTCgpKQotICAgICAgICByZXR1cm4gdXJsKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKQotewot
ICAgIG1fdGV4dCA9ICIiOwotICAgIG1fbWFya3VwID0gIiI7Ci0gICAgbV91cmlMaXN0ID0gIiI7
Ci0gICAgbV91cmwgPSBLVVJMKCk7Ci0gICAgbV9pbWFnZSA9IDA7Ci0gICAgbV9yYW5nZSA9IDA7
Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJBbGwoKQotewotICAgIGNsZWFyQWxsRXhj
ZXB0RmlsZW5hbWVzKCk7Ci0gICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKLX0KLQotRGF0YU9iamVj
dEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJk
KQotewotICAgIHN0YXRpYyBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0
R3RrPiA+IG9iamVjdE1hcDsKLQotICAgIGlmICghb2JqZWN0TWFwLmNvbnRhaW5zKGNsaXBib2Fy
ZCkpIHsKLSAgICAgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBEYXRhT2Jq
ZWN0R3RrOjpjcmVhdGUoKTsKLSAgICAgICAgb2JqZWN0TWFwLnNldChjbGlwYm9hcmQsIGRhdGFP
YmplY3QpOwotICAgICAgICByZXR1cm4gZGF0YU9iamVjdC5nZXQoKTsKLSAgICB9Ci0KLSAgICBI
YXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBp
dCA9IG9iamVjdE1hcC5maW5kKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyODFiMWUxNzhiZjk0N2RhMmMwODBkMzgz
ZWFhNTA2YjZhNjM5ODAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAorKysgL2Rl
di9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnRp
biBSb2JpbnNvbgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBEYXRh
T2JqZWN0R3RrX2gKLSNkZWZpbmUgRGF0YU9iamVjdEd0a19oCi0KLSNpbmNsdWRlICJGaWxlTGlz
dC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YU9iamVjdEd0ayA6IHB1YmxpYyBS
ZWZDb3VudGVkPERhdGFPYmplY3RHdGs+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhT2JqZWN0R3RrPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEYXRhT2JqZWN0R3RrKCkpOwotICAgIH0KLQotICAgIGNvbnN0IEtVUkwmIHVybCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB1cmlMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV91cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1l
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJhbmdlKFBhc3NS
ZWZQdHI8UmFuZ2U+IG5ld1JhbmdlKSB7IG1fcmFuZ2UgPSBuZXdSYW5nZTsgfQotICAgIHZvaWQg
c2V0SW1hZ2UoR2RrUGl4YnVmKiBuZXdJbWFnZSkgeyBtX2ltYWdlID0gbmV3SW1hZ2U7IH0KLSAg
ICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBoYXNU
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQotICAg
IGJvb2wgaGFzTWFya3VwKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNF
bXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlz
dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5p
c0VtcHR5KCkgJiYgbV91cmwuaXNWYWxpZCgpOyB9Ci0gICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBj
b25zdCB7IHJldHVybiAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KLSAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsg
bV91cmlMaXN0ID0gIiI7IH0KLSAgICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsg
fQotICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IDA7IH0KLQotICAgIFN0cmluZyB0
ZXh0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4
dChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldE1hcmt1cChjb25zdCBTdHJpbmcmKTsKLSAg
ICB2b2lkIHNldFVSSUxpc3QoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIHVybExhYmVsKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Ci0gICAgdm9pZCBj
bGVhckFsbCgpOwotICAgIHZvaWQgY2xlYXJUZXh0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmt1cCgp
OwotCi0gICAgc3RhdGljIERhdGFPYmplY3RHdGsqIGZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQq
KTsKLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV90ZXh0OwotICAgIFN0cmluZyBtX21hcmt1cDsK
LSAgICBLVVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbV9maWxlbmFtZXM7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IG1faW1hZ2U7Ci0gICAgUmVm
UHRyPFJhbmdlPiBtX3JhbmdlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRGF0YU9iamVjdEd0a19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhNDc0OWQzM2NiYjI5OWM4ZGQ2NmUzNWMwMDkxYWIyOGYx
MGFlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJk
LmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJtYXJrdXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIERyYWdEYXRhOjpjYW5T
bWFydFJlcGxhY2UoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhLT5oYXNGaWxlbmFtZXMoKTsKLX0KLQotdW5zaWduZWQgRHJhZ0RhdGE6Om51
bWJlck9mRmlsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZp
bGVuYW1lcygpLnNpemUoKTsKLX0KLQotdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9y
PFN0cmluZz4mIHJlc3VsdCkgY29uc3QKLXsKLSAgICByZXN1bHQgPSBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmZpbGVuYW1lcygpOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVGV4dCgpOwotfQot
Ci1TdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0KCk7Ci19Ci0KLUNvbG9yIERyYWdEYXRhOjphc0Nv
bG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnRhaW5z
UGxhaW5UZXh0KCkgfHwgY29udGFpbnNVUkwoMCkgfHwgbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNN
YXJrdXAoKSB8fCBjb250YWluc0NvbG9yKCkgfHwgY29udGFpbnNGaWxlcygpOwotfQotCi1ib29s
IERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSogZnJhbWUsIEZpbGVuYW1lQ29udmVyc2lvblBv
bGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKLXsKLSAgICByZXR1cm4gIWFzVVJMKGZyYW1lLCBm
aWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOwotfQotCi1TdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZy
YW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRp
dGxlKSBjb25zdAotewotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNVUkwoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmIChmaWxlbmFtZVBvbGljeSAhPSBDb252ZXJ0
RmlsZW5hbWVzKSB7Ci0gICAgICAgIEtVUkwgdXJsKEtVUkwoKSwgbV9wbGF0Zm9ybURyYWdEYXRh
LT51cmwoKSk7Ci0gICAgICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdXJsKG1fcGxhdGZvcm1EcmFnRGF0
YS0+dXJsKCkpOwotICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRpdGxlID0gbV9wbGF0Zm9ybURy
YWdEYXRhLT51cmxMYWJlbCgpOwotICAgIHJldHVybiB1cmw7Ci19Ci0KLQotUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NS
ZWZQdHI8UmFuZ2U+LCBib29sLCBib29sJikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1E
cmFnRGF0YS0+aGFzTWFya3VwKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbV9wbGF0Zm9ybURyYWdE
YXRhLT5tYXJrdXAoKSwgIiIpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJY29uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxODc3MWM4Mjk5ZDAx
MTU0OTVlZmNjYzUwMTEyYWNkODRlZDc2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRyYWdJY29uLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0
a1dpZGdldCosIEdka0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24qIGljb24pCi17Ci0gICAg
UmVmUHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50
LT53aW5kb3cpKTsKLSAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkpOwotICAgIHJldHVybiBU
UlVFOwotfQotI2Vsc2UKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENh
bGxiYWNrKEd0a1dpZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJY29uKiBpY29uKQotewot
ICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250ZXh0LCAwKSkKLSAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgIGljb24tPmRyYXcoY29udGV4dCk7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQotRHJhZ0ljb246OkRyYWdJY29u
KCkKLSAgICA6IGlzQ29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBvc2l0ZWQoZ2RrX3NjcmVl
bl9nZXRfZGVmYXVsdCgpKSkKLSAgICAsIG1fd2luZG93KDApCi17Ci0gICAgaWYgKCFpc0NvbXBv
c2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2luZG93ID0gZ3RrX3dpbmRvd19uZXco
R1RLX1dJTkRPV19QT1BVUCk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxMQkFDSyhkcmFnSWNvbldp
bmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZWxzZQotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93aW5kb3csICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENh
bGxiYWNrKSwgdGhpcyk7Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgc3RyYXRlZ3kgb3JpZ2luYWxs
eSBjb21lcyBmcm9tIENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIvZ3RrL3RhYl9jb250ZW50
c19kcmFnX3NvdXJjZS5jYwotICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRf
c2NyZWVuKG1fd2luZG93KTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0NvbG9y
bWFwKiByZ2JhID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChzY3JlZW4pOwotICAgIGlm
IChyZ2JhKQotICAgICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX3dpbmRvdywgcmdiYSk7
Ci0jZWxzZQotICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV92aXN1
YWwoc2NyZWVuKTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgdmlzdWFsID0gZ2RrX3NjcmVl
bl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pOwotICAgIGd0a193aWRnZXRfc2V0X3Zpc3VhbCht
X3dpbmRvdywgdmlzdWFsKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgotfQotCi1EcmFn
SWNvbjo6fkRyYWdJY29uKCkKLXsKLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193aWRn
ZXRfZGVzdHJveShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgRHJhZ0ljb246OmRyYXcoY2Fpcm9fdCog
Y29udGV4dCkKLXsKLSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9pbWFnZS5nZXQoKSks
Ci0gICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2lt
YWdlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQsIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQsIG1faW1h
Z2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Ci19Ci0KLXZvaWQgRHJh
Z0ljb246OnNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGlt
YWdlKTsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZVNpemUgPSBJbnRTaXplKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KGltYWdlKSk7Ci0gICAgaWYgKGlzQ29tcG9zaXRlZCkgewotICAgICAgICBndGtf
d2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFnZVNpemUud2lkdGgoKSwg
bV9pbWFnZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLSAgICBtX3BpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb0ltYWdlU3Vy
ZmFjZVRvR2RrUGl4YnVmKGltYWdlKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBEcmFnSWNvbjo6dXNl
Rm9yRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBJbnRQb2ludCBob3RzcG90
KG1faW1hZ2VTaXplKTsKLSAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41KTsKLSAgICB1c2VGb3JE
cmFnKGNvbnRleHQsIGhvdHNwb3QpOwotfQotCi12b2lkIERyYWdJY29uOjp1c2VGb3JEcmFnKEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKLXsKLSAgICBp
ZiAoaXNDb21wb3NpdGVkKSB7Ci0gICAgICAgIGd0a19kcmFnX3NldF9pY29uX3dpZGdldChjb250
ZXh0LCBtX3dpbmRvdywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a19kcmFnX3NldF9pY29u
X3BpeGJ1Zihjb250ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54KCksIGhvdHNwb3QueSgp
KTsKLSNlbHNlCi0gICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBtX2ltYWdl
LmdldCgpKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
YmU0MzVkY2JkYTIwZTJlZGQ3YmZjMjZmN2IwZmYwOWEyOGI4ODU0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EcmFnSWNvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERyYWdJY29uX2gK
LSNkZWZpbmUgRHJhZ0ljb25faAotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlIDxS
ZWZQdHJDYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBEcmFnSWNvbiB7Ci1wdWJsaWM6Ci0gICAgRHJhZ0ljb24o
KTsKLSAgICB2aXJ0dWFsIH5EcmFnSWNvbigpOwotCi0gICAgdm9pZCBkcmF3KGNhaXJvX3QqKTsK
LSAgICB2b2lkIHNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCopOwotICAgIHZvaWQgdXNlRm9yRHJh
ZyhHZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCos
IGNvbnN0IEludFBvaW50JiBob3RzcG90KTsKLQotcHJpdmF0ZToKLSAgICBib29sIGlzQ29tcG9z
aXRlZDsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93OwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IG1faW1hZ2U7Ci0gICAgSW50U2l6ZSBtX2ltYWdlU2l6ZTsKLSNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBtX3BpeGJ1ZjsKLSNlbmRpZgotfTsKLQot
fQotCi0jZW5kaWYgLy8gRHJhZ0ljb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0ltYWdlR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3YzRjMTQy
ZTFjZWYzOWQyNGYzYmVlOWYzNGNiMmVhZDJiZDdlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0lt
YWdlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiAyMDEwIEln
YWxpYSBTLkwKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUg
PGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgaWYgKGlt
YWdlKQotICAgICAgICByZXR1cm4gSW50U2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSkpOwotCi0gICAg
cmV0dXJuIEludFNpemUoMCwgMCk7Ci19Ci0KLXZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZiBpbWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShpbWFnZSk7Ci19Ci0KLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VS
ZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGludCBuZXdXaWR0aCA9IHNjYWxlLndpZHRoKCkgKiBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSk7Ci0gICAgaW50IG5ld0hlaWdodCA9IHNjYWxlLmhl
aWdodCgpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKTsKLSAgICBjYWly
b19zdXJmYWNlX3QqIHNjYWxlZFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFy
KGltYWdlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsK
LQotICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHNj
YWxlZFN1cmZhY2UpKTsKLSAgICBjYWlyb19zY2FsZShjb250ZXh0LmdldCgpLCBzY2FsZS53aWR0
aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGNhaXJv
X2dldF9zb3VyY2UoY29udGV4dC5nZXQoKSksIENBSVJPX0VYVEVORF9QQUQpOwotICAgIGNhaXJv
X3BhdHRlcm5fc2V0X2ZpbHRlcihjYWlyb19nZXRfc291cmNlKGNvbnRleHQuZ2V0KCkpLCBDQUlS
T19GSUxURVJfQkVTVCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQuZ2V0KCksIENB
SVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRl
eHQuZ2V0KCksIGltYWdlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjb250ZXh0LmdldCgpKTsK
LQotICAgIGRlbGV0ZURyYWdJbWFnZShpbWFnZSk7Ci0gICAgcmV0dXJuIHNjYWxlZFN1cmZhY2U7
Ci19Ci0KLURyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdl
UmVmIGltYWdlLCBmbG9hdCBmcmFjdGlvbikKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGlmICghZ2RrX3NjcmVlbl9pc19jb21wb3NpdGVkKGdka19zY3JlZW5f
Z2V0X2RlZmF1bHQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAgIFJlZlB0cjxjYWly
b190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdlKSk7Ci0gICAgY2Fpcm9f
c2V0X29wZXJhdG9yKGNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0RFU1RfSU4pOwotICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LmdldCgpLCAwLCAwLCAwLCBmcmFjdGlvbik7
Ci0gICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQot
Ci1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgUmVz
cGVjdEltYWdlT3JpZW50YXRpb25FbnVtKQotewotICAgIE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2
ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgcmV0dXJu
IG5hdGl2ZUltYWdlID8gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZlSW1hZ2UtPnN1cmZh
Y2UoKSkgOiAwOwotfQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hl
ZEltYWdlKENhY2hlZEltYWdlKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzU0ZDU1ZTc2OTE1MWVkYzFkNDExNTZhNDMyY2E3NTk3ODE0YmFmMS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJFcnJvcnNHdGsuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJQcmludENvbnRleHQuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JDYW5jZWxsZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiTG9hZCByZXF1ZXN0IGNhbmNlbGxlZCIp
KTsKLX0KLQotUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5
LCBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxvd2VkIHRvIHVzZSByZXN0
cmljdGVkIG5ldHdvcmsgcG9ydCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJM
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiVVJMIGNh
bm5vdCBiZSBzaG93biIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJ
bnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3QudXJsKCkuc3RyaW5nKCksIF8oIkZyYW1lIGxvYWQgd2FzIGludGVycnVwdGVkIikpOwotfQot
Ci1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWlu
UG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVudCB3aXRoIHRoZSBzcGVj
aWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBm
aWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17
Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJy
b3JGaWxlRG9lc05vdEV4aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVy
bCgpLnN0cmluZygpLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOwotfQotCi1SZXNvdXJjZUVy
cm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVnaW4sIFBs
dWdpbkVycm9yV2lsbEhhbmRsZUxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2UudXJsKCkuc3RyaW5nKCksIF8oIlBsdWdpbiB3aWxsIGhhbmRsZSBsb2FkIikpOwotfQotCi1S
ZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIG5l
dHdvcmtFcnJvcikKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25s
b2FkLCBEb3dubG9hZEVycm9yTmV0d29yaywKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3
b3JrRXJyb3IuZmFpbGluZ1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24o
KSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJVc2VyIGNh
bmNlbGxlZCB0aGUgZG93bmxvYWQiKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgZG93bmxvYWREZXN0
aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
bkRvd25sb2FkLCBEb3dubG9hZEVycm9yRGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIGVycm9yTWVzc2FnZSk7Ci19Ci0KLVJlc291
cmNlRXJyb3IgcHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9y
R2VuZXJhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudExvYWRlciA/IGRvY3Vt
ZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotUmVzb3VyY2VF
cnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4
dCkKLXsKLSAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQt
PmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwotICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJs
KCkgOiBLVVJMKCksIF8oIlByaW50ZXIgbm90IGZvdW5kIikpOwotfQotCi1SZXNvdXJjZUVycm9y
IGludmFsaWRQYWdlUmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0
KQotewotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+
ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckludmFsaWRQYWdlUmFuZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJs
KCkgOiBLVVJMKCksIF8oIkludmFsaWQgcGFnZSByYW5nZSIpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9y
c0d0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODJjYzk5ZmJmMjkyZTRjYmNkNzNkNmVmMDljZmM0YzJj
OTQ4NmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBFcnJvcnNHdGtfaAotI2RlZmluZSBFcnJvcnNHdGtfaAotCi0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUHJpbnRDb250ZXh0
OwotY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFJl
c291cmNlUmVzcG9uc2U7Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluTmV0d29yayA9
ICJXZWJLaXROZXR3b3JrRXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5Qb2xp
Y3kgPSAiV2ViS2l0UG9saWN5RXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5Q
bHVnaW4gPSAiV2ViS2l0UGx1Z2luRXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21h
aW5Eb3dubG9hZCA9ICJXZWJLaXREb3dubG9hZEVycm9yIjsKLWNvbnN0IGNoYXIqIGNvbnN0IGVy
cm9yRG9tYWluUHJpbnQgPSAiV2ViS2l0UHJpbnRFcnJvciI7Ci0KLWVudW0gTmV0d29ya0Vycm9y
IHsKLSAgICBOZXR3b3JrRXJyb3JGYWlsZWQgPSAzOTksCi0gICAgTmV0d29ya0Vycm9yVHJhbnNw
b3J0ID0gMzAwLAotICAgIE5ldHdvcmtFcnJvclVua25vd25Qcm90b2NvbCA9IDMwMSwKLSAgICBO
ZXR3b3JrRXJyb3JDYW5jZWxsZWQgPSAzMDIsCi0gICAgTmV0d29ya0Vycm9yRmlsZURvZXNOb3RF
eGlzdCA9IDMwMwotfTsKLQotLy8gU3luYydkIHdpdGggTWFjJ3MgV2ViS2l0IEVycm9ycy4KLWVu
dW0gUG9saWN5RXJyb3IgewotICAgIFBvbGljeUVycm9yRmFpbGVkID0gMTk5LAotICAgIFBvbGlj
eUVycm9yQ2Fubm90U2hvd01pbWVUeXBlID0gMTAwLAotICAgIFBvbGljeUVycm9yQ2Fubm90U2hv
d1VSTCA9IDEwMSwKLSAgICBQb2xpY3lFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lD
aGFuZ2UgPSAxMDIsCi0gICAgUG9saWN5RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCA9IDEw
MwotfTsKLQotZW51bSBQbHVnaW5FcnJvciB7Ci0gICAgUGx1Z2luRXJyb3JGYWlsZWQgPSAyOTks
Ci0gICAgUGx1Z2luRXJyb3JDYW5ub3RGaW5kUGx1Z2luID0gMjAwLAotICAgIFBsdWdpbkVycm9y
Q2Fubm90TG9hZFBsdWdpbiA9IDIwMSwKLSAgICBQbHVnaW5FcnJvckphdmFVbmF2YWlsYWJsZSA9
IDIwMiwKLSAgICBQbHVnaW5FcnJvckNvbm5lY3Rpb25DYW5jZWxsZWQgPSAyMDMsCi0gICAgUGx1
Z2luRXJyb3JXaWxsSGFuZGxlTG9hZCA9IDIwNAotfTsKLQotZW51bSBEb3dubG9hZEVycm9yIHsK
LSAgICBEb3dubG9hZEVycm9yTmV0d29yayA9IDQ5OSwKLSAgICBEb3dubG9hZEVycm9yQ2FuY2Vs
bGVkQnlVc2VyID0gNDAwLAotICAgIERvd25sb2FkRXJyb3JEZXN0aW5hdGlvbiA9IDQwMQotfTsK
LQotZW51bSBQcmludEVycm9yIHsKLSAgICBQcmludEVycm9yR2VuZXJhbCA9IDU5OSwKLSAgICBQ
cmludEVycm9yUHJpbnRlck5vdEZvdW5kID0gNTAwLAotICAgIFByaW50RXJyb3JJbnZhbGlkUGFn
ZVJhbmdlID0gNTAxCi19OwotCi1SZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYpOwotUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7Ci1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKTsKLVJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291cmNlRXJyb3IgY2Fubm90U2hvd01J
TUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVzb3VyY2VFcnJvciBmaWxl
RG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVzb3VyY2VFcnJv
ciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLVJl
c291cmNlRXJyb3IgZG93bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpOwot
UmVzb3VyY2VFcnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci1SZXNvdXJj
ZUVycm9yIHByaW50RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpOwotUmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmlu
dENvbnRleHQqKTsKLVJlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5nZVRvUHJpbnQoY29uc3Qg
UHJpbnRDb250ZXh0Kik7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9FdmVudExvb3BHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWY3
YjVjYjc3Yjk0NGZiZTA1ODE4NGY4NjE0NDA1MmFlNmE1MjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9F
dmVudExvb3BHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRXZlbnRMb29wLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKLXsKLSAgICBnX21haW5fY29udGV4dF9pdGVy
YXRpb24oTlVMTCwgRkFMU0UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZhMjA3Mjk2YzZhNmNiNDY2MjhmNzcwOTYzNGUyNGU3MmY4ODdjOWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCi0KLSNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJVVUlELmgiCi0jaW5j
bHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRp
by5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vKiBPbiBsaW51eCBmaWxlIG5hbWVzIGFy
ZSBqdXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29kZWQg
aW4gYW55IHdheQotICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdlIGNh
bm5vdCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCi0gKiBidXQgd2Ug
aGF2ZSB0byBlc2NhcGUgaXQuCi0gKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBlbmNv
ZGluZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8KLVN0
cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQotewotICAgIGlmICgh
ZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOwotI2Vsc2UKLSAgICBHT3duUHRy
PGdjaGFyPiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZW5hbWUsICIvOiIs
IGZhbHNlKSk7Ci0gICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7Ci0jZW5kaWYKLX0KLQot
Q1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQotewot
I2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHBhdGgudXRmOCgpOwotI2Vsc2UKLSAgICBHT3du
UHRyPGdjaGFyPiBmaWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmcocGF0aC51dGY4KCkuZGF0
YSgpLCAwKSk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOwotI2VuZGlmCi19Ci0KLS8vIENv
bnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8g
dGhlIHVzZXIuCi1TdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5n
KQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHN0cmluZzsKLSNlbHNlCi0gICAgQ1N0
cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzdHJpbmcpOwotICAgIEdP
d25QdHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZpbGVuYW1lLmRhdGEoKSwg
MCwgMCwgMCwgMCkpOwotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsK
LQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0KCkpOwotI2VuZGlmCi19
Ci0KLWJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYm9vbCByZXN1
bHQgPSBmYWxzZTsKLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwotCi0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0
ID0gZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZpbGVuYW1lLmlzTnVs
bCgpKQotICAgICAgICByZXN1bHQgPSBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpID09IDA7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIENTdHJpbmcg
ZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZp
bGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXN1bHQgPSBnX3JtZGlyKGZpbGVuYW1lLmRhdGEo
KSkgPT0gMDsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgZ2V0RmlsZVNpemUoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCi17Ci0gICAgQ1N0cmluZyBm
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZmlsZW5h
bWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdTdGF0QnVmIHN0YXRS
ZXN1bHQ7Ci0gICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJl
c3VsdCk7Ci0gICAgaWYgKHJlc3VsdCAhPSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90
JiBtb2RpZmllZFRpbWUpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7Ci0gICAgZ2ludCByZXN1bHQg
PSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0gICAgaWYgKHJlc3VsdCAh
PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVz
dWx0LnN0X210aW1lOwotICAgIHJldHVybiB0cnVlOwotCi19Ci0KLWJvb2wgZ2V0RmlsZU1ldGFk
YXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBD
U3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlm
IChmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RydWN0
IHN0YXQgc3RhdFJlc3VsdDsKLSAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRh
KCksICZzdGF0UmVzdWx0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsK
LSAgICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7Ci0gICAgbWV0YWRhdGEu
dHlwZSA9IFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVNZXRhZGF0YTo6VHlwZURp
cmVjdG9yeSA6IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLX0K
LQotU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFN0cmluZyYgY29tcG9uZW50KQotewotICAgIGlmIChwYXRoLmVuZHNXaXRoKEdfRElSX1NF
UEFSQVRPUl9TKSkKLSAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsgY29tcG9uZW50OwotfQot
Ci1ib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0
cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAo
ZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdpbnQgcmVz
dWx0ID0gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKTsKLQot
ICAgIHJldHVybiByZXN1bHQgPT0gMDsKLX0KLQotU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkK
LXsKLSAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21lX2RpcigpKTsKLX0KLQot
U3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhOYW1lKQotewotICAgIGlm
IChwYXRoTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYXRoTmFtZTsKLQotICAgIENT
dHJpbmcgdG1wRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aE5hbWUpOwot
ICAgIEdPd25QdHI8Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFzZW5hbWUodG1wRmlsZW5h
bWUuZGF0YSgpKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkp
OwotfQotCi1DU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpCi17Ci0gICAgQ1N0cmlu
ZyBwYXRoID0gZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7Ci0gICAgaWYgKCFwYXRoLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gcGF0aDsKLQotICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywg
Y2hlY2sgdGhlIFBBVEggZW52IHZhcmlhYmxlLgotICAgIEdPd25QdHI8Y2hhcj4gY3VycmVudEV4
ZVBhdGgoZ19maW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1lKCkpKTsKLSAgICBpZiAo
IWN1cnJlbnRFeGVQYXRoLmdldCgpKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOwotCi0gICAg
R093blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5n
ZXQoKSkpOwotICAgIHJldHVybiBkaXJuYW1lLmdldCgpOwotfQotCi1DU3RyaW5nIHNoYXJlZFJl
c291cmNlc1BhdGgoKQotewotICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hlZFBhdGg7Ci0gICAgaWYg
KCFjYWNoZWRQYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gY2FjaGVkUGF0aDsKLQotI2lm
IE9TKFdJTkRPV1MpCi0gICAgSE1PRFVMRSBobW9kdWxlID0gMDsKLSAgICBHZXRNb2R1bGVIYW5k
bGVFeEEoR0VUX01PRFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJFU1MsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVsZSk7Ci0KLSAgICBHT3du
UHRyPGdjaGFyPiBydW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2Rp
cmVjdG9yeV9vZl9tb2R1bGUoaG1vZHVsZSkpOwotICAgIEdPd25QdHI8Z2NoYXI+IGRhdGFQYXRo
KGdfYnVpbGRfZmlsZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJlIiwgIndlYmtpdGd0ay0i
V0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOwotI2Vsc2UKLSAgICBHT3duUHRy
PGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0Z3RrLSJX
RUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7Ci0jZW5kaWYKLQotICAgIGNhY2hl
ZFBhdGggPSBkYXRhUGF0aC5nZXQoKTsKLSAgICByZXR1cm4gY2FjaGVkUGF0aDsKLX0KLQotdWlu
dDY0X3QgZ2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAg
R1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgp
KTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1
ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNU
RU1fRlJFRSwgMCwgMCkpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdl
dCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Ci19Ci0KLVN0cmluZyBkaXJl
Y3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICAvKiBObyBudWxsIGNoZWNraW5n
IG5lZWRlZCAqLwotICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUo
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOwotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KGRpcm5hbWUuZ2V0KCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBsaXN0RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCi17Ci0gICAg
VmVjdG9yPFN0cmluZz4gZW50cmllczsKLQotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxl
bmFtZS5kYXRhKCksIDAsIDApOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm4gZW50cmll
czsKLQotICAgIEdQYXR0ZXJuU3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRl
ci51dGY4KCkpLmRhdGEoKSk7Ci0gICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9y
ZWFkX25hbWUoZGlyKSkgewotICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNw
ZWMsIG5hbWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgR093blB0cjxnY2hh
cj4gZW50cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsK
LSAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOwot
ICAgIH0KLSAgICBnX3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKLSAgICBnX2Rpcl9jbG9zZShk
aXIpOwotCi0gICAgcmV0dXJuIGVudHJpZXM7Ci19Ci0KLVN0cmluZyBvcGVuVGVtcG9yYXJ5Rmls
ZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCi17Ci0g
ICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4
LnV0ZjgoKS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KSk7Ci0gICAgR093blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90
bXBfZGlyKCksIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7Ci0KLSAg
ICBoYW5kbGUgPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JF
QVRFX05PTkUsIDAsIDApOwotICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGgu
Z2V0KCkpOwotfQotCi1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKLXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmIChmc1JlcC5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBm
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7Ci0gICAg
R0ZpbGVJT1N0cmVhbSogaW9TdHJlYW0gPSAwOwotICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFk
KQotICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAw
LCAwKTsKLSAgICBlbHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkgewotICAgICAgICBpZiAo
Z19maWxlX3Rlc3QoZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9U
RVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKLSAgICAgICAgICAgIGlvU3Ry
ZWFtID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUu
Z2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlv
U3RyZWFtOwotfQotCi12b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkK
LXsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7Ci0gICAgZ19v
YmplY3RfdW5yZWYoaGFuZGxlKTsKLSAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFu
ZGxlOwotfQotCi1sb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwg
bG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQotewotICAgIEdTZWVrVHlw
ZSBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAgc3dpdGNoIChvcmlnaW4pIHsKLSAgICBjYXNl
IFNlZWtGcm9tQmVnaW5uaW5nOgotICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgotICAgICAgICBzZWVrVHlwZSA9
IEdfU0VFS19DVVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21FbmQ6Ci0gICAg
ICAgIHNlZWtUeXBlID0gR19TRUVLX0VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKCFnX3NlZWth
YmxlX3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKGhhbmRsZSkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHNlZWtUeXBl
LCAwLCAwKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBnX3NlZWthYmxlX3RlbGwo
R19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRs
ZSkpKSk7Ci19Ci0KLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsK
LSAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3Ry
ZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKLSAgICByZXR1cm4gYnl0ZXNXcml0
dGVuOwotfQotCi1pbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAg
IGRvIHsKLSAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19p
b19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAwLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCi0gICAgICAgICAg
ICByZXR1cm4gYnl0ZXNSZWFkOwotICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09
IEdfRklMRV9FUlJPUl9JTlRSKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgdW5sb2FkTW9k
dWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVy
biA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7Ci0jZWxzZQotICAgIHJldHVybiBnX21vZHVsZV9jbG9z
ZShtb2R1bGUpOwotI2VuZGlmCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093
blB0ckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNjkzZjQxNWU5Nzgy
NDdmZDNjOTM4NGQ0ZWQyNTFlZTA0OWI4ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQ
dHI8R2RrRXZlbnQ+KEdka0V2ZW50KiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ2Rr
X2V2ZW50X2ZyZWUocHRyKTsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEd0
a0ljb25JbmZvPihHdGtJY29uSW5mbyogaW5mbykKLXsKLSAgICBpZiAoaW5mbykKLSAgICAgICAg
Z3RrX2ljb25faW5mb19mcmVlKGluZm8pOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dPd25QdHJHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ1ZTgzNzFl
ZDM2OGY0MTVkODk3NDMyNGVlNjJkNzFmZWI3YTJkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0
ckd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHT3duUHRyR3RrX2gKLSNk
ZWZpbmUgR093blB0ckd0a19oCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R2RrRXZl
bnQ+KEdka0V2ZW50Kik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R3RrSWNvbklu
Zm8+KEd0a0ljb25JbmZvKik7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR1JlZlB0ckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNTA2
ZGY5MDA3ZDI0Y2MwNzY3NzY4ZGVmZDEwNTY2MmZjMzliM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dS
ZWZQdHJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFy
dGluIFJvYmluc29uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotCi0jZGVmaW5lIFNFQ1JFVF9XSVRI
X1VOU1RBQkxFIDEKLSNkZWZpbmUgU0VDUkVUX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSAxCi0KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNlY3Jl
dC9zZWNyZXQuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlIDw+IEd0a1RhcmdldExp
c3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAg
IGd0a190YXJnZXRfbGlzdF9yZWYocHRyKTsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0
ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCi17Ci0gICAgaWYgKHB0cikK
LSAgICAgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKHB0cik7Ci19Ci0KLXRlbXBsYXRlIDw+IFNl
Y3JldFZhbHVlKiByZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAg
ICAgICAgc2VjcmV0X3ZhbHVlX3JlZihwdHIpOwotICAgIHJldHVybiBwdHI7Ci19Ci0KLXRlbXBs
YXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCi17Ci0gICAgaWYgKHB0cikK
LSAgICAgICAgc2VjcmV0X3ZhbHVlX3VucmVmKHB0cik7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgotdGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKQot
ewotICAgIGlmIChwdHIpCi0gICAgICAgIGdka19jdXJzb3JfcmVmKHB0cik7Ci0gICAgcmV0dXJu
IHB0cjsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCi17
Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihwdHIpOwotfQotI2VuZGlm
Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3Rr
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5MTkyODY0YTkyMjlkYWI4ODNiZWZhNTYyYjIzNWFkOGFjMzk2
ZGM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICog
IENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBH
UmVmUHRyR3RrX2gKLSNkZWZpbmUgR1JlZlB0ckd0a19oCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9TZWNyZXRWYWx1ZSBTZWNyZXRWYWx1ZTsK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlIDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIo
R3RrVGFyZ2V0TGlzdCogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEd0a1Rhcmdl
dExpc3QqIHB0cik7Ci0KLXRlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiByZWZHUHRyKFNlY3JldFZh
bHVlKiBwdHIpOwotdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cik7
Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotdGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZH
UHRyKEdka0N1cnNvciogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNv
ciogcHRyKTsKLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HYW1lcGFkc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOTYw
OWRkMDg3MTJkMTI4NTIzNjRiZjIwZTZkYmMzZjRhZmZhZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dh
bWVwYWRzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKLQotI2lm
IEVOQUJMRShHQU1FUEFEKQotCi0jaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCi0jaW5j
bHVkZSAiR2FtZXBhZExpc3QuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8Z2lv
L2d1bml4aW5wdXRzdHJlYW0uaD4KLSNpbmNsdWRlIDxndWRldi9ndWRldi5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2FtZXBhZERldmljZUd0ayA6
IHB1YmxpYyBHYW1lcGFkRGV2aWNlTGludXggewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPEdhbWVwYWREZXZpY2VHdGs+IGNyZWF0ZShTdHJpbmcgZGV2aWNlRmlsZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2FtZXBhZERldmljZUd0ayhkZXZpY2VGaWxlKSk7
Ci0gICAgfQotICAgIH5HYW1lcGFkRGV2aWNlR3RrKCk7Ci0KLXByaXZhdGU6Ci0gICAgR2FtZXBh
ZERldmljZUd0ayhTdHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVh
ZENhbGxiYWNrKEdPYmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKTsKLSAgICBH
UmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fc291cmNlOwotfTsKLQotR2FtZXBhZERldmljZUd0azo6R2FtZXBhZERldmljZUd0ayhTdHJp
bmcgZGV2aWNlRmlsZSkKLSAgICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZpY2VGaWxlKQotewot
ICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJlYW1fbmV3KG1fZmlsZURl
c2NyaXB0b3IsIEZBTFNFKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9p
bnB1dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShtX2lucHV0
U3RyZWFtLmdldCgpKSwgMCkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENhbGxiYWNrKSwgdGhpcywg
MCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAwKTsKLX0KLQotR2FtZXBh
ZERldmljZUd0azo6fkdhbWVwYWREZXZpY2VHdGsoKQotewotICAgIGlmIChtX3NvdXJjZSkKLSAg
ICAgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Ci19Ci0KLWdib29sZWFuIEdh
bWVwYWREZXZpY2VHdGs6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gcmVp
bnRlcnByZXRfY2FzdDxHYW1lcGFkRGV2aWNlR3RrKj4oZGF0YSk7Ci0gICAgR093blB0cjxHRXJy
b3I+IGVycm9yOwotICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKLQotICAgIGdzc2l6ZSBsZW4g
PSBnX3BvbGxhYmxlX2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5nKEdfUE9MTEFCTEVfSU5Q
VVRfU1RSRUFNKHBvbGxhYmxlU3RyZWFtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnQsIHNpemVvZihldmVudCksIDAsICZl
cnJvci5vdXRQdHIoKSk7Ci0KLSAgICAvLyBGSVhNRTogUHJvcGVybHkgbG9nIHRoZSBlcnJvci4K
LSAgICAvLyBJbiB0aGUgY2FzZSBvZiBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLIGVycm9yIHJldHVy
biBUUlVFIHRvIHdhaXQgdW50aWwKLSAgICAvLyB0aGUgc291cmNlIGJlY29tZXMgcmVhZGFibGUg
YWdhaW4gYW5kIEZBTFNFIG90aGVyd2lzZS4KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVy
biBnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfV09V
TERfQkxPQ0spOwotCi0gICAgQVNTRVJUX1VOVVNFRChsZW4sIGxlbiA9PSBzaXplb2YoZXZlbnQp
KTsKLSAgICBnYW1lcGFkRGV2aWNlLT51cGRhdGVGb3JFdmVudChldmVudCk7Ci0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLWNsYXNzIEdhbWVwYWRzR3RrIHsKLXB1YmxpYzoKLSAgICBHYW1lcGFkc0d0
ayh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdm9pZCByZWdpc3RlckRldmljZShTdHJpbmcgZGV2
aWNlRmlsZSk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsK
LQotICAgIHZvaWQgdXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqKTsKLQotcHJpdmF0ZToK
LSAgICB+R2FtZXBhZHNHdGsoKTsKLSAgICBzdGF0aWMgdm9pZCBvblVFdmVudENhbGxiYWNrKEdV
ZGV2Q2xpZW50KiwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBncG9pbnRlciBkYXRhKTsK
LSAgICBzdGF0aWMgZ2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKik7Ci0KLSAg
ICBWZWN0b3I8T3duUHRyPEdhbWVwYWREZXZpY2VHdGs+ID4gbV9zbG90czsKLSAgICBIYXNoTWFw
PFN0cmluZywgR2FtZXBhZERldmljZUd0ayo+IG1fZGV2aWNlTWFwOwotCi0gICAgR1JlZlB0cjxH
VWRldkNsaWVudD4gbV9ndWRldkNsaWVudDsKLX07Ci0KLUdhbWVwYWRzR3RrOjpHYW1lcGFkc0d0
ayh1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBtX3Nsb3RzKGxlbmd0aCkKLXsKLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3Vic3lzdGVtc1tdID0geyAiaW5wdXQiLCAwIH07Ci0gICAgbV9ndWRldkNs
aWVudCA9IGFkb3B0R1JlZihnX3VkZXZfY2xpZW50X25ldyhzdWJzeXN0ZW1zKSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChtX2d1ZGV2Q2xpZW50LmdldCgpLCAidWV2ZW50IiwgR19DQUxMQkFDSyhv
blVFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBHT3duUHRyPEdMaXN0PiBkZXZpY2VzTGlz
dChnX3VkZXZfY2xpZW50X3F1ZXJ5X2J5X3N1YnN5c3RlbShtX2d1ZGV2Q2xpZW50LmdldCgpLCBz
dWJzeXN0ZW1zWzBdKSk7Ci0gICAgZm9yIChHTGlzdCogbGlzdEl0ZW0gPSBkZXZpY2VzTGlzdC5n
ZXQoKTsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pKSB7Ci0gICAg
ICAgIEdVZGV2RGV2aWNlKiBkZXZpY2UgPSBHX1VERVZfREVWSUNFKGxpc3RJdGVtLT5kYXRhKTsK
LSAgICAgICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdfdWRldl9kZXZp
Y2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOwotICAgICAgICBpZiAoaXNHYW1lcGFkRGV2aWNl
KGRldmljZSkpCi0gICAgICAgICAgICByZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKLSAgICAg
ICAgZ19vYmplY3RfdW5yZWYoZGV2aWNlKTsKLSAgICB9Ci19Ci0KLUdhbWVwYWRzR3RrOjp+R2Ft
ZXBhZHNHdGsoKQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCht
X2d1ZGV2Q2xpZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZp
bGUpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2UgJXMi
LCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoIW1fZGV2aWNlTWFwLmNv
bnRhaW5zKGRldmljZUZpbGUpKTsKLQotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IG1fc2xvdHMuc2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICghbV9zbG90c1tpbmRl
eF0pIHsKLSAgICAgICAgICAgIG1fc2xvdHNbaW5kZXhdID0gR2FtZXBhZERldmljZUd0azo6Y3Jl
YXRlKGRldmljZUZpbGUpOwotICAgICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKGRldmljZUZpbGUs
IG1fc2xvdHNbaW5kZXhdLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZp
Y2VGaWxlKQotewotICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZp
Y2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBBU1NFUlQobV9kZXZpY2VN
YXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOwotCi0gICAgR2FtZXBhZERldmljZUd0ayogZ2FtZXBh
ZERldmljZSA9IG1fZGV2aWNlTWFwLnRha2UoZGV2aWNlRmlsZSk7Ci0gICAgc2l6ZV90IGluZGV4
ID0gbV9zbG90cy5maW5kKGdhbWVwYWREZXZpY2UpOwotICAgIEFTU0VSVChpbmRleCAhPSBub3RG
b3VuZCk7Ci0KLSAgICBtX3Nsb3RzW2luZGV4XS5jbGVhcigpOwotfQotCi12b2lkIEdhbWVwYWRz
R3RrOjp1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKLXsKLSAgICBBU1NFUlQo
bV9zbG90cy5zaXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2xvdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1fc2xvdHNbaV0u
Z2V0KCkgJiYgbV9zbG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIEdhbWVwYWRE
ZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOwotICAgICAgICAgICAg
UmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYg
KCFnYW1lcGFkKQotICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsK
LQotICAgICAgICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5p
ZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChn
YW1lcGFkRGV2aWNlLT50aW1lc3RhbXAoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdh
bWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKLSAg
ICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCks
IGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOwotCi0gICAgICAgICAgICBpbnRvLT5zZXQo
aSwgZ2FtZXBhZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW50by0+c2V0KGksIDAp
OwotICAgIH0KLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNs
aWVudCogdWRldkNsaWVudCwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqIGRldmljZSwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoIWlzR2FtZXBhZERldmljZShkZXZpY2UpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHYW1lcGFkc0d0ayogZ2FtZXBhZHNHdGsgPSByZWludGVycHJldF9j
YXN0PEdhbWVwYWRzR3RrKj4oZGF0YSk7Ci0gICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6
OmZyb21VVEY4KGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOwotCi0gICAg
aWYgKCFnX3N0cmNtcDAoYWN0aW9uLCAiYWRkIikpCi0gICAgICAgIGdhbWVwYWRzR3RrLT5yZWdp
c3RlckRldmljZShkZXZpY2VGaWxlKTsKLSAgICBlbHNlIGlmICghZ19zdHJjbXAwKGFjdGlvbiwg
InJlbW92ZSIpKQotICAgICAgICBnYW1lcGFkc0d0ay0+dW5yZWdpc3RlckRldmljZShkZXZpY2VG
aWxlKTsKLX0KLQotZ2Jvb2xlYW4gR2FtZXBhZHNHdGs6OmlzR2FtZXBhZERldmljZShHVWRldkRl
dmljZSogZGV2aWNlKQotewotICAgIGNvbnN0IGdjaGFyKiBkZXZpY2VGaWxlID0gZ191ZGV2X2Rl
dmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKTsKLSAgICBjb25zdCBnY2hhciogc3lzZnNQYXRo
ID0gZ191ZGV2X2RldmljZV9nZXRfc3lzZnNfcGF0aChkZXZpY2UpOwotICAgIGlmICghZGV2aWNl
RmlsZSB8fCAhc3lzZnNQYXRoKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAoIWdf
dWRldl9kZXZpY2VfaGFzX3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUIikgfHwgIWdfdWRldl9k
ZXZpY2VfaGFzX3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUX0pPWVNUSUNLIikpCi0gICAgICAg
IHJldHVybiBGQUxTRTsKLQotICAgIHJldHVybiBnX3N0cl9oYXNfcHJlZml4KGRldmljZUZpbGUs
ICIvZGV2L2lucHV0L2pzIik7Ci19Ci0KLXZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3Qq
IGludG8pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHYW1lcGFkc0d0aywgZ2FtZXBhZHNH
dGssIChpbnRvLT5sZW5ndGgoKSkpOwotICAgIGdhbWVwYWRzR3RrLnVwZGF0ZUdhbWVwYWRMaXN0
KGludG8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
R0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGEy
ZWFiMTI5NjMzNGQ0YTAwNjA1YTQyMWIwMmZlYWU0ODJkNzc4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCIKLQotI2luY2x1
ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
Ci0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgZ0xheW91dENvbHVtblNwYWNpbmcgPSAxMjsKLXN0YXRpYyBjb25zdCBp
bnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2Owotc3RhdGljIGNvbnN0IGludCBnQnV0dG9uU3BhY2lu
ZyA9IDU7Ci0KLUd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3Rv
cmFnZU1vZGUgbW9kZSkKLSAgICA6IG1fZGlhbG9nKDApCi0gICAgLCBtX2xvZ2luRW50cnkoMCkK
LSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDAp
Ci0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdl
TW9kZShtb2RlKQotewotfQotCi1HdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGlj
YXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQotICAgIDog
bV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKLSAgICAsIG1fbG9naW5FbnRyeSgwKQotICAgICwg
bV9wYXNzd29yZEVudHJ5KDApCi0gICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKLSAgICAs
IG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKLSAgICAsIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1v
ZGUpCi17Ci0gICAgR3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRl
bnRfYXJlYShHVEtfRElBTE9HKG1fZGlhbG9nKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9y
ZGVyX3dpZHRoKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhtX2RpYWxvZykpLCA1KTsKLSAgICBn
dGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAy
ID0gMTIgKi8KLQotICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7
Ci0gICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFMU0UpOwotICAgIGd0a193
aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOwotICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFt
ZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04pOwotCi0gICAgaWYgKHBh
cmVudFdpbmRvdykKLSAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2Zvcih3aW5kb3cs
IHBhcmVudFdpbmRvdyk7Ci0KLSAgICBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKGNvbnRlbnRB
cmVhKTsKLX0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMgdm9pZCBwYWNrVHdv
Q29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKLXsKLSAgICB2YV9saXN0IGFy
Z3VtZW50TGlzdDsKLSAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7Ci0KLSAgICBHdGtX
aWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7Ci0gICAgZ3RrX3RhYmxl
X3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcp
OwotICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlv
dXRSb3dTcGFjaW5nKTsKLQotICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9h
cmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0gMDsKLSAg
ICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKLSAgICAgICAgaWYgKHJvd051bWJlcikKLSAg
ICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsg
MSwgMik7Ci0KLSAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmco
YXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRh
Y2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdU
S19GSUxMKTsKLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJz
dENvbHVtbldpZGdldCwKLSAgICAgICAgICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAy
LAotICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxLAotICAgICAgICAgICAgYXR0
YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKLSAgICAgICAgICAgIDAsIDApOwotCi0gICAgICAg
IGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCi0gICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2Rl
ZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVt
YmVyLCByb3dOdW1iZXIgKyAxKTsKLQotICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2Fy
Zyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9
Ci0KLSAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOwotfQotI2Vsc2UKLXN0YXRpYyB2
b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQotewotICAg
IHZhX2xpc3QgYXJndW1lbnRMaXN0OwotICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsK
LQotICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOwotICAgIGd0a19ncmlkX3Nl
dF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAg
IGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNp
bmcpOwotICAgIGd0a19ncmlkX3NldF9jb2x1bW5faG9tb2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCks
IFRSVUUpOwotCi0gICAgR3RrV2lkZ2V0KiBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1
bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgIGludCByb3dOdW1iZXIgPSAwOwotICAgIHdoaWxl
IChmaXJzdENvbHVtbldpZGdldCkgewotICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVtbldp
ZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICBpbnQgZmly
c3RXaWRnZXRXaWR0aCA9IHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyOwotCi0gICAgICAgIGd0
a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgZmlyc3RDb2x1bW5XaWRnZXQsIDAsIHJvd051
bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwgMSk7Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBh
bmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhw
YW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29sdW1u
V2lkZ2V0KSB7Ci0gICAgICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNl
Y29uZENvbHVtbldpZGdldCwgMSwgcm93TnVtYmVyLCAxLCAxKTsKLSAgICAgICAgICAgIGd0a193
aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgICAg
IGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwg
R3RrV2lkZ2V0Kik7Ci0gICAgICAgIHJvd051bWJlcisrOwotICAgIH0KLQotICAgIHZhX2VuZChh
cmd1bWVudExpc3QpOwotCi0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3Jp
ZCwgRkFMU0UsIEZBTFNFLCAwKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVh
dGVEaWFsb2dMYWJlbChjb25zdCBjaGFyKiBsYWJlbFN0cmluZywgaW50IGhvcml6b250YWxQYWRk
aW5nID0gMCkKLXsKLSAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0
cmluZyk7Ci0gICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAsIDAu
NSk7Ci0gICAgaWYgKGhvcml6b250YWxQYWRkaW5nKQotICAgICAgICBndGtfbWlzY19zZXRfcGFk
ZGluZyhHVEtfTUlTQyhsYWJlbCksIDAsIGhvcml6b250YWxQYWRkaW5nKTsKLSAgICByZXR1cm4g
bGFiZWw7Ci19Ci0KLXN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdl
dCoqIG1lbWJlcikKLXsKLSAgICAqbWVtYmVyID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGd0a19l
bnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKCptZW1iZXIpLCBUUlVFKTsKLSAg
ICByZXR1cm4gKm1lbWJlcjsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6Y3Jl
YXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcikKLXsKLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxT
RSwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBn
dGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgZ0xheW91dENvbHVtblNwYWNp
bmcpOwotI2VuZGlmCi0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05U
QUlORVIoaEJveCksIGdCdXR0b25TcGFjaW5nKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKGNvbnRhaW5lciksIGhCb3gpOwotCi0gICAgR3RrV2lkZ2V0KiBpY29uID0gZ3Rr
X2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdU
S19JQ09OX1NJWkVfRElBTE9HKTsKLSAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVND
KGljb24pLCAwLjUsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBp
Y29uLCBGQUxTRSwgRkFMU0UsIDApOwotCi0gICAgR093blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJk
dXBfcHJpbnRmKAotICAgICAgICBfKCJUaGUgc2l0ZSAlczolaSByZXF1ZXN0cyBhIHVzZXJuYW1l
IGFuZCBwYXNzd29yZCIpLAotICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5o
b3N0KCkudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCkucG9ydCgpKSk7Ci0KLSAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0
dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsKLSAgICBndGtf
bGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTiht
X3JlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOwotICAgIGd0a193aWRnZXRfc2V0X25vX3No
b3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0g
RGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7Ci0KLQotICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhl
IGJ1dHRvbiBib3ggaGVyZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWFkeS1tYWRl
IEd0a0RpYWxvZyBidXR0b25zLgotICAgIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gc2hhcmUg
dGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgdXNlIEd0a0RpYWxvZy4K
LSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3Rr
X2hidXR0b25fYm94X25ldygpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0
a19idXR0b25fYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7Ci0jZW5kaWYKLSAg
ICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcp
OwotICAgIGd0a19idXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94
KSwgR1RLX0JVVFRPTkJPWF9FTkQpOwotCi0gICAgbV9va2F5QnV0dG9uID0gZ3RrX2J1dHRvbl9u
ZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOwotICAgIG1fY2FuY2VsQnV0dG9uID0gZ3RrX2J1
dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKLSAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX2NhbmNlbEJ1dHRvbiwgRkFMU0UsIFRSVUUsIDAp
OwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fb2theUJ1dHRv
biwgRkFMU0UsIFRSVUUsIDApOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9va2F5QnV0dG9uLCAi
Y2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChtX2NhbmNlbEJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1
dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOwotCi0gICAgU3RyaW5nIHJlYWxtID0gbV9jaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKLSAgICBpZiAoIXJlYWxtLmlzRW1wdHko
KSkgewotICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJveCwKLSAgICAgICAgICAg
IGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxM
LAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBj
cmVhdGVEaWFsb2dMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKLSAgICAgICAgICAgIGNyZWF0
ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5F
bnRyeSksCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNy
ZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAotICAgICAgICAgICAgbV9yZW1lbWJl
ckNoZWNrQnV0dG9uLCBOVUxMLAotICAgICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxMKTsK
LQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChoQm94LAot
ICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3Bh
Y2luZyksIE5VTEwsCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToi
KSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAotICAgICAgICAgICAgY3JlYXRl
RGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29y
ZEVudHJ5KSwKLSAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwK
LSAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotCi0gICAgZ3RrX2Vu
dHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7Ci0g
ICAgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IG1f
Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOwotICAgIGlmICghY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0
KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdl
LnVzZXIoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19F
TlRSWShtX3Bhc3N3b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnBh
c3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9h
Y3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7Ci0g
ICAgfQotfQotCi12b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKLXsKLSAgICBn
dGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24sIFRSVUUpOwotICAgIGd0a193
aWRnZXRfZ3JhYl9kZWZhdWx0KG1fb2theUJ1dHRvbik7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKG1fbG9naW5FbnRyeSk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsK
LX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCi17Ci0gICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKLSAgICBkZWxldGUgdGhpczsKLX0KLQotdm9pZCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCi17Ci0gICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQotICAgICAgICBtX2No
YWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9jaGFs
bGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxl
bmdlLCBjcmVkZW50aWFsKTsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YnV0
dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyogZGlhbG9nKQotewotICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKLSAgICBpZiAoYnV0
dG9uID09IGRpYWxvZy0+bV9va2F5QnV0dG9uKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnVzZXJu
YW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRyeSkp
OwotICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtf
RU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKLSAgICAgICAgYm9vbCByZW1lbWJlclBh
c3N3b3JkID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihk
aWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpOwotICAgICAgICBDcmVkZW50aWFsUGVyc2lz
dGVuY2UgcGVyc2lzdGVuY2U7Ci0KLSAgICAgICAgaWYgKHJlbWVtYmVyUGFzc3dvcmQgJiYgZGlh
bG9nLT5tX2NyZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlKQot
ICAgICAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlRm9yU2Vzc2lvbjsKLQotICAgICAgICBjcmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJp
bmc6OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNp
c3RlbmNlKTsKLSAgICB9Ci0KLSAgICBkaWFsb2ctPmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsK
LSAgICBkaWFsb2ctPmRlc3Ryb3koKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc3YzgxYWRmZWZiZDE5MjY5NzU5
YTk4NzE2NjFlZjQ4MTViYTM2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Z19oCi0jZGVmaW5lIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKLQotI2luY2x1ZGUgIkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+Ci0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyk7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBlbnVtIENyZWRlbnRpYWxTdG9y
YWdlTW9kZSB7Ci0gICAgICAgIEFsbG93UGVyc2lzdGVudFN0b3JhZ2UsIC8vIFRoZSB1c2VyIGlz
IGFza2VkIHdoZXRoZXIgdG8gc3RvcmUgY3JlZGVudGlhbCBpbmZvcm1hdGlvbi4KLSAgICAgICAg
RGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSAvLyBDcmVkZW50aWFsIGluZm9ybWF0aW9uIGlzIG9u
bHkga2VwdCBpbiB0aGUgc2Vzc2lvbi4KLSAgICB9OwotCi0gICAgR3RrQXV0aGVudGljYXRpb25E
aWFsb2coY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsU3RvcmFnZU1v
ZGUpOwotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyosIGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKLSAgICB2aXJ0dWFs
IH5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpIHsgfQotICAgIHZvaWQgc2hvdygpOwotICAgIHZv
aWQgZGVzdHJveSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjcmVhdGVDb250ZW50c0luQ29u
dGFpbmVyKEd0a1dpZGdldCogY29udGFpbmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXV0aGVudGlj
YXRlKGNvbnN0IENyZWRlbnRpYWwmKTsKLSAgICBHdGtXaWRnZXQqIG1fZGlhbG9nOwotICAgIEd0
a1dpZGdldCogbV9sb2dpbkVudHJ5OwotICAgIEd0a1dpZGdldCogbV9wYXNzd29yZEVudHJ5Owot
ICAgIEd0a1dpZGdldCogbV9yZW1lbWJlckNoZWNrQnV0dG9uOwotICAgIEd0a1dpZGdldCogbV9v
a2F5QnV0dG9uOwotICAgIEd0a1dpZGdldCogbV9jYW5jZWxCdXR0b247Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIHZvaWQgYnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCosIEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKik7Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgbV9jaGFsbGVu
Z2U7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR3RrQXV0aGVudGljYXRp
b25EaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ns
aWNrQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3Vu
dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjOGEzMmMwMjY1ZWQxMTVk
OGQ3NjFlZDdhNGZmZDIxM2VhZGQzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrQ2xpY2tDb3VudGVyLmgiCi0KLSNp
bmNsdWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUd0a0NsaWNrQ291bnRlcjo6R3RrQ2xpY2tDb3VudGVyKCkKLSAgICA6IG1f
Y3VycmVudENsaWNrQ291bnQoMCkKLSAgICAsIG1fcHJldmlvdXNDbGlja0J1dHRvbigwKQotICAg
ICwgbV9wcmV2aW91c0NsaWNrVGltZSgwKQotewotfQotCi12b2lkIEd0a0NsaWNrQ291bnRlcjo6
cmVzZXQoKQotewotICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAwOwotICAgIG1fcHJldmlvdXND
bGlja1BvaW50ID0gSW50UG9pbnQoKTsKLSAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gMDsKLSAg
ICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSAwOwotfQotCi1ib29sIEd0a0NsaWNrQ291bnRlcjo6
c2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKLXsK
LSAgICAvLyBGb3IgZG91YmxlIGFuZCB0cmlwbGUgY2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9y
bWFsIGJ1dHRvbiBwcmVzcyBldmVudAotICAgIC8vIGFuZCBhIHNwZWNpZmljIHR5cGUgKGxpa2Ug
R0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3ZSBkZXRlY3QgYSBzcGVjaWFsIHByZXNzCi0gICAgLy8g
Y29taW5nIHVwLCBpZ25vcmUgdGhpcyBldmVudCBhcyBpdCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRo
ZSBkb3VibGUgb3IgdHJpcGxlCi0gICAgLy8gY2xpY2suIFRoZSBjb25zZXF1ZW5jZSBvZiBub3Qg
ZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdvIERPTSBidXR0b24gcHJlc3MgZXZlbnRzCi0gICAgLy8g
YXJlIGdlbmVyYXRlZC4KLSAgICBHT3duUHRyPEdka0V2ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50
X3BlZWsoKSk7Ci0gICAgaWYgKCFuZXh0RXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmIChuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18yQlVUVE9OX1BSRVNTIHx8IG5leHRFdmVu
dC0+YW55LnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGd1aW50MzIgZ2V0RXZlbnRUaW1lKEdka0V2
ZW50KiBldmVudCkKLXsKLSAgICBndWludDMyIHRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZl
bnQpOwotICAgIGlmICh0aW1lKQotICAgICAgICByZXR1cm4gdGltZTsKLQotICAgIC8vIFJlYWwg
ZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXplcm8gdGltZSwgYnV0IGV2ZW50cyBzeW50aGVzaXpl
ZAotICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90IGFuZCB3ZSBtdXN0IGNhbGN1bGF0ZSBhIHRpbWUg
bWFudWFsbHkuIFRoaXMgdGltZQotICAgIC8vIGlzIG5vdCBjYWxjdWxhdGVkIGluIHRoZSBEUlQs
IGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aAotICAgIC8vIGFueXRoaW5nIG90
aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBvbiBzeW50aGVzaXplZCBldmVudHMuCi0gICAgR1Rp
bWVWYWwgdGltZVZhbHVlOwotICAgIGdfZ2V0X2N1cnJlbnRfdGltZSgmdGltZVZhbHVlKTsKLSAg
ICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMgKiAxMDAwKSArICh0aW1lVmFsdWUudHZfdXNlYyAv
IDEwMDApOwotfQotCi1pbnQgR3RrQ2xpY2tDb3VudGVyOjpjbGlja0NvdW50Rm9yR2RrQnV0dG9u
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKLXsK
LSAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7Ci0gICAgZ2ludCBkb3VibGVDbGlj
a1RpbWUgPSA1OwotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRf
Zm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSk7Ci0gICAgZ19vYmplY3Rf
Z2V0KHNldHRpbmdzLAotICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay1kaXN0YW5j
ZSIsICZkb3VibGVDbGlja0Rpc3RhbmNlLAotICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1j
bGljay10aW1lIiwgJmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7Ci0KLSAgICAvLyBHVEsrIG9ubHkg
Y291bnRzIHVwIHRvIHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJDb3JlIHdhbnRzIHRvIGtub3cgYWJv
dXQKLSAgICAvLyBxdWFkcnVwbGUgY2xpY2tzLCBxdWludHVwbGUgY2xpY2tzLCBhZCBpbmZpbml0
dW0uIEhlcmUsIHdlIHJlcGxpY2F0ZSB0aGUKLSAgICAvLyBHREsgbG9naWMgZm9yIGNvdW50aW5n
IGNsaWNrcy4KLSAgICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGJ1dHRvbkV2ZW50KSk7Ci0gICAgZ3VpbnQzMiBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUoZXZl
bnQpOwotCi0gICAgaWYgKChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBldmVu
dC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgfHwgKChhYnMoYnV0dG9uRXZl
bnQtPnggLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC54KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkK
LSAgICAgICAgICAgICYmIChhYnMoYnV0dG9uRXZlbnQtPnkgLSBtX3ByZXZpb3VzQ2xpY2tQb2lu
dC55KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAgICYmIChldmVudFRpbWUg
LSBtX3ByZXZpb3VzQ2xpY2tUaW1lIDwgc3RhdGljX2Nhc3Q8Z3VpbnQ+KGRvdWJsZUNsaWNrVGlt
ZSkpCi0gICAgICAgICAgICAmJiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSBtX3ByZXZpb3VzQ2xp
Y2tCdXR0b24pKSkKLSAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCsrOwotICAgIGVsc2UKLSAg
ICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCA9IDE7Ci0KLSAgICBnZG91YmxlIHgsIHk7Ci0gICAg
Z2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7Ci0gICAgbV9wcmV2aW91c0NsaWNr
UG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKLSAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSBidXR0
b25FdmVudC0+YnV0dG9uOwotICAgIG1fcHJldmlvdXNDbGlja1RpbWUgPSBldmVudFRpbWU7Ci0K
LSAgICByZXR1cm4gbV9jdXJyZW50Q2xpY2tDb3VudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291
bnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmNhMWRlYzkxODA3OTRmMmY3NTE5YjhiYzUy
YjY3OTRiMWY5N2NmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgR3Rr
Q2xpY2tDb3VudGVyX2gKLSNkZWZpbmUgR3RrQ2xpY2tDb3VudGVyX2gKLQotI2luY2x1ZGUgIklu
dFBvaW50LmgiCi0KLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRv
bjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtDbGlja0NvdW50ZXIgewotcHVi
bGljOgotICAgIEd0a0NsaWNrQ291bnRlcigpOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29s
IHNob3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiopOwotICAgIGludCBjbGlj
a0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qKTsKLQot
cHJpdmF0ZToKLSAgICBpbnQgbV9jdXJyZW50Q2xpY2tDb3VudDsKLSAgICBJbnRQb2ludCBtX3By
ZXZpb3VzQ2xpY2tQb2ludDsKLSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0NsaWNrQnV0dG9u
OwotICAgIGludCBtX3ByZXZpb3VzQ2xpY2tUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1
N2E2MDdhMTg5YjU0Yjg2NGE1OThmZmI4NTg1M2E1OGQ3YjM2YjYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0RyYWdB
bmREcm9wSGVscGVyLmgiCi0KLSNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKLSNp
bmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBEcm9wcGluZ0Nv
bnRleHQgewotICAgIERyb3BwaW5nQ29udGV4dChHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwg
Y29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotICAgICAgICA6IGdka0NvbnRleHQoZ2RrQ29udGV4
dCkKLSAgICAgICAgLCBkYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpKQotICAgICAg
ICAsIGxhc3RNb3Rpb25Qb3NpdGlvbihwb3NpdGlvbikKLSAgICAgICAgLCBkcm9wSGFwcGVuZWQo
ZmFsc2UpCi0gICAgICAgICwgZXhpdGVkQ2FsbGJhY2soMCkKLSAgICB7Ci0gICAgfQotCi0gICAg
R2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkRhdGFPYmpl
Y3RHdGs+IGRhdGFPYmplY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbGFzdE1vdGlvblBvc2l0
aW9uOwotICAgIGludCBwZW5kaW5nRGF0YVJlcXVlc3RzOwotICAgIGJvb2wgZHJvcEhhcHBlbmVk
OwotICAgIERyYWdFeGl0ZWRDYWxsYmFjayBleGl0ZWRDYWxsYmFjazsKLX07Ci0KLXR5cGVkZWYg
SGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+IERyb3BwaW5nQ29udGV4
dE1hcDsKLXR5cGVkZWYgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFJlZlB0cjxEYXRhT2JqZWN0
R3RrPiA+IERyYWdnaW5nRGF0YU9iamVjdHNNYXA7Ci0KLUd0a0RyYWdBbmREcm9wSGVscGVyOjp+
R3RrRHJhZ0FuZERyb3BIZWxwZXIoKQotewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Ryb3BwaW5n
Q29udGV4dHMpOwotfQotCi1ib29sIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRW5k
KEdka0RyYWdDb250ZXh0KiBkcmFnQ29udGV4dCkKLXsKLSAgICBEcmFnZ2luZ0RhdGFPYmplY3Rz
TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGRyYWdD
b250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmVuZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RyYWdnaW5nRGF0YU9iamVjdHMucmVt
b3ZlKGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHdGtEcmFnQW5kRHJv
cEhlbHBlcjo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1Nl
bGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8pCi17Ci0gICAgRHJhZ2dpbmdE
YXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0YU9iamVjdHMu
ZmluZChjb250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0RhdGFPYmplY3Rz
LmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywg
aXRlcmF0b3ItPnZhbHVlLmdldCgpKTsKLX0KLQotc3RydWN0IEhhbmRsZURyYWdMYXRlckRhdGEg
ewotICAgIERyb3BwaW5nQ29udGV4dCogY29udGV4dDsKLSAgICBHdGtEcmFnQW5kRHJvcEhlbHBl
ciogZ2x1ZTsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbiBoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxi
YWNrKEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEpCi17Ci0gICAgZGF0YS0+Z2x1ZS0+aGFuZGxl
RHJhZ0xlYXZlTGF0ZXIoZGF0YS0+Y29udGV4dCk7Ci0gICAgZGVsZXRlIGRhdGE7Ci0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVh
dmVMYXRlcihEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0
TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQt
Pmdka0NvbnRleHQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5k
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSB2aWV3IGRvZXNuJ3Qga25vdyBh
Ym91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRhdGEpCi0gICAgLy8g
cmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFn
LgotICAgIGlmIChjb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBjb250ZXh0LT5sYXN0TW90aW9uUG9z
aXRpb247Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoY29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwg
cG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgY29udmVydFdpZGdldFBvaW50VG9TY3Jl
ZW5Qb2ludChtX3dpZGdldCwgcG9zaXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgIERyYWdP
cGVyYXRpb25Ob25lKTsKLSAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dpZGdldCwgJmRy
YWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOwotCi0gICAgbV9kcm9wcGluZ0NvbnRleHRz
LnJlbW92ZShpdGVyYXRvcik7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci19Ci0KLXZvaWQgR3RrRHJh
Z0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4
dCwgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrKQotewotICAgIERyb3BwaW5nQ29u
dGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChnZGtD
b250ZXh0KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEg
ZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZwotICAgIC8vIHRoZSBkcmFnLWRy
b3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBh
ZnRlcgotICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFw
cGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCi0gICAgSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSA9
IG5ldyBIYW5kbGVEcmFnTGF0ZXJEYXRhOwotICAgIGRhdGEtPmNvbnRleHQgPSBpdGVyYXRvci0+
dmFsdWU7Ci0gICAgZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFj
azsKLSAgICBkYXRhLT5nbHVlID0gdGhpczsKLSAgICBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2spLCBkYXRh
KTsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoRHJvcHBpbmdDb250
ZXh0KiBkcm9wQ29udGV4dCwgR3RrV2lkZ2V0KiB3aWRnZXQsIGd1aW50IHRpbWUpCi17Ci0gICAg
R2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQgPSBkcm9wQ29udGV4dC0+Z2RrQ29udGV4dDsKLSAg
ICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVm
YXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZHJvcEF0b21zRm9yQ29udGV4dCh3aWRnZXQsIGdka0Nv
bnRleHQpKTsKLSAgICBkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFi
bGVUYXJnZXRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjY2VwdGFibGVU
YXJnZXRzLnNpemUoKTsgaSsrKQotICAgICAgICBndGtfZHJhZ19nZXRfZGF0YSh3aWRnZXQsIGdk
a0NvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0aW1lKTsKLX0KLQotRGF0YU9iamVj
dEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKLXsK
LSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IDA7Ci0gICAgRHJvcHBpbmdD
b250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNv
bnRleHQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpIHsK
LSAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gbmV3IERyb3BwaW5nQ29udGV4dChjb250ZXh0LCBw
b3NpdGlvbik7Ci0gICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJvcHBp
bmdDb250ZXh0KTsKLSAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250
ZXh0LCBtX3dpZGdldCwgdGltZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHJvcHBpbmdDb250
ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rp
b25Qb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIH0KLQotICAgIC8vIERvbid0IHNlbmQgYW55IGRy
YWcgaW5mb3JtYXRpb24gdG8gV2ViQ29yZSB1bnRpbCB3ZSd2ZSByZXRyaWV2ZWQgYWxsCi0gICAg
Ly8gdGhlIGRhdGEgZm9yIHRoaXMgZHJhZyBvcGVyYXRpb24uIE90aGVyd2lzZSB3ZSdkIGhhdmUg
dG8gYmxvY2sgdG8gd2FpdAotICAgIC8vIGZvciB0aGUgZHJhZydzIGRhdGEuCi0gICAgQVNTRVJU
KGRyb3BwaW5nQ29udGV4dCk7Ci0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFS
ZXF1ZXN0cyA+IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29u
dGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKLX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERy
b3BIZWxwZXI6OmhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8sIEludFBvaW50
JiBwb3NpdGlvbikKLXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9y
ID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09
IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBEcm9w
cGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBkcm9w
cGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKLSAgICBQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShz
ZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwot
Ci0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIGRyYWctZGF0YS1y
ZWNlaXZlZCBzaWduYWwgYXJlIHNvbWV0aW1lcwotICAgIC8vIGluYWNjdXJhdGUgaW4gRFJULCBz
byB1c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBldmVudC4KLSAgICBwb3Np
dGlvbiA9IGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOwotCi0gICAgLy8gSWYg
dGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1ZXN0cywgc3RhcnQgc2VuZGluZyBkcmFnZ2lu
ZyBkYXRhIHRvIFdlYkNvcmUuCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVj
dC5nZXQoKTsKLX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRs
ZURyYWdEcm9wKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIERyb3BwaW5nQ29udGV4
dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0
KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRl
cmF0b3ItPnZhbHVlOwotICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsK
LQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Ci19Ci0KLXZv
aWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OnN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiBjb250
ZXh0LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAgIG1fZHJhZ2dpbmdEYXRhT2Jq
ZWN0cy5zZXQoY29udGV4dCwgZGF0YU9iamVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGIwMmM0YjdhM2Y4NzMwMTM1
Y2RmNjE2NGFlMDY5ZmFlM2Q1OTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lm
bmRlZiBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCi0jZGVmaW5lIEd0a0RyYWdBbmREcm9wSGVscGVy
X2gKLQotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9j
QmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRHJvcHBpbmdDb250
ZXh0OwotY2xhc3MgRHJhZ0RhdGE7Ci0KLXR5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFj
aykoR3RrV2lkZ2V0KiwgRHJhZ0RhdGEqLCBib29sIGRyb3BIYXBwZW5lZCk7Ci0KLWNsYXNzIEd0
a0RyYWdBbmREcm9wSGVscGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5k
RHJvcEhlbHBlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAg
ICBHdGtEcmFnQW5kRHJvcEhlbHBlcigpCi0gICAgICAgIDogbV93aWRnZXQoMCkKLSAgICB7Ci0g
ICAgfQotICAgIH5HdGtEcmFnQW5kRHJvcEhlbHBlcigpOwotCi0gICAgdm9pZCBzZXRXaWRnZXQo
R3RrV2lkZ2V0KiB3aWRnZXQpIHsgbV93aWRnZXQgPSB3aWRnZXQ7IH0KLSAgICBib29sIGhhbmRs
ZURyYWdFbmQoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIGhhbmRsZUdldERyYWdEYXRhKEdk
a0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50IGluZm8pOwotICAgIHZvaWQg
aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiwgRHJhZ0V4aXRlZENhbGxiYWNrKTsKLSAg
ICB2b2lkIGhhbmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCopOwotICAgIERhdGFP
YmplY3RHdGsqIGhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2lu
dCYsIHVuc2lnbmVkIHRpbWUpOwotICAgIERhdGFPYmplY3RHdGsqIGhhbmRsZURyYWdEYXRhUmVj
ZWl2ZWQoR2RrRHJhZ0NvbnRleHQqLCBHdGtTZWxlY3Rpb25EYXRhKiwgdW5zaWduZWQgaW5mbywg
SW50UG9pbnQmKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29u
dGV4dCopOwotICAgIHZvaWQgc3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRleHQqLCBEYXRhT2JqZWN0
R3RrKik7Ci0KLXByaXZhdGU6Ci0gICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKLSAgICBIYXNoTWFw
PEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gbV9kcm9wcGluZ0NvbnRleHRzOwot
ICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBtX2Ry
YWdnaW5nRGF0YU9iamVjdHM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBEYXRhT2JqZWN0R3RrX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZp
bHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTk4MGI1NDZhMmE0OWM2NDYw
NTQ1MTE1ZTA0NmExMzY1YmM0MjNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZp
bHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtJbnB1dE1ldGhvZEZpbHRlci5oIgot
Ci0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNp
bmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi0vLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBrZXkgZXZl
bnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bwotLy8gZW1pdCB0aGlz
IGNvZGUgZm9yIHdlYiBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRzIHRyaWdn
ZXIKLS8vIGNvbXBvc2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1aXZhbGVu
dCwgc28gd2Ugc2VuZCBWb2lkU3ltYm9sCi0vLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3JtS2V5
RXZlbnQga25vd3MgdG8gY29udmVydCB0aGlzIGNvZGUgaW50bwotLy8gVktfUFJPQ0VTU0tFWS4K
LWNvbnN0IGludCBnQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtfS0VZX1ZvaWRTeW1ib2w7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0Q2FsbGJh
Y2soR3RrSU1Db250ZXh0KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcsIEd0a0lucHV0
TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5kbGVDb21taXQoY29tcG9z
aXRpb25TdHJpbmcpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFj
ayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZp
bHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZVByZWVk
aXRDaGFuZ2VkQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZp
bHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1l
dGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgpOwot
fQotCi1zdGF0aWMgdm9pZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIEdka1dpbmRvdyogd2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7Ci0gICAgQVNTRVJUKHdpbmRvdyk7Ci0gICAg
Z3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5jb250ZXh0KCksIHdpbmRv
dyk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHdGtXaWRnZXQq
IHdpZGdldCkKLXsKLSAgICBBU1NFUlQoIW1fd2lkZ2V0KTsKLQotICAgIG1fd2lkZ2V0ID0gd2lk
Z2V0OwotICAgIGlmIChndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRnZXQpKQotICAgICAgICBo
YW5kbGVXaWRnZXRSZWFsaXplKG1fd2lkZ2V0LCB0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0soaGFuZGxl
V2lkZ2V0UmVhbGl6ZSksIHRoaXMpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpz
ZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGN1cnNvclJlY3QpCi17Ci0gICAgLy8gRG9uJ3Qg
bW92ZSB0aGUgd2luZG93IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1vcmUgdGhh
biAxMAotICAgIC8vIHBpeGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0aGUgd2lu
ZG93IGZsYXNoIGR1cmluZyBtaW5vcgotICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4KLSAgICBz
dGF0aWMgY29uc3QgaW50IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsKLSAgICBp
ZiAoY3Vyc29yUmVjdC5sb2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9sYXN0Q2Fy
ZUxvY2F0aW9uKSA8IHdpbmRvd01vdmVtZW50VGhyZXNob2xkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2xhc3RDYXJlTG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7Ci0gICAgSW50
UmVjdCB0cmFuc2xhdGVkUmVjdCA9IGN1cnNvclJlY3Q7Ci0KLSAgICBBU1NFUlQobV93aWRnZXQp
OwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxv
Y2F0aW9uKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0gICAgdHJhbnNsYXRlZFJlY3QubW92ZShh
bGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ3Vyc29y
UmVjdCA9IGN1cnNvclJlY3Q7Ci0gICAgZ3RrX2ltX2NvbnRleHRfc2V0X2N1cnNvcl9sb2NhdGlv
bihtX2NvbnRleHQuZ2V0KCksICZnZGtDdXJzb3JSZWN0KTsKLX0KLQotR3RrSW5wdXRNZXRob2RG
aWx0ZXI6Okd0a0lucHV0TWV0aG9kRmlsdGVyKCkKLSAgICA6IG1fY3Vyc29yT2Zmc2V0KDApCi0g
ICAgLCBtX2NvbnRleHQoYWRvcHRHUmVmKGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCkpKQotICAg
ICwgbV93aWRnZXQoMCkKLSAgICAsIG1fZW5hYmxlZChmYWxzZSkKLSAgICAsIG1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseShmYWxzZSkKLSAgICAsIG1fZmlsdGVyaW5nS2V5RXZlbnQoZmFsc2UpCi0g
ICAgLCBtX3ByZWVkaXRDaGFuZ2VkKGZhbHNlKQotICAgICwgbV9wcmV2ZW50TmV4dENvbW1pdChm
YWxzZSkKLSAgICAsIG1fanVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCi0gICAgLCBtX2xhc3RGaWx0
ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lkU3ltYm9sKQotewotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19DQUxMQkFDSyho
YW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250
ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdFN0YXJ0
Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwg
InByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRp
dC1lbmQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOwotfQot
Ci1HdGtJbnB1dE1ldGhvZEZpbHRlcjo6fkd0a0lucHV0TWV0aG9kRmlsdGVyKCkKLXsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOwotICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQu
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayks
IHRoaXMpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3dpZGdl
dCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOwot
fQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkK
LXsKLSAgICBtX2VuYWJsZWQgPSBlbmFibGVkOwotICAgIGlmIChlbmFibGVkKQotICAgICAgICBn
dGtfaW1fY29udGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KLWJvb2wg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkK
LXsKLSAgICBpZiAoIWNhbkVkaXQoKSB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm4gc2Vu
ZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKLQotICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsK
LSAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIGludCBsYXN0
RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVz
c0NvZGVXaXRoTm9SZXN1bHRzOwotICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5v
UmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKLQotICAgIGJvb2wgZmlsdGVyZWQgPSBndGtf
aW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7Ci0gICAg
bV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOwotCi0gICAgYm9vbCBqdXN0U2VudEZha2VLZXlV
cCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7Ci0gICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNl
OwotICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JF
TEVBU0UpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gU2ltcGxlIGlucHV0IG1ldGhv
ZHMgd29yayBzdWNoIHRoYXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZQotICAgIC8v
IGNvbW1pdCBzaWduYWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25zIGFuZCB0cmVhdCB0aGVt
IGFzIG5vcm1hbAotICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0IHN0cmlu
ZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KLSAgICBpZiAoZmlsdGVyZWQgJiYgIW1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uLmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kU2ltcGxlS2V5
RXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwotICAgICAgICBtX2NvbmZpcm1l
ZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
Ci0gICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1MpIHsKLSAg
ICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRydWU7Ci0g
ICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBldmVu
dC0+a2V5dmFsOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBib29sIHJlc3VsdCA9IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoZXZlbnQp
OwotICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICAgICAgICAgIG1f
Y29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZmlsdGVyZWQgYSBr
ZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3VwcHJlc3MKLSAgICAv
LyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9pZCBjb25mdXNpbmcg
dGhlIHdlYiBjb250ZW50LgotICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0Ug
JiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBldmVudC0+a2V5dmFs
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBrZXlzdHJv
a2Ugd2FzIGVpdGhlcjoKLSAgICAvLyAxLiBVbmZpbHRlcmVkCi0gICAgLy8gMi4gQSBmaWx0ZXJl
ZCBrZXl1cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRvZXNuJ3QK
LSAgICAvLyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBjb21wb3Np
dGlvbiByZXN1bHRzIGJlZm9yZQotICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCi0gICAgLy8gQm90
aCBtaWdodCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgotICAgIC8vCi0gICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUgdGhl
IGV2ZW50Ci0gICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0IHdheS4g
Rm9yIGV4YW1wbGUgKHRha2VuIGZyb20KLSAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNlKSwgdGhl
IGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKLSAgICAvLyB3aGVu
IHlvdSBwcmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgotICAgIC8vICAxLiBrZXlkb3duICdh
JyAoZmlsdGVyZWQpCi0gICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKLSAgICAvLyAg
My4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQotICAgIC8vICA0LiBrZXlkb3duIEJhY2tzcGFjZSAo
dW5maWx0ZXJlZCkKLSAgICAvLyAgNS4gY29tbWl0ICJhIgotICAgIC8vICA2LiBwcmVlZGl0IGVu
ZAotICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIGNv
bmZpcm1Db21wb3NpdGlvbigpOwotICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQotICAgICAgICB1
cGRhdGVQcmVlZGl0KCk7Ci0gICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7Ci19
Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKQot
ewotICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEgc2VsZWN0
aW9uIGNoYW5nZSwgd2hpY2gKLSAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53YW50ZWQg
YWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVudAotICAgIC8vIHRoYXQgYnkgc2V0
dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCi0gICAgaWYgKG1fY29tcG9z
aW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOwot
ICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgIGNhbmNlbENvbnRleHRD
b21wb3NpdGlvbigpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNldENvbnRl
eHQoKQotewotCi0gICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJDb3JlIGNv
bXBvc2l0aW9uIGhlcmUsIGluIGNhc2UgdGhlCi0gICAgLy8gY29tcG9zaXRpb24gd2FzIHNldCBv
dXRzaWRlIHRoZSBHVEsrIElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgotICAgIC8vIGluc3Rh
bmNlKSBhbmQgd2UgYXJlbid0IHRyYWNraW5nIGl0LgotICAgIGNhbmNlbEN1cnJlbnRDb21wb3Np
dGlvbigpOwotCi0gICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICBjYW5jZWxD
b250ZXh0Q29tcG9zaXRpb24oKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6Y2Fu
Y2VsQ29udGV4dENvbXBvc2l0aW9uKCkKLXsKLSAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gIW1f
cHJlZWRpdC5pc0VtcHR5KCk7Ci0KLSAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2NvbnRleHQu
Z2V0KCkpOwotCi0gICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgbV9q
dXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOwotICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOwotICAg
IG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1l
dGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZEluKCkKLXsKLSAgICBtX2VuYWJsZWQgPSB0cnVlOwot
ICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQotewotICAgIGlmICghbV9l
bmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb21wb3NpbmdUZXh0Q3VycmVu
dGx5KQotICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7Ci0gICAgY2FuY2VsQ29u
dGV4dENvbXBvc2l0aW9uKCk7Ci0gICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4
dC5nZXQoKSk7Ci0gICAgbV9lbmFibGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCi17Ci0gICAgY29uZmlybUNvbXBvc2l0aW9u
VGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9u
ID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVk
aXQoKQotewotICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7Ci0gICAg
bV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVy
OjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2Vu
ZCByZXN1bHRzVG9TZW5kKQotewotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoR0RLX0tFWV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5U
X1RJTUU7Ci0gICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNvZGU7
Ci0gICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwgcmVz
dWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7Ci0KLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0g
U3RyaW5nKCk7Ci0gICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikKLSAgICAgICAg
bV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0KLSAgICBldmVudC0+dHlwZSA9IEdE
S19LRVlfUkVMRUFTRTsKLSAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXksIFN0cmlu
ZygpLCBFdmVudEZha2VkKTsKLSAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gdHJ1ZTsKLX0KLQot
dm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNvbXBv
c2l0aW9uU3RyaW5nKQotewotICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7Ci0gICAgICAg
IG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5nKSk7Ci0K
LSAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtleSBldmVu
dCwganVzdCBzZW5kCi0gICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBoYW5kbGlu
ZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCi0gICAgLy8gbGF0ZXIgaG93IHRvIGhhbmRsZSB0
aGlzLgotICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAgc2VuZENvbXBvc2l0
aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKLX0KLQotdm9pZCBH
dGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKLXsKLSAgICBpZiAobV9w
cmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9w
cmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0gICAgbV9wcmVlZGl0ID0gIiI7Ci19Ci0KLXZvaWQgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIW1f
ZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRp
dDsKLSAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0LmdldCgp
LCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKLQotICAgIGlmICht
X3ByZXZlbnROZXh0Q29tbWl0KSB7Ci0gICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRpdC5nZXQo
KSkgPiAwKQotICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wcmVlZGl0ID0gU3Ry
aW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKLSAgICBtX2N1cnNvck9mZnNldCA9IHN0
ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50PihtX3By
ZWVkaXQubGVuZ3RoKCkpKTsKLQotICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9ICFtX3By
ZWVkaXQuaXNFbXB0eSgpOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOwotCi0gICAgaWYg
KCFtX2ZpbHRlcmluZ0tleUV2ZW50KQotICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0
V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0
ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQotewotICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8
ICFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJlZWRpdCA9IFN0cmluZygp
OwotICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsK
LQotICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAgdXBkYXRlUHJlZWRpdCgp
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5w
dXRNZXRob2RGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTQ4MjUzNDg4ZDEw
NGU4NTQzYmEwZjEyOGFhNjMzNDFlY2E3YjY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1l
dGhvZEZpbHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0a0lucHV0TWV0aG9kRmlsdGVyX2gK
LSNkZWZpbmUgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAotCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HdGtJTUNvbnRleHQgR3Rr
SU1Db250ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3RrSW5wdXRNZXRob2RGaWx0ZXIgewotcHVibGljOgot
ICAgIEd0a0lucHV0TWV0aG9kRmlsdGVyKCk7Ci0gICAgfkd0a0lucHV0TWV0aG9kRmlsdGVyKCk7
Ci0KLSAgICBib29sIGZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5Kik7Ci0gICAgdm9pZCBub3Rp
ZnlNb3VzZUJ1dHRvblByZXNzKCk7Ci0gICAgdm9pZCBub3RpZnlGb2N1c2VkSW4oKTsKLSAgICB2
b2lkIG5vdGlmeUZvY3VzZWRPdXQoKTsKLSAgICB2b2lkIHJlc2V0Q29udGV4dCgpOwotICAgIHZv
aWQgc2V0RW5hYmxlZChib29sKTsKLQotICAgIHZvaWQgaGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIq
IGNvbXBvc2l0aW9uU3RyaW5nKTsKLSAgICB2b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Ci0g
ICAgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnQoKTsKLSAgICB2b2lkIGhhbmRsZVByZWVkaXRFbmQo
KTsKLQotICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgdm9pZCBjYW5jZWxDb250
ZXh0Q29tcG9zaXRpb24oKTsKLSAgICB2b2lkIHVwZGF0ZVByZWVkaXQoKTsKLSAgICB2b2lkIHNl
dEN1cnNvclJlY3QoY29uc3QgSW50UmVjdCYgbG9jYXRpb24pOwotCi0gICAgR3RrSU1Db250ZXh0
KiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBlbnVtIEV2ZW50
RmFrZWRGb3JDb21wb3NpdGlvbiB7Ci0gICAgICAgIEV2ZW50RmFrZWQsCi0gICAgICAgIEV2ZW50
Tm90RmFrZWQKLSAgICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBSZXN1bHRzVG9TZW5kIHsK
LSAgICAgICAgUHJlZWRpdCA9IDEgPDwgMSwKLSAgICAgICAgQ29tcG9zaXRpb24gPSAxIDw8IDIs
Ci0gICAgICAgIFByZWVkaXRBbmRDb21wb3NpdGlvbiA9IFByZWVkaXQgKyBDb21wb3NpdGlvbgot
ICAgIH07Ci0KLSAgICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgY2FuRWRpdCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdk
a0V2ZW50S2V5KiwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcgPSBTdHJpbmcoKSwgRXZlbnRGYWtl
ZEZvckNvbXBvc2l0aW9uID0gRXZlbnROb3RGYWtlZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBz
ZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVzdWx0c1Rv
U2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uID0g
RXZlbnROb3RGYWtlZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25U
ZXh0KFN0cmluZyBjb21wb3NpdGlvbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ3Vy
cmVudENvbXBvc2l0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29t
cG9zaXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWVkaXQoU3RyaW5nLCBpbnQg
Y3Vyc29yT2Zmc2V0KSA9IDA7Ci0KLSAgICBXVEY6OlN0cmluZyBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uOwotICAgIFdURjo6U3RyaW5nIG1fcHJlZWRpdDsKLSAgICBpbnQgbV9jdXJzb3JPZmZzZXQ7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VL
ZXlFdmVudHMoUmVzdWx0c1RvU2VuZCk7Ci0KLSAgICBHUmVmUHRyPEd0a0lNQ29udGV4dD4gbV9j
b250ZXh0OwotICAgIEd0a1dpZGdldCogbV93aWRnZXQ7Ci0gICAgYm9vbCBtX2VuYWJsZWQ7Ci0g
ICAgYm9vbCBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHk7Ci0gICAgYm9vbCBtX2ZpbHRlcmluZ0tl
eUV2ZW50OwotICAgIGJvb2wgbV9wcmVlZGl0Q2hhbmdlZDsKLSAgICBib29sIG1fcHJldmVudE5l
eHRDb21taXQ7Ci0gICAgYm9vbCBtX2p1c3RTZW50RmFrZUtleVVwOwotICAgIHVuc2lnbmVkIGlu
dCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHM7Ci0gICAgSW50UG9pbnQg
bV9sYXN0Q2FyZUxvY2F0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gR3RrSW5wdXRNZXRob2RGaWx0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGNmMWI2ODBkYmFiYTM2MWZkMWM1MDNkNGI2NmZjOWExYTljZTI5OS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrUGx1Z2luV2lkZ2V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ikd0a1BsdWdpbldpZGdldC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLQotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HdGtQbHVnaW5XaWRnZXQ6
Okd0a1BsdWdpbldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLSAgICA6IFdpZGdldCh3aWRnZXQp
Ci17Ci0gICAgZ3RrX3dpZGdldF9oaWRlKHdpZGdldCk7Ci19Ci0KLUd0a1BsdWdpbldpZGdldDo6
fkd0a1BsdWdpbldpZGdldCgpCi17Ci0gICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRB
SU5FUihndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZvcm1XaWRnZXQoKSkpLCBwbGF0Zm9ybVdp
ZGdldCgpKTsKLX0KLQotdm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIGNvcmVSZWN0KQotewotICAgIC8qIG5vIG5lZWQgdG8gKi8KLSAgICBpZiAoIWd0
a193aWRnZXRfZ2V0X2hhc193aW5kb3cocGxhdGZvcm1XaWRnZXQoKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHBsYXRm
b3JtV2lkZ2V0KCkpOwotICAgIGlmICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
ZGtSZWN0YW5nbGUgcmVjdCA9IGNvcmVSZWN0OwotICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9y
ZWN0KHdpbmRvdywgJnJlY3QsIEZBTFNFKTsKLX0KLQotdm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmZy
YW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZVJlY3QoKTsKLSAg
ICBJbnRQb2ludCBsb2MgPSBwYXJlbnQoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9u
KCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07Ci0KLSAgICBndGtfd2lkZ2V0X3NldF9zaXpl
X3JlcXVlc3QocGxhdGZvcm1XaWRnZXQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
LSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1XaWRnZXQoKSwgJmFsbG9jYXRp
b24pOwotICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3MzczZWM1OTBiMmYyMjFlM2JiOTgxN2QwZDMzN2VlMWY0MzNk
NzkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHdGtQ
bHVnaW5XaWRnZXRfaAotI2RlZmluZSBHdGtQbHVnaW5XaWRnZXRfaAotCi0jaW5jbHVkZSAiV2lk
Z2V0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBHdGtQbHVnaW5XaWRnZXQg
OiBwdWJsaWMgV2lkZ2V0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEd0a1BsdWdpbldpZGdldChH
dGtXaWRnZXQqKTsKLSAgICAgICAgdmlydHVhbCB+R3RrUGx1Z2luV2lkZ2V0KCk7Ci0gICAgICAg
IHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2b2lkIGZyYW1l
UmVjdHNDaGFuZ2VkKCk7Ci0gICAgfTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2ZjU3YTE3ZGMzMjNiY2Y3YjM1N2IyNzdmMDgwYWRlZjA5MTM1MmY3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtQb3B1cE1lbnUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBm
b3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiR3RrUG9wdXBNZW51LmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0j
aW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNv
bnN0IHVpbnQzMl90IGdTZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwotCi1HdGtQb3B1cE1lbnU6Okd0
a1BvcHVwTWVudSgpCi0gICAgOiBtX3BvcHVwKGd0a19tZW51X25ldygpKQotICAgICwgbV9wcmV2
aW91c0tleUV2ZW50Q2hhcmFjdGVyKDApCi0gICAgLCBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0
ZW0oMCkKLXsKLSAgICBtX2tleVByZXNzSGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3Bv
cHVwLmdldCgpLCAia2V5LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6Omtl
eVByZXNzRXZlbnRDYWxsYmFjayksIHRoaXMpOwotfQotCi1HdGtQb3B1cE1lbnU6On5HdGtQb3B1
cE1lbnUoKQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3BvcHVwLmdldCgp
LCBtX2tleVByZXNzSGFuZGxlcklEKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OmNsZWFyKCkK
LXsKLSAgICBndGtfY29udGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgp
KSwgcmVpbnRlcnByZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsK
LX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OmFwcGVuZFNlcGFyYXRvcigpCi17Ci0gICAgR3RrV2lk
Z2V0KiBtZW51SXRlbSA9IGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpOwotICAgIGd0a19t
ZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgbWVudUl0ZW0p
OwotICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51
OjphcHBlbmRJdGVtKEd0a0FjdGlvbiogYWN0aW9uKQotewotICAgIEd0a1dpZGdldCogbWVudUl0
ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKTsKLSAgICBndGtfd2lkZ2V0
X3NldF90b29sdGlwX3RleHQobWVudUl0ZW0sIGd0a19hY3Rpb25fZ2V0X3Rvb2x0aXAoYWN0aW9u
KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtZW51SXRlbSwgInNlbGVjdCIsIEdfQ0FMTEJBQ0so
R3RrUG9wdXBNZW51OjpzZWxlY3RJdGVtQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBndGtfbWVudV9z
aGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKLQot
ICAgIGlmIChndGtfYWN0aW9uX2lzX3Zpc2libGUoYWN0aW9uKSkKLSAgICAgICAgZ3RrX3dpZGdl
dF9zaG93KG1lbnVJdGVtKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OnBvcFVwKGNvbnN0IElu
dFNpemUmIG1lbnVTaXplLCBjb25zdCBJbnRQb2ludCYgbWVudVBvc2l0aW9uLCBpbnQgaXRlbUNv
dW50LCBpbnQgc2VsZWN0ZWRJdGVtLCBjb25zdCBHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgcmVz
ZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAgICBtX21lbnVQb3NpdGlvbiA9IG1lbnVQb3NpdGlv
bjsKLSAgICBndGtfbWVudV9zZXRfYWN0aXZlKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBzZWxl
Y3RlZEl0ZW0pOwotCi0gICAgLy8gVGhpcyBhcHByb2FjaCBmb2xsb3dzIHRoZSBvbmUgaW4gZ3Rr
Y29tYm9ib3guYy4KLSAgICBHdGtSZXF1aXNpdGlvbiByZXF1aXNpdGlvbjsKLSAgICBndGtfd2lk
Z2V0X3NldF9zaXplX3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgLTEsIC0xKTsKLSNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCks
ICZyZXF1aXNpdGlvbik7Ci0jZWxzZQotICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXpl
KG1fcG9wdXAuZ2V0KCksICZyZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYKLQotICAgIGd0a193aWRn
ZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCBzdGQ6Om1heChtZW51U2l6ZS53aWR0
aCgpLCByZXF1aXNpdGlvbi53aWR0aCksIC0xKTsKLQotICAgIEdMaXN0KiBjaGlsZHJlbiA9IGd0
a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSkpOwot
ICAgIEdMaXN0KiBwID0gY2hpbGRyZW47Ci0gICAgaWYgKGl0ZW1Db3VudCkgewotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGl0ZW1Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSA+
IHNlbGVjdGVkSXRlbSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgR3Rr
V2lkZ2V0KiBpdGVtID0gcmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQqPihwLT5kYXRhKTsKLSAg
ICAgICAgICAgIEd0a1JlcXVpc2l0aW9uIGl0ZW1SZXF1aXNpdGlvbjsKLSNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgotICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfY2hpbGRfcmVxdWlzaXRpb24o
aXRlbSwgJml0ZW1SZXF1aXNpdGlvbik7Ci0jZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9n
ZXRfcHJlZmVycmVkX3NpemUoaXRlbSwgJml0ZW1SZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gaXRlbVJl
cXVpc2l0aW9uLmhlaWdodCk7Ci0KLSAgICAgICAgICAgIHAgPSBnX2xpc3RfbmV4dChwKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENlbnRlciB2ZXJ0aWNhbGx5IHRoZSBl
bXB0eSBwb3B1cCBpbiB0aGUgY29tYm8gYm94IGFyZWEuCi0gICAgICAgIG1fbWVudVBvc2l0aW9u
LnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gbWVudVNpemUuaGVpZ2h0KCkgLyAyKTsKLSAgICB9
Ci0gICAgZ19saXN0X2ZyZWUoY2hpbGRyZW4pOwotCi0gICAgZ3VpbnQgYnV0dG9uOwotICAgIGd1
aW50MzIgYWN0aXZhdGVUaW1lOwotICAgIGlmIChldmVudCkgewotICAgICAgICBidXR0b24gPSBl
dmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTID8gZXZlbnQtPmJ1dHRvbi5idXR0b24gOiAx
OwotICAgICAgICBhY3RpdmF0ZVRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGJ1dHRvbiA9IDE7Ci0gICAgICAgIGFjdGl2YXRlVGltZSA9IEdE
S19DVVJSRU5UX1RJTUU7Ci0gICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBn
dGtfbWVudV9wb3B1cChHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgMCwgMCwgcmVpbnRlcnByZXRf
Y2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIGJ1
dHRvbiwgYWN0aXZhdGVUaW1lKTsKLSNlbHNlCi0gICAgZ3RrX21lbnVfcG9wdXBfZm9yX2Rldmlj
ZShHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgZXZlbnQgPyBnZGtfZXZlbnRfZ2V0X2RldmljZShl
dmVudCkgOiAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHdGtNZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMs
IDAsIGJ1dHRvbiwgYWN0aXZhdGVUaW1lKTsKLSNlbmRpZgotfQotCi12b2lkIEd0a1BvcHVwTWVu
dTo6cG9wRG93bigpCi17Ci0gICAgZ3RrX21lbnVfcG9wZG93bihHVEtfTUVOVShtX3BvcHVwLmdl
dCgpKSk7Ci0gICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLX0KLQotdm9pZCBHdGtQb3B1
cE1lbnU6Om1lbnVSZW1vdmVJdGVtKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtQb3B1cE1lbnUqIHBv
cHVwTWVudSkKLXsKLSAgICBBU1NFUlQocG9wdXBNZW51LT5tX3BvcHVwKTsKLSAgICBndGtfY29u
dGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBvcHVwTWVudS0+bV9wb3B1cC5nZXQoKSksIHdp
ZGdldCk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjptZW51UG9zaXRpb25GdW5jdGlvbihHdGtN
ZW51KiwgZ2ludCogeCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgR3RrUG9wdXBNZW51KiBw
b3B1cE1lbnUpCi17Ci0gICAgKnggPSBwb3B1cE1lbnUtPm1fbWVudVBvc2l0aW9uLngoKTsKLSAg
ICAqeSA9IHBvcHVwTWVudS0+bV9tZW51UG9zaXRpb24ueSgpOwotICAgICpwdXNoSW4gPSB0cnVl
OwotfQotCi12b2lkIEd0a1BvcHVwTWVudTo6cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKQotewot
ICAgIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7Ci0gICAgbV9wcmV2aW91c0tleUV2
ZW50Q2hhcmFjdGVyID0gMDsKLSAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSAiIjsKLX0KLQot
Ym9vbCBHdGtQb3B1cE1lbnU6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewot
ICAgIC8vIElmIHdlIHdlcmUgZ2l2ZW4gYSBub24tcHJpbnRhYmxlIGNoYXJhY3RlciBqdXN0IHNr
aXAgaXQuCi0gICAgZ3VuaWNoYXIgdW5pY29kZUNoYXJhY3RlciA9IGdka19rZXl2YWxfdG9fdW5p
Y29kZShldmVudC0+a2V5dmFsKTsKLSAgICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50KHVuaWNvZGVD
aGFyYWN0ZXIpKSB7Ci0gICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBnbG9uZyBjaGFyYWN0ZXJzV3JpdHRlbjsKLSAg
ICBHT3duUHRyPGd1bmljaGFyMj4gdXRmMTZTdHJpbmcoZ191Y3M0X3RvX3V0ZjE2KCZ1bmljb2Rl
Q2hhcmFjdGVyLCAxLCAwLCAmY2hhcmFjdGVyc1dyaXR0ZW4sIDApKTsKLSAgICBpZiAoIXV0ZjE2
U3RyaW5nKSB7Ci0gICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzYW1l
IGFzIHRoZSBsYXN0IGNoYXJhY3RlciwgdGhlIHVzZXIgaXMgcHJvYmFibHkgdHJ5aW5nIHRvCi0g
ICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgbWVudWxpc3QgZW50cmllcy4gVGhpcyBtYXRjaGVzIHRo
ZSBXZWJDb3JlIGJlaGF2aW9yIGZvciBjb2xsYXBzZWQKLSAgICAvLyBtZW51bGlzdHMuCi0gICAg
Ym9vbCByZXBlYXRpbmdDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyICE9IG1fcHJldmlvdXNL
ZXlFdmVudENoYXJhY3RlcjsKLSAgICBpZiAoZXZlbnQtPnRpbWUgLSBtX3ByZXZpb3VzS2V5RXZl
bnRUaW1lc3RhbXAgPiBnU2VhcmNoVGltZW91dE1zKQotICAgICAgICBtX2N1cnJlbnRTZWFyY2hT
dHJpbmcgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdldCgp
KSwgY2hhcmFjdGVyc1dyaXR0ZW4pOwotICAgIGVsc2UgaWYgKHJlcGVhdGluZ0NoYXJhY3RlcikK
LSAgICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nLmFwcGVuZChTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVyc1dyaXR0ZW4pKTsKLQot
ICAgIG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcCA9IGV2ZW50LT50aW1lOwotICAgIG1fcHJl
dmlvdXNLZXlFdmVudENoYXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXI7Ci0KLSAgICAvLyBMaWtl
IHRoZSBDaHJvbWl1bSBwb3J0LCB3ZSBjYXNlIGZvbGQgYmVmb3JlIHNlYXJjaGluZywgYmVjYXVz
ZSAKLSAgICAvLyBzdHJuY21wIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgY2hhcmFjdGVycy4K
LSAgICBHT3duUHRyPGdjaGFyPiBzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZChnX3V0ZjhfY2Fz
ZWZvbGQobV9jdXJyZW50U2VhcmNoU3RyaW5nLnV0ZjgoKS5kYXRhKCksIC0xKSk7Ci0gICAgc2l6
ZV90IHByZWZpeExlbmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZC5nZXQo
KSk7Ci0KLSAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihH
VEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKLSAgICBpZiAoIWNoaWxkcmVuKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIGEgbWVudSBpdGVtIGhhcyBhbHJlYWR5IGJlZW4g
c2VsZWN0ZWQsIHN0YXJ0IHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50Ci0gICAgLy8gaXRlbSBk
b3duIHRoZSBsaXN0LiBUaGlzIHdpbGwgbWFrZSBtdWx0aXBsZSBrZXkgcHJlc3NlcyBvZiB0aGUg
c2FtZSBjaGFyYWN0ZXIKLSAgICAvLyBhZHZhbmNlIHRoZSBzZWxlY3Rpb24uCi0gICAgR0xpc3Qq
IGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOwotICAgIGlmIChtX2N1cnJlbnRseVNlbGVjdGVkTWVu
dUl0ZW0pIHsKLSAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X2ZpbmQoY2hpbGRyZW4sIG1f
Y3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSk7Ci0gICAgICAgIGlmICghY3VycmVudENoaWxkKSB7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSAwOwotICAgICAgICAg
ICAgY3VycmVudENoaWxkID0gY2hpbGRyZW47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBl
YXRpbmcgY2hhcmFjdGVycyBzaG91bGQgaXRlcmF0ZS4KLSAgICAgICAgaWYgKHJlcGVhdGluZ0No
YXJhY3RlcikgewotICAgICAgICAgICAgaWYgKEdMaXN0KiBuZXh0Q2hpbGQgPSBnX2xpc3RfbmV4
dChjdXJyZW50Q2hpbGQpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IG5leHRDaGls
ZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMaXN0KiBmaXJzdENoaWxkID0gY3VycmVudENo
aWxkOwotICAgIGRvIHsKLSAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X25leHQoY3VycmVu
dENoaWxkKTsKLSAgICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpCi0gICAgICAgICAgICBjdXJyZW50
Q2hpbGQgPSBjaGlsZHJlbjsKLQotICAgICAgICBHT3duUHRyPGdjaGFyPiBpdGVtVGV4dChnX3V0
ZjhfY2FzZWZvbGQoZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR1RLX01FTlVfSVRFTShjdXJyZW50
Q2hpbGQtPmRhdGEpKSwgLTEpKTsKLSAgICAgICAgaWYgKCFzdHJuY21wKHNlYXJjaFN0cmluZ1dp
dGhDYXNlRm9sZGVkLmdldCgpLCBpdGVtVGV4dC5nZXQoKSwgcHJlZml4TGVuZ3RoKSkgewotICAg
ICAgICAgICAgZ3RrX21lbnVfc2hlbGxfc2VsZWN0X2l0ZW0oR1RLX01FTlVfU0hFTEwobV9wb3B1
cC5nZXQoKSksIEdUS19XSURHRVQoY3VycmVudENoaWxkLT5kYXRhKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGN1cnJlbnRDaGlsZCAhPSBmaXJzdENoaWxk
KTsKLQotICAgIGdfbGlzdF9mcmVlKGNoaWxkcmVuKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayhHdGtNZW51SXRlbSogaXRlbSwg
R3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0gICAgcG9wdXBNZW51LT5tX2N1cnJlbnRseVNl
bGVjdGVkTWVudUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0pOwotfQotCi1nYm9vbGVhbiBHdGtQb3B1
cE1lbnU6OmtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRL
ZXkqIGV2ZW50LCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKLXsKLSAgICByZXR1cm4gcG9wdXBN
ZW51LT50eXBlQWhlYWRGaW5kKGV2ZW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3YzZhZDQ0ZjdkZDE2NjQwYzQyZjU5ZjJiYWIwNDBiMzZlZjgzNzMw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgR3RrUG9wdXBNZW51X2gKLSNkZWZpbmUgR3RrUG9wdXBNZW51X2gKLQotI2lu
Y2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIklu
dFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVu
dEtleTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtQb3B1cE1lbnUgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a1BvcHVwTWVudSk7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHdGtQb3B1cE1lbnU+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEd0a1BvcHVwTWVu
dSgpKTsKLSAgICB9Ci0KLSAgICB+R3RrUG9wdXBNZW51KCk7Ci0KLSAgICBHdGtXaWRnZXQqIHBs
YXRmb3JtTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7IH0KLSAgICB2b2lkIGNs
ZWFyKCk7Ci0gICAgdm9pZCBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICB2b2lkIGFwcGVuZEl0ZW0o
R3RrQWN0aW9uKik7Ci0gICAgdm9pZCBwb3BVcChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UG9p
bnQmLCBpbnQgaXRlbXNDb3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29uc3QgR2RrRXZlbnQqKTsK
LSAgICB2b2lkIHBvcERvd24oKTsKLQotcHJpdmF0ZToKLSAgICBHdGtQb3B1cE1lbnUoKTsKLQot
ICAgIHZvaWQgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAgICBib29sIHR5cGVBaGVhZEZp
bmQoR2RrRXZlbnRLZXkqKTsKLQotICAgIHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0
a01lbnVJdGVtKiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGljIHZvaWQgbWVudVBvc2l0aW9u
RnVuY3Rpb24oR3RrTWVudSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xlYW4qLCBHdGtQb3B1cE1lbnUq
KTsKLSAgICBzdGF0aWMgdm9pZCBtZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqLCBHdGtQb3B1cE1l
bnUqKTsKLSAgICBzdGF0aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qLCBH
dGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVudENhbGxiYWNr
KEd0a1dpZGdldCosIEdka0V2ZW50S2V5KiwgR3RrUG9wdXBNZW51Kik7Ci0KLSAgICBHUmVmUHRy
PEd0a1dpZGdldD4gbV9wb3B1cDsKLSAgICBJbnRQb2ludCBtX21lbnVQb3NpdGlvbjsKLSAgICBT
dHJpbmcgbV9jdXJyZW50U2VhcmNoU3RyaW5nOwotICAgIHVpbnQzMl90IG1fcHJldmlvdXNLZXlF
dmVudFRpbWVzdGFtcDsKLSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFj
dGVyOwotICAgIEd0a1dpZGdldCogbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtOwotICAgIHVu
c2lnbmVkIGludCBtX2tleVByZXNzSGFuZGxlcklEOwotfTsKLQotfQotCi0jZW5kaWYgLy8gR3Rr
UG9wdXBNZW51X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGI1YmEzNjI4NGQ4YzE3OWFkZjQx
Y2Q0NjIwZTM5ZGVkYTk4MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJ
Z2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiSW50UG9pbnQu
aCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UG9p
bnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqIHdpZGdldCwgY29u
c3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFjdHVhbGx5IGEg
dmVyeSB0cmlja3kgb3BlcmF0aW9uIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHNo
b3VsZAotICAgIC8vIG9ubHkgYmUgdGhvdWdodCBvZiBhcyBhIGd1ZXNzLiBGb3IgaW5zdGFuY2Us
IHNvbWV0aW1lcyBpdCBtYXkgbm90IGNvcnJlY3RseSB0YWtlIGludG8KLSAgICAvLyBhY2NvdW50
IHdpbmRvdyBkZWNvcmF0aW9ucy4KLQotICAgIEd0a1dpZGdldCogdG9wbGV2ZWxXaWRnZXQgPSBn
dGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIGlmICghdG9wbGV2ZWxXaWRnZXQg
fHwgIWd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWxXaWRnZXQpIHx8ICFHVEtfSVNfV0lO
RE9XKHRvcGxldmVsV2lkZ2V0KSkKLSAgICAgICAgcmV0dXJuIHBvaW50OwotCi0gICAgR2RrV2lu
ZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codG9wbGV2ZWxXaWRnZXQpOwot
ICAgIGlmICghZ2RrV2luZG93KQotICAgICAgICByZXR1cm4gcG9pbnQ7Ci0KLSAgICBpbnQgeElu
V2luZG93LCB5SW5XaW5kb3c7Ci0gICAgZ3RrX3dpZGdldF90cmFuc2xhdGVfY29vcmRpbmF0ZXMo
d2lkZ2V0LCB0b3BsZXZlbFdpZGdldCwgcG9pbnQueCgpLCBwb2ludC55KCksICZ4SW5XaW5kb3cs
ICZ5SW5XaW5kb3cpOwotCi0gICAgaW50IHdpbmRvd09yaWdpblgsIHdpbmRvd09yaWdpblk7Ci0g
ICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGdka1dpbmRvdywgJndpbmRvd09yaWdpblgsICZ3aW5k
b3dPcmlnaW5ZKTsKLQotICAgIHJldHVybiBJbnRQb2ludCh3aW5kb3dPcmlnaW5YICsgeEluV2lu
ZG93LCB3aW5kb3dPcmlnaW5ZICsgeUluV2luZG93KTsKLX0KLQotYm9vbCB3aWRnZXRJc09uc2Ny
ZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIGd0a193
aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBHVEtfSVNfV0lORE9XKHdpZGdldCkgJiYgIUdU
S19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjliZGRlNjU5OGYwMmQzMzU3YTAwYTcxMzM4OTZiYWM1NGMy
ZGEyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEd0a1V0aWxpdGllc19o
IAotI2RlZmluZSBHdGtVdGlsaXRpZXNfaCAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJbnRQb2ludDsKLQotSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChH
dGtXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpOwotYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2
ZWxXaW5kb3coR3RrV2lkZ2V0Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEd0a1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrVmVyc2lvbmluZy5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNp
b25pbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyZjg0YzJlZjg4NjZjMDNj
MDZmMTZkYzIxNTlmZmVhOTk3Y2RjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5j
CisrKyAvZGV2L251bGwKQEAgLTEsMzgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLQotI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCi0jaW5jbHVkZSA8WDExL1hhdG9tLmg+Ci0j
aW5jbHVkZSA8Z2RrL2dka3guaD4KLSNlbmRpZgotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIs
IDE0LCAwKQotdm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0bWVudCogYWRq
dXNtZW50LCBnZG91YmxlIHZhbHVlKQotewotICAgICAgICBtX2FkanVzdG1lbnQtPnZhbHVlID0g
bV9jdXJyZW50UG9zOwotICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fYWRq
dXN0bWVudCk7Ci19Ci0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfY29uZmlndXJlKEd0a0FkanVzdG1l
bnQqIGFkanVzdG1lbnQsIGdkb3VibGUgdmFsdWUsIGdkb3VibGUgbG93ZXIsIGdkb3VibGUgdXBw
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXBJbmNyZW1lbnQs
IGdkb3VibGUgcGFnZUluY3JlbWVudCwgZ2RvdWJsZSBwYWdlU2l6ZSkKLXsKLSAgICBnX29iamVj
dF9mcmVlemVfbm90aWZ5KEdfT0JKRUNUKGFkanVzdG1lbnQpKTsKLQotICAgIGdfb2JqZWN0X3Nl
dChhZGp1c3RtZW50LAotICAgICAgICAgICAgICAgICAibG93ZXIiLCBsb3dlciwKLSAgICAgICAg
ICAgICAgICAgInVwcGVyIiwgdXBwZXIsCi0gICAgICAgICAgICAgICAgICJzdGVwLWluY3JlbWVu
dCIsIHN0ZXBJbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgICJwYWdlLWluY3JlbWVudCIsIHBh
Z2VJbmNyZW1lbnQsCi0gICAgICAgICAgICAgICAgICJwYWdlLXNpemUiLCBwYWdlU2l6ZSwKLSAg
ICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBnX29iamVjdF90aGF3X25vdGlmeShHX09CSkVD
VChhZGp1c3RtZW50KSk7Ci0KLSAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKGFkanVzdG1lbnQp
OwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoYWRqdXN0bWVudCk7Ci19Ci0jZW5k
aWYKLQotR2RrRGV2aWNlICpnZXREZWZhdWx0R0RLUG9pbnRlckRldmljZShHZGtXaW5kb3cqIHdp
bmRvdykKLXsKLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHZGtEZXZpY2VNYW5hZ2Vy
ICptYW5hZ2VyID0gIGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dl
dF9kaXNwbGF5KHdpbmRvdykpOwotICAgIHJldHVybiBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2Ns
aWVudF9wb2ludGVyKG1hbmFnZXIpOwotI2Vsc2UKLSAgICByZXR1cm4gZ2RrX2RldmljZV9nZXRf
Y29yZV9wb2ludGVyKCk7Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLX0KLQotI2lmICFH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKLXZvaWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29y
ZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwgZ2ludCB5LCBnaW50KiByb290WCwgZ2ludCog
cm9vdFkpCi17Ci0gICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9vcmlnaW4od2luZG93LCByb290WCwg
cm9vdFkpOwotICAgICpyb290WCA9ICpyb290WCArIHg7Ci0gICAgKnJvb3RZID0gKnJvb3RZICsg
eTsKLX0KLSNlbmRpZgotCi1HZGtDdXJzb3IgKiBibGFua0N1cnNvcigpCi17Ci0jaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTYsIDApCi0gICAgcmV0dXJuIGdka19jdXJzb3JfbmV3KEdES19CTEFO
S19DVVJTT1IpOwotI2Vsc2UKLSAgICBHZGtDdXJzb3IgKiBjdXJzb3I7Ci0gICAgR2RrUGl4bWFw
ICogc291cmNlOwotICAgIEdka1BpeG1hcCAqIG1hc2s7Ci0gICAgR2RrQ29sb3IgZm9yZWdyb3Vu
ZCA9IHsgMCwgNjU1MzUsIDAsIDAgfTsgLy8gUmVkLgotICAgIEdka0NvbG9yIGJhY2tncm91bmQg
PSB7IDAsIDAsIDAsIDY1NTM1IH07IC8vIEJsdWUuCi0gICAgc3RhdGljIGdjaGFyIGN1cnNvckJp
dHNbXSA9IHsweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MH07Ci0KLSAgICBz
b3VyY2UgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29yQml0cywgOCwgOCk7
Ci0gICAgbWFzayA9IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgwLCBjdXJzb3JCaXRzLCA4
LCA4KTsKLSAgICBjdXJzb3IgPSBnZGtfY3Vyc29yX25ld19mcm9tX3BpeG1hcChzb3VyY2UsIG1h
c2ssICZmb3JlZ3JvdW5kLCAmYmFja2dyb3VuZCwgOCwgOCk7Ci0gICAgZ2RrX3BpeG1hcF91bnJl
Zihzb3VyY2UpOwotICAgIGdka19waXhtYXBfdW5yZWYobWFzayk7Ci0gICAgcmV0dXJuIGN1cnNv
cjsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLX0KLQotI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLWNvbnN0IGdjaGFyKiBndGtfbWVudV9pdGVtX2dldF9s
YWJlbChHdGtNZW51SXRlbSogbWVudUl0ZW0pCi17Ci0gICAgR3RrV2lkZ2V0ICogbGFiZWwgPSBn
dGtfYmluX2dldF9jaGlsZChHVEtfQklOKG1lbnVJdGVtKSk7Ci0gICAgaWYgKEdUS19JU19MQUJF
TChsYWJlbCkpCi0gICAgICAgIHJldHVybiBndGtfbGFiZWxfZ2V0X3RleHQoR1RLX0xBQkVMKGxh
YmVsKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwg
MTYsIDApCi0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIGNhaXJvX2Zvcm1hdF90
Ci1nZGtfY2Fpcm9fZm9ybWF0X2Zvcl9jb250ZW50KGNhaXJvX2NvbnRlbnRfdCBjb250ZW50KQot
ewotICAgIHN3aXRjaCAoY29udGVudCkgewotICAgIGNhc2UgQ0FJUk9fQ09OVEVOVF9DT0xPUjoK
LSAgICAgICAgcmV0dXJuIENBSVJPX0ZPUk1BVF9SR0IyNDsKLSAgICBjYXNlIENBSVJPX0NPTlRF
TlRfQUxQSEE6Ci0gICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfQTg7Ci0gICAgY2FzZSBDQUlS
T19DT05URU5UX0NPTE9SX0FMUEhBOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDQUlS
T19GT1JNQVRfQVJHQjMyOwotICAgIH0KLX0KLQotc3RhdGljIGNhaXJvX3N1cmZhY2VfdCoKLWdk
a19jYWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Us
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fY29udGVudF90IGNvbnRl
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV90ICogY29weTsKLSAgICBjYWlyb190ICogY3I7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAg
JiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBjb250ZW50Ci0gICAgICAg
ICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpID49IHdpZHRoCi0gICAg
ICAgICYmIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSA+PSBoZWlnaHQp
Ci0gICAgICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKTsKLQotICAg
IGNvcHkgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShnZGtfY2Fpcm9fZm9ybWF0X2Zvcl9j
b250ZW50KGNvbnRlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKLQot
ICAgIGNyID0gY2Fpcm9fY3JlYXRlKGNvcHkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3Is
IHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLSAgICBjYWlyb19kZXN0cm95
KGNyKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgdm9pZAotY29udmVydF9hbHBo
YShndWNoYXIgKiBkZXN0RGF0YSwgaW50IGRlc3RTdHJpZGUsCi0gICAgICAgICAgICAgIGd1Y2hh
ciAqIHNyY0RhdGEsIGludCBzcmNTdHJpZGUsCi0gICAgICAgICAgICAgIGludCBzcmNYLCBpbnQg
c3JjWSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGludCB4LCB5OwotCi0gICAgc3Jj
RGF0YSArPSBzcmNTdHJpZGUgKiBzcmNZICsgc3JjWSAqIDQ7Ci0KLSAgICBmb3IgKHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZ3VpbnQzMiAqIHNyYyA9IChndWludDMyICopIHNy
Y0RhdGE7Ci0KLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAg
ICAgIGd1aW50IGFscGhhID0gc3JjW3hdID4+IDI0OwotCi0gICAgICAgICAgICBpZiAoIWFscGhh
KSB7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAwXSA9IDA7Ci0gICAgICAgICAg
ICAgICAgZGVzdERhdGFbeCAqIDQgKyAxXSA9IDA7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFb
eCAqIDQgKyAyXSA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRl
c3REYXRhW3ggKiA0ICsgMF0gPSAoKChzcmNbeF0gJiAweGZmMDAwMCkgPj4gMTYpICogMjU1ICsg
YWxwaGEgLyAyKSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0g
PSAoKChzcmNbeF0gJiAweDAwZmYwMCkgPj4gIDgpICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhh
OwotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMl0gPSAoKChzcmNbeF0gJiAweDAw
MDBmZikgPj4gIDApICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0KLSAg
ICAgICAgc3JjRGF0YSArPSBzcmNTdHJpZGU7Ci0gICAgICAgIGRlc3REYXRhICs9IGRlc3RTdHJp
ZGU7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotY29udmVydF9ub19hbHBoYShndWNoYXIgKiBk
ZXN0RGF0YSwgaW50IGRlc3RTdHJpZGUsIGd1Y2hhciAqIHNyY0RhdGEsCi0gICAgICAgICAgICAg
ICAgIGludCBzcmNTdHJpZGUsIGludCBzcmNYLCBpbnQgc3JjWSwKLSAgICAgICAgICAgICAgICAg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGludCB4LCB5OwotCi0gICAgc3JjRGF0YSAr
PSBzcmNTdHJpZGUgKiBzcmNZICsgc3JjWCAqIDQ7Ci0KLSAgICBmb3IgKHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspIHsKLSAgICAgICAgZ3VpbnQzMiAqIHNyYyA9IChndWludDMyICopIHNyY0RhdGE7
Ci0KLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgICAgIGRl
c3REYXRhW3ggKiAzICsgMF0gPSBzcmNbeF0gPj4gMTY7Ci0gICAgICAgICAgICBkZXN0RGF0YVt4
ICogMyArIDFdID0gc3JjW3hdID4+ICA4OwotICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMgKyAy
XSA9IHNyY1t4XTsKLSAgICAgICAgfQotCi0gICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOwot
ICAgICAgICBkZXN0RGF0YSArPSBkZXN0U3RyaWRlOwotICAgIH0KLX0KLQotLyoqCi0gKiBnZGtf
cGl4YnVmX2dldF9mcm9tX3N1cmZhY2U6Ci0gKiBAc3VyZmFjZTogc3VyZmFjZSB0byBjb3B5IGZy
b20KLSAqIEBzcmNfeDogU291cmNlIFggY29vcmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UKLSAqIEBz
cmNfeTogU291cmNlIFkgY29vcmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UKLSAqIEB3aWR0aDogV2lk
dGggaW4gcGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKLSAqIEBoZWlnaHQ6IEhlaWdodCBpbiBwaXhl
bHMgb2YgcmVnaW9uIHRvIGdldAotICoKLSAqIFRyYW5zZmVycyBpbWFnZSBkYXRhIGZyb20gYSAj
Y2Fpcm9fc3VyZmFjZV90IGFuZCBjb252ZXJ0cyBpdCB0byBhbiBSR0IoQSkKLSAqIHJlcHJlc2Vu
dGF0aW9uIGluc2lkZSBhICNHZGtQaXhidWYuIFRoaXMgYWxsb3dzIHlvdSB0byBlZmZpY2llbnRs
eSByZWFkCi0gKiBpbmRpdmlkdWFsIHBpeGVscyBmcm9tIGNhaXJvIHN1cmZhY2VzLiBGb3IgI0dk
a1dpbmRvd3MsIHVzZQotICogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV93aW5kb3coKSBpbnN0ZWFkLgot
ICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYW4gUkdCIHBpeGJ1ZiB3aXRoIDggYml0
cyBwZXIgY2hhbm5lbC4gVGhlIHBpeGJ1ZgotICogd2lsbCBjb250YWluIGFuIGFscGhhIGNoYW5u
ZWwgaWYgdGhlIEBzdXJmYWNlIGNvbnRhaW5zIG9uZS4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0
cmFuc2ZlciBmdWxsKTogQSBuZXdseS1jcmVhdGVkIHBpeGJ1ZiB3aXRoIGEgcmVmZXJlbmNlIGNv
dW50Ci0gKiBvZiAxLCBvciAlTlVMTCBvbiBlcnJvcgotICoqLwotR2RrUGl4YnVmKgotZ2RrX3Bp
eGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCAqIHN1cmZhY2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHNyY1gsIGludCBzcmNZLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBjYWlyb19jb250ZW50
X3QgY29udGVudDsKLSAgICBHZGtQaXhidWYgKiBkZXN0OwotCi0gICAgLyogR2VuZXJhbCBzYW5p
dHkgY2hlY2tzICovCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3VyZmFjZSwgTlVMTCk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCwgTlVMTCk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwod2lkdGggPiAwICYmIGhlaWdodCA+IDAsIE5VTEwpOwot
Ci0gICAgY29udGVudCA9IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgfCBDQUlS
T19DT05URU5UX0NPTE9SOwotICAgIGRlc3QgPSBnZGtfcGl4YnVmX25ldyhHREtfQ09MT1JTUEFD
RV9SR0IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICEhKGNvbnRlbnQgJiBDQUlST19DT05U
RU5UX0FMUEhBKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBzdXJmYWNlID0gZ2RrX2NhaXJvX3N1
cmZhY2VfY29lcmNlX3RvX2ltYWdlKHN1cmZhY2UsIGNvbnRlbnQsIHNyY1ggKyB3aWR0aCwgc3Jj
WSArIGhlaWdodCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlKTsKLSAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgfHwgIWRlc3QpIHsKLSAgICAgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoZ2RrX3BpeGJ1Zl9nZXRfaGFzX2FscGhhKGRlc3QpKQotICAgICAgICBjb252ZXJ0
X2FscGhhKGdka19waXhidWZfZ2V0X3BpeGVscyhkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGRlc3QpLAotICAgICAgICAgICAgICAgICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgIHNyY1gsIHNyY1ksCi0gICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LCBoZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgY29udmVydF9ub19hbHBoYShnZGtfcGl4YnVm
X2dldF9waXhlbHMoZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdka19waXhidWZf
Z2V0X3Jvd3N0cmlkZShkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBzcmNYLCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwg
aGVpZ2h0KTsKLQotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICByZXR1
cm4gZGVzdDsKLX0KLQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQotdm9pZCBnZXRH
ZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhl
aWdodCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdES19JU19QSVhNQVAoZHJhd2FibGUpIHx8
IEdES19JU19XSU5ET1coZHJhd2FibGUpKTsKLQotICAgIGlmIChHREtfSVNfUElYTUFQKGRyYXdh
YmxlKSkgewotICAgICAgICBnZGtfcGl4bWFwX2dldF9zaXplKEdES19QSVhNQVAoZHJhd2FibGUp
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdka1dpbmRv
dyAqd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgKndpZHRoID0gZ2RrX3dpbmRv
d19nZXRfd2lkdGgod2luZG93KTsKLSAgICAqaGVpZ2h0ID0gZ2RrX3dpbmRvd19nZXRfaGVpZ2h0
KHdpbmRvdyk7Ci19Ci0jZWxzZQotdm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUg
KmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKLXsKLSAgICBnZGtfZHJhd2FibGVf
Z2V0X3NpemUoZHJhd2FibGUsIHdpZHRoLCBoZWlnaHQpOwotfQotI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDIsIDI0LCAwKQotCi0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQotI2lm
ICFHTElCX0NIRUNLX1ZFUlNJT04oMiwgMjcsIDEpCi1nYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVs
YXRvcl9maXJzdF93aW5zKEdTaWduYWxJbnZvY2F0aW9uSGludCAqaW52b2NhdGlvbkhpbnQsIEdW
YWx1ZSAqcmV0dXJuQWNjdW11bGF0b3IsIGNvbnN0IEdWYWx1ZSAqaGFuZGxlclJldHVybiwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX3ZhbHVlX2NvcHkoaGFuZGxlclJldHVybiwgcmV0dXJuQWNj
dW11bGF0b3IpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLSNlbmRpZgotCi0jaWYgIUdUS19DSEVD
S19WRVJTSU9OKDIsIDIyLCAwKQotY2Fpcm9fc3VyZmFjZV90ICpnZGtfd2luZG93X2NyZWF0ZV9z
aW1pbGFyX3N1cmZhY2UoR2RrV2luZG93ICp3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fdCAqY2Fpcm9Db250ZXh0ID0g
Z2RrX2NhaXJvX2NyZWF0ZSh3aW5kb3cpOwotICAgIGNhaXJvX3N1cmZhY2VfdCAqY2Fpcm9TdXJm
YWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjYWlyb0NvbnRleHQpOwotICAgIGNhaXJvX3N1cmZhY2Vf
dCAqbmV3U3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfY3JlYXRlX3NpbWlsYXIoY2Fpcm9TdXJmYWNl
LCBjb250ZW50LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBjYWlyb19kZXN0cm95KGNhaXJvQ29udGV4
dCk7Ci0gICAgcmV0dXJuIG5ld1N1cmZhY2U7Ci19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMjIsIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKLSNpZmRlZiBH
REtfV0lORE9XSU5HX1gxMQotc3RhdGljIGludCBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChHZGtT
Y3JlZW4gKnNjcmVlbikKLXsKLSAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJ
U1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKLSAgICBXaW5kb3cgcm9vdFdp
bmRvdyA9IFhSb290V2luZG93KGRpc3BsYXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsK
LSAgICBBdG9tIGN1cnJlbnREZXNrdG9wID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfQ1VS
UkVOVF9ERVNLVE9QIiwgVHJ1ZSk7Ci0KLSAgICBBdG9tIHR5cGU7Ci0gICAgaW50IGZvcm1hdDsK
LSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7Ci0gICAgdW5zaWduZWQg
Y2hhciAqcmV0dXJuZWREYXRhID0gTlVMTDsKLSAgICBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxh
eSwgcm9vdFdpbmRvdywgY3VycmVudERlc2t0b3AsIDAsIEdfTUFYTE9ORywgRmFsc2UsIFhBX0NB
UkRJTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAmdHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291
bnQsICZieXRlc0FmdGVyLCAmcmV0dXJuZWREYXRhKTsKLQotICAgIGludCB3b3Jrc3BhY2UgPSAw
OwotICAgIGlmICh0eXBlID09IFhBX0NBUkRJTkFMICYmIGZvcm1hdCA9PSAzMiAmJiBpdGVtc0Nv
dW50ID4gMCkKLSAgICAgICAgd29ya3NwYWNlID0gKGludClyZXR1cm5lZERhdGFbMF07Ci0KLSAg
ICBpZiAocmV0dXJuZWREYXRhKQotICAgICAgICBYRnJlZShyZXR1cm5lZERhdGEpOwotCi0gICAg
cmV0dXJuIHdvcmtzcGFjZTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0U2NyZWVuV29ya0FyZWEoR2Rr
U2NyZWVuICpzY3JlZW4sIEdka1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAgICBEaXNwbGF5ICpkaXNw
bGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4p
KTsKLSAgICBBdG9tIHdvcmtBcmVhID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfV09SS0FS
RUEiLCBUcnVlKTsKLQotICAgIC8qIERlZmF1bHRzIGluIGNhc2Ugb2YgZXJyb3IuICovCi0gICAg
YXJlYS0+eCA9IDA7Ci0gICAgYXJlYS0+eSA9IDA7Ci0gICAgYXJlYS0+d2lkdGggPSBnZGtfc2Ny
ZWVuX2dldF93aWR0aChzY3JlZW4pOwotICAgIGFyZWEtPmhlaWdodCA9IGdka19zY3JlZW5fZ2V0
X2hlaWdodChzY3JlZW4pOwotCi0gICAgaWYgKHdvcmtBcmVhID09IE5vbmUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdpbmRvdyByb290V2luZG93ID0gWFJvb3RXaW5kb3coZGlzcGxheSwgR0RL
X1NDUkVFTl9YTlVNQkVSKHNjcmVlbikpOwotICAgIEF0b20gdHlwZTsKLSAgICBpbnQgZm9ybWF0
OwotICAgIHVuc2lnbmVkIGxvbmcgaXRlbXNDb3VudCwgYnl0ZXNBZnRlcjsKLSAgICB1bnNpZ25l
ZCBjaGFyICpyZXR1cm5lZERhdGEgPSAwOwotICAgIGludCByZXN1bHQgPSBYR2V0V2luZG93UHJv
cGVydHkoZGlzcGxheSwgcm9vdFdpbmRvdywgd29ya0FyZWEsIDAsIDQgKiAzMiAvKiBNYXggbGVu
Z3RoICovLCBGYWxzZSwgQW55UHJvcGVydHlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZpdGVtc0NvdW50LCAmYnl0ZXNBZnRlciwgJnJl
dHVybmVkRGF0YSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTdWNjZXNzIHx8IHR5cGUgPT0gTm9uZSB8
fCAhZm9ybWF0IHx8IGJ5dGVzQWZ0ZXIgfHwgaXRlbXNDb3VudCAlIDQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludCBkZXNrdG9wID0gZ2V0U2NyZWVuQ3VycmVudERlc2t0b3Aoc2NyZWVuKTsK
LSAgICBsb25nICp3b3JrQXJlYXMgPSAobG9uZyAqKXJldHVybmVkRGF0YTsKLSAgICBhcmVhLT54
ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0XTsKLSAgICBhcmVhLT55ID0gd29ya0FyZWFzW2Rlc2t0
b3AgKiA0ICsgMV07Ci0gICAgYXJlYS0+d2lkdGggPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAy
XTsKLSAgICBhcmVhLT5oZWlnaHQgPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAzXTsKLQotICAg
IFhGcmVlKHJldHVybmVkRGF0YSk7Ci19Ci0jZW5kaWYgLy8gR0RLX1dJTkRPV0lOR19YMTEKLQot
dm9pZCBnZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmthcmVhKEdka1NjcmVlbiAqc2NyZWVuLCBp
bnQgbW9uaXRvciwgR2RrUmVjdGFuZ2xlICphcmVhKQotewotICAgIGdka19zY3JlZW5fZ2V0X21v
bml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCBhcmVhKTsKLQotI2lmZGVmIEdES19XSU5E
T1dJTkdfWDExCi0gICAgR2RrUmVjdGFuZ2xlIHdvcmtBcmVhOwotICAgIGdldFNjcmVlbldvcmtB
cmVhKHNjcmVlbiwgJndvcmtBcmVhKTsKLSAgICBnZGtfcmVjdGFuZ2xlX2ludGVyc2VjdCgmd29y
a0FyZWEsIGFyZWEsIGFyZWEpOwotI2VuZGlmCi19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMywgNikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtW
ZXJzaW9uaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDM5ZWUyZGMwYTU0NDEwYWE4N2RlMWM2
NGZiYzZkYzQ0NTI4N2Y4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xs
YWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIEd0a1ZlcnNpb25pbmdfaAotI2RlZmluZSBHdGtWZXJzaW9uaW5nX2gKLQotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotI2luY2x1ZGUg
PGdkay9nZGtrZXlzeW1zLWNvbXBhdC5oPgotI2VuZGlmCi0KLUdfQkVHSU5fREVDTFMKLQotLy8g
TWFjcm9zIHRvIGF2b2lkIGRlcHJlY2F0aW9uIGNoZWNraW5nIGNodXJuCi0jaWZuZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0jZGVmaW5lIEdES19XSU5ET1dfWFdJTkRPVyh3aW5kb3cpIChnZGtfeDEx
X3dpbmRvd19nZXRfeGlkKHdpbmRvdykpCi0jZWxzZQotR2RrUGl4YnVmKiBnZGtfcGl4YnVmX2dl
dF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBpbnQgc3JjWCwgaW50IHNy
Y1ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOwotdm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUqIGRyYXdhYmxl
LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7Ci0jZW5kaWYKLQotI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMywgNCkKLSNkZWZpbmUgZ2RrX3BpeG1hcF9nZXRfc2l6ZSBnZGtfZHJhd2FibGVf
Z2V0X3NpemUKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgNCkKLQotI2lmICFH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKLSNkZWZpbmUgZ2RrX3dpbmRvd19nZXRfZGlzcGxh
eSh3aW5kb3cpIGdka19kcmF3YWJsZV9nZXRfZGlzcGxheSh3aW5kb3cpCi0jZGVmaW5lIGdka193
aW5kb3dfZ2V0X3Zpc3VhbCBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbAotI2VuZGlmIC8vIEdUS19D
SEVDS19WRVJTSU9OKDIsIDIzLCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAw
KQotY2Fpcm9fc3VyZmFjZV90KiBnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoR2Rr
V2luZG93KiB3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQotCi0jaWYgIUdU
S19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQotI2RlZmluZSBnZGtfdmlzdWFsX2dldF9kZXB0aCh2
aXN1YWwpICh2aXN1YWwpLT5kZXB0aAotI2RlZmluZSBnZGtfdmlzdWFsX2dldF9iaXRzX3Blcl9y
Z2IodmlzdWFsKSAodmlzdWFsKS0+Yml0c19wZXJfcmdiCi0jZGVmaW5lIGdka19kcmFnX2NvbnRl
eHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSAoY29udGV4dCktPmFjdGlvbgotI2RlZmlu
ZSBnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpIChjb250ZXh0KS0+YWN0aW9u
cwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQotCi0jaWYgIUdUS19DSEVD
S19WRVJTSU9OKDIsIDIwLCAwKQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRn
ZXQpIEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF9y
ZWFsaXplZCh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtf
UkVBTElaRUQpCi0jZGVmaW5lIGd0a19yYW5nZV9nZXRfbWluX3NsaWRlcl9zaXplKHJhbmdlKSAo
cmFuZ2UpLT5taW5fc2xpZGVyX3NpemUKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAy
MCwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKLSNkZWZpbmUgZ3RrX3dp
ZGdldF9pc190b3BsZXZlbCh3aWRnZXQpIEdUS19XSURHRVRfVE9QTEVWRUwod2lkZ2V0KQotI2Rl
ZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpIEdUS19XSURHRVRfUkVBTElaRUQo
d2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93KHdpZGdldCkgIUdUS19X
SURHRVRfTk9fV0lORE9XKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfY2FuX2ZvY3Vz
KHdpZGdldCkgR1RLX1dJREdFVF9DQU5fRk9DVVMod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0
X2lzX3NlbnNpdGl2ZSh3aWRnZXQpIEdUS19XSURHRVRfSVNfU0VOU0lUSVZFKHdpZGdldCkKLSNl
bmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxOCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZB
TFNFKSBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfVklTSUJMRSkKLSNkZWZp
bmUgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3aWRnZXQpIChHVEtfV0lER0VUX0ZMQUdTKHdpZGdl
dCkgJiBHVEtfVklTSUJMRSkKLQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF93aW5kb3cod2lkZ2V0
LCBuZXdfd2luZG93KSAod2lkZ2V0KS0+d2luZG93ID0gKG5ld193aW5kb3cpCi0jZGVmaW5lIGd0
a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdT
KCh3aWRnZXQpLCBHVEtfQ0FOX0ZPQ1VTKQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9hbGxvY2F0
aW9uKHdpZGdldCwgYWxsb2MpICgqKGFsbG9jKSA9ICh3aWRnZXQpLT5hbGxvY2F0aW9uKQotI2Rl
ZmluZSBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgod2lkZ2V0KS0+
YWxsb2NhdGlvbiA9ICooYWxsb2MpKQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE4
LCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQotdm9pZCBnZGtfd2luZG93
X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4LCBnaW50IHksIGdpbnQq
IHJvb3RYLCBnaW50KiByb290WSk7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcs
IDMpCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi1jb25zdCBnY2hhciogZ3Rr
X21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tf
VkVSU0lPTigyLCAxNiwgMCkKLQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQot
I2RlZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAod2lkZ2V0KS0+d2luZG93Ci0j
ZGVmaW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChhZGopLT52YWx1ZQotI2RlZmlu
ZSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAoZGlhbG9nKS0+dmJveAotI2Rl
ZmluZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpIChkaWFsb2cpLT5hY3Rpb25f
YXJlYQotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSAoZGF0YSkt
Pmxlbmd0aAotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkgKGRhdGEp
LT5kYXRhCi0jZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFyZ2V0KGRhdGEpIChkYXRh
KS0+dGFyZ2V0Ci0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3NpemUoYWRqLCBuZXdW
YWx1ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKLSNkZWZpbmUgZ3RrX2FkanVzdG1l
bnRfc2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFsdWUgPSBuZXdWYWx1ZSkKLSNk
ZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+bG93
ZXIgPSBuZXdWYWx1ZSkKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVyKGFkaiwgbmV3
VmFsdWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKLQotdm9pZCBndGtfYWRqdXN0bWVudF9j
b25maWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2RvdWJsZSB2YWx1ZSwgZ2RvdWJs
ZSBsb3dlciwgZ2RvdWJsZSB1cHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdk
b3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VT
aXplKTsKLQotdm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0bWVudCogYWRq
dXNtZW50LCBnZG91YmxlIHZhbHVlKTsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAx
NCwgMCkKLQotR2RrRGV2aWNlKiBnZXREZWZhdWx0R0RLUG9pbnRlckRldmljZShHZGtXaW5kb3cq
IHdpbmRvdyk7Ci1HZGtDdXJzb3IqIGJsYW5rQ3Vyc29yKCk7Ci0KLSNpZiAhR0xJQl9DSEVDS19W
RVJTSU9OKDIsIDI3LCAxKQotZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lu
cyhHU2lnbmFsSW52b2NhdGlvbkhpbnQqIGludm9jYXRpb25IaW50LCBHVmFsdWUqIHJldHVybkFj
Y3VtdWxhdG9yLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdwb2ludGVyIGRhdGEpOwot
I2VuZGlmCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKLXZvaWQgZ2RrX3NjcmVl
bl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKiwgaW50IG1vbml0b3IsIEdka1JlY3Rh
bmdsZSAqYXJlYSk7Ci0jZW5kaWYKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8vIEd0a1ZlcnNp
b25pbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdl
dEJhY2tpbmdTdG9yZVgxMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lk
Z2V0QmFja2luZ1N0b3JlWDExLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAz
NzZiYzc3MTRiMzk1NDkwMDEyYjk3Nzk2YTE5OTdmY2EzYzBjYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldpZGdl
dEJhY2tpbmdTdG9yZS5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUg
IlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxjYWlyby14
bGliLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUpOwotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5
OwotICAgIFBpeG1hcCBtX3BpeG1hcDsKLSAgICBHQyBtX2djOwotICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fc3VyZmFjZTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdpZGdldEJhY2tp
bmdTdG9yZVByaXZhdGU+IGNyZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0
b3JlUHJpdmF0ZSh3aWRnZXQsIHNpemUpKTsKLSAgICB9Ci0KLSAgICB+V2lkZ2V0QmFja2luZ1N0
b3JlUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBYRnJlZVBpeG1hcChtX2Rpc3BsYXksIG1fcGl4
bWFwKTsKLSAgICAgICAgWEZyZWVHQyhtX2Rpc3BsYXksIG1fZ2MpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICAvLyBXZSBrZWVwIHR3byBjb3BpZXMgb2YgdGhlIHN1cmZhY2UgaGVyZSwgd2hpY2gg
d2lsbCBkb3VibGUgdGhlIG1lbW9yeSB1c2FnZSwgYnV0IGluY3JlYXNlCi0gICAgLy8gc2Nyb2xs
aW5nIHBlcmZvcm1hbmNlIHNpbmNlIHdlIGRvIG5vdCBoYXZlIHRvIGtlZXAgcmVhbGxvY2F0aW5n
IGEgbWVtb3J5IHJlZ2lvbiBkdXJpbmcKLSAgICAvLyBxdWljayBzY3JvbGxpbmcgcmVxdWVzdHMu
Ci0gICAgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ3RrX3dp
ZGdldF9nZXRfdmlzdWFsKHdpZGdldCk7Ci0gICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2Rr
X3Zpc3VhbF9nZXRfc2NyZWVuKHZpc3VhbCk7Ci0gICAgICAgIG1fZGlzcGxheSA9IEdES19TQ1JF
RU5fWERJU1BMQVkoc2NyZWVuKTsKLSAgICAgICAgbV9waXhtYXAgPSBYQ3JlYXRlUGl4bWFwKG1f
ZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19XSU5ET1dfWElE
KGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKSk7Ci0gICAg
ICAgIG1fZ2MgPSBYQ3JlYXRlR0MobV9kaXNwbGF5LCBtX3BpeG1hcCwgMCwgMCk7Ci0KLSAgICAg
ICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShtX2Rpc3Bs
YXksIG1fcGl4bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOwotICAgIH0KLX07Ci0KLVBhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0b3Jl
PiBXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdpZGdldEJhY2tpbmdTdG9y
ZSh3aWRnZXQsIHNpemUpKTsKLX0KLQotV2lkZ2V0QmFja2luZ1N0b3JlOjpXaWRnZXRCYWNraW5n
U3RvcmUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgOiBtX3By
aXZhdGUoV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRlKHdpZGdldCwgc2l6ZSkpCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotV2lkZ2V0QmFja2luZ1N0b3JlOjp+V2lkZ2V0QmFj
a2luZ1N0b3JlKCkKLXsKLX0KLQotY2Fpcm9fc3VyZmFjZV90KiBXaWRnZXRCYWNraW5nU3RvcmU6
OmNhaXJvU3VyZmFjZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgp
OwotfQotCi12b2lkIFdpZGdldEJhY2tpbmdTdG9yZTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBJbnRSZWN0IHRh
cmdldFJlY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgdGFyZ2V0UmVjdC5tb3ZlKHNjcm9sbE9mZnNldCk7
Ci0gICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgaWYgKHRhcmdldFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpKTsKLSAgICBYQ29weUFyZWEobV9wcml2YXRlLT5t
X2Rpc3BsYXksIG1fcHJpdmF0ZS0+bV9waXhtYXAsIG1fcHJpdmF0ZS0+bV9waXhtYXAsIG1fcHJp
dmF0ZS0+bV9nYywgCi0gICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpIC0gc2Nyb2xsT2Zmc2V0
LndpZHRoKCksIHRhcmdldFJlY3QueSgpIC0gc2Nyb2xsT2Zmc2V0LmhlaWdodCgpLAotICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksCi0gICAgICAg
ICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3ByaXZhdGUtPm1fc3VyZmFjZS5nZXQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRS
ZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGQxZmVhY2E5NmE0YTA5ZjRiYmQwNzA4MDliNjhlMTg1NDQxNjhm
Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
S1VSTC5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGds
aWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBh
dGgoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpIHx8ICFpc0xvY2FsRmlsZSgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aCgpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBHT3du
UHRyPGNoYXI+IGZpbGVuYW1lKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Ci0gICAgcmV0
dXJuIGZpbGVuYW1lVG9TdHJpbmcoZmlsZW5hbWUuZ2V0KCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5Qmlu
ZGluZ1RyYW5zbGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRp
bmdUcmFuc2xhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkMGZiOGNl
OGMwYzE4YmViYThiYTYyNWNkNzAwZDEzNzA2YmIwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5Qmlu
ZGluZ1RyYW5zbGF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLZXlCaW5kaW5n
VHJhbnNsYXRvci5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGdk
ay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4gSW50Q29uc3RDaGFy
SGFzaE1hcDsKLQotc3RhdGljIHZvaWQgYmFja3NwYWNlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRn
ZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0
b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJiYWNrc3BhY2UiKTsKLSAgICB0cmFuc2xhdG9y
LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiRGVsZXRlQmFja3dhcmQiKTsKLX0KLQotc3RhdGlj
IHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIGdib29sZWFuIHNlbGVj
dCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3Rv
cF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNlbGVjdC1hbGwiKTsKLSAgICB0cmFuc2xhdG9y
LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2VsZWN0QWxsIiA6ICJVbnNlbGVj
dCIpOwotfQotCi1zdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdp
ZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxf
c3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImN1dC1jbGlwYm9hcmQiKTsKLSAgICB0cmFu
c2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ3V0Iik7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNvcHlDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5z
bGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoIkNvcHkiKTsKLX0KLQotc3RhdGljIHZvaWQgcGFzdGVDbGlwYm9hcmRDYWxs
YmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3Ip
Ci17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBhc3RlLWNs
aXBib2FyZCIpOwotICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJQYXN0
ZSIpOwotfQotCi1zdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayhHdGtXaWRnZXQq
IHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAgIC8vIFdlIGRvbid0IHN1cHBv
cnQgdG9nZ2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2RlLCBidXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sg
ZXhwZWN0cwotICAgIC8vIHRoZSBHdGtUZXh0VmlldyB0byBoYXZlIGEgbGF5b3V0LCBzbyB3ZSBo
YW5kbGUgdGhpcyBzaWduYWwganVzdCB0byBzdG9wIGl0LgotICAgIGdfc2lnbmFsX3N0b3BfZW1p
c3Npb25fYnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUtb3ZlcndyaXRlIik7Ci19Ci0KLS8vIEdUSysg
d2lsbCBzdGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMgdG8gdGhlIHdlYiB2aWV3LiBTbyB3ZSBjYW4g
c2FmZWx5IHN0b3Agc2lnbmFsCi0vLyBlbWlzc2lvbiB3aXRob3V0IGJyZWFraW5nIGFjY2Vzc2li
aWxpdHkuCi1zdGF0aWMgdm9pZCBwb3B1cE1lbnVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwg
S2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlf
bmFtZSh3aWRnZXQsICJwb3B1cC1tZW51Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dIZWxwQ2Fs
bGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKikKLXsKLSAgICBn
X3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAic2hvdy1oZWxwIik7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxldGVDb21tYW5kc1tdWzJdID0gewotICAg
IHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIgICAgICAg
ICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJzCi0gICAgeyAiRGVsZXRlV29yZEJhY2t3
YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgIH0s
IC8vIFdvcmQgZW5kcwotICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVs
ZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkcwotICAgIHsgIkRl
bGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAg
ICAgICAgICAgICB9LCAvLyBMaW5lcwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwg
ICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lIGVu
ZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQ
YXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBoIGVuZHMKLSAgICB7ICJEZWxl
dGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAg
ICAgICAgICAgfSwgLy8gUGFyYWdyYXBocwotICAgIHsgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIFdoaXRl
c3BhY2UgKE0tXCBpbiBFbWFjcykKLX07Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZUZyb21DdXJzb3JD
YWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVsZXRlVHlwZSBkZWxldGVUeXBlLCBnaW50
IGNvdW50LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3NpZ25h
bF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiZGVsZXRlLWZyb20tY3Vyc29yIik7Ci0g
ICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwotCi0gICAgLy8gRW5zdXJpbmcg
dGhhdCBkZWxldGVUeXBlIDw9IEdfTl9FTEVNRU5UUyBoZXJlIHJlc3VsdHMgaW4gYSBjb21waWxl
ciB3YXJuaW5nCi0gICAgLy8gdGhhdCB0aGUgY29uZGl0aW9uIGlzIGFsd2F5cyB0cnVlLgotCi0g
ICAgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9XT1JEUykgewotICAgICAgICBpZiAoIWRp
cmVjdGlvbikgewotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1h
bmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGlu
Z0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEJh
Y2t3YXJkIik7Ci0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFu
ZCgiTW92ZVdvcmRGb3J3YXJkIik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5
cGUgPT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7Ci0gICAgICAgIGlmICghZGlyZWN0aW9u
KQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVU
b0JlZ2lubmluZ09mTGluZSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2xhdG9y
LT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZMaW5lIik7Ci0gICAgfSBlbHNl
IGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfUEFSQUdSQVBIUykgewotICAgICAgICBpZiAo
IWRpcmVjdGlvbikKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21t
YW5kKCJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZQYXJh
Z3JhcGgiKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByYXdDb21tYW5kID0gZ3RrRGVsZXRl
Q29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9uXTsKLSAgICBpZiAoIXJhd0NvbW1hbmQpCi0g
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhjb3VudCk7IGkrKykK
LSAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQocmF3Q29tbWFuZCk7
Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtNb3ZlQ29tbWFuZHNbXVs0XSA9IHsK
LSAgICB7ICJNb3ZlQmFja3dhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik1vdmVGb3J3YXJkIiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAg
ICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAg
ICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIGdyYXBoZW1lCi0gICAgeyAiTW92ZUxlZnQiLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiLAotICAgICAgIk1v
dmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndh
cmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8vIExlZnQvcmlnaHQgZ3JhcGhl
bWUKLSAgICB7ICJNb3ZlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIk1vdmVXb3JkRm9yd2FyZCIsCi0gICAgICAiTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNl
bGVjdGlvbiIsICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2FyZCB3b3JkCi0gICAgeyAiTW92ZVVwIiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIsCi0gICAgICAi
TW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRG93
bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lCi0g
ICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAgICAgICAgICAgICAgICAgICAgICJN
b3ZlVG9FbmRPZkxpbmUiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNl
bGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAg
ICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRzCi0gICAgeyAiTW92ZVBhcmFncmFwaEZvcndhcmQi
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFyYWdyYXBoQmFja3dhcmQiLAotICAg
ICAgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAiTW92
ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgIH0sIC8vIFVwL2Rvd24gcGFy
YWdyYXBocwotICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgICAgICAgICAgICAg
ICAgICAgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09m
UGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRN
b2RpZnlTZWxlY3Rpb24iICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBoIGVuZHMuCi0gICAgeyAi
TW92ZVBhZ2VVcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFn
ZURvd24iLAotICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAg
ICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgIH0sIC8v
IFVwL2Rvd24gcGFnZQotICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiLCAgICAgICAg
ICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIsCi0gICAgICAiTW92ZVRvQmVnaW5u
aW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50
QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgfSwgLy8gQmVnaW4vZW5kIG9mIGJ1ZmZlcgotICAgIHsg
MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAg
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSG9yaXpvbnRhbCBw
YWdlIG1vdmVtZW50Ci19OwotCi1zdGF0aWMgdm9pZCBtb3ZlQ3Vyc29yQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a01vdmVtZW50U3RlcCBzdGVwLCBnaW50IGNvdW50LCBnYm9vbGVhbiBl
eHRlbmRTZWxlY3Rpb24sIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJtb3ZlLWN1cnNvciIpOwot
ICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsKLSAgICBpZiAoZXh0ZW5kU2Vs
ZWN0aW9uKQotICAgICAgICBkaXJlY3Rpb24gKz0gMjsKLQotICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RlcCkgPj0gR19OX0VMRU1FTlRTKGd0a01vdmVDb21tYW5kcykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtNb3ZlQ29tbWFuZHNb
c3RlcF1bZGlyZWN0aW9uXTsKLSAgICBpZiAoIXJhd0NvbW1hbmQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQotICAgICAgICB0cmFu
c2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKLX0KLQotS2V5Qmlu
ZGluZ1RyYW5zbGF0b3I6OktleUJpbmRpbmdUcmFuc2xhdG9yKCkKLSAgICA6IG1fbmF0aXZlV2lk
Z2V0KGd0a190ZXh0X3ZpZXdfbmV3KCkpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2
ZVdpZGdldC5nZXQoKSwgImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0soYmFja3NwYWNlQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY3V0
LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY3V0Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY29weS1jbGlwYm9hcmQi
LCBHX0NBTExCQUNLKGNvcHlDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwYXN0ZS1jbGlwYm9hcmQiLCBHX0NBTExC
QUNLKHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAic2VsZWN0LWFsbCIsIEdfQ0FMTEJBQ0soc2VsZWN0QWxs
Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0Lmdl
dCgpLCAibW92ZS1jdXJzb3IiLCBHX0NBTExCQUNLKG1vdmVDdXJzb3JDYWxsYmFjayksIHRoaXMp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJkZWxldGUtZnJv
bS1jdXJzb3IiLCBHX0NBTExCQUNLKGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayksIHRoaXMpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJ0b2dnbGUtb3Zlcndy
aXRlIiwgR19DQUxMQkFDSyh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayksIHRoaXMpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwb3B1cC1tZW51IiwgR19DQUxM
QkFDSyhwb3B1cE1lbnVDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9u
YXRpdmVXaWRnZXQuZ2V0KCksICJzaG93LWhlbHAiLCBHX0NBTExCQUNLKHNob3dIZWxwQ2FsbGJh
Y2spLCB0aGlzKTsKLX0KLQotc3RydWN0IEtleUNvbWJpbmF0aW9uRW50cnkgewotICAgIHVuc2ln
bmVkIGdka0tleUNvZGU7Ci0gICAgdW5zaWduZWQgc3RhdGU7Ci0gICAgY29uc3QgY2hhciogbmFt
ZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlDb21iaW5hdGlvbkVudHJ5IGtleURvd25FbnRyaWVz
W10gPSB7Ci0gICAgeyBHREtfYiwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAg
ICAgICJUb2dnbGVCb2xkIiAgICB9LAotICAgIHsgR0RLX2ksICAgICAgICAgR0RLX0NPTlRST0xf
TUFTSywgICAgICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgfSwKLSAgICB7IEdES19Fc2NhcGUs
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCi0g
ICAgeyBHREtfZ3JlYXRlciwgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJDYW5j
ZWwiICAgICAgICB9LAotfTsKLQotLy8gVGhlc2UgY29tbWFuZHMgYXJlIHRleHQgaW5zZXJ0aW9u
IGNvbW1hbmRzLCBzbyBzaG91bGQgdGFrZSBwbGFjZQotLy8gd2hpbGUgaGFuZGxpbmcgdGhlIEtl
eVByZXNzIGV2ZW50Lgotc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0aW9uRW50cnkga2V5UHJlc3NF
bnRyaWVzW10gPSB7Ci0gICAgeyBHREtfVGFiLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJJbnNlcnRUYWIiICAgICB9LAotICAgIHsgR0RLX1RhYiwgICAgICAgR0RLX1NI
SUZUX01BU0ssICAgICAgICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgfSwKLX07Ci0KLXZvaWQg
S2V5QmluZGluZ1RyYW5zbGF0b3I6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoR2RrRXZl
bnRLZXkqIGV2ZW50LCBFdmVudFR5cGUgdHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29tbWFu
ZExpc3QpCi17Ci0gICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuY2xlYXIoKTsKLQotI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdUS19P
QkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0KCkpLCBldmVudCk7Ci0jZWxzZQotICAgIGd0a19iaW5k
aW5nc19hY3RpdmF0ZV9ldmVudChHX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGV2ZW50
KTsKLSNlbmRpZgotCi0gICAgaWYgKCFtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29u
c3RDaGFySGFzaE1hcCwga2V5RG93bkNvbW1hbmRzTWFwLCAoKSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlQcmVzc0NvbW1hbmRzTWFwLCAoKSk7Ci0K
LSAgICBpZiAoa2V5RG93bkNvbW1hbmRzTWFwLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleURvd25FbnRyaWVzKTsgaSsrKQotICAg
ICAgICAgICAga2V5RG93bkNvbW1hbmRzTWFwLnNldChrZXlEb3duRW50cmllc1tpXS5zdGF0ZSA8
PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLmdka0tleUNvZGUsIGtleURvd25FbnRyaWVzW2ldLm5h
bWUpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5
UHJlc3NFbnRyaWVzKTsgaSsrKQotICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC5zZXQo
a2V5UHJlc3NFbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmdka0tl
eUNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBTcGVjaWFs
LWNhc2UgZW50ZXIga2V5cyBmb3Igd2Ugd2FudCB0aGVtIHRvIHdvcmsgcmVnYXJkbGVzcyBvZiBt
b2RpZmllci4KLSAgICBpZiAoKGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JldHVybiB8fCBldmVudC0+
a2V5dmFsID09IEdES19LUF9FbnRlciB8fCBldmVudC0+a2V5dmFsID09IEdES19JU09fRW50ZXIp
ICYmIHR5cGUgPT0gS2V5UHJlc3MpIHsKLSAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKCJJbnNl
cnROZXdMaW5lIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3Iga2V5cHJl
c3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0Lgot
ICAgIGludCBtYXBLZXkgPSBldmVudC0+c3RhdGUgPDwgMTYgfCBldmVudC0+a2V5dmFsOwotICAg
IGlmIChtYXBLZXkpIHsKLSAgICAgICAgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiogY29tbWFu
ZE1hcCA9IHR5cGUgPT0gS2V5RG93biA/ICAma2V5RG93bkNvbW1hbmRzTWFwIDogJmtleVByZXNz
Q29tbWFuZHNNYXA7Ci0gICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kU3RyaW5nID0gY29t
bWFuZE1hcC0+Z2V0KG1hcEtleSkpIHsKLSAgICAgICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZChj
b21tYW5kU3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzY0MzZkZTZjYjg2M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4NS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAot
I2RlZmluZSBLZXlCaW5kaW5nVHJhbnNsYXRvcl9oCi0KLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgi
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgS2V5QmluZGluZ1RyYW5zbGF0b3IgewotcHVibGljOgotICAg
IEtleUJpbmRpbmdUcmFuc2xhdG9yKCk7Ci0KLSAgICBlbnVtIEV2ZW50VHlwZSB7IEtleURvd24s
IEtleVByZXNzIH07Ci0gICAgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KEdka0V2
ZW50S2V5KiwgRXZlbnRUeXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+Jik7Ci0gICAgdm9pZCBhZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7IG1fcGVuZGluZ0VkaXRv
ckNvbW1hbmRzLmFwcGVuZChjb21tYW5kKTsgfQotCi1wcml2YXRlOgotICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0PiBtX25hdGl2ZVdpZGdldDsKLSAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fcGVuZGlu
Z0VkaXRvckNvbW1hbmRzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
LQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhNzFlNTYxYzUzNDRjMDVlZjAzYmYxMjgzMzU2ZmM1
MmE0MmZkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGFuZ3VhZ2UuaCIK
LQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFVzaW5nIHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0
KCkgaGVyZSBpcyBub3QgYW4gb3B0aW9uLCBiZWNhdXNlCi0vLyBpdCBkb2Vzbid0IHN1cHBvcnQg
Y2hhbmdpbmcgdGhlIGxvY2FsZSBpbiBydW50aW1lLCBzbyBpdCByZXR1cm5zCi0vLyBhbHdheXMg
dGhlIHNhbWUgdmFsdWUuCi1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQotewotICAg
IGNoYXIqIGxvY2FsZURlZmF1bHQgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOwotCi0gICAg
aWYgKCFsb2NhbGVEZWZhdWx0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCJjIik7Ci0KLSAgICBH
T3duUHRyPGdjaGFyPiBub3JtYWxpemVkRGVmYXVsdChnX2FzY2lpX3N0cmRvd24obG9jYWxlRGVm
YXVsdCwgLTEpKTsKLSAgICBjaGFyKiBwdHIgPSBzdHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0
KCksICdfJyk7Ci0KLSAgICBpZiAocHRyKQotICAgICAgICAqcHRyID0gJy0nOwotCi0gICAgcHRy
ID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpLCAnLicpOwotCi0gICAgaWYgKHB0cikK
LSAgICAgICAgKnB0ciA9ICdcMCc7Ci0KLSAgICByZXR1cm4gU3RyaW5nKG5vcm1hbGl6ZWREZWZh
dWx0LmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwot
ICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBwZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7Ci0g
ICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7Ci19Ci0gICAgCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMmNhYTJmOWRmMjUyZjY5MjViYTIwMzRlNGNhNDU5
MWJjMTViNmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJp
c3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrTGFiZWwo
Y29uc3QgY2hhciogc3RvY2tJRCkKLXsKLSAgICBHdGtTdG9ja0l0ZW0gaXRlbTsKLSAgICBpZiAo
IWd0a19zdG9ja19sb29rdXAoc3RvY2tJRCwgJml0ZW0pKQotICAgICAgICByZXR1cm4gc3RvY2tJ
RDsKLSAgICByZXR1cm4gaXRlbS5sYWJlbDsKLX0KLQotU3RyaW5nIHN1Ym1pdEJ1dHRvbkRlZmF1
bHRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3VibWl0IikpOwot
fQotCi1TdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiU3VibWl0IikpOwotfQotCi1TdHJpbmcgcmVzZXRCdXR0b25EZWZhdWx0TGFi
ZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJlc2V0IikpOwotfQotCi1T
dHJpbmcgZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiRGV0YWlscyIpKTsKLX0KLQotU3RyaW5nIHNlYXJjaGFibGVJbmRleEludHJv
ZHVjdGlvbigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVGhpcyBpcyBhIHNl
YXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3JkczogIikpOwotfQotCi1TdHJpbmcg
ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiQ2hvb3NlIEZpbGUiKSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVsdGlw
bGVGaWxlc0xhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDaG9vc2Ug
RmlsZXMiKSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpCi17
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiKE5vbmUpIikpOwotfQotCi1TdHJpbmcg
ZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCIoTm9uZSkiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGlua0luTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVu
IExpbmsgaW4gTmV3IF9XaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZExpbmtUb0Rpc2soKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9E
b3dubG9hZCBMaW5rZWQgRmlsZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Nv
cHlMaW5rVG9DbGlwYm9hcmQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNv
cHkgTGluayBMb2NfYXRpb24iKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVu
SW1hZ2VJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3Bl
biBfSW1hZ2UgaW4gTmV3IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IlNhX3ZlIEltYWdlIEFzIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUlt
YWdlVG9DbGlwYm9hcmQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcF95
IEltYWdlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJsVG9D
bGlwYm9hcmQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcHkgSW1hZ2Ug
X0FkZHJlc3MiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5l
d1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfVmlkZW8g
aW4gTmV3IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRp
b0luTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVuIF9B
dWRpbyBpbiBOZXcgV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29w
eVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJDb3BfeSBWaWRlbyBMaW5rIExvY2F0aW9uIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJDb3BfeSBBdWRpbyBMaW5rIExvY2F0aW9uIikpOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scygpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiX1RvZ2dsZSBNZWRpYSBDb250cm9scyIpKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiVG9nZ2xlIE1lZGlhIF9Mb29wIFBsYXliYWNrIikpOwotfQotCi1TdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4oKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIlN3aXRjaCBWaWRlbyB0byBfRnVsbHNjcmVlbiIpKTsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiX1BsYXkiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdN
ZWRpYVBhdXNlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUGF1c2UiKSk7
Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIl9NdXRlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIk9wZW4gX0ZyYW1lIGluIE5ldyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdDb3B5KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJp
bmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0NPUFkpKTsKLSAgICByZXR1cm4g
c3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpCi17Ci0g
ICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xh
YmVsKEdUS19TVE9DS19ERUxFVEUpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBz
dG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19TRUxF
Q1RfQUxMKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdVbmljb2RlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfSW5z
ZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdJbnB1dE1ldGhvZHMoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IklucHV0IF9NZXRob2RzIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29CYWNr
KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0
a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0dPX0JBQ0spKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsK
LX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpCi17Ci0gICAgc3RhdGlj
IFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19T
VE9DS19HT19GT1JXQVJEKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdTdG9wKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwg
PSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1NUT1ApKTsKLSAgICBy
ZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1JlbG9hZCIpKTsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xh
YmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19DVVQpKTsKLSAg
ICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Bhc3Rl
KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0
a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1BBU1RFKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19
Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTm8gR3Vlc3NlcyBGb3VuZCIpKTsKLX0KLQotU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfSWdub3JlIFNwZWxsaW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiX0xlYXJuIFNwZWxsaW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2Vh
cmNoV2ViKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfU2VhcmNoIHRoZSBX
ZWIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnko
Y29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfTG9vayBV
cCBpbiBEaWN0aW9uYXJ5IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9PcGVuIExpbmsiKSk7Ci19
Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJZ25vcmUgX0dyYW1tYXIiKSk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlNwZWxsaW5nIGFuZCBfR3JhbW1hciIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChzaG93ID8gXygiX1Nob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKSA6IF8o
Il9IaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ2hlY2tTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X0NoZWNrIERvY3VtZW50IE5vdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgX1R5cGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiQ2hlY2sgX0dyYW1tYXIgV2l0aCBTcGVsbGluZyIpKTsKLX0KLQotU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJfRm9udCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQo
KQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3Rr
U3RvY2tMYWJlbChHVEtfU1RPQ0tfQk9MRCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5n
IHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0lU
QUxJQykpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnVW5kZXJsaW5lKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJp
bmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1VOREVSTElORSkpOwotICAgIHJl
dHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX091dGxpbmUiKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiSW5zcGVjdCBfRWxlbWVudCIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk1NYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJMUk0gX0xlZnQtdG8tcmlnaHQgbWFyayIpKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE1NYXJrKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJSTE0gX1JpZ2h0LXRvLWxlZnQgbWFyayIpKTsKLX0KLQotU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUkVNYXJrKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJMUkUgTGVmdC10by1yaWdodCBfZW1iZWRkaW5nIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmsoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMRSBSaWdodC10by1sZWZ0IGVfbWJlZGRpbmci
KSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJPTWFyaygp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTFJPIExlZnQtdG8tcmlnaHQgX292
ZXJyaWRlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJM
T01hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMTyBSaWdodC10by1s
ZWZ0IG9fdmVycmlkZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJ
bnNlcnRQREZNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJQREYgX1Bv
cCBkaXJlY3Rpb25hbCBmb3JtYXR0aW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydFpXU01hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlpXUyBfWmVybyB3aWR0aCBzcGFjZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJaV0ogWmVybyB3aWR0aCBfam9pbmVyIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJaV05KIFplcm8gd2lkdGggX25vbi1qb2luZXIiKSk7Ci19Ci0KLVN0cmluZyBzZWFy
Y2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIk5vIHJlY2VudCBzZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5nIHNlYXJjaE1lbnVSZWNl
bnRTZWFyY2hlc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJlY2Vu
dCBzZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5nIHNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVz
VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0NsZWFyIHJlY2VudCBz
ZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5nIEFYRGVmaW5pdGlvblRleHQoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oImRlZmluaXRpb24iKSk7Ci19Ci0KLVN0cmluZyBBWERlc2Ny
aXB0aW9uTGlzdFRlcm1UZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0
ZXJtIikpOwotfQotCi1TdHJpbmcgQVhEZXNjcmlwdGlvbkxpc3REZXRhaWxUZXh0KCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJkZXNjcmlwdGlvbiIpKTsKLX0KLQotU3RyaW5n
IEFYRm9vdGVyUm9sZURlc2NyaXB0aW9uVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiZm9vdGVyIikpOwotfQotCi1TdHJpbmcgQVhCdXR0b25BY3Rpb25WZXJiKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwcmVzcyIpKTsKLX0KLQotU3RyaW5nIEFY
UmFkaW9CdXR0b25BY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJzZWxlY3QiKSk7Ci19Ci0KLVN0cmluZyBBWFRleHRGaWVsZEFjdGlvblZlcmIoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImFjdGl2YXRlIikpOwotfQotCi1TdHJpbmcgQVhD
aGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJ1bmNoZWNrIikpOwotfQotCi1TdHJpbmcgQVhVbmNoZWNrZWRDaGVja0JveEFjdGlvblZl
cmIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImNoZWNrIikpOwotfQotCi1T
dHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygianVtcCIpKTsKLX0KLQotU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKQotewot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFYTWVudUxpc3RBY3Rpb25WZXJiKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAgCi1TdHJpbmcgbWlzc2luZ1BsdWdpblRl
eHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk1pc3NpbmcgUGx1Zy1pbiIp
KTsKLX0KLQotU3RyaW5nIGNyYXNoZWRQbHVnaW5UZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBsdWctaW4gRmFpbHVyZSIpKTsK
LX0KLQotU3RyaW5nIGJsb2NrZWRQbHVnaW5CeUNvbnRlbnRTZWN1cml0eVBvbGljeVRleHQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgaW5zZWN1cmVQbHVnaW5WZXJzaW9uVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpbmFjdGl2ZVBsdWdpblRleHQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgbXVsdGlwbGVGaWxlVXBsb2FkVGV4dCh1bnNpZ25lZCBudW1iZXJPZkZpbGVzKQotewotICAg
IC8vIEZJWE1FOiBJZiB0aGlzIGZpbGUgZ2V0cyBsb2NhbGl6ZWQsIHRoaXMgc2hvdWxkIHJlYWxs
eSBiZSBsb2NhbGl6ZWQgYXMgb25lIHN0cmluZyB3aXRoIGEgd2lsZGNhcmQgZm9yIHRoZSBudW1i
ZXIuCi0gICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG51bWJlck9mRmlsZXMpICsgU3RyaW5nOjpm
cm9tVVRGOChfKCIgZmlsZXMiKSk7Ci19Ci0KLVN0cmluZyB1bmtub3duRmlsZVNpemVUZXh0KCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJVbmtub3duIikpOwotfQotCi1TdHJp
bmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBJbnRTaXplJiBzaXpl
KQotewotICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoQ18oIlRpdGxl
IHN0cmluZyBmb3IgaW1hZ2VzIiwgIiVzICAoJWR4JWQgcGl4ZWxzKSIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgp
KTsKLX0KLQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi1TdHJpbmcgbWVkaWFFbGVtZW50TG9hZGlu
Z1N0YXRlVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTG9hZGluZy4u
LiIpKTsKLX0KLQotU3RyaW5nIG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQoKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxpdmUgQnJvYWRjYXN0IikpOwotfQot
Ci1TdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxlbWVudCIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQgY29udHJvbGxlciIpKTsKLSAgICBp
ZiAobmFtZSA9PSAiVmlkZW9FbGVtZW50IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygidmlkZW8gZWxlbWVudCBjb250cm9sbGVyIikpOwotICAgIGlmIChuYW1lID09ICJNdXRl
QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibXV0ZSIpKTsKLSAg
ICBpZiAobmFtZSA9PSAiVW5NdXRlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygidW5tdXRlIikpOwotICAgIGlmIChuYW1lID09ICJQbGF5QnV0dG9uIikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGxheSIpKTsKLSAgICBpZiAobmFtZSA9PSAi
UGF1c2VCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXVzZSIp
KTsKLSAgICBpZiAobmFtZSA9PSAiU2xpZGVyIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygibW92aWUgdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2xpZGVyVGh1bWIiKQot
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0aW1lbGluZSBzbGlkZXIgdGh1bWIi
KSk7Ci0gICAgaWYgKG5hbWUgPT0gIlJld2luZEJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oImJhY2sgMzAgc2Vjb25kcyIpKTsKLSAgICBpZiAobmFtZSA9PSAiUmV0
dXJuVG9SZWFsdGltZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
InJldHVybiB0byByZWFsdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiQ3VycmVudFRpbWVEaXNw
bGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZWxhcHNlZCB0aW1lIikp
OwotICAgIGlmIChuYW1lID09ICJUaW1lUmVtYWluaW5nRGlzcGxheSIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInJlbWFpbmluZyB0aW1lIikpOwotICAgIGlmIChuYW1lID09
ICJTdGF0dXNEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3Rh
dHVzIikpOwotICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbnRlciBmdWxsc2NyZWVuIikpOwotICAgIGlm
IChuYW1lID09ICJFeGl0RnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oImV4aXQgZnVsbHNjcmVlbiIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2Vla0Zv
cndhcmRCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmYXN0IGZv
cndhcmQiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtCYWNrQnV0dG9uIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZmFzdCByZXZlcnNlIikpOwotICAgIGlmIChuYW1lID09
ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJzaG93IGNsb3NlZCBjYXB0aW9ucyIpKTsKLSAgICBpZiAobmFtZSA9PSAiSGlkZUNs
b3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
aGlkZSBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkNvbnRyb2xzUGFuZWwi
KQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtZWRpYSBjb250cm9scyIpKTsK
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQot
U3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4dChjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxlbWVudCIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQgcGxheWJhY2sgY29udHJvbHMgYW5k
IHN0YXR1cyBkaXNwbGF5IikpOwotICAgIGlmIChuYW1lID09ICJWaWRlb0VsZW1lbnQiKQotICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2aWRlbyBlbGVtZW50IHBsYXliYWNrIGNv
bnRyb2xzIGFuZCBzdGF0dXMgZGlzcGxheSIpKTsKLSAgICBpZiAobmFtZSA9PSAiTXV0ZUJ1dHRv
biIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm11dGUgYXVkaW8gdHJhY2tz
IikpOwotICAgIGlmIChuYW1lID09ICJVbk11dGVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJ1bm11dGUgYXVkaW8gdHJhY2tzIikpOwotICAgIGlmIChuYW1lID09
ICJQbGF5QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYmVnaW4g
cGxheWJhY2siKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlBhdXNlQnV0dG9uIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF1c2UgcGxheWJhY2siKSk7Ci0gICAgaWYgKG5hbWUg
PT0gIlNsaWRlciIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1vdmllIHRp
bWUgc2NydWJiZXIiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlclRodW1iIikKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGltZSBzY3J1YmJlciB0aHVtYiIpKTsK
LSAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygic2VlayBtb3ZpZSBiYWNrIDMwIHNlY29uZHMiKSk7Ci0gICAgaWYgKG5hbWUg
PT0gIlJldHVyblRvUmVhbHRpbWVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJyZXR1cm4gc3RyZWFtaW5nIG1vdmllIHRvIHJlYWwgdGltZSIpKTsKLSAgICBpZiAo
bmFtZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiY3VycmVudCBtb3ZpZSB0aW1lIGluIHNlY29uZHMiKSk7Ci0gICAgaWYgKG5hbWUg
PT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygibnVtYmVyIG9mIHNlY29uZHMgb2YgbW92aWUgcmVtYWluaW5nIikpOwotICAgIGlmIChu
YW1lID09ICJTdGF0dXNEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiY3VycmVudCBtb3ZpZSBzdGF0dXMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtCYWNrQnV0
dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBxdWlja2x5IGJh
Y2siKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtGb3J3YXJkQnV0dG9uIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBxdWlja2x5IGZvcndhcmQiKSk7Ci0gICAgaWYg
KG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIlBsYXkgbW92aWUgaW4gZnVsbHNjcmVlbiBtb2RlIikpOwotICAgIGlmIChu
YW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJFeGl0IGZ1bGxzY3JlZW4gbW9kZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2hv
d0Nsb3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Xygic3RhcnQgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0g
IkhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInN0b3AgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6
ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihmbG9hdCB0aW1lKQotewotICAgIGlmICghc3RkOjppc2Zp
bml0ZSh0aW1lKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiaW5kZWZpbml0
ZSB0aW1lIikpOwotCi0gICAgaW50IHNlY29uZHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGFicyh0aW1l
KSk7Ci0gICAgaW50IGRheXMgPSBzZWNvbmRzIC8gKDYwICogNjAgKiAyNCk7Ci0gICAgaW50IGhv
dXJzID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKLSAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8g
NjApICUgNjA7Ci0gICAgc2Vjb25kcyAlPSA2MDsKLQotICAgIGlmIChkYXlzKSB7Ci0gICAgICAg
IEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIGRheXMgJWQgaG91cnMg
JWQgbWludXRlcyAlZCBzZWNvbmRzIiwgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKTsK
LSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKLSAgICB9Ci0K
LSAgICBpZiAoaG91cnMpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVw
X3ByaW50ZigiJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgaG91cnMsIG1pbnV0ZXMs
IHNlY29uZHMpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgp
KTsKLSAgICB9Ci0KLSAgICBpZiAobWludXRlcykgewotICAgICAgICBHT3duUHRyPGdjaGFyPiBz
dHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBtaW51dGVzICVkIHNlY29uZHMiLCBtaW51dGVzLCBz
ZWNvbmRzKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7
Ci0gICAgfQotCi0gICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQg
c2Vjb25kcyIsIHNlY29uZHMpKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcu
Z2V0KCkpOwotfQotI2VuZGlmICAvLyBFTkFCTEUoVklERU8pCi0KLVN0cmluZyB2YWxpZGF0aW9u
TWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInZhbHVlIG1pc3NpbmciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVl
TWlzc2luZ0ZvckNoZWNrYm94VGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVUZXh0KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQo
KTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlwbGVG
aWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlv
bk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVZhbHVlTWlzc2luZ0ZvclJhZGlvVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmlu
ZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRleHQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5n
VGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
InR5cGUgbWlzbWF0Y2giKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNt
YXRjaEZvckVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0
aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRl
eHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yVVJMVGV4
dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3Nh
Z2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVBhdHRl
cm5NaXNtYXRjaFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBhdHRl
cm4gbWlzbWF0Y2giKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVRvb0xvbmdUZXh0
KGludCwgaW50KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRvbyBsb25nIikp
OwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoY29uc3Qg
U3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyYW5nZSB1bmRlcmZs
b3ciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0KGNv
bnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmFuZ2Ugb3Zl
cmZsb3ciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJzdGVwIG1pc21hdGNoIikpOwotfQotCi1TdHJpbmcgdW5hY2NlcHRhYmxlVExTQ2Vy
dGlmaWNhdGUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlVuYWNjZXB0YWJs
ZSBUTFMgY2VydGlmaWNhdGUiKSk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWRTdHJpbmcoY29uc3Qg
Y2hhcioga2V5KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGtleSwgc3RybGVuKGtl
eSkpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VCYWRJbnB1dEZvck51bWJlclRleHQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdl
VHlwZU1pc21hdGNoVGV4dCgpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotU3RyaW5n
IHRleHRUcmFja0Nsb3NlZENhcHRpb25zVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoQ18oIkNsb3NlZCBDYXB0aW9ucyIsICJNZW51IHNlY3Rpb24gaGVhZGluZyBmb3IgY2xv
c2VkIGNhcHRpb25zIikpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrU3VidGl0bGVzVGV4dCgpCi17
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIlN1YnRpdGxlcyIsICJNZW51IHNlY3Rp
b24gaGVhZGluZyBmb3Igc3VidGl0bGVzIikpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrT2ZmVGV4
dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIk9mZiIsICJNZW51IGl0ZW0g
bGFiZWwgZm9yIHRoZSB0cmFjayB0aGF0IHJlcHJlc2VudHMgZGlzYWJsaW5nIGNsb3NlZCBjYXB0
aW9ucyIpKTsKLX0KLQotU3RyaW5nIHRleHRUcmFja05vTGFiZWxUZXh0KCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiTm8gbGFiZWwiLCAiTWVudSBpdGVtIGxhYmVsIGZvciBh
IGNsb3NlZCBjYXB0aW9ucyB0cmFjayB0aGF0IGhhcyBubyBvdGhlciBuYW1lIikpOwotfQotI2Vu
ZGlmCi0KLVN0cmluZyBzbmFwc2hvdHRlZFBsdWdJbkxhYmVsVGl0bGUoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KENfKCJTbmFwc2hvdHRlZCBQbHVnLUluIiwgIlRpdGxlIG9mIHRo
ZSBsYWJlbCB0byBzaG93IG9uIGEgc25hcHNob3R0ZWQgcGx1Zy1pbiIpKTsKLX0KLQotU3RyaW5n
IHNuYXBzaG90dGVkUGx1Z0luTGFiZWxTdWJ0aXRsZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoQ18oIkNsaWNrIHRvIHJlc3RhcnQiLCAiU3VidGl0bGUgb2YgdGhlIGxhYmVsIHRv
IHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE4OThhZjdkOGJlYmNiZTA1YzlhYmU3ZmY0YTQxZTE3YzkwOGNmOTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0xvZ2dpbmdHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotCi0jaWYgIUxPR19ESVNBQkxFRAotCi0jaW5jbHVkZSA8Z2xpYi5oPgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEluc3BpcmVkIGJ5IHRoZSBjb2RlIHVzZWQgYnkgdGhl
IFF0IHBvcnQKLQotdm9pZCBpbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKQot
ewotICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMgPSBmYWxzZTsK
LSAgICBpZiAoZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscyA9IHRydWU7Ci0KLSAgICBjaGFyKiBs
b2dFbnYgPSBnZXRlbnYoIldFQktJVF9ERUJVRyIpOwotICAgIGlmICghbG9nRW52KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyB3ZSBzZXQgdXAgdGhlIGxvZ3MgYW55d2F5IGJlY2F1c2Ugc29t
ZSBvZiBvdXIgbG9nZ2luZywgc3VjaCBhcwotICAgIC8vIHNvdXAncyBpcyBhdmFpbGFibGUgaW4g
cmVsZWFzZSBidWlsZHMKLSNpZiBkZWZpbmVkKE5ERUJVRykKLSAgICBnX3dhcm5pbmcoIldFQktJ
VF9ERUJVRyBpcyBub3QgZW1wdHksIGJ1dCB0aGlzIGlzIGEgcmVsZWFzZSBidWlsZC4gTm90aWNl
IHRoYXQgbWFueSBsb2cgbWVzc2FnZXMgd2lsbCBvbmx5IGFwcGVhciBpbiBhIGRlYnVnIGJ1aWxk
LiIpOwotI2VuZGlmCi0KLSAgICBjaGFyKiogbG9ndiA9IGdfc3Ryc3BsaXQobG9nRW52LCAiICIs
IC0xKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBsb2d2W2ldOyBpKyspIHsKLSAgICAgICAgaWYg
KFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwgPSBnZXRDaGFubmVsRnJvbU5hbWUobG9ndltpXSkpCi0g
ICAgICAgICAgICBjaGFubmVsLT5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLSAgICB9Ci0KLSAg
ICBnX3N0cmZyZWV2KGxvZ3YpOwotCi0gICAgLy8gdG8gZGlzYWJsZSBsb2dnaW5nIG5vdEltcGxl
bWVudGVkIHNldCB0aGUgRElTQUJMRV9OSV9XQVJOSU5HCi0gICAgLy8gZW52aXJvbm1lbnQgdmFy
aWFibGUgdG8gMQotICAgIExvZ05vdFlldEltcGxlbWVudGVkLnN0YXRlID0gV1RGTG9nQ2hhbm5l
bE9uOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhTE9HX0RJU0FC
TEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdp
c3RyeUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3Ry
eUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2YxNGNkOGRmN2E1NjJi
MDJlYzMyYjhkZmEyZjRjZjk2ZmIyYjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0
cnlHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKLSAg
ICBjb25zdCBjaGFyKiBleHRlbnNpb247Ci0gICAgY29uc3QgY2hhciogbWltZVR5cGU7Ci19Owot
Ci1zdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKLSAgICB7ICJi
bXAiLCAiaW1hZ2UvYm1wIiB9LAotICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKLSAgICB7ICJn
aWYiLCAiaW1hZ2UvZ2lmIiB9LAotICAgIHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAi
aHRtbCIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwKLSAg
ICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWciIH0s
Ci0gICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBkZiIs
ICJhcHBsaWNhdGlvbi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAgICB7
ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJzdmciLCAiaW1hZ2Uvc3Zn
K3htbCIgfSwKLSAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAidHh0IiwgInRl
eHQvcGxhaW4iIH0sCi0gICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKLSAgICB7ICJ4
bWwiLCAidGV4dC94bWwiIH0sCi0gICAgeyAieHNsIiwgInRleHQveHNsIiB9LAotICAgIHsgInho
dG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKLSAgICB7ICJ3bWwiLCAidGV4dC92bmQu
d2FwLndtbCIgfSwKLSAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIgfSwK
LSAgICB7IDAsIDAgfQotfTsKLQotU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOwotICAgIGNvbnN0IEV4dGVuc2lv
bk1hcCAqZSA9IGV4dGVuc2lvbk1hcDsKLSAgICB3aGlsZSAoZS0+ZXh0ZW5zaW9uKSB7Ci0gICAg
ICAgIGlmIChzID09IGUtPmV4dGVuc2lvbikKLSAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlw
ZTsKLSAgICAgICAgKytlOwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9v
bCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGYxYzFjYzgzYTAyMzQ5OGMxYWIyYjg0ZGMxMDllOWE5YzVmODUw
YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZwotICogIENvcHlyaWdo
dCAoQykgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKiAgQ29w
eXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgiCi0KLSNpbmNs
dWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlNj
cm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotUGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+IE1haW5GcmFtZVNj
cm9sbGJhckd0azo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
YWluRnJhbWVTY3JvbGxiYXJHdGsoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uKSk7Ci19Ci0K
LS8vIEEgTWFpbkZyYW1lU2Nyb2xsYmFyIGlzIGp1c3QgYSBub24tcGFpbnRpbmcgc2Nyb2xsYmFy
LiBPdGhlcndpc2UgaXQgaXMgZnVsbHkKLS8vIGZ1bmN0aW9uYWwuIEEgbm9uLXBhaW50aW5nIHNj
cm9sbGJhciBhbGxvd3MgYSBtYWluLWZyYW1lIFNjcm9sbFZpZXcgdG8gdXNlCi0vLyBhIGNvbnRh
aW5pbmcgR3RrU2Nyb2xsZWRXaW5kb3cgYXMgaXRzIHVzZXIgaW50ZXJmYWNlLiBUaGUgQ2hyb21l
Q2xpZW50IGluIHRoZQotLy8gV2ViS2l0IGxheWVyIGp1c3QgbGlzdGVucyBmb3Igc2Nyb2xsaW5n
IGFuZCBzaXppbmcgY2hhbmdlcyBhbmQgdXBkYXRlcyBpdHMKLS8vIGNvbnRhaW5lciAodGhlIEd0
a1Njcm9sbGVkV2luZG93KSBhY2NvcmRpbmdseS4gVGhlIFNjcm9sbFZpZXcgaXMgcmVzcG9uc2li
bGUKLS8vIGZvciBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBNYWluRnJhbWVT
Y3JvbGxiYXIgb3IgbmF0aXZlIHNjcm9sbGJhci4KLU1haW5GcmFtZVNjcm9sbGJhckd0azo6TWFp
bkZyYW1lU2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi0gICAgOiBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFy
ZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKQotewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gdGFrZSB1cCBhbnkgc3BhY2UuCi0gICAgcmVzaXplKDAsIDApOwotfQotCi12b2lkIE1h
aW5GcmFtZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIE1haW4gZnJhbWUgc2Nyb2xsYmFycyBhcmUgbm90
IHBhaW50ZWQgYnkgV2ViQ29yZS4KLSAgICByZXR1cm47Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdiOGNiNjM4ZmRhY2M5YjBjMjVjNjA0ODE4NWQ3NTBhNzBmNTQwZjcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLQotI2lmbmRlZiBNYWluRnJhbWVTY3Jv
bGxiYXJHdGtfaAotI2RlZmluZSBNYWluRnJhbWVTY3JvbGxiYXJHdGtfaAotCi0jaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBNYWluRnJhbWVTY3JvbGxiYXJHdGsgOiBwdWJsaWMgU2Nyb2xsYmFy
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+
IGNyZWF0ZShTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi1wcml2
YXRlOgotICAgIE1haW5GcmFtZVNjcm9sbGJhckd0ayhTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJh
ck9yaWVudGF0aW9uKTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNjcm9sbGJhckd0a19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdhN2EzZjk3OTk1MGFmZDhhNjhkYTRjMDE1ZjMxODk0OTRjMzFi
OTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjEyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgi
Ci0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAi
S1VSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291
cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVySW1hZ2Uu
aCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpCi17Ci0gICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2Fy
ZCgpOwotICAgIHJldHVybiBwYXN0ZWJvYXJkOwotfQotCi1QYXN0ZWJvYXJkOjpQYXN0ZWJvYXJk
KCkKLXsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0
ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQotewotICAg
IFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCk7Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdl
dEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwotCi0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVj
dCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIGRhdGFPYmpl
Y3QtPmNsZWFyQWxsKCk7Ci0KLSAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0b3Io
KS0+c2VsZWN0ZWRUZXh0KCkpOwotICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJr
dXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29s
dmVOb25Mb2NhbFVSTHMpKTsKLSAgICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xp
cGJvYXJkLCBjYW5TbWFydENvcHlPckRlbGV0ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVT
bWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Ci19
Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBT
bWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBsYWNlT3B0aW9uKQotewotICAgIEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlf
Z2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIERhdGFPYmplY3RH
dGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsK
LSAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0
ZXh0KTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCwKLSAgICAgICAgKHNtYXJ0UmVwbGFjZU9w
dGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0
UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKLX0KLQot
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bGFiZWwsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7Ci0KLSAgICBEYXRhT2JqZWN0
R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7
Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIGRhdGFPYmplY3QtPnNldFVSTCh1
cmwsIGxhYmVsKTsKLSAgICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJk
KTsKLX0KLQotc3RhdGljIEtVUkwgZ2V0VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCi17Ci0g
ICAgLy8gRklYTUU6IExhdGVyIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21p
dW0gc29tZWhvdy4gQ2hhbmNlcyBhcmUgYWxsIHBsYXRmb3JtcyB3YW50IGl0LgotICAgIEF0b21p
Y1N0cmluZyB1cmxTdHJpbmc7Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
bWdUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCi0gICAgICAg
IHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6c3JjQXR0cik7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBlbHNlIGlmIChub2RlLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRy
KTsKLSNlbmRpZgotICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJl
ZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpIHsKLSAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICAg
ICAgdXJsU3RyaW5nID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNl
QXR0cmlidXRlTmFtZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkg
PyBLVVJMKCkgOiBub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsK
LSAgICBBU1NFUlQobm9kZSk7Ci0KLSAgICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUt
PnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlcklt
YWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYg
KCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIo
cmVuZGVyZXIpOwotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBi
b2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZh
dWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgZGF0
YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIEtVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VOb2Rl
KG5vZGUpOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBkYXRhT2JqZWN0LT5z
ZXRVUkwodXJsLCB0aXRsZSk7Ci0KLSAgICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0
ZU1hcmt1cChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNv
bHZlQWxsVVJMcykpOwotICAgIH0KLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBh
ZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXRJbWFn
ZShwaXhidWYuZ2V0KCkpOwotCi0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOwotfQotCi12b2lk
IFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJkKENsaXBib2FyZCogY2xpcGJvYXJkKQotewotICAg
IEd0a0NsaXBib2FyZCogZ3RrQ2xpcGJvYXJkID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkR3RrKj4o
Y2xpcGJvYXJkKS0+Y2xpcGJvYXJkKCk7Ci0gICAgaWYgKGd0a0NsaXBib2FyZCkKLSAgICAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9h
cmRDb250ZW50cyhndGtDbGlwYm9hcmQpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkK
LXsKLSAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5
KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSk7Ci19
Ci0KLWJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsKLSAgICByZXR1cm4gUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29udGVu
dFN1cHBvcnRzU21hcnRSZXBsYWNlKAotICAgICAgICBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlz
cGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkp
OwotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50
RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIFBhc3RlYm9hcmRI
ZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCk7Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlw
Ym9hcmQoZnJhbWUpOwotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0
R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBoZWxwZXItPmdldENsaXBib2FyZENv
bnRlbnRzKGNsaXBib2FyZCk7Ci0KLSAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotCi0gICAg
aWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1l
bnQoKSwgZGF0YU9iamVjdC0+bWFya3VwKCksICIiLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdp
bkNvbnRlbnRJZk5lZWRlZCk7Ci0gICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFhbGxvd1BsYWluVGV4
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7
Ci0gICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgp
LCBkYXRhT2JqZWN0LT50ZXh0KCkpOwotICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQot
Ci1TdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBQYXN0
ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJy
ZW50Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0KLSAgICBoZWxwZXItPmdldENs
aXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQo
KTsKLX0KLQotYm9vbCBQYXN0ZWJvYXJkOjppc1NlbGVjdGlvbk1vZGUoKSBjb25zdAotewotICAg
IHJldHVybiBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT51c2VQ
cmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6c2V0U2Vs
ZWN0aW9uTW9kZShib29sIHNlbGVjdGlvbk1vZGUpCi17Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+c2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2Fy
ZChzZWxlY3Rpb25Nb2RlKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
NmE5NzU0MzcwNzhjYmViNjgxMTE5OWYxZGVjMjUwOTE4YmE4MzE4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgi
Ci0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNv
ZGVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR2RrQXRvbSB0ZXh0UGxhaW5B
dG9tOwotc3RhdGljIEdka0F0b20gbWFya3VwQXRvbTsKLXN0YXRpYyBHZGtBdG9tIG5ldHNjYXBl
VVJMQXRvbTsKLXN0YXRpYyBHZGtBdG9tIHVyaUxpc3RBdG9tOwotc3RhdGljIEdka0F0b20gc21h
cnRQYXN0ZUF0b207Ci1zdGF0aWMgU3RyaW5nIGdNYXJrdXBQcmVmaXg7Ci0KLXN0YXRpYyB2b2lk
IHJlbW92ZU1hcmt1cFByZWZpeChTdHJpbmcmIG1hcmt1cCkKLXsKLSAgICAvLyBUaGUgbWFya3Vw
IHByZWZpeCBpcyBub3QgaGFybWZ1bCwgYnV0IHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBzdHJpbmcg
YW55d2F5LCBzbyB0aGF0Ci0gICAgLy8gd2UgY2FuIGhhdmUgY29uc2lzdGVudCByZXN1bHRzIHdp
dGggb3RoZXIgcG9ydHMgZHVyaW5nIHRoZSBsYXlvdXQgdGVzdHMuCi0gICAgaWYgKG1hcmt1cC5z
dGFydHNXaXRoKGdNYXJrdXBQcmVmaXgpKQotICAgICAgICBtYXJrdXAucmVtb3ZlKDAsIGdNYXJr
dXBQcmVmaXgubGVuZ3RoKCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbml0R2RrQXRvbXMoKQotewot
ICAgIHN0YXRpYyBnYm9vbGVhbiBpbml0aWFsaXplZCA9IEZBTFNFOwotCi0gICAgaWYgKGluaXRp
YWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0aWFsaXplZCA9IFRSVUU7Ci0KLSAg
ICB0ZXh0UGxhaW5BdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRm
LTgiLCBGQUxTRSk7Ci0gICAgbWFya3VwQXRvbSA9IGdka19hdG9tX2ludGVybigidGV4dC9odG1s
IiwgRkFMU0UpOwotICAgIG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9tX2ludGVybigiX05FVFND
QVBFX1VSTCIsIEZBTFNFKTsKLSAgICB1cmlMaXN0QXRvbSA9IGdka19hdG9tX2ludGVybigidGV4
dC91cmktbGlzdCIsIEZBTFNFKTsKLSAgICBzbWFydFBhc3RlQXRvbSA9IGdka19hdG9tX2ludGVy
bigiYXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5zbWFydHBhc3RlIiwgRkFMU0UpOwotICAgIGdN
YXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9
XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj4iOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyKiBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChQYXN0ZWJvYXJkSGVscGVyLCBkZWZhdWx0SGVscGVyLCAoKSk7Ci0gICAg
cmV0dXJuICZkZWZhdWx0SGVscGVyOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyOjpQYXN0ZWJvYXJk
SGVscGVyKCkKLSAgICA6IG1fdGFyZ2V0TGlzdChndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApKQot
ICAgICwgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZhbHNlKQotewotICAgIGluaXRH
ZGtBdG9tcygpOwotCi0gICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobV90YXJn
ZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlVGV4dCk7Ci0gICAgZ3RrX3Rhcmdl
dF9saXN0X2FkZChtX3RhcmdldExpc3QsIG1hcmt1cEF0b20sIDAsIFBhc3RlYm9hcmRIZWxwZXI6
OlRhcmdldFR5cGVNYXJrdXApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMo
bV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlVVJJTGlzdCk7Ci0gICAg
Z3RrX3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QsIG5ldHNjYXBlVVJMQXRvbSwgMCwgUGFz
dGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKLSAgICBndGtfdGFyZ2V0X2xp
c3RfYWRkX2ltYWdlX3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJn
ZXRUeXBlSW1hZ2UsIFRSVUUpOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhl
bHBlcigpCi17Ci0gICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKG1fdGFyZ2V0TGlzdCk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgR2RrRGlzcGxheSogZGlzcGxheUZyb21GcmFtZShGcmFtZSogZnJhbWUp
Ci17Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
LSAgICBBU1NFUlQocGFnZSk7Ci0gICAgQ2hyb21lKiBjaHJvbWUgPSBwYWdlLT5jaHJvbWUoKTsK
LSAgICBBU1NFUlQoY2hyb21lKTsKLSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50ID0gY2hy
b21lLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICByZXR1cm4gY2xpZW50ID8gZ3RrX3dpZGdl
dF9nZXRfZGlzcGxheShjbGllbnQpIDogZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKTsKLX0KLQot
R3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDdXJyZW50Q2xpcGJvYXJkKEZyYW1l
KiBmcmFtZSkKLXsKLSAgICBpZiAobV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKQotICAg
ICAgICByZXR1cm4gZ2V0UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChmcmFtZSk7Ci0gICAgcmV0
dXJuIGdldENsaXBib2FyZChmcmFtZSk7Ci19Ci0KLUd0a0NsaXBib2FyZCogUGFzdGVib2FyZEhl
bHBlcjo6Z2V0Q2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3Rr
X2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZGlzcGxheUZyb21GcmFtZShmcmFtZSksIEdES19T
RUxFQ1RJT05fQ0xJUEJPQVJEKTsKLX0KLQotR3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJkSGVscGVy
OjpnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZGlzcGxheUZyb21GcmFtZShm
cmFtZSksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7Ci19Ci0KLUd0a1RhcmdldExpc3QqIFBhc3Rl
Ym9hcmRIZWxwZXI6OnRhcmdldExpc3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3RhcmdldExp
c3Q7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhHdGtTZWxl
Y3Rpb25EYXRhKiBkYXRhKQotewotICAgIC8vIGdfc3RybmR1cCBndWFyZHMgYWdhaW5zdCBzZWxl
Y3Rpb24gZGF0YSB0aGF0IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0gICAgR093blB0cjxnY2hh
cj4gbWFya3VwU3RyaW5nKGdfc3RybmR1cChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihn
dGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkpLCBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0
X2xlbmd0aChkYXRhKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KG1hcmt1cFN0cmlu
Zy5nZXQoKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkQ29udGVu
dHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCi17Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIEFTU0VS
VChkYXRhT2JqZWN0KTsKLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9hdmFp
bGFibGUoY2xpcGJvYXJkKSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXh0RGF0YShndGtf
Y2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xpcGJvYXJkKSk7Ci0gICAgICAgIGlmICh0ZXh0RGF0
YSkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0
RGF0YS5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFy
Z2V0X2F2YWlsYWJsZShjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgIGlmIChHdGtT
ZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlw
Ym9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya3VwKHNlbGVjdGlv
bkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4
KG1hcmt1cCk7Ci0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKLSAg
ICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBi
b2FyZCwgdXJpTGlzdEF0b20pKSB7Ci0gICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRh
ID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIHVyaUxpc3RBdG9t
KSkgewotICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9V
VEY4U3RyaW5nKGRhdGEpKTsKLSAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRh
dGEpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxT
ZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8s
IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCi17Ci0gICAgaWYgKGluZm8gPT0gVGFyZ2V0VHlw
ZVRleHQpCi0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rpb25EYXRh
LCBkYXRhT2JqZWN0LT50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOwotCi0gICAgZWxzZSBpZiAo
aW5mbyA9PSBUYXJnZXRUeXBlTWFya3VwKSB7Ci0gICAgICAgIC8vIFNvbWUgTGludXggYXBwbGlj
YXRpb25zIHJlZnVzZSB0byBhY2NlcHQgcGFzdGVkIG1hcmt1cCB1bmxlc3MgaXQgaXMKLSAgICAg
ICAgLy8gcHJlZml4ZWQgYnkgYSBjb250ZW50LXR5cGUgbWV0YSB0YWcuCi0gICAgICAgIENTdHJp
bmcgbWFya3VwID0gU3RyaW5nKGdNYXJrdXBQcmVmaXggKyBkYXRhT2JqZWN0LT5tYXJrdXAoKSku
dXRmOCgpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG1h
cmt1cEF0b20sIDgsCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+
KG1hcmt1cC5kYXRhKCkpLCBtYXJrdXAubGVuZ3RoKCkgKyAxKTsKLQotICAgIH0gZWxzZSBpZiAo
aW5mbyA9PSBUYXJnZXRUeXBlVVJJTGlzdCkgewotICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBk
YXRhT2JqZWN0LT51cmlMaXN0KCkudXRmOCgpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFf
c2V0KHNlbGVjdGlvbkRhdGEsIHVyaUxpc3RBdG9tLCA4LAotICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBndWNoYXIqPih1cmlMaXN0LmRhdGEoKSksIHVyaUxpc3QubGVuZ3RoKCkg
KyAxKTsKLQotICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTmV0c2NhcGVVUkwgJiYg
ZGF0YU9iamVjdC0+aGFzVVJMKCkpIHsKLSAgICAgICAgU3RyaW5nIHVybChkYXRhT2JqZWN0LT51
cmwoKSk7Ci0gICAgICAgIFN0cmluZyByZXN1bHQodXJsKTsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiXG4iKTsKLQotICAgICAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChkYXRhT2JqZWN0LT50ZXh0KCkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHVybCk7Ci0KLSAgICAgICAgR093blB0cjxnY2hhcj4gcmVz
dWx0RGF0YShnX3N0cmR1cChyZXN1bHQudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBndGtfc2Vs
ZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG5ldHNjYXBlVVJMQXRvbSwgOCwKLSAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4ocmVzdWx0RGF0YS5nZXQoKSks
IHN0cmxlbihyZXN1bHREYXRhLmdldCgpKSArIDEpOwotCi0gICAgfSBlbHNlIGlmIChpbmZvID09
IFRhcmdldFR5cGVJbWFnZSkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF9waXhidWYo
c2VsZWN0aW9uRGF0YSwgZGF0YU9iamVjdC0+aW1hZ2UoKSk7Ci0KLSAgICBlbHNlIGlmIChpbmZv
ID09IFRhcmdldFR5cGVTbWFydFBhc3RlKQotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0
X3RleHQoc2VsZWN0aW9uRGF0YSwgIiIsIC0xKTsKLX0KLQotR3RrVGFyZ2V0TGlzdCogUGFzdGVi
b2FyZEhlbHBlcjo6dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCwgU21hcnRQYXN0ZUluY2x1c2lvbiBzaG91bGRJbmx1ZGVTbWFydFBhc3RlKQotewotICAg
IEd0a1RhcmdldExpc3QqIGxpc3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApOwotCi0gICAg
aWYgKGRhdGFPYmplY3QtPmhhc1RleHQoKSkKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF90
ZXh0X3RhcmdldHMobGlzdCwgVGFyZ2V0VHlwZVRleHQpOwotCi0gICAgaWYgKGRhdGFPYmplY3Qt
Pmhhc01hcmt1cCgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QsIG1hcmt1cEF0
b20sIDAsIFRhcmdldFR5cGVNYXJrdXApOwotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc1VSSUxp
c3QoKSkgewotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QsIFRh
cmdldFR5cGVVUklMaXN0KTsKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCBuZXRz
Y2FwZVVSTEF0b20sIDAsIFRhcmdldFR5cGVOZXRzY2FwZVVSTCk7Ci0gICAgfQotCi0gICAgaWYg
KGRhdGFPYmplY3QtPmhhc0ltYWdlKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1h
Z2VfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotCi0gICAgaWYgKHNob3Vs
ZElubHVkZVNtYXJ0UGFzdGUgPT0gSW5jbHVkZVNtYXJ0UGFzdGUpCi0gICAgICAgIGd0a190YXJn
ZXRfbGlzdF9hZGQobGlzdCwgc21hcnRQYXN0ZUF0b20sIDAsIFRhcmdldFR5cGVTbWFydFBhc3Rl
KTsKLQotICAgIHJldHVybiBsaXN0OwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxE
YXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEsIGd1aW50IGluZm8s
IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCi17Ci0gICAgaWYgKCFndGtfc2VsZWN0aW9uX2Rh
dGFfZ2V0X2RhdGEoZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdka0F0b20gdGFyZ2V0
ID0gZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90YXJnZXQoZGF0YSk7Ci0gICAgaWYgKHRhcmdldCA9
PSB0ZXh0UGxhaW5BdG9tKQotICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHNlbGVjdGlvbkRh
dGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBtYXJrdXBBdG9t
KSB7Ci0gICAgICAgIFN0cmluZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRh
KSk7Ci0gICAgICAgIHJlbW92ZU1hcmt1cFByZWZpeChtYXJrdXApOwotICAgICAgICBkYXRhT2Jq
ZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKLSAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSB1cmlMaXN0
QXRvbSkgewotICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFUb1VU
RjhTdHJpbmcoZGF0YSkpOwotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IG5ldHNjYXBlVVJMQXRv
bSkgewotICAgICAgICBTdHJpbmcgdXJsV2l0aExhYmVsKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJp
bmcoZGF0YSkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwaWVjZXM7Ci0gICAgICAgIHVybFdp
dGhMYWJlbC5zcGxpdCgiXG4iLCBwaWVjZXMpOwotCi0gICAgICAgIC8vIEdpdmUgcHJlZmVyZW5j
ZSB0byB0ZXh0L3VyaS1saXN0IGhlcmUsIGFzIGl0IGNhbiBob2xkIG1vcmUKLSAgICAgICAgLy8g
dGhhbiBvbmUgVVJJIGJ1dCBzdGlsbCB0YWtlICB0aGUgbGFiZWwgaWYgdGhlcmUgaXMgb25lLgot
ICAgICAgICBpZiAoIWRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkKLSAgICAgICAgICAgIGRhdGFP
YmplY3QtPnNldFVSSUxpc3QocGllY2VzWzBdKTsKLSAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkg
PiAxKQotICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChwaWVjZXNbMV0pOwotICAgIH0K
LX0KLQotVmVjdG9yPEdka0F0b20+IFBhc3RlYm9hcmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRl
eHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIC8v
IEFsd2F5cyBzZWFyY2ggZm9yIHRoZXNlIGNvbW1vbiBhdG9tcy4KLSAgICBWZWN0b3I8R2RrQXRv
bT4gZHJvcEF0b21zOwotICAgIGRyb3BBdG9tcy5hcHBlbmQodGV4dFBsYWluQXRvbSk7Ci0gICAg
ZHJvcEF0b21zLmFwcGVuZChtYXJrdXBBdG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKHVyaUxp
c3RBdG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKG5ldHNjYXBlVVJMQXRvbSk7Ci0KLSAgICAv
LyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUgbW9zdCBhcHBsaWNhYmxlIGltYWdlIHR5cGUu
Ci0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0a190YXJnZXRf
bGlzdF9uZXcoMCwgMCkpOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhs
aXN0LmdldCgpLCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIEdka0F0b20gYXRvbSA9IGd0
a19kcmFnX2Rlc3RfZmluZF90YXJnZXQod2lkZ2V0LCBjb250ZXh0LCBsaXN0LmdldCgpKTsKLSAg
ICBpZiAoYXRvbSAhPSBHREtfTk9ORSkKLSAgICAgICAgZHJvcEF0b21zLmFwcGVuZChhdG9tKTsK
LQotICAgIHJldHVybiBkcm9wQXRvbXM7Ci19Ci0KLXN0YXRpYyBEYXRhT2JqZWN0R3RrKiBzZXR0
aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIGdldENsaXBib2FyZENv
bnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEd0a1NlbGVjdGlvbkRhdGEg
KnNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgRGF0YU9i
amVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9h
cmQpOwotICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBp
bmZvLCBkYXRhT2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJDbGlwYm9hcmRDb250ZW50
c0NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRlciBkYXRhKQotewotICAg
IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQo
Y2xpcGJvYXJkKTsKLSAgICBBU1NFUlQoZGF0YU9iamVjdCk7Ci0KLSAgICAvLyBPbmx5IGNsZWFy
IHRoZSBEYXRhT2JqZWN0IGZvciB0aGlzIGNsaXBib2FyZCBpZiB3ZSBhcmUgbm90IGN1cnJlbnRs
eSBzZXR0aW5nIGl0LgotICAgIGlmIChkYXRhT2JqZWN0ICE9IHNldHRpbmdDbGlwYm9hcmREYXRh
T2JqZWN0KQotICAgICAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgaWYgKCFkYXRh
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBzdGF0aWNfY2Fz
dDxHQ2xvc3VyZSo+KGRhdGEpOwotICAgIEdWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gezAsIHt7MH19
fTsKLSAgICBnX3ZhbHVlX2luaXQoJmZpcnN0QXJndW1lbnQsIEdfVFlQRV9QT0lOVEVSKTsKLSAg
ICBnX3ZhbHVlX3NldF9wb2ludGVyKCZmaXJzdEFyZ3VtZW50LCBjbGlwYm9hcmQpOwotICAgIGdf
Y2xvc3VyZV9pbnZva2UoY2FsbGJhY2ssIDAsIDEsICZmaXJzdEFyZ3VtZW50LCAwKTsKLSAgICBn
X2Nsb3N1cmVfdW5yZWYoY2FsbGJhY2spOwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6Ondy
aXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIFNtYXJ0UGFzdGVJ
bmNsdXNpb24gaW5jbHVkZVNtYXJ0UGFzdGUsIEdDbG9zdXJlKiBjYWxsYmFjaykKLXsKLSAgICBE
YXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNs
aXBib2FyZCk7Ci0gICAgR3RrVGFyZ2V0TGlzdCogbGlzdCA9IHRhcmdldExpc3RGb3JEYXRhT2Jq
ZWN0KGRhdGFPYmplY3QsIGluY2x1ZGVTbWFydFBhc3RlKTsKLQotICAgIGludCBudW1iZXJPZlRh
cmdldHM7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhYmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdf
ZnJvbV9saXN0KGxpc3QsICZudW1iZXJPZlRhcmdldHMpOwotCi0gICAgaWYgKG51bWJlck9mVGFy
Z2V0cyA+IDAgJiYgdGFibGUpIHsKLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3Qg
PSBkYXRhT2JqZWN0OwotCi0gICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShjbGlw
Ym9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICBnZXRDbGlwYm9hcmRD
b250ZW50c0NhbGxiYWNrLCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNhbGxiYWNr
KTsKLSAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfY2FuX3N0b3JlKGNsaXBib2FyZCwgMCwgMCk7
Ci0KLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSAwOwotCi0gICAgfSBlbHNl
Ci0gICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJvYXJkKTsKLQotICAgIGlmICh0YWJs
ZSkKLSAgICAgICAgZ3RrX3RhcmdldF90YWJsZV9mcmVlKHRhYmxlLCBudW1iZXJPZlRhcmdldHMp
OwotICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihsaXN0KTsKLX0KLQotYm9vbCBQYXN0ZWJvYXJk
SGVscGVyOjpjbGlwYm9hcmRDb250ZW50U3VwcG9ydHNTbWFydFJlcGxhY2UoR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQpCi17Ci0gICAgcmV0dXJuIGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRf
YXZhaWxhYmxlKGNsaXBib2FyZCwgc21hcnRQYXN0ZUF0b20pOwotfQotCi19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0MjM4ZjgwZGQ4MWZjZTZmNzRmOWVkMjU2NzQxYzQ2YmY4N2Q4OTVi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEx1Y2EgQnJ1bm8gPGxldGhh
bG1hbjg4QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmlu
c29uQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFBhc3RlYm9hcmRIZWxwZXJfaAotI2RlZmlu
ZSBQYXN0ZWJvYXJkSGVscGVyX2gKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRGF0YU9iamVjdEd0azsKLQotY2xhc3MgUGFzdGVib2FyZEhlbHBl
ciB7Ci1wdWJsaWM6Ci0gICAgUGFzdGVib2FyZEhlbHBlcigpOwotICAgIHZpcnR1YWwgflBhc3Rl
Ym9hcmRIZWxwZXIoKTsKLSAgICBzdGF0aWMgUGFzdGVib2FyZEhlbHBlciogZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKTsKLQotICAgIHZvaWQgc2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2Fy
ZChib29sIHVzZVByaW1hcnkpIHsgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkID0gdXNl
UHJpbWFyeTsgfQotICAgIGJvb2wgdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCgpIHsgcmV0
dXJuIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsgfQotCi0gICAgZW51bSBTbWFydFBh
c3RlSW5jbHVzaW9uIHsgSW5jbHVkZVNtYXJ0UGFzdGUsIERvTm90SW5jbHVkZVNtYXJ0UGFzdGUg
fTsKLQotICAgIEd0a0NsaXBib2FyZCogZ2V0Q3VycmVudENsaXBib2FyZChGcmFtZSopOwotICAg
IEd0a0NsaXBib2FyZCogZ2V0Q2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7Ci0gICAgR3RrQ2xpcGJv
YXJkKiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7Ci0gICAgR3Rr
VGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCgpIGNvbnN0OwotICAgIEd0a1RhcmdldExpc3QqIHRhcmdl
dExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqLCBTbWFydFBhc3RlSW5jbHVzaW9uID0g
RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Ci0gICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtT
ZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKLSAgICB2b2lkIGZpbGxEYXRh
T2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCwgRGF0YU9iamVjdEd0
ayopOwotICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXNGb3JDb250ZXh0KEd0a1dpZGdldCos
IEdka0RyYWdDb250ZXh0Kik7Ci0gICAgdm9pZCB3cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0Ns
aXBib2FyZCosIFNtYXJ0UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1ZGVTbWFydFBhc3RlLCBH
Q2xvc3VyZSogPSAwKTsKLSAgICB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2Fy
ZCopOwotCi0gICAgZW51bSBQYXN0ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVNYXJrdXAs
IFRhcmdldFR5cGVUZXh0LCBUYXJnZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklMaXN0LCBUYXJn
ZXRUeXBlTmV0c2NhcGVVUkwsIFRhcmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRUeXBlVW5rbm93
biB9OwotICAgIGJvb2wgY2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKEd0a0Ns
aXBib2FyZCopOwotCi1wcml2YXRlOgotICAgIEd0a1RhcmdldExpc3QqIG1fdGFyZ2V0TGlzdDsK
LSAgICBib29sIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIFBhc3RlYm9hcmRIZWxwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzA2ZDZlMjVjOTkwMDVhMjQyMDBjYTlkNGYwNTAyNTVmZTIyZjRjNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDYzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJXaW5kb3dzS2V5Ym9h
cmRDb2Rlcy5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdkay9nZGtrZXlz
eW1zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2UgdGhp
cyB0byBtaXJyb3IKLS8vIG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVyYXRl
IHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCi0vLyBhdCBidWlsZCB0aW1lLgotU3RyaW5nIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUodW5zaWduZWQga2V5
Q29kZSkKLXsKLSAgICBzd2l0Y2ggKGtleUNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfTWVudToK
LSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9SOgotICAgICAg
ICAgICAgcmV0dXJuICJBbHQiOwotICAgICAgICBjYXNlIEdES19DbGVhcjoKLSAgICAgICAgICAg
IHJldHVybiAiQ2xlYXIiOwotICAgICAgICBjYXNlIEdES19Eb3duOgotICAgICAgICAgICAgcmV0
dXJuICJEb3duIjsKLSAgICAgICAgICAgIC8vICJFbmQiCi0gICAgICAgIGNhc2UgR0RLX0VuZDoK
LSAgICAgICAgICAgIHJldHVybiAiRW5kIjsKLSAgICAgICAgICAgIC8vICJFbnRlciIKLSAgICAg
ICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKLSAgICAg
ICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7Ci0gICAgICAg
IGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOwotICAgICAg
ICBjYXNlIEdES19GMToKLSAgICAgICAgICAgIHJldHVybiAiRjEiOwotICAgICAgICBjYXNlIEdE
S19GMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwotICAgICAgICBjYXNlIEdES19GMzoKLSAg
ICAgICAgICAgIHJldHVybiAiRjMiOwotICAgICAgICBjYXNlIEdES19GNDoKLSAgICAgICAgICAg
IHJldHVybiAiRjQiOwotICAgICAgICBjYXNlIEdES19GNToKLSAgICAgICAgICAgIHJldHVybiAi
RjUiOwotICAgICAgICBjYXNlIEdES19GNjoKLSAgICAgICAgICAgIHJldHVybiAiRjYiOwotICAg
ICAgICBjYXNlIEdES19GNzoKLSAgICAgICAgICAgIHJldHVybiAiRjciOwotICAgICAgICBjYXNl
IEdES19GODoKLSAgICAgICAgICAgIHJldHVybiAiRjgiOwotICAgICAgICBjYXNlIEdES19GOToK
LSAgICAgICAgICAgIHJldHVybiAiRjkiOwotICAgICAgICBjYXNlIEdES19GMTA6Ci0gICAgICAg
ICAgICByZXR1cm4gIkYxMCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMToKLSAgICAgICAgICAgIHJl
dHVybiAiRjExIjsKLSAgICAgICAgY2FzZSBHREtfRjEyOgotICAgICAgICAgICAgcmV0dXJuICJG
MTIiOwotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMyI7Ci0g
ICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgICAgIHJldHVybiAiRjE0IjsKLSAgICAgICAg
Y2FzZSBHREtfRjE1OgotICAgICAgICAgICAgcmV0dXJuICJGMTUiOwotICAgICAgICBjYXNlIEdE
S19GMTY6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNiI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNzoK
LSAgICAgICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAgICAgY2FzZSBHREtfRjE4OgotICAgICAg
ICAgICAgcmV0dXJuICJGMTgiOwotICAgICAgICBjYXNlIEdES19GMTk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkYxOSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoKLSAgICAgICAgICAgIHJldHVybiAi
RjIwIjsKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICAgICAgcmV0dXJuICJGMjEiOwot
ICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMiI7Ci0gICAgICAg
IGNhc2UgR0RLX0YyMzoKLSAgICAgICAgICAgIHJldHVybiAiRjIzIjsKLSAgICAgICAgY2FzZSBH
REtfRjI0OgotICAgICAgICAgICAgcmV0dXJuICJGMjQiOwotICAgICAgICBjYXNlIEdES19IZWxw
OgotICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKLSAgICAgICAgY2FzZSBHREtfSG9tZToKLSAg
ICAgICAgICAgIHJldHVybiAiSG9tZSI7Ci0gICAgICAgIGNhc2UgR0RLX0luc2VydDoKLSAgICAg
ICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAg
ICAgIHJldHVybiAiTGVmdCI7Ci0gICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKLSAgICAgICAg
ICAgIHJldHVybiAiUGFnZURvd24iOwotICAgICAgICBjYXNlIEdES19QYWdlX1VwOgotICAgICAg
ICAgICAgcmV0dXJuICJQYWdlVXAiOwotICAgICAgICBjYXNlIEdES19QYXVzZToKLSAgICAgICAg
ICAgIHJldHVybiAiUGF1c2UiOwotICAgICAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVuOgot
ICAgICAgICBjYXNlIEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVybiAiUHJpbnRTY3JlZW4i
OwotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiAiUmlnaHQiOwot
ICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4gIlNlbGVjdCI7Ci0g
ICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuICJVcCI7Ci0gICAgICAgICAg
ICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgotICAgICAgICBjYXNl
IEdES19EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7Ci0gICAgICAgIGNhc2Ug
R0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJldHVybiAiVSswMDA4IjsKLSAgICAgICAgY2Fz
ZSBHREtfSVNPX0xlZnRfVGFiOgotICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6Ci0gICAg
ICAgIGNhc2UgR0RLX1RhYjoKLSAgICAgICAgICAgIHJldHVybiAiVSswMDA5IjsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgZ2Rr
X2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBwZXIoa2V5Q29kZSkpKTsKLSAgICB9
Ci19Ci0KLWludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5
Q29kZSh1bnNpZ25lZCBrZXljb2RlKQotewotICAgIHN3aXRjaCAoa2V5Y29kZSkgewotICAgICAg
ICBjYXNlIEdES19LUF8wOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYwKSBO
dW1lcmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNlIEdES19LUF8xOgotICAgICAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQotICAgICAgICBj
YXNlIEdES19LUF8yOgotICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQyOyAvLyAoNjIpIE51
bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzM6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQotICAgICAgICBj
YXNlIEdES19LUF80OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVt
ZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNToKLSAgICAgICAgICAgIHJl
dHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfS1BfNjoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51bWVy
aWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzc6Ci0gICAgICAgICAgICByZXR1
cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQotICAgICAgICBjYXNl
IEdES19LUF84OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7IC8vICg2OCkgTnVtZXJp
YyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfOToKLSAgICAgICAgICAgIHJldHVy
biBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX0tQX011bHRpcGx5OgotICAgICAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAoNkEp
IE11bHRpcGx5IGtleQotICAgICAgICBjYXNlIEdES19LUF9BZGQ6Ci0gICAgICAgICAgICByZXR1
cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6
Ci0gICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6Ci0gICAgICAgICAgICByZXR1cm4gVktfREVDSU1B
TDsgLy8gKDZFKSBEZWNpbWFsIGtleQotICAgICAgICBjYXNlIEdES19LUF9EaXZpZGU6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBrZXkKLQotICAgICAgICBj
YXNlIEdES19LUF9QYWdlX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEp
IFBBR0UgVVAga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93bjoKLSAgICAgICAgICAg
IHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKLSAgICAgICAgY2FzZSBHREtf
S1BfRW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0tQX0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0
KSBIT01FIGtleQotICAgICAgICBjYXNlIEdES19LUF9MZWZ0OgotICAgICAgICAgICAgcmV0dXJu
IFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfVXA6
Ci0gICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5Ci0gICAgICAg
IGNhc2UgR0RLX0tQX1JpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcp
IFJJR0hUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19LUF9Eb3duOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKLQotICAgICAgICBjYXNlIEdE
S19CYWNrU3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BB
Q0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKLSAgICAgICAgY2FzZSBHREtf
MzI3MF9CYWNrVGFiOgotICAgICAgICBjYXNlIEdES19UYWI6Ci0gICAgICAgICAgICByZXR1cm4g
VktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKLSAgICAgICAgY2FzZSBHREtfQ2xlYXI6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0lTT19FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Ci0gICAgICAgIGNhc2UgR0RL
X1JldHVybjoKLSAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4ga2V5
Ci0KLSAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5Ci0gICAgICAgICAgICAv
LyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKLQotICAgICAgICBjYXNlIEdES19NZW51OgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVy
YWwga2V5Ym9hcmQpCi0KLSAgICAgICAgICAgIC8vIFZLX01FTlUgKDEyKSBBTFQga2V5Ci0KLSAg
ICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgx
MykgUEFVU0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKLSAgICAgICAgICAgIHJl
dHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKLSAgICAgICAgY2FzZSBHREtf
S2FuYV9Mb2NrOgotICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0OgotICAgICAgICAgICAgcmV0
dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUK
LSAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdVTDsg
Ly8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCi0gICAgICAgICAgICAvLyBWS19KVU5K
QSAoMTcpIElNRSBKdW5qYSBtb2RlCi0gICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBm
aW5hbCBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKLSAgICAgICAgICAgIHJl
dHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQotICAgICAgICBjYXNlIEdES19L
YW5qaToKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2FuamkgbW9k
ZQotICAgICAgICBjYXNlIEdES19Fc2NhcGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVNDQVBF
OyAvLyAoMUIpIEVTQyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29u
dmVydAotICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0Ci0g
ICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Ci0gICAgICAgICAgICAvLyBW
S19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKLSAgICAgICAgY2FzZSBH
REtfc3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIK
LSAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsg
Ly8gKDIxKSBQQUdFIFVQIGtleQotICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246Ci0gICAgICAg
ICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5Ci0gICAgICAgIGNhc2Ug
R0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQotICAg
ICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkg
SE9NRSBrZXkKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19M
RUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdE
S19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJP
VyBrZXkKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ET1dO
OyAvLyAoMjgpIERPV04gQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKLSAgICAg
ICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQotICAgICAgICBjYXNl
IEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVybiBWS19TTkFQU0hPVDsgLy8gKDJDKSBQUklO
VCBTQ1JFRU4ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1
cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5Ci0gICAgICAgIGNhc2UgR0RLX0luc2Vy
dDoKLSAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0lO
U0VSVDsgLy8gKDJEKSBJTlMga2V5Ci0gICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAg
Y2FzZSBHREtfS1BfRGVsZXRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJF
KSBERUwga2V5Ci0gICAgICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAgICAgICByZXR1cm4gVktf
SEVMUDsgLy8gKDJGKSBIRUxQIGtleQotICAgICAgICBjYXNlIEdES18wOgotICAgICAgICBjYXNl
IEdES19wYXJlbnJpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzApIDAp
IGtleQotICAgICAgICBjYXNlIEdES18xOgotICAgICAgICBjYXNlIEdES19leGNsYW06Ci0gICAg
ICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQotICAgICAgICBjYXNlIEdES18y
OgotICAgICAgICBjYXNlIEdES19hdDoKLSAgICAgICAgICAgIHJldHVybiBWS18yOyAvLyAgKDMy
KSAyICYga2V5Ci0gICAgICAgIGNhc2UgR0RLXzM6Ci0gICAgICAgIGNhc2UgR0RLX251bWJlcnNp
Z246Ci0gICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2FzZSAnIyc7Ci0gICAg
ICAgIGNhc2UgR0RLXzQ6Ci0gICAgICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBrZXkg
JyQnOwotICAgICAgICAgICAgcmV0dXJuIFZLXzQ7Ci0gICAgICAgIGNhc2UgR0RLXzU6Ci0gICAg
ICAgIGNhc2UgR0RLX3BlcmNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfNTsgLy8gICgzNSkg
NSBrZXkgICclJwotICAgICAgICBjYXNlIEdES182OgotICAgICAgICBjYXNlIEdES19hc2NpaWNp
cmN1bToKLSAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2IGtleSAgJ14nCi0gICAg
ICAgIGNhc2UgR0RLXzc6Ci0gICAgICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoKLSAgICAgICAgICAg
IHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKLSAgICAgICAgY2FzZSBHREtf
ODoKLSAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfODsg
Ly8gICgzOCkgOCBrZXkgICcqJwotICAgICAgICBjYXNlIEdES185OgotICAgICAgICBjYXNlIEdE
S19wYXJlbmxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkgJygn
Ci0gICAgICAgIGNhc2UgR0RLX2E6Ci0gICAgICAgIGNhc2UgR0RLX0E6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4gMHg0
MTsKLSAgICAgICAgY2FzZSBHREtfYjoKLSAgICAgICAgY2FzZSBHREtfQjoKLSAgICAgICAgICAg
IHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2FzZSAnQic6IHJldHVybiAw
eDQyOwotICAgICAgICBjYXNlIEdES19jOgotICAgICAgICBjYXNlIEdES19DOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0dXJu
IDB4NDM7Ci0gICAgICAgIGNhc2UgR0RLX2Q6Ci0gICAgICAgIGNhc2UgR0RLX0Q6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiByZXR1
cm4gMHg0NDsKLSAgICAgICAgY2FzZSBHREtfZToKLSAgICAgICAgY2FzZSBHREtfRToKLSAgICAg
ICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6IHJl
dHVybiAweDQ1OwotICAgICAgICBjYXNlIEdES19mOgotICAgICAgICBjYXNlIEdES19GOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5IGNhc2UgJ2YnOiBjYXNlICdGJzog
cmV0dXJuIDB4NDY7Ci0gICAgICAgIGNhc2UgR0RLX2c6Ci0gICAgICAgIGNhc2UgR0RLX0c6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2FzZSAnZyc6IGNhc2UgJ0cn
OiByZXR1cm4gMHg0NzsKLSAgICAgICAgY2FzZSBHREtfaDoKLSAgICAgICAgY2FzZSBHREtfSDoK
LSAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2FzZSAn
SCc6IHJldHVybiAweDQ4OwotICAgICAgICBjYXNlIEdES19pOgotICAgICAgICBjYXNlIEdES19J
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBjYXNl
ICdJJzogcmV0dXJuIDB4NDk7Ci0gICAgICAgIGNhc2UgR0RLX2o6Ci0gICAgICAgIGNhc2UgR0RL
X0o6Ci0gICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6IGNh
c2UgJ0onOiByZXR1cm4gMHg0QTsKLSAgICAgICAgY2FzZSBHREtfazoKLSAgICAgICAgY2FzZSBH
REtfSzoKLSAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAgKDRCKSBLIGtleSBjYXNlICdrJzog
Y2FzZSAnSyc6IHJldHVybiAweDRCOwotICAgICAgICBjYXNlIEdES19sOgotICAgICAgICBjYXNl
IEdES19MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNhc2UgJ2wn
OiBjYXNlICdMJzogcmV0dXJuIDB4NEM7Ci0gICAgICAgIGNhc2UgR0RLX206Ci0gICAgICAgIGNh
c2UgR0RLX006Ci0gICAgICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2FzZSAn
bSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKLSAgICAgICAgY2FzZSBHREtfbjoKLSAgICAgICAg
Y2FzZSBHREtfTjoKLSAgICAgICAgICAgIHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBjYXNl
ICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOwotICAgICAgICBjYXNlIEdES19vOgotICAgICAg
ICBjYXNlIEdES19POgotICAgICAgICAgICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNh
c2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7Ci0gICAgICAgIGNhc2UgR0RLX3A6Ci0gICAg
ICAgIGNhc2UgR0RLX1A6Ci0gICAgICAgICAgICByZXR1cm4gVktfUDsgLy8gICg1MCkgUCBrZXkg
Y2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKLSAgICAgICAgY2FzZSBHREtfcToKLSAg
ICAgICAgY2FzZSBHREtfUToKLSAgICAgICAgICAgIHJldHVybiBWS19ROyAvLyAgKDUxKSBRIGtl
eSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOwotICAgICAgICBjYXNlIEdES19yOgot
ICAgICAgICBjYXNlIEdES19SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIg
a2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7Ci0gICAgICAgIGNhc2UgR0RLX3M6
Ci0gICAgICAgIGNhc2UgR0RLX1M6Ci0gICAgICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1Mykg
UyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKLSAgICAgICAgY2FzZSBHREtf
dDoKLSAgICAgICAgY2FzZSBHREtfVDoKLSAgICAgICAgICAgIHJldHVybiBWS19UOyAvLyAgKDU0
KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAweDU0OwotICAgICAgICBjYXNlIEdE
S191OgotICAgICAgICBjYXNlIEdES19VOgotICAgICAgICAgICAgcmV0dXJuIFZLX1U7IC8vICAo
NTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7Ci0gICAgICAgIGNhc2Ug
R0RLX3Y6Ci0gICAgICAgIGNhc2UgR0RLX1Y6Ci0gICAgICAgICAgICByZXR1cm4gVktfVjsgLy8g
ICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKLSAgICAgICAgY2Fz
ZSBHREtfdzoKLSAgICAgICAgY2FzZSBHREtfVzoKLSAgICAgICAgICAgIHJldHVybiBWS19XOyAv
LyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAweDU3OwotICAgICAgICBj
YXNlIEdES194OgotICAgICAgICBjYXNlIEdES19YOgotICAgICAgICAgICAgcmV0dXJuIFZLX1g7
IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJuIDB4NTg7Ci0gICAgICAg
IGNhc2UgR0RLX3k6Ci0gICAgICAgIGNhc2UgR0RLX1k6Ci0gICAgICAgICAgICByZXR1cm4gVktf
WTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1cm4gMHg1OTsKLSAgICAg
ICAgY2FzZSBHREtfejoKLSAgICAgICAgY2FzZSBHREtfWjoKLSAgICAgICAgICAgIHJldHVybiBW
S19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJldHVybiAweDVBOwotICAg
ICAgICBjYXNlIEdES19NZXRhX0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVC
KSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAg
Y2FzZSBHREtfTWV0YV9SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1QykgUmln
aHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCi0gICAgICAgICAgICAvLyBWS19TTEVF
UCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQotICAgICAgICAgICAgLy8gVktfU0VQQVJBVE9SICg2
QykgU2VwYXJhdG9yIGtleQotICAgICAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFj
dCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQotICAgICAg
ICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQotICAgICAgICAgICAgLy8gaGFuZGxl
ZCBieSBrZXkgY29kZSBhYm92ZQotCi0gICAgICAgIGNhc2UgR0RLX051bV9Mb2NrOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sga2V5Ci0KLSAgICAgICAg
Y2FzZSBHREtfU2Nyb2xsX0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfU0NST0xMOyAvLyAo
OTEpIFNDUk9MTCBMT0NLIGtleQotCi0gICAgICAgIGNhc2UgR0RLX1NoaWZ0X0w6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQgU0hJRlQga2V5Ci0gICAgICAgIGNh
c2UgR0RLX1NoaWZ0X1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUlNISUZUOyAvLyAoQTEpIFJp
Z2h0IFNISUZUIGtleQotICAgICAgICBjYXNlIEdES19Db250cm9sX0w6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05UUk9MIGtleQotICAgICAgICBjYXNl
IEdES19Db250cm9sX1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUkNPTlRST0w7IC8vIChBMykg
UmlnaHQgQ09OVFJPTCBrZXkKLSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtleQotICAgICAgICBjYXNlIEdES19B
bHRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1KSBSaWdodCBNRU5VIGtl
eQotCi0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgQmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAoQTcp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtleQotICAgICAgICAgICAgLy8gVktf
QlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5
Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJy
b3dzZXIgU3RvcCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dT
RVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkK
LSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBTdGFydCBhbmQgSG9tZSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9NVVRFIChB
RCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZP
TFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQot
ICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDog
TmV4dCBUcmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIxKSBX
aW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVE
SUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBNZWRpYSBrZXkKLSAgICAgICAgICAg
IC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1c2Ug
TWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3MgMjAw
MC9YUDogU3RhcnQgTWFpbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxF
Q1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8v
IFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAx
IGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6
IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5Ci0KLSAgICAgICAgICAgIC8vIFZLX09FTV8xIChCQSkg
VXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2Fy
ZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6
JyBrZXkKLSAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgotICAgICAgICBjYXNlIEdES19jb2xv
bjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAnOic6IHJl
dHVybiAweEJBOwotICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAv
WFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Ci0gICAgICAgIGNhc2UgR0RL
X3BsdXM6Ci0gICAgICAgIGNhc2UgR0RLX2VxdWFsOgotICAgICAgICAgICAgcmV0dXJuIFZLX09F
TV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdp
b24sIHRoZSAnLCcga2V5Ci0gICAgICAgIGNhc2UgR0RLX2NvbW1hOgotICAgICAgICBjYXNlIEdE
S19sZXNzOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsgLy9jYXNlICcsJzogY2Fz
ZSAnPCc6IHJldHVybiAweEJDOwotICAgICAgICAgICAgLy8gVktfT0VNX01JTlVTIChCRCkgV2lu
ZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQotICAgICAg
ICBjYXNlIEdES19taW51czoKLSAgICAgICAgY2FzZSBHREtfdW5kZXJzY29yZToKLSAgICAgICAg
ICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4gMHhC
RDsKLSAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZv
ciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Ci0gICAgICAgIGNhc2UgR0RLX3Blcmlv
ZDoKLSAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1f
UEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICcvPycga2V5Ci0gICAgICAgIGNhc2UgR0RLX3NsYXNoOgotICAgICAgICBj
YXNlIEdES19xdWVzdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMjsgLy9jYXNlICcv
JzogY2FzZSAnPyc6IHJldHVybiAweEJGOwotICAgICAgICAgICAgLy8gVktfT0VNXzMgKEMwKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnYH4n
IGtleQotICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgotICAgICAgICBjYXNlIEdES19xdW90
ZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2FzZSAnYCc6IGNhc2UgJ34n
OiByZXR1cm4gMHhDMDsKLSAgICAgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKLSAgICAg
ICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAw
eERCOwotICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3Vz
IGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZv
ciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQotICAgICAgICBjYXNlIEdE
S19iYWNrc2xhc2g6Ci0gICAgICAgIGNhc2UgR0RLX2JhcjoKLSAgICAgICAgICAgIHJldHVybiBW
S19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhEQzsKLSAgICAgICAgICAg
IC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ119JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0Ogot
ICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV82
OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOwotICAgICAgICAgICAgLy8gVktf
T0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9h
cmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Ci0gICAgICAgIGNhc2UgR0RL
X3F1b3RlcmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgotICAgICAgICAgICAgcmV0
dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KLSAgICAgICAgICAgIC8vIFZLX09FTV8xMDIgKEUy
KSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhlIGJh
Y2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKLSAgICAgICAgICAgIC8vIFZL
X1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93
cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKLSAgICAgICAgICAgIC8vIFZLX1BBQ0tFVCAoRTcp
IFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0
aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9m
IGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBt
ZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNl
bmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCi0gICAgICAgICAgICAvLyBWS19BVFRO
IChGNikgQXR0biBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Ci0g
ICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQotICAgICAgICAgICAgLy8gVktf
RVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5Ci0gICAgICAgICAgICAvLyBWS19QTEFZIChGQSkgUGxh
eSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQotICAgICAgICAgICAg
Ly8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAgICAgICAgICAgIC8v
IFZLX1BBMSAoRkQpIFBBMSBrZXkKLSAgICAgICAgICAgIC8vIFZLX09FTV9DTEVBUiAoRkUpIENs
ZWFyIGtleQotICAgICAgICBjYXNlIEdES19GMToKLSAgICAgICAgY2FzZSBHREtfRjI6Ci0gICAg
ICAgIGNhc2UgR0RLX0YzOgotICAgICAgICBjYXNlIEdES19GNDoKLSAgICAgICAgY2FzZSBHREtf
RjU6Ci0gICAgICAgIGNhc2UgR0RLX0Y2OgotICAgICAgICBjYXNlIEdES19GNzoKLSAgICAgICAg
Y2FzZSBHREtfRjg6Ci0gICAgICAgIGNhc2UgR0RLX0Y5OgotICAgICAgICBjYXNlIEdES19GMTA6
Ci0gICAgICAgIGNhc2UgR0RLX0YxMToKLSAgICAgICAgY2FzZSBHREtfRjEyOgotICAgICAgICBj
YXNlIEdES19GMTM6Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgY2FzZSBHREtfRjE1
OgotICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAgIGNhc2UgR0RLX0YxNzoKLSAgICAgICAg
Y2FzZSBHREtfRjE4OgotICAgICAgICBjYXNlIEdES19GMTk6Ci0gICAgICAgIGNhc2UgR0RLX0Yy
MDoKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAg
IGNhc2UgR0RLX0YyMzoKLSAgICAgICAgY2FzZSBHREtfRjI0OgotICAgICAgICAgICAgcmV0dXJu
IFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOwotICAgICAgICBjYXNlIEdES19LRVlfVm9pZFN5
bWJvbDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNTS0VZOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi19Ci0KLVN0cmluZyBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCB2YWwpCi17Ci0gICAg
c3dpdGNoICh2YWwpIHsKLSAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNl
IEdES19LUF9FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygiXHIiKTsKLSAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygiXHg4Iik7Ci0gICAgICAgIGNhc2UgR0RLX1RhYjoKLSAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoIlx0Iik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBn
dW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7Ci0gICAgICAgICAgICBnbG9u
ZyBud2M7Ci0gICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBnX3VjczRfdG9fdXRmMTYo
JmMsIDEsIDAsICZud2MsIDApOwotCi0gICAgICAgICAgICBTdHJpbmcgcmV0VmFsOwotICAgICAg
ICAgICAgaWYgKHVjaGFyMTYpCi0gICAgICAgICAgICAgICAgcmV0VmFsID0gU3RyaW5nKChVQ2hh
ciopdWNoYXIxNiwgbndjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXRW
YWwgPSBTdHJpbmcoKTsKLQotICAgICAgICAgICAgZ19mcmVlKHVjaGFyMTYpOwotCi0gICAgICAg
ICAgICByZXR1cm4gcmV0VmFsOwotICAgIH0KLX0KLQotc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5
cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIHJl
dHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpLZXlV
cCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci19Ci0KLXN0YXRpYyBQbGF0Zm9ybUV2ZW50OjpN
b2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewot
ICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC0+c3RhdGUgJiBH
REtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdES18zMjcwX0JhY2tUYWIpCi0gICAg
ICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQt
PnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3Jt
RXZlbnQ6OkN0cmxLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0g
ICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7Ci0gICAgaWYgKGV2ZW50
LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2
ZW50OjpNZXRhS2V5OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUV2ZW50OjpNb2Rp
ZmllcnM+KG1vZGlmaWVycyk7Ci19Ci0KLS8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG90
aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25zdCBDb21wb3NpdGlv
blJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKLSAgICA6IFBsYXRmb3JtRXZlbnQoZXZlbnRU
eXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtLZXlFdmVudChldmVudCks
IGN1cnJlbnRUaW1lKCkpCi0gICAgLCBtX3RleHQoY29tcG9zaXRpb25SZXN1bHRzLnNpbXBsZVN0
cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcgOiBzaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCi0gICAgLCBtX3VubW9kaWZpZWRUZXh0KG1f
dGV4dCkKLSAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShl
dmVudC0+a2V5dmFsKSkKLSAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlD
b2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKLSAgICAsIG1fbmF0aXZlVmlydHVhbEtl
eUNvZGUoZXZlbnQtPmtleXZhbCkKLSAgICAsIG1fbWFjQ2hhckNvZGUoMCkKLSAgICAsIG1fYXV0
b1JlcGVhdChmYWxzZSkKLSAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtleXZhbCA+PSBHREtfS1Bf
U3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkKLSAgICAsIG1faXNTeXN0ZW1LZXko
ZmFsc2UpCi0gICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQotICAgICwgbV9jb21wb3NpdGlvblJl
c3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQotewotICAgIC8vIFRvIG1hdGNoIHRoZSBiZWhhdmlv
ciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMgdGhhdCB0cmlnZ2VyZWQg
Y29tcG9zaXRpb24gcmVzdWx0cy4KLSAgICBpZiAoY29tcG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0
aW9uVXBkYXRlZCgpKQotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IFZLX1BST0NF
U1NLRVk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlE
b3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi17Ci0g
ICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3Ig
Q2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCi0gICAg
QVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKLSAgICBtX3R5cGUgPSB0eXBlOwotCi0gICAgaWYg
KGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0
eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAgICAgbV90ZXh0ID0gU3Ry
aW5nKCk7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKLSAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBvc2l0aW9uUmVzdWx0cy5j
b21wb3NpdGlvblVwZGF0ZWQoKSkgewotICAgICAgICAvLyBIYXZpbmcgZW1wdHkgdGV4dCwgcHJl
dmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlwcmVzcykgZXZlbnQKLSAgICAgICAg
Ly8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQgdHJpZ2dlciBjb21wb3NpdGlvbiBl
dmVudHMgc2hvdWxkIG5vdAotICAgICAgICAvLyBmaXJlIGtleXByZXNzLgotICAgICAgICBtX3Rl
eHQgPSBTdHJpbmcoKTsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOwotICAgICAgICBt
X3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7Ci0gICAgfQotfQotCi1ib29sIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQotewotICAgIHJldHVybiBnZGtfa2V5
bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpKTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKGJvb2wm
IHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFLZXkpCi17
Ci0gICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOwotICAgIGd0a19nZXRfY3VycmVudF9ldmVudF9z
dGF0ZSgmc3RhdGUpOwotCi0gICAgc2hpZnRLZXkgPSBzdGF0ZSAmIEdES19TSElGVF9NQVNLOwot
ICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01BU0s7Ci0gICAgYWx0S2V5ID0gc3Rh
dGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1ldGFLZXkgPSBzdGF0ZSAmIEdES19NRVRBX01BU0s7
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9y
bU1vdXNlRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
TW91c2VFdmVudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MTAxYzFm
YTNkNzI4NjZjYmM5NTNmODRiNTcyODU5MzdmMzIxM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRm
b3JtTW91c2VFdmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoK
LSogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
LSogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBh
cmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0
dGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbW9kaWZpZXIgaXMgQWx0IGluc3RlYWQgb2YgYWx3YXlz
IHVzaW5nIEdES19NT0QxX01BU0suCi0KLS8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG90
aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotewotICAgIG1fdGltZXN0YW1w
ID0gZXZlbnQtPnRpbWU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPngs
IChpbnQpZXZlbnQtPnkpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2
ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlfcm9vdCk7Ci0KLSAgICBtX21vZGlmaWVycyA9IDA7
Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLKQotICAgICAgICBtX21vZGlm
aWVycyB8PSBTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFT
SykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRl
ICYgR0RLX01PRDFfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5OwotICAgIGlm
IChldmVudC0+c3RhdGUgJiBHREtfTUVUQV9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBN
ZXRhS2V5OwotCi0gICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgIGNhc2UgR0RLX0JVVFRP
Tl9QUkVTUzoKLSAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgIGNhc2UgR0RLXzNCVVRU
T05fUFJFU1M6Ci0gICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgIG1fdHlwZSA9
IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3NlZDsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlID09
IEdES19CVVRUT05fUkVMRUFTRSkgewotICAgICAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZDsKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAg
IG1fY2xpY2tDb3VudCA9IDE7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18y
QlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMjsKLSAgICAgICAgZWxz
ZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICBtX2Ns
aWNrQ291bnQgPSAzOwotCi0gICAgICAgIGlmIChldmVudC0+YnV0dG9uID09IDEpCi0gICAgICAg
ICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0
b24gPT0gMikKLSAgICAgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICBl
bHNlIGlmIChldmVudC0+YnV0dG9uID09IDMpCi0gICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0
QnV0dG9uOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH07Ci19Ci0KLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1N
b3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKiBtb3Rpb24pCi17Ci0gICAgbV90aW1lc3RhbXAgPSBt
b3Rpb24tPnRpbWU7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpbW90aW9uLT54LCAo
aW50KW1vdGlvbi0+eSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpbW90
aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55X3Jvb3QpOwotCi0gICAgbV9tb2RpZmllcnMgPSAw
OwotICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZUX01BU0spCi0gICAgICAgIG1fbW9k
aWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xf
TUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAgICBpZiAobW90aW9uLT5z
dGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAg
ICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJz
IHw9IE1ldGFLZXk7Ci0KLSAgICBzd2l0Y2ggKG1vdGlvbi0+dHlwZSkgewotICAgIGNhc2UgR0RL
X01PVElPTl9OT1RJRlk6Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92
ZWQ7Ci0gICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247Ci0gICAgICAgIG1fY2xpY2tDb3VudCA9
IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH07Ci0KLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04xX01B
U0spCi0gICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKLSAgICBlbHNlIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKLSAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0
b247Ci0gICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04zX01BU0spCi0gICAg
ICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBjNWY5MTZjOC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBE
eXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
Ci0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBHdGtXaWRnZXQqIGdl
dFRvcGxldmVsKEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogdG9wbGV2ZWwg
PSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIHJldHVybiBndGtfd2lkZ2V0
X2lzX3RvcGxldmVsKHRvcGxldmVsKSA/IHRvcGxldmVsIDogMDsKLX0KLQotc3RhdGljIEdka1Zp
c3VhbCogZ2V0VmlzdWFsKFdpZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogY29udGFp
bmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOwotICAgIGlmICghY29udGFpbmVyKSB7Ci0gICAgICAg
IEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotICAgICAgICBy
ZXR1cm4gc2NyZWVuID8gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pIDogMDsK
LSAgICB9Ci0KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKGNvbnRhaW5lcikpCi0g
ICAgICAgIGNvbnRhaW5lciA9IGdldFRvcGxldmVsKGNvbnRhaW5lcik7Ci0gICAgcmV0dXJuIGNv
bnRhaW5lciA/IGdka193aW5kb3dfZ2V0X3Zpc3VhbChndGtfd2lkZ2V0X2dldF93aW5kb3coY29u
dGFpbmVyKSkgOiAwOwotfQotCi1pbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZXRWaXN1YWwod2lkZ2V0KTsKLSAgICBpZiAoIXZpc3Vh
bCkKLSAgICAgICAgcmV0dXJuIDI0OwotICAgIHJldHVybiBnZGtfdmlzdWFsX2dldF9kZXB0aCh2
aXN1YWwpOwotfQotCi1pbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQp
Ci17Ci0gICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZXRWaXN1YWwod2lkZ2V0KTsKLSAgICBpZiAo
IXZpc3VhbCkKLSAgICAgICAgcmV0dXJuIDg7Ci0KLSAgICByZXR1cm4gZ2RrX3Zpc3VhbF9nZXRf
Yml0c19wZXJfcmdiKHZpc3VhbCk7Ci19Ci0KLWJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdl
dCogd2lkZ2V0KQotewotICAgIHJldHVybiBzY3JlZW5EZXB0aCh3aWRnZXQpIDwgMjsKLX0KLQot
Ci1zdGF0aWMgR2RrU2NyZWVuKiBnZXRTY3JlZW4oR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAg
cmV0dXJuIGd0a193aWRnZXRfaGFzX3NjcmVlbih3aWRnZXQpID8gZ3RrX3dpZGdldF9nZXRfc2Ny
ZWVuKHdpZGdldCkgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7Ci19Ci0KLUZsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogY29udGFpbmVyID0g
d2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKSkgOiAwOwotICAgIGlmIChjb250YWluZXIpCi0gICAgICAgIGNvbnRhaW5l
ciA9IGdldFRvcGxldmVsKGNvbnRhaW5lcik7Ci0KLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGNv
bnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgp
OwotICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBn
aW50IG1vbml0b3IgPSBjb250YWluZXIgPyBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRv
dyhzY3JlZW4sIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250YWluZXIpKSA6IDA7Ci0KLSAgICBH
ZGtSZWN0YW5nbGUgZ2VvbWV0cnk7Ci0gICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRy
eShzY3JlZW4sIG1vbml0b3IsICZnZW9tZXRyeSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KGdl
b21ldHJ5LngsIGdlb21ldHJ5LnksIGdlb21ldHJ5LndpZHRoLCBnZW9tZXRyeS5oZWlnaHQpOwot
fQotCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAg
ICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKLSAgICBpZiAoY29u
dGFpbmVyICYmICFndGtfd2lkZ2V0X2dldF9yZWFsaXplZChjb250YWluZXIpKQotICAgICAgICBy
ZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwotCi0gICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBjb250
YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsK
LSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgZ2lu
dCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3co
c2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOwotCi0gICAgR2Rr
UmVjdGFuZ2xlIHdvcmtBcmVhOwotICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEo
c2NyZWVuLCBtb25pdG9yLCAmd29ya0FyZWEpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdCh3b3Jr
QXJlYS54LCB3b3JrQXJlYS55LCB3b3JrQXJlYS53aWR0aCwgd29ya0FyZWEuaGVpZ2h0KTsKLQot
fQotCi12b2lkIHNjcmVlbkNvbG9yUHJvZmlsZShDb2xvclByb2ZpbGUmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGJmOWE4OWQ3NmQwNWY1MjhlZDM0OWRlMDUzNjcy
NzEyZGY4YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi0jaW5jbHVkZSA8Z2RrL2dk
ay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBv
dGhlciBwbGF0Zm9ybSBldmVudCBjb25zdHJ1Y3RvcnMKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxh
dGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKLXsKLSAgICBzdGF0aWMgY29u
c3QgZmxvYXQgZGVsdGEgPSAxOwotCi0gICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7
Ci0gICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotCi0gICAgbV9tb2RpZmllcnMgPSAw
OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKLSAgICAgICAgbV9tb2Rp
ZmllcnMgfD0gU2hpZnRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01B
U0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEN0cmxLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0
ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAgICBp
ZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0g
TWV0YUtleTsKLQotICAgIG1fZGVsdGFYID0gMDsKLSAgICBtX2RlbHRhWSA9IDA7Ci0KLSAgICAv
LyBEb2NzIHNheSBhbiB1cHdhcmRzIHNjcm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMgYSBw
b3NpdGl2ZSBkZWx0YQotICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgewotICAgICAgICBj
YXNlIEdES19TQ1JPTExfVVA6Ci0gICAgICAgICAgICBtX2RlbHRhWSA9IGRlbHRhOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dOOgotICAgICAgICAgICAg
bV9kZWx0YVkgPSAtZGVsdGE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtf
U0NST0xMX0xFRlQ6Ci0gICAgICAgICAgICBtX2RlbHRhWCA9IGRlbHRhOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKLSAgICAgICAgICAgIG1fZGVs
dGFYID0gLWRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04o
MywgMywgMTgpCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9TTU9PVEg6IHsKLSAgICAgICAgICAg
ICAgICBnZG91YmxlIGRlbHRhWCwgZGVsdGFZOwotICAgICAgICAgICAgICAgIGdka19ldmVudF9n
ZXRfc2Nyb2xsX2RlbHRhcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmZGVs
dGFYLCAmZGVsdGFZKTsKLSAgICAgICAgICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YVg7Ci0gICAg
ICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGFZOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLSAgICB9Ci0gICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOwot
ICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKLQotICAgIG1fcG9zaXRpb24gPSBJbnRQb2lu
dChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkp
OwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50
LT54X3Jvb3QpLCBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpKTsKLSAgICBtX2dyYW51
bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7Ci0gICAgbV9kaXJlY3Rpb25JbnZlcnRl
ZEZyb21EZXZpY2UgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBz
ZXR0aW5nIGZvciB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2
ZW50Ci0gICAgbV9kZWx0YVggKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSk7Ci0gICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJmNTE3YjAxZWM1MjljNWRmYTUwMmI3YWE1MGI3ZWY4MDQ4MGU2ZmMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BvcHVwTWVudUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZv
ciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9w
dXBNZW51R3RrLmgiCi0KLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IGdT
ZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwotCi1Qb3B1cE1lbnVHdGs6OlBvcHVwTWVudUd0ayhQb3B1
cE1lbnVDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQotewotfQot
Ci1Qb3B1cE1lbnVHdGs6On5Qb3B1cE1lbnVHdGsoKQotewotICAgIGlmIChtX3BvcHVwKSB7Ci0g
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLT5wbGF0
Zm9ybU1lbnUoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAg
ICAgIGhpZGUoKTsKLSAgICB9Ci19Ci0KLUd0a0FjdGlvbiogUG9wdXBNZW51R3RrOjpjcmVhdGVH
dGtBY3Rpb25Gb3JNZW51SXRlbShpbnQgaXRlbUluZGV4KQotewotICAgIEdPd25QdHI8Y2hhcj4g
YWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoInBvcHVwLW1lbnUtYWN0aW9uLSVkIiwgaXRlbUlu
ZGV4KSk7Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aW9uX25ldyhhY3Rpb25OYW1l
LmdldCgpLCBjbGllbnQoKS0+aXRlbVRleHQoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCBjbGll
bnQoKS0+aXRlbVRvb2xUaXAoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCAwKTsKLSAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgi
LCBHSU5UX1RPX1BPSU5URVIoaXRlbUluZGV4KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhY3Rp
b24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0sobWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKLSAg
ICAvLyBGSVhNRTogQXBwbHkgdGhlIFBvcHVwTWVudVN0eWxlIGZyb20gY2xpZW50KCktPml0ZW1T
dHlsZShpKQotICAgIGd0a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCAhY2xpZW50KCktPml0
ZW1TdHlsZShpdGVtSW5kZXgpLmlzRGlzcGxheU5vbmUoKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRf
c2Vuc2l0aXZlKGFjdGlvbiwgY2xpZW50KCktPml0ZW1Jc0VuYWJsZWQoaXRlbUluZGV4KSk7Ci0K
LSAgICByZXR1cm4gYWN0aW9uOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6c2hvdyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQo
Y2xpZW50KCkpOwotCi0gICAgaWYgKCFtX3BvcHVwKSB7Ci0gICAgICAgIG1fcG9wdXAgPSBHdGtQ
b3B1cE1lbnU6OmNyZWF0ZSgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAtPnBs
YXRmb3JtTWVudSgpLCAidW5tYXAiLCBHX0NBTExCQUNLKFBvcHVwTWVudUd0azo6bWVudVVubWFw
cGVkKSwgdGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcG9wdXAtPmNsZWFyKCk7Ci0KLSAg
ICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVudCgpLT5saXN0U2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChjbGllbnQoKS0+aXRlbUlzU2VwYXJh
dG9yKGkpKQotICAgICAgICAgICAgbV9wb3B1cC0+YXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1Jl
ZihjcmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpKSk7Ci0gICAgICAgICAgICBtX3BvcHVwLT5h
cHBlbmRJdGVtKGFjdGlvbi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJbnRQb2lu
dCBtZW51UG9zaXRpb24gPSBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEdUS19XSURH
RVQodmlldy0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHZpZXctPmNvbnRl
bnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgbWVudVBvc2l0aW9uLm1vdmUoMCwg
cmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBtX3BvcHVwLT5wb3BVcChyZWN0LnNpemUoKSwgbWVudVBv
c2l0aW9uLCBzaXplLCBpbmRleCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkpOwotCi0gICAgLy8g
R1RLIGNhbiByZWZ1c2UgdG8gYWN0dWFsbHkgb3BlbiB0aGUgbWVudSB3aGVuIG1vdXNlIGdyYWJz
IGZhaWxzLgotICAgIC8vIEVuc3VyZSBXZWJDb3JlIGRvZXMgbm90IGdvIGludG8gc29tZSBwZXNr
eSBzdGF0ZS4KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3Zpc2libGUobV9wb3B1cC0+cGxhdGZv
cm1NZW51KCkpKQotICAgICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKCk7Ci19Ci0KLXZvaWQg
UG9wdXBNZW51R3RrOjpoaWRlKCkKLXsKLSAgICBBU1NFUlQobV9wb3B1cCk7Ci0gICAgbV9wb3B1
cC0+cG9wRG93bigpOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6dXBkYXRlRnJvbUVsZW1lbnQo
KQotewotICAgIGNsaWVudCgpLT5zZXRUZXh0RnJvbUl0ZW0oY2xpZW50KCktPnNlbGVjdGVkSW5k
ZXgoKSk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51R3RrOjpkaXNjb25uZWN0Q2xpZW50KCkKLXsKLSAg
ICBtX3BvcHVwQ2xpZW50ID0gMDsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6Om1lbnVJdGVtQWN0
aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9uLCBQb3B1cE1lbnVHdGsqIHRoYXQpCi17Ci0gICAgQVNT
RVJUKHRoYXQtPmNsaWVudCgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKEdQ
T0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAt
bWVudS1hY3Rpb24taW5kZXgiKSkpOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6bWVudVVubWFw
cGVkKEd0a1dpZGdldCosIFBvcHVwTWVudUd0ayogdGhhdCkKLXsKLSAgICBBU1NFUlQodGhhdC0+
Y2xpZW50KCkpOwotICAgIHRoYXQtPmNsaWVudCgpLT5wb3B1cERpZEhpZGUoKTsKLX0KLQotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJkODExZmJmNWZlMzlmN2Q0ZjRjMmMyY2IwYjgwMzUyYTZkOTA4
OWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgUG9wdXBNZW51R3RrX2gKLSNkZWZp
bmUgUG9wdXBNZW51R3RrX2gKLQotI2luY2x1ZGUgIkd0a1BvcHVwTWVudS5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVD
bGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFz
cyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFBvcHVwTWVudUd0ayA6IHB1YmxpYyBQb3B1cE1lbnUgewot
cHVibGljOgotICAgIFBvcHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqKTsKLSAgICB+UG9wdXBN
ZW51R3RrKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVW
aWV3KiwgaW50IGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0Q2xp
ZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgUG9wdXBNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7
IHJldHVybiBtX3BvcHVwQ2xpZW50OyB9Ci0gICAgR3RrQWN0aW9uKiBjcmVhdGVHdGtBY3Rpb25G
b3JNZW51SXRlbShpbnQgaXRlbUluZGV4KTsKLQotICAgIHN0YXRpYyB2b2lkIG1lbnVVbm1hcHBl
ZChHdGtXaWRnZXQqLCBQb3B1cE1lbnVHdGsqKTsKLSAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFj
dGl2YXRlZChHdGtBY3Rpb24qLCBQb3B1cE1lbnVHdGsqKTsKLQotICAgIFBvcHVwTWVudUNsaWVu
dCogbV9wb3B1cENsaWVudDsKLSAgICBPd25QdHI8R3RrUG9wdXBNZW51PiBtX3BvcHVwOwotfTsK
LQotfQotCi0jZW5kaWYgLy8gUG9wdXBNZW51R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDUyNThmMzZhY2Y3NDM3M2RmMTAwMjZmZDhjOTg5
NDYwZmY2Yzk0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKLQot
I2lmIFVTRShHTFgpCi0KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0j
aW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgotI2luY2x1ZGUgPGNhaXJvLXhsaWIu
aD4KLSNpbmNsdWRlIDxnZGsvZ2RreC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxn
dGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi10eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyo+
IFdpbmRvd0hhc2hNYXA7Ci1zdGF0aWMgV2luZG93SGFzaE1hcCYgZ2V0V2luZG93SGFzaE1hcCgp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFwLCB3aW5kb3dIYXNoTWFw
LCAoKSk7Ci0gICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Ci19Ci0KLXN0YXRpYyBpbnQgZ0RhbWFn
ZUV2ZW50QmFzZTsKLXN0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2ZW50KEdk
a1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQsIHZvaWQqKQotewotICAgIFhFdmVu
dCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50KTsKLSAgICBpZiAoeEV2
ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQotICAgICAgICBy
ZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAgIFhEYW1hZ2VOb3RpZnlFdmVudCogZGFt
YWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+KHhFdmVudCk7
Ci0gICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdpbmRvd0hhc2hNYXAoKTsK
LSAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93SGFzaE1hcC5maW5kKGRhbWFn
ZUV2ZW50LT5kcmF3YWJsZSk7Ci0gICAgaWYgKGkgPT0gd2luZG93SGFzaE1hcC5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7Ci0KLSAgICBpLT52YWx1ZS0+Y2FsbERh
bWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0gICAgWERhbWFnZVN1YnRyYWN0KEdES19ESVNQTEFZX1hE
SVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBO
b25lLCBOb25lKTsKLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Ci19Ci0KLXN0YXRpYyBi
b29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQotewotICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNl
OwotCi0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gaGFzRXh0ZW5zaW9uczsK
LQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGludCBlcnJvckJhc2U7Ci0gICAgRGlz
cGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZh
dWx0KCkpOwotICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZnRGFtYWdl
RXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50
IGV2ZW50QmFzZTsKLSAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAm
ZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
V2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCi0gICAgaW50IG1ham9y
LCBtaW5vcjsKLSAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpvciwgJm1p
bm9yKTsKLSAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0xDb250
ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNYRGFtYWdlQW5k
WENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNp
emUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKLX0KLQotUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUsIEdM
Q29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1f
d2luZG93KDApCi0gICAgLCBtX3BhcmVudFdpbmRvdygwKQotICAgICwgbV9waXhtYXAoMCkKLSAg
ICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKLSAgICAsIG1fc3VyZmFjZSgwKQotICAg
ICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQotICAgICwgbV9kYW1hZ2UoMCkK
LSAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKLSAgICAsIG1fZGFtYWdlTm90aWZ5RGF0
YSgwKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtf
ZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBTY3JlZW4qIHNjcmVlbiA9IERlZmF1bHRTY3Jl
ZW5PZkRpc3BsYXkoZGlzcGxheSk7Ci0KLSAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJv
bSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFj
ZV9saW51eC5jYwotICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0g
ICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7Ci0gICAgbV9wYXJl
bnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCi0gICAgICAgIFJvb3RXaW5kb3dPZlNj
cmVlbihzY3JlZW4pLAotICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAx
LAotICAgICAgICAwLAotICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgSW5wdXRPdXRw
dXQsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICBDV092ZXJyaWRlUmVkaXJlY3Qs
Ci0gICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2luZG93KGRpc3BsYXksIG1f
cGFyZW50V2luZG93KTsKLQotICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVj
dHVyZU5vdGlmeU1hc2s7Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9
IEZhbHNlOwotICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJv
bVBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOwot
Ci0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5k
b3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhE
YW1hZ2VFdmVudCksIDApOwotICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRo
aXMpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgWEV2ZW50IGV2ZW50OwotICAgICAgICBY
V2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVu
dCk7Ci0gICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndp
bmRvdyA9PSBtX3dpbmRvdykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBYU2VsZWN0
SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKLSAgICBYQ29tcG9zaXRlUmVk
aXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsK
LSAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3csIFhEYW1hZ2VS
ZXBvcnROb25FbXB0eSk7Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3coKQotewotICAgIEFTU0VSVChtX2RhbWFnZSk7Ci0gICAgQVNT
RVJUKG1fd2luZG93KTsKLSAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOwotCi0gICAgZ2V0V2lu
ZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7Ci0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAo
KS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcigwLCByZWludGVy
cHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotCi0gICAg
RGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCkpOwotICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsKLSAgICBY
RGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgWERlc3Ryb3lXaW5kb3coZGlz
cGxheSwgbV9wYXJlbnRXaW5kb3cpOwotICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNl
KCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElT
UExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBYUmVzaXplV2luZG93KGRpc3Bs
YXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgWEZsdXNo
KGRpc3BsYXkpOwotCi0gICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCkg
ewotICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKLSAgICAgICAgLy8gVGhpcyBzd2Fw
IGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEg
YnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCi0gICAgICAgIC8vIHdoZXJlIGEgc3dhcCBpcyBuZWNl
c3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBwcm9wZXJseSBy
ZXNpemVkLgotICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4dDo6Z2V0Q3VycmVudCgp
KQotICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOwotICAgIH0KLQotICAgIG1f
c2l6ZSA9IHNpemU7Ci0gICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gdHJ1ZTsKLX0K
LQotR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y29udGV4dCgpCi17Ci0g
ICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCk7Ci0KLSAgICBpZiAo
bV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotCi0gICAgQVNTRVJU
KG1fd2luZG93KTsKLSAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JX
aW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6
Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQotewotICAgIGlmICghbV9waXhtYXApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRf
ZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7Ci0gICAgbV9waXhtYXAgPSAwOwot
ICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKLXsKLSAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2Up
Ci0gICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Ci0KLSAgICBtX25lZWRzTmV3UGl4bWFw
QWZ0ZXJSZXNpemUgPSBmYWxzZTsKLQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG5l
dyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBhcyB0aGUg
dGFyZ2V0Ci0gICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUgMTAweCBz
bG93ZXIuCi0gICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQ
TEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Ci0gICAgUGl4bWFwIG5ld1BpeG1h
cCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93
KTsKLSAgICBpZiAoIW5ld1BpeG1hcCkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBYV2luZG93QXR0cmli
dXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobmV3
UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgewotICAgICAgICBj
bGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgICAgICBYRnJlZVBpeG1hcChuZXdQ
aXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxp
Yl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgLy8gTnZpZGlhIGRyaXZlcnMg
c2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3luY2hyb25v
dXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucwotICAgIC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVh
Y2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBjb25zdGFu
dGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCi0gICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNraW5ncyks
IHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMg
aXNzdWUsIHBhaW50IHRoZSBvbGQKLSAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJv
cGVybHkgaW5pdGlhbGl6ZSBpdC4KLSAgICBpZiAobV9zdXJmYWNlKSB7Ci0gICAgICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7
Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsKLSAgICAg
ICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgp
OwotICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOwotICAgIG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7
Ci0KLSAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQotewotICAgIGlmIChtX2Rh
bWFnZU5vdGlmeUNhbGxiYWNrKQotICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKG1fZGFt
YWdlTm90aWZ5RGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
ZjJhNDhiMmVhNWM0YWY2NjAxNDM3ZDlmNWM5MjE4YTYyNDQwZDk4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3df
aAotI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotCi0jaWYgVVNFKEdMWCkK
LQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
ICJSZWZQdHJDYWlyby5oIgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4bWFwOwotdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEYW1hZ2U7Ci10
eXBlZGVmIHZvaWQgKCpEYW1hZ2VOb3RpZnlDYWxsYmFjaykodm9pZCopOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKLXB1YmxpYzoK
LSAgICBlbnVtIEdMQ29udGV4dE5lZWRlZCB7IENyZWF0ZUdMQ29udGV4dCwgRG9Ob3RDcmVhdGVH
TENvbnRleHQgfTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdz4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBHTENvbnRleHROZWVkZWQgPSBDcmVhdGVHTENv
bnRleHQpOwotICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7Ci0gICAg
Y29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgdm9pZCByZXNp
emUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7Ci0gICAgR0xDb250ZXh0KiBjb250ZXh0KCk7Ci0g
ICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0g
ICAgV2luZG93IHdpbmRvd0lkKCkgeyByZXR1cm4gbV93aW5kb3c7IH0KLSAgICB2b2lkIGNhbGxE
YW1hZ2VOb3RpZnlDYWxsYmFjaygpOwotCi0gICAgdm9pZCBzZXREYW1hZ2VOb3RpZnlDYWxsYmFj
ayhEYW1hZ2VOb3RpZnlDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKLSAgICB7Ci0gICAg
ICAgIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgbV9kYW1hZ2VO
b3RpZnlEYXRhID0gZGF0YTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCk7Ci0gICAgdm9pZCBj
bGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotCi0gICAgSW50U2l6ZSBtX3NpemU7Ci0g
ICAgV2luZG93IG1fd2luZG93OwotICAgIFdpbmRvdyBtX3BhcmVudFdpbmRvdzsKLSAgICBQaXht
YXAgbV9waXhtYXA7Ci0gICAgR0xDb250ZXh0TmVlZGVkIG1fbmVlZHNDb250ZXh0OwotICAgIE93
blB0cjxHTENvbnRleHQ+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBt
X3N1cmZhY2U7Ci0gICAgdW5zaWduZWQgaW50IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOwotICAg
IGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOwotCi0gICAgRGFtYWdlIG1fZGFtYWdl
OwotICAgIERhbWFnZU5vdGlmeUNhbGxiYWNrIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2s7Ci0gICAg
dm9pZCogbV9kYW1hZ2VOb3RpZnlEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKEdMWCkKLQotI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmYyNzI3ZWFlMmMxYWVlYzM3ZGE4YWE5
YjBiOWUwNGM2OWY5OGVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVt
ZUd0ay5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNp
bmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRl
ICJTdHJpbmdUcnVuY2F0b3IuaCIKLSNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAi
VXNlckFnZW50U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxnZGsv
Z2RrLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNp
bmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gVGhpcyB3b3VsZCBiZSBhIHN0YXRpYyBtZXRob2QsIGV4Y2VwdCB0aGF0IGZvcndhcmQg
ZGVjbGFyaW5nIEdUeXBlIGlzIHRyaWNreSwgc2luY2UgaXRzCi0vLyBkZWZpbml0aW9uIGRlcGVu
ZHMgb24gaW5jbHVkaW5nIGdsaWIuaCwgbmVnYXRpbmcgdGhlIGJlbmVmaXQgb2YgdXNpbmcgYSBm
b3J3YXJkIGRlY2xhcmF0aW9uLgotZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0lj
b25Gb3JXaWRnZXRUeXBlKEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rp
b24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwotZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVm
PiBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29u
c3QgY2hhciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25O
YW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSk7Ci0KLXVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1zdGF0aWMgSFRNTE1l
ZGlhRWxlbWVudCogZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3Qq
IG8pCi17Ci0gICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKLSAgICBOb2RlKiBtZWRpYU5vZGUg
PSBub2RlID8gbm9kZS0+c2hhZG93SG9zdCgpIDogMDsKLSAgICBpZiAoIW1lZGlhTm9kZSkKLSAg
ICAgICAgbWVkaWFOb2RlID0gbm9kZTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAhbWVkaWFOb2Rl
LT5pc0VsZW1lbnROb2RlKCkgfHwgIXN0YXRpY19jYXN0PEVsZW1lbnQqPihtZWRpYU5vZGUpLT5p
c01lZGlhRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6aW5pdE1lZGlhQnV0dG9ucygpCi17Ci0gICAgc3RhdGljIGJvb2wgaWNvbnNJbml0aWFs
aXplZCA9IGZhbHNlOwotCi0gICAgaWYgKGljb25zSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEdSZWZQdHI8R3RrSWNvbkZhY3Rvcnk+IGljb25GYWN0b3J5ID0gYWRvcHRHUmVm
KGd0a19pY29uX2ZhY3RvcnlfbmV3KCkpOwotICAgIEd0a0ljb25Tb3VyY2UqIGljb25Tb3VyY2Ug
PSBndGtfaWNvbl9zb3VyY2VfbmV3KCk7Ci0gICAgY29uc3QgY2hhciogaWNvbnNbXSA9IHsgImF1
ZGlvLXZvbHVtZS1oaWdoIiwgImF1ZGlvLXZvbHVtZS1tdXRlZCIgfTsKLQotICAgIGd0a19pY29u
X2ZhY3RvcnlfYWRkX2RlZmF1bHQoaWNvbkZhY3RvcnkuZ2V0KCkpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoaWNvbnMpOyArK2kpIHsKLSAgICAgICAgZ3RrX2lj
b25fc291cmNlX3NldF9pY29uX25hbWUoaWNvblNvdXJjZSwgaWNvbnNbaV0pOwotICAgICAgICBH
dGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX2ljb25fc2V0X25ldygpOwotICAgICAgICBndGtfaWNv
bl9zZXRfYWRkX3NvdXJjZShpY29uU2V0LCBpY29uU291cmNlKTsKLSAgICAgICAgZ3RrX2ljb25f
ZmFjdG9yeV9hZGQoaWNvbkZhY3RvcnkuZ2V0KCksIGljb25zW2ldLCBpY29uU2V0KTsKLSAgICAg
ICAgZ3RrX2ljb25fc2V0X3VucmVmKGljb25TZXQpOwotICAgIH0KLQotICAgIGd0a19pY29uX3Nv
dXJjZV9mcmVlKGljb25Tb3VyY2UpOwotCi0gICAgaWNvbnNJbml0aWFsaXplZCA9IHRydWU7Ci19
Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVHdGs6OmNyZWF0
ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUd0aygpKTsKLX0KLQot
UGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBw
YWdlKQotewotICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVtZUd0azo6Y3Jl
YXRlKCkubGVha1JlZigpOwotICAgIHJldHVybiBydDsKLX0KLQotUmVuZGVyVGhlbWVHdGs6OlJl
bmRlclRoZW1lR3RrKCkKLSAgICA6IG1fcGFuZWxDb2xvcihDb2xvcjo6d2hpdGUpCi0gICAgLCBt
X3NsaWRlckNvbG9yKENvbG9yOjp3aGl0ZSkKLSAgICAsIG1fc2xpZGVyVGh1bWJDb2xvcihDb2xv
cjo6d2hpdGUpCi0gICAgLCBtX21lZGlhSWNvblNpemUoMTYpCi0gICAgLCBtX21lZGlhU2xpZGVy
SGVpZ2h0KDE0KQotewotICAgIHBsYXRmb3JtSW5pdCgpOwotI2lmIEVOQUJMRShWSURFTykKLSAg
ICBpbml0TWVkaWFDb2xvcnMoKTsKLSAgICBpbml0TWVkaWFCdXR0b25zKCk7Ci0jZW5kaWYKLX0K
LQotc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQotewot
ICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRB
cmVhUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFy
dDoKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBjYXNl
IFNsaWRlckhvcml6b250YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAg
IGNhc2UgTWVkaWFQbGF5QnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyUGFy
dDoKLSAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBNZWRpYUVudGVyRnVs
bHNjcmVlbkJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBNZWRpYVNsaWRlclBhcnQ6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBw
ZWFyYW5jZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6Y29udHJvbFN1cHBvcnRzVGlu
dHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIHJldHVybiBpc0VuYWJsZWQo
byk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5k
ZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgaWYgKCFvLT5pc0JveCgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHBvc3NpYmx5IGluY29ycmVj
dCBmb3IgdGhlIEdUSysgcG9ydC4KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IENoZWNrYm94UGFydAotICAgICAgICB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFk
aW9QYXJ0KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7
Ci0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDI7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG8pOwotfQot
Ci0vLyBUaGlzIGlzIHVzZWQgaW4gUmVuZGVyVGhlbWVHdGsyIGFuZCBSZW5kZXJUaGVtZUd0azMu
IE5vcm1hbGx5LCBpdCB3b3VsZCBiZSBpbgotLy8gdGhlIFJlbmRlclRoZW1lR3RrIGhlYWRlciAo
cGVyaGFwcyBhcyBhIHN0YXRpYyBtZXRob2QpLCBidXQgd2Ugd2FudCB0byBhdm9pZAotLy8gaGF2
aW5nIHRvIGluY2x1ZGUgR1RLKyBoZWFkZXJzIG9ubHkgZm9yIHRoZSBHdGtUZXh0RGlyZWN0aW9u
IGVudW0uCi1HdGtUZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pCi17Ci0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIFJUTDoKLSAg
ICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9SVEw7Ci0gICAgY2FzZSBMVFI6Ci0gICAgICAgIHJl
dHVybiBHVEtfVEVYVF9ESVJfTFRSOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHVEtf
VEVYVF9ESVJfTk9ORTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ3RrSWNvblN0
YXRlKFJlbmRlclRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCi17Ci0g
ICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIHJldHVybiBH
VEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2Jq
ZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgaWYgKHRoZW1lLT5p
c0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdI
VDsKLQotICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwotfQotCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBTb21lIGxheW91dCB0ZXN0cyBj
aGVjayBleHBsaWNpdGx5IHRoYXQgYnV0dG9ucyBpZ25vcmUgbGluZS1oZWlnaHQuCi0gICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpCi0gICAgICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBUaGUgdGVzdHMgY2hl
Y2sgZXhwbGljaXRseSB0aGF0IHNlbGVjdCBtZW51IGJ1dHRvbnMgaWdub3JlIGxpbmUgaGVpZ2h0
LgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKLQotICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJv
cmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5LgotICAgIHN0eWxlLT5yZXNldEJv
cmRlclJhZGl1cygpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlz
dEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lbnVMaXN0KG9iamVjdCwgaW5m
bywgcmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
cmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludEdk
a1BpeGJ1ZihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdka1BpeGJ1ZiogaWNvbiwg
Y29uc3QgSW50UmVjdCYgaWNvblJlY3QpCi17Ci0gICAgSW50U2l6ZSBpY29uU2l6ZShnZGtfcGl4
YnVmX2dldF93aWR0aChpY29uKSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24pKTsKLSAgICBH
UmVmUHRyPEdka1BpeGJ1Zj4gc2NhbGVkSWNvbjsKLSAgICBpZiAoaWNvblJlY3Quc2l6ZSgpICE9
IGljb25TaXplKSB7Ci0gICAgICAgIC8vIFdlIGNvdWxkIHVzZSBjYWlyb19zY2FsZSgpIGhlcmUg
YnV0IGNhaXJvL3BpeG1hbiBkb3duc2NhbGUgcXVhbGl0eSBpcyBxdWl0ZSBiYWQuCi0gICAgICAg
IHNjYWxlZEljb24gPSBhZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvbiwgaWNv
blJlY3Qud2lkdGgoKSwgaWNvblJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX0lOVEVSUF9CSUxJTkVBUikpOwot
ICAgICAgICBpY29uID0gc2NhbGVkSWNvbi5nZXQoKTsKLSAgICB9Ci0KLSAgICBjYWlyb190KiBj
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNhaXJvX3NhdmUoY3Ip
OwotICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgaWNvbiwgaWNvblJlY3QueCgp
LCBpY29uUmVjdC55KCkpOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLSAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBHVEsrIChndGsvZ3RraWNvbmZhY3RvcnkuYykKLXN0
YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplTWVudSA9IDE2Owotc3RhdGljIGNvbnN0IGdpbnQg
Z3RrSWNvblNpemVTbWFsbFRvb2xiYXIgPSAxODsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0ljb25T
aXplQnV0dG9uID0gMjA7Ci1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZUxhcmdlVG9vbGJh
ciA9IDI0Owotc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVEbmQgPSAzMjsKLXN0YXRpYyBj
b25zdCBnaW50IGd0a0ljb25TaXplRGlhbG9nID0gNDg7Ci0KLXN0YXRpYyBHdGtJY29uU2l6ZSBn
ZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShnaW50IHBpeGVsU2l6ZSkKLXsKLSAgICBpZiAocGl4ZWxT
aXplIDwgZ3RrSWNvblNpemVTbWFsbFRvb2xiYXIpCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9T
SVpFX01FTlU7Ci0gICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6ZVNtYWxsVG9vbGJhciAm
JiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUJ1dHRvbikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09O
X1NJWkVfU01BTExfVE9PTEJBUjsKLSAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25TaXplQnV0
dG9uICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplTGFyZ2VUb29sYmFyKQotICAgICAgICByZXR1
cm4gR1RLX0lDT05fU0laRV9CVVRUT047Ci0gICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6
ZUxhcmdlVG9vbGJhciAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZURuZCkKLSAgICAgICAgcmV0
dXJuIEdUS19JQ09OX1NJWkVfTEFSR0VfVE9PTEJBUjsKLSAgICBpZiAocGl4ZWxTaXplID49IGd0
a0ljb25TaXplRG5kICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplRGlhbG9nKQotICAgICAgICBy
ZXR1cm4gR1RLX0lDT05fU0laRV9ETkQ7Ci0KLSAgICByZXR1cm4gR1RLX0lDT05fU0laRV9ESUFM
T0c7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihvLCBpLCByZWN0KTsKLX0KLQotc3RhdGljIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKLQotICAgIC8v
IEdldCB0aGUgaWNvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAgaW50IGZvbnRT
aXplID0gc3R5bGUtPmZvbnRTaXplKCk7Ci0gICAgaWYgKGZvbnRTaXplIDwgZ3RrSWNvblNpemVN
ZW51KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7
Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAg
IGd0a19pY29uX3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZvbnRTaXplKSwg
JndpZHRoLCAmaGVpZ2h0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAot
ewotICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKLX0KLQotc3RhdGljIElu
dFJlY3QgY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBHZXQgdGhl
IHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KLSAgICBOb2RlKiBpbnB1dCA9IHJlbmRlck9i
amVjdC0+bm9kZSgpLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5w
dXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKTsKLSAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5p
c0JveCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgLy8gSWYgcG9zc2libGUg
Y2VudGVyIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHJlY3QgdmVydGljYWxseSBpbiB0aGUgcGFy
ZW50IGlucHV0IGVsZW1lbnQuCi0gICAgLy8gV2UgYWxzbyBhZGQgb25lIHBpeGVsIGhlcmUgdG8g
ZW5zdXJlIHRoYXQgdGhlIHkgY29vcmRpbmF0ZSBpcyByb3VuZGVkIHVwIGZvciBib3ggaGVpZ2h0
cwotICAgIC8vIHRoYXQgYXJlIGV2ZW4sIHdoaWNoIGxvb2tzIGluIHJlbGF0aW9uIHRvIHRoZSBi
b3ggdGV4dC4KLSAgICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IHRvUmVuZGVyQm94KGlucHV0
LT5yZW5kZXJlcigpKS0+YWJzb2x1dGVDb250ZW50Qm94KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
dGhlIHNjYWxlZCBkZWNvcmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBh
cmVudCdzIGJveC4KLSAgICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gu
d2lkdGgoKSwgc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByZWN0LmhlaWdodCgp
KSk7Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QueCgpLCBpbnB1dENvbnRlbnRCb3gueSgp
ICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGljb25TaXplICsgMSkgLyAyLCBpY29uU2l6
ZSwgaWNvblNpemUpOwotICAgIHJldHVybiBzY2FsZWRSZWN0OwotfQotCi1ib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFy
ZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgaWYgKGljb25SZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+
IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RP
Q0tfRklORCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlv
bigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4
ZWxTaXplKHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29u
dGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBh
ZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRF
bGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBn
ZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0
a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShy
ZWN0LmhlaWdodCgpKSk7Ci0gICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGlj
b24uZ2V0KCksIGljb25SZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gV2UgY2Fubm90IGdpdmUgYSBw
cm9wZXIgcmVuZGVyaW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRl
bHkuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7Ci0gICAgc3R5bGUtPnNldExpbmVI
ZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotfQotCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludFRleHRGaWVs
ZChvLCBpLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDYXBzTG9ja0lu
ZGljYXRvcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gVGhlIG90aGVyIHBhaW50IG1l
dGhvZHMgZG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIHBhaW50aW5nIGlzIGRpc2FibGVkIGJl
Y2F1c2UgUmVuZGVyVGhlbWUgYWxyZWFkeSBjaGVja3MgaXQKLSAgICAvLyBiZWZvcmUgY2FsbGlu
ZyB0aGVtLCBidXQgcGFpbnRDYXBzTG9ja0luZGljYXRvcigpIGlzIGNhbGxlZCBieSBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUgd2hpY2ggZG9lc24ndCBjaGVjayBpdC4KLSAgICBpZiAocGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0
VHlwZShHVEtfVFlQRV9FTlRSWSwgR1RLX1NUT0NLX0NBUFNfTE9DS19XQVJOSU5HLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBnZXRJY29u
U2l6ZUZvclBpeGVsU2l6ZShpY29uU2l6ZSkpOwotCi0gICAgLy8gT25seSByZS1zY2FsZSB0aGUg
aWNvbiB3aGVuIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGljb24gc2l6ZS4KLSAgICBp
ZiAoaWNvblNpemUgPj0gZ3RrSWNvblNpemVNZW51KQotICAgICAgICBpY29uU2l6ZSA9IGdka19w
aXhidWZfZ2V0X2hlaWdodChpY29uLmdldCgpKTsKLQotICAgIC8vIEdUSysgbG9jYXRlcyB0aGUg
aWNvbiByaWdodCBhbGlnbmVkIGluIHRoZSBlbnRyeS4gVGhlIGdpdmVuIHJlY3RhbmdsZSBpcyBh
bHJlYWR5Ci0gICAgLy8gY2VudGVyZWQgdmVydGljYWxseSBieSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuCi0gICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAt
IGljb25TaXplLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAtIGljb25TaXplKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZSwgaWNvblNp
emUpOwotICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBp
Y29uUmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29u
c3QKLXsKLSAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1
bHQoKTsKLQotICAgIGdib29sZWFuIHNob3VsZEJsaW5rOwotICAgIGdpbnQgdGltZTsKLQotICAg
IGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1jdXJzb3ItYmxpbmsiLCAmc2hvdWxkQmxpbmss
ICJndGstY3Vyc29yLWJsaW5rLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0KLSAgICBpZiAoIXNob3Vs
ZEJsaW5rKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiB0aW1lIC8gMjAwMC47Ci19
Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6Z2V0U2NyZWVuRFBJKCkKLXsKLSAgICAvLyBGSVhN
RTogUmVhbGx5IHRoaXMgc2hvdWxkIGJlIHRoZSB3aWRnZXQncyBzY3JlZW4uCi0gICAgR2RrU2Ny
ZWVuKiBzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzY3JlZW4p
Ci0gICAgICAgIHJldHVybiA5NjsgLy8gRGVmYXVsdCB0byA5NiBEUEkuCi0KLSAgICBmbG9hdCBk
cGkgPSBnZGtfc2NyZWVuX2dldF9yZXNvbHV0aW9uKHNjcmVlbik7Ci0gICAgaWYgKGRwaSA8PSAw
KQotICAgICAgICByZXR1cm4gOTY7Ci0gICAgcmV0dXJuIGRwaTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUd0azo6c3lzdGVtRm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAotewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRf
ZGVmYXVsdCgpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRoaXMgd2lsbCBiZSBhIGZvbnQgc2VsZWN0aW9uIHN0cmluZyBsaWtlICJTYW5zIDEwIiBzbyB3
ZSBjYW5ub3QgdXNlIGl0IGFzIHRoZSBmYW1pbHkgbmFtZS4KLSAgICBHT3duUHRyPGdjaGFyPiBm
b250TmFtZTsKLSAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstZm9udC1uYW1lIiwgJmZv
bnROYW1lLm91dFB0cigpLCBOVUxMKTsKLQotICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBwYW5n
b0Rlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcm9tX3N0cmluZyhmb250TmFt
ZS5nZXQoKSk7Ci0gICAgaWYgKCFwYW5nb0Rlc2NyaXB0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkocGFuZ29fZm9udF9k
ZXNjcmlwdGlvbl9nZXRfZmFtaWx5KHBhbmdvRGVzY3JpcHRpb24pKTsKLQotICAgIGludCBzaXpl
ID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZShwYW5nb0Rlc2NyaXB0aW9uKSAvIFBB
TkdPX1NDQUxFOwotICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSBmb250IGlzIGluIHBvaW50cywg
d2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBpeGVscy4KLSAgICBpZiAoIXBhbmdvX2ZvbnRfZGVz
Y3JpcHRpb25fZ2V0X3NpemVfaXNfYWJzb2x1dGUocGFuZ29EZXNjcmlwdGlvbikpCi0gICAgICAg
IHNpemUgPSBzaXplICogKGdldFNjcmVlbkRQSSgpIC8gNzIuMCk7Ci0KLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
Rm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdo
dChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNl
KTsKLSAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUocGFuZ29EZXNjcmlwdGlvbik7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKLXsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgaW5pdE1lZGlhQ29sb3JzKCk7Ci0jZW5kaWYKLSAgICBSZW5k
ZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotI2lmIEVOQUJMRShWSURF
TykKLVN0cmluZyBSZW5kZXJUaGVtZUd0azo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNHdGtVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi1TdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhRnVs
bFNjcmVlblN0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgot
Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJ
Y29uTmFtZSkKLXsKLSAgICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgpICsgKHJlY3Qud2lkdGgo
KSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkg
KyAocmVjdC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAotICAgICAgICAgICAgICAg
ICAgICAgbV9tZWRpYUljb25TaXplLCBtX21lZGlhSWNvblNpemUpOwotICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBpY29uID0gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBF
X0NPTlRBSU5FUiwgc3ltYm9saWNJY29uTmFtZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLAotICAg
ICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
LCBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgoKSk7Ci0g
ICAgcGFpbnRHZGtQaXhidWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6aGFzT3duRGlzYWJsZWRTdGF0
ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChwYXJ0
ICE9IE1lZGlhTXV0ZUJ1dHRvblBhcnQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJu
IHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwg
InZpZXctZnVsbHNjcmVlbi1zeW1ib2xpYyIsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxl
bWVudEZyb21SZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBtdXRlZCA9IG1lZGlhRWxlbWVu
dC0+bXV0ZWQoKTsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBh
aW50SW5mby5jb250ZXh0LCByZWN0LAotICAgICAgICBtdXRlZCA/ICJhdWRpby12b2x1bWUtbXV0
ZWQtc3ltYm9saWMiIDogImF1ZGlvLXZvbHVtZS1oaWdoLXN5bWJvbGljIiwKLSAgICAgICAgbXV0
ZWQgPyAiYXVkaW8tdm9sdW1lLW11dGVkIiA6ICJhdWRpby12b2x1bWUtaGlnaCIpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC0+bm9kZSgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZS0+aXNNZWRpYUNvbnRy
b2xFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgcGxheSA9IG1l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlKG5vZGUpID09IE1lZGlhUGxheUJ1dHRvbjsKLSAgICByZXR1
cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0
LAotICAgICAgICBwbGF5ID8gIm1lZGlhLXBsYXliYWNrLXN0YXJ0LXN5bWJvbGljIiA6ICJtZWRp
YS1wbGF5YmFjay1wYXVzZS1zeW1ib2xpYyIsCi0gICAgICAgIHBsYXkgPyBHVEtfU1RPQ0tfTUVE
SUFfUExBWSA6IEdUS19TVE9DS19NRURJQV9QQVVTRSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
cmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwg
cmVjdCwgIm1lZGlhLXNlZWstYmFja3dhcmQtc3ltYm9saWMiLCBHVEtfU1RPQ0tfTUVESUFfUkVX
SU5EKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0
dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihy
ZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LCAibWVkaWEtc2Vlay1mb3J3YXJk
LXN5bWJvbGljIiwgR1RLX1NUT0NLX01FRElBX0ZPUldBUkQpOwotfQotCi1zdGF0aWMgUm91bmRl
ZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsK
LSAgICByZXR1cm4gUm91bmRlZFJlY3Q6OlJhZGlpKAotICAgICAgICBJbnRTaXplKHN0eWxlLT5i
b3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyVG9w
TGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxl
LT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJvcmRl
clRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAgIEludFNpemUo
c3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxl
LT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAg
IEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1
ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgp
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFF
bGVtZW50KG8pOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAg
ICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2Up
OwotCi0gICAgZmxvYXQgbWVkaWFEdXJhdGlvbiA9IG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsK
LSAgICBmbG9hdCB0b3RhbFRyYWNrV2lkdGggPSByLndpZHRoKCk7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gby0+c3R5bGUoKTsKLSAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9
IG1lZGlhRWxlbWVudC0+YnVmZmVyZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCB0aW1lUmFuZ2VzLT5sZW5ndGgoKTsgKytpbmRleCkgewotICAgICAgICBmbG9hdCBz
dGFydCA9IHRpbWVSYW5nZXMtPnN0YXJ0KGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAg
ICAgZmxvYXQgZW5kID0gdGltZVJhbmdlcy0+ZW5kKGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsK
LSAgICAgICAgZmxvYXQgc3RhcnRSYXRpbyA9IHN0YXJ0IC8gbWVkaWFEdXJhdGlvbjsKLSAgICAg
ICAgZmxvYXQgbGVuZ3RoUmF0aW8gPSAoZW5kIC0gc3RhcnQpIC8gbWVkaWFEdXJhdGlvbjsKLSAg
ICAgICAgaWYgKCFsZW5ndGhSYXRpbykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IEludFJlY3QgcmFuZ2VSZWN0KHIpOwotICAgICAgICByYW5nZVJlY3Quc2V0V2lkdGgobGVuZ3Ro
UmF0aW8gKiB0b3RhbFRyYWNrV2lkdGgpOwotICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAg
ICByYW5nZVJlY3QubW92ZShzdGFydFJhdGlvICogdG90YWxUcmFja1dpZHRoLCAwKTsKLSAgICAg
ICAgY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVy
UmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgfQotCi0gICAgY29udGV4
dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gby0+c3R5bGUoKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KFJv
dW5kZWRSZWN0KHIsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZv
bHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVu
dE1lZGlhRWxlbWVudChyZW5kZXJPYmplY3QpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZsb2F0IHZvbHVtZSA9IG1lZGlhRWxlbWVudC0+dm9s
dW1lKCk7Ci0gICAgaWYgKCF2b2x1bWUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29udGV4dC0+
c2F2ZSgpOwotICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKLQotICAgIGlu
dCByZWN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLSAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJl
Y3RIZWlnaHQgKiB2b2x1bWU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpOwotICAgIEludFJlY3Qgdm9sdW1lUmVjdChyZWN0KTsKLSAgICB2b2x1bWVSZWN0
Lm1vdmUoMCwgcmVjdEhlaWdodCAtIHRyYWNrSGVpZ2h0KTsKLSAgICB2b2x1bWVSZWN0LnNldEhl
aWdodChjZWlsKHRyYWNrSGVpZ2h0KSk7Ci0KLSAgICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3Qo
Um91bmRlZFJlY3Qodm9sdW1lUmVjdCwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwKLSAg
ICAgICAgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5
bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVy
VGh1bWIocmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotfQotCi1TdHJpbmcgUmVuZGVy
VGhlbWVHdGs6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGlt
ZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdE1lZGlhQ29udHJv
bHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZHVy
YXRpb24pOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQ3VycmVudFRpbWUo
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi0j
aWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAotewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLS8v
IFRoZXNlIHZhbHVlcyBoYXZlIGJlZW4gY29waWVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuY3BwCi1zdGF0aWMgY29uc3QgaW50IHByb2dyZXNzQWN0aXZpdHlCbG9ja3MgPSA1Owotc3Rh
dGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEwOwotc3RhdGljIGNvbnN0
IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7Ci1kb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsOwot
fQotCi1kb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlv
bkludGVydmFsICogcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sg
YW5kIGZvcnRoOwotfQotCi1JbnRSZWN0IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVz
c1JlY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJS
ZWN0KQotewotICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KGZ1bGxCYXJSZWN0KTsKLSAgICBSZW5k
ZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJlbmRlck9iamVj
dCk7Ci0gICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKLSAgICAgICAg
aW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNz
LT5wb3NpdGlvbigpOwotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBSVEwpCi0gICAgICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3Qu
eCgpICsgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBwcm9ncmVzc1dpZHRoKTsKLSAgICAgICAgcHJv
Z3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzV2lkdGgpOwotICAgICAgICByZXR1cm4gcHJvZ3Jl
c3NSZWN0OwotICAgIH0KLQotICAgIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclBy
b2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpOwotCi0gICAgLy8gTmV2ZXIgbGV0IHRoZSBwcm9n
cmVzcyByZWN0IHNocmluayBzbWFsbGVyIHRoYW4gMiBwaXhlbHMuCi0gICAgaW50IG5ld1dpZHRo
ID0gbWF4KDIsIHByb2dyZXNzUmVjdC53aWR0aCgpIC8gcHJvZ3Jlc3NBY3Rpdml0eUJsb2Nrcyk7
Ci0gICAgaW50IG1vdmFibGVXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpIC0gbmV3V2lkdGg7
Ci0gICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKG5ld1dpZHRoKTsKLQotICAgIC8vIFdlIHdhbnQg
dGhlIGZpcnN0IDAuNSB1bml0cyBvZiB0aGUgYW5pbWF0aW9uIHByb2dyZXNzIHRvIHJlcHJlc2Vu
dCB0aGUKLSAgICAvLyBmb3J3YXJkIG1vdGlvbiBhbmQgdGhlIHNlY29uZCAwLjUgdW5pdHMgdG8g
cmVwcmVzZW50IHRoZSBiYWNrd2FyZCBtb3Rpb24sCi0gICAgLy8gdGh1cyB3ZSBtdWx0aXBseSBi
eSB0d28gaGVyZSB0byBnZXQgdGhlIGZ1bGwgc3dlZXAgb2YgdGhlIHByb2dyZXNzIGJhciB3aXRo
Ci0gICAgLy8gZWFjaCBkaXJlY3Rpb24uCi0gICAgaWYgKGFuaW1hdGlvblByb2dyZXNzIDwgMC41
KQotICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgKGFuaW1hdGlv
blByb2dyZXNzICogMiAqIG1vdmFibGVXaWR0aCkpOwotICAgIGVsc2UKLSAgICAgICAgcHJvZ3Jl
c3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArICgoMS4wIC0gYW5pbWF0aW9uUHJvZ3Jlc3Mp
ICogMiAqIG1vdmFibGVXaWR0aCkpOwotICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7Ci19Ci0jZW5k
aWYKLQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBG
aWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0
aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QKLXsKLSAgICBpZiAod2lkdGggPD0gMCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKGZpbGVMaXN0LT5sZW5ndGgoKSA+IDEpCi0gICAg
ICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUobXVsdGlwbGVGaWxlVXBs
b2FkVGV4dChmaWxlTGlzdC0+bGVuZ3RoKCkpLCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9y
OjpFbmFibGVSb3VuZGluZ0hhY2tzKTsKLQotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKGZp
bGVMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgc3RyaW5nID0gcGF0aEdldEZpbGVOYW1lKGZpbGVM
aXN0LT5pdGVtKDApLT5wYXRoKCkpOwotICAgIGVsc2UgaWYgKG11bHRpcGxlRmlsZXNBbGxvd2Vk
KQotICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwoKTsKLSAg
ICBlbHNlCi0gICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCk7
Ci0KLSAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShzdHJpbmcsIHdp
ZHRoLCBmb250LCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwotfQotCi0j
aWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi1JbnRTaXplIFJlbmRlclRoZW1lR3RrOjpzbGlk
ZXJUaWNrU2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc2V0IHRoaXMg
dG8gdGhlIHNpemUgb2Ygb25lIHRpY2sgbWFyay4KLSAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsK
LX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVy
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBzZXQgdGhpcyB0byB0aGUgcG9z
aXRpb24gb2YgdGhlIHRpY2sgbWFya3MuCi0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGE1ODA4MDE1NzlmMWYyNGYwYzc2ZTg0ZWE2MWRkMzdkMzdj
Nzk2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAorKysgL2Rldi9udWxsCkBA
IC0xLDI1NiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBw
cm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVm
IFJlbmRlclRoZW1lR3RrX2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVHdGtfaAotCi0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLXR5cGVk
ZWYgc3RydWN0IF9HZGtDb2xvcm1hcCBHZGtDb2xvcm1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBSZW5kZXJUaGVtZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci1wcml2YXRl
OgotICAgIFJlbmRlclRoZW1lR3RrKCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsK
LQotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsK
LQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxs
eSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1
cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJh
dyB0aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
Y29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90
LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKLQotICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250
cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwotCi0g
ICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVh
ZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQotICAgIC8v
IHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50
LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgotICAgIC8vIGNv
bnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9z
aXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0KLSAgICAvLyBUaGUgcGxhdGZvcm0g
c2VsZWN0aW9uIGNvbG9yLgotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9y
IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3Q7Ci0KLSAgICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKLSAgICB2aXJ0dWFsIENvbG9y
IGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50
ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5n
ZSgpOwotCi0gICAgLy8gU3lzdGVtIGZvbnRzIGFuZCBjb2xvcnMuCi0gICAgdmlydHVhbCB2b2lk
IHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgdmly
dHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biB0cnVlOyB9Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBTdHJpbmcgZXh0cmFN
ZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwotICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlh
Q29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNv
bnN0OwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4
dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
REFUQUxJU1RfRUxFTUVOVCkKLSAgICAvLyBSZXR1cm5zIHNpemUgb2Ygb25lIHNsaWRlciB0aWNr
IG1hcmsgZm9yIGEgaG9yaXpvbnRhbCB0cmFjay4KLSAgICAvLyBGb3IgdmVydGljYWwgdHJhY2tz
IHdlIHJvdGF0ZSBpdCBhbmQgdXNlIGl0LiBpLmUuIFdpZHRoIGlzIGFsd2F5cyBsZW5ndGggYWxv
bmcgdGhlIHRyYWNrLgotICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0
OwotICAgIC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIG9mIHNsaWRlciB0aWNrIG9yaWdpbiBmcm9t
IHRoZSBzbGlkZXIgdHJhY2sgY2VudGVyLgotICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZz
ZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdDsKLSNlbmRpZgotCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICBHdGtXaWRnZXQqIGd0a0NvbnRhaW5lcigpIGNvbnN0OwotICAgIEd0a1dpZGdl
dCogZ3RrRW50cnkoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1ZTY3JvbGxiYXIoKSBjb25z
dDsKLSAgICBHdGtXaWRnZXQqIGd0a0hTY3JvbGxiYXIoKSBjb25zdDsKLSAgICBzdGF0aWMgdm9p
ZCBnZXRJbmRpY2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGlu
dCYgaW5kaWNhdG9yU3BhY2luZyk7Ci0jZWxzZQotICAgIEd0a1N0eWxlQ29udGV4dCogZ3RrU2Ny
b2xsYmFyU3R5bGUoKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHBh
aW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIGludCBwb3B1cEludGVy
bmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIGludCBwb3B1cEludGVybmFsUGFk
ZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgLy8gVGhlIE1hYyBwb3J0IGRp
ZmZlcmVudGlhdGVzIGJldHdlZW4gdGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBi
dXR0b24uIgotICAgIC8vIFRoZSBmb3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRv
biBoYXMgYmVlbiBzdHlsZWQuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUKLSAgICAvLyBBcXVhIHRo
ZW1lZCBjb250cm9scyB3aGVuZXZlciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdU
SysgdGhlbWluZywgc28KLSAgICAvLyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlh
dGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
cmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgaW5pdE1l
ZGlhQ29sb3JzKCk7Ci0gICAgdm9pZCBpbml0TWVkaWFCdXR0b25zKCk7Ci0gICAgdmlydHVhbCBi
b29sIGhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9y
d2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250
YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRp
bWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIGRvdWJsZSBh
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3Q7Ci0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBm
aWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lk
dGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdm9p
ZCBwbGF0Zm9ybUluaXQoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJl
bmRlclN0eWxlKik7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKLQotI2lmIEVO
QUJMRShWSURFTykKLSAgICBib29sIHBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5h
bWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dy
ZXNzUmVjdChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIG11
dGFibGUgQ29sb3IgbV9wYW5lbENvbG9yOwotICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJDb2xv
cjsKLSAgICBtdXRhYmxlIENvbG9yIG1fc2xpZGVyVGh1bWJDb2xvcjsKLSAgICBjb25zdCBpbnQg
bV9tZWRpYUljb25TaXplOwotICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVpZ2h0OwotCi0j
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICB2b2lkIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250
YWluZXIoR3RrV2lkZ2V0KiwgR3RrV2lkZ2V0KikgY29uc3Q7Ci0gICAgdm9pZCByZWZyZXNoQ29t
Ym9Cb3hDaGlsZHJlbigpIGNvbnN0OwotICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRl
clN0eWxlKiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNv
bnN0OwotICAgIGludCBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50
IGNvbWJvQm94QXJyb3dTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICBHdGtXaWRnZXQq
IGd0a0J1dHRvbigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsK
LSAgICBHdGtXaWRnZXQqIGd0a1ZTY2FsZSgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrSFNj
YWxlKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtSYWRpb0J1dHRvbigpIGNvbnN0OwotICAg
IEd0a1dpZGdldCogZ3RrQ2hlY2tCdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1By
b2dyZXNzQmFyKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveCgpIGNvbnN0Owot
ICAgIEd0a1dpZGdldCogZ3RrQ29tYm9Cb3hCdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQq
IGd0a0NvbWJvQm94QXJyb3coKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94U2Vw
YXJhdG9yKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtTcGluQnV0dG9uKCkgY29uc3Q7Ci0K
LSAgICBHZGtDb2xvcm1hcCogbV9jb2xvcm1hcDsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtXaW5kb3c7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29udGFpbmVyOwotICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtFbnRyeTsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtUcmVlVmlldzsKLSAgICBtdXRh
YmxlIEd0a1dpZGdldCogbV9ndGtWU2NhbGU7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3Rr
SFNjYWxlOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1JhZGlvQnV0dG9uOwotICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NoZWNrQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0
KiBtX2d0a1Byb2dyZXNzQmFyOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94
OwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94QnV0dG9uOwotICAgIG11dGFi
bGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94QXJyb3c7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQq
IG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3I7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNj
cm9sbGJhcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtIU2Nyb2xsYmFyOwotICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1NwaW5CdXR0b247Ci0gICAgYm9vbCBtX3RoZW1lUGFydHNI
YXZlUkdCQUNvbG9ybWFwOwotICAgIGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
OwotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZiAvLyBSZW5kZXJUaGVtZUd0a19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4MjNhMDQ4NWU3Y2QxNjhlOWFhN2UyNTFmNThjNDExZDYzNzg1
YjA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsOTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLQot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLS8vIFdlIG5lZWQgdGhpcyB0byBhbGxvdyBidWls
ZGluZyB3aGlsZSB1c2luZyBHVEtfV0lER0VUX1NFVF9GTEFHUy4gSXQncyBkZXByZWNhdGVkCi0v
LyBidXQgc29tZSB0aGVtZSBlbmdpbmVzIHJlcXVpcmUgaXQgdG8gZW5zdXJlIHByb3BlciByZW5k
ZXJpbmcgb2YgZm9jdXMgaW5kaWNhdG9ycy4KLSN1bmRlZiBHVEtfRElTQUJMRV9ERVBSRUNBVEVE
Ci0KLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgot
I2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1
ZGUgIlRleHREaXJlY3Rpb24uaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgot
I2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRoaXMg
aXMgdGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsrLCB3aGVyZSBpdCB3YXMgZGVmaW5l
ZCBhcyBNSU5fQVJST1dfV0lEVEggaW4gZ3Rrc3BpbmJ1dHRvbi5jLgotc3RhdGljIGNvbnN0IGlu
dCBtaW5TcGluQnV0dG9uQXJyb3dTaXplID0gNjsKLQotLy8gVGhpcyBpcyBub3QgYSBzdGF0aWMg
bWV0aG9kLCBiZWNhdXNlIHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIEdUSysgaGVhZGVycyBpbiBS
ZW5kZXJUaGVtZUd0ay5oLgotZXh0ZXJuIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlv
bihUZXh0RGlyZWN0aW9uKTsKLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkK
LXsKLSAgICBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0gdHJ1ZTsKLSAgICBtX2d0a1dp
bmRvdyA9IDA7Ci0gICAgbV9ndGtDb250YWluZXIgPSAwOwotICAgIG1fZ3RrQnV0dG9uID0gMDsK
LSAgICBtX2d0a0VudHJ5ID0gMDsKLSAgICBtX2d0a1RyZWVWaWV3ID0gMDsKLSAgICBtX2d0a1ZT
Y2FsZSA9IDA7Ci0gICAgbV9ndGtIU2NhbGUgPSAwOwotICAgIG1fZ3RrUmFkaW9CdXR0b24gPSAw
OwotICAgIG1fZ3RrQ2hlY2tCdXR0b24gPSAwOwotICAgIG1fZ3RrUHJvZ3Jlc3NCYXIgPSAwOwot
ICAgIG1fZ3RrQ29tYm9Cb3ggPSAwOwotICAgIG1fZ3RrQ29tYm9Cb3hCdXR0b24gPSAwOwotICAg
IG1fZ3RrQ29tYm9Cb3hBcnJvdyA9IDA7Ci0gICAgbV9ndGtDb21ib0JveFNlcGFyYXRvciA9IDA7
Ci0gICAgbV9ndGtWU2Nyb2xsYmFyID0gMDsKLSAgICBtX2d0a0hTY3JvbGxiYXIgPSAwOwotICAg
IG1fZ3RrU3BpbkJ1dHRvbiA9IDA7Ci0KLSAgICBtX2NvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRf
cmdiYV9jb2xvcm1hcChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIGlmICghbV9jb2xv
cm1hcCkgewotICAgICAgICBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0gZmFsc2U7Ci0g
ICAgICAgIG1fY29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19z
Y3JlZW5fZ2V0X2RlZmF1bHQoKSk7Ci0gICAgfQotfQotCi1SZW5kZXJUaGVtZUd0azo6flJlbmRl
clRoZW1lR3RrKCkKLXsKLSAgICBpZiAobV9ndGtXaW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX2d0a1dpbmRvdyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlbmRl
clRoZW1lR3RrOjppbml0TWVkaWFDb2xvcnMoKQotewotICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0
a193aWRnZXRfZ2V0X3N0eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKLSAgICBtX3Bh
bmVsQ29sb3IgPSBzdHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF07Ci0gICAgbV9zbGlkZXJDb2xv
ciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfQUNUSVZFXTsKLSAgICBtX3NsaWRlclRodW1iQ29sb3Ig
PSBzdHlsZS0+YmdbR1RLX1NUQVRFX1NFTEVDVEVEXTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9p
ZCBhZGp1c3RSZWN0Rm9yRm9jdXMoR3RrV2lkZ2V0KiB3aWRnZXQsIEludFJlY3QmIHJlY3QsIGJv
b2wgaWdub3JlSW50ZXJpb3JGb2N1c1Byb3BlcnR5ID0gZmFsc2UpCi17Ci0gICAgZ2ludCBmb2N1
c1dpZHRoLCBmb2N1c1BhZDsKLSAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzID0gMDsKLSAgICBn
dGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImlu
dGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7Ci0gICAgaWYgKCFpZ25vcmVJbnRl
cmlvckZvY3VzUHJvcGVydHkgJiYgaW50ZXJpb3JGb2N1cykKLSAgICAgICAgcmV0dXJuOwotICAg
IHJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotfQotCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBD
aGVja2JveFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgLy8gV2UgaWdub3Jl
IHRoZSBpbnRlcmlvciBmb2N1cyBwcm9wZXJ0eSBhbmQgYWx3YXlzIGV4cGFuZCB0aGUgZm9jdXMg
cmVjdC4gSW4gR1RLKywgdGhlCi0gICAgICAgIC8vIGZvY3VzIGluZGljYXRvciBpcyB1c3VhbGx5
IG9uIHRoZSB0ZXh0IG5leHQgdG8gYSBjaGVja2JveCBvciByYWRpbyBidXR0b24sIGJ1dCB0aGF0
IGRvZXNuJ3QKLSAgICAgICAgLy8gaGFwcGVuIGluIFdlYkNvcmUuIEJ5IGV4cGFuZGluZyB0aGUg
Zm9jdXMgcmVjdGFuZ2xlIHVuY29uZGl0aW9uYWxseSB3ZSBpbmNyZWFzZSBpdHMgcHJvbWluZW5j
ZS4KLSAgICAgICAgYWRqdXN0UmVjdEZvckZvY3VzKHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gZ3Rr
Q2hlY2tCdXR0b24oKSA6IGd0a1JhZGlvQnV0dG9uKCksIHJlY3QsIHRydWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKLSAgICAgICAgLy8g
U2VlIHBhaW50SW5uZXJTcGluQnV0dG9uIGZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgd2UgZXhw
YW5kIHRoZSBwYWludGluZyByZWN0LgotICAgICAgICByZWN0LmluZmxhdGVZKDIpOwotICAgICAg
ICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSArIDIpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBl
KFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYg
KCF0aGVtZS0+aXNFbmFibGVkKG9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKG9i
amVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgaWYgKHRo
ZW1lLT5pc1ByZXNzZWQob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7
Ci0gICAgaWYgKHRoZW1lLT5pc0hvdmVyZWQob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19T
VEFURV9QUkVMSUdIVDsKLSAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKLX0KLQotc3RhdGlj
IHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0
eWxlKiBzdHlsZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gVGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCi0g
ICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVp
Z2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdpbnQgaW5kaWNhdG9yU2l6
ZTsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZp
bmRpY2F0b3JTaXplLCBOVUxMKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBG
aXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgR3Rr
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gV2UgZG8gbm90IGNhbGwgZ3RrX3RvZ2dsZV9idXR0
b25fc2V0X2FjdGl2ZSBoZXJlLCBiZWNhdXNlIHNvbWUgdGhlbWVzIGJlZ2luIGEgc2VyaWVzIG9m
Ci0gICAgLy8gYW5pbWF0aW9uIGZyYW1lcyBpbiBhICJ0b2dnbGVkIiBzaWduYWwgaGFuZGxlci4g
VGhpcyBwdXRzIHNvbWUgY2hlY2tib3hlcyBpbiBhIGhhbGYtd2F5Ci0gICAgLy8gY2hlY2tlZCBz
dGF0ZS4gRXZlcnkgR1RLKyB0aGVtZSBJIHRlc3RlZCBtZXJlbHkgbG9va3MgYXQgdGhlIHNoYWRv
dyB0eXBlIChhbmQgbm90IHRoZQotICAgIC8vICdhY3RpdmUnIHByb3BlcnR5KSB0byBkZXRlcm1p
bmUgd2hldGhlciBvciBub3QgdG8gZHJhdyB0aGUgY2hlY2suCi0gICAgZ3RrX3dpZGdldF9zZXRf
c2Vuc2l0aXZlKHdpZGdldCwgdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICF0aGVt
ZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRf
ZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PmRpcmVjdGlvbigpKSk7Ci0KLSAgICBib29sIGluZGV0ZXJtaW5hdGUgPSB0aGVtZS0+aXNJbmRl
dGVybWluYXRlKHJlbmRlck9iamVjdCk7Ci0gICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2luY29u
c2lzdGVudChHVEtfVE9HR0xFX0JVVFRPTih3aWRnZXQpLCBpbmRldGVybWluYXRlKTsKLQotICAg
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VUOwotICAgIGlmIChpbmRl
dGVybWluYXRlKSAvLyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSB0aGUgTW96aWxsYSBjb2RlLgotICAg
ICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19FVENIRURfSU47Ci0gICAgZWxzZSBpZiAodGhl
bWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NI
QURPV19JTjsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZv
LmNvbnRleHQsIHJlY3QpOwotICAgIEludFJlY3QgYnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0
LnNpemUoKSk7Ci0gICAgR3RrU3RhdGVUeXBlIHRvZ2dsZVN0YXRlID0gZ2V0R3RrU3RhdGVUeXBl
KHRoZW1lLCByZW5kZXJPYmplY3QpOwotICAgIGNvbnN0IGNoYXIqIGRldGFpbCA9IDA7Ci0gICAg
aWYgKEdUS19JU19SQURJT19CVVRUT04od2lkZ2V0KSkgewotICAgICAgICBkZXRhaWwgPSAicmFk
aW9idXR0b24iOwotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50T3B0aW9uKGJ1dHRvblJl
Y3QsIHdpZGdldCwgdG9nZ2xlU3RhdGUsIHNoYWRvd1R5cGUsIGRldGFpbCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZGV0YWlsID0gImNoZWNrYnV0dG9uIjsKLSAgICAgICAgd2lkZ2V0Q29udGV4
dC5ndGtQYWludENoZWNrKGJ1dHRvblJlY3QsIHdpZGdldCwgdG9nZ2xlU3RhdGUsIHNoYWRvd1R5
cGUsIGRldGFpbCk7Ci0gICAgfQotCi0gICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2Jq
ZWN0KSkgewotICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKLSAgICAgICAg
YWRqdXN0UmVjdEZvckZvY3VzKHdpZGdldCwgZm9jdXNSZWN0LCB0cnVlKTsKLSAgICAgICAgd2lk
Z2V0Q29udGV4dC5ndGtQYWludEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwg
ZGV0YWlsKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBz
dHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBwYWludFRvZ2dsZSh0aGlzLCByZW5kZXJP
YmplY3QsIGluZm8sIHJlY3QsIGd0a0NoZWNrQnV0dG9uKCkpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKLXsKLSAgICBzZXRUb2dnbGVTaXplKHRoaXMsIHN0eWxlLCBndGtSYWRpb0J1dHRv
bigpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3Rr
UmFkaW9CdXR0b24oKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBzZXRX
aWRnZXRIYXNGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gaGFzRm9jdXMpCi17Ci0g
ICAgZ19vYmplY3Rfc2V0KHdpZGdldCwgImhhcy1mb2N1cyIsIGhhc0ZvY3VzLCBOVUxMKTsKLQot
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIsIHlldCB0
aGVtZSBlbmdpbmVzIHN0aWxsIGxvb2sKLSAgICAvLyBhdCB0aGVzZSBmbGFncyB3aGVuIGRldGVy
bWluaW5nIGlmIGEgd2lkZ2V0IGhhcyBmb2N1cywgc28gd2UgbXVzdCB1c2UgdGhlbS4KLSAgICBp
ZiAoaGFzRm9jdXMpCi0gICAgICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hB
U19GT0NVUyk7Ci0gICAgZWxzZQotICAgICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdl
dCwgR1RLX0hBU19GT0NVUyk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0J1dHRv
bigpOwotICAgIEludFJlY3QgYnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0g
ICAgSW50UmVjdCBmb2N1c1JlY3QoYnV0dG9uUmVjdCk7Ci0KLSAgICBHdGtTdGF0ZVR5cGUgc3Rh
dGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KTsKLSAgICBndGtfd2lkZ2V0X3NldF9z
dGF0ZSh3aWRnZXQsIHN0YXRlKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0
LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAg
IGlmIChpc0ZvY3VzZWQob2JqZWN0KSkgewotICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRn
ZXQsIFRSVUUpOwotCi0gICAgICAgIGdib29sZWFuIGludGVyaW9yRm9jdXMgPSAwLCBmb2N1c1dp
ZHRoID0gMCwgZm9jdXNQYWRkaW5nID0gMDsKLSAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQo
d2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAm
aW50ZXJpb3JGb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUt
d2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3Vz
LXBhZGRpbmciLCAmZm9jdXNQYWRkaW5nLCBOVUxMKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIHVz
aW5nIGV4dGVyaW9yIGZvY3VzLCB3ZSBzaHJpbmsgdGhlIGJ1dHRvbiByZWN0IGRvd24gYmVmb3Jl
Ci0gICAgICAgIC8vIGRyYXdpbmcuIElmIHdlIGFyZSB1c2luZyBpbnRlcmlvciBmb2N1cyB3ZSBz
aHJpbmsgdGhlIGZvY3VzIHJlY3QuIFRoaXMKLSAgICAgICAgLy8gYXBwcm9hY2ggb3JpZ2luYXRl
cyBmcm9tIHRoZSBNb3ppbGxhIHRoZW1lIGRyYXdpbmcgY29kZSAoZ3RrMmRyYXdpbmcuYykuCi0g
ICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7Ci0gICAgICAgICAgICBHdGtTdHlsZSogc3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOwotICAgICAgICAgICAgZm9jdXNSZWN0Lmlu
ZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVzcyAtIGZvY3VzUGFkZGluZyk7Ci0gICAgICAgICAgICBm
b2N1c1JlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5nKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoLWZvY3VzV2lk
dGggLSBmb2N1c1BhZGRpbmcpOwotICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlWSgtZm9j
dXNQYWRkaW5nIC0gZm9jdXNQYWRkaW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAg
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IHN0YXRlID09IEdUS19TVEFURV9BQ1RJVkUgPyBH
VEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWlu
dEJveChidXR0b25SZWN0LCB3aWRnZXQsIHN0YXRlLCBzaGFkb3dUeXBlLCAiYnV0dG9uIik7Ci0g
ICAgaWYgKGlzRm9jdXNlZChvYmplY3QpKQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50
Rm9jdXMoZm9jdXNSZWN0LCB3aWRnZXQsIHN0YXRlLCAiYnV0dG9uIik7Ci0KLSAgICBzZXRXaWRn
ZXRIYXNGb2N1cyh3aWRnZXQsIEZBTFNFKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBS
ZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0Ci17Ci0gICAg
R3RrV2lkZ2V0KiBzZXBhcmF0b3IgPSBndGtDb21ib0JveFNlcGFyYXRvcigpOwotICAgIGlmICgh
c2VwYXJhdG9yKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGdib29sZWFuIGhhc1dpZGVTZXBh
cmF0b3JzID0gRkFMU0U7Ci0gICAgZ2ludCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ3RrX3dp
ZGdldF9zdHlsZV9nZXQoc2VwYXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRl
LXNlcGFyYXRvcnMiLCAmaGFzV2lkZVNlcGFyYXRvcnMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLSAgICBpZiAoaGFzV2lkZVNlcGFyYXRvcnMpCi0gICAgICAgIHJldHVy
biBzZXBhcmF0b3JXaWR0aDsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUoc2VwYXJh
dG9yKS0+eHRoaWNrbmVzczsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gVGFraW5nIHRoZSBmb250
IHNpemUgYW5kIHJldmVyc2luZyB0aGUgRFBJIGNvbnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKLSAg
ICAvLyBHVEsrIHJlbmRlcmluZyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLgotICAgIHJldHVybiBz
dHlsZS0+Zm9udCgpLnNpemUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQ
SSgpKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBi
dXR0b24sIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQotewot
ICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGJ1dHRvbik7Ci0gICAg
aW50IG91dGVyQm9yZGVyID0gZ3RrX2NvbnRhaW5lcl9nZXRfYm9yZGVyX3dpZHRoKEdUS19DT05U
QUlORVIoYnV0dG9uKSk7Ci0gICAgc3RhdGljIEd0a0JvcmRlciBkZWZhdWx0SW5uZXJCb3JkZXIg
PSB7MSwgMSwgMSwgMX07Ci0gICAgR3RrQm9yZGVyKiBpbm5lckJvcmRlcjsKLSAgICBndGtfd2lk
Z2V0X3N0eWxlX2dldChidXR0b24sICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXIsIE5VTEwp
OwotICAgIGlmICghaW5uZXJCb3JkZXIpCi0gICAgICAgIGlubmVyQm9yZGVyID0gJmRlZmF1bHRJ
bm5lckJvcmRlcjsKLQotICAgIGxlZnQgPSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT5sZWZ0
ICsgc3R5bGUtPnh0aGlja25lc3M7Ci0gICAgcmlnaHQgPSBvdXRlckJvcmRlciArIGlubmVyQm9y
ZGVyLT5yaWdodCArIHN0eWxlLT54dGhpY2tuZXNzOwotICAgIHRvcCA9IG91dGVyQm9yZGVyICsg
aW5uZXJCb3JkZXItPnRvcCArIHN0eWxlLT55dGhpY2tuZXNzOwotICAgIGJvdHRvbSA9IG91dGVy
Qm9yZGVyICsgaW5uZXJCb3JkZXItPmJvdHRvbSArIHN0eWxlLT55dGhpY2tuZXNzOwotCi0gICAg
aWYgKGlubmVyQm9yZGVyICE9ICZkZWZhdWx0SW5uZXJCb3JkZXIpCi0gICAgICAgIGd0a19ib3Jk
ZXJfZnJlZShpbm5lckJvcmRlcik7Ci19Ci0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29t
Ym9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50
JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhpcyBtZW51IGxpc3Qg
YnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCi0gICAgLy8gZG9u
J3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2Vz
LgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEEgY29tYm8gYm94IGJ1dHRvbiBpcyBhIGJ1dHRvbiB3aXRoIHdp
ZGdldHMgcGFja2VkIGludG8gaXQuCi0gICAgR3RrU3R5bGUqIGJ1dHRvbldpZGdldFN0eWxlID0g
Z3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7Ci0gICAgZ2V0QnV0dG9u
SW5uZXJCb3JkZXIoZ3RrQ29tYm9Cb3hCdXR0b24oKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKLQotICAgIC8vIEFkZCB4dGhpY2tuZXNzIGFtb3VudCBvZiBwYWRkaW5nIGZvciBlYWNoIHNp
ZGUgb2YgdGhlIHNlcGFyYXRvci4gVGhpcyBlbnN1cmVzCi0gICAgLy8gdGhhdCB0aGUgdGV4dCBk
b2VzIG5vdCBidW1wIHVwIGFnYWluc3QgdGhlIHNlcGFyYXRvci4KLSAgICBpbnQgYXJyb3dBbmRT
ZXBlcmF0b3JMZW5ndGggPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSkgKwotICAgICAgICBnZXRD
b21ib0JveFNlcGFyYXRvcldpZHRoKCkgKyAoMyAqIGJ1dHRvbldpZGdldFN0eWxlLT54dGhpY2tu
ZXNzKTsKLQotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICBsZWZ0
ICs9IGFycm93QW5kU2VwZXJhdG9yTGVuZ3RoOwotICAgIGVsc2UKLSAgICAgICAgcmlnaHQgKz0g
YXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0Jv
eFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIGxl
ZnQ7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCBy
aWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJldHVybiByaWdodDsKLX0KLQotaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Ci17Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7
Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OwotICAgIHJldHVybiB0b3A7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGludCBsZWZ0
ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwotICAgIGdldENvbWJvQm94UGFk
ZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICByZXR1cm4gYm90dG9t
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKHBhaW50QnV0dG9uKG9iamVjdCwgaW5mbywgcmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gTWVudSBsaXN0IGJ1dHRvbiBwYWludGluZyBzdHJhdGVneS4KLSAgICAv
LyBGb3IgYnV0dG9ucyB3aXRoIGFwcGVhcnMtYXMtbGlzdCBzZXQgdG8gZmFsc2UgKGhhdmluZyBh
IHNlcGFyYXRvcik6Ci0gICAgLy8gfCBsZWZ0IGJvcmRlciB8IEJ1dHRvbiB0ZXh0IHwgeHRoaWNr
bmVzcyB8IHZzZXBhcmF0b3IgfCB4dGhpY2tuZXNzIHwgYXJyb3cgfCB4dGhpY2tuZXNzIHwgcmln
aHQgYm9yZGVyIHwKLSAgICAvLyBGb3IgYnV0dG9ucyB3aXRoIGFwcGVhcnMtYXMtbGlzdCBzZXQg
dG8gdHJ1ZSAobm90IGhhdmluZyBhIHNlcGFyYXRvcik6Ci0gICAgLy8gfCBsZWZ0IGJvcmRlciB8
IEJ1dHRvbiB0ZXh0IHwgYXJyb3cgfCB4dGhpY2tuZXNzIHwgcmlnaHQgYm9yZGVyIHwKLQotICAg
IGludCBsZWZ0Qm9yZGVyID0gMCwgcmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0
b3BCb3JkZXIgPSAwOwotICAgIGdldEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9u
KCksIGxlZnRCb3JkZXIsIHRvcEJvcmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotICAgIGludCBhcnJvd1Np
emUgPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSk7Ci0gICAgR3RrU3R5bGUqIGJ1dHRvblN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7Ci0KLSAgICBJbnRS
ZWN0IGFycm93UmVjdCgwLCAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyLCBhcnJvd1Np
emUsIGFycm93U2l6ZSk7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0gICAg
ICAgIGFycm93UmVjdC5zZXRYKGxlZnRCb3JkZXIgKyBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyk7
Ci0gICAgZWxzZQotICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0LndpZHRoKCkgLSByaWdodEJv
cmRlciAtIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzIC0gYXJyb3dTaXplKTsKLSAgICBHdGtTaGFk
b3dUeXBlIHNoYWRvd1R5cGUgPSBpc1ByZXNzZWQob2JqZWN0KSA/IEdUS19TSEFET1dfSU4gOiBH
VEtfU0hBRE9XX09VVDsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4
dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBnZXRH
dGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJy
b3coYXJyb3dSZWN0LCBndGtDb21ib0JveEFycm93KCksIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwg
R1RLX0FSUk9XX0RPV04sICJhcnJvdyIpOwotCi0gICAgLy8gU29tZSBjb21ibyBib3hlcyBkbyBu
b3QgaGF2ZSBhIHNlcGFyYXRvci4KLSAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJv
Qm94U2VwYXJhdG9yKCk7Ci0gICAgaWYgKCFzZXBhcmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFdlIHdhbnQgdG8gZGVjcmVhc2UgdGhlIGhlaWdodCBvZiB0aGUgc2VwYXJh
dG9yIGJhc2VkIG9uIHRoZSBmb2N1cyBwYWRkaW5nIG9mIHRoZSBidXR0b24uCi0gICAgZ2ludCBm
b2N1c1BhZGRpbmcgPSAwLCBmb2N1c1dpZHRoID0gMDsgCi0gICAgZ3RrX3dpZGdldF9zdHlsZV9n
ZXQoZ3RrQ29tYm9Cb3hCdXR0b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMt
bGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1
cy1wYWRkaW5nIiwgJmZvY3VzUGFkZGluZywgTlVMTCk7Ci0gICAgdG9wQm9yZGVyICs9IGZvY3Vz
UGFkZGluZyArIGZvY3VzV2lkdGg7Ci0gICAgYm90dG9tQm9yZGVyICs9IGZvY3VzUGFkZGluZyAr
IGZvY3VzV2lkdGg7Ci0gICAgaW50IHNlcGFyYXRvcldpZHRoID0gZ2V0Q29tYm9Cb3hTZXBhcmF0
b3JXaWR0aCgpOwotICAgIEludFJlY3Qgc2VwYXJhdG9yUmVjdCgwLCB0b3BCb3JkZXIsIHNlcGFy
YXRvcldpZHRoLCByZWN0LmhlaWdodCgpIC0gdG9wQm9yZGVyIC0gYm90dG9tQm9yZGVyKTsKLSAg
ICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgc2VwYXJhdG9yUmVjdC5z
ZXRYKGFycm93UmVjdC54KCkgKyBhcnJvd1JlY3Qud2lkdGgoKSArIGJ1dHRvblN0eWxlLT54dGhp
Y2tuZXNzICsgc2VwYXJhdG9yV2lkdGgpOwotICAgIGVsc2UKLSAgICAgICAgc2VwYXJhdG9yUmVj
dC5zZXRYKGFycm93UmVjdC54KCkgLSBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyAtIHNlcGFyYXRv
cldpZHRoKTsKLQotICAgIGdib29sZWFuIGhhc1dpZGVTZXBhcmF0b3JzID0gRkFMU0U7Ci0gICAg
Z3RrX3dpZGdldF9zdHlsZV9nZXQoc2VwYXJhdG9yLCAid2lkZS1zZXBhcmF0b3JzIiwgJmhhc1dp
ZGVTZXBhcmF0b3JzLCBOVUxMKTsKLSAgICBpZiAoaGFzV2lkZVNlcGFyYXRvcnMpCi0gICAgICAg
IHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goc2VwYXJhdG9yUmVjdCwgc2VwYXJhdG9yLCBHVEtf
U1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0VUQ0hFRF9PVVQsICJ2c2VwYXJhdG9yIik7Ci0gICAg
ZWxzZQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50VkxpbmUoc2VwYXJhdG9yUmVjdCwg
c2VwYXJhdG9yLCBHVEtfU1RBVEVfTk9STUFMLCAidnNlcGFyYXRvciIpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLQotICAgIGJv
b2wgZW5hYmxlZCA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5Q29udHJv
bChyZW5kZXJPYmplY3QpOwotICAgIEd0a1N0YXRlVHlwZSBiYWNrZ3JvdW5kU3RhdGUgPSBlbmFi
bGVkID8gR1RLX1NUQVRFX05PUk1BTCA6IEdUS19TVEFURV9JTlNFTlNJVElWRTsKLSAgICBndGtf
d2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCBlbmFibGVkKTsKLSAgICBndGtfd2lkZ2V0X3Nl
dF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkpKTsKLSAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIGlzRm9jdXNl
ZChyZW5kZXJPYmplY3QpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29u
dGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAgIEludFJlY3QgdGV4dEZpZWxkUmVjdChJbnRQ
b2ludCgpLCByZWN0LnNpemUoKSk7Ci0KLSAgICAvLyBUaGUgZW50cnkgYmFja2dyb3VuZCBpcyBv
bmx5IHBhaW50ZWQgb3ZlciB0aGUgaW50ZXJpb3IgcGFydCBvZiB0aGUgR1RLKyBlbnRyeSwgbm90
Ci0gICAgLy8gdGhlIGVudGlyZSBmcmFtZS4gVGhpcyBoYXBwZW5zIGluIHRoZSBNb3ppbGxhIHRo
ZW1lIGRyYXdpbmcgY29kZSBhcyB3ZWxsLgotICAgIEludFJlY3QgaW50ZXJpb3JSZWN0KHRleHRG
aWVsZFJlY3QpOwotICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdp
ZGdldCk7Ci0gICAgaW50ZXJpb3JSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVzcyk7Ci0g
ICAgaW50ZXJpb3JSZWN0LmluZmxhdGVZKC1zdHlsZS0+eXRoaWNrbmVzcyk7Ci0gICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludEZsYXRCb3goaW50ZXJpb3JSZWN0LCB3aWRnZXQsIGJhY2tncm91bmRT
dGF0ZSwgR1RLX1NIQURPV19OT05FLCAiZW50cnlfYmciKTsKLQotICAgIC8vIFRoaXMgaXMgcmVz
cG9uc2libGUgZm9yIGRyYXdpbmcgdGhlIGFjdHVhbCBmcmFtZS4KLSAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50U2hhZG93KHRleHRGaWVsZFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwg
R1RLX1NIQURPV19JTiwgImVudHJ5Iik7Ci0KLSAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOwot
ICAgIGdpbnQgZm9jdXNXaWR0aDsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0
aCwgIE5VTEwpOwotICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSAmJiAhaW50ZXJpb3JG
b2N1cykgewotICAgICAgICAvLyBXaGVuIEdUSysgcGFpbnRzIGEgdGV4dCBlbnRyeSB3aXRoIGZv
Y3VzLCBpdCBzaHJpbmtzIHRoZSBzaXplIG9mIHRoZSBmcmFtZSBhcmVhIGJ5IHRoZQotICAgICAg
ICAvLyBmb2N1cyB3aWR0aCBhbmQgcGFpbnRzIG92ZXIgdGhlIHByZXZpb3VzbHkgdW5mb2N1c2Vk
IHRleHQgZW50cnkuIFdlIG5lZWQgdG8gZW11bGF0ZSB0aGF0Ci0gICAgICAgIC8vIGJ5IGRyYXdp
bmcgYm90aCB0aGUgdW5mb2N1c2VkIGZyYW1lIGFib3ZlIGFuZCB0aGUgZm9jdXNlZCBmcmFtZSBo
ZXJlLgotICAgICAgICBJbnRSZWN0IHNoYWRvd1JlY3QodGV4dEZpZWxkUmVjdCk7Ci0gICAgICAg
IHNoYWRvd1JlY3QuaW5mbGF0ZSgtZm9jdXNXaWR0aCk7Ci0gICAgICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRTaGFkb3coc2hhZG93UmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtf
U0hBRE9XX0lOLCAiZW50cnkiKTsKLQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9j
dXModGV4dEZpZWxkUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCAiZW50cnkiKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbnRyb2xQYXJ0IHBhcnQg
PSBvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlQocGFydCA9PSBTbGlk
ZXJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09
IE1lZGlhVm9sdW1lU2xpZGVyUGFydCk7Ci0KLSAgICAvLyBXZSBzaHJpbmsgdGhlIHRyb3VnaCBy
ZWN0IHNsaWdodGx5IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGZvY3VzIGluZGljYXRvci4KLSAgICBJ
bnRSZWN0IHRyb3VnaFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOyAvLyBUaGlzIGlzIHJl
bGF0aXZlIHRvIHJlY3QuCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOwotICAgIGlmIChwYXJ0
ID09IFNsaWRlckhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHdpZGdldCA9IGd0a0hTY2FsZSgp
OwotICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVYKC1ndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRn
ZXQpLT54dGhpY2tuZXNzKTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aWRnZXQgPSBndGtWU2Nh
bGUoKTsKLSAgICAgICAgdHJvdWdoUmVjdC5pbmZsYXRlWSgtZ3RrX3dpZGdldF9nZXRfc3R5bGUo
d2lkZ2V0KS0+eXRoaWNrbmVzcyk7Ci0gICAgfQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OwotCi0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4
dCwgcmVjdCk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveCh0cm91Z2hSZWN0LCB3aWRn
ZXQsIEdUS19TVEFURV9BQ1RJVkUsIEdUS19TSEFET1dfT1VULCAidHJvdWdoIik7Ci0gICAgaWYg
KGlzRm9jdXNlZChvYmplY3QpKQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMo
SW50UmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSksIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBl
KHRoaXMsIG9iamVjdCksICJ0cm91Z2giKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChp
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwot
ICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQ
YXJ0KTsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKLSAgICBjb25zdCBjaGFyKiBkZXRh
aWwgPSAwOwotICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChwYXJ0ID09
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgd2lkZ2V0ID0gZ3RrSFNjYWxl
KCk7Ci0gICAgICAgIGRldGFpbCA9ICJoc2NhbGUiOwotICAgICAgICBvcmllbnRhdGlvbiA9IEdU
S19PUklFTlRBVElPTl9IT1JJWk9OVEFMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9
IGd0a1ZTY2FsZSgpOwotICAgICAgICBkZXRhaWwgPSAidnNjYWxlIjsKLSAgICAgICAgb3JpZW50
YXRpb24gPSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw7Ci0gICAgfQotICAgIGd0a193aWRnZXRf
c2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSkpOwotCi0gICAgLy8gT25seSBzb21lIHRoZW1lcyBoYXZlIHNsaWRlciB0aHVt
YnMgcmVzcG9uZCB0byBjbGlja3MgYW5kIHNvbWUgZG9uJ3QuIFRoaXMgaW5mb3JtYXRpb24gaXMK
LSAgICAvLyBnYXRoZXJlZCB2aWEgdGhlICdhY3RpdmF0ZS1zbGlkZXInIHByb3BlcnR5LCBidXQg
aXQncyBkZXByZWNhdGVkIGluIEdUSysgMi4yMiBhbmQgcmVtb3ZlZCBpbgotICAgIC8vIEdUSysg
My54LiBUaGUgZHJhd2JhY2sgb2Ygbm90IGhvbm9yaW5nIGl0IGlzIHRoYXQgc2xpZGVyIHRodW1i
cyBjaGFuZ2UgY29sb3Igd2hlbiB5b3UgY2xpY2sKLSAgICAvLyBvbiB0aGVtLiAKLSAgICBJbnRS
ZWN0IHRodW1iUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNsaWRlcih0aHVtYlJlY3QsIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBl
KHRoaXMsIG9iamVjdCksIEdUS19TSEFET1dfT1VULCBkZXRhaWwsIG9yaWVudGF0aW9uKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIENvbnRy
b2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ICE9IFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwYXJ0ID09IFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQgPyBndGtIU2NhbGUoKSA6IGd0a1ZTY2FsZSgpOwotICAgIGlu
dCBsZW5ndGggPSAwLCB3aWR0aCA9IDA7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfbGVuZ3RoIiwgJmxlbmd0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX3dpZHRoIiwgJndpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jp
em9udGFsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4
ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci19Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrUHJvZ3Jlc3NCYXIoKTsKLSAgICBn
dGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHQgd2lkZ2V0Q29udGV4dChwYWludEluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgSW50UmVjdCBm
dWxsUHJvZ3Jlc3NCYXJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRD
b250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxQcm9ncmVzc0JhclJlY3QsIHdpZGdldCwgR1RLX1NUQVRF
X05PUk1BTCwgR1RLX1NIQURPV19JTiwgInRyb3VnaCIpOwotCi0gICAgR3RrU3R5bGUqIHN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVj
dChmdWxsUHJvZ3Jlc3NCYXJSZWN0KTsKLSAgICBwcm9ncmVzc1JlY3QuaW5mbGF0ZVgoLXN0eWxl
LT54dGhpY2tuZXNzKTsKLSAgICBwcm9ncmVzc1JlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tu
ZXNzKTsKLSAgICBwcm9ncmVzc1JlY3QgPSBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jl
c3NSZWN0KHJlbmRlck9iamVjdCwgcHJvZ3Jlc3NSZWN0KTsKLQotICAgIGlmICghcHJvZ3Jlc3NS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChwcm9ncmVz
c1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX1BSRUxJR0hULCBHVEtfU0hBRE9XX09VVCwgImJhciIp
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEd0a1N0eWxlKiBndGtTdHlsZSA9IGd0a193
aWRnZXRfZ2V0X3N0eWxlKGd0a1NwaW5CdXR0b24oKSk7Ci0gICAgY29uc3QgUGFuZ29Gb250RGVz
Y3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbiA9IGd0a1N0eWxlLT5mb250X2Rlc2M7Ci0gICAgZ2lu
dCBmb250U2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0
aW9uKTsKLQotICAgIC8vIEZvcmNlIGFuIG9kZCBhcnJvdyBzaXplIGhlcmUuIEdUSysgMy54IGZv
cmNlcyBldmVuIGluIHRoaXMgY2FzZSwgYnV0Ci0gICAgLy8gTm9kb2thLWJhc2VkIHRoZW1lcyBs
b29rIGluY29ycmVjdCB3aXRoIGFuIGV2ZW4gYXJyb3cgc2l6ZS4KLSAgICBpbnQgd2lkdGggPSBt
YXgoUEFOR09fUElYRUxTKGZvbnRTaXplKSwgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSk7Ci0gICAg
d2lkdGggKz0gLSgod2lkdGggJSAyKSAtIDEpICsgZ3RrU3R5bGUtPnh0aGlja25lc3M7Ci0KLSAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRN
aW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBXZSBl
eHBhbmQgdGhlIHBhaW50ZWQgYXJlYSBieSAyIHBpeGVscyBvbiB0aGUgdG9wIGFuZCBib3R0b20g
YW5kIDIgcGl4ZWxzIG9uIHRoZSByaWdodC4gVGhpcwotICAgIC8vIGlzIGJlY2F1c2UgR1RLKyB0
aGVtZXMgd2FudCB0byBkcmF3IG92ZXIgdGhlIHRleHQgYm94IGJvcmRlcnMsIGJ1dCBXZWJDb3Jl
IHJlbmRlcnMgdGhlIGlubmVyCi0gICAgLy8gc3BpbiBidXR0b24gaW5zaWRlIHRoZSB0ZXh0IGJv
eC4KLSAgICBJbnRSZWN0IGV4cGFuZGVkUmVjdChyZWN0KTsKLSAgICBleHBhbmRlZFJlY3QuaW5m
bGF0ZVkoMik7Ci0gICAgZXhwYW5kZWRSZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSArIDIpOwot
Ci0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250
ZXh0LCBleHBhbmRlZFJlY3QpOwotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrU3BpbkJ1dHRv
bigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rp
b24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotCi0gICAgSW50UmVjdCBm
dWxsU3BpbkJ1dHRvblJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7Ci0gICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsU3BpbkJ1dHRvblJlY3QsIHdpZGdldCwgR1RL
X1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNwaW5idXR0b24iKTsKLQotICAgIGJvb2wg
dXBQcmVzc2VkID0gaXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpOwotICAg
IGJvb2wgdXBIb3ZlcmVkID0gaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3Qp
OwotICAgIGJvb2wgY29udHJvbEFjdGl2ZSA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFp
c1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpOwotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93
VHlwZSA9IHVwUHJlc3NlZCA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLQotICAg
IEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgaWYg
KGNvbnRyb2xBY3RpdmUpIHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpICYm
IHVwUHJlc3NlZCkKLSAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpICYmIHVwSG92ZXJlZCkKLSAg
ICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9QUkVMSUdIVDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKLSAgICB9Ci0gICAgSW50
UmVjdCB0b3BSZWN0KEludFBvaW50KCksIGV4cGFuZGVkUmVjdC5zaXplKCkpOwotICAgIHRvcFJl
Y3Quc2V0SGVpZ2h0KGV4cGFuZGVkUmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIHdpZGdldENvbnRl
eHQuZ3RrUGFpbnRCb3godG9wUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJz
cGluYnV0dG9uX3VwIik7Ci0KLSAgICAvLyBUaGUgYXJyb3cgc2l6ZS9wb3NpdGlvbiBjYWxjdWxh
dGlvbiBoZXJlIGlzIGJhc2VkIG9uIHRoZSBhcmJpdHJhcnkgZ3ltbmFzdGljcyB0aGF0IGhhcHBl
bgotICAgIC8vIGluIGd0a3NwaW5idXR0b24uYy4gSXQgaXNuJ3QgcHJldHR5IHRoZXJlIGFuZCBp
dCBpc24ndCBwcmV0dHkgaGVyZS4gVGhpcyBtYW5hZ2VzIHRvIG1ha2UKLSAgICAvLyB0aGUgYnV0
dG9uIGxvb2sgbmF0aXZlIGZvciBtYW55IHRoZW1lcyB0aG91Z2guCi0gICAgSW50UmVjdCBhcnJv
d1JlY3Q7Ci0gICAgaW50IGFycm93U2l6ZSA9IChleHBhbmRlZFJlY3Qud2lkdGgoKSAtIDMpIC8g
MjsKLSAgICBhcnJvd1NpemUgLT0gKGFycm93U2l6ZSAlIDIpIC0gMTsgLy8gRm9yY2Ugb2RkLgot
ICAgIGFycm93UmVjdC5zZXRXaWR0aChhcnJvd1NpemUpOwotICAgIGFycm93UmVjdC5zZXRIZWln
aHQoYXJyb3dTaXplKTsKLSAgICBhcnJvd1JlY3QubW92ZSgoZXhwYW5kZWRSZWN0LndpZHRoKCkg
LSBhcnJvd1JlY3Qud2lkdGgoKSkgLyAyLAotICAgICAgICAgICAgICAgICAgICh0b3BSZWN0Lmhl
aWdodCgpIC0gYXJyb3dSZWN0LmhlaWdodCgpKSAvIDIgKyAxKTsKLSAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwg
R1RLX0FSUk9XX1VQLCAic3BpbmJ1dHRvbiIpOwotCi0gICAgc2hhZG93VHlwZSA9IGlzUHJlc3Nl
ZChyZW5kZXJPYmplY3QpICYmICF1cFByZXNzZWQgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURP
V19PVVQ7Ci0gICAgaWYgKGNvbnRyb2xBY3RpdmUpIHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChy
ZW5kZXJPYmplY3QpICYmICF1cFByZXNzZWQpCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtf
U1RBVEVfQUNUSVZFOwotICAgICAgICBlbHNlIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAm
JiAhdXBIb3ZlcmVkKQotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hU
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFM
OwotICAgIH0KLSAgICBJbnRSZWN0IGJvdHRvbVJlY3QoSW50UG9pbnQoMCwgZXhwYW5kZWRSZWN0
LmhlaWdodCgpIC8gMiksIGV4cGFuZGVkUmVjdC5zaXplKCkpOwotICAgIGJvdHRvbVJlY3Quc2V0
SGVpZ2h0KGV4cGFuZGVkUmVjdC5oZWlnaHQoKSAtIGJvdHRvbVJlY3QueSgpKTsKLSAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJvdHRvbVJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCAic3BpbmJ1dHRvbl9kb3duIik7Ci0KLSAgICBhcnJvd1JlY3Quc2V0WShhcnJvd1Jl
Y3QueSgpICsgYm90dG9tUmVjdC55KCkgLSAxKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50
QXJyb3coYXJyb3dSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9X
X0RPV04sICJzcGluYnV0dG9uIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdSZWZQdHI8
R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNv
bnN0IGNoYXIqIGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29u
U2l6ZSkKLXsKLSAgICBBU1NFUlQod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DT05UQUlORVIgfHwg
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9FTlRSWSk7Ci0KLSAgICBSZW5kZXJUaGVtZUd0ayogdGhl
bWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS5nZXQoKSk7Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRUeXBlID09IEdUS19U
WVBFX0NPTlRBSU5FUiA/IEdUS19XSURHRVQodGhlbWUtPmd0a0NvbnRhaW5lcigpKSA6IHRoZW1l
LT5ndGtFbnRyeSgpOwotCi0gICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5
bGUod2lkZ2V0KTsKLSAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2xvb2t1cF9p
Y29uX3NldChzdHlsZSwgaWNvbk5hbWUpOwotICAgIHJldHVybiBhZG9wdEdSZWYoZ3RrX2ljb25f
c2V0X3JlbmRlcl9pY29uKGljb25TZXQsIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVj
dGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVUeXBlPihzdGF0ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSwg
MCwgMCkpOwotfQotCi1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JX
aWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUs
IGNvbnN0IGNoYXIgKmZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQg
c3RhdGUsIGdpbnQgaWNvblNpemUpCi17Ci0gICAgcmV0dXJuIGdldFN0b2NrSWNvbkZvcldpZGdl
dFR5cGUod2lkZ2V0VHlwZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBkaXJlY3Rpb24sIHN0YXRl
LCBpY29uU2l6ZSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBndGtFbnRyeSgpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT5i
YXNlW0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtX
aWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Ci19Ci0KLUNvbG9yIFJlbmRlclRo
ZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17
Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVybiBndGtfd2lk
Z2V0X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0W0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0KLUNv
bG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAg
cmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX0FDVElW
RV07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVW
aWV3KCk7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RL
X1NUQVRFX1NFTEVDVEVEXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3
aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3
aWRnZXQpLT5iYXNlW0dUS19TVEFURV9BQ1RJVkVdOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0
azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAg
R3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0
X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0W0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lR3RrOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICBy
ZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZF
XTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlk
KSBjb25zdAotewotICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVC
dXR0b250ZXh0OgotICAgICAgICByZXR1cm4gQ29sb3IoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3Rr
QnV0dG9uKCkpLT5mZ1tHVEtfU1RBVEVfTk9STUFMXSk7Ci0gICAgY2FzZSBDU1NWYWx1ZUNhcHRp
b250ZXh0OgotICAgICAgICByZXR1cm4gQ29sb3IoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrRW50
cnkoKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgZ3RrU3R5bGVTZXRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3R5bGUq
IHByZXZpb3VzLCBSZW5kZXJUaGVtZSogcmVuZGVyVGhlbWUpCi17Ci0gICAgLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZ2V0IGNhbGxlZCBtYW55IHRpbWVzIGZvciBh
IHNpbmdsZSBHVEsrIHN0eWxlIGNoYW5nZSBzaWduYWwuCi0gICAgcmVuZGVyVGhlbWUtPnBsYXRm
b3JtQ29sb3JzRGlkQ2hhbmdlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0KQotewotICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOwotICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50Iiwg
R0lOVF9UT19QT0lOVEVSKFRSVUUpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0dXBX
aWRnZXRBbmRBZGRUb0NvbnRhaW5lcihHdGtXaWRnZXQqIHdpZGdldCwgR3RrV2lkZ2V0KiB3aW5k
b3cpIGNvbnN0Ci17Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cp
LCB3aWRnZXQpOwotICAgIHNldHVwV2lkZ2V0KHdpZGdldCk7Ci0KLSAgICAvLyBGSVhNRTogUGVy
aGFwcyB0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgdGhlIGNvbnRhaW5pbmcgd2luZG93
IG9yIHBhcmVudCBjb250YWluZXIuCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aWRnZXQsICJzdHls
ZS1zZXQiLCBHX0NBTExCQUNLKGd0a1N0eWxlU2V0Q2FsbGJhY2spLCBjb25zdF9jYXN0PFJlbmRl
clRoZW1lR3RrKj4odGhpcykpOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtD
b250YWluZXIoKSBjb25zdAotewotICAgIGlmIChtX2d0a0NvbnRhaW5lcikKLSAgICAgICAgcmV0
dXJuIG1fZ3RrQ29udGFpbmVyOwotCi0gICAgbV9ndGtXaW5kb3cgPSBndGtfd2luZG93X25ldyhH
VEtfV0lORE9XX1BPUFVQKTsKLSAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX2d0a1dpbmRv
dywgbV9jb2xvcm1hcCk7Ci0gICAgc2V0dXBXaWRnZXQobV9ndGtXaW5kb3cpOwotICAgIGd0a193
aWRnZXRfc2V0X25hbWUobV9ndGtXaW5kb3csICJNb3ppbGxhR3RrV2lkZ2V0Iik7Ci0KLSAgICBt
X2d0a0NvbnRhaW5lciA9IGd0a19maXhlZF9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRv
Q29udGFpbmVyKG1fZ3RrQ29udGFpbmVyLCBtX2d0a1dpbmRvdyk7Ci0gICAgcmV0dXJuIG1fZ3Rr
Q29udGFpbmVyOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtCdXR0b24oKSBj
b25zdAotewotICAgIGlmIChtX2d0a0J1dHRvbikKLSAgICAgICAgcmV0dXJuIG1fZ3RrQnV0dG9u
OwotICAgIG1fZ3RrQnV0dG9uID0gZ3RrX2J1dHRvbl9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFu
ZEFkZFRvQ29udGFpbmVyKG1fZ3RrQnV0dG9uLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJu
IG1fZ3RrQnV0dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtFbnRyeSgp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrRW50cnkpCi0gICAgICAgIHJldHVybiBtX2d0a0VudHJ5
OwotICAgIG1fZ3RrRW50cnkgPSBndGtfZW50cnlfbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRB
ZGRUb0NvbnRhaW5lcihtX2d0a0VudHJ5LCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1f
Z3RrRW50cnk7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1RyZWVWaWV3KCkg
Y29uc3QKLXsKLSAgICBpZiAobV9ndGtUcmVlVmlldykKLSAgICAgICAgcmV0dXJuIG1fZ3RrVHJl
ZVZpZXc7Ci0gICAgbV9ndGtUcmVlVmlldyA9IGd0a190cmVlX3ZpZXdfbmV3KCk7Ci0gICAgc2V0
dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a1RyZWVWaWV3LCBndGtDb250YWluZXIoKSk7
Ci0gICAgcmV0dXJuIG1fZ3RrVHJlZVZpZXc7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVH
dGs6Omd0a1ZTY2FsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrVlNjYWxlKQotICAgICAgICBy
ZXR1cm4gbV9ndGtWU2NhbGU7Ci0gICAgbV9ndGtWU2NhbGUgPSBndGtfdnNjYWxlX25ldygwKTsK
LSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjYWxlLCBndGtDb250YWlu
ZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrVlNjYWxlOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRo
ZW1lR3RrOjpndGtIU2NhbGUoKSBjb25zdAotewotICAgIGlmIChtX2d0a0hTY2FsZSkKLSAgICAg
ICAgcmV0dXJuIG1fZ3RrSFNjYWxlOwotICAgIG1fZ3RrSFNjYWxlID0gZ3RrX2hzY2FsZV9uZXco
MCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0hTY2FsZSwgZ3RrQ29u
dGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a0hTY2FsZTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrUmFkaW9CdXR0b24oKSBjb25zdAotewotICAgIGlmIChtX2d0a1JhZGlv
QnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKLSAgICBtX2d0a1JhZGlv
QnV0dG9uID0gZ3RrX3JhZGlvX2J1dHRvbl9uZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRU
b0NvbnRhaW5lcihtX2d0a1JhZGlvQnV0dG9uLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJu
IG1fZ3RrUmFkaW9CdXR0b247Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0No
ZWNrQnV0dG9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtDaGVja0J1dHRvbikKLSAgICAgICAg
cmV0dXJuIG1fZ3RrQ2hlY2tCdXR0b247Ci0gICAgbV9ndGtDaGVja0J1dHRvbiA9IGd0a19jaGVj
a19idXR0b25fbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0No
ZWNrQnV0dG9uLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrQ2hlY2tCdXR0b247
Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1Byb2dyZXNzQmFyKCkgY29uc3QK
LXsKLSAgICBpZiAobV9ndGtQcm9ncmVzc0JhcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrUHJvZ3Jl
c3NCYXI7Ci0gICAgbV9ndGtQcm9ncmVzc0JhciA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7Ci0g
ICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a1Byb2dyZXNzQmFyLCBndGtDb250
YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrUHJvZ3Jlc3NCYXI7Ci19Ci0KLXN0YXRpYyB2b2lk
IGdldEd0a0NvbWJvQm94QnV0dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciB0YXJnZXQp
Ci17Ci0gICAgaWYgKCFHVEtfSVNfVE9HR0xFX0JVVFRPTih3aWRnZXQpKQotICAgICAgICByZXR1
cm47Ci0gICAgR3RrV2lkZ2V0Kiogd2lkZ2V0VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0
Kio+KHRhcmdldCk7Ci0gICAgKndpZGdldFRhcmdldCA9IHdpZGdldDsKLX0KLQotdHlwZWRlZiBz
dHJ1Y3QgewotICAgIEd0a1dpZGdldCogYXJyb3c7Ci0gICAgR3RrV2lkZ2V0KiBzZXBhcmF0b3I7
Ci19IENvbWJvQm94V2lkZ2V0UGllY2VzOwotCi1zdGF0aWMgdm9pZCBnZXRHdGtDb21ib0JveFBp
ZWNlcyhHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoR1RLX0lT
X0FSUk9XKHdpZGdldCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXRQaWVj
ZXMqPihkYXRhKS0+YXJyb3cgPSB3aWRnZXQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKEdUS19JU19TRVBBUkFUT1Iod2lkZ2V0KSkgCi0gICAgICAgIHN0YXRpY19jYXN0PENvbWJv
Qm94V2lkZ2V0UGllY2VzKj4oZGF0YSktPnNlcGFyYXRvciA9IHdpZGdldDsKLX0KLQotR3RrV2lk
Z2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3goKSBjb25zdAotewotICAgIGlmIChtX2d0
a0NvbWJvQm94KQotICAgICAgICByZXR1cm4gbV9ndGtDb21ib0JveDsKLSAgICBtX2d0a0NvbWJv
Qm94ID0gZ3RrX2NvbWJvX2JveF9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFp
bmVyKG1fZ3RrQ29tYm9Cb3gsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtDb21i
b0JveDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cmVmcmVzaENvbWJvQm94Q2hpbGRyZW4o
KSBjb25zdAotewotICAgIGd0a0NvbWJvQm94KCk7IC8vIEVuc3VyZSB0aGF0IHdlJ3ZlIGluaXRp
YWxpemVkIHRoZSBjb21ibyBib3guCi0KLSAgICAvLyBTb21lIHRoZW1lcyBsb29rIGF0IHdpZGdl
dCBhbmNlc3RyeSB0byBkZXRlcm1pbmUgaG93IHRvIHJlbmRlciB3aWRnZXRzLCBzbwotICAgIC8v
IGdldCB0aGUgR3RrQnV0dG9uIHRoYXQgaXMgdGhlIGFjdHVhbCBjaGlsZCBvZiB0aGUgY29tYm8g
Ym94LgotICAgIGd0a19jb250YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIobV9ndGtDb21ib0Jv
eCksIGdldEd0a0NvbWJvQm94QnV0dG9uLCAmbV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgQVNT
RVJUKG1fZ3RrQ29tYm9Cb3hCdXR0b24pOwotICAgIHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hC
dXR0b24pOwotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtDb21i
b0JveEJ1dHRvbiksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveEJ1
dHRvbikpOwotCi0gICAgQ29tYm9Cb3hXaWRnZXRQaWVjZXMgcGllY2VzID0geyAwLCAwIH07Ci0g
ICAgR3RrV2lkZ2V0KiBidXR0b25DaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oZ3Rr
Q29tYm9Cb3hCdXR0b24oKSkpOwotICAgIGlmIChHVEtfSVNfSEJPWChidXR0b25DaGlsZCkpCi0g
ICAgICAgIGd0a19jb250YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIoYnV0dG9uQ2hpbGQpLCBn
ZXRHdGtDb21ib0JveFBpZWNlcywgJnBpZWNlcyk7Ci0gICAgZWxzZSBpZiAoR1RLX0lTX0FSUk9X
KGJ1dHRvbkNoaWxkKSkKLSAgICAgICAgcGllY2VzLmFycm93ID0gYnV0dG9uQ2hpbGQ7Ci0KLSAg
ICBBU1NFUlQocGllY2VzLmFycm93KTsKLSAgICBtX2d0a0NvbWJvQm94QXJyb3cgPSBwaWVjZXMu
YXJyb3c7Ci0gICAgc2V0dXBXaWRnZXQobV9ndGtDb21ib0JveEFycm93KTsKLSAgICAvLyBXaGVu
IHRoZSBzdHlsZSBjaGFuZ2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJl
bi4KLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fZ3RrQ29tYm9Cb3hB
cnJvdyksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveEFycm93KSk7
Ci0KLSAgICBtX2d0a0NvbWJvQm94U2VwYXJhdG9yID0gcGllY2VzLnNlcGFyYXRvcjsKLSAgICBp
ZiAobV9ndGtDb21ib0JveFNlcGFyYXRvcikgewotICAgICAgICBzZXR1cFdpZGdldChtX2d0a0Nv
bWJvQm94U2VwYXJhdG9yKTsKLSAgICAgICAgLy8gV2hlbiB0aGUgc3R5bGUgY2hhbmdlcywgdGhl
IGNvbWJvIGJveCBtYXkgZGVzdHJveSBpdHMgY2hpbGRyZW4uCi0gICAgICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtDb21ib0JveFNlcGFyYXRvciksIHJlaW50ZXJw
cmV0X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveFNlcGFyYXRvcikpOwotICAgIH0KLX0K
LQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hCdXR0b24oKSBjb25zdAot
ewotICAgIGlmIChtX2d0a0NvbWJvQm94QnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtDb21i
b0JveEJ1dHRvbjsKLSAgICByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpOwotICAgIEFTU0VSVCht
X2d0a0NvbWJvQm94QnV0dG9uKTsKLSAgICByZXR1cm4gbV9ndGtDb21ib0JveEJ1dHRvbjsKLX0K
LQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hBcnJvdygpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fZ3RrQ29tYm9Cb3hBcnJvdykKLSAgICAgICAgcmV0dXJuIG1fZ3RrQ29tYm9C
b3hBcnJvdzsKLSAgICByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpOwotICAgIEFTU0VSVChtX2d0
a0NvbWJvQm94QXJyb3cpOwotICAgIHJldHVybiBtX2d0a0NvbWJvQm94QXJyb3c7Ci19Ci0KLUd0
a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3QKLXsK
LSAgICAvLyBtX2d0a0NvbWJvQm94U2VwYXJhdG9yIG1heSBiZSBudWxsIGVpdGhlciBiZWNhdXNl
IHdlIGhhdmVuJ3QgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveAotICAgIC8vIG9yIGJlY2F1c2Ug
dGhlIGNvbWJvIGJveGVzIGluIHRoaXMgdGhlbWUgZG9uJ3QgaGF2ZSBzZXBhcmF0b3JzLiBJZiBt
X2d0a0NvbWJvQm94QXJyb3cKLSAgICAvLyBhcnJvdyBpc24ndCBudWxsLCB3ZSBkZWZpbml0ZWx5
IGhhdmUgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveC4KLSAgICBpZiAobV9ndGtDb21ib0JveEFy
cm93IHx8IG1fZ3RrQ29tYm9Cb3hCdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94
U2VwYXJhdG9yOwotICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIG1f
Z3RrQ29tYm9Cb3hTZXBhcmF0b3I7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0
a0hTY3JvbGxiYXIoKSBjb25zdAotewotICAgIGlmIChtX2d0a0hTY3JvbGxiYXIpCi0gICAgICAg
IHJldHVybiBtX2d0a0hTY3JvbGxiYXI7Ci0gICAgbV9ndGtIU2Nyb2xsYmFyID0gZ3RrX2hzY3Jv
bGxiYXJfbmV3KDApOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtIU2Ny
b2xsYmFyLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKLX0K
LQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVlNjcm9sbGJhcigpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fZ3RrVlNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrVlNjcm9sbGJhcjsK
LSAgICBtX2d0a1ZTY3JvbGxiYXIgPSBndGtfdnNjcm9sbGJhcl9uZXcoMCk7Ci0gICAgc2V0dXBX
aWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a1ZTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsK
LSAgICByZXR1cm4gbV9ndGtWU2Nyb2xsYmFyOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1l
R3RrOjpndGtTcGluQnV0dG9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtTcGluQnV0dG9uKQot
ICAgICAgICByZXR1cm4gbV9ndGtTcGluQnV0dG9uOwotICAgIG1fZ3RrU3BpbkJ1dHRvbiA9IGd0
a19zcGluX2J1dHRvbl9uZXdfd2l0aF9yYW5nZSgwLCAxMCwgMSk7Ci0gICAgc2V0dXBXaWRnZXRB
bmRBZGRUb0NvbnRhaW5lcihtX2d0a1NwaW5CdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKLSAgICBy
ZXR1cm4gbV9ndGtTcGluQnV0dG9uOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGszLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3
ZjVhMmEyZDMwMDIwZDgyMjQzY2UyYWFmOGIyMDU2MGZhZDUxZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGszLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMDIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lP
Tl8yCi0KLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5o
IgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSA8Y21hdGg+Ci0j
aW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywg
d2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9XX1NJWkUgaW4gZ3RrYXJyb3cuYy4KLXN0
YXRpYyBjb25zdCBpbnQgbWluQXJyb3dTaXplID0gMTU7Ci0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0
IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9X
X1dJRFRIIGluIGd0a3NwaW5idXR0b24uYy4KLXN0YXRpYyBjb25zdCBpbnQgbWluU3BpbkJ1dHRv
bkFycm93U2l6ZSA9IDY7Ci0KLXR5cGVkZWYgSGFzaE1hcDxHVHlwZSwgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+ID4gU3R5bGVDb250ZXh0TWFwOwotc3RhdGljIFN0eWxlQ29udGV4dE1hcCYgc3R5
bGVDb250ZXh0TWFwKCk7Ci0KLXN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdP
YmplY3QqLCBHUGFyYW1TcGVjKikKLXsKLSAgICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgpLmVuZCgpOwotICAgIGZvciAoU3R5bGVDb250ZXh0
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShp
dGVyLT52YWx1ZS5nZXQoKSk7Ci0KLSAgICBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxj
Rm9yQWxsUGFnZXMoKTsKLX0KLQotc3RhdGljIFN0eWxlQ29udGV4dE1hcCYgc3R5bGVDb250ZXh0
TWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0eWxlQ29udGV4dE1hcCwgbWFwLCAo
KSk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmICghaW5p
dGlhbGl6ZWQpIHsKLSAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdz
X2dldF9kZWZhdWx0KCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3Rp
Znk6Omd0ay10aGVtZS1uYW1lIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayks
IDApOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstY29s
b3Itc2NoZW1lIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIDApOwotICAg
ICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0
YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQot
ewotICAgIFN0eWxlQ29udGV4dE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1h
cCgpLmFkZCh3aWRnZXRUeXBlLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLQotICAgIEd0a1dpZGdl
dFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRo
X2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwotCi0gICAgaWYgKHdpZGdldFR5cGUgPT0g
R1RLX1RZUEVfU0NST0xMQkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xh
c3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgZWxzZSBpZiAod2lk
Z2V0VHlwZSA9PSBHVEtfVFlQRV9FTlRSWSkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJf
YWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0gICAgZWxzZSBpZiAo
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9BUlJPVykKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGgsIDAsICJhcnJvdyIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfQlVUVE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xh
c3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0
VHlwZSA9PSBHVEtfVFlQRV9TQ0FMRSkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRk
X2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7Ci0gICAgZWxzZSBpZiAod2lk
Z2V0VHlwZSA9PSBHVEtfVFlQRV9TRVBBUkFUT1IpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9p
dGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0VQQVJBVE9SKTsKLSAgICBl
bHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1BST0dSRVNTX0JBUikKLSAgICAgICAgZ3Rr
X3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19QUk9H
UkVTU0JBUik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TUElOX0JVVFRP
TikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19T
VFlMRV9DTEFTU19TUElOQlVUVE9OKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19U
WVBFX1RSRUVfVklFVykKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBh
dGgsIDAsIEdUS19TVFlMRV9DTEFTU19WSUVXKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09
IEdUS19UWVBFX0NIRUNLX0JVVFRPTikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRk
X2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19DSEVDSyk7Ci0gICAgZWxzZSBpZiAod2lk
Z2V0VHlwZSA9PSBHVEtfVFlQRV9SQURJT19CVVRUT04pCi0gICAgICAgIGd0a193aWRnZXRfcGF0
aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOwotCi0gICAg
R1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0eWxlX2Nv
bnRleHRfbmV3KCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0
KCksIHBhdGgpOwotICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwotCi0gICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbnRleHQ7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ2V0KCk7Ci19
Ci0KLUd0a1N0eWxlQ29udGV4dCogUmVuZGVyVGhlbWVHdGs6Omd0a1Njcm9sbGJhclN0eWxlKCkK
LXsKLSAgICByZXR1cm4gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDUk9MTEJBUik7Ci19Ci0K
LS8vIFRoaXMgaXMgbm90IGEgc3RhdGljIG1ldGhvZCwgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lk
IGhhdmluZyBHVEsrIGhlYWRlcnMgaW4gUmVuZGVyVGhlbWVHdGsuaC4KLWV4dGVybiBHdGtUZXh0
RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbik7Ci0KLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OnBsYXRmb3JtSW5pdCgpCi17Ci19Ci0KLVJlbmRlclRoZW1lR3RrOjp+UmVuZGVy
VGhlbWVHdGsoKQotewotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZW5kZXJUaGVtZUd0
azo6aW5pdE1lZGlhQ29sb3JzKCkKLXsKLSAgICBHZGtSR0JBIGNvbG9yOwotICAgIEd0a1N0eWxl
Q29udGV4dCogY29udGFpbmVyQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT05U
QUlORVIpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29u
dGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfTk9STUFMLCAmY29sb3IpOwotICAgIG1fcGFu
ZWxDb2xvciA9IGNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2Nv
bG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmNvbG9yKTsKLSAg
ICBtX3NsaWRlckNvbG9yID0gY29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tn
cm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZj
b2xvcik7Ci0gICAgbV9zbGlkZXJUaHVtYkNvbG9yID0gY29sb3I7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIHZvaWQgYWRqdXN0UmVjdEZvckZvY3VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7Ci0gICAg
cmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBJbnRSZWN0JiByZWN0KQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IDA7Ci0g
ICAgYm9vbCBjaGVja0ludGVyaW9yRm9jdXMgPSBmYWxzZTsKLSAgICBDb250cm9sUGFydCBwYXJ0
ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgc3dpdGNoIChwYXJ0
KSB7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAg
IGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQocGFydCA9PSBDaGVja2JveFBhcnQgPyBHVEtfVFlQ
RV9DSEVDS19CVVRUT04gOiBHVEtfVFlQRV9SQURJT19CVVRUT04pOwotCi0gICAgICAgIGdpbnQg
aW5kaWNhdG9yU3BhY2luZzsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNv
bnRleHQsICJpbmRpY2F0b3Itc3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBOVUxMKTsKLSAg
ICAgICAgcmVjdC5pbmZsYXRlKGluZGljYXRvclNwYWNpbmcpOwotCi0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKLSAgICBjYXNlIFNsaWRlckhvcml6b250YWxQ
YXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RC
dXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RQYXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0
U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7Ci0gICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1
cyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBj
YXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9FTlRSWSk7Ci0gICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1cyA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoY29udGV4dCk7Ci0gICAgaWYgKGNoZWNrSW50ZXJpb3JGb2N1cykgewotICAgICAgICBnYm9v
bGVhbiBpbnRlcmlvckZvY3VzOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsIE5VTEwpOwotICAgICAg
ICBpZiAoaW50ZXJpb3JGb2N1cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWRq
dXN0UmVjdEZvckZvY3VzKGNvbnRleHQsIHJlY3QpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRUb2dn
bGVTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQotewot
ICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hv
dWxkbid0IGNoYW5nZSB0aGVtLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBPdGhlciBwb3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMyB3aGljaCBpcyBhbHNvIHRo
ZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKy4KLSAgICAvLyBHVEsrIHVzZXJzIHRlbmQg
dG8gZGVtYW5kIHRoZSBuYXRpdmUgbG9vay4KLSAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29u
ZmlndXJhdGlvbiBvcHRpb24gdmFsdWVzIG90aGVyIHRoYW4gMTMgYWN0dWFsbHkgYnJlYWsgc2l0
ZSBjb21wYXRpYmlsaXR5LgotICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNp
emUsIE5VTEwpOwotCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsK
LQotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBh
aW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwg
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiBmdWxsUmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShjb250ZXh0KTsKLQotICAgIC8vIFNvbWUgdGhlbWVzIGRvIG5vdCByZW5kZXIgbGFyZ2UgdG9n
Z2xlIGJ1dHRvbnMgcHJvcGVybHksIHNvIHdlIHNpbXBseQotICAgIC8vIHNocmluayB0aGUgcmVj
dGFuZ2xlIGJhY2sgZG93biB0byB0aGUgZGVmYXVsdCBzaXplIGFuZCB0aGVuIGNlbnRlciBpdAot
ICAgIC8vIGluIHRoZSBmdWxsIHRvZ2dsZSBidXR0b24gcmVnaW9uLiBUaGUgcmVhc29uIGZvciBu
b3Qgc2ltcGx5IGZvcmNpbmcgdG9nZ2xlCi0gICAgLy8gYnV0dG9ucyB0byBiZSBhIHNtYWxsZXIg
c2l6ZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgc2l0ZSBsYXlvdXRzLgotICAgIGdp
bnQgaW5kaWNhdG9yU2l6ZTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4
dCwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOwotICAgIEludFJlY3Qg
cmVjdChmdWxsUmVjdCk7Ci0gICAgaWYgKHJlY3Qud2lkdGgoKSA+IGluZGljYXRvclNpemUpIHsK
LSAgICAgICAgcmVjdC5pbmZsYXRlWCgtKHJlY3Qud2lkdGgoKSAtIGluZGljYXRvclNpemUpIC8g
Mik7Ci0gICAgICAgIHJlY3Quc2V0V2lkdGgoaW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2UgcmVj
dC53aWR0aCgpIHdhcyBlcXVhbCB0byBpbmRpY2F0b3JTaXplICsgMS4KLSAgICB9Ci0KLSAgICBp
ZiAocmVjdC5oZWlnaHQoKSA+IGluZGljYXRvclNpemUpIHsKLSAgICAgICAgcmVjdC5pbmZsYXRl
WSgtKHJlY3QuaGVpZ2h0KCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOwotICAgICAgICByZWN0LnNl
dEhlaWdodChpbmRpY2F0b3JTaXplKTsgLy8gSW4gY2FzZSByZWN0LmhlaWdodCgpIHdhcyBlcXVh
bCB0byBpbmRpY2F0b3JTaXplICsgMS4KLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgd2lkZ2V0VHlwZSA9PSBHVEtfVFlQ
RV9DSEVDS19CVVRUT04gPyBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0sgOiBHVEtfU1RZTEVfQ0xBU1Nf
UkFESU8pOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghdGhlbWUtPmlzRW5hYmxl
ZChyZW5kZXJPYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3Qp
KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNl
IGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGlmICh0aGVtZS0+aXNJbmRldGVybWluYXRlKHJl
bmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOQ09OU0lTVEVO
VDsKLSAgICBlbHNlIGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICBpZiAodGhlbWUtPmlzUHJlc3Nl
ZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19TRUxFQ1RF
RDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBF
X0NIRUNLX0JVVFRPTikKLSAgICAgICAgZ3RrX3JlbmRlcl9jaGVjayhjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19yZW5k
ZXJfb3B0aW9uKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwot
Ci0gICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBJbnRS
ZWN0IGluZGljYXRvclJlY3QocmVjdCk7Ci0gICAgICAgIGdpbnQgaW5kaWNhdG9yU3BhY2luZzsK
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3It
c3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBOVUxMKTsKLSAgICAgICAgaW5kaWNhdG9yUmVj
dC5pbmZsYXRlKGluZGljYXRvclNwYWNpbmcpOwotICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNv
bnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaW5kaWNh
dG9yUmVjdC54KCksIGluZGljYXRvclJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGljYXRvclJlY3Qud2lkdGgoKSwgaW5kaWNhdG9yUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQot
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsK
LSAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DSEVDS19CVVRUT04p
LCBzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIEdUS19UWVBFX0NIRUNLX0JV
VFRPTiwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKLXsKLSAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9S
QURJT19CVVRUT04pLCBzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFk
aW8oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIEdUS19UWVBF
X1JBRElPX0JVVFRPTiwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgcmVuZGVyQnV0dG9uKFJlbmRlclRoZW1lKiB0aGVt
ZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
SW50UmVjdCBidXR0b25SZWN0KHJlY3QpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlm
ICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29u
dHJvbChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNF
TlNJVElWRTsKLSAgICBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0g
ICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGlmICh0aGVtZS0+
aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0FDVElWRTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGlmICh0aGVtZS0+aXNEZWZhdWx0
KHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgR3RrQm9yZGVyKiBib3JkZXJQdHIgPSAwOwotICAg
ICAgICBHdGtCb3JkZXIgYm9yZGVyID0geyAxLCAxLCAxLCAxIH07Ci0KLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJkZWZhdWx0LWJvcmRlciIsICZib3JkZXJQ
dHIsIE5VTEwpOwotICAgICAgICBpZiAoYm9yZGVyUHRyKSB7Ci0gICAgICAgICAgICBib3JkZXIg
PSAqYm9yZGVyUHRyOwotICAgICAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGJvcmRlclB0cik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBidXR0b25SZWN0Lm1vdmUoYm9yZGVyLmxlZnQsIGJvcmRlci50
b3ApOwotICAgICAgICBidXR0b25SZWN0LnNldFdpZHRoKGJ1dHRvblJlY3Qud2lkdGgoKSAtIChi
b3JkZXIubGVmdCArIGJvcmRlci5yaWdodCkpOwotICAgICAgICBidXR0b25SZWN0LnNldEhlaWdo
dChidXR0b25SZWN0LmhlaWdodCgpIC0gKGJvcmRlci50b3AgKyBib3JkZXIuYm90dG9tKSk7Ci0K
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19ERUZBVUxUKTsKLSAgICB9Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0
LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWln
aHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwg
YnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLQotICAgIGlmICh0aGVt
ZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBm
b2N1c1BhZDsKLSAgICAgICAgZ2Jvb2xlYW4gZGlzcGxhY2VGb2N1cywgaW50ZXJpb3JGb2N1czsK
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRo
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAm
Zm9jdXNQYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3It
Zm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkaXNwbGFjZS1mb2N1cyIsICZkaXNwbGFjZUZvY3VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsK
LSAgICAgICAgICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aDsKLSAgICAgICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4o
ZmxhZ3MpLCAmYm9yZGVyV2lkdGgpOwotCi0gICAgICAgICAgICBidXR0b25SZWN0ID0gSW50UmVj
dChidXR0b25SZWN0LngoKSArIGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1BhZCwgYnV0dG9uUmVj
dC55KCkgKyBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1BhZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1dHRvblJlY3Qud2lkdGgoKSAtICgyICogZm9jdXNQYWQgKyBib3JkZXJX
aWR0aC5sZWZ0ICsgYm9yZGVyV2lkdGgucmlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnV0dG9uUmVjdC5oZWlnaHQoKSAtICgyICogZm9jdXNQYWQgKyBib3JkZXJXaWR0
aC50b3AgKyBib3JkZXJXaWR0aC5ib3R0b20pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBidXR0b25SZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLQotICAgICAgICBp
ZiAoZGlzcGxhY2VGb2N1cyAmJiB0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKLSAg
ICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOwotICAgICAgICAgICAgZ2ludCBjaGls
ZERpc3BsYWNlbWVudFk7Ci0gICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQt
ZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJjaGlsZC1kaXNwbGFjZW1lbnQteSIsICZjaGlsZERpc3Bs
YWNlbWVudFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7
Ci0gICAgICAgICAgICBidXR0b25SZWN0Lm1vdmUoY2hpbGREaXNwbGFjZW1lbnRYLCBjaGlsZERp
c3BsYWNlbWVudFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250
ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJl
Y3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0Lmhl
aWdodCgpKTsKLSAgICB9Ci19Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5
bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShj
b250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwg
c3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmpl
Y3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLQotICAgIHJlbmRlckJ1dHRv
bih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0KLSAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUqIHN0eWxlLCBH
dGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBhcmF0b3IpCi17Ci0gICAgLy8g
SWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUgdGhl
bWUsIHdlCi0gICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0IFdl
YkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5vQ29u
dHJvbFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4
dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01CT19CT1gpOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Mo
Y29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtU
ZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSkpKTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZi
b3JkZXIpOwotCi0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICBnaW50IGZvY3VzV2lk
dGgsIGZvY3VzUGFkOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lk
dGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3Vz
LXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOwotICAgIGZvY3VzID0gaW50ZXJpb3JGb2N1cyA/
IGZvY3VzV2lkdGggKyBmb2N1c1BhZCA6IDA7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0
b3JlKGNvbnRleHQpOwotCi0gICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9T
RVBBUkFUT1IpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBH
dGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+
KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigpKSk7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAic2VwYXJhdG9yIik7Ci0KLSAgICBnYm9vbGVhbiB3
aWRlU2VwYXJhdG9yczsKLSAgICBnaW50IHNlcGFyYXRvcldpZHRoOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3JzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIC8vIEdUSysgYWx3YXlzIHVz
ZXMgYm9yZGVyLmxlZnQsIHJlZ2FyZGxlc3Mgb2YgdGV4dCBkaXJlY3Rpb24uIFNlZSBndGtzZXBl
cmF0b3IuYy4KLSAgICBpZiAoIXdpZGVTZXBhcmF0b3JzKQotICAgICAgICBzZXBhcmF0b3JXaWR0
aCA9IGJvcmRlci5sZWZ0OwotCi0gICAgc2VwYXJhdG9yID0gc2VwYXJhdG9yV2lkdGg7Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotfQotCi1pbnQgUmVuZGVyVGhl
bWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAgaW50
IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hNZXRy
aWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwotICAg
IGludCBsZWZ0ID0gYm9yZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGg7Ci0gICAgaWYgKHN0eWxl
LT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0gICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGggKyBt
aW5BcnJvd1NpemU7Ci0gICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAgaW50IGZvY3Vz
V2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0
eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwotICAgIGludCBy
aWdodCA9IGJvcmRlcldpZHRoLnJpZ2h0ICsgZm9jdXNXaWR0aDsKLSAgICBpZiAoc3R5bGUtPmRp
cmVjdGlvbigpID09IExUUikKLSAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5B
cnJvd1NpemU7Ci0gICAgcmV0dXJuIHJpZ2h0OwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBH
dGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKLSAgICBpbnQgZm9jdXNXaWR0
aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUs
IGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7Ci0gICAgcmV0dXJuIGJv
cmRlcldpZHRoLnRvcCArIGZvY3VzV2lkdGg7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAg
IEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwotICAgIGludCBmb2N1c1dp
ZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwotICAgIGdldENvbWJvQm94TWV0cmljcyhzdHls
ZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKLSAgICByZXR1cm4g
Ym9yZGVyV2lkdGguYm90dG9tICsgZm9jdXNXaWR0aDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgY2Fpcm9fdCogY2Fp
cm9Db250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwot
ICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVj
dGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigp
KSk7Ci0KLSAgICAvLyBQYWludCB0aGUgYnV0dG9uLgotICAgIEd0a1N0eWxlQ29udGV4dCogYnV0
dG9uU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2F2ZShidXR0b25TdHlsZUNvbnRleHQpOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYnV0dG9uU3R5bGVDb250ZXh0LCBkaXJlY3Rpb24pOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhidXR0b25TdHlsZUNvbnRleHQsIEdUS19T
VFlMRV9DTEFTU19CVVRUT04pOwotICAgIHJlbmRlckJ1dHRvbih0aGlzLCBidXR0b25TdHlsZUNv
bnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLQotICAgIC8vIEdldCB0aGUg
aW5uZXIgcmVjdGFuZ2xlLgotICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgR3Rr
Qm9yZGVyKiBpbm5lckJvcmRlclB0ciA9IDA7Ci0gICAgR3RrQm9yZGVyIGlubmVyQm9yZGVyID0g
eyAxLCAxLCAxLCAxIH07Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRvblN0
eWxlQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlubmVyLWJvcmRl
ciIsICZpbm5lckJvcmRlclB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZv
Y3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOwotICAgIGlmIChpbm5lckJvcmRlclB0cikgewotICAgICAgICBpbm5l
ckJvcmRlciA9ICppbm5lckJvcmRlclB0cjsKLSAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGlubmVy
Qm9yZGVyUHRyKTsKLSAgICB9Ci0KLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7Ci0gICAgR3Rr
U3RhdGVGbGFncyBzdGF0ZSA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShidXR0b25TdHls
ZUNvbnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoYnV0dG9uU3R5bGVD
b250ZXh0LCBzdGF0ZSwgJmJvcmRlcldpZHRoKTsKLQotICAgIGZvY3VzV2lkdGggKz0gZm9jdXNQ
YWQ7Ci0gICAgSW50UmVjdCBpbm5lclJlY3QocmVjdC54KCkgKyBpbm5lckJvcmRlci5sZWZ0ICsg
Ym9yZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgcmVj
dC55KCkgKyBpbm5lckJvcmRlci50b3AgKyBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIGJvcmRlcldpZHRoLmxlZnQgLSBi
b3JkZXJXaWR0aC5yaWdodCAtIGlubmVyQm9yZGVyLmxlZnQgLSBpbm5lckJvcmRlci5yaWdodCAt
ICgyICogZm9jdXNXaWR0aCksCi0gICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAt
IGJvcmRlcldpZHRoLnRvcCAtIGJvcmRlcldpZHRoLmJvdHRvbSAtIGlubmVyQm9yZGVyLnRvcCAt
IGlubmVyQm9yZGVyLmJvdHRvbSAtICgyICogZm9jdXNXaWR0aCkpOwotCi0gICAgaWYgKGlzUHJl
c3NlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOwot
ICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WTsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3N0eWxlKGJ1dHRvblN0eWxlQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJjaGlsZC1kaXNwbGFjZW1lbnQteCIsICZjaGlsZERpc3BsYWNlbWVudFgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50
LXkiLCAmY2hpbGREaXNwbGFjZW1lbnRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCk7Ci0gICAgICAgIGlubmVyUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwg
Y2hpbGREaXNwbGFjZW1lbnRZKTsKLSAgICB9Ci0gICAgaW5uZXJSZWN0LnNldFdpZHRoKG1heCgx
LCBpbm5lclJlY3Qud2lkdGgoKSkpOwotICAgIGlubmVyUmVjdC5zZXRIZWlnaHQobWF4KDEsIGlu
bmVyUmVjdC5oZWlnaHQoKSkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShidXR0
b25TdHlsZUNvbnRleHQpOwotCi0gICAgLy8gUGFpbnQgdGhlIGFycm93LgotICAgIEd0a1N0eWxl
Q29udGV4dCogYXJyb3dTdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQVJS
T1cpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoYXJyb3dTdHlsZUNvbnRleHQpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihhcnJvd1N0eWxlQ29udGV4dCwgZGly
ZWN0aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRl
eHQsICJhcnJvdyIpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxl
Q29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0KLSAgICBnZmxvYXQgYXJyb3dTY2Fs
aW5nOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShhcnJvd1N0eWxlQ29udGV4dCwg
ImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKLQotICAgIEludFNpemUgYXJy
b3dTaXplKG1pbkFycm93U2l6ZSwgaW5uZXJSZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFBvaW50
IGFycm93UG9zaXRpb24oaW5uZXJSZWN0LmxvY2F0aW9uKCkpOwotICAgIGlmIChkaXJlY3Rpb24g
PT0gR1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKGlubmVyUmVj
dC53aWR0aCgpIC0gYXJyb3dTaXplLndpZHRoKCksIDApOwotCi0gICAgLy8gR1RLKyBhY3R1YWxs
eSBmZXRjaGVzIHRoZSB4YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgZnJvbSB0aGUgd2lkZ2V0LCBi
dXQgc2luY2Ugd2UKLSAgICAvLyBkb24ndCBoYXZlIGEgd2lkZ2V0IGhlcmUsIHdlIGFyZSBqdXN0
IHVzaW5nIHRoZSBkZWZhdWx0IHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBvZiAwLjUuCi0gICAg
Z2ludCBleHRlbnQgPSBzdGQ6Om1pbihhcnJvd1NpemUud2lkdGgoKSwgYXJyb3dTaXplLmhlaWdo
dCgpKSAqIGFycm93U2NhbGluZzsKLSAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoKGFycm93U2l6ZS53
aWR0aCgpIC0gZXh0ZW50KSAvIDIsIChhcnJvd1NpemUuaGVpZ2h0KCkgLSBleHRlbnQpIC8gMik7
Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoYXJyb3dTdHlsZUNvbnRleHQsIHN0
YXRlKTsKLSAgICBndGtfcmVuZGVyX2Fycm93KGFycm93U3R5bGVDb250ZXh0LCBjYWlyb0NvbnRl
eHQsIEdfUEksIGFycm93UG9zaXRpb24ueCgpLCBhcnJvd1Bvc2l0aW9uLnkoKSwgZXh0ZW50KTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYXJyb3dTdHlsZUNvbnRleHQpOwotCi0g
ICAgLy8gUGFpbnQgdGhlIHNlcGFyYXRvciBpZiBuZWVkZWQuCi0gICAgR3RrU3R5bGVDb250ZXh0
KiBzZXBhcmF0b3JTdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9f
Qk9YKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7
Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKHNlcGFyYXRvclN0eWxlQ29u
dGV4dCwgZGlyZWN0aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc2VwYXJh
dG9yU3R5bGVDb250ZXh0LCAic2VwYXJhdG9yIik7Ci0KLSAgICBnYm9vbGVhbiB3aWRlU2VwYXJh
dG9yczsKLSAgICBnaW50IHNlcGFyYXRvcldpZHRoOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9zdHlsZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRvcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlmICh3aWRlU2VwYXJh
dG9ycyAmJiAhc2VwYXJhdG9yV2lkdGgpIHsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVz
dG9yZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKHNlcGFyYXRvclN0eWxlQ29udGV4
dCwgc3RhdGUpOwotICAgIEludFBvaW50IHNlcGFyYXRvclBvc2l0aW9uKGFycm93UG9zaXRpb24u
eCgpLCBpbm5lclJlY3QueSgpKTsKLSAgICBpZiAod2lkZVNlcGFyYXRvcnMpIHsKLSAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICAgICAgc2VwYXJhdG9y
UG9zaXRpb24ubW92ZSgtc2VwYXJhdG9yV2lkdGgsIDApOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKLQotICAg
ICAgICBndGtfcmVuZGVyX2ZyYW1lKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJh
dG9yUG9zaXRpb24ueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcldpZHRo
LCBpbm5lclJlY3QuaGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEd0a0JvcmRlciBw
YWRkaW5nOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhzZXBhcmF0b3JT
dHlsZUNvbnRleHQsIHN0YXRlLCAmcGFkZGluZyk7Ci0gICAgICAgIEd0a0JvcmRlciBib3JkZXI7
Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoc2VwYXJhdG9yU3R5bGVDb250
ZXh0LCBzdGF0ZSwgJmJvcmRlcik7Ci0KLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVY
VF9ESVJfTFRSKQotICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgtKHBhZGRpbmcu
bGVmdCArIGJvcmRlci5sZWZ0KSwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlcGFy
YXRvclBvc2l0aW9uLm1vdmUoYXJyb3dTaXplLndpZHRoKCksIDApOwotCi0gICAgICAgIGNhaXJv
X3NhdmUoY2Fpcm9Db250ZXh0KTsKLQotICAgICAgICAvLyBBbiBleHRyYSBjbGlwIHByZXZlbnRz
IHRoZSBzZXBhcmF0b3IgYmxlZWRpbmcgb3V0c2lkZSBvZiB0aGUgc3BlY2lmaWVkIHJlY3Rhbmds
ZSBiZWNhdXNlIG9mIHN1YnBpeGVsIHBvc2l0aW9uaW5nLgotICAgICAgICBjYWlyb19yZWN0YW5n
bGUoY2Fpcm9Db250ZXh0LCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9u
LnkoKSwgYm9yZGVyLmxlZnQsIGlubmVyUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGNhaXJvX2Ns
aXAoY2Fpcm9Db250ZXh0KTsKLSAgICAgICAgZ3RrX3JlbmRlcl9saW5lKHNlcGFyYXRvclN0eWxl
Q29udGV4dCwgY2Fpcm9Db250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9y
UG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIGlubmVyUmVjdC5tYXhZKCkpOwotICAgICAgICBj
YWlyb19yZXN0b3JlKGNhaXJvQ29udGV4dCk7Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfcmVzdG9yZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9FTlRSWSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRp
cmVjdGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICgh
aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0
KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxz
ZSBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFU
RV9GTEFHX0ZPQ1VTRUQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQs
IHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfcmVuZGVyX2Jh
Y2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0g
ICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKLQotICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSAmJiBpc0VuYWJsZWQo
cmVuZGVyT2JqZWN0KSkgewotICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOwotICAgICAg
ICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGlmICghaW50
ZXJpb3JGb2N1cykgewotICAgICAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QocmVjdCk7Ci0gICAg
ICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotICAgICAg
ICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzUmVj
dC54KCksIGZvY3VzUmVjdC55KCksIGZvY3VzUmVjdC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0
KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShj
b250ZXh0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYXBwbHlTbGlk
ZXJTdHlsZUNvbnRleHRDbGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgQ29udHJvbFBh
cnQgcGFydCkKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX1NDQUxFKTsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFy
dCB8fCBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCk7
Ci0gICAgZWxzZSBpZiAocGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNz
KGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIENvbnRy
b2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBB
U1NFUlRfVU5VU0VEKHBhcnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9
PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwot
Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1NDQUxFKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLSAgICBhcHBseVNsaWRlclN0eWxl
Q29udGV4dENsYXNzZXMoY29udGV4dCwgcGFydCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotCi0gICAgaWYgKCFpc0Vu
YWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQot
ICAgICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgR1RLX1NUQVRFX0ZM
QUdfSU5TRU5TSVRJVkUpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaWYgKGlzRm9jdXNl
ZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0g
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZv
Y3VzUGFkLCBOVUxMKTsKLSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QocmVjdCk7Ci0gICAgICAg
IGZvY3VzUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Ci0gICAgICAgIGd0a19y
ZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzUmVjdC54KCksIGZvY3VzUmVj
dC55KCksIGZvY3VzUmVjdC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0KCkpOwotICAgIH0KLQot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCk7Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFW
b2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotCi0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0g
Z2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250
ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
KTsKLSAgICBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMoY29udGV4dCwgcGFydCk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19T
TElERVIpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRl
ck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxh
Z3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNIb3ZlcmVk
KHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hU
OwotICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfQUNUSVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250
ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3JlbmRl
cl9zbGlkZXIoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgPyBH
VEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0K
LSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0
ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAocGFydCAhPSBTbGlkZXJUaHVtYkhvcml6
b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdpbnQgc2xpZGVyV2lkdGgsIHNsaWRlckxlbmd0aDsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfc3R5bGUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZzbGlkZXJXaWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlci1sZW5ndGgiLCAmc2xp
ZGVyTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBp
ZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09
IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRl
ckxlbmd0aCwgRml4ZWQpKTsKLX0KLQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QtPmlzUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfUFJPR1JFU1NfQkFSKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQp
OwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19UUk9VR0gpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29u
dGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5
bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShjb250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLQotCi0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oMCksICZwYWRkaW5nKTsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChyZWN0
LngoKSArIHBhZGRpbmcubGVmdCwgcmVjdC55KCkgKyBwYWRkaW5nLnRvcCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSAocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdo
dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIChwYWRkaW5nLnRv
cCArIHBhZGRpbmcuYm90dG9tKSk7Ci0gICAgcHJvZ3Jlc3NSZWN0ID0gUmVuZGVyVGhlbWVHdGs6
OmNhbGN1bGF0ZVByb2dyZXNzUmVjdChyZW5kZXJPYmplY3QsIHByb2dyZXNzUmVjdCk7Ci0KLSAg
ICBpZiAoIXByb2dyZXNzUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGd0a19yZW5kZXJfYWN0aXZp
dHkoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBw
cm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgpLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwg
cHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
Y29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLXN0YXRpYyBnaW50IHNw
aW5CdXR0b25BcnJvd1NpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0KQotewotICAgIGNvbnN0
IFBhbmdvRm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb247Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAiZm9udCIs
ICZmb250RGVzY3JpcHRpb24sIE5VTEwpOwotICAgIGdpbnQgZm9udFNpemUgPSBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX2dldF9zaXplKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgZ2ludCBhcnJvd1Np
emUgPSBtYXgoUEFOR09fUElYRUxTKGZvbnRTaXplKSwgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSk7
Ci0KLSAgICByZXR1cm4gYXJyb3dTaXplIC0gYXJyb3dTaXplICUgMjsgLy8gRm9yY2UgZXZlbi4K
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAg
R3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5f
QlVUVE9OKTsKLQotICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmcGFk
ZGluZyk7Ci0KLSAgICBpbnQgd2lkdGggPSBzcGluQnV0dG9uQXJyb3dTaXplKGNvbnRleHQpICsg
cGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZp
eGVkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1l
KiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0
a0Fycm93VHlwZSBhcnJvd1R5cGUpCi17Ci0gICAgQVNTRVJUKGFycm93VHlwZSA9PSBHVEtfQVJS
T1dfVVAgfHwgYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOKTsKLQotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NhdmUoY29udGV4dCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24gPSBndGtfc3R5bGVfY29udGV4dF9nZXRfZGlyZWN0aW9uKGNvbnRleHQpOwotICAg
IGd1aW50IHN0YXRlID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGd0a19zdHlsZV9jb250ZXh0X2dldF9z
dGF0ZShjb250ZXh0KSk7Ci0gICAgaWYgKCEoc3RhdGUgJiBHVEtfU1RBVEVfRkxBR19JTlNFTlNJ
VElWRSkpIHsKLSAgICAgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgewot
ICAgICAgICAgICAgaWYgKChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQICYmIHRoZW1lLT5pc1Nw
aW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgICAgICAgICAgfHwg
KGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTiAmJiAhdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFy
dFByZXNzZWQocmVuZGVyT2JqZWN0KSkpCi0gICAgICAgICAgICAgICAgc3RhdGUgfD0gR1RLX1NU
QVRFX0ZMQUdfQUNUSVZFOwotICAgICAgICB9IGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVu
ZGVyT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQ
ICYmIHRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAg
ICAgICAgICAgICAgfHwgKGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTiAmJiAhdGhlbWUtPmlz
U3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVuZGVyT2JqZWN0KSkpCi0gICAgICAgICAgICAgICAg
c3RhdGUgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KHN0YXRlKSk7Ci0KLSAgICAvLyBQYWludCBidXR0b24uCi0gICAgSW50UmVjdCBidXR0
b25SZWN0KHJlY3QpOwotICAgIGd1aW50IGp1bmN0aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X2p1bmN0aW9uX3NpZGVzKGNvbnRleHQpOwotICAgIGlmIChhcnJvd1R5cGUgPT0gR1RLX0FSUk9X
X1VQKQotICAgICAgICBqdW5jdGlvbiB8PSBHVEtfSlVOQ1RJT05fQk9UVE9NOwotICAgIGVsc2Ug
ewotICAgICAgICBqdW5jdGlvbiB8PSBHVEtfSlVOQ1RJT05fVE9QOwotICAgICAgICBidXR0b25S
ZWN0Lm1vdmUoMCwgcmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIH0KLSAgICBidXR0b25SZWN0LnNl
dEhlaWdodChyZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2p1
bmN0aW9uX3NpZGVzKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a0p1bmN0aW9uU2lkZXM+KGp1bmN0
aW9uKSk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVj
dC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3Rr
X3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0
aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLQotICAgIC8vIFBhaW50IGFycm93IGNlbnRlcmVk
IGluc2lkZSBidXR0b24uCi0gICAgLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGd0a3NwaW5idXR0
b24uYyBjb2RlLgotICAgIEludFJlY3QgYXJyb3dSZWN0OwotICAgIGdkb3VibGUgYW5nbGU7Ci0g
ICAgaWYgKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVApIHsKLSAgICAgICAgYW5nbGUgPSAwOwot
ICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSk7Ci0gICAgICAgIGFycm93UmVjdC5zZXRI
ZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIgLSAyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhbmds
ZSA9IEdfUEk7Ci0gICAgICAgIGFycm93UmVjdC5zZXRZKHJlY3QueSgpICsgYnV0dG9uUmVjdC55
KCkpOwotICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1Jl
Y3QueSgpIC0gMik7Ci0gICAgfQotICAgIGFycm93UmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkg
LSAzKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgIGFy
cm93UmVjdC5zZXRYKHJlY3QueCgpICsgMSk7Ci0gICAgZWxzZQotICAgICAgICBhcnJvd1JlY3Qu
c2V0WChyZWN0LngoKSArIDIpOwotCi0gICAgZ2ludCB3aWR0aCA9IGFycm93UmVjdC53aWR0aCgp
IC8gMjsKLSAgICB3aWR0aCAtPSB3aWR0aCAlIDIgLSAxOyAvLyBGb3JjZSBvZGQuCi0gICAgZ2lu
dCBoZWlnaHQgPSAod2lkdGggKyAxKSAvIDI7Ci0KLSAgICBhcnJvd1JlY3QubW92ZSgoYXJyb3dS
ZWN0LndpZHRoKCkgLSB3aWR0aCkgLyAyLCAoYXJyb3dSZWN0LmhlaWdodCgpIC0gaGVpZ2h0KSAv
IDIpOwotICAgIGd0a19yZW5kZXJfYXJyb3coY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJyb3dSZWN0LngoKSwgYXJyb3dSZWN0Lnko
KSwgd2lkdGgpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4
dChHVEtfVFlQRV9TUElOX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250
ZXh0KTsKLQotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRp
cmVjdGlvbigpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBkaXJlY3Rpb24pOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVk
KHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAg
ICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNG
b2N1c2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZP
Q1VTRUQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVtb3Zl
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0KLSAgICBwYWludFNwaW5B
cnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwg
R1RLX0FSUk9XX1VQKTsKLSAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LCBy
ZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX0RPV04pOwotCi0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lk
Z2V0VHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRl
LCBnaW50IGljb25TaXplKQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0
eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKLSAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0
eWxlX2NvbnRleHRfbG9va3VwX2ljb25fc2V0KGNvbnRleHQsIGljb25OYW1lKTsKLQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0g
ICAgaWYgKHN0YXRlID09IEdUS19TVEFURV9QUkVMSUdIVCkKLSAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lO
U0VOU0lUSVZFKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncykpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rp
b24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Ci0g
ICAgR2RrUGl4YnVmKiBpY29uID0gZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29u
U2V0LCBjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsKLQotICAg
IGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gYWRvcHRH
UmVmKGljb24pOwotfQotCi1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25G
b3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5h
bWUsIGNvbnN0IGNoYXIgKmZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdp
bnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0
ID0gZ2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2F2ZShjb250ZXh0KTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoc3RhdGUgPT0g
R1RLX1NUQVRFX1BSRUxJR0hUKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVM
SUdIVDsKLSAgICBlbHNlIGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfSU5TRU5TSVRJVkUpCi0gICAg
ICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZs
YWdzKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0
aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihkaXJlY3Rpb24pKTsKLSAgICBHdGtJY29uSW5mbyog
aW5mbyA9IGd0a19pY29uX3RoZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZh
dWx0KCksIHN5bWJvbGljSWNvbk5hbWUsIGljb25TaXplLAotICAgICAgICBzdGF0aWNfY2FzdDxH
dGtJY29uTG9va3VwRmxhZ3M+KEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TVkcgfCBHVEtfSUNPTl9M
T09LVVBfRk9SQ0VfU0laRSkpOwotICAgIEdka1BpeGJ1ZiogaWNvbiA9IDA7Ci0gICAgaWYgKGlu
Zm8pIHsKLSAgICAgICAgaWNvbiA9IGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19mb3JfY29u
dGV4dChpbmZvLCBjb250ZXh0LCAwLCAwKTsKLSAgICAgICAgZ3RrX2ljb25faW5mb19mcmVlKGlu
Zm8pOwotICAgIH0KLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0K
LSAgICBpZiAoIWljb24pCi0gICAgICAgIHJldHVybiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBl
KHdpZGdldFR5cGUsIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZGlyZWN0aW9uLCBzdGF0ZSwgaWNv
blNpemUpOwotCi0gICAgcmV0dXJuIGFkb3B0R1JlZihpY29uKTsKLX0KLQotQ29sb3IgUmVuZGVy
VGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QK
LXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
YmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RB
VEVfRkxBR19TRUxFQ1RFRCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xv
cjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Ci0g
ICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JB
IGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JB
Q29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1l
R3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29s
b3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZF
LCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBS
ZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVfVklFVyks
IEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2Rr
UkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xv
cjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNv
bnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdC
QUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVt
ZUd0azo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19TRUxF
Q1RFRCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtf
U1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29s
b3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJ
ZCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLQotICAgIHN3aXRjaCAoY3Nz
VmFsdWVJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OgotICAgICAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTiksIHN0
YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICAgICAgcmV0
dXJuIGdka1JHQkFDb2xvcjsKLSAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5U
UlkpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJmdka1JHQkFDb2xvcik7Ci0gICAg
ICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxOTBmMzVjYTY2ZDIyMGI0MGQ0ZjYzZjdkOWY2Yzk4NDI3NTc3NzFkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlJ1bkxvb3AuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxn
bGliLmg+Ci0KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVJ1bkxvb3A6OlJ1bkxvb3AoKQotewotICAgIC8vIGdfbWFpbl9jb250ZXh0X2RlZmF1
bHQoKSBkb2Vzbid0IGFkZCBhbiBleHRyYSByZWZlcmVuY2UuCi0gICAgbV9ydW5Mb29wQ29udGV4
dCA9IGlzTWFpblRocmVhZCgpID8gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpIDogYWRvcHRHUmVm
KGdfbWFpbl9jb250ZXh0X25ldygpKTsKLSAgICBBU1NFUlQobV9ydW5Mb29wQ29udGV4dCk7Ci0g
ICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xv
b3BfbmV3KG1fcnVuTG9vcENvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJUKGlubmVy
bW9zdExvb3ApOwotICAgIG1fcnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoaW5uZXJtb3N0TG9vcCk7
Ci19Ci0KLVJ1bkxvb3A6On5SdW5Mb29wKCkKLXsKLSAgICBmb3IgKGludCBpID0gbV9ydW5Mb29w
TWFpbkxvb3BzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmICghZ19tYWlu
X2xvb3BfaXNfcnVubmluZyhtX3J1bkxvb3BNYWluTG9vcHNbaV0uZ2V0KCkpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29wTWFpbkxvb3Bz
W2ldLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUnVuTG9vcDo6cnVuKCkKLXsKLSAgICBSdW5M
b29wKiBtYWluUnVuTG9vcCA9IFJ1bkxvb3A6OmN1cnJlbnQoKTsKLSAgICBHTWFpbkxvb3AqIGlu
bmVybW9zdExvb3AgPSBtYWluUnVuTG9vcC0+aW5uZXJtb3N0TG9vcCgpOwotICAgIGlmICghZ19t
YWluX2xvb3BfaXNfcnVubmluZyhpbm5lcm1vc3RMb29wKSkgewotICAgICAgICBnX21haW5fbG9v
cF9ydW4oaW5uZXJtb3N0TG9vcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBD
cmVhdGUgYW5kIHJ1biBhIG5lc3RlZCBsb29wIGlmIHRoZSBpbm5lcm1vc3Qgb25lIHdhcyBhbHJl
YWR5IHJ1bm5pbmcuCi0gICAgR01haW5Mb29wKiBuZXN0ZWRNYWluTG9vcCA9IGdfbWFpbl9sb29w
X25ldygwLCBGQUxTRSk7Ci0gICAgbWFpblJ1bkxvb3AtPnB1c2hOZXN0ZWRNYWluTG9vcChuZXN0
ZWRNYWluTG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKG5lc3RlZE1haW5Mb29wKTsKLSAgICBt
YWluUnVuTG9vcC0+cG9wTmVzdGVkTWFpbkxvb3AoKTsKLX0KLQotR01haW5Mb29wKiBSdW5Mb29w
Ojppbm5lcm1vc3RMb29wKCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91
bGQgYWx3YXlzIGJlIHRoZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1w
dHkoKSk7Ci0gICAgcmV0dXJuIG1fcnVuTG9vcE1haW5Mb29wc1swXS5nZXQoKTsKLX0KLQotdm9p
ZCBSdW5Mb29wOjpwdXNoTmVzdGVkTWFpbkxvb3AoR01haW5Mb29wKiBuZXN0ZWRMb29wKQotewot
ICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0g
ICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKLSAgICBtX3J1bkxvb3BN
YWluTG9vcHMuYXBwZW5kKGFkb3B0R1JlZihuZXN0ZWRMb29wKSk7Ci19Ci0KLXZvaWQgUnVuTG9v
cDo6cG9wTmVzdGVkTWFpbkxvb3AoKQotewotICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29w
IHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0gICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMu
aXNFbXB0eSgpKTsKLSAgICBtX3J1bkxvb3BNYWluTG9vcHMucmVtb3ZlTGFzdCgpOwotfQotCi12
b2lkIFJ1bkxvb3A6OnN0b3AoKQotewotICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNo
b3VsZCBhbHdheXMgYmUgdGhlcmUuCi0gICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNF
bXB0eSgpKTsKLSAgICBHUmVmUHRyPEdNYWluTG9vcD4gbGFzdE1haW5Mb29wID0gbV9ydW5Mb29w
TWFpbkxvb3BzLmxhc3QoKTsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhsYXN0TWFp
bkxvb3AuZ2V0KCkpKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxhc3RNYWluTG9vcC5nZXQo
KSk7Ci19Ci0KLWdib29sZWFuIFJ1bkxvb3A6OnF1ZXVlV29yayhSdW5Mb29wKiBydW5Mb29wKQot
ewotICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12
b2lkIFJ1bkxvb3A6Ondha2VVcCgpCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2UgPSBh
ZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5
KHNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsKLSAgICBnX3NvdXJjZV9zZXRfY2Fs
bGJhY2soc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9v
cDo6cXVldWVXb3JrKSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKHNvdXJjZS5nZXQo
KSwgbV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Ci0KLSAgICBnX21haW5fY29udGV4dF93YWtldXAo
bV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Ci19Ci0KLVJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJC
YXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCi0gICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKLSAgICAsIG1f
dGltZXJTb3VyY2UoMCkKLXsKLX0KLQotUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkK
LXsKLSAgICBzdG9wKCk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpjbGVhclRpbWVy
U291cmNlKCkKLXsKLSAgICBtX3RpbWVyU291cmNlID0gMDsKLX0KLQotZ2Jvb2xlYW4gUnVuTG9v
cDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1l
cikKLXsKLSAgICBHU291cmNlKiBjdXJyZW50VGltZXJTb3VyY2UgPSB0aW1lci0+bV90aW1lclNv
dXJjZS5nZXQoKTsKLSAgICBib29sIGlzUmVwZWF0aW5nID0gdGltZXItPmlzUmVwZWF0aW5nKCk7
Ci0gICAgLy8gVGhpcyBjYW4gY2hhbmdlIHRoZSB0aW1lclNvdXJjZSBieSBzdGFydGluZyBhIG5l
dyB0aW1lciB3aXRoaW4gdGhlIGNhbGxiYWNrLgotICAgIHRpbWVyLT5maXJlZCgpOwotICAgIGlm
ICghaXNSZXBlYXRpbmcgJiYgY3VycmVudFRpbWVyU291cmNlID09IHRpbWVyLT5tX3RpbWVyU291
cmNlLmdldCgpKQotICAgICAgICB0aW1lci0+Y2xlYXJUaW1lclNvdXJjZSgpOwotICAgIHJldHVy
biBpc1JlcGVhdGluZzsKLX0KLQotdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KGRvdWJs
ZSBmaXJlSW50ZXJ2YWwsIGJvb2wgcmVwZWF0KQotewotICAgIGlmIChtX3RpbWVyU291cmNlKQot
ICAgICAgICBzdG9wKCk7Ci0KLSAgICBtX3RpbWVyU291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91
dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihmaXJlSW50ZXJ2YWwgKiAxMDAwKSkpOwot
ICAgIG1faXNSZXBlYXRpbmcgPSByZXBlYXQ7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1f
dGltZXJTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29w
OjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291cmNl
X2F0dGFjaChtX3RpbWVyU291cmNlLmdldCgpLCBtX3J1bkxvb3AtPm1fcnVuTG9vcENvbnRleHQu
Z2V0KCkpOwotfQotCi12b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCi17Ci0gICAgaWYg
KCFtX3RpbWVyU291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NvdXJjZV9kZXN0cm95
KG1fdGltZXJTb3VyY2UuZ2V0KCkpOwotICAgIGNsZWFyVGltZXJTb3VyY2UoKTsKLX0KLQotYm9v
bCBSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90
aW1lclNvdXJjZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwYjA1YTU3YjdkZTI5NGI2M2M4NmZkNTJlNzQ4ZjAwZjkxMjMyMDg5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVy
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAg
Q29sbGFib3JhIEx0ZC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlICJIb3N0
V2luZG93LmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgiCi0jaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkQ3JlYXRl
TWFpbkZyYW1lU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCi17Ci0gICAg
Ly8gSW50ZXJpb3IgZnJhbWUgU2Nyb2xsVmlld3MgbmV2ZXIgaGF2ZSBNYWluRnJhbWVTY3JvbGxi
YXJzLgotICAgIGlmIChzY3JvbGxWaWV3LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGhvc3Qgd2luZG93IG9yIGEgY29udGFpbmlu
ZyB3aWRnZXQgKGFsYSBXZWJLaXQyKS4KLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gc2Ny
b2xsVmlldy0+aG9zdFdpbmRvdygpOwotICAgIGlmICghaG9zdFdpbmRvdyB8fCAhaG9zdFdpbmRv
dy0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdi
b29sZWFuIHNlbGZTY3JvbGxpbmcgPSBGQUxTRTsKLSAgICBnX29iamVjdF9nZXQoaG9zdFdpbmRv
dy0+cGxhdGZvcm1QYWdlQ2xpZW50KCksICJzZWxmLXNjcm9sbGluZyIsICZzZWxmU2Nyb2xsaW5n
LCBOVUxMKTsKLSAgICByZXR1cm4gIXNlbGZTY3JvbGxpbmc7Ci19Ci0KLVBhc3NSZWZQdHI8U2Ny
b2xsYmFyPiBTY3JvbGxWaWV3OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCi17Ci0gICAgaWYgKHNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcih0
aGlzKSkKLSAgICAgICAgcmV0dXJuIE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKHRoaXMs
IG9yaWVudGF0aW9uKTsKLSAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwotfQotCi1JbnRSZWN0IFNj
cm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Nj
cm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uKSBjb25zdAotewotICAgIGJvb2wgaW5jbHVkZVNj
cm9sbGJhcnMgPSBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnM7Ci0KLSAg
ICAvLyBJZiB3ZSBhcmUgYW4gaW50ZXJpb3IgZnJhbWUgc2Nyb2xsYmFyIG9yIGFyZSBpbiBzb21l
IHNvcnQgb2YgdHJhbnNpdGlvbgotICAgIC8vIHN0YXRlLCBqdXN0IGNhbGN1bGF0ZSBvdXIgc2l6
ZSBiYXNlZCBvbiB3aGF0IHRoZSBHVEsrIHRoZW1lIHNheXMgdGhlCi0gICAgLy8gc2Nyb2xsYmFy
IHdpZHRoIHNob3VsZCBiZS4KLSAgICBpZiAoIXNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJh
cih0aGlzKSkgewotICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNl
dC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgIEludFNpemUobWF4KDAsIHdpZHRoKCkgLSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhaW5j
bHVkZVNjcm9sbGJhcnMgPyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpIDogMCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCBoZWlnaHQoKSAtIChob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gaG9yaXpvbnRhbFNjcm9sbGJhcigp
LT5oZWlnaHQoKSA6IDApKSkpOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBwYXJl
bnQsIHNvIHdlIGFyZSB0aGUgbWFpbiBmcmFtZSBhbmQgdGh1cyBoYXZlCi0gICAgLy8gYSBwYXJl
bnQgd2lkZ2V0IHdoaWNoIHdlIGNhbiB1c2UgdG8gbWVhc3VyZSB0aGUgdmlzaWJsZSByZWdpb24u
Ci0gICAgR3RrV2lkZ2V0KiBtZWFzdXJlZFdpZGdldCA9IGhvc3RXaW5kb3coKS0+cGxhdGZvcm1Q
YWdlQ2xpZW50KCk7Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBndGtfd2lkZ2V0X2dl
dF9wYXJlbnQobWVhc3VyZWRXaWRnZXQpOwotCi0gICAgLy8gV2UgbWF5IG5vdCBiZSBpbiBhIHdp
ZGdldCB0aGF0IGRpc3BsYXlzIHNjcm9sbGJhcnMsIGJ1dCB3ZSBtYXkKLSAgICAvLyBoYXZlIG90
aGVyIGtpbmRzIG9mIGRlY29yYXRpb24gdGhhdCBtYWtlIHVzIHNtYWxsZXIuCi0gICAgaWYgKHBh
cmVudFdpZGdldCAmJiBpbmNsdWRlU2Nyb2xsYmFycykKLSAgICAgICAgbWVhc3VyZWRXaWRnZXQg
PSBwYXJlbnRXaWRnZXQ7Ci0KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3Rr
X3dpZGdldF9nZXRfYWxsb2NhdGlvbihtZWFzdXJlZFdpZGdldCwgJmFsbG9jYXRpb24pOwotICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xs
T2Zmc2V0LmhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICBJbnRTaXplKGFsbG9jYXRpb24u
d2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2V0U2Ny
b2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsTW9kZSwgU2Nyb2xsYmFyTW9kZSB2
ZXJ0aWNhbE1vZGUsIGJvb2wgaG9yaXpvbnRhbExvY2ssIGJvb2wgdmVydGljYWxMb2NrKQotewot
ICAgIC8vIEZJWE1FOiBSZXN0cnVjdHVyZSB0aGUgU2Nyb2xsVmlldyBhYnN0cmFjdGlvbiBzbyB0
aGF0IHdlIGRvIG5vdCBoYXZlIHRvCi0gICAgLy8gY29weSB0aGlzIHZlcmJhdGltIGZyb20gU2Ny
b2xsVmlldy5jcHAuIFVudGlsIHRoZW4sIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcwotICAgIC8v
IGlzIGtlcHQgaW4gc3luYy4KLSAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7Ci0KLSAgICBp
ZiAoaG9yaXpvbnRhbE1vZGUgIT0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSAmJiAhbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTG9jaykgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2Rl
ID0gaG9yaXpvbnRhbE1vZGU7Ci0gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAodmVydGljYWxNb2RlICE9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpICYmICFtX3Zl
cnRpY2FsU2Nyb2xsYmFyTG9jaykgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9
IHZlcnRpY2FsTW9kZTsKLSAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmIChob3Jpem9udGFsTG9jaykKLSAgICAgICAgc2V0SG9yaXpvbnRhbFNjcm9sbGJhckxvY2so
KTsKLQotICAgIGlmICh2ZXJ0aWNhbExvY2spCi0gICAgICAgIHNldFZlcnRpY2FsU2Nyb2xsYmFy
TG9jaygpOwotCi0gICAgaWYgKG5lZWRzVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxiYXJz
KHNjcm9sbE9mZnNldCgpKTsKLQotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHBvbGlj
eSBjaGFuZ2VzIG9uIFNjcm9sbFZpZXcncyB1bmxlc3MgdGhpcwotICAgIC8vIG9uZSBoYXMgYW4g
YWRqdXN0bWVudCBhdHRhY2hlZCBhbmQgaXQgaXMgYSBtYWluIGZyYW1lLgotICAgIGlmIChwYXJl
bnQoKSB8fCAhaXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIGZy
YW1lcyB0aGF0IGRvIGhhdmUgYWRqdXN0bWVudHMgYXR0YWNoZWQsIHdlIHdhbnQgdG8gcmVwb3J0
Ci0gICAgLy8gcG9saWN5IGNoYW5nZXMsIHNvIHRoYXQgdGhleSBtYXkgYmUgYXBwbGllZCB0byB0
aGUgd2lkZ2V0IHRvCi0gICAgLy8gd2hpY2ggdGhlIFdlYlZpZXcncyBjb250YWluZXIgKGUuZy4g
R3RrU2Nyb2xsZWRXaW5kb3cpLgotICAgIGlmIChob3N0V2luZG93KCkpCi0gICAgICAgIGhvc3RX
aW5kb3coKS0+c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKTsKLX0KLQotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTRlM2ZkNzZmN2ZmYzUyMzBmYzg0N2ZmOWZlY2FmNDNkYzQ2
ZmEwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
R3RrLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUaGVtZUd0ay5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaFNldDxTY3JvbGxiYXJU
aGVtZUNsaWVudCo+KiBnU2Nyb2xsYmFyczsKLQotU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpCi17Ci0gICAgc3RhdGljIFNjcm9sbGJhclRoZW1lR3RrIHRoZW1l
OwotICAgIHJldHVybiAmdGhlbWU7Ci19Ci0KLVNjcm9sbGJhclRoZW1lR3RrOjp+U2Nyb2xsYmFy
VGhlbWVHdGsoKQotewotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpyZWdpc3RlclNjcm9s
bGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIGlmICghZ1Njcm9s
bGJhcnMpCi0gICAgICAgIGdTY3JvbGxiYXJzID0gbmV3IEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVD
bGllbnQqPjsKLSAgICBnU2Nyb2xsYmFycy0+YWRkKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhcikKLXsKLSAgICBnU2Nyb2xsYmFycy0+cmVtb3ZlKHNjcm9sbGJhcik7Ci0gICAg
aWYgKGdTY3JvbGxiYXJzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRlIGdTY3JvbGxiYXJz
OwotICAgICAgICBnU2Nyb2xsYmFycyA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbGJhclRo
ZW1lR3RrOjp1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKQotewotICAgIGlmICghZ1Nj
cm9sbGJhcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFVwZGF0ZSB0aGUgdGhpY2tuZXNz
IG9mIGV2ZXJ5IGludGVyaW9yIGZyYW1lIHNjcm9sbGJhciB3aWRnZXQuIFRoZQotICAgIC8vIHBs
YXRmb3JtLWluZGVwZW5kZW50IHNjcm9sbGJhciB0aGVtIGNvZGUgaXNuJ3QgeWV0IHNtYXJ0IGVu
b3VnaCB0byBnZXQKLSAgICAvLyB0aGlzIGluZm9ybWF0aW9uIHdoZW4gaXQgcGFpbnRzLgotICAg
IEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPjo6aXRlcmF0b3IgZW5kID0gZ1Njcm9sbGJh
cnMtPmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+OjppdGVy
YXRvciBpdCA9IGdTY3JvbGxiYXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciA9ICgqaXQpOwotCi0gICAgICAgIC8v
IFRvcC1sZXZlbCBzY3JvbGxiYXIgaS5lLiBzY3JvbGxiYXJzIHdobyBoYXZlIGEgcGFyZW50IFNj
cm9sbFZpZXcKLSAgICAgICAgLy8gd2l0aCBubyBwYXJlbnQgYXJlIG5hdGl2ZSwgYW5kIHRodXMg
ZG8gbm90IG5lZWQgdG8gYmUgcmVzaXplZC4KLSAgICAgICAgaWYgKCFzY3JvbGxiYXItPnBhcmVu
dCgpIHx8ICFzY3JvbGxiYXItPnBhcmVudCgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJh
ci0+Y29udHJvbFNpemUoKSk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KEludFJlY3QoMCwgc2Nyb2xsYmFyLT5wYXJlbnQoKS0+aGVpZ2h0KCkgLSB0aGlja25lc3Ms
IHNjcm9sbGJhci0+d2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3Qoc2Nyb2xsYmFyLT5wYXJlbnQoKS0+
d2lkdGgoKSAtIHRoaWNrbmVzcywgMCwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpKSk7
Ci0gICAgfQotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lR3RrOjpoYXNUaHVtYihTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGp1c3QgY2Fs
bGVkIGFzIGEgcGFpbnQtdGltZSBvcHRpbWl6YXRpb24gdG8gc2VlIGlmCi0gICAgLy8gcGFpbnRp
bmcgdGhlIHRodW1iIGNhbiBiZSBza2lwcGVkLiAgV2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFjdCBo
ZXJlLgotICAgIHJldHVybiB0aHVtYkxlbmd0aChzY3JvbGxiYXIpID4gMDsKLX0KLQotSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQotewotICAgIGlmIChwYXJ0ID09
IEJhY2tCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KQotICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgJiYg
IW1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQot
ICAgIGludCB4ID0gc2Nyb2xsYmFyLT54KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGlu
dCB5ID0gc2Nyb2xsYmFyLT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIEludFNpemUg
c2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsKLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOwotCi0gICAgLy8gQmFja0J1dHRvbkVuZFBhcnQgKGFsdGVybmF0ZSBidXR0
b24pCi0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+
d2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUud2lkdGgoKSksIHksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhciBh
bHRlcm5hdGUgYnV0dG9uCi0gICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLT55KCkgKyBz
Y3JvbGxiYXItPmhlaWdodCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCAtICgyICogc2l6ZS5oZWln
aHQoKSksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLUludFJlY3QgU2Nyb2xs
YmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKLXsKLSAgICBpZiAocGFydCA9PSBGb3J3
YXJkQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBh
cnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0KLSAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7Ci0gICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAg
ICAgIGludCB5ID0gc2Nyb2xsYmFyLT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgICAg
ICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gc2l6ZS53aWR0aCgp
IC0gbV90cm91Z2hCb3JkZXJXaWR0aCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
LQotICAgICAgICAvLyBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQot
ICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lk
dGggKyBzaXplLndpZHRoKCksIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
fQotCi0gICAgLy8gVmVydGljYWxTY3JvbGxiYXIKLSAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgp
ICsgbV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5k
UGFydCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLT55KCkgKyBzY3JvbGxi
YXItPmhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
IChhbHRlcm5hdGUgYnV0dG9uKQotICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgp
ICsgbV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUuaGVpZ2h0KCksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBib29sKQotewotICAgIC8vIFRoZSBwYWRk
aW5nIGFsb25nIHRoZSB0aHVtYiBtb3ZlbWVudCBheGlzIGluY2x1ZGVzIHRoZSB0cm91Z2ggYm9y
ZGVyCi0gICAgLy8gcGx1cyB0aGUgc2l6ZSBvZiBzdGVwcGVyIHNwYWNpbmcgKHRoZSBzcGFjZSBi
ZXR3ZWVuIHRoZSBzdGVwcGVyIGFuZAotICAgIC8vIHRoZSBwbGFjZSB3aGVyZSB0aGUgdGh1bWIg
c3RvcHMpLiBUaGVyZSBpcyBvZnRlbiBubyBzdGVwcGVyIHNwYWNpbmcuCi0gICAgaW50IG1vdmVt
ZW50QXhpc1BhZGRpbmcgPSBtX3Ryb3VnaEJvcmRlcldpZHRoICsgbV9zdGVwcGVyU3BhY2luZzsK
LQotICAgIC8vIFRoZSBmYXRuZXNzIG9mIHRoZSBzY3JvbGxiYXIgb24gdGhlIG5vbi1tb3ZlbWVu
dCBheGlzLgotICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpKTsKLQotICAgIGludCBzdGFydEJ1dHRvbnNPZmZzZXQgPSAwOwotICAg
IGludCBidXR0b25zV2lkdGggPSAwOwotICAgIGlmIChtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBh
cnQpIHsKLSAgICAgICAgc3RhcnRCdXR0b25zT2Zmc2V0ICs9IG1fc3RlcHBlclNpemU7Ci0gICAg
ICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXplOwotICAgIH0KLSAgICBpZiAobV9oYXNC
YWNrQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgIHN0YXJ0QnV0dG9uc09mZnNldCArPSBtX3N0
ZXBwZXJTaXplOwotICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKLSAgICB9
Ci0gICAgaWYgKG1faGFzQmFja0J1dHRvbkVuZFBhcnQpCi0gICAgICAgIGJ1dHRvbnNXaWR0aCAr
PSBtX3N0ZXBwZXJTaXplOwotICAgIGlmIChtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAg
ICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKLQotICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICAvLyBPbmNl
IHRoZSBzY3JvbGxiYXIgYmVjb21lcyBzbWFsbGVyIHRoYW4gdGhlIG5hdHVyYWwgc2l6ZSBvZiB0
aGUKLSAgICAgICAgLy8gdHdvIGJ1dHRvbnMsIHRoZSB0cmFjayBkaXNhcHBlYXJzLgotICAgICAg
ICBpZiAoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHRoaWNrbmVzcykKLSAgICAgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsg
bW92ZW1lbnRBeGlzUGFkZGluZyArIHN0YXJ0QnV0dG9uc09mZnNldCwgc2Nyb2xsYmFyLT55KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSAtICgyICogbW92ZW1l
bnRBeGlzUGFkZGluZykgLSBidXR0b25zV2lkdGgsIHRoaWNrbmVzcyk7Ci0gICAgfQotCi0gICAg
aWYgKHNjcm9sbGJhci0+aGVpZ2h0KCkgPCAyICogdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4g
SW50UmVjdCgpOwotICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSArIG1vdmVtZW50QXhpc1BhZGRpbmcgKyBzdGFydEJ1dHRvbnNPZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gKDIgKiBtb3ZlbWVu
dEF4aXNQYWRkaW5nKSAtIGJ1dHRvbnNXaWR0aCk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OnRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KQotewotICAgIEludFJlY3QgdHJhY2tSZWN0
ID0gY29uc3RyYWluVHJhY2tSZWN0VG9UcmFja1BpZWNlcyhzY3JvbGxiYXIsIHVuY29uc3RyYWlu
ZWRUcmFja1JlY3QpOwotICAgIGludCB0aHVtYlBvcyA9IHRodW1iUG9zaXRpb24oc2Nyb2xsYmFy
KTsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywgdHJh
Y2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSBtX3RodW1iRmF0bmVzcykgLyAyLCB0
aHVtYkxlbmd0aChzY3JvbGxiYXIpLCBtX3RodW1iRmF0bmVzcyk7IAotCi0gICAgLy8gVmVydGlj
YWxTY3JvbGxiYXIKLSAgICByZXR1cm4gSW50UmVjdCh0cmFja1JlY3QueCgpICsgKHRyYWNrUmVj
dC53aWR0aCgpIC0gbV90aHVtYkZhdG5lc3MpIC8gMiwgdHJhY2tSZWN0LnkoKSArIHRodW1iUG9z
LCBtX3RodW1iRmF0bmVzcywgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSk7Ci19Ci0KLWJvb2wgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KQotewotICAgIGlmIChncmFwaGljc0NvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFy
dE1hc2sgYmFzZWQgb24gdGhlIGRhbWFnZVJlY3QKLSAgICBTY3JvbGxiYXJDb250cm9sUGFydE1h
c2sgc2Nyb2xsTWFzayA9IE5vUGFydDsKLQotICAgIEludFJlY3QgYmFja0J1dHRvblN0YXJ0UGFp
bnRSZWN0OwotICAgIEludFJlY3QgYmFja0J1dHRvbkVuZFBhaW50UmVjdDsKLSAgICBJbnRSZWN0
IGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdDsKLSAgICBJbnRSZWN0IGZvcndhcmRCdXR0b25F
bmRQYWludFJlY3Q7Ci0gICAgaWYgKGhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkgewotICAgICAgICBi
YWNrQnV0dG9uU3RhcnRQYWludFJlY3QgPSBiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tC
dXR0b25TdGFydFBhcnQsIHRydWUpOwotICAgICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3Rz
KGJhY2tCdXR0b25TdGFydFBhaW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJh
Y2tCdXR0b25TdGFydFBhcnQ7Ci0gICAgICAgIGJhY2tCdXR0b25FbmRQYWludFJlY3QgPSBiYWNr
QnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0LCB0cnVlKTsKLSAgICAgICAg
aWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhiYWNrQnV0dG9uRW5kUGFpbnRSZWN0KSkKLSAgICAg
ICAgICAgIHNjcm9sbE1hc2sgfD0gQmFja0J1dHRvbkVuZFBhcnQ7Ci0gICAgICAgIGZvcndhcmRC
dXR0b25TdGFydFBhaW50UmVjdCA9IGZvcndhcmRCdXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2Vj
dHMoZm9yd2FyZEJ1dHRvblN0YXJ0UGFpbnRSZWN0KSkKLSAgICAgICAgICAgIHNjcm9sbE1hc2sg
fD0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICAgICAgZm9yd2FyZEJ1dHRvbkVuZFBhaW50
UmVjdCA9IGZvcndhcmRCdXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQs
IHRydWUpOwotICAgICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25F
bmRQYWludFJlY3QpKQotICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBGb3J3YXJkQnV0dG9uRW5k
UGFydDsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHRyYWNrUGFpbnRSZWN0ID0gdHJhY2tSZWN0KHNj
cm9sbGJhciwgdHJ1ZSk7Ci0gICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyh0cmFja1BhaW50
UmVjdCkpCi0gICAgICAgIHNjcm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7Ci0KLSAgICBpZiAobV90
cm91Z2hVbmRlclN0ZXBwZXJzICYmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydAot
ICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25FbmRQYXJ0Ci0gICAgICAgICAg
ICB8fCBzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydAotICAgICAgICAgICAgfHwg
c2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25FbmRQYXJ0KSkKLSAgICAgICAgc2Nyb2xsTWFzayB8
PSBUcmFja0JHUGFydDsKLQotICAgIGJvb2wgdGh1bWJQcmVzZW50ID0gaGFzVGh1bWIoc2Nyb2xs
YmFyKTsKLSAgICBJbnRSZWN0IGN1cnJlbnRUaHVtYlJlY3Q7Ci0gICAgaWYgKHRodW1iUHJlc2Vu
dCkgewotICAgICAgICBJbnRSZWN0IHRyYWNrID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2Up
OwotICAgICAgICBjdXJyZW50VGh1bWJSZWN0ID0gdGh1bWJSZWN0KHNjcm9sbGJhciwgdHJhY2sp
OwotICAgICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGN1cnJlbnRUaHVtYlJlY3QpKQot
ICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBUaHVtYlBhcnQ7Ci0gICAgfQotCi0gICAgU2Nyb2xs
YmFyQ29udHJvbFBhcnRNYXNrIGFsbEJ1dHRvbnMgPSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHwgQmFj
a0J1dHRvbkVuZFBhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0gICAgaWYg
KHNjcm9sbE1hc2sgJiBUcmFja0JHUGFydCB8fCBzY3JvbGxNYXNrICYgVGh1bWJQYXJ0IHx8IHNj
cm9sbE1hc2sgJiBhbGxCdXR0b25zKQotICAgICAgICBwYWludFNjcm9sbGJhckJhY2tncm91bmQo
Z3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIpOwotICAgICAgICBwYWludFRyYWNrQmFja2dyb3Vu
ZChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgdHJhY2tQYWludFJlY3QpOwotCi0gICAgLy8g
UGFpbnQgdGhlIGJhY2sgYW5kIGZvcndhcmQgYnV0dG9ucy4KLSAgICBpZiAoc2Nyb2xsTWFzayAm
IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgIHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4
dCwgc2Nyb2xsYmFyLCBiYWNrQnV0dG9uU3RhcnRQYWludFJlY3QsIEJhY2tCdXR0b25TdGFydFBh
cnQpOwotICAgIGlmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvbkVuZFBhcnQpCi0gICAgICAgIHBh
aW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBiYWNrQnV0dG9uRW5kUGFpbnRS
ZWN0LCBCYWNrQnV0dG9uRW5kUGFydCk7Ci0gICAgaWYgKHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0KQotICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9s
bGJhciwgZm9yd2FyZEJ1dHRvblN0YXJ0UGFpbnRSZWN0LCBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
KTsKLSAgICBpZiAoc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAgICAgICBw
YWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgZm9yd2FyZEJ1dHRvbkVuZFBh
aW50UmVjdCwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpOwotCi0gICAgLy8gUGFpbnQgdGhlIHRodW1i
LgotICAgIGlmIChzY3JvbGxNYXNrICYgVGh1bWJQYXJ0KQotICAgICAgICBwYWludFRodW1iKGdy
YXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBjdXJyZW50VGh1bWJSZWN0KTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lR3RrOjpzaG91bGRDZW50ZXJPblRodW1i
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkK
LXsKLSAgICByZXR1cm4gKGV2ZW50LnNoaWZ0S2V5KCkgJiYgZXZlbnQuYnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgfHwgKGV2ZW50LmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbik7Ci19Ci0KLWludCBT
Y3JvbGxiYXJUaGVtZUd0azo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXpl
KQotewotICAgIHJldHVybiBtX3RodW1iRmF0bmVzcyArIChtX3Ryb3VnaEJvcmRlcldpZHRoICog
Mik7Ci19Ci0KLUludFNpemUgU2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRvblNpemUoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50U2l6ZShtX3RodW1i
RmF0bmVzcywgbV9zdGVwcGVyU2l6ZSk7Ci0KLSAgICAvLyBIb3Jpem9udGFsU2Nyb2xsYmFyCi0g
ICAgcmV0dXJuIEludFNpemUobV9zdGVwcGVyU2l6ZSwgbV90aHVtYkZhdG5lc3MpOwotfQotCi1p
bnQgU2Nyb2xsYmFyVGhlbWVHdGs6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBtX21pblRodW1iTGVuZ3RoOwotfQotCi19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVt
ZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3M2RmMjg1NTAxYjU4MjZkYzA1OWI4M2Jm
YzNkOWE0MTcwZDRiYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVHdGtfaAotI2RlZmluZSBT
Y3JvbGxiYXJUaGVtZUd0a19oCi0KLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xhc3MgU2Ny
b2xsYmFyVGhlbWVHdGsgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgewotcHVibGlj
OgotICAgIFNjcm9sbGJhclRoZW1lR3RrKCk7Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVH
dGsoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50
KikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJU
aGVtZUNsaWVudCopOwotICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVj
dCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQs
IGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBib29sKTsKLSAgICBJbnRSZWN0IHRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwotICAgIGJvb2wgcGFpbnQo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAgIHZvaWQgcGFpbnRUcmFja0JhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRv
bihHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3Qm
LCBTY3JvbGxiYXJQYXJ0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotICAgIHZp
cnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7Ci0gICAg
dmlydHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2
aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLQot
ICAgIC8vIFRPRE86IFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBHVEsrIHZhbHVlcy4gQXQgc29tZSBw
b2ludCB3ZSBzaG91bGQgcHVsbCB0aGVzZSBmcm9tIHRoZSB0aGVtZSBpdHNlbGYuCi0gICAgdmly
dHVhbCBkb3VibGUgaW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4yMDsg
fQotICAgIHZpcnR1YWwgZG91YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4w
MjsgfQotICAgIHZvaWQgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCB1cGRhdGVT
Y3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKTsKLSAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNj
cm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9s
bGJhclRoZW1lQ2xpZW50Kik7Ci0KLXByb3RlY3RlZDoKLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICBHdGtTdHlsZUNvbnRleHQqIG1fY29udGV4dDsKLSNlbmRpZgotICAgIGludCBtX3Ro
dW1iRmF0bmVzczsKLSAgICBpbnQgbV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICBpbnQgbV9zdGVw
cGVyU2l6ZTsKLSAgICBpbnQgbV9zdGVwcGVyU3BhY2luZzsKLSAgICBpbnQgbV9taW5UaHVtYkxl
bmd0aDsKLSAgICBnYm9vbGVhbiBtX3Ryb3VnaFVuZGVyU3RlcHBlcnM7Ci0gICAgZ2Jvb2xlYW4g
bV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OwotICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1
dHRvbkVuZFBhcnQ7Ci0gICAgZ2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0OwotICAg
IGdib29sZWFuIG1faGFzQmFja0J1dHRvbkVuZFBhcnQ7Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NmJiOGExZDJmNzFhYTg2NGVhNTdlZDMwM2Yx
MzYwNzJjMWM0MjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWVHdGsuaCIKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGhlbWVHdGsuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBndGtT
dHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFNj
cm9sbGJhclRoZW1lR3RrKiBzY3JvbGxiYXJUaGVtZSkKLXsKLSAgICBzY3JvbGxiYXJUaGVtZS0+
dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci19Ci0KLVNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxi
YXJUaGVtZUd0aygpCi17Ci0gICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS5nZXQoKSktPmd0a0hTY3JvbGxiYXIoKSwKLSAgICAgICAgICJzdHlsZS1zZXQi
LCBHX0NBTExCQUNLKGd0a1N0eWxlU2V0Q2FsbGJhY2spLCB0aGlzKTsKLX0KLQotdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKLXsKLSAgICBHdGtXaWRnZXQq
IHNjcm9sbGJhciA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrSFNjcm9sbGJhcigpOwotICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0KHNjcm9sbGJhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX3dpZHRo
IiwgJm1fdGh1bWJGYXRuZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2hfYm9y
ZGVyIiwgJm1fdHJvdWdoQm9yZGVyV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInN0
ZXBwZXItc2l6ZSIsICZtX3N0ZXBwZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ0
cm91Z2gtdW5kZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICJoYXMtYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25T
dGFydFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIi
LCAmbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAi
aGFzLXNlY29uZGFyeS1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWJhY2t3YXJkLXN0
ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uRW5kUGFydCwgTlVMTCk7Ci0gICAgbV9taW5UaHVtYkxl
bmd0aCA9IGd0a19yYW5nZV9nZXRfbWluX3NsaWRlcl9zaXplKEdUS19SQU5HRShzY3JvbGxiYXIp
KTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKTsKLX0KLQotc3RhdGljIEd0
a1dpZGdldCogZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIpCi17Ci0gICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOwotICAgIHJldHVy
biBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyB0aGVtZS0+
Z3RrVlNjcm9sbGJhcigpIDogdGhlbWUtPmd0a0hTY3JvbGxiYXIoKTsKLX0KLQotdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIC8vIFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVu
ZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUsIHRoaXMKLSAgICAvLyBzaG91bGQgYmUgdGhl
IGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBv
bmx5IGJlIHRoZQotICAgIC8vIHRyYWNrIHJlY3QuCi0gICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFy
UmVjdChyZWN0KTsKLSAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQotICAgICAgICBmdWxs
U2Nyb2xsYmFyUmVjdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBz
Y3JvbGxiYXItPndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwotCi0gICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0KTsK
LSAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5zaXpl
KCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3gocGFpbnRSZWN0LCBnZXRXaWRnZXRG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TVEFURV9BQ1RJVkUsIEdUS19TSEFET1dfSU4sICJ0cm91Z2giKTsKLX0KLQotdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBJbnRSZWN0
IGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55
KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0KLSAgICBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVsbFNjcm9sbGJhclJl
Y3QpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFNjcm9sbGJhclJlY3QsIGdl
dFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNjcm9sbGVkX3dpbmRvdyIp
OwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdpZGdldEZvclNjcm9sbGJh
cihzY3JvbGxiYXIpOwotICAgIGdib29sZWFuIGFjdGl2YXRlU2xpZGVyOwotICAgIGd0a193aWRn
ZXRfc3R5bGVfZ2V0KHdpZGdldCwgImFjdGl2YXRlLXNsaWRlciIsICZhY3RpdmF0ZVNsaWRlciwg
TlVMTCk7Ci0KLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsK
LSAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKLSAgICBpZiAo
YWN0aXZhdGVTbGlkZXIgJiYgc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkg
ewotICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfQUNUSVZFOwotICAgICAgICBzaGFkb3dU
eXBlID0gR1RLX1NIQURPV19JTjsKLSAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSA9PSBUaHVtYlBhcnQgfHwgc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFy
dCkKLSAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOwotCi0gICAgLy8gVGhl
IGFkanVzdG1lbnQgY29udHJvbHMgdGhlIHJlbmRlcmluZyBvZiB0aGUgc2Nyb2xsYmFyIHRodW1i
LiBJZiBpdCdzIG5vdCBzZXQKLSAgICAvLyBwcm9wZXJseSB0aGUgdGhlbWUgbWF5IG5vdCBkcmF3
IHRoZSB0aHVtYiBib3JkZXJzIHByb3Blcmx5LgotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1l
bnQgPSBndGtfcmFuZ2VfZ2V0X2FkanVzdG1lbnQoR1RLX1JBTkdFKHdpZGdldCkpOwotICAgIGd0
a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGp1c3RtZW50LCBzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSk7Ci0gICAgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkanVzdG1lbnQsIDApOwotICAgIGd0
a19hZGp1c3RtZW50X3NldF91cHBlcihhZGp1c3RtZW50LCBzY3JvbGxiYXItPm1heGltdW0oKSk7
Ci0KLSAgICBHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9IT1JJ
Wk9OVEFMOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3Jv
bGxiYXIpIHsKLSAgICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50
LCByZWN0LmhlaWdodCgpKTsKLSAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05f
VkVSVElDQUw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3Np
emUoYWRqdXN0bWVudCwgcmVjdC53aWR0aCgpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKLSAgICBJbnRSZWN0IHNsaWRlclJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTbGlk
ZXIoc2xpZGVyUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzbGlkZXIiLCBv
cmllbnRhdGlvbik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIC8vIFRoZSBi
dXR0b25zIHdpbGwgYmUgZGlzYWJsZWQgaWYgdGhlIHRodW1iIGlzIGFzIHRoZSBhcHByb3ByaWF0
ZSBleHRyZW1lLgotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VU
OwotICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0g
ICAgYm9vbCBwcmVzc2VkID0gKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKTsKLQot
ICAgIGlmICgoQmFja0J1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVu
dFBvcygpKQotICAgICAgICB8fCAoQmFja0J1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxi
YXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBh
cnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpCi0g
ICAgICAgIHx8IChGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7Ci0gICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9OT1JNQUw7Ci0gICAgICAgIGlmIChwcmVzc2VkKSB7Ci0gICAgICAgICAg
ICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfQUNUSVZFOwotICAgICAgICAgICAgc2hhZG93VHlwZSA9
IEdUS19TSEFET1dfSU47Ci0gICAgICAgIH0gZWxzZSBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCkpCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7
Ci0gICAgfQotCi0gICAgLy8gVGhlbWVzIGRldGVybWluZSBob3cgdG8gZHJhdyB0aGUgYnV0dG9u
ICh3aGljaCBidXR0b24gdG8gZHJhdykgYmFzZWQgb24gdGhlIGFsbG9jYXRpb24KLSAgICAvLyBv
ZiB0aGUgd2lkZ2V0LiBXaGVyZSB0aGUgdGFyZ2V0IHJlY3QgaXMgaW4gcmVsYXRpb24gdG8gdGhl
IHRvdGFsIHdpZGdldCBhbGxvY2F0aW9uCi0gICAgLy8gZGV0ZXJtaW5lcyB0aGUgYnV0dG9uLgot
ICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpOwotICAgIGludCBidXR0b25TaXplID0gKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Ny
b2xsYmFyKSA/IHJlY3QuaGVpZ2h0KCkgOiByZWN0LndpZHRoKCk7Ci0gICAgaW50IHRvdGFsQWxs
b2NhdGlvbiA9IGJ1dHRvblNpemUgKiA1OyAvLyBPbmUgc3BhY2UgZm9yIGVhY2ggYnV0dG9uIGFu
ZCBvbmUgZXh0cmEuCi0gICAgaW50IGJ1dHRvbk9mZnNldCA9IDA7Ci0gICAgaWYgKEZvcndhcmRC
dXR0b25TdGFydFBhcnQgPT0gcGFydCkKLSAgICAgICAgYnV0dG9uT2Zmc2V0ID0gYnV0dG9uU2l6
ZTsKLSAgICBlbHNlIGlmIChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0KQotICAgICAgICBidXR0
b25PZmZzZXQgPSAzICogYnV0dG9uU2l6ZTsKLSAgICBlbHNlIGlmIChGb3J3YXJkQnV0dG9uRW5k
UGFydCA9PSBwYXJ0KQotICAgICAgICBidXR0b25PZmZzZXQgPSA0ICogYnV0dG9uU2l6ZTsKLQot
ICAgIC8vIE5vdyB3ZSB3YW50IHRoZSBhbGxvY2F0aW9uIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBv
cmlnaW4gb2YgdGhlIHBhaW50ZWQgcmVjdC4KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdp
ZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
bjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOwot
ICAgIGFsbG9jYXRpb24ueCA9IGFsbG9jYXRpb24ueSA9IDA7Ci0gICAgYWxsb2NhdGlvbi53aWR0
aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7
Ci0KLSAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAg
YWxsb2NhdGlvbi5oZWlnaHQgPSB0b3RhbEFsbG9jYXRpb247Ci0gICAgICAgIGFsbG9jYXRpb24u
eSAtPSBidXR0b25PZmZzZXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWxsb2NhdGlvbi53aWR0
aCA9IHRvdGFsQWxsb2NhdGlvbjsKLSAgICAgICAgYWxsb2NhdGlvbi54IC09IGJ1dHRvbk9mZnNl
dDsKLSAgICB9Ci0gICAgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0
aW9uKTsKLQotICAgIGNvbnN0IGNoYXIqIGRldGFpbCA9IG9yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyID8gInZzY3JvbGxiYXIiIDogImhzY3JvbGxiYXIiOwotICAgIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKLQotICAgIEludFJlY3Qg
YnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludEJveChidXR0b25SZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgZGV0
YWlsKTsKLQotICAgIGZsb2F0IGFycm93U2NhbGluZzsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dCh3aWRnZXQsICJhcnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7Ci0gICAgSW50
U2l6ZSBhcnJvd1NpemUgPSByZWN0LnNpemUoKTsKLSAgICBhcnJvd1NpemUuc2NhbGUoYXJyb3dT
Y2FsaW5nKTsKLSAgICBJbnRSZWN0IGFycm93UmVjdChJbnRQb2ludChidXR0b25SZWN0LngoKSAr
IChidXR0b25SZWN0LndpZHRoKCkgLSBhcnJvd1NpemUud2lkdGgoKSkgLyAyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblJlY3QueSgpICsgKGJ1dHRvblJlY3QuaGVpZ2h0
KCkgLSBhcnJvd1NpemUuaGVpZ2h0KCkpIC8gMiksCi0gICAgICAgICAgICAgICAgICAgICAgYXJy
b3dTaXplKTsKLSAgICBpZiAocHJlc3NlZCkgewotICAgICAgICBpbnQgYXJyb3dEaXNwbGFjZW1l
bnRYLCBhcnJvd0Rpc3BsYWNlbWVudFk7Ci0gICAgICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdp
ZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC14
IiwgJmFycm93RGlzcGxhY2VtZW50WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFy
cm93LWRpc3BsYWNlbWVudC15IiwgJmFycm93RGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGFycm93UmVjdC5tb3ZlKGFycm93RGlzcGxh
Y2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZKTsKLSAgICB9Ci0KLSAgICBHdGtBcnJvd1R5cGUg
YXJyb3dUeXBlID0gR1RLX0FSUk9XX0RPV047Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRp
Y2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8
IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgICAgIGFycm93VHlwZSA9IEdU
S19BUlJPV19VUDsKLSAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKLSAgICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1JJR0hUOwotICAgICAgICBp
ZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQpCi0gICAgICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfTEVGVDsKLSAgICB9Ci0gICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEFycm93KGFycm93UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUs
IHNoYWRvd1R5cGUsIGFycm93VHlwZSwgZGV0YWlsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk3NDljNTQzZjNkZGY2YjMxNWVmZmI5OGE3NTlmZjViMDAyZDcwY2QuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVHdGsuaCIK
LQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUaGVtZUd0ay5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIHZvaWQgZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiwgU2Nyb2xsYmFyVGhl
bWVHdGsqIHNjcm9sbGJhclRoZW1lKQotewotICAgIHNjcm9sbGJhclRoZW1lLT51cGRhdGVUaGVt
ZVByb3BlcnRpZXMoKTsKLX0KLQotU2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3Rr
KCkKLSAgICA6IG1fY29udGV4dChzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPmd0a1Njcm9sbGJhclN0eWxlKCkpCi17Ci0gICAg
dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQs
ICJjaGFuZ2VkIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwot
fQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQotewot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJtaW4tc2xpZGVyLWxlbmd0aCIsICZtX21pblRodW1iTGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdpZHRoIiwgJm1fdGh1
bWJGYXRuZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoLWJvcmRl
ciIsICZtX3Ryb3VnaEJvcmRlcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic3RlcHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzdGVwcGVyLXNwYWNpbmciLCAmbV9zdGVwcGVyU3BhY2luZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3Vn
aFVuZGVyU3RlcHBlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtYmFj
a3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoYXMtZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1
dHRvbkVuZFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25k
YXJ5LWJhY2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uRW5kUGFydCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1zZWNvbmRhcnktZm9yd2FyZC1zdGVwcGVyIiwg
Jm1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhHdGtTdHlsZUNv
bnRleHQqIGNvbnRleHQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0NS
T0xMQkFSKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgb3JpZW50
YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyAgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMIDog
R1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3Rr
OjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8g
UGFpbnQgdGhlIHRyYWNrIGJhY2tncm91bmQuIElmIHRoZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMg
cHJvcGVydHkgaXMgdHJ1ZSwgdGhpcwotICAgIC8vIHNob3VsZCBiZSB0aGUgZnVsbCBzaXplIG9m
IHRoZSBzY3JvbGxiYXIsIGJ1dCBpZiBpcyBmYWxzZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlCi0g
ICAgLy8gdHJhY2sgcmVjdC4KLSAgICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0KHJlY3QpOwot
ICAgIGlmIChtX3Ryb3VnaFVuZGVyU3RlcHBlcnMpCi0gICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0
ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lk
dGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KG1fY29udGV4dCk7Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9j
b250ZXh0LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhtX2NvbnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotCi0gICAgZ3Rr
X3JlbmRlcl9iYWNrZ3JvdW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0LngoKSwg
ZnVsbFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53aWR0aCgpLCBmdWxsU2Ny
b2xsYmFyUmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQsIGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgZnVs
bFNjcm9sbGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJS
ZWN0LndpZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKLQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKG1fY29udGV4dCk7Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMo
bV9jb250ZXh0LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQsICJzY3JvbGxlZC13aW5kb3ciKTsKLSAgICBndGtfcmVu
ZGVyX2ZyYW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNj
cm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxi
YXItPmhlaWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0
KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0g
ICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCk7Ci0gICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwg
b3JpZW50YXRpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQs
IEdUS19TVFlMRV9DTEFTU19TTElERVIpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlm
IChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBmbGFncyB8
PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hU
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRleHQsIHN0YXRpY19jYXN0
PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfcmVuZGVyX3NsaWRlcihtX2NvbnRl
eHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBvcmll
bnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCA6
IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jl
c3RvcmUobV9jb250ZXh0KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0
b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCi17Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0gICAgU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7Ci0gICAgYXBwbHlTY3Jv
bGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgb3JpZW50YXRpb24pOwotCi0gICAg
Z3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICgoQmFja0J1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYm
IHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQotICAgICAgICB8fCAoQmFja0J1dHRvbkVuZFBhcnQg
PT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEZvcndhcmRC
dXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xs
YmFyLT5tYXhpbXVtKCkpCi0gICAgICAgIHx8IChGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBh
cnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7
Ci0gICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKLSAgICAgICAg
ICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgaWYgKHBhcnQgPT0g
c2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfUFJFTElHSFQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9G
TEFHX0lOU0VOU0lUSVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAg
ICBndGtfcmVuZGVyX2JhY2tncm91bmQobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOwotCi0gICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3R5bGUobV9jb250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5V
TEwpOwotCi0gICAgZG91YmxlIGFycm93U2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkgKiBhcnJvd1NjYWxpbmc7Ci0gICAgRmxvYXRQb2ludCBhcnJvd1BvaW50KHJl
Y3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZSkgLyAyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAvIDIpOwot
Ci0gICAgaWYgKGZsYWdzICYgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFKSB7Ci0gICAgICAgIGdpbnQg
YXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVudFk7Ci0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC15
IiwgJmFycm93RGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotICAgICAgICBhcnJvd1BvaW50Lm1vdmUoYXJyb3dEaXNwbGFjZW1lbnRYLCBh
cnJvd0Rpc3BsYWNlbWVudFkpOwotICAgIH0KLQotICAgIGdkb3VibGUgYW5nbGU7Ci0gICAgaWYg
KG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGFuZ2xlID0gKHBh
cnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0KSA/IEdfUEkgOiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFuZ2xlID0gKHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSA/
IEdfUEkgLyAyIDogMyAqIChHX1BJIC8gMik7Ci0gICAgfQotCi0gICAgZ3RrX3JlbmRlcl9hcnJv
dyhtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJy
b3dQb2ludC54KCksIGFycm93UG9pbnQueSgpLCBhcnJvd1NpemUpOwotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDI0MTM3NzNlNThjNjA1YzQwODEzYTljMDdiODkwMDNkNjFmZDgxMGIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVHdGsuaCIK
LQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
U2VhcmNoUG9wdXBNZW51R3RrOjpTZWFyY2hQb3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50KiBj
bGllbnQpCi0gICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVHdGsoY2xpZW50KSkp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotUG9wdXBNZW51KiBTZWFyY2hQb3B1cE1l
bnVHdGs6OnBvcHVwTWVudSgpCi17Ci0gICAgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7Ci19Ci0KLXZv
aWQgU2VhcmNoUG9wdXBNZW51R3RrOjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3Ry
aW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRv
bWljU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgU2VhcmNoUG9wdXBNZW51R3RrOjplbmFibGVkKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0NTNjNjNkN2MyYjdiODRlNDI2MzU2MjYzYTlkNmI5MjQ5MjExZThiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTZWFyY2hQb3B1cE1lbnVHdGtfaAot
I2RlZmluZSBTZWFyY2hQb3B1cE1lbnVHdGtfaAotCi0jaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgi
Ci0jaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgU2VhcmNoUG9wdXBNZW51R3RrIDogcHVibGljIFNlYXJjaFBvcHVwTWVudSB7Ci1wdWJs
aWM6Ci0gICAgU2VhcmNoUG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCopOwotCi0gICAgdmly
dHVhbCBQb3B1cE1lbnUqIHBvcHVwTWVudSgpOwotICAgIHZpcnR1YWwgdm9pZCBzYXZlUmVjZW50
U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
c2VhcmNoSXRlbXMpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwotICAgIHZp
cnR1YWwgYm9vbCBlbmFibGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFBvcHVwTWVudUd0
az4gbV9wb3B1cDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNlYXJjaFBvcHVwTWVudUd0a19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzA0MGYyOGU5ZGY3MWU0ZWVkMGUxYTAxMjZlNjY1
MGQzNWM2MzZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQot
ewotICAgIGlmIChmaWxlUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Q1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmaWxlUGF0aCk7Ci0g
ICAgZ2NoYXIqIGNvbnRlbnRzOwotICAgIGdzaXplIHNpemU7Ci0gICAgR0Vycm9yKiBlcnJvciA9
IDA7Ci0gICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVuYW1lLmRhdGEoKSwgJmNvbnRl
bnRzLCAmc2l6ZSwgJmVycm9yKSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmdWxs
eSByZWFkIGNvbnRlbnRzIG9mIGZpbGUgJXMgLSAlcyIsIGZpbGVuYW1lRm9yRGlzcGxheShmaWxl
UGF0aCkudXRmOCgpLmRhdGEoKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiByZXN1bHQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50cywgc2l6ZSk7Ci0g
ICAgZ19mcmVlKGNvbnRlbnRzKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1NoYXJlZFRpbWVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxYTM1
MmY3MzNmMGViM2E3NjhmOTgyMWE0MDI1NjQzMDMwNGY2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hh
cmVkVGltZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5j
bHVkZSA8Z2xpYi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBndWludCBzaGFy
ZWRUaW1lcjsKLXN0YXRpYyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOwotCi12
b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBzaGFy
ZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9j
YihncG9pbnRlcikKLXsKLSAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQotICAgICAg
ICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXZv
aWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQotewotICAgIEFT
U0VSVChzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOwotCi0gICAgZ3VpbnQgaW50ZXJ2YWxJbk1T
ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGludGVydmFsICogMTAwMCk7Ci0KLSAgICBzdG9wU2hhcmVk
VGltZXIoKTsKLSAgICBzaGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJ
VFlfUkVEUkFXLCBpbnRlcnZhbEluTVMsIHRpbWVvdXRfY2IsIDAsIDApOwotfQotCi12b2lkIHN0
b3BTaGFyZWRUaW1lcigpCi17Ci0gICAgaWYgKHNoYXJlZFRpbWVyID09IDApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdib29sZWFuIHJlbW92ZWRTb3VyY2UgPSBnX3NvdXJjZV9yZW1vdmUoc2hh
cmVkVGltZXIpOwotICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZFNvdXJjZSwgcmVtb3ZlZFNvdXJj
ZSk7Ci0gICAgc2hhcmVkVGltZXIgPSAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1NvdW5kR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3MzE2Y2Fm
ZDJlY2VmN2I2MWU4YWRmMTI5MzYyNjhhOTIyNGM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291bmRH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpbmNsdWRlICJTb3VuZC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXZvaWQgc3lzdGVtQmVlcCgpCi17Ci0gICAgZ2RrX2JlZXAoKTsKLX0KLQot
fQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2IzNDQ0OTNkNWIzMWQ4ZGQ4NTAzOTg5MzY4ZmFhYjAzNTRhMzM5MC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJDb29raWVT
dG9yYWdlLmgiCi0jaW5jbHVkZSAiRE5TLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRl
IDxmbG9hdC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29tcGxldGVs
eSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci12b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+
JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1TdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VT
dHJpbmcsIGNvbnN0IEtVUkwgJnVybCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLWZsb2F0IHVzZXJJ
ZGxlVGltZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEZMVF9NQVg7IH0gLy8gcmV0dXJu
IGFuIGFyYml0cmFyaWx5IGhpZ2ggdXNlcklkbGVUaW1lIHNvIHRoYXQgcmVsZWFzaW5nIHBhZ2Vz
IGZyb20gdGhlIHBhZ2UgY2FjaGUgaXNuJ3QgcG9zdHBvbmVkCi0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGYzYmM3MzMzOGM5NDhlNjk3NzMyNzQ5OTRkMzVhMjFiZDIwNmUwZDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRHdGsuaCIKLQotI2luY2x1ZGUgPGdsaWIu
aD4KLQotI2lmIE9TKFVOSVgpCi0jaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KLSNlbGlmIE9TKFdJ
TkRPV1MpCi0jaW5jbHVkZSAiU3lzdGVtSW5mby5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHBsYXRmb3JtRm9yVUFTdHJpbmcoKQotewotI2lm
IFBMQVRGT1JNKFgxMSkKLSAgICByZXR1cm4gIlgxMSI7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAg
IHJldHVybiAiIjsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gIk1hY2ludG9zaCI7
Ci0jZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfRElSRUNURkIpCi0gICAgcmV0dXJuICJEaXJl
Y3RGQiI7Ci0jZWxzZQotICAgIHJldHVybiAiVW5rbm93biI7Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IFN0cmluZyBwbGF0Zm9ybVZlcnNpb25Gb3JVQVN0cmluZygpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIHVhT1NWZXJzaW9uLCAoU3RyaW5nKCkpKTsKLSAgICBpZiAoIXVhT1NW
ZXJzaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHVhT1NWZXJzaW9uOwotCi0jaWYgT1Mo
V0lORE9XUykKLSAgICB1YU9TVmVyc2lvbiA9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsK
LSNlbGlmIE9TKERBUldJTikKLSNpZiBDUFUoWDg2KQotICAgIHVhT1NWZXJzaW9uID0gIkludGVs
IE1hYyBPUyBYIjsKLSNlbHNlCi0gICAgdWFPU1ZlcnNpb24gPSAiUFBDIE1hYyBPUyBYIjsKLSNl
bmRpZgotI2VsaWYgT1MoVU5JWCkKLSAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOwotICAgIGlmICh1
bmFtZSgmbmFtZSkgIT0gLTEpCi0gICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nOjpmb3JtYXQo
IiVzICVzIiwgbmFtZS5zeXNuYW1lLCBuYW1lLm1hY2hpbmUpOwotICAgIGVsc2UKLSAgICAgICAg
dWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKLSNlbHNlCi0gICAgdWFPU1ZlcnNpb24g
PSBTdHJpbmcoIlVua25vd24iKTsKLSNlbmRpZgotICAgIHJldHVybiB1YU9TVmVyc2lvbjsKLX0K
LQotU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1l
LCBjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVyc2lvbikKLXsKLSAgICAvLyBDcmVhdGUgYSBk
ZWZhdWx0IHVzZXIgYWdlbnQgc3RyaW5nIHdpdGggYSBsaWJlcmFsIGludGVycHJldGF0aW9uIG9m
IAotICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVXNlcl9B
Z2VudF9TdHJpbmdzX1JlZmVyZW5jZQotICAgIC8vCi0gICAgLy8gRm9ybWluZyBhIGZ1bmN0aW9u
YWwgdXNlciBhZ2VudCBpcyByZWFsbHkgZGlmZmljdWx0LiBXZSBtdXN0IG1lbnRpb24gU2FmYXJp
LCBiZWNhdXNlIHNvbWUKLSAgICAvLyBzaXRlcyBjaGVjayBmb3IgdGhhdCB3aGVuIGRldGVjdGlu
ZyBXZWJLaXQgYnJvd3NlcnMuIEFkZGl0aW9uYWxseSBzb21lIHNpdGVzIGFzc3VtZSB0aGF0Ci0g
ICAgLy8gYnJvd3NlcnMgdGhhdCBhcmUgIlNhZmFyaSIgYnV0IG5vdCBydW5uaW5nIG9uIE9TIFgg
YXJlIHRoZSBTYWZhcmkgaU9TIGJyb3dzZXIsIHNvIHdlCi0gICAgLy8gYWxzbyBjbGFpbSB0byBi
ZSAgQ2hyb21pdW0uIEdldHRpbmcgdGhpcyB3cm9uZyBjYW4gY2F1c2Ugc2l0ZXMgdG8gbG9hZCB0
aGUgd3JvbmcgSmF2YVNjcmlwdCwKLSAgICAvLyBDU1MsIG9yIGN1c3RvbSBmb250cy4gSW4gc29t
ZSBjYXNlcyBzaXRlcyB3b24ndCBsb2FkIHJlc291cmNlcyBhdCBhbGwuCi0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBDU3RyaW5nLCB1YVZlcnNpb24sIChTdHJpbmc6OmZvcm1hdCgiJWku
JWkiLCBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfVVNFUl9BR0VOVF9N
SU5PUl9WRVJTSU9OKS51dGY4KCkpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgc3RhdGljVUEsIChTdHJpbmc6OmZvcm1hdCgiTW96aWxsYS81LjAgKCVzOyAlcykgQXBw
bGVXZWJLaXQvJXMgKEtIVE1MLCBsaWtlIEdlY2tvKSAiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocm9taXVtLzI1LjAu
MTM0OS4yIENocm9tZS8yNS4wLjEzNDkuMiBTYWZhcmkvJXMiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtRm9y
VUFTdHJpbmcoKSwgcGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcoKS51dGY4KCkuZGF0YSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVhVmVyc2lvbi5kYXRhKCksIHVhVmVyc2lvbi5kYXRhKCkpKSk7Ci0gICAgaWYgKGFw
cGxpY2F0aW9uTmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNVQTsKLQotICAg
IFN0cmluZyBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IGFwcGxpY2F0aW9uVmVyc2lvbjsKLSAg
ICBpZiAoZmluYWxBcHBsaWNhdGlvblZlcnNpb24uaXNFbXB0eSgpKQotICAgICAgICBmaW5hbEFw
cGxpY2F0aW9uVmVyc2lvbiA9IHVhVmVyc2lvbi5kYXRhKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIiVzICVzLyVzIiwgc3RhdGljVUEudXRmOCgpLmRhdGEoKSwgYXBwbGljYXRpb25O
YW1lLnV0ZjgoKS5kYXRhKCksIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uLnV0ZjgoKS5kYXRhKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbiBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NWE1MGI3YTMyZDI4ZjAyMWU4NDYzNzY4N2Q3ZGQ5YjZjOTBjNzU3Yi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvVXNlckFnZW50R3RrLmguaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBVc2VyQWdl
bnRHdGtfaAotI2RlZmluZSBVc2VyQWdlbnRHdGtfaAotCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jZGVmaW5lIFdFQktJ
VF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04gKEBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJT
SU9OQCkKLSNkZWZpbmUgV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTiAoQFdFQktJVF9V
U0VSX0FHRU5UX01JTk9SX1ZFUlNJT05AKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmlu
ZyBzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSA9ICIiLCBj
b25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVyc2lvbiA9ICIiKTsKLQotfQotCi0jZW5kaWYgLy8g
VXNlckFnZW50R3RrX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1dpZGdldEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzZjNjOWM3YzlhNmUyYzlhMzRjMDkx
ZWU5NGJjYjEzNzhjNmYzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLSNpbmNsdWRl
ICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
LQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQotewot
ICAgIGluaXQod2lkZ2V0KTsKLX0KLQotV2lkZ2V0Ojp+V2lkZ2V0KCkKLXsKLSAgICBBU1NFUlQo
IXBhcmVudCgpKTsKLQotICAgIHJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpOwotfQotCi12b2lkIFdp
ZGdldDo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQotewotfQotCi12b2lkIFdpZGdldDo6c2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQotewotICAgIFNjcm9sbFZpZXcqIHZpZXcgPSByb290
KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+aG9zdFdpbmRv
dygpLT5zZXRDdXJzb3IoY3Vyc29yKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNob3coKQotewotICAg
IHNldFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBs
YXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdpZGdldCgp
KTsKLX0KLQotdm9pZCBXaWRnZXQ6OmhpZGUoKQotewotICAgIHNldFNlbGZWaXNpYmxlKGZhbHNl
KTsKLQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQotICAg
ICAgICBndGtfd2lkZ2V0X2hpZGUocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wgaXNTZWxlY3RlZCkKLXsKLSAg
ICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNlZSBp
ZiB0aGUgcGxhdGZvcm1XaWRnZXQgaGFzIGEgd2Via2l0LXdpZGdldC1pcy1zZWxlY3RlZCBwcm9w
ZXJ0eQotICAgIC8vIGFuZCBzZXQgaXQgYWZ0ZXJ3YXJkcy4KLSAgICBHUGFyYW1TcGVjKiBzcGVj
ID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MocGxhdGZv
cm1XaWRnZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQiKTsKLSAgICBpZiAoIXNwZWMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGdfb2JqZWN0X3NldChwbGF0Zm9ybVdpZGdldCgpLCAid2Vi
a2l0LXdpZGdldC1pcy1zZWxlY3RlZCIsIGlzU2VsZWN0ZWQsIE5VTEwpOwotfQotCi1JbnRSZWN0
IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZTsKLX0KLQot
dm9pZCBXaWRnZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG1f
ZnJhbWUgPSByZWN0OwotICAgIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0
OjpyZWxlYXNlUGxhdGZvcm1XaWRnZXQoKQotewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkK
LSAgICAgICAgIHJldHVybjsKLSAgICBnX29iamVjdF91bnJlZihwbGF0Zm9ybVdpZGdldCgpKTsK
LX0KLQotdm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKLXsKLSAgICBpZiAoIXBs
YXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgICByZXR1cm47Ci0gICAgZ19vYmplY3RfcmVmX3Npbmso
cGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTlmNWRhNTQ2ODMwMzg1MzYzMTM3MWM0YzdlZjM2M2U3MTRmODExYy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1
ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxnZGsv
Z2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR2RrUGl4bWFwKiBnU2NyYXRjaEJ1
ZmZlciA9IDA7Ci1zdGF0aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKQotewotICAgIGlmIChn
U2NyYXRjaEJ1ZmZlcikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZ1NjcmF0Y2hCdWZmZXIpOwot
ICAgIGdTY3JhdGNoQnVmZmVyID0gMDsKLX0KLQotLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBh
IHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQotLy8gcmVu
ZGVyLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2
ZXJ5IG9wZXJhdGlvbiwKLS8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9t
YXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgotY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGlt
ZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGZpcmVk
KCkgeyBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsgfQotfTsKLQotc3RhdGljIHZvaWQgc2NoZWR1bGVT
Y3JhdGNoQnVmZmVyUHVyZ2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHVyZ2VTY3Jh
dGNoQnVmZmVyVGltZXIsIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCAoKSk7Ci0gICAgaWYgKHB1
cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHB1cmdlU2NyYXRjaEJ1
ZmZlclRpbWVyLnN0b3AoKTsKLSAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdGFydE9uZVNo
b3QoMik7Ci19Ci0KLVdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpCi0gICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCi0gICAgLCBt
X3RhcmdldFJlY3QodGFyZ2V0UmVjdCkKLSAgICAsIG1faGFkRXJyb3IoZmFsc2UpCi17Ci0gICAg
UmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOwotCi0gICAgLy8gRmFsbGJhY2s6IFdlIGZh
aWxlZCB0byBjcmVhdGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJv
cGVybHkgcGFpbnQgCi0gICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUg
dHJhbnNwYXJlbmN5LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKLSAg
ICAvLyBwYWludCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90
IHJlbmRlciBDU1Mgcm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgotICAgIGlmICghdGhl
bWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtX
aW5kb3coKSkgewotICAgICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBuZXZlciB3YW50IHRvIGNy
ZWF0ZSBhIHNjcmF0Y2ggYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG91ciB0YXJnZXQg
R2RrRHJhd2FibGUuCi0gICAgLy8gVGhpcyBwcmV2ZW50cyBnaWFudCBwaXhtYXAgYWxsb2NhdGlv
bnMgZm9yIHZlcnkgbGFyZ2Ugd2lkZ2V0cyBpbiBzbWFsbGVyIHZpZXdzLgotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGNoZWNrIGZvciBXZWJLaXQyIGFzIHdlbGwuCi0g
ICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKLSAgICAgICAgaW50IG1heFdp
ZHRoID0gMCwgbWF4SGVpZ2h0ID0gMDsKLSAgICAgICAgZ2V0R2RrRHJhd2FibGVTaXplKGdyYXBo
aWNzQ29udGV4dC0+Z2RrV2luZG93KCksICZtYXhXaWR0aCwgJm1heEhlaWdodCk7Ci0gICAgICAg
IG1fdGFyZ2V0UmVjdC5zZXRTaXplKG1fdGFyZ2V0UmVjdC5zaXplKCkuc2hydW5rVG8oSW50U2l6
ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KSkpOwotICAgIH0KLQotICAgIC8vIFdpZGdldHMgc29tZXRp
bWVzIG5lZWQgdG8gZHJhdyBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMgZm9yIHRoaW5ncyBzdWNo
IGFzCi0gICAgLy8gZXh0ZXJpb3IgZm9jdXMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzb21lIGV4
dHJhIHBpeGVscyBpbiBvdXIgc3VyZmFjZSBmb3IgdGhpcy4KLSAgICBzdGF0aWMgaW50IGV4dHJh
U3BhY2UgPSAxNTsKLSAgICBtX3RhcmdldFJlY3QuaW5mbGF0ZShleHRyYVNwYWNlKTsKLQotICAg
IC8vIFRoaXMgb2Zmc2V0IHdpbGwgbWFwIGEgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSB3aWRnZXQgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludGluZyBi
dWZmZXIuCi0gICAgbV9wYWludE9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtIG1fdGFy
Z2V0UmVjdC5sb2NhdGlvbigpOwotCi0gICAgaW50IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRo
KCkgKyAoZXh0cmFTcGFjZSAqIDIpOwotICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVp
Z2h0KCkgKyAoZXh0cmFTcGFjZSAqIDIpOwotICAgIGludCBzY3JhdGNoV2lkdGggPSAwOwotICAg
IGludCBzY3JhdGNoSGVpZ2h0ID0gMDsKLSAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCi0gICAgICAg
IGdka19waXhtYXBfZ2V0X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lkdGgsICZzY3Jh
dGNoSGVpZ2h0KTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZm
ZXIgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAgICBpZiAoIWdTY3Jh
dGNoQnVmZmVyIHx8IHNjcmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWlnaHQgPCBoZWln
aHQpIHsKLSAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7Ci0gICAgICAgIC8vIFJvdW5kIHRv
IHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBz
aW1pbGFyIHNpemVkIHJlcXVlc3RzLgotICAgICAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUp
KSA8PCA1OwotICAgICAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAg
ICAgICAgZ1NjcmF0Y2hCdWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwgaGVpZ2h0LCBn
ZGtfY29sb3JtYXBfZ2V0X3Zpc3VhbCh0aGVtZS0+bV9jb2xvcm1hcCktPmRlcHRoKTsKLSAgICAg
ICAgZ2RrX2RyYXdhYmxlX3NldF9jb2xvcm1hcChnU2NyYXRjaEJ1ZmZlciwgdGhlbWUtPm1fY29s
b3JtYXApOwotICAgIH0KLSAgICBtX3RhcmdldCA9IGdTY3JhdGNoQnVmZmVyOwotCi0gICAgLy8g
Q2xlYXIgdGhlIHNjcmF0Y2ggYnVmZmVyLgotICAgIFJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVm
ZmVyQ29udGV4dCA9IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsK
LSAgICBjYWlyb19zZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKLSAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5n
ZXQoKSk7Ci19Ci0KLVdpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250
ZXh0KCkKLXsKLSAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdl
dCBpbiB0aGUgZmFsbGJhY2sgY2FzZS4gU2VlIGFib3ZlLgotICAgIFJlbmRlclRoZW1lR3RrKiB0
aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLmdldCgpKTsKLSAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9y
bWFwICYmIG1fZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRG9uJ3QgcGFpbnQgdGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IuCi0gICAgaWYgKG1faGFkRXJyb3IpIHsKLSAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJdCdzIHVu
Y2xlYXIgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBo
ZXJlLgotICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91
c1NvdXJjZShjYWlyb19nZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOwotCi0gICAgZ2RrX2NhaXJv
X3NldF9zb3VyY2VfcGl4bWFwKGNhaXJvQ29udGV4dCwgZ1NjcmF0Y2hCdWZmZXIsIG1fdGFyZ2V0
UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCkpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0Nv
bnRleHQsIG1fdGFyZ2V0UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCksIG1fdGFyZ2V0UmVjdC53
aWR0aCgpLCBtX3RhcmdldFJlY3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250
ZXh0KTsKLSAgICBjYWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2Uu
Z2V0KCkpOwotICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Ci19Ci0KLXZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgR2RrUmVjdGFuZ2xlKiBjbGlwUmVjdCkKLXsKLSAgICBjbGlwUmVjdC0+eCA9IG1fcGFpbnRP
ZmZzZXQud2lkdGgoKSArIHJlY3QueCgpOwotICAgIGNsaXBSZWN0LT55ID0gbV9wYWludE9mZnNl
dC5oZWlnaHQoKSArIHJlY3QueSgpOwotICAgIGNsaXBSZWN0LT53aWR0aCA9IG1fdGFyZ2V0UmVj
dC53aWR0aCgpOwotICAgIGNsaXBSZWN0LT5oZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCk7
Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50
UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0
a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtS
ZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0
KTsKLQotICAgIC8vIFNvbWUgd2lkZ2V0cyBhbHNvIG5lZWQgdGhlaXIgYWxsb2NhdGlvbiBhZGp1
c3RlZCB0byBhY2NvdW50IGZvciBleHRyYSBzcGFjZS4KLSAgICAvLyBSaWdodCBub3cgb25seSBz
Y3JvbGxiYXIgYnV0dG9ucyBoYXZlIHNpZ25pZmljYW50IGFsbG9jYXRpb25zLgotICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdl
dCwgJmFsbG9jYXRpb24pOwotICAgIGFsbG9jYXRpb24ueCArPSBjbGlwUmVjdC54OwotICAgIGFs
bG9jYXRpb24ueSArPSBjbGlwUmVjdC55OwotICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24o
d2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0KLSAgICBndGtfcGFpbnRfYm94KGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVj
dCwKLSAgICAgICAgICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVj
dC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
LSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9m
bGF0X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBl
LCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwg
ZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29u
c3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5
cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0Owot
ICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0gICAgZ3RrX3BhaW50X2Zv
Y3VzKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZj
bGlwUmVjdCwgd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0Lngs
IGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0
KHJlY3QsICZjbGlwUmVjdCk7Ci0gICAgZ3RrX3BhaW50X3NsaWRlcihndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3Qs
IHdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJl
Y3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBvcmllbnRhdGlvbik7Ci19Ci0KLXZv
aWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93
VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3Rhbmds
ZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAg
IGd0a19wYWludF9jaGVjayhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwg
c3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0
aW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUg
c3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwp
Ci17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJl
Y3QsICZjbGlwUmVjdCk7Ci0gICAgZ3RrX3BhaW50X29wdGlvbihndGtfd2lkZ2V0X2dldF9zdHls
ZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdp
ZGdldCwKLSAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3Qu
eSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJp
bmdDb250ZXh0OjpndGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQq
IHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBl
LCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAg
ICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9zaGFk
b3coZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hh
ZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICBkZXRhaWws
IGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19
Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRBcnJvdyhjb25zdCBJbnRS
ZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3Rr
U2hhZG93VHlwZSBzaGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKiBk
ZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBS
ZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0gICAgZ3RrX3BhaW50X2Fycm93KGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVj
dCwgd2lkZ2V0LCBkZXRhaWwsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a0Fy
cm93VHlwZT4oYXJyb3dEaXJlY3Rpb24pLCBUUlVFLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0Nv
bnRleHQ6Omd0a1BhaW50VkxpbmUoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlw
UmVjdCk7Ci0gICAgZ3RrX3BhaW50X3ZsaW5lKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWwsCi0gICAgICAg
ICAgICAgICAgICAgIGNsaXBSZWN0LnksIGNsaXBSZWN0LnkgKyByZWN0LmhlaWdodCgpLCBjbGlw
UmVjdC54KTsKLQotfQotCi19Ci0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjJjOGE3NzFjMGUxNjczMzc0OGRkNjRm
NDRlY2FjMGUwY2Y5OTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHRfaAotI2RlZmluZSBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKLQot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLS8vIFVz
dWFsbHkgdGhpcyBpcyB0b28gZXhwZW5zaXZlIHRvIGhhdmUgaW4gaGVhZGVycywgYnV0IEd0a1N0
YXRlVHlwZSBHdGtTaGFkb3dUeXBlIGFyZQotLy8gZW51bXMgYW5kIGNhbm5vdCBiZSBmb3J3YXJk
IGRlY2xhcmVkLiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggaXMgY3VycmVudGx5IG9ubHkKLS8v
IGluY2x1ZGVkIGluIFJlbmRlclRoZW1lR3RrMi5jcHAgYW5kIFNjcm9sbGJhclRoZW1lR3RrMi5j
cHAuCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFJlbmRlclRoZW1lR3RrOwotCi1jbGFzcyBXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB+V2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dCgpOwotCi0gICAgdm9pZCBndGtQYWludEJveChjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0
KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQg
Z3RrUGFpbnRGbGF0Qm94KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUs
IEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7Ci0gICAgdm9pZCBndGtQYWludEZvY3VzKGNv
bnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7Ci0g
ICAgdm9pZCBndGtQYWludFNsaWRlcihjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3Rh
dGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciosIEd0a09yaWVudGF0aW9uKTsKLSAg
ICB2b2lkIGd0a1BhaW50Q2hlY2soY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50T3B0
aW9uKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKik7Ci0gICAgdm9pZCBndGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0
JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciop
OwotICAgIHZvaWQgZ3RrUGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3Rr
U3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFy
Kik7Ci0gICAgdm9pZCBndGtQYWludFZMaW5lKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBH
dGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjYWxjdWxh
dGVDbGlwUmVjdChjb25zdCBJbnRSZWN0JiwgR2RrUmVjdGFuZ2xlKik7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OwotICAgIEludFJlY3QgbV90YXJnZXRSZWN0Owot
ICAgIEludFNpemUgbV9wYWludE9mZnNldDsKLSAgICBib29sIG1faGFkRXJyb3I7Ci0gICAgR2Rr
RHJhd2FibGUqIG1fdGFyZ2V0OwotCi19OwotCi19Ci0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJ
T05fMgotI2VuZGlmIC8vIFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2lu
Z1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQyM2ZhNWRlZDIyNmRl
Yjk3Y2U3MzNiMTdlZGMxOWJiN2NkNjk0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVk
ZW50aWFsQmFja2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKLQotI2RlZmluZSBTRUNSRVRfV0lU
SF9VTlNUQUJMRSAxCi0jZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVDVF9UT19DSEFOR0UgMQotI2lu
Y2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8bGlic2VjcmV0L3NlY3Jl
dC5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dP
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDcmVkZW50aWFsQmFja2luZ1N0b3JlLCBiYWNr
aW5nU3RvcmUsICgpKTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlOwotfQotCi1zdGF0aWMgR1Jl
ZlB0cjxHSGFzaFRhYmxlPiBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwm
IGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsKCkpCi17Ci0gICAgU291cFVSSSogdXJpID0gc291cF9t
ZXNzYWdlX2dldF91cmkoY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOwotICAgIEdSZWZQdHI8R0hh
c2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihzZWNyZXRfYXR0cmlidXRlc19idWlsZCgK
LSAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKLSAgICAgICAgImRvbWFpbiIs
IHNvdXBfYXV0aF9nZXRfcmVhbG0oY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAotICAgICAgICAic2Vy
dmVyIiwgdXJpLT5ob3N0LAotICAgICAgICAicHJvdG9jb2wiLCB1cmktPnNjaGVtZSwKLSAgICAg
ICAgImF1dGh0eXBlIiwgc291cF9hdXRoX2dldF9zY2hlbWVfbmFtZShjaGFsbGVuZ2Uuc291cEF1
dGgoKSksCi0gICAgICAgICJwb3J0IiwgdXJpLT5wb3J0LAotICAgICAgICBOVUxMKSk7Ci0gICAg
aWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKLQot
ICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoYXR0cmlidXRlcy5nZXQoKSwgZ19zdHJkdXAoInVzZXIi
KSwgZ19zdHJkdXAoY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVy
biBhdHRyaWJ1dGVzOwotfQotCi1zdHJ1Y3QgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVh
ZHlDYWxsYmFja0RhdGEgewotICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRlbnRpYWxG
b3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjazsKLSAgICB2b2lkKiBkYXRhOwotfTsKLQotc3Rh
dGljIHZvaWQgY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFjayhTZWNyZXRT
ZXJ2aWNlKiBzZXJ2aWNlLCBHQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0LCBDcmVkZW50aWFsRm9y
Q2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSogY2FsbGJhY2tEYXRhKQotewotICAgIENy
ZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxs
YmFjayA9IGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2s7Ci0gICAgdm9pZCogZGF0YSA9IGNhbGxiYWNr
RGF0YS0+ZGF0YTsKLSAgICBkZWxldGUgY2FsbGJhY2tEYXRhOwotCi0gICAgR093blB0cjxHRXJy
b3I+IGVycm9yOwotICAgIEdPd25QdHI8R0xpc3Q+IGVsZW1lbnRzKHNlY3JldF9zZXJ2aWNlX3Nl
YXJjaF9maW5pc2goc2VydmljZSwgYXN5bmNSZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAg
IGlmIChlcnJvciB8fCAhZWxlbWVudHMgfHwgIWVsZW1lbnRzLT5kYXRhKSB7Ci0gICAgICAgIGNh
bGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBHUmVmUHRyPFNlY3JldEl0ZW0+IHNlY3JldEl0ZW0gPSBhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8
U2VjcmV0SXRlbSo+KGVsZW1lbnRzLT5kYXRhKSk7Ci0gICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBh
dHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9hdHRyaWJ1dGVzKHNlY3JldEl0
ZW0uZ2V0KCkpKTsKLSAgICBTdHJpbmcgdXNlciA9IFN0cmluZzo6ZnJvbVVURjgoc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5nZXQoKSwgInVz
ZXIiKSkpOwotICAgIGlmICh1c2VyLmlzRW1wdHkoKSkgewotICAgICAgICBjYWxsYmFjayhDcmVk
ZW50aWFsKCksIGRhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2l6ZV90IGxl
bmd0aDsKLSAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBzZWNyZXRWYWx1ZSA9IGFkb3B0R1JlZihz
ZWNyZXRfaXRlbV9nZXRfc2VjcmV0KHNlY3JldEl0ZW0uZ2V0KCkpKTsKLSAgICBjb25zdCBjaGFy
KiBwYXNzd29yZERhdGEgPSBzZWNyZXRfdmFsdWVfZ2V0KHNlY3JldFZhbHVlLmdldCgpLCAmbGVu
Z3RoKTsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkRGF0
YSwgbGVuZ3RoKTsKLQotICAgIGNhbGxiYWNrKENyZWRlbnRpYWwodXNlciwgcGFzc3dvcmQsIENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCksIGRhdGEpOwotfQotCi12b2lkIENyZWRlbnRp
YWxCYWNraW5nU3RvcmU6OmNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNh
bGxiYWNrLCB2b2lkKiBkYXRhKQotewotICAgIC8vIFRoZSBkZWZhdWx0IGZsYWcgb25seSByZXR1
cm5zIHRoZSBtb3N0IHJlY2VudCBpdGVtLCBub3QgYWxsIG9mIHRoZW0uCi0gICAgU2VjcmV0U2Vh
cmNoRmxhZ3Mgc2VhcmNoRmxhZ3MgPSBzdGF0aWNfY2FzdDxTZWNyZXRTZWFyY2hGbGFncz4oU0VD
UkVUX1NFQVJDSF9VTkxPQ0sgfCBTRUNSRVRfU0VBUkNIX0xPQURfU0VDUkVUUyk7Ci0gICAgQ3Jl
ZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEqIGNhbGxiYWNrRGF0YSA9
IG5ldyBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YTsKLSAgICBj
YWxsYmFja0RhdGEtPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgY2FsbGJhY2tEYXRhLT5kYXRh
ID0gZGF0YTsKLQotICAgIHNlY3JldF9zZXJ2aWNlX3NlYXJjaCgKLSAgICAgICAgMCwgLy8gVGhl
IGRlZmF1bHQgU2VjcmV0U2VydmljZS4KLSAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVU
V09SSywKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjaGFs
bGVuZ2UpLmdldCgpLAotICAgICAgICBzZWFyY2hGbGFncywKLSAgICAgICAgMCwgLy8gY2FuY2Vs
bGFibGUKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjcmVk
ZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrKSwKLSAgICAgICAgY2FsbGJhY2tE
YXRhKTsKLX0KLQotdm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpzdG9yZUNyZWRlbnRpYWxz
Rm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNv
bnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17Ci0gICAgQ1N0cmluZyB1dGY4UGFzc3dvcmQg
PSBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpOwotICAgIEdSZWZQdHI8U2VjcmV0VmFsdWU+
IG5ld1NlY3JldFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF92YWx1ZV9uZXcodXRmOFBhc3N3b3Jk
LmRhdGEoKSwgdXRmOFBhc3N3b3JkLmxlbmd0aCgpLCAidGV4dC9wbGFpbiIpKTsKLQotICAgIHNl
Y3JldF9zZXJ2aWNlX3N0b3JlKAotICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNyZXRTZXJ2
aWNlLgotICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAotICAgICAgICBjcmVh
dGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3JlZGVudGlhbCku
Z2V0KCksCi0gICAgICAgIFNFQ1JFVF9DT0xMRUNUSU9OX0RFRkFVTFQsCi0gICAgICAgIF8oIldl
YktpdEdUSysgcGFzc3dvcmQiKSwKLSAgICAgICAgbmV3U2VjcmV0VmFsdWUuZ2V0KCksCi0gICAg
ICAgIDAsIC8vIGNhbmNlbGxhYmxlCi0gICAgICAgIDAsIC8vIGNhbGxiYWNrCi0gICAgICAgIDAp
OyAvLyBkYXRhCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3Rv
cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkYTlhMTU3ZmJjMTk2ZTYyODcw
NDIyYWNlOWVmZTg5NzQ4ZWU2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFs
QmFja2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDcmVkZW50aWFsQmFja2luZ1N0b3Jl
X2gKLSNkZWZpbmUgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCi0KLSNpbmNsdWRlICJDcmVkZW50
aWFsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2U7Ci0KLWNsYXNzIENyZWRlbnRpYWxCYWNraW5nU3RvcmUgewotV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSk7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIENyZWRl
bnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsKLSAgICB2aXJ0dWFs
IH5DcmVkZW50aWFsQmFja2luZ1N0b3JlKCkgeyB9Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpDcmVk
ZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2spKGNvbnN0IENyZWRlbnRpYWwmLCB2b2lkKiBkYXRh
KTsKLQotICAgIHZvaWQgY3JlZGVudGlhbEZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjaywgdm9pZCogZGF0YSk7
Ci0gICAgdm9pZCBzdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwotcHJpdmF0ZToKLSAgICBDcmVkZW50
aWFsQmFja2luZ1N0b3JlKCkgeyB9Ci19OwotCi1DcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVk
ZW50aWFsQmFja2luZ1N0b3JlKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVlNWEwNWZhNDkxOTVm
YjMwYmY2OWRlZDU2MmQ1NDNiOGI2MTAxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJ
Q1UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFyKiBjdXJyZW50U2VhcmNo
TG9jYWxlSUQoKQotewotICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHN5c3RlbSBsb2NhbGUuCi0g
ICAgcmV0dXJuICIiOwotfQotCi1jb25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQo
KQotewotICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHN5c3RlbSBsb2NhbGUuCi0gICAgcmV0dXJu
ICJlbl91cyI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggMjJkM2M4N2Nj
OGVlYWRmNmZmMDJkMzg5NzZkY2EyMzVhYjlmM2JlZS4uM2YxNjNkY2VkYzk0ZjQ5ZTQ0OTYxZmNm
NTM3ODEzNTQxODYxZjQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTQ4LDcgKzQ4
LDcgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRH
VEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUEYKIAktSVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dCBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKLQkkKHdl
YmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtX2NwcGZsYWdzKSBcCiAJJChqYXZhc2Ny
aXB0Y29yZV9jcHBmbGFncykgXAogCSQod2Via2l0Z3RrX2NwcGZsYWdzKSBcCiAJLWZuby1zdHJp
Y3QtYWxpYXNpbmcgXApAQCAtNzksMTEgKzc5LDEwIEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RL
X0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MREZM
CiAKIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBREQgOj0gXAogCS1scHRocmVhZCBcCisJbGliUGxh
dGZvcm0ubGEgXAogCWxpYldlYkNvcmUubGEgXAotCWxpYldlYkNvcmVQbGF0Zm9ybS5sYSBcCiAJ
bGliV2ViQ29yZU1vZHVsZXMubGEgXAotCWxpYldlYkNvcmVET00ubGEgXAotCWxpYldlYkNvcmVH
dGsubGEKKwlsaWJXZWJDb3JlRE9NLmxhCiAKIGlmIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFCiBs
aWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElf
TUlOT1JfVkVSU0lPTkBfbGFfTElCQUREICs9IFwKQEAgLTYyMSw5ICs2MjAsOCBAQCBQcm9ncmFt
c191bml0dGVzdHNfdGVzdGtleWV2ZW50c19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCiAKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29weWFuZHBhc3RlX1NPVVJDRVMg
PSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1ZlcnNpb25pbmcuYwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfQ0ZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
IFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29weWFuZHBhc3RlX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvcG8vUE9URklMRVMu
aW4gYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCBiMTcwMDFhOGI0MWVl
ODlkZDJhYzc0NzQ3YzJiNTE0MWEzODY2NjNiLi42YjJiOGNjM2M0MmU0MmNiY2FmNWQ2NTJiNWQ3
ZDk2OWRmMDY1ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw4ICsxLDggQEAK
ICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5n
cy4KLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKLS4uLy4uL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3Bw
Ci0uLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
LS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisuLi8u
Li9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAK
Ky4uLy4uL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3Ry
aW5nc0d0ay5jcHAKIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKIFdlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA1ODI5MzgxMjIxMDQ3YzAyODIwZjAyNzFmNzM5YmI0
MmU3NGM0YjI5Li5kYWY2NTYyNDYwNDVlYTVmYTVjMDkwNzU4YjJjM2NjNjhjMTI3ODAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQpAQCAtOCw3ICs4LDcgQEAgbGliX0xUTElCUkFSSUVTICs9IFwKICMg
V2UgbmVlZCB0byBtYWtlIHN1cmUgcGx1Z2luIHByb2Nlc3MgaXMgYWx3YXlzIGJ1aWx0IHdpdGgg
Z3RrMiwgYmVjYXVzZSBwbHVnaW5zIGxpa2UgZmxhc2gKICMgc3RpbGwgdXNlIGd0azIuIFNpbmNl
IHdlYmNvcmUgd2FzIGJ1aWx0IHdpdGggZ3RrMywgd2UgbmVlZCB0byBidWlsZCB3ZWJjb3JlZ3Rr
IHNvdXJjZXMgYWdhaW4gd2l0aCBndGsyCiBub2luc3RfTFRMSUJSQVJJRVMgKz0gXAotCWxpYldl
YkNvcmVHdGsyLmxhCisJbGliUGxhdGZvcm1HdGsyLmxhCiAKIGxpYmV4ZWNfUFJPR1JBTVMgKz0g
XAogCVByb2dyYW1zL1dlYktpdFBsdWdpblByb2Nlc3MKQEAgLTEyNSw3ICsxMjUsNyBAQCBsaWJ3
ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01J
Tk9SX1ZFUlNJT05AX2xhX0NQUAogCS1EV0VCS0lUMl9DT01QSUxBVElPTiBcCiAJLURFTkFCTEVf
UExVR0lOX1BST0NFU1M9MSBcCiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBcCi0JJCh3ZWJjb3JlZ3Rr
X2NwcGZsYWdzKSBcCisJJChwbGF0Zm9ybV9jcHBmbGFncykgXAogCSQoamF2YXNjcmlwdGNvcmVf
Y3BwZmxhZ3MpIFwKIAkkKENMVVRURVJfQ0ZMQUdTKSBcCiAJJChDT1ZFUkFHRV9DRkxBR1MpIFwK
QEAgLTE2NCw3ICsxNjQsNiBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xERgogbGlid2Via2l0Mmd0
a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJT
SU9OQF9sYV9MSUJBREQgOj0gXAogCS1scHRocmVhZCBcCiAJbGliV2ViQ29yZS5sYSBcCi0JbGli
V2ViQ29yZVBsYXRmb3JtLmxhIFwKIAlsaWJXZWJDb3JlTW9kdWxlcy5sYQogCiBpZiBFTkFCTEVf
SU5ERVhFRF9EQVRBQkFTRQpAQCAtMTgwLDcgKzE3OSw3IEBAIGVuZGlmCiBsaWJ3ZWJraXQyZ3Rr
X0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJ
T05AX2xhX0xJQkFERCArPSBcCiAJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElf
TUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAogCWxpYldl
YkNvcmVET00ubGEgXAotCWxpYldlYkNvcmVHdGsubGEgXAorCWxpYlBsYXRmb3JtLmxhIFwKIAkk
KENBSVJPX0xJQlMpIFwKIAkkKENMVVRURVJfTElCUykgXAogCSQoQ09WRVJBR0VfTERGTEFHUykg
XApAQCAtNDQ3LDI3ICs0NDYsMjggQEAgUHJvZ3JhbXNfV2ViS2l0V2ViUHJvY2Vzc19MREFERCA9
IFwKIAkkKEdUS19VTklYX1BSSU5USU5HX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykKIAotbGli
V2ViQ29yZUd0azJfbGFfU09VUkNFUyA9IFwKLQkkKHdlYmNvcmVndGtfc291cmNlcykKK2xpYlBs
YXRmb3JtR3RrMl9sYV9TT1VSQ0VTID0gXAorCSQocGxhdGZvcm1fc291cmNlcykKIAotbGliV2Vi
Q29yZUd0azJfbGFfQ1hYRkxBR1MgPSBcCitsaWJQbGF0Zm9ybUd0azJfbGFfQ1hYRkxBR1MgPSBc
CiAJJChTWU1CT0xfVklTSUJJTElUWV9JTkxJTkVTKSBcCiAJJChnbG9iYWxfY3h4ZmxhZ3MpCiAK
LWxpYldlYkNvcmVHdGsyX2xhX0NGTEFHUyA9IFwKK2xpYlBsYXRmb3JtR3RrMl9sYV9DRkxBR1Mg
PSBcCiAJJChTWU1CT0xfVklTSUJJTElUWSkgXAogCSQoZ2xvYmFsX2NmbGFncykKIAotbGliV2Vi
Q29yZUd0azJfbGFfQ1BQRkxBR1MgPSBcCitsaWJQbGF0Zm9ybUd0azJfbGFfQ1BQRkxBR1MgPSBc
CiAJLURCVUlMRElOR19XRUJLSVQgXAogCS1ER1RLX0FQSV9WRVJTSU9OXzI9MSBcCiAJJChnbG9i
YWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKLQkkKHdlYmNvcmVndGtfY3Bw
ZmxhZ3MpIFwKKwkkKHBsYXRmb3JtX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBm
bGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAkkKENPVkVSQUdFX0NGTEFHUykgXAog
CSQoRU5DSEFOVF9DRkxBR1MpIFwKKwkkKEdBTUVQQURfQ0ZMQUdTKSBcCiAJJChHRU9DTFVFX0NG
TEFHUykgXAogCSQoRlJFRVRZUEVfQ0ZMQUdTKSBcCiAJJChHTElCX0NGTEFHUykgXApAQCAtNTQw
LDcgKzU0MCw3IEBAIFByb2dyYW1zX1dlYktpdFBsdWdpblByb2Nlc3NfQ1BQRkxBR1MgPSBcCiAJ
LURMSUJFWEVDRElSPVwiIiQobGliZXhlY2RpcikiXCIgXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBc
CiAJJCh3ZWJjb3JlX2NwcGZsYWdzKSBcCi0JJCh3ZWJjb3JlZ3RrX2NwcGZsYWdzKSBcCisJJChw
bGF0Zm9ybV9jcHBmbGFncykgXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKIAktZm5v
LXN0cmljdC1hbGlhc2luZyBcCiAJJChDQUlST19DRkxBR1MpIFwKQEAgLTU3OCw4ICs1NzgsNyBA
QCBQcm9ncmFtc19XZWJLaXRQbHVnaW5Qcm9jZXNzX0xEQUREICs9IFwKICNlbmRpZgogCiBQcm9n
cmFtc19XZWJLaXRQbHVnaW5Qcm9jZXNzX0xEQUREICs9IFwKLQlsaWJXZWJDb3JlUGxhdGZvcm0u
bGEgXAotCWxpYldlYkNvcmVHdGsyLmxhIFwKKwlsaWJQbGF0Zm9ybUd0azIubGEgXAogCSQoQ0FJ
Uk9fTElCUykgXAogCSQoQ09WRVJBR0VfTERGTEFHUykgXAogCSQoR0VPQ0xVRV9MSUJTKSBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVh
ZGVycy5wbCBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFk
ZXJzLnBsCmluZGV4IDcyY2Y2M2YyMGIyNWYzNWRlZjg1MmJlYmZhMGUyZDg5NTc5NDI3Y2IuLmI3
ODNhNTg4OTBiZGU0NTdiMTI3MDU3MzllNWM2NDdiOWJkM2VkNDcgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsCkBAIC0z
Niw3ICszNiw3IEBAIHVzZSBGaWxlOjpTcGVjOjpGdW5jdGlvbnM7CiBteSAkc3JjUm9vdCA9IHJl
YWxwYXRoKEZpbGU6OlNwZWMtPmNhdGZpbGUoZGlybmFtZShhYnNfcGF0aCgkMCkpLCAiLi4vLi4i
KSk7CiBteSAkaW5jRnJvbVJvb3QgPSBhYnNfcGF0aCgkQVJHVlswXSk7CiBteSBAcGxhdGZvcm1Q
cmVmaXhlcyA9ICgiYmxhY2tiZXJyeSIsICJjZiIsICJjaHJvbWl1bSIsICJjdXJsIiwgImVmbCIs
ICJndGsiLCAibWFjIiwgInF0IiwgInNvdXAiLCAidjgiLCAid2luIiwgInd4Iik7Ci1teSBAZnJh
bWV3b3JrcyA9ICggIkphdmFTY3JpcHRDb3JlIiwgIldlYkNvcmUiLCAiV2ViS2l0MiIpOworbXkg
QGZyYW1ld29ya3MgPSAoIkphdmFTY3JpcHRDb3JlIiwgIlBsYXRmb3JtIiwgIldlYkNvcmUiLCAi
V2ViS2l0MiIpOwogbXkgQHNraXBwZWRQcmVmaXhlczsKIG15IEBmcmFtZXdvcmtIZWFkZXJzOwog
bXkgJGZyYW1ld29yazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9h
ZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwCmluZGV4IDBkM2Y5ZDNlZGQx
NWRiYWIyNzI4NGJkZmZkOGQxNzZlODQyMjNlOTMuLjk2YjkxYmExMzQ2OWNiMjViOGU0MmVmNGFk
NWY2MGYwY2EzNWI0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9h
ZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcApAQCAtMjYsNyArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5o
IgogCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9F
cnJvcnNHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaAppbmRleCA5NWQ3NmFiZDA4Yjc5NjAyNTZlNmE4ZWNkY2RkNmQyZDM4NTUx
NTc3Li41NWIxYmJhNDc1MGYzODgwYmM0YTg3MTU1YTdjNjg5YzEyNmYwM2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKQEAgLTM2LDkgKzM2
LDkgQEAgT0JKQ19DTEFTUyBOU1ZpZXc7CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxR
S2V5RXZlbnQ+CiAjZWxpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8R093blB0ckd0ay5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HdGtJbnB1dE1ldGhvZEZpbHRlci5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0NvbXBvc2l0aW9u
UmVzdWx0cy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQ
bGF0Zm9ybS9HdGtJbnB1dE1ldGhvZEZpbHRlci5oPgogdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQg
R2RrRXZlbnQ7CiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVkZSA8RXZhcy5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKaW5kZXggZGRlNWIzNjJlM2Qy
NTFlZmNmNjE1NmRkODVlNGQ0MjA0OTY5OWU4ZS4uZDU4ODgyMmNiODgxNGI1MDAxYjM2M2VmNTRm
NjlhNmFlZjVmYTVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdl
Yk1vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViTW91c2VF
dmVudC5oCkBAIC0zNCw3ICszNCw3IEBAIE9CSkNfQ0xBU1MgTlNWaWV3OwogI2VsaWYgUExBVEZP
Uk0oUVQpCiAjaW5jbHVkZSA8cWV2ZW50Lmg+CiAjZWxpZiBQTEFURk9STShHVEspCi0jaW5jbHVk
ZSA8R093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KIHR5cGVk
ZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2VsaWYgUExBVEZPUk0oRUZMKQogI2luY2x1
ZGUgPEV2YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJX
aGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5o
CmluZGV4IGZhZTllOTZiZTJkNmQ2YjY0YTRhNThiY2RjMGM4Y2M2MDYxMTU1MjYuLjkxZTgwYWRi
ZDgyNWI5YTgwMTIwYzdjN2UwZTA1ZWNmMTU1NDI3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaApAQCAtMzQsNyArMzQsNyBAQCBPQkpDX0NMQVNTIE5T
VmlldzsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPHFldmVudC5oPgogI2VsaWYgUExB
VEZPUk0oR1RLKQotI2luY2x1ZGUgPEdPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9H
T3duUHRyR3RrLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKICNlbGlmIFBM
QVRGT1JNKEVGTCkKICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IDM5NjllMGM4NjVlZGUwMjJiZWE1OWEx
NmJiNjI4NmUwMWFhODQ5ZmUuLjA4N2U3OTQ4ZDc3OWVhYmRiZTNiZjc3NDQ1ZWMyZjllYmE0MTI1
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsu
Y3BwCkBAIC0yOSwxMCArMjksMTAgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZv
cm0vRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1ZlcnNpb25pbmcuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2
ZW50RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rvcnku
aAppbmRleCAwODU4MTVjNDJkNDc3YjEyZWRmOTZkMTU2ODkyNmE5ZmY4YWZlNmM3Li4xMjM0MjA4
MGQ5MjIwNDAwMzM0YzVjMjI5N2E5NGIzZDQwZDNjYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgV2Vi
RXZlbnRGYWN0b3J5X2gKIAogI2luY2x1ZGUgIldlYkV2ZW50LmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9Db21wb3NpdGlvblJlc3VsdHMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9Db21wb3NpdGlvblJl
c3VsdHMuaD4KIAogdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRl
eCBiZjYxNjI0MGEwMWZiZjM4OTgwMTcxMjc4YThiNjY3YWNjOGE2ZTgxLi4zYjEyYzM2YTA5YzY0
MDcxYzEzMmUxNGJiZWFjNGNkNzI5MDY0MmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zOCw5ICszOCw5IEBACiAj
aW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlHdGsuaCIKKyNpbmNsdWRlIDxQbGF0
Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCmluZGV4IDlmZjIx
NGU5MDI2ZmU3MjU0MWMwMzM0Y2FlYmFmOWQ5M2Y5MTkwZmUuLjg0NzQyNjgxNDNiODkwMWUwZDNm
ZDA5ZjlmNWYzNzJlZjY2NjBmN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5o
CkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eS5oIgogI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jh
c2UuaCIKKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RG93bmxvYWQuY3BwCmluZGV4IGU4YTRkYzdjNmRkMzViYjkzYWQyMWY0Njk2YjRl
N2JkNmQ3NjFhNzguLjRlMzNhMDUxMmViYWFiMTExNzc0MzA0MmFhMTM1N2YxNTgzNzQ1YmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2Fk
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9h
ZC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRNYXJzaGFsLmgiCiAjaW5j
bHVkZSAiV2ViS2l0VVJJUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRVUklSZXNw
b25zZVByaXZhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgorI2luY2x1ZGUg
PFBsYXRmb3JtL0Vycm9yc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25z
ZS5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RXJyb3IuY3BwCmluZGV4IGRjNDhiMWMwMTFhYzA3ZDNkOTEyMGZhZjJhNmFiNDk4YzJhOGEwZDAu
LjNkNGJhNjAwNTQ0MThlNzE0YzczZWFmMzAzNTMwOTJmMzEzMTQxYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKQEAgLTIyLDcgKzIy
LDcgQEAKICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgogCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3JzR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0v
RXJyb3JzR3RrLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5j
cHAKaW5kZXggMDY4YTI4Y2RkYzViMDRhMGNmMjU0ZWRhZWY4NDM5MWRkNDlmNDY2Mi4uY2FlNmJm
M2I2OGY3Y2QzZmIzNDE2MTNmYjYyZTI2YTUwZGYwZjA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcApA
QCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0
aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRl
IDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNw
cAppbmRleCAwZjA5MTc1NTRlZjdkNWJmMmMxZTgwN2JiYTMwZjYwZDU5OTZiODg2Li40MTM5ZDA5
YTNmODIyYTEwYjk3YWJiMmVhOTZlNzkwMzAxOTYzYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRp
bGl0aWVzLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcAppbmRleCAyMzIwZTFjM2MxZWJiZWYzMzgyMjhkYmJmNDYxOGJkMzM2
ZjdmYWYxLi5mN2NiMzY3NTM1NjM4OThiMjIxNDU2M2E0ZGY3YmQ1Njg5ODJkNGZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApA
QCAtNTYsOSArNTYsOSBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EcmFnSWNvbi5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvR093blB0ckd0ay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVz
Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRHJhZ0ljb24uaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9H
T3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDIzNDRmODk0
ZGYzM2UwZDM3NTRhYWYxYTk0MzYyNjQ4YTIxYzVmYmQuLjA5OTAxZjZmZjc3MDFjMWVhNzhmZDUx
MDVkMjFhYzQwMDNjNTUwZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTQxLDE4ICs0MSwxOCBAQAogI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgogI2luY2x1ZGUgIldlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0NsaXBib2FyZEd0ay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkVXRp
bGl0aWVzR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVk
ZSA8UGxhdGZvcm0vQ2xpcGJvYXJkR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRGF0YU9iamVjdEd0ay5oPgorI2lu
Y2x1ZGUgPFBsYXRmb3JtL0RyYWdJY29uLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0
ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a0NsaWNrQ291bnRlci5oPgorI2luY2x1ZGUgPFBs
YXRmb3JtL0d0a0RyYWdBbmREcm9wSGVscGVyLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRp
bGl0aWVzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVmVyc2lvbmluZy5oPgorI2luY2x1ZGUg
PFBsYXRmb3JtL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRh
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EcmFnSWNvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR093
blB0ckd0ay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrQ2xpY2tDb3VudGVyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HdGtEcmFnQW5kRHJvcEhlbHBlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Rr
VXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2Fy
ZEhlbHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlZ2lvbi5oPgogI2luY2x1ZGUgPGdkay9nZGsuaD4KQEAgLTY3LDcgKzY3LDcgQEAK
ICNlbmRpZgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBkZWZpbmVkKEdES19XSU5E
T1dJTkdfWDExKQotI2luY2x1ZGUgPFdlYkNvcmUvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oPgogI2Vu
ZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXIuY3BwCmluZGV4IDhiODdjMTUyMjAyYTYyOWVhNDdmMDFhNDJiZmRlZGI3MTQwYmU1ZGEuLjQw
YTQwOTAxMzlmNWM2ZjQxOWFkZDI5ZTBlNjhmNmY5NTYwNjU4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5w
dXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL0NvbXBvc2l0aW9u
UmVzdWx0cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDdlN2ViMDE2NzU4MjFhNWFi
MmUzZGE0MmNjMjVlNjBhZTE3MThiOWEuLmQ4MGQyNDRmM2IxMWVjYzY2NTUxNTE5OTBmNjNiOTVj
ZDRkYjQ2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJXZWJW
aWV3VGVzdC5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRy
R3RrLmg+CiAKIFdlYlZpZXdUZXN0OjpXZWJWaWV3VGVzdCgpCiAgICAgOiBtX3dlYlZpZXcoV0VC
S0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9zaW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVBy
b3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQ
cm94eUd0ay5jcHAKaW5kZXggZWQyYjRkZjhmMGRhNDU5MDg4NDM1ODM5ZGI2ZDM4Y2E5Yzk3MDAz
Zi4uNWFkZjI1OGRhOGFjNDQyMmJhNDg3Y2EwYzQ1MGIwODIyNjQ2YjU3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsu
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8
UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAppbmRleCBlYmEzY2FiNDJmZThhMTA1ZTY2
Yzk2N2VhYzhlMjRmYzUzNzVmODRiLi45ZmNiMThhMDZhOGNhNjEzMTQzNjY1ZTQ0NTY5YmQ3NGZi
YzVkYTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYklu
c3BlY3RvclByb3h5R3RrLmNwcApAQCAtMzIsOCArMzIsOCBAQAogCiAjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5j
bHVkZSA8UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNs
dWRlIDxndGsvZ3RrLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCmluZGV4IGE0MTgzOWEzZWI5NzY0ZWQ0NzM0YWYyZTk3
Njg0NzdlOTBlZjM0MjcuLjc5ZDAxOGIyMWYzMDI2OGIxOGJiZWIwYTgyNzVmNzE4YjBkZmQ4YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJv
eHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51
UHJveHlHdGsuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJOYXRpdmVXZWJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBJdGVtLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9H
dGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNs
dWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAppbmRleCA0YjMzNWJjZGU2NTQ1OTAwYjA0MjM5
NzY1YTJhYTEyMzNkZjdkYTM0Li5lMTY3NWQxZWQwN2Y4MzMzNzM3MzcxNzE0MmJlMzQ3YmUzZGNj
ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVu
dVByb3h5R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1l
bnVQcm94eUd0ay5oCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFdlYlBvcHVwTWVudVByb3h5
R3RrX2gKIAogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9HdGtQb3B1cE1lbnUuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtQb3B1cE1lbnUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAKaW5kZXggYTE4NDY4
NzhiMzEwNDYxNGI3YTI2ZmMyN2NlYWI3OWExYTRiOThlMC4uOTNkMzQ2Y2RjNDM5NWRiOWU1MTYx
YWVhZWQ5NGJhZDhjMDI0N2YwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgx
MS5jcHAKQEAgLTQxLDggKzQxLDggQEAKICNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKICNpbmNs
dWRlIDxndGsvZ3RreC5oPgogI2VuZGlmCisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVmVyc2lvbmlu
Zy5oPgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9u
aW5nLmg+CiAjZWxpZiBQTEFURk9STShFRkwpICYmIGRlZmluZWQoSEFWRV9FQ09SRV9YKQogI2lu
Y2x1ZGUgPEVjb3JlX1guaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNw
cAppbmRleCBkODA4ZWQ0NGJmYTE2OGFmNThjODE1NzUxN2RhN2I5OGQyMzAwZDI4Li42Njg4YTgw
ZjE3NmUyOWE3ZWNlMGI2MjgwNTU2NTk4NjAyYTE2NzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFn
Q2xpZW50R3RrLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZv
cm0vQ2xpcGJvYXJkR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bUNvbnRleHRDYWlyby5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKaW5k
ZXggNjdmZGMxZjQ0NGVhZDZiYThjYTc5MTg4NGZkNTgxOWY4MjRmMGM4MS4uODkyYWMxYTI3OTEw
YWM2MDU4NzllYWRkYzE4Y2E4YmI1NDExOWRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JD
bGllbnRHdGsuY3BwCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0Rh
dGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0
ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRDb2Rlcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwCmlu
ZGV4IDgzNzVkMDY3YWViMTJkODkyYWVmYTY4ZTY2ZWE2MzNjOTg4MjYzY2MuLjVkMDVhMTYwM2Rk
ZWRhZDRjZDdmMzhkOGViMmM2YmVmOTBlYmQ2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNw
cApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkVy
cm9ycy5oIgogCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0
Zm9ybS9FcnJvcnNHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXNwb25zZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKaW5kZXggOGIwZGI2ZWNjM2UzODQyMDc5ZmVkYTlhNDE5
YTcyOTRlYzkyZjJkMi4uMzY0ODdiM2Q2OWQwZTE4M2M3ZDU0MTYxZTMyYTk2YmI4M2U4YWUwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdl
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBh
Z2VHdGsuY3BwCkBAIC0zMywxMSArMzMsMTEgQEAKICNpbmNsdWRlICJXZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlIDxQbGF0Zm9ybS9QYXN0ZWJvYXJk
SGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVs
cGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
cmludE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCAwZjA3ZDc0YmNhNWE4ZDY0NGRhNjkw
NDc3MDQzMTE1MmVjYTRhZjMzLi42MWFlZTQ5MmM0OGVmN2U2MDhmODJjYjkzYmVjZTRjMzk5YWVh
MWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlByaW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3Jz
R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRXJyb3JzR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NmExYWM0M2MzNGQ0MzkzMTBmY2FjYjYy
MjhiY2EyYWExYTlhZmZkLi42OWNkZTU2MDU1Nzk5MjI0OGU4Y2E3NzNhNjc1ZThiZjIzNWYzNTlj
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzcgQEAKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWls
LmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZpYyBwbGF0Zm9ybSBmaWxlcyBm
cm9tIFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkanVzdCBwYXRocyB0byBmaWxlcyBv
ciBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3cgbG9jYXRlZCBpbiBTb3VyY2UvUGxhdGZvcm0uCisg
ICAgICAgIEFsc28gZml4IGFuIGluZGVudGF0aW9uIHByb2JsZW0uIEFsc28gbGluayBEdW1wUmVu
ZGVyVHJlZSBhZ2FpbnN0IHRoZSBsaWJQbGF0Zm9ybSBsaWJyYXJ5LgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvR05VbWFrZWZpbGUuYW06IEFkanVzdCBwYXRocyB0byBmaWxlcyB0aGF0IGFyZSBu
b3cgbG9jYXRlZCBpbiBTb3VyY2UvUGxhdGZvcm0uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9n
dGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcDogSW5jbHVkZSB0aGUgR093blB0ckd0ayBoZWFkZXIg
dGhyb3VnaCBhIGZvcndhcmRpbmcKKyAgICAgICAgaGVhZGVyIHRoYXQncyBub3cgcG9pbnRpbmcg
aW50byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR05V
bWFrZWZpbGUuYW06IFJlcGxhY2UgdGhlIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayByZWZl
cmVuY2Ugd2l0aCBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorCisyMDEzLTAyLTIyICBaYW4gRG9iZXJz
ZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIGxpYldl
YkNvcmVQbGF0Zm9ybS5sYSwgYnVpbGRpbmcgaXRzIHNvdXJjZXMgaW50byBsaWJQbGF0Zm9ybS5s
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gbGliV2ViQ29yZVBsYXRmb3JtLmxh
LiBSZXBsYWNpbmcgaXQKKyAgICAgICAgd2l0aCBsaXN0aW5nIHRoZSBsaWJQbGF0Zm9ybS5sYSBs
aWJyYXJ5IGlzIG5vdCByZXF1aXJlZC4KKworMjAxMy0wMi0yMiAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgbGliV2ViQ29yZUd0ay5s
YSBhcyBsaWJQbGF0Zm9ybS5sYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwNTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogUmVuYW1pbmcgd2ViY29yZWd0a19jcHBmbGFn
cyB0byBwbGF0Zm9ybV9jcHBmbGFncy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0dOVW1ha2Vm
aWxlLmFtOiBEaXR0by4KKwogMjAxMy0wMi0yMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIHN1cHBvcnQgdGhlIGx1Y2lkIHZlcnNpb24g
b2YgZnJlZXR5cGUgb24gcHJlY2lzZSBpbiBEUlQKZGlmZiAtLWdpdCBhL1Rvb2xzL0dOVW1ha2Vm
aWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZTY3NGFlMTcwNjlkZjViNTRjMzc5
MmMxODkwNDY5NjE4ZmMxODJiZi4uZWUzOWJjZDk0ZGYxYWM2ODM2ZTJjZTFmN2Y3NDVjYTM3MzY3
M2Y1OCAxMDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvR05VbWFr
ZWZpbGUuYW0KQEAgLTg0LDcgKzg0LDcgQEAgQlVJTFRfU09VUkNFUyArPSAkKGxpYndlYmNvcmVp
bnRlcm5hbHNfYnVpbHRfc291cmNlcykKIGxpYldlYkNvcmVJbnRlcm5hbHNfbGFfQ1BQRkxBR1Mg
PSBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKLQkkKHdl
YmNvcmVndGtfY3BwZmxhZ3MpIFwKKwkkKHBsYXRmb3JtX2NwcGZsYWdzKSBcCiAJJChqYXZhc2Ny
aXB0Y29yZV9jcHBmbGFncykgXAogCSQoQ0FJUk9fQ0ZMQUdTKSBcCiAJJChGUkVFVFlQRV9DRkxB
R1MpIFwKQEAgLTEwOSw4ICsxMDksOCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DUFBGTEFH
UyA9IFwKIAktSSQoc3JjZGlyKS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsgXAogCS1JJChzcmNk
aXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvIFwKIAktSSQoc3JjZGlyKS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9ybS9ndGsgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJLaXQvZ3RrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMg
XAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKIAktSSQodG9wX2J1aWxkZGly
KS9Tb3VyY2UvV2ViS2l0L2d0ayBcCkBAIC0xMjQsNiArMTI0LDcgQEAgUHJvZ3JhbXNfRHVtcFJl
bmRlclRyZWVfQ1BQRkxBR1MgKz0gXAogZW5kaWYKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVf
U09VUkNFUyA9IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYyBcCiAJVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZVByZWZpeC5oIFwKQEAgLTE0OCw3ICsxNDksNyBAQCBQcm9ncmFtc19EdW1wUmVu
ZGVyVHJlZV9TT1VSQ0VTID0gXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2NvbmZpZy5oIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrcy5oIFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAgXAotICAg
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3Bw
IFwKKwlUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsu
Y3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
ay5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWly
by5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2NhaXJvL1BpeGVsRHVtcFN1cHBvcnRDYWly
by5oIFwKQEAgLTE2Nyw4ICsxNjgsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VT
ID0gXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9TZWxmU2Nyb2xsaW5nV2ViS2l0V2ViVmll
dy5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5oIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5jcHAgXAotCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9Xb3JrUXVldWVJdGVtR3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYworCVRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9Xb3JrUXVldWVJdGVtR3RrLmNwcAogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DWFhG
TEFHUyA9IFwKIAkkKGdsb2JhbF9jeHhmbGFncykgXApAQCAtMTg1LDcgKzE4NSw3IEBAIFByb2dy
YW1zX0R1bXBSZW5kZXJUcmVlX0NGTEFHUyA9IFwKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0xE
QUREID0gXAogCWxpYmphdmFzY3JpcHRjb3JlZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKIAlsaWJ3ZWJraXRndGstQFdF
QktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAu
bGEgXAotCWxpYldlYkNvcmVQbGF0Zm9ybS5sYSBcCisJbGliUGxhdGZvcm0ubGEgXAogCWxpYldl
YkNvcmVNb2R1bGVzLmxhIFwKIAlsaWJXZWJDb3JlSW50ZXJuYWxzLmxhIFwKIAkkKEdMT0JBTERF
UFNfTElCUykgXApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5h
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KaW5kZXggN2Q3NjVlNDliMjk3
ZmJkYjVjNTIyMTFkMzc4Mzg0ZjNlODViZjhjMi4uMTZlOGIwNjc5YmZiODdiMzA1NzA1NmJlOTJh
OTUwNGQzYWI1NGZmNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmls
ZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2VmaWxlLmFtCkBAIC03Miw3ICs3
Miw3IEBAIG5vaW5zdF9QUk9HUkFNUyArPSBcCiBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RH
dGtfQ1BQRkxBR1MgPSBcCiAJJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfQ1BQRkxB
R1MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKLQkkKHdlYmNvcmVndGtfY3BwZmxhZ3MpIFwK
KwkkKHBsYXRmb3JtX2NwcGZsYWdzKSBcCiAJJChGUkVFVFlQRV9DRkxBR1MpIFwKIAkkKEdMSUJf
Q0ZMQUdTKSBcCiAJJChHVEtfQ0ZMQUdTKSBcCkBAIC05MiwxMCArOTIsMTAgQEAgUHJvZ3JhbXNf
VGVzdFdlYktpdEFQSV9UZXN0R3RrX0xERkxBR1MgPSBcCiAJJChQcm9ncmFtc19UZXN0V2ViS2l0
QVBJX1Rlc3RXVEZfTERGTEFHUykKIAogUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX1NP
VVJDRVMgPSBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAogCVRvb2xzL1Rlc3RX
ZWJLaXRBUEkvY29uZmlnLmggXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvZ3RrL0lucHV0
TWV0aG9kRmlsdGVyLmNwcAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9Q
bGF0Zm9ybVdlYlZpZXdHdGsuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1X
ZWJWaWV3R3RrLmNwcAppbmRleCBiYTZmYWIwNDg0MGMxMjc3YzZmYjEzMTc3ZjEyMjY2NzU2NzQ3
YzIxLi4xMzk2ZGE5ZjlhY2VlZGNmZTZhOThiMWFmNjlhZTVhZDJkMzgyZTlhIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIK
IAotI2luY2x1ZGUgPFdlYkNvcmUvR093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dP
d25QdHJHdGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2Vm
aWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQppbmRleCAxODEy
NTY5Njc2YTJjODE0ZGNmOGVjMjJlNGVkZmZlM2QwMjA5NmY0Li5mMWZiMzA4NTI4ZWZhNTZiY2U0
NTEzZGQ5OGI5OTQ2ZjdmY2ZlZjU0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUu
YW0KQEAgLTM4LDcgKzM4LDcgQEAgUHJvZ3JhbXNfV2ViS2l0VGVzdFJ1bm5lcl9TT1VSQ0VTID0g
XAogUHJvZ3JhbXNfV2ViS2l0VGVzdFJ1bm5lcl9DUFBGTEFHUyA9IFwKIAktaW5jbHVkZSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXJQcmVmaXguaCBcCiAJLUkkKHNyY2Rp
cikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrIFwKIAktSSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXAogCSQoZ2xvYmFs
X2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXApkaWZmIC0tZ2l0IGEv
Q2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDI0ZTdlOWNkNTk0NDg4MGI2Mjk3M2IzYTQyYzU2
NTlmM2RjNGFlNWUuLjFjMjExZTRmOWJiYzg2OTZjZTkxZGU4Zjg2YjVhMzkzOGIxZWVhNmEgMTAw
NjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAx
My0wMi0yMiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAg
IFtHVEtdIE1vdmUgR1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQ
bGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjb25maWd1cmUuYWM6IEFkanVzdCB0aGUgcGF0aCB0byB0aGUgVXNlckFnZW50R3RrLmguaW4g
ZmlsZSwgaXQncyBub3cgaW4gU291cmNlL1BsYXRmb3JtL2d0ay4KKworMjAxMy0wMi0yMiAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIFJlbW92
ZSBsaWJXZWJDb3JlUGxhdGZvcm0ubGEsIGJ1aWxkaW5nIGl0cyBzb3VyY2VzIGludG8gbGliUGxh
dGZvcm0ubGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDU3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06IFJlbW92ZSB0aGUgcmVkdW5kYW50IHdlYmNvcmVfcGxhdGZvcm1f
c291cmNlcyB2YXJpYWJsZS4KKworMjAxMy0wMi0yMiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2Vr
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgbGliV2ViQ29yZUd0ay5sYSBhcyBs
aWJQbGF0Zm9ybS5sYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEwNTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogRGVmaW5lIHRoZSB2YXJpYWJsZXMgdGhhdCB3aWxsIGNv
bnRhaW4gdGhlIHBsYXRmb3JtIGxpYnJhcnkKKyAgICAgICAgc291cmNlcyBhbmQgY3BwIGZsYWdz
LiBJbmNsdWRlIHRoZSBuZXcgR05VbWFrZWZpbGUuYW0gdW5kZXIgU291cmNlL1BsYXRmb3JtIHRo
YXQKKyAgICAgICAgY29udGFpbnMgdGhlIHJ1bGVzIGZvciBidWlsZGluZyB0aGUgbGliUGxhdGZv
cm0ubGEgbGlicmFyeS4KKwogMjAxMy0wMi0yMSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEF1dG9nZW5lcmF0ZSBTZXR0aW5ncyB0aGF0IGNhbGwgc2V0TmVlZHNS
ZWNhbGNTdHlsZUluQWxsRnJhbWVzIHdoZW4gc2V0CmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5h
bSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IGVjZDMwNWY2YWI0NWRmNWQ5MmE4OWVjNzQ1OTg2NDRh
ZWI5YTFlYjQuLmJiM2NlNTNiYWIzNjRkODBkMDliNDA4MzNmYjA1OGU1NDBlNDQ5OTEgMTAwNjQ0
Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC03MCw3ICs3MCw4
IEBAIGphdmFzY3JpcHRjb3JlX2J1aWx0X3NvdXJjZXMgOj0KIGphdmFzY3JpcHRjb3JlX2J1aWx0
X25vc291cmNlcyA6PQogbGxpbnRfbm9zb3VyY2VzIDo9CiBvZmZsaW5lYXNtX25vc291cmNlcyA6
PQotd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzIDo9CitwbGF0Zm9ybV9jcHBmbGFncyA6PQorcGxh
dGZvcm1fc291cmNlcyA6PQogd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgOj0KIHdlYmNvcmVfc3Zn
X2J1aWx0X3NvdXJjZXMgOj0KIHdlYmNvcmVfc3ZnX3NvdXJjZXMgOj0KQEAgLTc5LDggKzgwLDYg
QEAgd2ViY29yZV9zb3VyY2VzIDo9CiB3ZWJjb3JlX2xpYmFkZCA6PQogd2ViY29yZV9idWlsdF9z
b3VyY2VzIDo9CiB3ZWJjb3JlX2J1aWx0X25vc291cmNlcyA6PQotd2ViY29yZWd0a19zb3VyY2Vz
IDo9Ci13ZWJjb3JlZ3RrX2NwcGZsYWdzIDo9CiB3ZWJraXRndGtfYnVpbHRfaF9hcGkgOj0KIHdl
YmtpdGd0a19zdGF0aWNfaF9hcGkgOj0KIHdlYmtpdGd0a19oX2FwaSA6PQpAQCAtMTc3LDYgKzE3
Niw3IEBAIEVYVFJBX0RJU1QgKz0gXAogIyBJbmNsdWRlIG1vZHVsZSBtYWtlZmlsZXMKIGluY2x1
ZGUgU291cmNlL1dURi9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFt
CiBpbmNsdWRlIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFNvdXJjZS9X
ZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvR05VbWFrZWZpbGUuYW0KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZp
Z3VyZS5hYwppbmRleCA1ZWNmODJkY2MwZTFkODFiM2UyYmIwZGQ5MDI0MjgyNjQ2NWI0Yzc5Li5l
MmU0NTlkMDc1NWUzMjRlZjBjZjcxYzNiYzRkYTk1Njc4NTk1N2YyIDEwMDY0NAotLS0gYS9jb25m
aWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0zNyw3ICszNyw3IEBAIG00X2luY2x1ZGUo
W1NvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRvbWFrZS5tNF0pCiAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwogCiBBQ19DT05GSUdfRklMRVMoW0dOVW1ha2VmaWxlXSkKLUFDX0NPTkZJR19G
SUxFUyhbRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Vc2VyQWdlbnRHdGsuaDpTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW5dKQorQUNfQ09ORklHX0ZJTEVTKFtEZXJp
dmVkU291cmNlcy9XZWJDb3JlL1VzZXJBZ2VudEd0ay5oOlNvdXJjZS9QbGF0Zm9ybS9ndGsvVXNl
ckFnZW50R3RrLmguaW5dKQogQUNfQ09ORklHX0ZJTEVTKAogICAgIFtTb3VyY2UvSmF2YVNjcmlw
dENvcmUvamF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LnBjOlNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0ay5wYy5pbgogICAgICAgICBTb3VyY2Uv
V2ViS2l0L2d0ay9KU0NvcmUtJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcjpTb3VyY2UvV2Vi
S2l0L2d0ay9KU0NvcmUuZ2lyLmluXSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189739</attachid>
            <date>2013-02-22 03:46:10 -0800</date>
            <delta_ts>2013-02-24 10:49:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>p3</filename>
            <type>text/plain</type>
            <size>1245731</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2ZmI4ODcyLi4xYzIxMWU0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAK
IDIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAorICAg
ICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZpYyBwbGF0Zm9ybSBmaWxlcyBmcm9tIFdlYkNvcmUg
dG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogY29uZmlndXJlLmFjOiBBZGp1c3QgdGhlIHBhdGggdG8gdGhlIFVzZXJBZ2VudEd0ay5o
LmluIGZpbGUsIGl0J3Mgbm93IGluIFNvdXJjZS9QbGF0Zm9ybS9ndGsuCisKKzIwMTMtMDItMjIg
IFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKwogICAgICAgICBbR1RLXSBS
ZW1vdmUgbGliV2ViQ29yZVBsYXRmb3JtLmxhLCBidWlsZGluZyBpdHMgc291cmNlcyBpbnRvIGxp
YlBsYXRmb3JtLmxhCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTA1NzkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKaW5kZXggNjk2ZDBmNC4uOTYxZGZjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHphbmRvYmVy
c2VrQGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZpYyBwbGF0Zm9y
bSBmaWxlcyBmcm9tIFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgR1RLLXNwZWNpZmljIFdlYkNvcmUgc291cmNl
IGZpbGVzIGhlcmUsIGludG8gU291cmNlL1BsYXRmb3JtL2d0ay4gVGhlc2UgZmlsZXMKKyAgICAg
ICAgYXJlIGJ1aWx0IGludG8gdGhlIGxpYlBsYXRmb3JtIHN0YXRpYyBsaWJyYXJ5LiBOb3RlIHRo
YXQgdGhpcyBwYXRjaCBvbmx5IGJyaW5ncyB0aGUKKyAgICAgICAgR1RLLXNwZWNpZmljIGZpbGVz
IG92ZXIgZnJvbSBXZWJDb3JlIGludG8gUGxhdGZvcm0uCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbTogSW5jbHVkZSB0aGUgR05VbWFrZWZpbGUubGlzdC5hbSBmaWxlLiBBZGQgdGhlIG5ldyBz
dWJkaXJlY3RvcmllcyB0bworICAgICAgICB0aGUgcGxhdGZvcm0gbGlicmFyeSBjcHBmbGFncy4K
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZC4gTGlzdHMgYWxsIHRoZSBidWls
ZCB0YXJnZXRzIHRoYXQgYXJlIG5vdyB1bmRlciBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorICAgICAg
ICAqIGd0ay86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5
IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBndGsvYXVkaW8v
OiBOb3cgY29udGFpbnMgYWxsIHRoZSBmaWxlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1bmRlciBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsuCisgICAgICAgICogZ3RrL2dyYXBoaWNz
LzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5kZXIg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrLgorICAgICAgICAqIGd0ay9uZXR3
b3JrLzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5k
ZXIgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsuCisgICAgICAgICogZ3RrL3Rl
eHQvOiBOb3cgY29udGFpbnMgYWxsIHRoZSBmaWxlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1bmRl
ciBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay4KKwogMjAxMy0wMi0yMiAgWmFuIERv
YmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQnVpbGQgbGli
V2ViQ29yZUd0ay5sYSBhcyBsaWJQbGF0Zm9ybS5sYQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFtCmluZGV4
IGI5Y2M1NTkuLmMzYjE5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtlZmls
ZS5hbQorKysgYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUuYW0KQEAgLTEsMyArMSwxMiBA
QAoraW5jbHVkZSAkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KworcGxhdGZvcm1fY3BwZmxhZ3MgKz0gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9ybS9n
dGsgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9ybS9ndGsvYXVkaW8gXAorCS1JJChzcmNk
aXIpL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvbmV0d29yayBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ay90
ZXh0CisKIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJbGliUGxhdGZvcm0ubGEKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvUGxhdGZv
cm0vR05VbWFrZWZpbGUubGlzdC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mYmNiNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTAsMCArMSwxMDUgQEAKK3BsYXRmb3JtX3NvdXJjZXMgKz0gXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9FcnJv
cnNHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3Vh
Z2VHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFn
ZW50R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvQ2xpcGJvYXJkR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
aCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0Nv
bnRleHRNZW51R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1H
dGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVj
dEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9E
cmFnSWNvbi5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0V2
ZW50TG9vcEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtE
cmFnQW5kRHJvcEhlbHBlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERy
b3BIZWxwZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5j
cHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1V0aWxpdGllcy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9HUmVmUHRyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQ
bHVnaW5XaWRnZXQuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a1ZlcnNpb25pbmcuYyBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5n
LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
TWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJh
bWVTY3JvbGxiYXJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
UGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0
Zm9ybU1vdXNlRXZlbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Ny
ZWVuR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsu
Y3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxv
b3BHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Tb3Vu
ZEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
YXVkaW8vQXVkaW9CdXNHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0Nv
bG9yR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxp
dGllcy5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRp
ZXMuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNv
bkd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJHdGsu
Y3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
bmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCisKK2lmIFRBUkdFVF9Y
MTEKK3BsYXRmb3JtX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0
QmFja2luZ1N0b3JlWDExLmNwcAoraWYgVVNFX09QRU5HTAorcGxhdGZvcm1fc291cmNlcyArPSBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorZW5kaWYg
IyBFTkQgVVNFX09QRU5HTAorZW5kaWYgIyBFTkQgVEFSR0VUX1gxMQpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjMwZmJkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0Fz
eW5jRmlsZVN5c3RlbUd0ay5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUd0ay5oIgorCisjaW5jbHVkZSAiQXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBBc3lu
Y0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5jRmls
ZVN5c3RlbTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEFzeW5jRmlsZVN5
c3RlbUd0aygpKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW06Om9wZW5GaWxlU3lzdGVtKGNv
bnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZpZXIsIEZp
bGVTeXN0ZW1UeXBlLCBib29sLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2FsbGJhY2tzLT5kaWRG
YWlsKE5PVF9TVVBQT1JURURfRVJSKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW06OmRlbGV0
ZUZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdl
SWRlbnRpZmllciwgRmlsZVN5c3RlbVR5cGUgdHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNh
bGxiYWNrcy0+ZGlkRmFpbChOT1RfU1VQUE9SVEVEX0VSUik7Cit9CisKK0FzeW5jRmlsZVN5c3Rl
bUd0azo6QXN5bmNGaWxlU3lzdGVtR3RrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitBc3luY0ZpbGVTeXN0ZW1HdGs6On5Bc3luY0ZpbGVTeXN0ZW1HdGsoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjptb3ZlKGNvbnN0IEtV
UkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y29weShjb25zdCBLVVJMJiBzb3Vy
Y2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlbW92ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZW1vdmVSZWN1cnNp
dmVseShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
cz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNG
aWxlU3lzdGVtR3RrOjpyZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlRmlsZShjb25zdCBLVVJM
JiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFzeW5j
RmlsZVN5c3RlbUd0azo6Y3JlYXRlRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhj
bHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpm
aWxlRXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBB
c3luY0ZpbGVTeXN0ZW1HdGs6OmRpcmVjdG9yeUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZWFkRGlyZWN0b3J5
KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEFzeW5jRmls
ZVN5c3RlbUd0azo6Y3JlYXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVudCogY2xpZW50LCBj
b25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmls
ZVN5c3RlbUd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY1NzM3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRv
d0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmICBBc3luY0ZpbGVT
eXN0ZW1HdGtfaAorI2RlZmluZSAgQXN5bmNGaWxlU3lzdGVtR3RrX2gKKworI2lmIEVOQUJMRShG
SUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzOworCitjbGFzcyBBc3luY0ZpbGVTeXN0ZW1HdGsgOiBwdWJsaWMgQXN5
bmNGaWxlU3lzdGVtIHsKK3B1YmxpYzoKKyAgICBBc3luY0ZpbGVTeXN0ZW1HdGsoKTsKKyAgICB2
aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1HdGsoKTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGNv
bnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShj
b25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVSZWN1cnNpdmVseShjb25zdCBLVVJMJiBwYXRoLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBy
ZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRmlsZShjb25zdCBLVVJMJiBwYXRo
LCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wg
ZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZp
cnR1YWwgdm9pZCBmaWxlRXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGRpcmVjdG9yeUV4aXN0cyhj
b25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdy
aXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vICBBc3luY0ZpbGVTeXN0ZW1HdGtfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI2M2I2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZEd0ay5jcHAKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKKworI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJF
ZGl0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkltYWdl
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgi
CisjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIm1hcmt1cC5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gQ2xpcGJvYXJkRGF0YVR5cGUgeworICAgIENsaXBib2FyZERhdGFUeXBlVGV4dCwKKyAg
ICBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Qs
CisgICAgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZSwK
KyAgICBDbGlwYm9hcmREYXRhVHlwZVVua25vd24KK307CisKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGlj
eSwgRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBDbGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xp
Y3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0
KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSwgZnJhbWUpOworfQorCitQYXNzUmVmUHRyPENs
aXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwg
RHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIENsaXBib2Fy
ZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLCBEcmFnQW5kRHJv
cCwgZnJhbWUpOworfQorCitDbGlwYm9hcmRHdGs6OkNsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQor
ICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBhc3RlKQorICAgICwgbV9kYXRhT2JqZWN0
KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpKQorICAgICwgbV9jbGlwYm9h
cmQoY2xpcGJvYXJkKQorICAgICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKworQ2xpcGJvYXJkR3Rr
OjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgUGFzc1JlZlB0cjxE
YXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIEZy
YW1lKiBmcmFtZSkKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIGNsaXBib2FyZFR5cGUpCisgICAg
LCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkKKyAgICAsIG1fY2xpcGJvYXJkKDApCisgICAgLCBt
X2ZyYW1lKGZyYW1lKQoreworfQorCitDbGlwYm9hcmRHdGs6On5DbGlwYm9hcmRHdGsoKQorewor
ICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAgICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0
aGlzKTsKK30KKworc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGRhdGFPYmplY3RUeXBlRnJvbUhU
TUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3VHlwZSkKK3sKKyAgICBTdHJpbmcgdHlw
ZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKKworICAgIC8vIFR3byBzcGVjaWFsIGNhc2Vz
IGZvciBJRSBjb21wYXRpYmlsaXR5CisgICAgaWYgKHR5cGUgPT0gIlRleHQiIHx8IHR5cGUgPT0g
InRleHQiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0OworICAgIGlmICh0
eXBlID09ICJVUkwiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7CisKKyAg
ICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFueSB0cmFpbGluZyBjaGFyc2V0IC0gSlMg
c3RyaW5ncyBhcmUKKyAgICAvLyBVbmljb2RlLCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJz
ZXQgaXNzdWUuCisgICAgaWYgKHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0
aCgidGV4dC9wbGFpbjsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dDsK
KyAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRt
bDsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTWFya3VwOworICAgIGlmICh0
eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlzdCIgfHwgdHlwZS5zdGFydHNX
aXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVV
UklMaXN0OworCisgICAgLy8gTm90IGEga25vd24gdHlwZSwgc28ganVzdCBkZWZhdWx0IHRvIHVz
aW5nIHRoZSB0ZXh0IHBvcnRpb24uCisgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVW5rbm93
bjsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGVT
dHJpbmcpCit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVG
cm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CisgICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZVVSTDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclVSSUxpc3QoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cDoKKyAgICAgICAgbV9kYXRh
T2JqZWN0LT5jbGVhck1hcmt1cCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2Fy
ZERhdGFUeXBlVGV4dDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclRleHQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgorICAgICAgICBtX2Rh
dGFPYmplY3QtPmNsZWFySW1hZ2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZVVua25vd246CisgICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKG1fY2xpcGJvYXJkKTsKK30KKworCit2b2lkIENsaXBib2FyZEd0azo6Y2xlYXJBbGxE
YXRhKCkKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFdlIGRvIG5vdCBjbGVhciBmaWxlbmFtZXMuIEFjY29yZGluZyB0
byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QKKyAgICAvLyBkb2VzIG5vdCBhZmZl
Y3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJhZywgc28gdGhlIHR5
cGVzCisgICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBzdGlsbCBub3QgYmUgZW1wdHkgYWZ0
ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQgCisgICAgLy8gc3RpbGwgY29udGFpbiB0
aGUgIkZpbGVzIiBzdHJpbmcgaWYgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcp
LiIKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7CisKKyAgICBp
ZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJv
YXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworfQorCitT
dHJpbmcgQ2xpcGJvYXJkR3RrOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykgY29u
c3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9i
amVjdCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKG1fY2xpcGJvYXJkKQor
ICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRD
bGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CisKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0
eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Cisg
ICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0KQorICAgICAgICByZXR1cm4g
bV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7CisgICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5
cGVVUkwpCisgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVybCgpOworICAgIGlmICh0eXBl
ID09IENsaXBib2FyZERhdGFUeXBlTWFya3VwKQorICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0
LT5tYXJrdXAoKTsKKyAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpCisgICAg
ICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRleHQoKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdy
aXRhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENs
aXBib2FyZFR5cGUodHlwZVN0cmluZyk7CisgICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5
cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKKyAgICAgICAgbV9k
YXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXApIHsKKyAgICAgICAg
bV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0YSk7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpIHsKKyAgICAgICAg
bV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEpOworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlw
Ym9hcmRHdGs6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
UmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKKyAgICAgICAg
cmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAg
ICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xp
cGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworCisgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0
eXBlczsKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKKyAgICAgICAgdHlwZXMu
YWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHR5cGVzLmFkZCgiVGV4dCIpOworICAgICAgICB0
eXBlcy5hZGQoInRleHQiKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJr
dXAoKSkKKyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKKworICAgIGlmIChtX2RhdGFP
YmplY3QtPmhhc1VSSUxpc3QoKSkgeworICAgICAgICB0eXBlcy5hZGQoInRleHQvdXJpLWxpc3Qi
KTsKKyAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhT2Jq
ZWN0LT5oYXNGaWxlbmFtZXMoKSkKKyAgICAgICAgdHlwZXMuYWRkKCJGaWxlcyIpOworCisgICAg
cmV0dXJuIHR5cGVzOworfQorCitQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRHdGs6OmZp
bGVzKCkgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCisg
ICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQp
CisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdl
dENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKKworICAgIFJlZlB0cjxGaWxlTGlzdD4g
ZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGZpbGVMaXN0LT5hcHBl
bmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lc1tpXSwgRmlsZTo6QWxsQ29udGVudFR5cGVzKSk7Cisg
ICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OnNl
dERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikK
K3sKKyAgICBzZXREcmFnSW1hZ2UoaW1hZ2UsIDAsIGxvY2F0aW9uKTsKK30KKwordm9pZCBDbGlw
Ym9hcmRHdGs6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSogZWxlbWVudCwgY29uc3QgSW50UG9p
bnQmIGxvY2F0aW9uKQoreworICAgIHNldERyYWdJbWFnZSgwLCBlbGVtZW50LCBsb2NhdGlvbik7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdl
LCBOb2RlKiBlbGVtZW50LCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCit7CisgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZEltYWdlV3JpdGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJk
V3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAg
ICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBtX2RyYWdJbWFnZSA9IGlt
YWdlOworICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAgICAgbV9kcmFnSW1hZ2UtPmFkZENsaWVu
dCh0aGlzKTsKKworICAgIG1fZHJhZ0xvYyA9IGxvY2F0aW9uOworICAgIG1fZHJhZ0ltYWdlRWxl
bWVudCA9IGVsZW1lbnQ7Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRHdGs6OmNyZWF0ZURy
YWdJbWFnZShJbnRQb2ludCYgbG9jYXRpb24pIGNvbnN0Cit7CisgICAgbG9jYXRpb24gPSBtX2Ry
YWdMb2M7CisKKyAgICBpZiAobV9kcmFnSW1hZ2UpCisgICAgICAgIHJldHVybiBjcmVhdGVEcmFn
SW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdlKCkpOworICAgIGlmIChtX2RyYWdJbWFn
ZUVsZW1lbnQgJiYgbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWUtPm5vZGVJbWFnZSht
X2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOworCisgICAgcmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBo
YXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBkcmFnIGltYWdlLCB1c2UgdGhlIGRl
ZmF1bHQgaWNvbi4KK30KKworc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIC8vIEF0dGVtcHQgdG8gcHVsbCBDYWNoZWRJbWFnZSBmcm9t
IGVsZW1lbnQKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJJbWFnZSogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKKyAgICBpZiAoaW1hZ2UtPmNh
Y2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCisg
ICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKworICAgIHJldHVybiAwOworfQor
Cit2b2lkIENsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqIGZyYW1l
KQoreworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOworICAgIG1fZGF0YU9i
amVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVz
b2x2ZUFsbFVSTHMpKTsKKworICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGdldENhY2hlZEltYWdl
KGVsZW1lbnQpOworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc0xvYWRlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGlt
YWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5nZXRHZGtQaXhidWYo
KSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YU9iamVj
dC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OndyaXRl
VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqKQoreworICAg
IG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOworICAgIGlmIChtX2NsaXBib2FyZCkK
KyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3Rr
Ojp3cml0ZVJhbmdlKFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVChy
YW5nZSk7CisKKyAgICBtX2RhdGFPYmplY3QtPnNldFRleHQoZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3RlZFRleHQoKSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHJh
bmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJM
cykpOworCisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJv
YXJkKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCkKK3sKKyAgICBtX2RhdGFPYmplY3QtPnNldFRleHQodGV4dCk7CisKKyAgICBpZiAo
bV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworfQorCitib29s
IENsaXBib2FyZEd0azo6aGFzRGF0YSgpCit7CisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAg
ICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9h
cmRDb250ZW50cyhtX2NsaXBib2FyZCk7CisKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5oYXNU
ZXh0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKQorICAgICAgICB8fCBtX2RhdGFPYmpl
Y3QtPmhhc1VSSUxpc3QoKSB8fCBtX2RhdGFPYmplY3QtPmhhc0ltYWdlKCk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmVlOWQ2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBi
b2FyZEd0ay5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2xpcGJv
YXJkR3RrX2gKKyNkZWZpbmUgQ2xpcGJvYXJkR3RrX2gKKworI2luY2x1ZGUgIkNhY2hlZEltYWdl
Q2xpZW50LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0
ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQ2FjaGVkSW1hZ2U7CisgICAg
Y2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGFzdGVib2FyZEhlbHBlcjsKKworICAgIC8vIFN0YXRl
IGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkv
cGFzdGUKKyAgICAvLyBDcmVhdGVkIGZyb20gdGhlIEV2ZW50SGFuZGxlckd0ayB0byBiZSB1c2Vk
IGJ5IHRoZSBkb20KKyAgICBjbGFzcyBDbGlwYm9hcmRHdGsgOiBwdWJsaWMgQ2xpcGJvYXJkLCBw
dWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZEd0az4g
Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEd0a0NsaXBib2FyZCogY2xpcGJv
YXJkLCBGcmFtZSogZnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2xpcGJvYXJkR3RrKHBvbGljeSwgY2xpcGJvYXJkLCBmcmFtZSkpOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBjcmVhdGUoQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2Jq
ZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRHdGsocG9saWN5LCBk
YXRhT2JqZWN0LCBjbGlwYm9hcmRUeXBlLCBmcmFtZSkpOworICAgICAgICB9CisgICAgICAgIHZp
cnR1YWwgfkNsaXBib2FyZEd0aygpOworCisgICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0
cmluZyYpOworICAgICAgICB2b2lkIGNsZWFyQWxsRGF0YSgpOworICAgICAgICBTdHJpbmcgZ2V0
RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+
IGZpbGVzKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2Uq
LCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9k
ZSosIGNvbnN0IEludFBvaW50Jik7CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZElt
YWdlKiwgTm9kZSosIGNvbnN0IEludFBvaW50Jik7CisKKyAgICAgICAgdmlydHVhbCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0
ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUGxhaW5U
ZXh0KGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CisK
KyAgICAgICAgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0KCkgeyByZXR1cm4g
bV9kYXRhT2JqZWN0OyB9CisgICAgICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKCkgeyByZXR1
cm4gbV9jbGlwYm9hcmQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENsaXBib2FyZEd0ayhD
bGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEd0a0NsaXBib2FyZCosIEZyYW1lKik7CisgICAgICAgIENs
aXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0
az4sIENsaXBib2FyZFR5cGUsIEZyYW1lKik7CisKKyAgICAgICAgUmVmUHRyPERhdGFPYmplY3RH
dGs+IG1fZGF0YU9iamVjdDsKKyAgICAgICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZDsKKyAg
ICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWZjMGU3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGll
c0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dka0RyYWdBY3Rpb24gZHJhZ09wZXJh
dGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbiBjb3JlQWN0aW9uKQoreworICAgIEdk
a0RyYWdBY3Rpb24gZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7Cisg
ICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAgIHJldHVybiBn
ZGtBY3Rpb247CisKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAg
ICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NP
UFkgfCBnZGtBY3Rpb24pOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUp
CisgICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJ
T05fTU9WRSB8IGdka0FjdGlvbik7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9u
TGluaykKKyAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RL
X0FDVElPTl9MSU5LIHwgZ2RrQWN0aW9uKTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVy
YXRpb25Qcml2YXRlKQorICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0
aW9uPihHREtfQUNUSU9OX1BSSVZBVEUgfCBnZGtBY3Rpb24pOworCisgICAgcmV0dXJuIGdka0Fj
dGlvbjsKK30KKworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0
aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBE
cmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAg
ICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09w
ZXJhdGlvbk1vdmUpCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7CisgICAgaWYgKGNv
cmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05f
TElOSzsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQorICAgICAg
ICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtE
cmFnQWN0aW9uPigwKTsKK30KKworRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3Bl
cmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQoreworICAgIC8vIFdlIGhhdmUgbm8gZ29v
ZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisgICAgLy8gdG8g
dXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJlIG9uLgorICAgIGlmIChnZGtBY3Rp
b24gJiBHREtfQUNUSU9OX0NPUFkgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9NT1ZFCisgICAg
ICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSyAmJiBnZGtBY3Rpb24gJiBHREtfQUNU
SU9OX1BSSVZBVEUpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7CisKKyAgICB1
bnNpZ25lZCBpbnQgYWN0aW9uID0gRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgaWYgKGdka0FjdGlv
biAmIEdES19BQ1RJT05fQ09QWSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Db3B5
OworICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01PVkUpCisgICAgICAgIGFjdGlvbiB8
PSBEcmFnT3BlcmF0aW9uTW92ZTsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5L
KQorICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkxpbms7CisgICAgaWYgKGdka0FjdGlv
biAmIEdES19BQ1RJT05fUFJJVkFURSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Q
cml2YXRlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihhY3Rpb24pOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGll
c0d0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmY2MzQ2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAor
I2RlZmluZSBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAorCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMu
aCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2RrRHJh
Z0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsKK0dk
a0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0
aW9uKTsKK0RyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFn
QWN0aW9uKTsKKworfQorCisjZW5kaWYgLy8gQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmM0NWYyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGlvblJlc3Vs
dHNfaAorI2RlZmluZSBDb21wb3NpdGlvblJlc3VsdHNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENvbXBvc2l0aW9u
UmVzdWx0cyB7CisgICAgQ29tcG9zaXRpb25SZXN1bHRzKCkKKyAgICAgICAgOiBhc3NvY2lhdGVk
V2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAg
Q29tcG9zaXRpb25SZXN1bHRzKFN0cmluZyBzaW1wbGVTdHJpbmcpCisgICAgICAgIDogc2ltcGxl
U3RyaW5nKHNpbXBsZVN0cmluZykKKyAgICAgICAgLCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21w
b3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgZW51bSBSZXN1bHRzSW5k
aWNhdG9yIHsgV2lsbFNlbmRDb21wb3NpdGlvblJlc3VsdHNTb29uIH07CisgICAgQ29tcG9zaXRp
b25SZXN1bHRzKFJlc3VsdHNJbmRpY2F0b3IpCisgICAgICAgIDogYXNzb2NpYXRlZFdpdGhQZW5k
aW5nQ29tcG9zaXRpb25VcGRhdGUodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjb21w
b3NpdGlvblVwZGF0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc29jaWF0ZWRX
aXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOworICAgIH0KKworICAgIC8vIFNvbWUgc2ltcGxl
IGlucHV0IG1ldGhvZHMgcmV0dXJuIGEgc3RyaW5nIGZvciBhbGwga2V5Ym9hcmQgZXZlbnRzLiBU
aGlzCisgICAgLy8gdmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0aGUga2V5Y29kZS4KKyAgICBTdHJpbmcgc2ltcGxlU3RyaW5nOworCisgICAg
Ym9vbCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKK307CisKK30KKwor
I2VuZGlmIC8vIENvbXBvc2l0aW9uUmVzdWx0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1l
bnVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDAyYzQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcApA
QCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRleHRNZW51OjpDb250ZXh0
TWVudSgpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVf
bmV3KCkpOworfQorCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51
RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorewor
fQorCitDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pKTsKK30KKwordm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250
ZXh0TWVudUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7
CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChpdGVt
LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAgIEFTU0VSVChwbGF0Zm9ybUl0ZW0p
OworCisgICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBs
YXRmb3JtSXRlbS5nZXQoKSkpCisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgpKTsKKworICAgIGd0a19tZW51X3NoZWxs
X2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBwbGF0Zm9ybUl0
ZW0uZ2V0KCkpOworICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybUl0ZW0uZ2V0KCkpOworfQor
Cit2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURl
c2NyaXB0aW9uIG1lbnUpCit7CisgICAgQVNTRVJUKG1lbnUpOworICAgIGlmIChtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPT0gbWVudSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikpOworCisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsK
K30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisK
K1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpCit7CisgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBt
X3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gMDsKKwor
ICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKwordW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1D
b3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7CisKKyAg
ICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtf
Q09OVEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpKTsKKyAgICByZXR1cm4gZ19saXN0X2xl
bmd0aChjaGlsZHJlbi5nZXQoKSk7Cit9CisKK1ZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IGNvbnRl
eHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQorewor
ICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJdGVtVmVjdG9yOworCisgICAgR093blB0
cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5F
UihtZW51KSkpOworICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdl
dCgpKTsKKyAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNvdW50KTsKKwor
ICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfbGlz
dF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8
R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3
aWRnZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1lbnVJdGVtVmVjdG9yLmFw
cGVuZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOworICAgIH0KKworICAgIHJldHVybiBtZW51SXRl
bVZlY3RvcjsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKK3sKKyAgICBHdGtN
ZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEd0a1dpZGdldCog
cGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51SXRlbXNbaV0ucmVsZWFzZVBsYXRmb3Jt
RGVzY3JpcHRpb24oKSk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9T
SEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRm
b3JtSXRlbSk7CisgICAgfQorICAgIHJldHVybiBtZW51OworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVJdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVt
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzBiNWJlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3Bw
CkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCisgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKKworI2luY2x1ZGUgIkNv
bnRleHRNZW51SXRlbS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04gIndlYmtpdC1jb250ZXh0LW1lbnUiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrSURGcm9t
Q29udGV4dE1lbnVBY3Rpb24oY29uc3QgQ29udGV4dE1lbnVBY3Rpb24mIGFjdGlvbikKK3sKKyAg
ICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtU
b0NsaXBib2FyZDoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJv
YXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJk
OgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19DT1BZOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRv
dzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgorICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19PUEVOOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9E
aXNrOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19TQVZFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
R29CYWNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9S
V0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfU1RPUDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q3V0OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NVVDsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1Bhc3RlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1BBU1RFOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0RFTEVU
RTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19TRUxFQ1RfQUxMOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxp
bmdHdWVzczoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19OTzsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
T0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKKyAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19NSVNTSU5HX0lNQUdFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNo
SW5TcG90bGlnaHQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRklORDsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19GSU5E
OworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVBERlpvb21JbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX0lOOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09N
X09VVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9TaXplOgorICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX1pPT01fRklUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBh
Z2U6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19C
QUNLOworICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgorICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX1NQRUxMX0NIRUNLOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTaG93Rm9udHM6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZP
TlQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOgorICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6CisgICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5k
ZXJsaW5lOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVSTElORTsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VM
RUNUX0NPTE9SOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9s
czoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAgICAgICAvLyBO
byBpY29uIGZvciB0aGlzLgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZV
TExTQ1JFRU47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitz
dGF0aWMgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1E
ZXNjcmlwdGlvbihDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFj
dGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQpCit7
CisgICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKKyAgICAgICAgcmV0dXJuIEdUS19NRU5V
X0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOworCisgICAgR093blB0cjxjaGFy
PiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigiY29udGV4dC1tZW51LWFjdGlvbi0lZCIsIGFj
dGlvbikpOworICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBwbGF0Zm9ybUFjdGlvbjsKKworICAgIGlm
ICh0eXBlID09IENoZWNrYWJsZUFjdGlvblR5cGUpIHsKKyAgICAgICAgcGxhdGZvcm1BY3Rpb24g
PSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5n
ZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFj
dGlvbihhY3Rpb24pKSkpOworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdU
S19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9uLmdldCgpKSwgY2hlY2tlZCk7CisgICAgfSBl
bHNlCisgICAgICAgIHBsYXRmb3JtQWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KGFj
dGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2NrSURGcm9tQ29u
dGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpOworICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShw
bGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5hYmxlZCk7CisKKyAgICBHdGtNZW51SXRlbSogaXRlbSA9
IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKHBsYXRmb3JtQWN0aW9u
LmdldCgpKSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoaXRlbSksIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7CisKKyAgICByZXR1
cm4gaXRlbTsKK30KKworLy8gRXh0cmFjdCB0aGUgQWN0aW9uVHlwZSBmcm9tIHRoZSBtZW51IGl0
ZW0KK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNj
cmlwdGlvbiBpdGVtKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKGl0ZW0pCit7CisgICAg
Ly8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJlbHMgaW4gY29udGV4dCBtZW51IGl0ZW1zLgorICAgIEd0
a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKCFhY3Rpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghZ3RrX2FjdGlvbl9nZXRfYWNjZWxfcGF0aChhY3Rpb24pKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIGNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hp
bGQoR1RLX0JJTihpdGVtKSk7CisgICAgaWYgKEdUS19JU19BQ0NFTF9MQUJFTChjaGlsZCkpCisg
ICAgICAgIGd0a19hY2NlbF9sYWJlbF9zZXRfYWNjZWxfY2xvc3VyZShHVEtfQUNDRUxfTEFCRUwo
Y2hpbGQpLCAwKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4
dE1lbnUqIHN1Yk1lbnUpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVf
SVRFTShndGtfbWVudV9pdGVtX25ldygpKTsKKyAgICBpZiAoc3ViTWVudSkKKyAgICAgICAgc2V0
U3ViTWVudShzdWJNZW51KTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0o
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQoreworICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbih0eXBlLCBhY3Rp
b24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7CisgICAgaWYgKHN1Yk1lbnUpCisgICAgICAgIHNldFN1
Yk1lbnUoc3ViTWVudSk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENv
bnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tlZCkKK3sKKyAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24odHlwZSwg
YWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6
Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQsIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+
JiBzdWJNZW51SXRlbXMpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxh
dGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKFN1Ym1lbnVUeXBlLCBhY3Rpb24sIHRpdGxlLCBlbmFi
bGVkLCBjaGVja2VkKTsKKyAgICBzZXRTdWJNZW51KHN1Yk1lbnVJdGVtcyk7Cit9CisKK0NvbnRl
eHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCit7Cit9CisKK1BsYXRmb3JtTWVudUl0ZW1E
ZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkK
K3sKKyAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gcGxhdGZvcm1EZXNjcmlwdGlvbiA9
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSAwOwor
ICAgIHJldHVybiBwbGF0Zm9ybURlc2NyaXB0aW9uOworfQorCitDb250ZXh0TWVudUl0ZW1UeXBl
IENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKEdUS19JU19TRVBBUkFU
T1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBTZXBh
cmF0b3JUeXBlOworICAgIGlmIChHVEtfSVNfQ0hFQ0tfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbikpCisgICAgICAgIHJldHVybiBDaGVja2FibGVBY3Rpb25UeXBlOworICAgIGlmIChn
dGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAg
IHJldHVybiBTdWJtZW51VHlwZTsKKyAgICByZXR1cm4gQWN0aW9uVHlwZTsKK30KKwordm9pZCBD
b250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlKQoreworICAg
IGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlv
biA9IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOworfQorCitD
b250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPihHUE9JTlRFUl9UT19JTlQoZ19v
YmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT04pKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRBY3Rp
b24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
LCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Cit9CisKK1N0cmluZyBDb250ZXh0TWVudUl0ZW06
OnRpdGxlKCkgY29uc3QKK3sKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwor
ICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZyb21VVEY4KGd0a19hY3Rpb25fZ2V0X2xhYmVs
KGFjdGlvbikpIDogU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUaXRs
ZShjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0
aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRfbGFiZWwoYWN0
aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
Q29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAoreworICAgIEd0a1dpZGdl
dCogc3ViTWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUobV9wbGF0Zm9ybURlc2NyaXB0
aW9uKTsKKyAgICByZXR1cm4gc3ViTWVudSA/IEdUS19NRU5VKHN1Yk1lbnUpIDogMDsKK30KKwor
dm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCit7Cisg
ICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24sIEdUS19X
SURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSkpOworfQorCit2b2lkIENv
bnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVu
dUl0ZW1zKQoreworICAgIENvbnRleHRNZW51IG1lbnUocGxhdGZvcm1NZW51RGVzY3JpcHRpb24o
c3ViTWVudUl0ZW1zKSk7CisgICAgc2V0U3ViTWVudSgmbWVudSk7Cit9CisKK3ZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2spCit7CisgICAgR3RrQWN0aW9u
KiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dHTEVf
QUNUSU9OKGFjdGlvbikpCisgICAgICAgIGd0a190b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RL
X1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwgc2hvdWxkQ2hlY2spOworfQorCitib29sIENvbnRleHRN
ZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0Cit7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtB
Y3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikp
CisgICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVf
QUNUSU9OKGFjdGlvbikpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb250ZXh0TWVu
dUl0ZW06OmVuYWJsZWQoKSBjb25zdAoreworICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0
aW9uKCk7CisgICAgcmV0dXJuIGFjdGlvbiA/IGd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rp
b24pIDogZmFsc2U7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wg
c2hvdWxkRW5hYmxlKQoreworICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Cisg
ICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbiwg
c2hvdWxkRW5hYmxlKTsKK30KKworR3RrQWN0aW9uKiBDb250ZXh0TWVudUl0ZW06Omd0a0FjdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rp
b24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI5MDVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCkBAIC0wLDAgKzEsMjA5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0
d290b2FzdHMuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBJZ2FsaWEgUy5MLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ3Vyc29yR3RrLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRy
PEdka0N1cnNvcj4gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yVHlwZSBjdXJzb3JUeXBl
KQoreworICAgIEN1c3RvbUN1cnNvciBjdXJzb3IgPSBDdXN0b21DdXJzb3JzW2N1cnNvclR5cGVd
OworICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zy
b21fbmFtZShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBjdXJzb3IubmFtZSkpOworICAgIGlm
IChjKQorICAgICAgICByZXR1cm4gYzsKKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNv
dXJjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNvbnN0
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGN1cnNvci5iaXRzKSwgQ0FJUk9fRk9STUFUX0ExLCAzMiwg
MzIsIDQpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtYXNrID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oY3Vyc29yLm1hc2tfYml0cyksIENBSVJPX0ZPUk1BVF9BMSwgMzIsIDMyLCA0KSk7CisgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BMSwgMzIsIDMyKSk7CisgICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIGNh
aXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc291cmNlLmdldCgpLCAwLCAwKTsKKyAg
ICBjYWlyb19tYXNrX3N1cmZhY2UoY3IuZ2V0KCksIG1hc2suZ2V0KCksIDAsIDApOworCisgICAg
R1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9t
X3N1cmZhY2Uoc3VyZmFjZS5nZXQoKSwgMCwgMCwgMzIsIDMyKSk7CisgICAgcmV0dXJuIGFkb3B0
R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgp
LCBwaXhidWYuZ2V0KCksIGN1cnNvci5ob3RfeCwgY3Vyc29yLmhvdF95KSk7Cit9CisKK3N0YXRp
YyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlQ3VzdG9tQ3Vyc29yKEltYWdlKiBpbWFnZSwgY29u
c3QgSW50UG9pbnQmIGhvdFNwb3QpCit7CisgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9
IGRldGVybWluZUhvdFNwb3QoaW1hZ2UsIGhvdFNwb3QpOworICAgIEdSZWZQdHI8R2RrUGl4YnVm
PiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKKyAgICByZXR1cm4g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZh
dWx0KCksIHBpeGJ1Zi5nZXQoKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNw
b3QueSgpKSk7Cit9CisKK3ZvaWQgQ3Vyc29yOjplbnN1cmVQbGF0Zm9ybUN1cnNvcigpIGNvbnN0
Cit7CisgICAgaWYgKG1fcGxhdGZvcm1DdXJzb3IgfHwgbV90eXBlID09IEN1cnNvcjo6UG9pbnRl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEN1
cnNvcjo6UG9pbnRlcjoKKyAgICAgICAgLy8gQSBudWxsIEdka0N1cnNvciBpcyB0aGUgZGVmYXVs
dCBjdXJzb3IgZm9yIHRoZSB3aW5kb3cuCisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSAwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q3Jvc3M6CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0NST1NTKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19IQU5EMikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1hURVJNKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ3Vyc29yOjpXYWl0OgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdk
a19jdXJzb3JfbmV3KEdES19XQVRDSCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNv
cjo6SGVscDoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29y
X25ldyhHREtfUVVFU1RJT05fQVJST1cpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJz
b3I6Ok1vdmU6CisgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5pbmc6CisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0ZMRVVSKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpFYXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29y
OjpFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ldyhHREtfUklHSFRfU0lERSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1
cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoUGFubmluZzoKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1NJ
REUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFJlc2l6ZToK
KyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1JJR0hUX0NPUk5FUikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UmVzaXplOgorICAgIGNh
c2UgQ3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfTEVGVF9DT1JORVIpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpT
b3V0aFBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXcoR0RLX0JPVFRPTV9TSURFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vy
c29yOjpTb3V0aEVhc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6
CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RL
X0JPVFRPTV9SSUdIVF9DT1JORVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6
OlNvdXRoV2VzdFJlc2l6ZToKKyAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UGFubmluZzoKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9U
VE9NX0xFRlRfQ09STkVSKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpXZXN0
UmVzaXplOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3Jf
bmV3KEdES19MRUZUX1NJREUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoU291dGhSZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2Rr
X2N1cnNvcl9uZXcoR0RLX1RPUF9URUUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJz
b3I6OkVhc3RXZXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpXZXN0UGFubmluZzoKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9T
SURFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RTb3V0aFdl
c3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0la
SU5HKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6Cisg
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NC
X0hfRE9VQkxFX0FSUk9XKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpSb3dS
ZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9u
ZXcoR0RLX1NCX1ZfRE9VQkxFX0FSUk9XKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vy
c29yOjpWZXJ0aWNhbFRleHQ6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1l
ZEN1cnNvcihDdXN0b21DdXJzb3JWZXJ0aWNhbFRleHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEN1cnNvcjo6Q2VsbDoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihn
ZGtfY3Vyc29yX25ldyhHREtfUExVUykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNv
cjo6Q29udGV4dE1lbnU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1
cnNvcihDdXN0b21DdXJzb3JDb250ZXh0TWVudSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q3Vyc29yOjpBbGlhczoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vy
c29yKEN1c3RvbUN1cnNvckFsaWFzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6
OlByb2dyZXNzOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3Io
Q3VzdG9tQ3Vyc29yUHJvZ3Jlc3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6
Tm9Ecm9wOgorICAgIGNhc2UgQ3Vyc29yOjpOb3RBbGxvd2VkOgorICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yTm9Ecm9wKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkNvcHk6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JDb3B5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVO
YW1lZEN1cnNvcihDdXN0b21DdXJzb3JOb25lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
dXJzb3I6Olpvb21JbjoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vy
c29yKEN1c3RvbUN1cnNvclpvb21Jbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29y
Ojpab29tT3V0OgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3Io
Q3VzdG9tQ3Vyc29yWm9vbU91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpH
cmFiOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9t
Q3Vyc29yR3JhYik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpHcmFiYmluZzoK
KyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNv
ckdyYWJiaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkN1c3RvbToKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZUN1c3RvbUN1cnNvcihtX2ltYWdlLmdldCgp
LCBtX2hvdFNwb3QpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0N1cnNvcjo6Q3Vyc29y
KGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQorICAgICwg
bV9pbWFnZShvdGhlci5tX2ltYWdlKQorICAgICwgbV9ob3RTcG90KG90aGVyLm1faG90U3BvdCkK
KyAgICAsIG1fcGxhdGZvcm1DdXJzb3Iob3RoZXIubV9wbGF0Zm9ybUN1cnNvcikKK3sKK30KKwor
Q3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1f
dHlwZSA9IG90aGVyLm1fdHlwZTsKKyAgICBtX2ltYWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICBt
X2hvdFNwb3QgPSBvdGhlci5tX2hvdFNwb3Q7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVy
Lm1fcGxhdGZvcm1DdXJzb3I7CisgICAgcmV0dXJuICp0aGlzOworfQorCitDdXJzb3I6On5DdXJz
b3IoKQoreworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0
ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41Njg5MTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9DdXJzb3JHdGsuaApAQCAtMCwwICsxLDM4MyBAQAorLyogKioqKiogQkVHSU4gTElD
RU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisg
KgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxs
YSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhl
IExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBh
bmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVy
IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBUaW0gQ29wcGVyZmllbGQuCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAx
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKiAgIFRpbSBDb3BwZXJmaWVsZCA8dGltZWNvcEBuZXR3b3JrLmVt
YWlsLm5lLmpwPgorICogICBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+
CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUg
dXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJM
R1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhl
IExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3
aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVu
ZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGlu
ZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQor
ICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4g
SWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBv
ZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiog
RU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2lmbmRlZiBDdXJzb3JHdGtfaAorI2RlZmlu
ZSBDdXJzb3JHdGtfaAorCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisKKy8qCisgVGhlc2UgY3Vyc29y
cyBhcmUgY29waWVkIGZyb20gTW96aWxsYSBjb2RlOgorICBodHRwOi8vbHhyLm1vemlsbGEub3Jn
L21vemlsbGExLjgvc291cmNlL3dpZGdldC9zcmMvZ3RrMi9uc0d0a0N1cnNvcnMuaAorKi8KKwor
LyogTU9aX0NVUlNPUl9WRVJUSUNBTF9URVhUICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh
ciBtb3pfdmVydGljYWxfdGV4dF9iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsCisgIDB4MDYs
IDB4NjAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NjAsIDB4
MDAsIDB4MDAsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIgbW96X3ZlcnRpY2FsX3RleHRfbWFza19iaXRzW10gPSB7CisgIDB4MDcsIDB4ZTAs
IDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZjAsIDB4MDAsIDB4
MDAsCisgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4
ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisgIDB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4
ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworLyogTU9a
X0NVUlNPUl9DT05URVhUX01FTlUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9t
ZW51X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwYywgMHgwMCwgMHgwMCwgMHgw
MCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHg3
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHhmZCwg
MHgwMCwgMHgwMCwKKyAgMHhmYywgMHhmZiwgMHgwMCwgMHgwMCwgMHg3YywgMHg4NCwgMHgwMCwg
MHgwMCwgMHg2YywgMHhmYywgMHgwMCwgMHgwMCwKKyAgMHhjNCwgMHg4NCwgMHgwMCwgMHgwMCwg
MHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NSwgMHgwMCwgMHgwMCwKKyAgMHg4MCwg
MHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbWVu
dV9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhm
ZiwgMHgwMSwgMHgwMCwKKyAgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmZiwgMHgw
MSwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMSwgMHgwMCwKKyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgw
MCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMSwgMHgwMCwKKyAgMHhj
MCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0NPUFkgKi8KK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHhmYywgMHgwMSwgMHgwMCwgMHgwMCwKKyAgMHhmYywgMHgwMywgMHgwMCwg
MHgwMCwgMHg3YywgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgzMCwgMHgwMCwgMHgwMCwKKyAg
MHhjNCwgMHhmYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHgz
MSwgMHgwMCwgMHgwMCwKKyAgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfY29weV9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3
ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgw
MSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgzNywgMHgw
MCwgMHgwMCwgMHhmZSwgMHg3YiwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmYywgMHgwMCwgMHgwMCwK
KyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwg
MHhmZiwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pf
Q1VSU09SX0FMSUFTICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfYWxpYXNfYml0
c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFj
LCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAweDdjLCAweDAw
LCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAw
eDAwLAorICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAweGYwLCAweDAwLCAweDAwLCAw
eDZjLCAweGUwLCAweDAwLCAweDAwLAorICAweGM0LCAweGYwLCAweDAwLCAweDAwLCAweGMwLCAw
eGIwLCAweDAwLCAweDAwLCAweDgwLCAweDE5LCAweDAwLCAweDAwLAorICAweDgwLCAweDE5LCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9hbGlhc19tYXNr
X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgw
MCwgMHgwMCwKKyAgMHhmZSwgMHhmNywgMHgwMCwgMHgwMCwgMHhmZSwgMHhmYiwgMHgwMSwgMHgw
MCwgMHhmZSwgMHhmMCwgMHgwMSwgMHgwMCwKKyAgMHhlZSwgMHhmOSwgMHgwMSwgMHgwMCwgMHhl
NCwgMHhmOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhiZiwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHgz
ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX1pPT01fSU4gKi8KK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIG1vel96b29tX2luX2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwK
KyAgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmOSwg
MHgwOSwgMHgwMCwgMHgwMCwKKyAgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwg
MHgwMCwgMHgwMCwgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwKKyAgMHgwMiwgMHgwNCwgMHgwMCwg
MHgwMCwgMHgwYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhl
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9pbl9tYXNrX2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwg
MHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwg
MHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKKyAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwg
MHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywg
MHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHhlMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBN
T1pfQ1VSU09SX1pPT01fT1VUICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9v
bV9vdXRfYml0c1tdID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAw
eDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAorICAweDAyLCAweDA0LCAweDAwLCAw
eDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAweDAwLCAweDAwLAorICAw
eGY5LCAweDA5LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAyLCAweDA0
LCAweDAwLCAweDAwLAorICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAw
LCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAweDAwLCAweDAw
LCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96
b29tX291dF9tYXNrX2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywg
MHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywg
MHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgw
MCwKKyAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhm
ZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgw
ZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgzOCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX05PVF9BTExPV0VE
ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm90X2FsbG93ZWRfYml0c1tdID0g
eworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweGUw
LCAweDdmLCAweDAwLCAweDAwLAorICAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweDM4LCAweGMw
LCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAzLCAweDAwLAorICAweGVjLCAweDAwLCAweDAz
LCAweDAwLCAweGNlLCAweDAxLCAweDA3LCAweDAwLCAweDg2LCAweDAzLCAweDA2LCAweDAwLAor
ICAweDA2LCAweDA3LCAweDA2LCAweDAwLCAweDA2LCAweDBlLCAweDA2LCAweDAwLCAweDA2LCAw
eDFjLCAweDA2LCAweDAwLAorICAweDBlLCAweDM4LCAweDA3LCAweDAwLCAweDBjLCAweDcwLCAw
eDAzLCAweDAwLCAweDFjLCAweGUwLCAweDAzLCAweDAwLAorICAweDM4LCAweGMwLCAweDAxLCAw
eDAwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLAorICAw
eDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9tYXNr
X2JpdHNbXSA9IHsKKyAgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHg3ZiwgMHgwMCwg
MHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwg
MHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmZSwgMHhjMCwgMHgwNywgMHgwMCwKKyAgMHhmZSwg
MHg4MSwgMHgwNywgMHgwMCwgMHhmZiwgMHg4MywgMHgwZiwgMHgwMCwgMHhjZiwgMHgwNywgMHgw
ZiwgMHgwMCwKKyAgMHg4ZiwgMHgwZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgxZiwgMHgwZiwgMHgw
MCwgMHgwZiwgMHgzZSwgMHgwZiwgMHgwMCwKKyAgMHgxZiwgMHhmYywgMHgwZiwgMHgwMCwgMHgx
ZSwgMHhmOCwgMHgwNywgMHgwMCwgMHgzZSwgMHhmMCwgMHgwNywgMHgwMCwKKyAgMHhmYywgMHhm
MCwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwg
MHgwMCwKKyAgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX1NQSU5OSU5HICovCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfc3Bpbm5pbmdfYml0c1tdID0geworICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAw
LAorICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNj
LCAweDAwLCAweDAwLCAweDAwLAorICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAw
LCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAwLAorICAweGZjLCAweDNiLCAweDAw
LCAweDAwLCAweDdjLCAweDM4LCAweDAwLCAweDAwLCAweDZjLCAweDU0LCAweDAwLCAweDAwLAor
ICAweGM0LCAweGRjLCAweDAwLCAweDAwLCAweGMwLCAweDQ0LCAweDAwLCAweDAwLCAweDgwLCAw
eDM5LCAweDAwLCAweDAwLAorICAweDgwLCAweDM5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgw
MCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhm
ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYiwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHg3
ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMCwg
MHgwMCwKKyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMCwgMHgwMCwg
MHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwg
MHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisv
KiBNT1pfQ1VSU09SX05PTkUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25l
X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm9uZV9t
YXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0hBTkRfR1JBQiAqLworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9iaXRzW10gPSB7CisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAs
IDB4MDAsCisgIDB4NjAsIDB4MzksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDksIDB4MDAsIDB4MDAs
IDB4OTAsIDB4NDksIDB4MDEsIDB4MDAsCisgIDB4MjAsIDB4YzksIDB4MDIsIDB4MDAsIDB4MjAs
IDB4NDksIDB4MDIsIDB4MDAsIDB4NTgsIDB4NDAsIDB4MDIsIDB4MDAsCisgIDB4NjQsIDB4MDAs
IDB4MDIsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4
MDAsCisgIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4
MjAsIDB4ODAsIDB4MDAsIDB4MDAsCisgIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4
NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9tYXNrX2JpdHNbXSA9IHsKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgz
ZiwgMHgwMCwgMHgwMCwKKyAgMHhmMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhmZiwgMHgw
MSwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhmMCwgMHhmZiwgMHgwNywgMHgw
MCwgMHhmOCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmYywgMHhmZiwgMHgwNywgMHgwMCwKKyAgMHhm
ZSwgMHhmZiwgMHgwNywgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMywgMHgwMCwgMHhmYywgMHhmZiwg
MHgwMywgMHgwMCwKKyAgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwg
MHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwg
MHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9
OworCisvKiBNT1pfQ1VSU09SX0hBTkRfR1JBQkJJTkcgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1vel9oYW5kX2dyYWJiaW5nX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgw
MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMSwgMHgwMCwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHg2MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwKKyAgMHgx
MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwg
MHgwMCwgMHgwMCwKKyAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwg
MHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3Qg
IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdfbWFza19iaXRzW10gPSB7CisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4YzAsIDB4MzYsIDB4MDAsIDB4MDAsCisgIDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4
ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4MDAsCisgIDB4ZTAsIDB4
ZmYsIDB4MDMsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDMs
IDB4MDAsCisgIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDEsIDB4MDAs
IDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsCisgIDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAs
IDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2YsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwor
ZW51bSBDdXN0b21DdXJzb3JUeXBlIHsKKyAgICBDdXN0b21DdXJzb3JDb3B5ID0gMCwKKyAgICBD
dXN0b21DdXJzb3JBbGlhcywKKyAgICBDdXN0b21DdXJzb3JDb250ZXh0TWVudSwKKyAgICBDdXN0
b21DdXJzb3Jab29tSW4sCisgICAgQ3VzdG9tQ3Vyc29yWm9vbU91dCwKKyAgICBDdXN0b21DdXJz
b3JWZXJ0aWNhbFRleHQsCisgICAgQ3VzdG9tQ3Vyc29yTm9Ecm9wLAorICAgIEN1c3RvbUN1cnNv
clByb2dyZXNzLAorICAgIEN1c3RvbUN1cnNvck5vbmUsCisgICAgQ3VzdG9tQ3Vyc29yR3JhYiwK
KyAgICBDdXN0b21DdXJzb3JHcmFiYmluZywKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBj
b25zdCBjaGFyKiBuYW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJpdHM7CisgICAgY29u
c3QgdW5zaWduZWQgY2hhciogbWFza19iaXRzOworICAgIGludCBob3RfeDsKKyAgICBpbnQgaG90
X3k7Cit9IEN1c3RvbUN1cnNvcjsKKworLy8gY3JlYXRlIGN1c3RvbSBwaXhtYXAgY3Vyc29yIGZy
b20gY3Vyc29ycyBpbiBuc0dUS0N1cnNvckRhdGEuaAorc3RhdGljIGNvbnN0IEN1c3RvbUN1cnNv
ciBDdXN0b21DdXJzb3JzW10gPSB7CisgICAgeyAiY29weSIsIG1vel9jb3B5X2JpdHMsIG1vel9j
b3B5X21hc2tfYml0cywgMiwgMiB9LAorICAgIHsgImFsaWFzIiwgbW96X2FsaWFzX2JpdHMsIG1v
el9hbGlhc19tYXNrX2JpdHMsIDIsIDIgfSwKKyAgICB7ICJjb250ZXh0LW1lbnUiLCBtb3pfbWVu
dV9iaXRzLCBtb3pfbWVudV9tYXNrX2JpdHMsIDIsIDIgfSwKKyAgICB7ICJ6b29tLWluIiwgbW96
X3pvb21faW5fYml0cywgbW96X3pvb21faW5fbWFza19iaXRzLCA2LCA2IH0sCisgICAgeyAiem9v
bS1vdXQiLCBtb3pfem9vbV9vdXRfYml0cywgbW96X3pvb21fb3V0X21hc2tfYml0cywgNiwgNiB9
LAorICAgIHsgInZlcnRpY2FsLXRleHQiLCBtb3pfdmVydGljYWxfdGV4dF9iaXRzLCBtb3pfdmVy
dGljYWxfdGV4dF9tYXNrX2JpdHMsIDgsIDQgfSwKKyAgICB7ICJkbmQtbm8tZHJvcCIsIG1vel9u
b3RfYWxsb3dlZF9iaXRzLCBtb3pfbm90X2FsbG93ZWRfbWFza19iaXRzLCA5LCAgOSB9LAorICAg
IHsgImxlZnRfcHRyX3dhdGNoIiwgbW96X3NwaW5uaW5nX2JpdHMsIG1vel9zcGlubmluZ19tYXNr
X2JpdHMsIDIsICAyfSwKKyAgICB7ICJub25lIiwgbW96X25vbmVfYml0cywgbW96X25vbmVfbWFz
a19iaXRzLCAwLCAwIH0sCisgICAgeyAiZ3JhYiIsIG1vel9oYW5kX2dyYWJfYml0cywgbW96X2hh
bmRfZ3JhYl9tYXNrX2JpdHMsIDEwLCAxMCB9LAorICAgIHsgImdyYWJiaW5nIiwgbW96X2hhbmRf
Z3JhYmJpbmdfYml0cywgbW96X2hhbmRfZ3JhYmJpbmdfbWFza19iaXRzLCAxMCwgMTAgfQorfTsK
KworI2VuZGlmIC8vIEN1cnNvckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZjNjZlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAtMCwwICsx
LDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydGluIFJvYmluc29uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGF0YU9iamVjdEd0ay5oIgorCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZv
aWQgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCit7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNoYXJhY3RlciA9ICcgJzsKKyAgICBzdHIucmVwbGFj
ZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7Cit9CisKK1N0cmlu
ZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKK3sKKyAgICBpZiAobV9yYW5nZSkKKyAgICAg
ICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKKyAgICByZXR1cm4gbV90ZXh0OworfQorCitTdHJp
bmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKK3sKKyAgICBpZiAobV9yYW5nZSkKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CisgICAgcmV0dXJuIG1fbWFy
a3VwOworfQorCit2b2lkIERhdGFPYmplY3RHdGs6OnNldFRleHQoY29uc3QgU3RyaW5nJiBuZXdU
ZXh0KQoreworICAgIG1fcmFuZ2UgPSAwOworICAgIG1fdGV4dCA9IG5ld1RleHQ7CisgICAgcmVw
bGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UobV90ZXh0KTsKK30KKwordm9pZCBEYXRhT2Jq
ZWN0R3RrOjpzZXRNYXJrdXAoY29uc3QgU3RyaW5nJiBuZXdNYXJrdXApCit7CisgICAgbV9yYW5n
ZSA9IDA7CisgICAgbV9tYXJrdXAgPSBuZXdNYXJrdXA7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0
azo6c2V0VVJJTGlzdChjb25zdCBTdHJpbmcmIHVyaUxpc3RTdHJpbmcpCit7CisgICAgbV91cmlM
aXN0ID0gdXJpTGlzdFN0cmluZzsKKworICAgIC8vIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZy
b206IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAuCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29kZSBjcm9zcy1wbGF0Zm9ybSBldmVudHVhbGx5Lgor
CisgICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBm
b3IgY29tcGF0aWJpbGl0eQorICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhl
cmUuCisgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKKyAgICB1cmlMaXN0U3RyaW5nLnNwbGl0
KCdcbicsIHVyaUxpc3QpOworCisgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhl
IGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVtYmVyLgorICAgIC8vIEluIGNhc2Ugbm8g
VVJMcyBjYW4gYmUgZm91bmQsIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKKyAg
ICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBI
VE1MNSBzcGVjIChzZWUKKyAgICAvLyAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGlu
dGVyZmFjZXMiKS4gQWxzbyBleHRyYWN0IGFsbCBmaWxlbmFtZXMKKyAgICAvLyBmcm9tIHRoZSBV
UkkgbGlzdC4KKyAgICBib29sIHNldFVSTCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlM
aXN0W2ldOworICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAg
aWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChs
aW5lWzBdID09ICcjJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEtVUkwgdXJs
ID0gS1VSTChLVVJMKCksIGxpbmUpOworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgeworICAg
ICAgICAgICAgaWYgKCFzZXRVUkwpIHsKKyAgICAgICAgICAgICAgICBtX3VybCA9IHVybDsKKyAg
ICAgICAgICAgICAgICBzZXRVUkwgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBmaWxl
bmFtZShnX2ZpbGVuYW1lX2Zyb21fdXJpKGxpbmUudXRmOCgpLmRhdGEoKSwgMCwgJmVycm9yLm91
dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoIWVycm9yICYmIGZpbGVuYW1lKQorICAgICAgICAg
ICAgICAgIG1fZmlsZW5hbWVzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdldCgp
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICBtX3VybCA9IHVybDsK
KyAgICBtX3VyaUxpc3QgPSB1cmw7CisgICAgc2V0VGV4dCh1cmwuc3RyaW5nKCkpOworCisgICAg
U3RyaW5nIGFjdHVhbExhYmVsKGxhYmVsKTsKKyAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgp
KQorICAgICAgICBhY3R1YWxMYWJlbCA9IHVybDsKKworICAgIFN0cmluZ0J1aWxkZXIgbWFya3Vw
OworICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBwZW5kKHVy
bC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7CisgICAgR093blB0cjxnY2hh
cj4gZXNjYXBlZChnX21hcmt1cF9lc2NhcGVfdGV4dChhY3R1YWxMYWJlbC51dGY4KCkuZGF0YSgp
LCAtMSkpOworICAgIG1hcmt1cC5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgp
KSk7CisgICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOworICAgIHNldE1hcmt1cChtYXJrdXAudG9T
dHJpbmcoKSk7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJUZXh0KCkKK3sKKyAgICBt
X3JhbmdlID0gMDsKKyAgICBtX3RleHQgPSAiIjsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpj
bGVhck1hcmt1cCgpCit7CisgICAgbV9yYW5nZSA9IDA7CisgICAgbV9tYXJrdXAgPSAiIjsKK30K
KworU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkgY29uc3QKK3sKKyAgICBpZiAoaGFz
VGV4dCgpKQorICAgICAgICByZXR1cm4gdGV4dCgpOworCisgICAgaWYgKGhhc1VSTCgpKQorICAg
ICAgICByZXR1cm4gdXJsKCk7CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRGF0
YU9iamVjdEd0azo6Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKQoreworICAgIG1fdGV4dCA9ICIi
OworICAgIG1fbWFya3VwID0gIiI7CisgICAgbV91cmlMaXN0ID0gIiI7CisgICAgbV91cmwgPSBL
VVJMKCk7CisgICAgbV9pbWFnZSA9IDA7CisgICAgbV9yYW5nZSA9IDA7Cit9CisKK3ZvaWQgRGF0
YU9iamVjdEd0azo6Y2xlYXJBbGwoKQoreworICAgIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7
CisgICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKK30KKworRGF0YU9iamVjdEd0ayogRGF0YU9iamVj
dEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAgIHN0YXRp
YyBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+IG9iamVjdE1h
cDsKKworICAgIGlmICghb2JqZWN0TWFwLmNvbnRhaW5zKGNsaXBib2FyZCkpIHsKKyAgICAgICAg
UmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpjcmVhdGUo
KTsKKyAgICAgICAgb2JqZWN0TWFwLnNldChjbGlwYm9hcmQsIGRhdGFPYmplY3QpOworICAgICAg
ICByZXR1cm4gZGF0YU9iamVjdC5nZXQoKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPEd0a0NsaXBi
b2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5m
aW5kKGNsaXBib2FyZCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41MjgxYjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRh
T2JqZWN0R3RrLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
TWFydGluIFJvYmluc29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVm
IERhdGFPYmplY3RHdGtfaAorI2RlZmluZSBEYXRhT2JqZWN0R3RrX2gKKworI2luY2x1ZGUgIkZp
bGVMaXN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhT2JqZWN0R3RrIDogcHVi
bGljIFJlZkNvdW50ZWQ8RGF0YU9iamVjdEd0az4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFPYmplY3RHdGs+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERhdGFPYmplY3RHdGsoKSk7CisgICAgfQorCisgICAgY29uc3QgS1VSTCYgdXJs
KCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVyaUxpc3QoKSBj
b25zdCB7IHJldHVybiBtX3VyaUxpc3Q7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KKyAgICBHZGtQaXhidWYqIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0UmFuZ2Uo
UGFzc1JlZlB0cjxSYW5nZT4gbmV3UmFuZ2UpIHsgbV9yYW5nZSA9IG5ld1JhbmdlOyB9CisgICAg
dm9pZCBzZXRJbWFnZShHZGtQaXhidWYqIG5ld0ltYWdlKSB7IG1faW1hZ2UgPSBuZXdJbWFnZTsg
fQorICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29s
IGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX3RleHQuaXNFbXB0eSgpOyB9
CisgICAgYm9vbCBoYXNNYXJrdXAoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX21hcmt1
cC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1VSSUxpc3QoKSBjb25zdCB7IHJldHVybiAhbV91
cmlMaXN0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVVJMKCkgY29uc3QgeyByZXR1cm4gIW1f
dXJsLmlzRW1wdHkoKSAmJiBtX3VybC5pc1ZhbGlkKCk7IH0KKyAgICBib29sIGhhc0ZpbGVuYW1l
cygpIGNvbnN0IHsgcmV0dXJuICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhh
c0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJVUklMaXN0
KCkgeyBtX3VyaUxpc3QgPSAiIjsgfQorICAgIHZvaWQgY2xlYXJVUkwoKSB7IG1fdXJsID0gS1VS
TCgpOyB9CisgICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ltYWdlID0gMDsgfQorCisgICAgU3Ry
aW5nIHRleHQoKSBjb25zdDsKKyAgICBTdHJpbmcgbWFya3VwKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRUZXh0KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0TWFya3VwKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgc2V0VVJJTGlzdChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdXJsTGFi
ZWwoKSBjb25zdDsKKworICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKKyAgICB2
b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBjbGVhclRleHQoKTsKKyAgICB2b2lkIGNsZWFyTWFy
a3VwKCk7CisKKyAgICBzdGF0aWMgRGF0YU9iamVjdEd0ayogZm9yQ2xpcGJvYXJkKEd0a0NsaXBi
b2FyZCopOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3RleHQ7CisgICAgU3RyaW5nIG1fbWFy
a3VwOworICAgIEtVUkwgbV91cmw7CisgICAgU3RyaW5nIG1fdXJpTGlzdDsKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX2ZpbGVuYW1lczsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFnZTsKKyAg
ICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBEYXRhT2JqZWN0
R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDJhNDc0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvRHJhZ0RhdGFHdGsuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEu
aCIKKworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzRmlsZW5hbWVzKCk7Cit9
CisKK3Vuc2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKS5zaXplKCk7Cit9CisKK3ZvaWQgRHJh
Z0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Cit7CisgICAg
cmVzdWx0ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKTsKK30KKworYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmhhc1RleHQoKTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dChG
cmFtZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dCgpOwor
fQorCitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9y
KCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25z
dAoreworICAgIHJldHVybiBjb250YWluc1BsYWluVGV4dCgpIHx8IGNvbnRhaW5zVVJMKDApIHx8
IG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzTWFya3VwKCkgfHwgY29udGFpbnNDb2xvcigpIHx8IGNv
bnRhaW5zRmlsZXMoKTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRnJhbWUqIGZy
YW1lLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFhc1VSTChmcmFtZSwgZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKK30KKwor
U3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBm
aWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxhdGZv
cm1EcmFnRGF0YS0+aGFzVVJMKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAo
ZmlsZW5hbWVQb2xpY3kgIT0gQ29udmVydEZpbGVuYW1lcykgeworICAgICAgICBLVVJMIHVybChL
VVJMKCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOworICAgICAgICBpZiAodXJsLmlzTG9j
YWxGaWxlKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgU3Ry
aW5nIHVybChtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybCgpKTsKKyAgICBpZiAodGl0bGUpCisgICAg
ICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsTGFiZWwoKTsKKyAgICByZXR1cm4g
dXJsOworfQorCisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJh
Z21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc01hcmt1cCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRv
Y3VtZW50KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+bWFya3VwKCksICIiKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0RyYWdJY29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
ODE4NzcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5j
cHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJY29uLmgi
CisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRp
YyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdk
a0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24qIGljb24pCit7CisgICAgUmVmUHRyPGNhaXJv
X3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpKTsK
KyAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBUUlVFOworfQorI2Vs
c2UKK3N0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dp
ZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJY29uKiBpY29uKQoreworICAgIGlmICghZ2Rr
X2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250ZXh0LCAwKSkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIGljb24tPmRyYXcoY29udGV4dCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5k
aWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworRHJhZ0ljb246OkRyYWdJY29uKCkKKyAgICA6IGlz
Q29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBvc2l0ZWQoZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpKSkKKyAgICAsIG1fd2luZG93KDApCit7CisgICAgaWYgKCFpc0NvbXBvc2l0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19Q
T1BVUCk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVu
dENhbGxiYWNrKSwgdGhpcyk7CisjZWxzZQorICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3cs
ICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhp
cyk7CisjZW5kaWYKKworICAgIC8vIFRoaXMgc3RyYXRlZ3kgb3JpZ2luYWxseSBjb21lcyBmcm9t
IENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIvZ3RrL3RhYl9jb250ZW50c19kcmFnX3NvdXJj
ZS5jYworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKG1fd2lu
ZG93KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0NvbG9ybWFwKiByZ2JhID0g
Z2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChzY3JlZW4pOworICAgIGlmIChyZ2JhKQorICAg
ICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX3dpbmRvdywgcmdiYSk7CisjZWxzZQorICAg
IEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV92aXN1YWwoc2NyZWVuKTsK
KyAgICBpZiAoIXZpc3VhbCkKKyAgICAgICAgdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVt
X3Zpc3VhbChzY3JlZW4pOworICAgIGd0a193aWRnZXRfc2V0X3Zpc3VhbChtX3dpbmRvdywgdmlz
dWFsKTsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorfQorCitEcmFnSWNvbjo6fkRyYWdJ
Y29uKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3dpbmRvdyk7Cit9CisKK3ZvaWQgRHJhZ0ljb246OmRyYXcoY2Fpcm9fdCogY29udGV4dCkKK3sK
KyAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9pbWFnZS5nZXQoKSksCisgICAgICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2ltYWdlLmdldCgpKSk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7
CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQsIG1faW1hZ2UuZ2V0KCksIDAs
IDApOworICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Cit9CisKK3ZvaWQgRHJhZ0ljb246OnNldElt
YWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBt
X2ltYWdlID0gaW1hZ2U7CisgICAgbV9pbWFnZVNpemUgPSBJbnRTaXplKGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGlt
YWdlKSk7CisgICAgaWYgKGlzQ29tcG9zaXRlZCkgeworICAgICAgICBndGtfd2luZG93X3Jlc2l6
ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFnZVNpemUud2lkdGgoKSwgbV9pbWFnZVNpemUu
aGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyAgICBtX3BpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4
YnVmKGltYWdlKSk7CisjZW5kaWYKK30KKwordm9pZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtE
cmFnQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBJbnRQb2ludCBob3RzcG90KG1faW1hZ2VTaXpl
KTsKKyAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41KTsKKyAgICB1c2VGb3JEcmFnKGNvbnRleHQs
IGhvdHNwb3QpOworfQorCit2b2lkIERyYWdJY29uOjp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKK3sKKyAgICBpZiAoaXNDb21wb3Np
dGVkKSB7CisgICAgICAgIGd0a19kcmFnX3NldF9pY29uX3dpZGdldChjb250ZXh0LCBtX3dpbmRv
dywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGd0a19kcmFnX3NldF9pY29uX3BpeGJ1Zihjb250
ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKKyNlbHNlCisg
ICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBtX2ltYWdlLmdldCgpKTsKKyNl
bmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0RyYWdJY29uLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlNDM1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaApAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRHJh
Z0ljb25faAorI2RlZmluZSBEcmFnSWNvbl9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgPFJlZlB0ckNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERyYWdJY29uIHsKK3B1YmxpYzoKKyAgICBE
cmFnSWNvbigpOworICAgIHZpcnR1YWwgfkRyYWdJY29uKCk7CisKKyAgICB2b2lkIGRyYXcoY2Fp
cm9fdCopOworICAgIHZvaWQgc2V0SW1hZ2UoY2Fpcm9fc3VyZmFjZV90Kik7CisgICAgdm9pZCB1
c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0Kik7CisgICAgdm9pZCB1c2VGb3JEcmFnKEdka0RyYWdD
b250ZXh0KiwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpOworCitwcml2YXRlOgorICAgIGJvb2wg
aXNDb21wb3NpdGVkOworICAgIEd0a1dpZGdldCogbV93aW5kb3c7CisgICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gbV9pbWFnZTsKKyAgICBJbnRTaXplIG1faW1hZ2VTaXplOworI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IG1fcGl4YnVmOworI2VuZGlm
Cit9OworCit9CisKKyNlbmRpZiAvLyBEcmFnSWNvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJbWFn
ZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3YzRjMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcApAQCAt
MCwwICsxLDkxIEBACisvKgorICogMjAxMCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgi
CisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVk
ZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdkay9nZGsu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIGRyYWdJbWFnZVNpemUoRHJhZ0lt
YWdlUmVmIGltYWdlKQoreworICAgIGlmIChpbWFnZSkKKyAgICAgICAgcmV0dXJuIEludFNpemUo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpLCBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoaW1hZ2UpKTsKKworICAgIHJldHVybiBJbnRTaXplKDAsIDApOworfQorCit2
b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCit7CisgICAgaWYgKGltYWdl
KQorICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOworfQorCitEcmFnSW1hZ2VS
ZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCit7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgbmV3V2lkdGgg
PSBzY2FsZS53aWR0aCgpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpOwor
ICAgIGludCBuZXdIZWlnaHQgPSBzY2FsZS5oZWlnaHQoKSAqIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChpbWFnZSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzY2FsZWRTdXJmYWNlID0g
Y2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcihpbWFnZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9B
TFBIQSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4
dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzY2FsZWRTdXJmYWNlKSk7CisgICAgY2Fpcm9fc2Nh
bGUoY29udGV4dC5nZXQoKSwgc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIGNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNvbnRleHQuZ2V0KCkpLCBD
QUlST19FWFRFTkRfUEFEKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIoY2Fpcm9fZ2V0
X3NvdXJjZShjb250ZXh0LmdldCgpKSwgQ0FJUk9fRklMVEVSX0JFU1QpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNh
aXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LmdldCgpLCBpbWFnZSwgMCwgMCk7CisgICAg
Y2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7CisKKyAgICBkZWxldGVEcmFnSW1hZ2UoaW1hZ2Up
OworICAgIHJldHVybiBzY2FsZWRTdXJmYWNlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVE
cmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQgZnJhY3Rpb24pCit7
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWdka19zY3Jl
ZW5faXNfY29tcG9zaXRlZChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpKQorICAgICAgICByZXR1
cm4gaW1hZ2U7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShpbWFnZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LmdldCgpLCBD
QUlST19PUEVSQVRPUl9ERVNUX0lOKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4
dC5nZXQoKSwgMCwgMCwgMCwgZnJhY3Rpb24pOworICAgIGNhaXJvX3BhaW50KGNvbnRleHQuZ2V0
KCkpOworICAgIHJldHVybiBpbWFnZTsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSkKK3sK
KyAgICBOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBuYXRpdmVJbWFnZSA/IGNhaXJvX3N1cmZhY2Vf
cmVmZXJlbmNlKG5hdGl2ZUltYWdlLT5zdXJmYWNlKCkpIDogMDsKK30KKworRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3Jz
R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTRkNTVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJFcnJvcnNHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJQcmludENvbnRleHQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVy
cm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3
b3JrLCBOZXR3b3JrRXJyb3JDYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdC51cmwoKS5zdHJpbmcoKSwgXygiTG9hZCByZXF1ZXN0IGNhbmNlbGxlZCIpKTsKK30KKwor
UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lF
cnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxvd2VkIHRvIHVzZSByZXN0cmljdGVkIG5l
dHdvcmsgcG9ydCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiVVJMIGNhbm5vdCBiZSBz
aG93biIpKTsKK30KKworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRl
ZEJ5UG9saWN5Q2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCku
c3RyaW5nKCksIF8oIkZyYW1lIGxvYWQgd2FzIGludGVycnVwdGVkIikpOworfQorCitSZXNvdXJj
ZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQ
b2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlN
RSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3VyY2VFcnJvciBmaWxlRG9lc05v
dEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0
dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JGaWxlRG9l
c05vdEV4aXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmlu
ZygpLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOworfQorCitSZXNvdXJjZUVycm9yIHBsdWdp
bldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVnaW4sIFBsdWdpbkVycm9y
V2lsbEhhbmRsZUxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCku
c3RyaW5nKCksIF8oIlBsdWdpbiB3aWxsIGhhbmRsZSBsb2FkIikpOworfQorCitSZXNvdXJjZUVy
cm9yIGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIG5ldHdvcmtFcnJv
cikKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3du
bG9hZEVycm9yTmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRXJyb3Iu
ZmFpbGluZ1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Cit9CisK
K1Jlc291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJVc2VyIGNhbmNlbGxlZCB0
aGUgZG93bmxvYWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVy
cm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2Fk
LCBEb3dubG9hZEVycm9yRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2UudXJsKCkuc3RyaW5nKCksIGVycm9yTWVzc2FnZSk7Cit9CisKK1Jlc291cmNlRXJyb3Ig
cHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCit7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0g
cHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9yR2VuZXJhbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVy
LT51cmwoKSA6IEtVUkwoKSwgZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmlu
dGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCkKK3sKKyAg
ICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCkt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVy
cm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJM
KCksIF8oIlByaW50ZXIgbm90IGZvdW5kIikpOworfQorCitSZXNvdXJjZUVycm9yIGludmFsaWRQ
YWdlUmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0KQoreworICAg
IERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5QcmludCwgUHJpbnRFcnJvckludmFsaWRQYWdlUmFuZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJM
KCksIF8oIkludmFsaWQgcGFnZSByYW5nZSIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTgyY2M5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3Jz
R3RrLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIEVycm9yc0d0a19oCisjZGVmaW5lIEVycm9yc0d0a19oCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQ
cmludENvbnRleHQ7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0
OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKworY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21h
aW5OZXR3b3JrID0gIldlYktpdE5ldHdvcmtFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJv
ckRvbWFpblBvbGljeSA9ICJXZWJLaXRQb2xpY3lFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBl
cnJvckRvbWFpblBsdWdpbiA9ICJXZWJLaXRQbHVnaW5FcnJvciI7Citjb25zdCBjaGFyKiBjb25z
dCBlcnJvckRvbWFpbkRvd25sb2FkID0gIldlYktpdERvd25sb2FkRXJyb3IiOworY29uc3QgY2hh
ciogY29uc3QgZXJyb3JEb21haW5QcmludCA9ICJXZWJLaXRQcmludEVycm9yIjsKKworZW51bSBO
ZXR3b3JrRXJyb3IgeworICAgIE5ldHdvcmtFcnJvckZhaWxlZCA9IDM5OSwKKyAgICBOZXR3b3Jr
RXJyb3JUcmFuc3BvcnQgPSAzMDAsCisgICAgTmV0d29ya0Vycm9yVW5rbm93blByb3RvY29sID0g
MzAxLAorICAgIE5ldHdvcmtFcnJvckNhbmNlbGxlZCA9IDMwMiwKKyAgICBOZXR3b3JrRXJyb3JG
aWxlRG9lc05vdEV4aXN0ID0gMzAzCit9OworCisvLyBTeW5jJ2Qgd2l0aCBNYWMncyBXZWJLaXQg
RXJyb3JzLgorZW51bSBQb2xpY3lFcnJvciB7CisgICAgUG9saWN5RXJyb3JGYWlsZWQgPSAxOTks
CisgICAgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5cGUgPSAxMDAsCisgICAgUG9saWN5RXJy
b3JDYW5ub3RTaG93VVJMID0gMTAxLAorICAgIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0
ZWRCeVBvbGljeUNoYW5nZSA9IDEwMiwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0
ZWRQb3J0ID0gMTAzCit9OworCitlbnVtIFBsdWdpbkVycm9yIHsKKyAgICBQbHVnaW5FcnJvckZh
aWxlZCA9IDI5OSwKKyAgICBQbHVnaW5FcnJvckNhbm5vdEZpbmRQbHVnaW4gPSAyMDAsCisgICAg
UGx1Z2luRXJyb3JDYW5ub3RMb2FkUGx1Z2luID0gMjAxLAorICAgIFBsdWdpbkVycm9ySmF2YVVu
YXZhaWxhYmxlID0gMjAyLAorICAgIFBsdWdpbkVycm9yQ29ubmVjdGlvbkNhbmNlbGxlZCA9IDIw
MywKKyAgICBQbHVnaW5FcnJvcldpbGxIYW5kbGVMb2FkID0gMjA0Cit9OworCitlbnVtIERvd25s
b2FkRXJyb3IgeworICAgIERvd25sb2FkRXJyb3JOZXR3b3JrID0gNDk5LAorICAgIERvd25sb2Fk
RXJyb3JDYW5jZWxsZWRCeVVzZXIgPSA0MDAsCisgICAgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9u
ID0gNDAxCit9OworCitlbnVtIFByaW50RXJyb3IgeworICAgIFByaW50RXJyb3JHZW5lcmFsID0g
NTk5LAorICAgIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQgPSA1MDAsCisgICAgUHJpbnRFcnJv
ckludmFsaWRQYWdlUmFuZ2UgPSA1MDEKK307CisKK1Jlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBv
bGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBj
YW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJj
ZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitS
ZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJj
ZUVycm9yJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZERlc3RpbmF0aW9u
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KTsKK1Jlc291cmNlRXJyb3IgcHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqLCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSk7CitSZXNvdXJjZUVycm9yIHByaW50ZXJOb3RGb3VuZEVycm9y
KGNvbnN0IFByaW50Q29udGV4dCopOworUmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJhbmdlVG9Q
cmludChjb25zdCBQcmludENvbnRleHQqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
RXZlbnRMb29wR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWY3
YjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsu
Y3BwCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorCisjaW5jbHVk
ZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNs
ZSgpCit7CisgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9G
aWxlU3lzdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyMDcyOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKQEAgLTAsMCArMSwz
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisK
KyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSA8
Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBPbiBsaW51eCBmaWxlIG5hbWVzIGFyZSBqdXN0
IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29kZWQgaW4gYW55
IHdheQorICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdlIGNhbm5vdCBq
dXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCisgKiBidXQgd2UgaGF2ZSB0
byBlc2NhcGUgaXQuCisgKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBlbmNvZGluZyBp
cyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8KK1N0cmluZyBm
aWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQoreworICAgIGlmICghZmlsZW5h
bWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOworI2Vsc2UKKyAgICBHT3duUHRyPGdjaGFy
PiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZW5hbWUsICIvOiIsIGZhbHNl
KSk7CisgICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7CisjZW5kaWYKK30KKworQ1N0cmlu
ZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworI2lmIE9T
KFdJTkRPV1MpCisgICAgcmV0dXJuIHBhdGgudXRmOCgpOworI2Vsc2UKKyAgICBHT3duUHRyPGdj
aGFyPiBmaWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmcocGF0aC51dGY4KCkuZGF0YSgpLCAw
KSk7CisgICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOworI2VuZGlmCit9CisKKy8vIENvbnZlcnRz
IGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVz
ZXIuCitTdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQorewor
I2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHN0cmluZzsKKyNlbHNlCisgICAgQ1N0cmluZyBm
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzdHJpbmcpOworICAgIEdPd25QdHI8
Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZpbGVuYW1lLmRhdGEoKSwgMCwgMCwg
MCwgMCkpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0KCkpOworI2VuZGlmCit9CisKK2Jv
b2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOworCisgICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmVzdWx0ID0gZ19m
aWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQor
ICAgICAgICByZXN1bHQgPSBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpID09IDA7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1l
LmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSBnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkgPT0g
MDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCit7CisgICAgQ1N0cmluZyBmaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7
CisgICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7
CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1
bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiBtb2Rp
ZmllZFRpbWUpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7CisgICAgZ2ludCByZXN1bHQgPSBnX3N0
YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0LnN0
X210aW1lOworICAgIHJldHVybiB0cnVlOworCit9CisKK2Jvb2wgZ2V0RmlsZU1ldGFkYXRhKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBDU3RyaW5n
IGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxl
bmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RydWN0IHN0YXQg
c3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCksICZz
dGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKKyAgICBt
ZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7CisgICAgbWV0YWRhdGEudHlwZSA9
IFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9y
eSA6IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7CisgICAgcmV0dXJuIHRydWU7CisKK30KKworU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KQoreworICAgIGlmIChwYXRoLmVuZHNXaXRoKEdfRElSX1NFUEFSQVRP
Ul9TKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsgY29tcG9uZW50OworfQorCitib29s
IG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmluZyBm
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5h
bWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdpbnQgcmVzdWx0ID0g
Z19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKTsKKworICAgIHJl
dHVybiByZXN1bHQgPT0gMDsKK30KKworU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKK3sKKyAg
ICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21lX2RpcigpKTsKK30KKworU3RyaW5n
IHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhOYW1lKQoreworICAgIGlmIChwYXRo
TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwYXRoTmFtZTsKKworICAgIENTdHJpbmcg
dG1wRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aE5hbWUpOworICAgIEdP
d25QdHI8Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFzZW5hbWUodG1wRmlsZW5hbWUuZGF0
YSgpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOworfQor
CitDU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpCit7CisgICAgQ1N0cmluZyBwYXRo
ID0gZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7CisgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gcGF0aDsKKworICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywgY2hlY2sg
dGhlIFBBVEggZW52IHZhcmlhYmxlLgorICAgIEdPd25QdHI8Y2hhcj4gY3VycmVudEV4ZVBhdGgo
Z19maW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1lKCkpKTsKKyAgICBpZiAoIWN1cnJl
bnRFeGVQYXRoLmdldCgpKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgR093blB0
cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5nZXQoKSkp
OworICAgIHJldHVybiBkaXJuYW1lLmdldCgpOworfQorCitDU3RyaW5nIHNoYXJlZFJlc291cmNl
c1BhdGgoKQoreworICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hlZFBhdGg7CisgICAgaWYgKCFjYWNo
ZWRQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkUGF0aDsKKworI2lmIE9TKFdJ
TkRPV1MpCisgICAgSE1PRFVMRSBobW9kdWxlID0gMDsKKyAgICBHZXRNb2R1bGVIYW5kbGVFeEEo
R0VUX01PRFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJFU1MsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVsZSk7CisKKyAgICBHT3duUHRyPGdj
aGFyPiBydW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVjdG9y
eV9vZl9tb2R1bGUoaG1vZHVsZSkpOworICAgIEdPd25QdHI8Z2NoYXI+IGRhdGFQYXRoKGdfYnVp
bGRfZmlsZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJlIiwgIndlYmtpdGd0ay0iV0VCS0lU
R1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOworI2Vsc2UKKyAgICBHT3duUHRyPGdjaGFy
PiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0Z3RrLSJXRUJLSVRH
VEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7CisjZW5kaWYKKworICAgIGNhY2hlZFBhdGgg
PSBkYXRhUGF0aC5nZXQoKTsKKyAgICByZXR1cm4gY2FjaGVkUGF0aDsKK30KKwordWludDY0X3Qg
Z2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgR1JlZlB0
cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgpKTsKKyAg
ICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2Zp
bGVzeXN0ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJF
RSwgMCwgMCkpOworICAgIGlmICghZmlsZUluZm8pCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCBH
X0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Cit9CisKK1N0cmluZyBkaXJlY3RvcnlO
YW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvKiBObyBudWxsIGNoZWNraW5nIG5lZWRl
ZCAqLworICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KGRpcm5hbWUuZ2V0KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gZW50cmllczsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCk7CisgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFtZS5k
YXRhKCksIDAsIDApOworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm4gZW50cmllczsKKwor
ICAgIEdQYXR0ZXJuU3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4
KCkpLmRhdGEoKSk7CisgICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25h
bWUoZGlyKSkgeworICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMsIG5h
bWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR093blB0cjxnY2hhcj4gZW50
cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKKyAgICAg
ICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOworICAgIH0K
KyAgICBnX3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKKyAgICBnX2Rpcl9jbG9zZShkaXIpOwor
CisgICAgcmV0dXJuIGVudHJpZXM7Cit9CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25z
dCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgR093
blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0Zjgo
KS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgR093blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGly
KCksIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBoYW5k
bGUgPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05P
TkUsIDAsIDApOworICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkp
OworfQorCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBG
aWxlT3Blbk1vZGUgbW9kZSkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmc1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0g
YWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7CisgICAgR0ZpbGVJ
T1N0cmVhbSogaW9TdHJlYW0gPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAg
ICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsK
KyAgICBlbHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkgeworICAgICAgICBpZiAoZ19maWxl
X3Rlc3QoZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VY
SVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIGlvU3RyZWFtID0g
Z19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCks
IEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGlvU3RyZWFt
OworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAg
ICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19p
b19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7CisgICAgZ19vYmplY3Rf
dW5yZWYoaGFuZGxlKTsKKyAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwor
fQorCitsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBs
b25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIEdTZWVrVHlwZSBzZWVr
VHlwZSA9IEdfU0VFS19TRVQ7CisgICAgc3dpdGNoIChvcmlnaW4pIHsKKyAgICBjYXNlIFNlZWtG
cm9tQmVnaW5uaW5nOgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VF
S19DVVI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAgIHNl
ZWtUeXBlID0gR19TRUVLX0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFnX3NlZWthYmxlX3Nl
ZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhh
bmRsZSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHNlZWtUeXBlLCAwLCAw
KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBnX3NlZWthYmxlX3RlbGwoR19TRUVL
QUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSk7
Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKKyAgICBn
X291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdf
SU9fU1RSRUFNKGhhbmRsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwg
bGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKKyAgICByZXR1cm4gYnl0ZXNXcml0dGVuOwor
fQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCit7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGRvIHsK
KyAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJl
YW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICByZXR1
cm4gYnl0ZXNSZWFkOworICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdfRklM
RV9FUlJPUl9JTlRSKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBs
YXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyNpZiBPUyhXSU5ET1dTKQorICAgIHJldHVybiA6OkZy
ZWVMaWJyYXJ5KG1vZHVsZSk7CisjZWxzZQorICAgIHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1
bGUpOworI2VuZGlmCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25Q
dHJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjY5M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKKwor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IHZv
aWQgZnJlZU93bmVkR1B0cjxHZGtFdmVudD4oR2RrRXZlbnQqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnZGtfZXZlbnRfZnJlZShwdHIpOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGZy
ZWVPd25lZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25JbmZvKiBpbmZvKQoreworICAgIGlmIChp
bmZvKQorICAgICAgICBndGtfaWNvbl9pbmZvX2ZyZWUoaW5mbyk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9HT3duUHRyR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1ZTgz
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oCkBA
IC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgR093blB0ckd0a19oCisjZGVmaW5lIEdPd25QdHJHdGtfaAorCisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50PihHZGtFdmVudCopOwordGVtcGxh
dGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEd0a0ljb25JbmZvPihHdGtJY29uSW5mbyopOworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZmE1MDZkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGlu
IFJvYmluc29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorCisjZGVmaW5lIFNFQ1JFVF9XSVRIX1VO
U1RBQkxFIDEKKyNkZWZpbmUgU0VDUkVUX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSAxCisKKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNlY3JldC9z
ZWNyZXQuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IEd0a1RhcmdldExpc3Qq
IHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGd0
a190YXJnZXRfbGlzdF9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IFNlY3Jl
dFZhbHVlKiByZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgc2VjcmV0X3ZhbHVlX3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgc2VjcmV0X3ZhbHVlX3VucmVmKHB0cik7Cit9CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgordGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdka19jdXJzb3JfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0
cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihwdHIpOworfQorI2VuZGlmCisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTE5Mjg2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1Jl
ZlB0ckd0ay5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIEdSZWZQdHJHdGtfaAorI2RlZmluZSBHUmVmUHRyR3RrX2gKKworI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1NlY3JldFZh
bHVlIFNlY3JldFZhbHVlOworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFy
Z2V0TGlzdCogcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKKwordGVtcGxhdGUgPD4gU2VjcmV0VmFsdWUq
IHJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihT
ZWNyZXRWYWx1ZSogcHRyKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0ZW1wbGF0ZSA8
PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpOworI2VuZGlmCisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR2FtZXBhZHNHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFmOTYwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dhbWVwYWRz
R3RrLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4g
RG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRzLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkdhbWVwYWREZXZpY2VMaW51eC5oIgorI2luY2x1ZGUgIkdhbWVwYWRMaXN0Lmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPGdpby9ndW5peGlucHV0c3RyZWFtLmg+
CisjaW5jbHVkZSA8Z3VkZXYvZ3VkZXYuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWREZXZpY2VHdGsgOiBwdWJsaWMgR2FtZXBhZERldmlj
ZUxpbnV4IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxHYW1lcGFkRGV2aWNlR3Rr
PiBjcmVhdGUoU3RyaW5nIGRldmljZUZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEdhbWVwYWREZXZpY2VHdGsoZGV2aWNlRmlsZSkpOworICAgIH0KKyAgICB+R2FtZXBh
ZERldmljZUd0aygpOworCitwcml2YXRlOgorICAgIEdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRl
dmljZUZpbGUpOworCisgICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBw
b2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSk7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+
IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKK307CisKK0dh
bWVwYWREZXZpY2VHdGs6OkdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUpCisgICAg
OiBHYW1lcGFkRGV2aWNlTGludXgoZGV2aWNlRmlsZSkKK3sKKyAgICBpZiAobV9maWxlRGVzY3Jp
cHRvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0
R1JlZihnX3VuaXhfaW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOwor
ICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9z
b3VyY2UoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsK
KyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOworICAgIGdfc291cmNlX2F0
dGFjaChtX3NvdXJjZS5nZXQoKSwgMCk7Cit9CisKK0dhbWVwYWREZXZpY2VHdGs6On5HYW1lcGFk
RGV2aWNlR3RrKCkKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIGdfc291cmNlX2Rlc3Ry
b3kobV9zb3VyY2UuZ2V0KCkpOworfQorCitnYm9vbGVhbiBHYW1lcGFkRGV2aWNlR3RrOjpyZWFk
Q2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCit7CisgICAg
R2FtZXBhZERldmljZUd0ayogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBh
ZERldmljZUd0ayo+KGRhdGEpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBzdHJ1
Y3QganNfZXZlbnQgZXZlbnQ7CisKKyAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJsZV9pbnB1dF9z
dHJlYW1fcmVhZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShwb2xsYWJsZVN0
cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworCisg
ICAgLy8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCisgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgR19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGls
CisgICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhl
cndpc2UuCisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVy
cm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKKworICAgIEFT
U0VSVF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7CisgICAgZ2FtZXBhZERldmlj
ZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBUUlVFOworfQorCitjbGFzcyBH
YW1lcGFkc0d0ayB7CitwdWJsaWM6CisgICAgR2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKTsK
KworICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOworICAgIHZvaWQg
dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7CisKKyAgICB2b2lkIHVwZGF0ZUdh
bWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7CisKK3ByaXZhdGU6CisgICAgfkdhbWVwYWRzR3RrKCk7
CisgICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBh
Y3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3RhdGljIGdib29sZWFu
IGlzR2FtZXBhZERldmljZShHVWRldkRldmljZSopOworCisgICAgVmVjdG9yPE93blB0cjxHYW1l
cGFkRGV2aWNlR3RrPiA+IG1fc2xvdHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZp
Y2VHdGsqPiBtX2RldmljZU1hcDsKKworICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1fZ3VkZXZD
bGllbnQ7Cit9OworCitHYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKQor
ICAgIDogbV9zbG90cyhsZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1YnN5c3Rl
bXNbXSA9IHsgImlucHV0IiwgMCB9OworICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9wdEdSZWYoZ191
ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndWRl
dkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxsYmFjayksIHRo
aXMpOworCisgICAgR093blB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVudF9xdWVy
eV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1swXSkpOworICAg
IGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0
SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgeworICAgICAgICBHVWRldkRldmljZSogZGV2
aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7CisgICAgICAgIFN0cmluZyBkZXZp
Y2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShk
ZXZpY2UpKTsKKyAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQorICAgICAgICAg
ICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRl
dmljZSk7CisgICAgfQorfQorCitHYW1lcGFkc0d0azo6fkdhbWVwYWRzR3RrKCkKK3sKKyAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVudC5nZXQoKSwg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Cit9CisKK3ZvaWQgR2FtZXBh
ZHNHdGs6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQoreworICAgIExPRyhHYW1l
cGFkLCAiR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNpemUoKTsg
aW5kZXgrKykgeworICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7CisgICAgICAgICAgICBt
X3Nsb3RzW2luZGV4XSA9IEdhbWVwYWREZXZpY2VHdGs6OmNyZWF0ZShkZXZpY2VGaWxlKTsKKyAg
ICAgICAgICAgIG1fZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2luZGV4XS5nZXQo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHYW1l
cGFkc0d0azo6dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKK3sKKyAgICBMT0co
R2FtZXBhZCwgIkdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZp
bGUpKTsKKworICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBtX2RldmljZU1h
cC50YWtlKGRldmljZUZpbGUpOworICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmluZChnYW1l
cGFkRGV2aWNlKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworCisgICAgbV9zbG90
c1tpbmRleF0uY2xlYXIoKTsKK30KKwordm9pZCBHYW1lcGFkc0d0azo6dXBkYXRlR2FtZXBhZExp
c3QoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGlu
dG8tPmxlbmd0aCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNp
emUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0t
PmNvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2
aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKKyAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1l
cGFkID0gaW50by0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAg
ICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGdhbWVw
YWQtPmluZGV4KGkpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERldmljZS0+aWQo
KSk7CisgICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0
YW1wKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291
bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT5i
dXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5idXR0
b25zRGF0YSgpKTsKKworICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQg
R2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqIHVkZXZDbGllbnQsIGdj
aGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
aWYgKCFpc0dhbWVwYWREZXZpY2UoZGV2aWNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2Ft
ZXBhZHNHdGsqIGdhbWVwYWRzR3RrID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkc0d0ayo+KGRh
dGEpOworICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2
aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKKworICAgIGlmICghZ19zdHJjbXAwKGFjdGlv
biwgImFkZCIpKQorICAgICAgICBnYW1lcGFkc0d0ay0+cmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmls
ZSk7CisgICAgZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkKKyAgICAgICAg
Z2FtZXBhZHNHdGstPnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Cit9CisKK2dib29sZWFu
IEdhbWVwYWRzR3RrOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmljZSkKK3sKKyAg
ICBjb25zdCBnY2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxl
KGRldmljZSk7CisgICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9kZXZpY2VfZ2V0
X3N5c2ZzX3BhdGgoZGV2aWNlKTsKKyAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5c2ZzUGF0aCkK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnX3VkZXZfZGV2aWNlX2hhc19wcm9w
ZXJ0eShkZXZpY2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShk
ZXZpY2UsICJJRF9JTlBVVF9KT1lTVElDSyIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICByZXR1cm4gZ19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1dC9qcyIpOwor
fQorCit2b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAoaW50by0+bGVuZ3RoKCkp
KTsKKyAgICBnYW1lcGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTJlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMCwwICsxLDI2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCIKKworI2luY2x1
ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBpbnQgZ0xheW91dENvbHVtblNwYWNpbmcgPSAxMjsKK3N0YXRpYyBjb25zdCBp
bnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2Oworc3RhdGljIGNvbnN0IGludCBnQnV0dG9uU3BhY2lu
ZyA9IDU7CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3Rv
cmFnZU1vZGUgbW9kZSkKKyAgICA6IG1fZGlhbG9nKDApCisgICAgLCBtX2xvZ2luRW50cnkoMCkK
KyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDAp
CisgICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisgICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdl
TW9kZShtb2RlKQoreworfQorCitHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGlj
YXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQorICAgIDog
bV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKKyAgICAsIG1fbG9naW5FbnRyeSgwKQorICAgICwg
bV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKKyAgICAs
IG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAgICAsIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1v
ZGUpCit7CisgICAgR3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRl
bnRfYXJlYShHVEtfRElBTE9HKG1fZGlhbG9nKSk7CisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9y
ZGVyX3dpZHRoKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhtX2RpYWxvZykpLCA1KTsKKyAgICBn
dGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAy
ID0gMTIgKi8KKworICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7
CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFMU0UpOworICAgIGd0a193
aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFt
ZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04pOworCisgICAgaWYgKHBh
cmVudFdpbmRvdykKKyAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2Zvcih3aW5kb3cs
IHBhcmVudFdpbmRvdyk7CisKKyAgICBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKGNvbnRlbnRB
cmVhKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBwYWNrVHdv
Q29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFy
Z3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtX
aWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxl
X3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcp
OworICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlv
dXRSb3dTcGFjaW5nKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9h
cmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAg
ICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgaWYgKHJvd051bWJlcikKKyAg
ICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsg
MSwgMik7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmco
YXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRh
Y2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdU
S19GSUxMKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJz
dENvbHVtbldpZGdldCwKKyAgICAgICAgICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAy
LAorICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxLAorICAgICAgICAgICAgYXR0
YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKKyAgICAgICAgICAgIDAsIDApOworCisgICAgICAg
IGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCisgICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2Rl
ZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVt
YmVyLCByb3dOdW1iZXIgKyAxKTsKKworICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2Fy
Zyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICByb3dOdW1iZXIrKzsKKyAgICB9
CisKKyAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKKworICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOworfQorI2Vsc2UKK3N0YXRpYyB2
b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQoreworICAg
IHZhX2xpc3QgYXJndW1lbnRMaXN0OworICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsK
KworICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOworICAgIGd0a19ncmlkX3Nl
dF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOworICAg
IGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNp
bmcpOworICAgIGd0a19ncmlkX3NldF9jb2x1bW5faG9tb2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCks
IFRSVUUpOworCisgICAgR3RrV2lkZ2V0KiBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1
bWVudExpc3QsIEd0a1dpZGdldCopOworICAgIGludCByb3dOdW1iZXIgPSAwOworICAgIHdoaWxl
IChmaXJzdENvbHVtbldpZGdldCkgeworICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVtbldp
ZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICBpbnQgZmly
c3RXaWRnZXRXaWR0aCA9IHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyOworCisgICAgICAgIGd0
a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgZmlyc3RDb2x1bW5XaWRnZXQsIDAsIHJvd051
bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwgMSk7CisgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBh
bmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOworICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhw
YW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKKworICAgICAgICBpZiAoc2Vjb25kQ29sdW1u
V2lkZ2V0KSB7CisgICAgICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNl
Y29uZENvbHVtbldpZGdldCwgMSwgcm93TnVtYmVyLCAxLCAxKTsKKyAgICAgICAgICAgIGd0a193
aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAgICAgICAg
IGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwg
R3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0KKworICAgIHZhX2VuZChh
cmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3Jp
ZCwgRkFMU0UsIEZBTFNFLCAwKTsKK30KKyNlbmRpZgorCitzdGF0aWMgR3RrV2lkZ2V0KiBjcmVh
dGVEaWFsb2dMYWJlbChjb25zdCBjaGFyKiBsYWJlbFN0cmluZywgaW50IGhvcml6b250YWxQYWRk
aW5nID0gMCkKK3sKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0
cmluZyk7CisgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAsIDAu
NSk7CisgICAgaWYgKGhvcml6b250YWxQYWRkaW5nKQorICAgICAgICBndGtfbWlzY19zZXRfcGFk
ZGluZyhHVEtfTUlTQyhsYWJlbCksIDAsIGhvcml6b250YWxQYWRkaW5nKTsKKyAgICByZXR1cm4g
bGFiZWw7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdl
dCoqIG1lbWJlcikKK3sKKyAgICAqbWVtYmVyID0gZ3RrX2VudHJ5X25ldygpOworICAgIGd0a19l
bnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKCptZW1iZXIpLCBUUlVFKTsKKyAg
ICByZXR1cm4gKm1lbWJlcjsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6Y3Jl
YXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcikKK3sKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxT
RSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworI2Vsc2UKKyAgICBHdGtXaWRnZXQqIGhCb3ggPSBn
dGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgZ0xheW91dENvbHVtblNwYWNp
bmcpOworI2VuZGlmCisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05U
QUlORVIoaEJveCksIGdCdXR0b25TcGFjaW5nKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKGNvbnRhaW5lciksIGhCb3gpOworCisgICAgR3RrV2lkZ2V0KiBpY29uID0gZ3Rr
X2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdU
S19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVND
KGljb24pLCAwLjUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBp
Y29uLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgR093blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJk
dXBfcHJpbnRmKAorICAgICAgICBfKCJUaGUgc2l0ZSAlczolaSByZXF1ZXN0cyBhIHVzZXJuYW1l
IGFuZCBwYXNzd29yZCIpLAorICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5o
b3N0KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCkucG9ydCgpKSk7CisKKyAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0
dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsKKyAgICBndGtf
bGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTiht
X3JlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworICAgIGd0a193aWRnZXRfc2V0X25vX3No
b3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0g
RGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7CisKKworICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhl
IGJ1dHRvbiBib3ggaGVyZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWFkeS1tYWRl
IEd0a0RpYWxvZyBidXR0b25zLgorICAgIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gc2hhcmUg
dGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgdXNlIEd0a0RpYWxvZy4K
KyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3Rr
X2hidXR0b25fYm94X25ldygpOworI2Vsc2UKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0
a19idXR0b25fYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisjZW5kaWYKKyAg
ICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcp
OworICAgIGd0a19idXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94
KSwgR1RLX0JVVFRPTkJPWF9FTkQpOworCisgICAgbV9va2F5QnV0dG9uID0gZ3RrX2J1dHRvbl9u
ZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIG1fY2FuY2VsQnV0dG9uID0gZ3RrX2J1
dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKKyAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX2NhbmNlbEJ1dHRvbiwgRkFMU0UsIFRSVUUsIDAp
OworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fb2theUJ1dHRv
biwgRkFMU0UsIFRSVUUsIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9va2F5QnV0dG9uLCAi
Y2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdChtX2NhbmNlbEJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1
dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgU3RyaW5nIHJlYWxtID0gbV9jaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBpZiAoIXJlYWxtLmlzRW1wdHko
KSkgeworICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJveCwKKyAgICAgICAgICAg
IGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxM
LAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBj
cmVhdGVEaWFsb2dMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgIGNyZWF0
ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5F
bnRyeSksCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNy
ZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAgbV9yZW1lbWJl
ckNoZWNrQnV0dG9uLCBOVUxMLAorICAgICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxMKTsK
KworICAgIH0gZWxzZSB7CisgICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChoQm94LAor
ICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3Bh
Y2luZyksIE5VTEwsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToi
KSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAorICAgICAgICAgICAgY3JlYXRl
RGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29y
ZEVudHJ5KSwKKyAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwK
KyAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7CisgICAgfQorCisgICAgZ3RrX2Vu
dHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7Cisg
ICAgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IG1f
Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOworICAgIGlmICghY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0
KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdl
LnVzZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19F
TlRSWShtX3Bhc3N3b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnBh
c3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9h
Y3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7Cisg
ICAgfQorfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKK3sKKyAgICBn
dGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24sIFRSVUUpOworICAgIGd0a193
aWRnZXRfZ3JhYl9kZWZhdWx0KG1fb2theUJ1dHRvbik7CisgICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKG1fbG9naW5FbnRyeSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsK
K30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCit7CisgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCit7CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2No
YWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGFs
bGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxl
bmdlLCBjcmVkZW50aWFsKTsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YnV0
dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyogZGlhbG9nKQoreworICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICBpZiAoYnV0
dG9uID09IGRpYWxvZy0+bV9va2F5QnV0dG9uKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJu
YW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRyeSkp
OworICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtf
RU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKKyAgICAgICAgYm9vbCByZW1lbWJlclBh
c3N3b3JkID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihk
aWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpOworICAgICAgICBDcmVkZW50aWFsUGVyc2lz
dGVuY2UgcGVyc2lzdGVuY2U7CisKKyAgICAgICAgaWYgKHJlbWVtYmVyUGFzc3dvcmQgJiYgZGlh
bG9nLT5tX2NyZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlKQor
ICAgICAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlRm9yU2Vzc2lvbjsKKworICAgICAgICBjcmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJp
bmc6OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNp
c3RlbmNlKTsKKyAgICB9CisKKyAgICBkaWFsb2ctPmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsK
KyAgICBkaWFsb2ctPmRlc3Ryb3koKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3N2M4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKKyNkZWZpbmUgR3RrQXV0aGVudGljYXRpb25EaWFsb2df
aAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJHUmVm
UHRyR3RrLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RB
bGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAg
IGVudW0gQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIHsKKyAgICAgICAgQWxsb3dQZXJzaXN0ZW50U3Rv
cmFnZSwgLy8gVGhlIHVzZXIgaXMgYXNrZWQgd2hldGhlciB0byBzdG9yZSBjcmVkZW50aWFsIGlu
Zm9ybWF0aW9uLgorICAgICAgICBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlIC8vIENyZWRlbnRp
YWwgaW5mb3JtYXRpb24gaXMgb25seSBrZXB0IGluIHRoZSBzZXNzaW9uLgorICAgIH07CisKKyAg
ICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYs
IENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coR3Rr
V2luZG93KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsU3RvcmFn
ZU1vZGUpOworICAgIHZpcnR1YWwgfkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCkgeyB9CisgICAg
dm9pZCBzaG93KCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250YWluZXIpOworICAgIHZp
cnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3QgQ3JlZGVudGlhbCYpOworICAgIEd0a1dpZGdl
dCogbV9kaWFsb2c7CisgICAgR3RrV2lkZ2V0KiBtX2xvZ2luRW50cnk7CisgICAgR3RrV2lkZ2V0
KiBtX3Bhc3N3b3JkRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247
CisgICAgR3RrV2lkZ2V0KiBtX29rYXlCdXR0b247CisgICAgR3RrV2lkZ2V0KiBtX2NhbmNlbEJ1
dHRvbjsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBidXR0b25DbGlja2VkQ2FsbGJhY2so
R3RrV2lkZ2V0KiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqKTsKKyAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbV9jcmVk
ZW50aWFsU3RvcmFnZU1vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNr
Q291bnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjOGEzMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNw
cApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkd0a0NsaWNrQ291bnRlci5oIgorCisjaW5jbHVkZSAiR093blB0ckd0
ay5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHdGtD
bGlja0NvdW50ZXI6Okd0a0NsaWNrQ291bnRlcigpCisgICAgOiBtX2N1cnJlbnRDbGlja0NvdW50
KDApCisgICAgLCBtX3ByZXZpb3VzQ2xpY2tCdXR0b24oMCkKKyAgICAsIG1fcHJldmlvdXNDbGlj
a1RpbWUoMCkKK3sKK30KKwordm9pZCBHdGtDbGlja0NvdW50ZXI6OnJlc2V0KCkKK3sKKyAgICBt
X2N1cnJlbnRDbGlja0NvdW50ID0gMDsKKyAgICBtX3ByZXZpb3VzQ2xpY2tQb2ludCA9IEludFBv
aW50KCk7CisgICAgbV9wcmV2aW91c0NsaWNrVGltZSA9IDA7CisgICAgbV9wcmV2aW91c0NsaWNr
QnV0dG9uID0gMDsKK30KKworYm9vbCBHdGtDbGlja0NvdW50ZXI6OnNob3VsZFByb2Nlc3NCdXR0
b25FdmVudChHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCit7CisgICAgLy8gRm9yIGRvdWJs
ZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5vcm1hbCBidXR0b24gcHJlc3Mg
ZXZlbnQKKyAgICAvLyBhbmQgYSBzcGVjaWZpYyB0eXBlIChsaWtlIEdES18yQlVUVE9OX1BSRVNT
KS4gSWYgd2UgZGV0ZWN0IGEgc3BlY2lhbCBwcmVzcworICAgIC8vIGNvbWluZyB1cCwgaWdub3Jl
IHRoaXMgZXZlbnQgYXMgaXQgY2VydGFpbmx5IGdlbmVyYXRlZCB0aGUgZG91YmxlIG9yIHRyaXBs
ZQorICAgIC8vIGNsaWNrLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90IGVhdGluZyB0aGlzIGV2ZW50
IGlzIHR3byBET00gYnV0dG9uIHByZXNzIGV2ZW50cworICAgIC8vIGFyZSBnZW5lcmF0ZWQuCisg
ICAgR093blB0cjxHZGtFdmVudD4gbmV4dEV2ZW50KGdka19ldmVudF9wZWVrKCkpOworICAgIGlm
ICghbmV4dEV2ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobmV4dEV2ZW50LT5h
bnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0RXZlbnQtPmFueS50eXBlID09IEdE
S18zQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBndWludDMyIGdldEV2ZW50VGltZShHZGtFdmVudCogZXZlbnQpCit7Cisg
ICAgZ3VpbnQzMiB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KTsKKyAgICBpZiAodGlt
ZSkKKyAgICAgICAgcmV0dXJuIHRpbWU7CisKKyAgICAvLyBSZWFsIGV2ZW50cyBhbHdheXMgaGF2
ZSBhIG5vbi16ZXJvIHRpbWUsIGJ1dCBldmVudHMgc3ludGhlc2l6ZWQKKyAgICAvLyBieSB0aGUg
RFJUIGRvIG5vdCBhbmQgd2UgbXVzdCBjYWxjdWxhdGUgYSB0aW1lIG1hbnVhbGx5LiBUaGlzIHRp
bWUKKyAgICAvLyBpcyBub3QgY2FsY3VsYXRlZCBpbiB0aGUgRFJULCBiZWNhdXNlIEdUSysgZG9l
cyBub3Qgd29yayB3ZWxsIHdpdGgKKyAgICAvLyBhbnl0aGluZyBvdGhlciB0aGFuIEdES19DVVJS
RU5UX1RJTUUgb24gc3ludGhlc2l6ZWQgZXZlbnRzLgorICAgIEdUaW1lVmFsIHRpbWVWYWx1ZTsK
KyAgICBnX2dldF9jdXJyZW50X3RpbWUoJnRpbWVWYWx1ZSk7CisgICAgcmV0dXJuICh0aW1lVmFs
dWUudHZfc2VjICogMTAwMCkgKyAodGltZVZhbHVlLnR2X3VzZWMgLyAxMDAwKTsKK30KKworaW50
IEd0a0NsaWNrQ291bnRlcjo6Y2xpY2tDb3VudEZvckdka0J1dHRvbkV2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCit7CisgICAgZ2ludCBkb3VibGVD
bGlja0Rpc3RhbmNlID0gMjUwOworICAgIGdpbnQgZG91YmxlQ2xpY2tUaW1lID0gNTsKKyAgICBH
dGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2Zvcl9zY3JlZW4oZ3RrX3dp
ZGdldF9nZXRfc2NyZWVuKHdpZGdldCkpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywKKyAg
ICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xpY2stZGlzdGFuY2UiLCAmZG91YmxlQ2xpY2tE
aXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xpY2stdGltZSIsICZkb3Vi
bGVDbGlja1RpbWUsIE5VTEwpOworCisgICAgLy8gR1RLKyBvbmx5IGNvdW50cyB1cCB0byB0cmlw
bGUgY2xpY2tzLCBidXQgV2ViQ29yZSB3YW50cyB0byBrbm93IGFib3V0CisgICAgLy8gcXVhZHJ1
cGxlIGNsaWNrcywgcXVpbnR1cGxlIGNsaWNrcywgYWQgaW5maW5pdHVtLiBIZXJlLCB3ZSByZXBs
aWNhdGUgdGhlCisgICAgLy8gR0RLIGxvZ2ljIGZvciBjb3VudGluZyBjbGlja3MuCisgICAgR2Rr
RXZlbnQqIGV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihidXR0b25FdmVudCkpOwor
ICAgIGd1aW50MzIgZXZlbnRUaW1lID0gZ2V0RXZlbnRUaW1lKGV2ZW50KTsKKworICAgIGlmICgo
ZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RLXzNC
VVRUT05fUFJFU1MpCisgICAgICAgIHx8ICgoYWJzKGJ1dHRvbkV2ZW50LT54IC0gbV9wcmV2aW91
c0NsaWNrUG9pbnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAo
YWJzKGJ1dHRvbkV2ZW50LT55IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJsZUNs
aWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAoZXZlbnRUaW1lIC0gbV9wcmV2aW91c0NsaWNr
VGltZSA8IHN0YXRpY19jYXN0PGd1aW50Pihkb3VibGVDbGlja1RpbWUpKQorICAgICAgICAgICAg
JiYgKGJ1dHRvbkV2ZW50LT5idXR0b24gPT0gbV9wcmV2aW91c0NsaWNrQnV0dG9uKSkpCisgICAg
ICAgIG1fY3VycmVudENsaWNrQ291bnQrKzsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudENs
aWNrQ291bnQgPSAxOworCisgICAgZ2RvdWJsZSB4LCB5OworICAgIGdka19ldmVudF9nZXRfY29v
cmRzKGV2ZW50LCAmeCwgJnkpOworICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQo
eCwgeSk7CisgICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gYnV0dG9uRXZlbnQtPmJ1dHRvbjsK
KyAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gZXZlbnRUaW1lOworCisgICAgcmV0dXJuIG1fY3Vy
cmVudENsaWNrQ291bnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a0NsaWNrQ291bnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY2Y2ExZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNr
Q291bnRlci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYg
R3RrQ2xpY2tDb3VudGVyX2gKKyNkZWZpbmUgR3RrQ2xpY2tDb3VudGVyX2gKKworI2luY2x1ZGUg
IkludFBvaW50LmgiCisKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1
dHRvbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtDbGlja0NvdW50ZXIgewor
cHVibGljOgorICAgIEd0a0NsaWNrQ291bnRlcigpOworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBi
b29sIHNob3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiopOworICAgIGludCBj
bGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qKTsK
KworcHJpdmF0ZToKKyAgICBpbnQgbV9jdXJyZW50Q2xpY2tDb3VudDsKKyAgICBJbnRQb2ludCBt
X3ByZXZpb3VzQ2xpY2tQb2ludDsKKyAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0NsaWNrQnV0
dG9uOworICAgIGludCBtX3ByZXZpb3VzQ2xpY2tUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtE
cmFnQW5kRHJvcEhlbHBlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9w
SGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTdhNjA3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxp
YSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNsaXBi
b2FyZFV0aWxpdGllc0d0ay5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiR3Rr
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlBhc3Rl
Ym9hcmRIZWxwZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RydWN0IERyb3BwaW5nQ29udGV4dCB7CisgICAgRHJvcHBpbmdDb250ZXh0KEdka0Ry
YWdDb250ZXh0KiBnZGtDb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCisgICAgICAg
IDogZ2RrQ29udGV4dChnZGtDb250ZXh0KQorICAgICAgICAsIGRhdGFPYmplY3QoRGF0YU9iamVj
dEd0azo6Y3JlYXRlKCkpCisgICAgICAgICwgbGFzdE1vdGlvblBvc2l0aW9uKHBvc2l0aW9uKQor
ICAgICAgICAsIGRyb3BIYXBwZW5lZChmYWxzZSkKKyAgICAgICAgLCBleGl0ZWRDYWxsYmFjaygw
KQorICAgIHsKKyAgICB9CisKKyAgICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dDsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdDsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBsYXN0TW90aW9uUG9zaXRpb247CisgICAgaW50IHBlbmRpbmdEYXRhUmVxdWVzdHM7
CisgICAgYm9vbCBkcm9wSGFwcGVuZWQ7CisgICAgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENh
bGxiYWNrOworfTsKKwordHlwZWRlZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdD
b250ZXh0Kj4gRHJvcHBpbmdDb250ZXh0TWFwOwordHlwZWRlZiBIYXNoTWFwPEdka0RyYWdDb250
ZXh0KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDsKKwor
R3RrRHJhZ0FuZERyb3BIZWxwZXI6On5HdGtEcmFnQW5kRHJvcEhlbHBlcigpCit7CisgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fZHJvcHBpbmdDb250ZXh0cyk7Cit9CisKK2Jvb2wgR3RrRHJhZ0FuZERy
b3BIZWxwZXI6OmhhbmRsZURyYWdFbmQoR2RrRHJhZ0NvbnRleHQqIGRyYWdDb250ZXh0KQorewor
ICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2lu
Z0RhdGFPYmplY3RzLmZpbmQoZHJhZ0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ry
YWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5yZW1vdmUoaXRlcmF0b3IpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFn
Q29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQg
aW5mbykKK3sKKyAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9
IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9
PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0
YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworfQorCitzdHJ1
Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CisgICAgRHJvcHBpbmdDb250ZXh0KiBjb250ZXh0Owor
ICAgIEd0a0RyYWdBbmREcm9wSGVscGVyKiBnbHVlOworfTsKKworc3RhdGljIGdib29sZWFuIGhh
bmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2soSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSkKK3sK
KyAgICBkYXRhLT5nbHVlLT5oYW5kbGVEcmFnTGVhdmVMYXRlcihkYXRhLT5jb250ZXh0KTsKKyAg
ICBkZWxldGUgZGF0YTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgR3RrRHJhZ0FuZERy
b3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGlu
Z0NvbnRleHRzLmZpbmQoY29udGV4dC0+Z2RrQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09
IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYg
dGhlIHZpZXcgZG9lc24ndCBrbm93IGFib3V0IHRoZSBkcmFnIHlldCAodGhlcmUgYXJlIHN0aWxs
IHBlbmRpbmcgZGF0YSkKKyAgICAvLyByZXF1ZXN0cywgZG9uJ3QgdXBkYXRlIGl0IHdpdGggaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGRyYWcuCisgICAgaWYgKGNvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9
IGNvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShjb250
ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBj
b252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAg
ICAgICAgICAgICAgICAgICAgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgIGNvbnRleHQtPmV4aXRl
ZENhbGxiYWNrKG1fd2lkZ2V0LCAmZHJhZ0RhdGEsIGNvbnRleHQtPmRyb3BIYXBwZW5lZCk7CisK
KyAgICBtX2Ryb3BwaW5nQ29udGV4dHMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICBkZWxldGUgY29u
dGV4dDsKK30KKwordm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdk
a0RyYWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGVkQ2FsbGJhY2sgZXhpdGVkQ2FsbGJh
Y2spCit7CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJv
cHBpbmdDb250ZXh0cy5maW5kKGdka0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ry
b3BwaW5nQ29udGV4dHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIER1cmluZyBh
IGRyb3AgR1RLKyB3aWxsIGZpcmUgYSBkcmFnLWxlYXZlIHNpZ25hbCByaWdodCBiZWZvcmUgZmly
aW5nCisgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9y
IGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCisgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJvcCwg
c28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KKyAgICBIYW5k
bGVEcmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRlckRhdGE7CisgICAgZGF0
YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRD
YWxsYmFjayA9IGV4aXRlZENhbGxiYWNrOworICAgIGRhdGEtPmdsdWUgPSB0aGlzOworICAgIGdf
dGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xl
YXZlTGF0ZXJDYWxsYmFjayksIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBxdWVyeU5ld0Ryb3BD
b250ZXh0RGF0YShEcm9wcGluZ0NvbnRleHQqIGRyb3BDb250ZXh0LCBHdGtXaWRnZXQqIHdpZGdl
dCwgZ3VpbnQgdGltZSkKK3sKKyAgICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCA9IGRyb3BD
b250ZXh0LT5nZGtDb250ZXh0OworICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0
cyhQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNG
b3JDb250ZXh0KHdpZGdldCwgZ2RrQ29udGV4dCkpOworICAgIGRyb3BDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzID0gYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOyBpKyspCisgICAgICAgIGd0a19k
cmFnX2dldF9kYXRhKHdpZGdldCwgZ2RrQ29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSks
IHRpbWUpOworfQorCitEYXRhT2JqZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxl
RHJhZ01vdGlvbihHZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uLCB1bnNpZ25lZCB0aW1lKQoreworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250
ZXh0ID0gMDsKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9k
cm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJv
cHBpbmdDb250ZXh0cy5lbmQoKSkgeworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBuZXcgRHJv
cHBpbmdDb250ZXh0KGNvbnRleHQsIHBvc2l0aW9uKTsKKyAgICAgICAgbV9kcm9wcGluZ0NvbnRl
eHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOworICAgICAgICBxdWVyeU5ld0Ryb3BD
b250ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGRy
b3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247CisgICAgfQorCisg
ICAgLy8gRG9uJ3Qgc2VuZCBhbnkgZHJhZyBpbmZvcm1hdGlvbiB0byBXZWJDb3JlIHVudGlsIHdl
J3ZlIHJldHJpZXZlZCBhbGwKKyAgICAvLyB0aGUgZGF0YSBmb3IgdGhpcyBkcmFnIG9wZXJhdGlv
bi4gT3RoZXJ3aXNlIHdlJ2QgaGF2ZSB0byBibG9jayB0byB3YWl0CisgICAgLy8gZm9yIHRoZSBk
cmFnJ3MgZGF0YS4KKyAgICBBU1NFUlQoZHJvcHBpbmdDb250ZXh0KTsKKyAgICBpZiAoZHJvcHBp
bmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID4gMCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOworfQorCitEYXRh
T2JqZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChH
ZGtEcmFnQ29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwg
dW5zaWduZWQgaW5mbywgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIERyb3BwaW5nQ29udGV4
dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0
KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRl
cmF0b3ItPnZhbHVlOworICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0t
OworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxE
YXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4
dC0+ZGF0YU9iamVjdC5nZXQoKSk7CisKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFRoZSBjb29yZGluYXRl
cyBwYXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCisgICAg
Ly8gaW5hY2N1cmF0ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3Qg
bW90aW9uIGV2ZW50LgorICAgIHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9u
UG9zaXRpb247CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3Rz
LCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICByZXR1cm4gZHJv
cHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOworfQorCitEYXRhT2JqZWN0R3RrKiBHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBp
bmdDb250ZXh0cy5maW5kKGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5n
Q29udGV4dHMuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRHJvcHBpbmdDb250ZXh0
KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgZHJvcHBpbmdDb250ZXh0
LT5kcm9wSGFwcGVuZWQgPSB0cnVlOworCisgICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0
YU9iamVjdC5nZXQoKTsKK30KKwordm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6c3RhcnRlZERy
YWcoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7
CisgICAgbV9kcmFnZ2luZ0RhdGFPYmplY3RzLnNldChjb250ZXh0LCBkYXRhT2JqZWN0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5k
RHJvcEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NGIwMmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVs
cGVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlh
IFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3RrRHJhZ0Fu
ZERyb3BIZWxwZXJfaAorI2RlZmluZSBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCisKKyNpbmNsdWRl
ICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERyb3BwaW5nQ29udGV4dDsKK2NsYXNzIERy
YWdEYXRhOworCit0eXBlZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dpZGdldCos
IERyYWdEYXRhKiwgYm9vbCBkcm9wSGFwcGVuZWQpOworCitjbGFzcyBHdGtEcmFnQW5kRHJvcEhl
bHBlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxwZXIpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgR3RrRHJhZ0FuZERy
b3BIZWxwZXIoKQorICAgICAgICA6IG1fd2lkZ2V0KDApCisgICAgeworICAgIH0KKyAgICB+R3Rr
RHJhZ0FuZERyb3BIZWxwZXIoKTsKKworICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCogd2lk
Z2V0KSB7IG1fd2lkZ2V0ID0gd2lkZ2V0OyB9CisgICAgYm9vbCBoYW5kbGVEcmFnRW5kKEdka0Ry
YWdDb250ZXh0Kik7CisgICAgdm9pZCBoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCos
IEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCBpbmZvKTsKKyAgICB2b2lkIGhhbmRsZURyYWdMZWF2
ZShHZGtEcmFnQ29udGV4dCosIERyYWdFeGl0ZWRDYWxsYmFjayk7CisgICAgdm9pZCBoYW5kbGVE
cmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQqKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBoYW5k
bGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCB1bnNpZ25lZCB0
aW1lKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdD
b250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8sIEludFBvaW50Jik7Cisg
ICAgRGF0YU9iamVjdEd0ayogaGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqKTsKKyAgICB2
b2lkIHN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiwgRGF0YU9iamVjdEd0ayopOworCitwcml2
YXRlOgorICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4
dCosIERyb3BwaW5nQ29udGV4dCo+IG1fZHJvcHBpbmdDb250ZXh0czsKKyAgICBIYXNoTWFwPEdk
a0RyYWdDb250ZXh0KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gbV9kcmFnZ2luZ0RhdGFPYmpl
Y3RzOworfTsKKworfQorCisjZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI5OTgwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtJbnB1dE1ldGhvZEZpbHRl
ci5oIgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcu
aCIKKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisvLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBr
ZXkgZXZlbnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bworLy8gZW1p
dCB0aGlzIGNvZGUgZm9yIHdlYiBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRz
IHRyaWdnZXIKKy8vIGNvbXBvc2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1
aXZhbGVudCwgc28gd2Ugc2VuZCBWb2lkU3ltYm9sCisvLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRm
b3JtS2V5RXZlbnQga25vd3MgdG8gY29udmVydCB0aGlzIGNvZGUgaW50bworLy8gVktfUFJPQ0VT
U0tFWS4KK2NvbnN0IGludCBnQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtfS0VZX1ZvaWRT
eW1ib2w7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0
Q2FsbGJhY2soR3RrSU1Db250ZXh0KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcsIEd0
a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVDb21taXQo
Y29tcG9zaXRpb25TdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnRD
YWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQorewor
ICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRs
ZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0
ZXIqIGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Cit9CisK
K3N0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJ
bnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVu
ZCgpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIEdka1dpbmRvdyogd2lu
ZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgQVNTRVJUKHdpbmRvdyk7
CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5jb250ZXh0KCks
IHdpbmRvdyk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHdGtX
aWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NFUlQoIW1fd2lkZ2V0KTsKKworICAgIG1fd2lkZ2V0
ID0gd2lkZ2V0OworICAgIGlmIChndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRnZXQpKQorICAg
ICAgICBoYW5kbGVXaWRnZXRSZWFsaXplKG1fd2lkZ2V0LCB0aGlzKTsKKyAgICBlbHNlCisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0so
aGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmls
dGVyOjpzZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGN1cnNvclJlY3QpCit7CisgICAgLy8g
RG9uJ3QgbW92ZSB0aGUgd2luZG93IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1v
cmUgdGhhbiAxMAorICAgIC8vIHBpeGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0
aGUgd2luZG93IGZsYXNoIGR1cmluZyBtaW5vcgorICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4K
KyAgICBzdGF0aWMgY29uc3QgaW50IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsK
KyAgICBpZiAoY3Vyc29yUmVjdC5sb2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9s
YXN0Q2FyZUxvY2F0aW9uKSA8IHdpbmRvd01vdmVtZW50VGhyZXNob2xkKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2xhc3RDYXJlTG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7Cisg
ICAgSW50UmVjdCB0cmFuc2xhdGVkUmVjdCA9IGN1cnNvclJlY3Q7CisKKyAgICBBU1NFUlQobV93
aWRnZXQpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dl
dF9hbGxvY2F0aW9uKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgdHJhbnNsYXRlZFJlY3Qu
bW92ZShhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisKKyAgICBHZGtSZWN0YW5nbGUgZ2Rr
Q3Vyc29yUmVjdCA9IGN1cnNvclJlY3Q7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2N1cnNvcl9s
b2NhdGlvbihtX2NvbnRleHQuZ2V0KCksICZnZGtDdXJzb3JSZWN0KTsKK30KKworR3RrSW5wdXRN
ZXRob2RGaWx0ZXI6Okd0a0lucHV0TWV0aG9kRmlsdGVyKCkKKyAgICA6IG1fY3Vyc29yT2Zmc2V0
KDApCisgICAgLCBtX2NvbnRleHQoYWRvcHRHUmVmKGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCkp
KQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fZW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29t
cG9zaW5nVGV4dEN1cnJlbnRseShmYWxzZSkKKyAgICAsIG1fZmlsdGVyaW5nS2V5RXZlbnQoZmFs
c2UpCisgICAgLCBtX3ByZWVkaXRDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9wcmV2ZW50TmV4dENv
bW1pdChmYWxzZSkKKyAgICAsIG1fanVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCisgICAgLCBtX2xh
c3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lkU3ltYm9sKQor
eworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19DQUxM
QkFDSyhoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRp
dFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5n
ZXQoKSwgInByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdENoYW5nZWRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAi
cHJlZWRpdC1lbmQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMp
OworfQorCitHdGtJbnB1dE1ldGhvZEZpbHRlcjo6fkd0a0lucHV0TWV0aG9kRmlsdGVyKCkKK3sK
KyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2Nv
bnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRFbmRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyht
X3dpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRo
aXMpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBtX2VuYWJsZWQgPSBlbmFibGVkOworICAgIGlmIChlbmFibGVkKQorICAg
ICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOworICAgIGVsc2UK
KyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Cit9CisK
K2Jvb2wgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBl
dmVudCkKK3sKKyAgICBpZiAoIWNhbkVkaXQoKSB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1
cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKKworICAgIG1fcHJlZWRpdENoYW5nZWQgPSBm
YWxzZTsKKyAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gdHJ1ZTsKKworICAgIHVuc2lnbmVkIGlu
dCBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRL
ZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOworICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2Rl
V2l0aE5vUmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKKworICAgIGJvb2wgZmlsdGVyZWQg
PSBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7
CisgICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOworCisgICAgYm9vbCBqdXN0U2VudEZh
a2VLZXlVcCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9
IGZhbHNlOworICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtf
S0VZX1JFTEVBU0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gU2ltcGxlIGlucHV0
IG1ldGhvZHMgd29yayBzdWNoIHRoYXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZQor
ICAgIC8vIGNvbW1pdCBzaWduYWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25zIGFuZCB0cmVh
dCB0aGVtIGFzIG5vcm1hbAorICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0
IHN0cmluZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KKyAgICBpZiAoZmlsdGVyZWQgJiYgIW1fY29t
cG9zaW5nVGV4dEN1cnJlbnRseSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uLmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kU2lt
cGxlS2V5RXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24pOworICAgICAgICBtX2Nv
bmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1Mp
IHsKKyAgICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRp
b24uaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRy
dWU7CisgICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMg
PSBldmVudC0+a2V5dmFsOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMo
ZXZlbnQpOworICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAg
ICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZmlsdGVy
ZWQgYSBrZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3VwcHJlc3MK
KyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9pZCBjb25m
dXNpbmcgdGhlIHdlYiBjb250ZW50LgorICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JF
TEVBU0UgJiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBldmVudC0+
a2V5dmFsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBr
ZXlzdHJva2Ugd2FzIGVpdGhlcjoKKyAgICAvLyAxLiBVbmZpbHRlcmVkCisgICAgLy8gMi4gQSBm
aWx0ZXJlZCBrZXl1cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRv
ZXNuJ3QKKyAgICAvLyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBj
b21wb3NpdGlvbiByZXN1bHRzIGJlZm9yZQorICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCisgICAg
Ly8gQm90aCBtaWdodCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgorICAgIC8vCisg
ICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZv
cmUgdGhlIGV2ZW50CisgICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0
IHdheS4gRm9yIGV4YW1wbGUgKHRha2VuIGZyb20KKyAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNl
KSwgdGhlIGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKKyAgICAv
LyB3aGVuIHlvdSBwcmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgorICAgIC8vICAxLiBrZXlk
b3duICdhJyAoZmlsdGVyZWQpCisgICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKKyAg
ICAvLyAgMy4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQorICAgIC8vICA0LiBrZXlkb3duIEJhY2tz
cGFjZSAodW5maWx0ZXJlZCkKKyAgICAvLyAgNS4gY29tbWl0ICJhIgorICAgIC8vICA2LiBwcmVl
ZGl0IGVuZAorICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAg
ICAgIGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQorICAg
ICAgICB1cGRhdGVQcmVlZGl0KCk7CisgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVu
dCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJl
c3MoKQoreworICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEg
c2VsZWN0aW9uIGNoYW5nZSwgd2hpY2gKKyAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53
YW50ZWQgYWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVudAorICAgIC8vIHRoYXQg
Ynkgc2V0dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCisgICAgaWYgKG1f
Y29tcG9zaW5nVGV4dEN1cnJlbnRseSkKKyAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlv
bigpOworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOworICAgIGNhbmNlbENv
bnRleHRDb21wb3NpdGlvbigpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNl
dENvbnRleHQoKQoreworCisgICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJD
b3JlIGNvbXBvc2l0aW9uIGhlcmUsIGluIGNhc2UgdGhlCisgICAgLy8gY29tcG9zaXRpb24gd2Fz
IHNldCBvdXRzaWRlIHRoZSBHVEsrIElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgorICAgIC8v
IGluc3RhbmNlKSBhbmQgd2UgYXJlbid0IHRyYWNraW5nIGl0LgorICAgIGNhbmNlbEN1cnJlbnRD
b21wb3NpdGlvbigpOworCisgICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBj
YW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRl
cjo6Y2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCkKK3sKKyAgICBtX3ByZXZlbnROZXh0Q29tbWl0
ID0gIW1fcHJlZWRpdC5pc0VtcHR5KCk7CisKKyAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2Nv
bnRleHQuZ2V0KCkpOworCisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Cisg
ICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIG1fcHJlZWRpdCA9IFN0cmluZygp
OworICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBHdGtJ
bnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZEluKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0
cnVlOworICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisK
K3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQoreworICAgIGlm
ICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb21wb3NpbmdUZXh0
Q3VycmVudGx5KQorICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgY2Fu
Y2VsQ29udGV4dENvbXBvc2l0aW9uKCk7CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1f
Y29udGV4dC5nZXQoKSk7CisgICAgbV9lbmFibGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3RrSW5w
dXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7CisgICAgY29uZmlybUNvbXBv
c2l0aW9uVGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKKyAgICBtX2NvbmZpcm1lZENvbXBv
c2l0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0
ZVByZWVkaXQoKQoreworICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7
CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0
c1RvU2VuZCByZXN1bHRzVG9TZW5kKQoreworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdk
a19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19D
VVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtl
eUNvZGU7CisgICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtl
eSwgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uID0gU3RyaW5nKCk7CisgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikKKyAg
ICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisKKyAgICBldmVudC0+dHlw
ZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXks
IFN0cmluZygpLCBFdmVudEZha2VkKTsKKyAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gdHJ1ZTsK
K30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIq
IGNvbXBvc2l0aW9uU3RyaW5nKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7Cisg
ICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbmZp
cm1lZENvbXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5n
KSk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtl
eSBldmVudCwganVzdCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBo
YW5kbGluZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8gbGF0ZXIgaG93IHRvIGhh
bmRsZSB0aGlzLgorICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgc2VuZENv
bXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKK30KKwor
dm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKK3sKKyAgICBp
ZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0ID0gIiI7Cit9CisKK3Zv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKK3sKKyAgICBp
ZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxnY2hhcj4gbmV3
UHJlZWRpdDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0
LmdldCgpLCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKKworICAg
IGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRp
dC5nZXQoKSkgPiAwKQorICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0
ID0gU3RyaW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKKyAgICBtX2N1cnNvck9mZnNl
dCA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50
PihtX3ByZWVkaXQubGVuZ3RoKCkpKTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9
ICFtX3ByZWVkaXQuaXNFbXB0eSgpOworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOworCisg
ICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQ
cmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29t
bWl0IHx8ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJlZWRpdCA9IFN0
cmluZygpOworICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0g
dHJ1ZTsKKworICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgdXBkYXRlUHJl
ZWRpdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0
TWV0aG9kRmlsdGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0ODI1MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaApAQCAt
MCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAorI2RlZmluZSBHdGtJbnB1dE1ldGhvZEZpbHRlcl9o
CisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX0d0a0lNQ29udGV4dCBHdGtJTUNvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfR3Rr
V2lkZ2V0IEd0a1dpZGdldDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtJbnB1
dE1ldGhvZEZpbHRlciB7CitwdWJsaWM6CisgICAgR3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKKyAg
ICB+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKKworICAgIGJvb2wgZmlsdGVyS2V5RXZlbnQoR2Rr
RXZlbnRLZXkqKTsKKyAgICB2b2lkIG5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsKKyAgICB2b2lk
IG5vdGlmeUZvY3VzZWRJbigpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOworICAgIHZv
aWQgcmVzZXRDb250ZXh0KCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisgICAgdm9p
ZCBoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpOworICAgIHZvaWQg
aGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKKyAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFydCgpOwor
ICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOworCisgICAgdm9pZCBjb25maXJtQ29tcG9zaXRp
b24oKTsKKyAgICB2b2lkIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworICAgIHZvaWQgdXBk
YXRlUHJlZWRpdCgpOworICAgIHZvaWQgc2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBsb2Nh
dGlvbik7CisKKyAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KKworICAgIGVudW0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIHsKKyAgICAgICAg
RXZlbnRGYWtlZCwKKyAgICAgICAgRXZlbnROb3RGYWtlZAorICAgIH07CisKK3Byb3RlY3RlZDoK
KyAgICBlbnVtIFJlc3VsdHNUb1NlbmQgeworICAgICAgICBQcmVlZGl0ID0gMSA8PCAxLAorICAg
ICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKKyAgICAgICAgUHJlZWRpdEFuZENvbXBvc2l0aW9u
ID0gUHJlZWRpdCArIENvbXBvc2l0aW9uCisgICAgfTsKKworICAgIHZvaWQgc2V0V2lkZ2V0KEd0
a1dpZGdldCopOworICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0cmluZyBldmVudFN0
cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2Vk
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0aW9uLCBF
dmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nIGNvbXBvc2l0aW9uKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JPZmZzZXQpID0gMDsKKworICAgIFdURjo6
U3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9wcmVlZGl0
OworICAgIGludCBtX2N1cnNvck9mZnNldDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlbmRDb21w
b3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsKKworICAg
IEdSZWZQdHI8R3RrSU1Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgR3RrV2lkZ2V0KiBtX3dpZGdl
dDsKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBib29sIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRs
eTsKKyAgICBib29sIG1fZmlsdGVyaW5nS2V5RXZlbnQ7CisgICAgYm9vbCBtX3ByZWVkaXRDaGFu
Z2VkOworICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbW1pdDsKKyAgICBib29sIG1fanVzdFNlbnRG
YWtlS2V5VXA7CisgICAgdW5zaWduZWQgaW50IG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0
aE5vUmVzdWx0czsKKyAgICBJbnRQb2ludCBtX2xhc3RDYXJlTG9jYXRpb247Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGNmMWI2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtQbHVnaW5X
aWRnZXQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkd0a1Zl
cnNpb25pbmcuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3RrUGx1Z2luV2lkZ2V0OjpHdGtQbHVnaW5X
aWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCisgICAgOiBXaWRnZXQod2lkZ2V0KQoreworICAgIGd0
a193aWRnZXRfaGlkZSh3aWRnZXQpOworfQorCitHdGtQbHVnaW5XaWRnZXQ6On5HdGtQbHVnaW5X
aWRnZXQoKQoreworICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoZ3RrX3dp
ZGdldF9nZXRfcGFyZW50KHBsYXRmb3JtV2lkZ2V0KCkpKSwgcGxhdGZvcm1XaWRnZXQoKSk7Cit9
CisKK3ZvaWQgR3RrUGx1Z2luV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBj
b3JlUmVjdCkKK3sKKyAgICAvKiBubyBuZWVkIHRvICovCisgICAgaWYgKCFndGtfd2lkZ2V0X2dl
dF9oYXNfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhwbGF0Zm9ybVdpZGdldCgp
KTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrUmVjdGFuZ2xl
IHJlY3QgPSBjb3JlUmVjdDsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3cs
ICZyZWN0LCBGQUxTRSk7Cit9CisKK3ZvaWQgR3RrUGx1Z2luV2lkZ2V0OjpmcmFtZVJlY3RzQ2hh
bmdlZCgpCit7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgSW50UG9pbnQg
bG9jID0gcGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBH
dGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSB9OworCisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KHBs
YXRmb3JtV2lkZ2V0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlKHBsYXRmb3JtV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1BsdWdpbldpZGdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcz
NzNlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldp
ZGdldC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBHdGtQbHVnaW5XaWRnZXRfaAorI2RlZmluZSBHdGtQbHVnaW5XaWRnZXRfaAorCisjaW5j
bHVkZSAiV2lkZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBHdGtQbHVn
aW5XaWRnZXQgOiBwdWJsaWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEd0a1BsdWdp
bldpZGdldChHdGtXaWRnZXQqKTsKKyAgICAgICAgdmlydHVhbCB+R3RrUGx1Z2luV2lkZ2V0KCk7
CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2
b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a1BvcHVwTWVudS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NmY1N2ExNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBN
ZW51LmNwcApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJD
b3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKworI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ1NlYXJjaFRpbWVvdXRN
cyA9IDEwMDA7CisKK0d0a1BvcHVwTWVudTo6R3RrUG9wdXBNZW51KCkKKyAgICA6IG1fcG9wdXAo
Z3RrX21lbnVfbmV3KCkpCisgICAgLCBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIoMCkKKyAg
ICAsIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSgwKQoreworICAgIG1fa2V5UHJlc3NIYW5k
bGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAuZ2V0KCksICJrZXktcHJlc3MtZXZlbnQi
LCBHX0NBTExCQUNLKEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7
Cit9CisKK0d0a1BvcHVwTWVudTo6fkd0a1BvcHVwTWVudSgpCit7CisgICAgZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0KG1fcG9wdXAuZ2V0KCksIG1fa2V5UHJlc3NIYW5kbGVySUQpOworfQor
Cit2b2lkIEd0a1BvcHVwTWVudTo6Y2xlYXIoKQoreworICAgIGd0a19jb250YWluZXJfZm9yZWFj
aChHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PEd0a0NhbGxi
YWNrPihtZW51UmVtb3ZlSXRlbSksIHRoaXMpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6YXBw
ZW5kU2VwYXJhdG9yKCkKK3sKKyAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX3NlcGFyYXRv
cl9tZW51X2l0ZW1fbmV3KCk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NI
RUxMKG1fcG9wdXAuZ2V0KCkpLCBtZW51SXRlbSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJ
dGVtKTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6OmFwcGVuZEl0ZW0oR3RrQWN0aW9uKiBhY3Rp
b24pCit7CisgICAgR3RrV2lkZ2V0KiBtZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX21lbnVf
aXRlbShhY3Rpb24pOworICAgIGd0a193aWRnZXRfc2V0X3Rvb2x0aXBfdGV4dChtZW51SXRlbSwg
Z3RrX2FjdGlvbl9nZXRfdG9vbHRpcChhY3Rpb24pKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1l
bnVJdGVtLCAic2VsZWN0IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxs
YmFjayksIHRoaXMpOworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTCht
X3BvcHVwLmdldCgpKSwgbWVudUl0ZW0pOworCisgICAgaWYgKGd0a19hY3Rpb25faXNfdmlzaWJs
ZShhY3Rpb24pKQorICAgICAgICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOworfQorCit2b2lk
IEd0a1BvcHVwTWVudTo6cG9wVXAoY29uc3QgSW50U2l6ZSYgbWVudVNpemUsIGNvbnN0IEludFBv
aW50JiBtZW51UG9zaXRpb24sIGludCBpdGVtQ291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0
IEdka0V2ZW50KiBldmVudCkKK3sKKyAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOworICAg
IG1fbWVudVBvc2l0aW9uID0gbWVudVBvc2l0aW9uOworICAgIGd0a19tZW51X3NldF9hY3RpdmUo
R1RLX01FTlUobV9wb3B1cC5nZXQoKSksIHNlbGVjdGVkSXRlbSk7CisKKyAgICAvLyBUaGlzIGFw
cHJvYWNoIGZvbGxvd3MgdGhlIG9uZSBpbiBndGtjb21ib2JveC5jLgorICAgIEd0a1JlcXVpc2l0
aW9uIHJlcXVpc2l0aW9uOworICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVw
LmdldCgpLCAtMSwgLTEpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX3dpZGdl
dF9zaXplX3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uKTsKKyNlbHNlCisgICAg
Z3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9u
LCAwKTsKKyNlbmRpZgorCisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAu
Z2V0KCksIHN0ZDo6bWF4KG1lbnVTaXplLndpZHRoKCksIHJlcXVpc2l0aW9uLndpZHRoKSwgLTEp
OworCisgICAgR0xpc3QqIGNoaWxkcmVuID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RL
X0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSk7CisgICAgR0xpc3QqIHAgPSBjaGlsZHJlbjsKKyAg
ICBpZiAoaXRlbUNvdW50KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbUNvdW50
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID4gc2VsZWN0ZWRJdGVtKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBHdGtXaWRnZXQqIGl0ZW0gPSByZWludGVycHJldF9j
YXN0PEd0a1dpZGdldCo+KHAtPmRhdGEpOworICAgICAgICAgICAgR3RrUmVxdWlzaXRpb24gaXRl
bVJlcXVpc2l0aW9uOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgICAgICAgICBndGtf
d2lkZ2V0X2dldF9jaGlsZF9yZXF1aXNpdGlvbihpdGVtLCAmaXRlbVJlcXVpc2l0aW9uKTsKKyNl
bHNlCisgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShpdGVtLCAmaXRl
bVJlcXVpc2l0aW9uLCAwKTsKKyNlbmRpZgorICAgICAgICAgICAgbV9tZW51UG9zaXRpb24uc2V0
WShtX21lbnVQb3NpdGlvbi55KCkgLSBpdGVtUmVxdWlzaXRpb24uaGVpZ2h0KTsKKworICAgICAg
ICAgICAgcCA9IGdfbGlzdF9uZXh0KHApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkgdGhlIGVtcHR5IHBvcHVwIGluIHRoZSBjb21ibyBib3gg
YXJlYS4KKyAgICAgICAgbV9tZW51UG9zaXRpb24uc2V0WShtX21lbnVQb3NpdGlvbi55KCkgLSBt
ZW51U2l6ZS5oZWlnaHQoKSAvIDIpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZShjaGlsZHJlbik7
CisKKyAgICBndWludCBidXR0b247CisgICAgZ3VpbnQzMiBhY3RpdmF0ZVRpbWU7CisgICAgaWYg
KGV2ZW50KSB7CisgICAgICAgIGJ1dHRvbiA9IGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJF
U1MgPyBldmVudC0+YnV0dG9uLmJ1dHRvbiA6IDE7CisgICAgICAgIGFjdGl2YXRlVGltZSA9IGdk
a19ldmVudF9nZXRfdGltZShldmVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnV0dG9uID0g
MTsKKyAgICAgICAgYWN0aXZhdGVUaW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICB9CisKKyNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGd0a19tZW51X3BvcHVwKEdUS19NRU5VKG1fcG9w
dXAuZ2V0KCkpLCAwLCAwLCByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1l
bnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOworI2Vsc2UK
KyAgICBndGtfbWVudV9wb3B1cF9mb3JfZGV2aWNlKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBl
dmVudCA/IGdka19ldmVudF9nZXRfZGV2aWNlKGV2ZW50KSA6IDAsIDAsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+
KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgMCwgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOwor
I2VuZGlmCit9CisKK3ZvaWQgR3RrUG9wdXBNZW51Ojpwb3BEb3duKCkKK3sKKyAgICBndGtfbWVu
dV9wb3Bkb3duKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICByZXNldFR5cGVBaGVhZEZp
bmRTdGF0ZSgpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6bWVudVJlbW92ZUl0ZW0oR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgIEFTU0VSVChwb3B1
cE1lbnUtPm1fcG9wdXApOworICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIo
cG9wdXBNZW51LT5tX3BvcHVwLmdldCgpKSwgd2lkZ2V0KTsKK30KKwordm9pZCBHdGtQb3B1cE1l
bnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9v
bGVhbiogcHVzaEluLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICAqeCA9IHBvcHVw
TWVudS0+bV9tZW51UG9zaXRpb24ueCgpOworICAgICp5ID0gcG9wdXBNZW51LT5tX21lbnVQb3Np
dGlvbi55KCk7CisgICAgKnB1c2hJbiA9IHRydWU7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51Ojpy
ZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpCit7CisgICAgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJ
dGVtID0gMDsKKyAgICBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIgPSAwOworICAgIG1fY3Vy
cmVudFNlYXJjaFN0cmluZyA9ICIiOworfQorCitib29sIEd0a1BvcHVwTWVudTo6dHlwZUFoZWFk
RmluZChHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgLy8gSWYgd2Ugd2VyZSBnaXZlbiBhIG5v
bi1wcmludGFibGUgY2hhcmFjdGVyIGp1c3Qgc2tpcCBpdC4KKyAgICBndW5pY2hhciB1bmljb2Rl
Q2hhcmFjdGVyID0gZ2RrX2tleXZhbF90b191bmljb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGlm
ICghZ191bmljaGFyX2lzcHJpbnQodW5pY29kZUNoYXJhY3RlcikpIHsKKyAgICAgICAgcmVzZXRU
eXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGdsb25nIGNoYXJhY3RlcnNXcml0dGVuOworICAgIEdPd25QdHI8Z3VuaWNoYXIyPiB1dGYxNlN0
cmluZyhnX3VjczRfdG9fdXRmMTYoJnVuaWNvZGVDaGFyYWN0ZXIsIDEsIDAsICZjaGFyYWN0ZXJz
V3JpdHRlbiwgMCkpOworICAgIGlmICghdXRmMTZTdHJpbmcpIHsKKyAgICAgICAgcmVzZXRUeXBl
QWhlYWRGaW5kU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IElmIHRoZSBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGUg
dXNlciBpcyBwcm9iYWJseSB0cnlpbmcgdG8KKyAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBtZW51
bGlzdCBlbnRyaWVzLiBUaGlzIG1hdGNoZXMgdGhlIFdlYkNvcmUgYmVoYXZpb3IgZm9yIGNvbGxh
cHNlZAorICAgIC8vIG1lbnVsaXN0cy4KKyAgICBib29sIHJlcGVhdGluZ0NoYXJhY3RlciA9IHVu
aWNvZGVDaGFyYWN0ZXIgIT0gbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOworICAgIGlmIChl
dmVudC0+dGltZSAtIG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcCA+IGdTZWFyY2hUaW1lb3V0
TXMpCisgICAgICAgIG1fY3VycmVudFNlYXJjaFN0cmluZyA9IFN0cmluZyhyZWludGVycHJldF9j
YXN0PFVDaGFyKj4odXRmMTZTdHJpbmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbik7CisgICAg
ZWxzZSBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKQorICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJp
bmcuYXBwZW5kKFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJpbmcuZ2V0
KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbikpOworCisgICAgbV9wcmV2aW91c0tleUV2ZW50VGltZXN0
YW1wID0gZXZlbnQtPnRpbWU7CisgICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyID0gdW5p
Y29kZUNoYXJhY3RlcjsKKworICAgIC8vIExpa2UgdGhlIENocm9taXVtIHBvcnQsIHdlIGNhc2Ug
Zm9sZCBiZWZvcmUgc2VhcmNoaW5nLCBiZWNhdXNlIAorICAgIC8vIHN0cm5jbXAgZG9lcyBub3Qg
aGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgIEdPd25QdHI8Z2NoYXI+IHNlYXJjaFN0
cmluZ1dpdGhDYXNlRm9sZGVkKGdfdXRmOF9jYXNlZm9sZChtX2N1cnJlbnRTZWFyY2hTdHJpbmcu
dXRmOCgpLmRhdGEoKSwgLTEpKTsKKyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3RybGVuKHNl
YXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpKTsKKworICAgIEdMaXN0KiBjaGlsZHJlbiA9
IGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSkp
OworICAgIGlmICghY2hpbGRyZW4pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYg
YSBtZW51IGl0ZW0gaGFzIGFscmVhZHkgYmVlbiBzZWxlY3RlZCwgc3RhcnQgc2VhcmNoaW5nIGZy
b20gdGhlIGN1cnJlbnQKKyAgICAvLyBpdGVtIGRvd24gdGhlIGxpc3QuIFRoaXMgd2lsbCBtYWtl
IG11bHRpcGxlIGtleSBwcmVzc2VzIG9mIHRoZSBzYW1lIGNoYXJhY3RlcgorICAgIC8vIGFkdmFu
Y2UgdGhlIHNlbGVjdGlvbi4KKyAgICBHTGlzdCogY3VycmVudENoaWxkID0gY2hpbGRyZW47Cisg
ICAgaWYgKG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSkgeworICAgICAgICBjdXJyZW50Q2hp
bGQgPSBnX2xpc3RfZmluZChjaGlsZHJlbiwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpIHsKKyAgICAgICAgICAgIG1fY3VycmVudGx5U2Vs
ZWN0ZWRNZW51SXRlbSA9IDA7CisgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcGVhdGluZyBjaGFyYWN0ZXJzIHNob3VsZCBpdGVy
YXRlLgorICAgICAgICBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICBpZiAo
R0xpc3QqIG5leHRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCkpCisgICAgICAgICAg
ICAgICAgY3VycmVudENoaWxkID0gbmV4dENoaWxkOworICAgICAgICB9CisgICAgfQorCisgICAg
R0xpc3QqIGZpcnN0Q2hpbGQgPSBjdXJyZW50Q2hpbGQ7CisgICAgZG8geworICAgICAgICBjdXJy
ZW50Q2hpbGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpOworICAgICAgICBpZiAoIWN1cnJl
bnRDaGlsZCkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworCisgICAgICAg
IEdPd25QdHI8Z2NoYXI+IGl0ZW1UZXh0KGdfdXRmOF9jYXNlZm9sZChndGtfbWVudV9pdGVtX2dl
dF9sYWJlbChHVEtfTUVOVV9JVEVNKGN1cnJlbnRDaGlsZC0+ZGF0YSkpLCAtMSkpOworICAgICAg
ICBpZiAoIXN0cm5jbXAoc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCksIGl0ZW1UZXh0
LmdldCgpLCBwcmVmaXhMZW5ndGgpKSB7CisgICAgICAgICAgICBndGtfbWVudV9zaGVsbF9zZWxl
Y3RfaXRlbShHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgR1RLX1dJREdFVChjdXJyZW50
Q2hpbGQtPmRhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGls
ZSAoY3VycmVudENoaWxkICE9IGZpcnN0Q2hpbGQpOworCisgICAgZ19saXN0X2ZyZWUoY2hpbGRy
ZW4pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6c2VsZWN0SXRl
bUNhbGxiYWNrKEd0a01lbnVJdGVtKiBpdGVtLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sK
KyAgICBwb3B1cE1lbnUtPm1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IEdUS19XSURHRVQo
aXRlbSk7Cit9CisKK2dib29sZWFuIEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENhbGxiYWNr
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIEd0a1BvcHVwTWVudSogcG9w
dXBNZW51KQoreworICAgIHJldHVybiBwb3B1cE1lbnUtPnR5cGVBaGVhZEZpbmQoZXZlbnQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a1BvcHVwTWVudS5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZhZDQ0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIEd0a1BvcHVwTWVudV9oCisjZGVmaW5lIEd0a1BvcHVwTWVudV9oCisKKyNpbmNsdWRlICJH
UmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrUG9wdXBNZW51IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShHdGtQb3B1cE1lbnUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3RrUG9wdXBNZW51PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHdGtQb3B1cE1lbnUoKSk7Cisg
ICAgfQorCisgICAgfkd0a1BvcHVwTWVudSgpOworCisgICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybU1l
bnUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwLmdldCgpOyB9CisgICAgdm9pZCBjbGVhcigpOwor
ICAgIHZvaWQgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgdm9pZCBhcHBlbmRJdGVtKEd0a0FjdGlv
biopOworICAgIHZvaWQgcG9wVXAoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFBvaW50JiwgaW50
IGl0ZW1zQ291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2ZW50Kik7CisgICAgdm9p
ZCBwb3BEb3duKCk7CisKK3ByaXZhdGU6CisgICAgR3RrUG9wdXBNZW51KCk7CisKKyAgICB2b2lk
IHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgYm9vbCB0eXBlQWhlYWRGaW5kKEdka0V2
ZW50S2V5Kik7CisKKyAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRl
bSosIEd0a1BvcHVwTWVudSopOworICAgIHN0YXRpYyB2b2lkIG1lbnVQb3NpdGlvbkZ1bmN0aW9u
KEd0a01lbnUqLCBnaW50KiwgZ2ludCosIGdib29sZWFuKiwgR3RrUG9wdXBNZW51Kik7CisgICAg
c3RhdGljIHZvaWQgbWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiwgR3RrUG9wdXBNZW51Kik7Cisg
ICAgc3RhdGljIHZvaWQgc2VsZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiwgR3RrUG9wdXBN
ZW51Kik7CisgICAgc3RhdGljIGdib29sZWFuIGtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRn
ZXQqLCBHZGtFdmVudEtleSosIEd0a1BvcHVwTWVudSopOworCisgICAgR1JlZlB0cjxHdGtXaWRn
ZXQ+IG1fcG9wdXA7CisgICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247CisgICAgU3RyaW5nIG1f
Y3VycmVudFNlYXJjaFN0cmluZzsKKyAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1l
c3RhbXA7CisgICAgdW5zaWduZWQgaW50IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKKyAg
ICBHdGtXaWRnZXQqIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbTsKKyAgICB1bnNpZ25lZCBp
bnQgbV9rZXlQcmVzc0hhbmRsZXJJRDsKK307CisKK30KKworI2VuZGlmIC8vIEd0a1BvcHVwTWVu
dV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzk4YjViYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgorCisjaW5jbHVk
ZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQq
IHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGFjdHVhbGx5IGEgdmVyeSB0cmlja3kgb3BlcmF0aW9uIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGlz
IGZ1bmN0aW9uIHNob3VsZAorICAgIC8vIG9ubHkgYmUgdGhvdWdodCBvZiBhcyBhIGd1ZXNzLiBG
b3IgaW5zdGFuY2UsIHNvbWV0aW1lcyBpdCBtYXkgbm90IGNvcnJlY3RseSB0YWtlIGludG8KKyAg
ICAvLyBhY2NvdW50IHdpbmRvdyBkZWNvcmF0aW9ucy4KKworICAgIEd0a1dpZGdldCogdG9wbGV2
ZWxXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOworICAgIGlmICghdG9w
bGV2ZWxXaWRnZXQgfHwgIWd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWxXaWRnZXQpIHx8
ICFHVEtfSVNfV0lORE9XKHRvcGxldmVsV2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIHBvaW50Owor
CisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codG9wbGV2
ZWxXaWRnZXQpOworICAgIGlmICghZ2RrV2luZG93KQorICAgICAgICByZXR1cm4gcG9pbnQ7CisK
KyAgICBpbnQgeEluV2luZG93LCB5SW5XaW5kb3c7CisgICAgZ3RrX3dpZGdldF90cmFuc2xhdGVf
Y29vcmRpbmF0ZXMod2lkZ2V0LCB0b3BsZXZlbFdpZGdldCwgcG9pbnQueCgpLCBwb2ludC55KCks
ICZ4SW5XaW5kb3csICZ5SW5XaW5kb3cpOworCisgICAgaW50IHdpbmRvd09yaWdpblgsIHdpbmRv
d09yaWdpblk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGdka1dpbmRvdywgJndpbmRvd09y
aWdpblgsICZ3aW5kb3dPcmlnaW5ZKTsKKworICAgIHJldHVybiBJbnRQb2ludCh3aW5kb3dPcmln
aW5YICsgeEluV2luZG93LCB3aW5kb3dPcmlnaW5ZICsgeUluV2luZG93KTsKK30KKworYm9vbCB3
aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
cmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBHVEtfSVNfV0lORE9XKHdp
ZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0
aWVzLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmRkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpZm5kZWYgR3RrVXRpbGl0aWVzX2ggCisjZGVmaW5lIEd0a1V0aWxpdGllc19o
IAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFBvaW50OworCitJbnRQb2ludCBj
b252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEd0a1dpZGdldCosIGNvbnN0IEludFBvaW50
Jik7Citib29sIHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3RrVXRpbGl0aWVzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWMyZjg0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVy
c2lvbmluZy5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIENv
bGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisK
KyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgorI2luY2x1
ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwg
MCkKK3ZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1lbnQqIGFkanVzbWVu
dCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICAgICAgbV9hZGp1c3RtZW50LT52YWx1ZSA9IG1fY3Vy
cmVudFBvczsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChtX2FkanVzdG1l
bnQpOworfQorCit2b2lkIGd0a19hZGp1c3RtZW50X2NvbmZpZ3VyZShHdGtBZGp1c3RtZW50KiBh
ZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxvd2VyLCBnZG91YmxlIHVwcGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwSW5jcmVtZW50LCBnZG91
YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUpCit7CisgICAgZ19vYmplY3RfZnJl
ZXplX25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7CisKKyAgICBnX29iamVjdF9zZXQoYWRq
dXN0bWVudCwKKyAgICAgICAgICAgICAgICAgImxvd2VyIiwgbG93ZXIsCisgICAgICAgICAgICAg
ICAgICJ1cHBlciIsIHVwcGVyLAorICAgICAgICAgICAgICAgICAic3RlcC1pbmNyZW1lbnQiLCBz
dGVwSW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAicGFnZS1pbmNyZW1lbnQiLCBwYWdlSW5j
cmVtZW50LAorICAgICAgICAgICAgICAgICAicGFnZS1zaXplIiwgcGFnZVNpemUsCisgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgZ19vYmplY3RfdGhhd19ub3RpZnkoR19PQkpFQ1QoYWRq
dXN0bWVudCkpOworCisgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGp1c3RtZW50KTsKKyAg
ICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKGFkanVzdG1lbnQpOworfQorI2VuZGlmCisK
K0dka0RldmljZSAqZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2luZG93KiB3aW5kb3cp
Cit7CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR2RrRGV2aWNlTWFuYWdlciAqbWFu
YWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlz
cGxheSh3aW5kb3cpKTsKKyAgICByZXR1cm4gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRf
cG9pbnRlcihtYW5hZ2VyKTsKKyNlbHNlCisgICAgcmV0dXJuIGdka19kZXZpY2VfZ2V0X2NvcmVf
cG9pbnRlcigpOworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCit9CisKKyNpZiAhR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTcsIDMpCit2b2lkIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKEdk
a1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQgeSwgZ2ludCogcm9vdFgsIGdpbnQqIHJvb3RZ
KQoreworICAgIGdka193aW5kb3dfZ2V0X3Jvb3Rfb3JpZ2luKHdpbmRvdywgcm9vdFgsIHJvb3RZ
KTsKKyAgICAqcm9vdFggPSAqcm9vdFggKyB4OworICAgICpyb290WSA9ICpyb290WSArIHk7Cit9
CisjZW5kaWYKKworR2RrQ3Vyc29yICogYmxhbmtDdXJzb3IoKQoreworI2lmIEdUS19DSEVDS19W
RVJTSU9OKDIsIDE2LCAwKQorICAgIHJldHVybiBnZGtfY3Vyc29yX25ldyhHREtfQkxBTktfQ1VS
U09SKTsKKyNlbHNlCisgICAgR2RrQ3Vyc29yICogY3Vyc29yOworICAgIEdka1BpeG1hcCAqIHNv
dXJjZTsKKyAgICBHZGtQaXhtYXAgKiBtYXNrOworICAgIEdka0NvbG9yIGZvcmVncm91bmQgPSB7
IDAsIDY1NTM1LCAwLCAwIH07IC8vIFJlZC4KKyAgICBHZGtDb2xvciBiYWNrZ3JvdW5kID0geyAw
LCAwLCAwLCA2NTUzNSB9OyAvLyBCbHVlLgorICAgIHN0YXRpYyBnY2hhciBjdXJzb3JCaXRzW10g
PSB7MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDB9OworCisgICAgc291cmNl
ID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMsIDgsIDgpOworICAg
IG1hc2sgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29yQml0cywgOCwgOCk7
CisgICAgY3Vyc29yID0gZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhtYXAoc291cmNlLCBtYXNrLCAm
Zm9yZWdyb3VuZCwgJmJhY2tncm91bmQsIDgsIDgpOworICAgIGdka19waXhtYXBfdW5yZWYoc291
cmNlKTsKKyAgICBnZGtfcGl4bWFwX3VucmVmKG1hc2spOworICAgIHJldHVybiBjdXJzb3I7Cisj
ZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCit9CisKKyNpZiAhR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTYsIDApCitjb25zdCBnY2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwo
R3RrTWVudUl0ZW0qIG1lbnVJdGVtKQoreworICAgIEd0a1dpZGdldCAqIGxhYmVsID0gZ3RrX2Jp
bl9nZXRfY2hpbGQoR1RLX0JJTihtZW51SXRlbSkpOworICAgIGlmIChHVEtfSVNfTEFCRUwobGFi
ZWwpKQorICAgICAgICByZXR1cm4gZ3RrX2xhYmVsX2dldF90ZXh0KEdUS19MQUJFTChsYWJlbCkp
OworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAw
KQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBjYWlyb19mb3JtYXRfdAorZ2Rr
X2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChjYWlyb19jb250ZW50X3QgY29udGVudCkKK3sKKyAg
ICBzd2l0Y2ggKGNvbnRlbnQpIHsKKyAgICBjYXNlIENBSVJPX0NPTlRFTlRfQ09MT1I6CisgICAg
ICAgIHJldHVybiBDQUlST19GT1JNQVRfUkdCMjQ7CisgICAgY2FzZSBDQUlST19DT05URU5UX0FM
UEhBOgorICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0E4OworICAgIGNhc2UgQ0FJUk9fQ09O
VEVOVF9DT0xPUl9BTFBIQToKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQ0FJUk9fRk9S
TUFUX0FSR0IzMjsKKyAgICB9Cit9CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqCitnZGtfY2Fp
cm9fc3VyZmFjZV9jb2VyY2VfdG9faW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KQoreworICAgIGNhaXJvX3N1cmZhY2Vf
dCAqIGNvcHk7CisgICAgY2Fpcm9fdCAqIGNyOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0
X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCisgICAgICAgICYmIGNh
aXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gY29udGVudAorICAgICAgICAmJiBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSA+PSB3aWR0aAorICAgICAgICAm
JiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkgPj0gaGVpZ2h0KQorICAg
ICAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7CisKKyAgICBjb3B5
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVu
dChjb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7CisKKyAgICBj
ciA9IGNhaXJvX2NyZWF0ZShjb3B5KTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJm
YWNlLCAwLCAwKTsKKyAgICBjYWlyb19wYWludChjcik7CisgICAgY2Fpcm9fZGVzdHJveShjcik7
CisKKyAgICByZXR1cm4gY29weTsKK30KKworc3RhdGljIHZvaWQKK2NvbnZlcnRfYWxwaGEoZ3Vj
aGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLAorICAgICAgICAgICAgICBndWNoYXIgKiBz
cmNEYXRhLCBpbnQgc3JjU3RyaWRlLAorICAgICAgICAgICAgICBpbnQgc3JjWCwgaW50IHNyY1ks
IGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIHNyY0RhdGEg
Kz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1kgKiA0OworCisgICAgZm9yICh5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKSB7CisgICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBzcmNEYXRh
OworCisgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBn
dWludCBhbHBoYSA9IHNyY1t4XSA+PiAyNDsKKworICAgICAgICAgICAgaWYgKCFhbHBoYSkgewor
ICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAwOworICAgICAgICAgICAgICAg
IGRlc3REYXRhW3ggKiA0ICsgMV0gPSAwOworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0
ICsgMl0gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXN0RGF0
YVt4ICogNCArIDBdID0gKCgoc3JjW3hdICYgMHhmZjAwMDApID4+IDE2KSAqIDI1NSArIGFscGhh
IC8gMikgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDFdID0gKCgo
c3JjW3hdICYgMHgwMGZmMDApID4+ICA4KSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKKyAg
ICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0gKCgoc3JjW3hdICYgMHgwMDAwZmYp
ID4+ICAwKSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlc3REYXRhW3ggKiA0ICsgM10gPSBhbHBoYTsKKyAgICAgICAgfQorCisgICAgICAg
IHNyY0RhdGEgKz0gc3JjU3RyaWRlOworICAgICAgICBkZXN0RGF0YSArPSBkZXN0U3RyaWRlOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQKK2NvbnZlcnRfbm9fYWxwaGEoZ3VjaGFyICogZGVzdERh
dGEsIGludCBkZXN0U3RyaWRlLCBndWNoYXIgKiBzcmNEYXRhLAorICAgICAgICAgICAgICAgICBp
bnQgc3JjU3RyaWRlLCBpbnQgc3JjWCwgaW50IHNyY1ksCisgICAgICAgICAgICAgICAgIGludCB3
aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIHNyY0RhdGEgKz0gc3Jj
U3RyaWRlICogc3JjWSArIHNyY1ggKiA0OworCisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKSB7CisgICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBzcmNEYXRhOworCisg
ICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBkZXN0RGF0
YVt4ICogMyArIDBdID0gc3JjW3hdID4+IDE2OworICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMg
KyAxXSA9IHNyY1t4XSA+PiAgODsKKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiAzICsgMl0gPSBz
cmNbeF07CisgICAgICAgIH0KKworICAgICAgICBzcmNEYXRhICs9IHNyY1N0cmlkZTsKKyAgICAg
ICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsKKyAgICB9Cit9CisKKy8qKgorICogZ2RrX3BpeGJ1
Zl9nZXRfZnJvbV9zdXJmYWNlOgorICogQHN1cmZhY2U6IHN1cmZhY2UgdG8gY29weSBmcm9tCisg
KiBAc3JjX3g6IFNvdXJjZSBYIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCisgKiBAc3JjX3k6
IFNvdXJjZSBZIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCisgKiBAd2lkdGg6IFdpZHRoIGlu
IHBpeGVscyBvZiByZWdpb24gdG8gZ2V0CisgKiBAaGVpZ2h0OiBIZWlnaHQgaW4gcGl4ZWxzIG9m
IHJlZ2lvbiB0byBnZXQKKyAqCisgKiBUcmFuc2ZlcnMgaW1hZ2UgZGF0YSBmcm9tIGEgI2NhaXJv
X3N1cmZhY2VfdCBhbmQgY29udmVydHMgaXQgdG8gYW4gUkdCKEEpCisgKiByZXByZXNlbnRhdGlv
biBpbnNpZGUgYSAjR2RrUGl4YnVmLiBUaGlzIGFsbG93cyB5b3UgdG8gZWZmaWNpZW50bHkgcmVh
ZAorICogaW5kaXZpZHVhbCBwaXhlbHMgZnJvbSBjYWlybyBzdXJmYWNlcy4gRm9yICNHZGtXaW5k
b3dzLCB1c2UKKyAqIGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KCkgaW5zdGVhZC4KKyAqCisg
KiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGFuIFJHQiBwaXhidWYgd2l0aCA4IGJpdHMgcGVy
IGNoYW5uZWwuIFRoZSBwaXhidWYKKyAqIHdpbGwgY29udGFpbiBhbiBhbHBoYSBjaGFubmVsIGlm
IHRoZSBAc3VyZmFjZSBjb250YWlucyBvbmUuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNm
ZXIgZnVsbCk6IEEgbmV3bHktY3JlYXRlZCBwaXhidWYgd2l0aCBhIHJlZmVyZW5jZSBjb3VudAor
ICogb2YgMSwgb3IgJU5VTEwgb24gZXJyb3IKKyAqKi8KK0dka1BpeGJ1ZioKK2dka19waXhidWZf
Z2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QgKiBzdXJmYWNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgY2Fpcm9fY29udGVudF90IGNv
bnRlbnQ7CisgICAgR2RrUGl4YnVmICogZGVzdDsKKworICAgIC8qIEdlbmVyYWwgc2FuaXR5IGNo
ZWNrcyAqLworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN1cmZhY2UsIE5VTEwpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNyY1ggPj0gMCAmJiBzcmNZID49IDAsIE5VTEwpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBOVUxMKTsKKworICAg
IGNvbnRlbnQgPSBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpIHwgQ0FJUk9fQ09O
VEVOVF9DT0xPUjsKKyAgICBkZXN0ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0VfUkdC
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAhIShjb250ZW50ICYgQ0FJUk9fQ09OVEVOVF9B
TFBIQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoLCBoZWlnaHQpOworCisgICAgc3VyZmFjZSA9IGdka19jYWlyb19zdXJmYWNl
X2NvZXJjZV90b19pbWFnZShzdXJmYWNlLCBjb250ZW50LCBzcmNYICsgd2lkdGgsIHNyY1kgKyBo
ZWlnaHQpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7CisgICAgaWYgKGNhaXJv
X3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpIHx8ICFkZXN0KSB7CisgICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
aWYgKGdka19waXhidWZfZ2V0X2hhc19hbHBoYShkZXN0KSkKKyAgICAgICAgY29udmVydF9hbHBo
YShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgIGdk
a19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAorICAgICAgICAgICAg
ICAgICAgICAgICBzcmNYLCBzcmNZLAorICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnZlcnRfbm9fYWxwaGEoZ2RrX3BpeGJ1Zl9nZXRf
cGl4ZWxzKGRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVmX2dldF9y
b3dzdHJpZGUoZGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjWCwgc3JjWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdo
dCk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CisgICAgcmV0dXJuIGRl
c3Q7Cit9CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKK3ZvaWQgZ2V0R2RrRHJh
d2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChHREtfSVNfUElYTUFQKGRyYXdhYmxlKSB8fCBHREtf
SVNfV0lORE9XKGRyYXdhYmxlKSk7CisKKyAgICBpZiAoR0RLX0lTX1BJWE1BUChkcmF3YWJsZSkp
IHsKKyAgICAgICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShHREtfUElYTUFQKGRyYXdhYmxlKSwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHZGtXaW5kb3cgKndp
bmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOworICAgICp3aWR0aCA9IGdka193aW5kb3dfZ2V0
X3dpZHRoKHdpbmRvdyk7CisgICAgKmhlaWdodCA9IGdka193aW5kb3dfZ2V0X2hlaWdodCh3aW5k
b3cpOworfQorI2Vsc2UKK3ZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3
YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQpCit7CisgICAgZ2RrX2RyYXdhYmxlX2dldF9z
aXplKGRyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyNCwgMCkKKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisKKyNpZiAhR0xJ
Ql9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQorZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11bGF0b3Jf
Zmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKmludm9jYXRpb25IaW50LCBHVmFsdWUg
KnJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUgKmhhbmRsZXJSZXR1cm4sIGdwb2ludGVy
IGRhdGEpCit7CisgICAgZ192YWx1ZV9jb3B5KGhhbmRsZXJSZXR1cm4sIHJldHVybkFjY3VtdWxh
dG9yKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKworI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMiwgMCkKK2NhaXJvX3N1cmZhY2VfdCAqZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxh
cl9zdXJmYWNlKEdka1dpbmRvdyAqd2luZG93LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGNhaXJvX3QgKmNhaXJvQ29udGV4dCA9IGdka19j
YWlyb19jcmVhdGUod2luZG93KTsKKyAgICBjYWlyb19zdXJmYWNlX3QgKmNhaXJvU3VyZmFjZSA9
IGNhaXJvX2dldF90YXJnZXQoY2Fpcm9Db250ZXh0KTsKKyAgICBjYWlyb19zdXJmYWNlX3QgKm5l
d1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFyKGNhaXJvU3VyZmFjZSwgY29u
dGVudCwgd2lkdGgsIGhlaWdodCk7CisgICAgY2Fpcm9fZGVzdHJveShjYWlyb0NvbnRleHQpOwor
ICAgIHJldHVybiBuZXdTdXJmYWNlOworfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIs
IDIyLCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCisjaWZkZWYgR0RLX1dJ
TkRPV0lOR19YMTEKK3N0YXRpYyBpbnQgZ2V0U2NyZWVuQ3VycmVudERlc2t0b3AoR2RrU2NyZWVu
ICpzY3JlZW4pCit7CisgICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZ
KGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7CisgICAgV2luZG93IHJvb3RXaW5kb3cg
PSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBHREtfU0NSRUVOX1hOVU1CRVIoc2NyZWVuKSk7CisgICAg
QXRvbSBjdXJyZW50RGVza3RvcCA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX0NVUlJFTlRf
REVTS1RPUCIsIFRydWUpOworCisgICAgQXRvbSB0eXBlOworICAgIGludCBmb3JtYXQ7CisgICAg
dW5zaWduZWQgbG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOworICAgIHVuc2lnbmVkIGNoYXIg
KnJldHVybmVkRGF0YSA9IE5VTEw7CisgICAgWEdldFdpbmRvd1Byb3BlcnR5KGRpc3BsYXksIHJv
b3RXaW5kb3csIGN1cnJlbnREZXNrdG9wLCAwLCBHX01BWExPTkcsIEZhbHNlLCBYQV9DQVJESU5B
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZpdGVtc0NvdW50LCAm
Ynl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7CisKKyAgICBpbnQgd29ya3NwYWNlID0gMDsKKyAg
ICBpZiAodHlwZSA9PSBYQV9DQVJESU5BTCAmJiBmb3JtYXQgPT0gMzIgJiYgaXRlbXNDb3VudCA+
IDApCisgICAgICAgIHdvcmtzcGFjZSA9IChpbnQpcmV0dXJuZWREYXRhWzBdOworCisgICAgaWYg
KHJldHVybmVkRGF0YSkKKyAgICAgICAgWEZyZWUocmV0dXJuZWREYXRhKTsKKworICAgIHJldHVy
biB3b3Jrc3BhY2U7Cit9CisKK3N0YXRpYyB2b2lkIGdldFNjcmVlbldvcmtBcmVhKEdka1NjcmVl
biAqc2NyZWVuLCBHZGtSZWN0YW5nbGUgKmFyZWEpCit7CisgICAgRGlzcGxheSAqZGlzcGxheSA9
IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7Cisg
ICAgQXRvbSB3b3JrQXJlYSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX1dPUktBUkVBIiwg
VHJ1ZSk7CisKKyAgICAvKiBEZWZhdWx0cyBpbiBjYXNlIG9mIGVycm9yLiAqLworICAgIGFyZWEt
PnggPSAwOworICAgIGFyZWEtPnkgPSAwOworICAgIGFyZWEtPndpZHRoID0gZ2RrX3NjcmVlbl9n
ZXRfd2lkdGgoc2NyZWVuKTsKKyAgICBhcmVhLT5oZWlnaHQgPSBnZGtfc2NyZWVuX2dldF9oZWln
aHQoc2NyZWVuKTsKKworICAgIGlmICh3b3JrQXJlYSA9PSBOb25lKQorICAgICAgICByZXR1cm47
CisKKyAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3BsYXksIEdES19TQ1JF
RU5fWE5VTUJFUihzY3JlZW4pKTsKKyAgICBBdG9tIHR5cGU7CisgICAgaW50IGZvcm1hdDsKKyAg
ICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7CisgICAgdW5zaWduZWQgY2hh
ciAqcmV0dXJuZWREYXRhID0gMDsKKyAgICBpbnQgcmVzdWx0ID0gWEdldFdpbmRvd1Byb3BlcnR5
KGRpc3BsYXksIHJvb3RXaW5kb3csIHdvcmtBcmVhLCAwLCA0ICogMzIgLyogTWF4IGxlbmd0aCAq
LywgRmFsc2UsIEFueVByb3BlcnR5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRlbXNDb3VudCwgJmJ5dGVzQWZ0ZXIsICZyZXR1cm5l
ZERhdGEpOworICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcyB8fCB0eXBlID09IE5vbmUgfHwgIWZv
cm1hdCB8fCBieXRlc0FmdGVyIHx8IGl0ZW1zQ291bnQgJSA0KQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnQgZGVza3RvcCA9IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKHNjcmVlbik7CisgICAg
bG9uZyAqd29ya0FyZWFzID0gKGxvbmcgKilyZXR1cm5lZERhdGE7CisgICAgYXJlYS0+eCA9IHdv
cmtBcmVhc1tkZXNrdG9wICogNF07CisgICAgYXJlYS0+eSA9IHdvcmtBcmVhc1tkZXNrdG9wICog
NCArIDFdOworICAgIGFyZWEtPndpZHRoID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMl07Cisg
ICAgYXJlYS0+aGVpZ2h0ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgM107CisKKyAgICBYRnJl
ZShyZXR1cm5lZERhdGEpOworfQorI2VuZGlmIC8vIEdES19XSU5ET1dJTkdfWDExCisKK3ZvaWQg
Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKnNjcmVlbiwgaW50IG1v
bml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9y
X2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgYXJlYSk7CisKKyNpZmRlZiBHREtfV0lORE9XSU5H
X1gxMQorICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBnZXRTY3JlZW5Xb3JrQXJlYShz
Y3JlZW4sICZ3b3JrQXJlYSk7CisgICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJndvcmtBcmVh
LCBhcmVhLCBhcmVhKTsKKyNlbmRpZgorfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMs
IDMsIDYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmMwMzllZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a1ZlcnNpb25pbmcuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwg
Uy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0a1ZlcnNpb25pbmdfaAorI2RlZmluZSBHdGtWZXJz
aW9uaW5nX2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLWNvbXBhdC5oPgorI2VuZGlmCisKK0dfQkVH
SU5fREVDTFMKKworLy8gTWFjcm9zIHRvIGF2b2lkIGRlcHJlY2F0aW9uIGNoZWNraW5nIGNodXJu
CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisjZGVmaW5lIEdES19XSU5ET1dfWFdJTkRPVyh3
aW5kb3cpIChnZGtfeDExX3dpbmRvd19nZXRfeGlkKHdpbmRvdykpCisjZWxzZQorR2RrUGl4YnVm
KiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBp
bnQgc3JjWCwgaW50IHNyY1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJh
d2FibGUqIGRyYXdhYmxlLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7CisjZW5kaWYKKworI2lm
ICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgNCkKKyNkZWZpbmUgZ2RrX3BpeG1hcF9nZXRfc2l6
ZSBnZGtfZHJhd2FibGVfZ2V0X3NpemUKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAy
MywgNCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKKyNkZWZpbmUgZ2RrX3dp
bmRvd19nZXRfZGlzcGxheSh3aW5kb3cpIGdka19kcmF3YWJsZV9nZXRfZGlzcGxheSh3aW5kb3cp
CisjZGVmaW5lIGdka193aW5kb3dfZ2V0X3Zpc3VhbCBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbAor
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCAwKQorCisjaWYgIUdUS19DSEVDS19W
RVJTSU9OKDIsIDIyLCAwKQorY2Fpcm9fc3VyZmFjZV90KiBnZGtfd2luZG93X2NyZWF0ZV9zaW1p
bGFyX3N1cmZhY2UoR2RrV2luZG93KiB3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIy
LCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQorI2RlZmluZSBnZGtfdmlz
dWFsX2dldF9kZXB0aCh2aXN1YWwpICh2aXN1YWwpLT5kZXB0aAorI2RlZmluZSBnZGtfdmlzdWFs
X2dldF9iaXRzX3Blcl9yZ2IodmlzdWFsKSAodmlzdWFsKS0+Yml0c19wZXJfcmdiCisjZGVmaW5l
IGdka19kcmFnX2NvbnRleHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSAoY29udGV4dCkt
PmFjdGlvbgorI2RlZmluZSBnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpIChj
b250ZXh0KS0+YWN0aW9ucworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQor
CisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X2dl
dF9yZWFsaXplZCh3aWRnZXQpIEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQorI2RlZmluZSBn
dGtfd2lkZ2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdT
KCh3aWRnZXQpLCBHVEtfUkVBTElaRUQpCisjZGVmaW5lIGd0a19yYW5nZV9nZXRfbWluX3NsaWRl
cl9zaXplKHJhbmdlKSAocmFuZ2UpLT5taW5fc2xpZGVyX3NpemUKKyNlbmRpZiAvLyBHVEtfQ0hF
Q0tfVkVSU0lPTigyLCAyMCwgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkK
KyNkZWZpbmUgZ3RrX3dpZGdldF9pc190b3BsZXZlbCh3aWRnZXQpIEdUS19XSURHRVRfVE9QTEVW
RUwod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpIEdUS19X
SURHRVRfUkVBTElaRUQod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93
KHdpZGdldCkgIUdUS19XSURHRVRfTk9fV0lORE9XKHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdl
dF9nZXRfY2FuX2ZvY3VzKHdpZGdldCkgR1RLX1dJREdFVF9DQU5fRk9DVVMod2lkZ2V0KQorI2Rl
ZmluZSBndGtfd2lkZ2V0X2lzX3NlbnNpdGl2ZSh3aWRnZXQpIEdUS19XSURHRVRfSVNfU0VOU0lU
SVZFKHdpZGdldCkKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKKworI2lm
ICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfdmlz
aWJsZSh3aWRnZXQsIEZBTFNFKSBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtf
VklTSUJMRSkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3aWRnZXQpIChHVEtfV0lE
R0VUX0ZMQUdTKHdpZGdldCkgJiBHVEtfVklTSUJMRSkKKworI2RlZmluZSBndGtfd2lkZ2V0X3Nl
dF93aW5kb3cod2lkZ2V0LCBuZXdfd2luZG93KSAod2lkZ2V0KS0+d2luZG93ID0gKG5ld193aW5k
b3cpCisjZGVmaW5lIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh3aWRnZXQsIFRSVUUpIEdUS19X
SURHRVRfU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfQ0FOX0ZPQ1VTKQorI2RlZmluZSBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgqKGFsbG9jKSA9ICh3aWRnZXQpLT5h
bGxvY2F0aW9uKQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxs
b2MpICgod2lkZ2V0KS0+YWxsb2NhdGlvbiA9ICooYWxsb2MpKQorI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDIsIDE4LCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQor
dm9pZCBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4
LCBnaW50IHksIGdpbnQqIHJvb3RYLCBnaW50KiByb290WSk7CisjZW5kaWYgLy8gR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTcsIDMpCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCitj
b25zdCBnY2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKKyNlbmRp
ZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKKworCisjaWYgIUdUS19DSEVDS19WRVJT
SU9OKDIsIDE0LCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAod2lk
Z2V0KS0+d2luZG93CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChhZGop
LT52YWx1ZQorI2RlZmluZSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAoZGlh
bG9nKS0+dmJveAorI2RlZmluZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpIChk
aWFsb2cpLT5hY3Rpb25fYXJlYQorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0
aChkYXRhKSAoZGF0YSktPmxlbmd0aAorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2Rh
dGEoZGF0YSkgKGRhdGEpLT5kYXRhCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFy
Z2V0KGRhdGEpIChkYXRhKS0+dGFyZ2V0CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9wYWdl
X3NpemUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKKyNkZWZp
bmUgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFsdWUg
PSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3VmFs
dWUpICgoYWRqKS0+bG93ZXIgPSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0
X3VwcGVyKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKKwordm9pZCBn
dGtfYWRqdXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2RvdWJs
ZSB2YWx1ZSwgZ2RvdWJsZSBsb3dlciwgZ2RvdWJsZSB1cHBlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdkb3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50
LCBnZG91YmxlIHBhZ2VTaXplKTsKKwordm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3Rr
QWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKTsKKyNlbmRpZiAvLyBHVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxNCwgMCkKKworR2RrRGV2aWNlKiBnZXREZWZhdWx0R0RLUG9pbnRlckRl
dmljZShHZGtXaW5kb3cqIHdpbmRvdyk7CitHZGtDdXJzb3IqIGJsYW5rQ3Vyc29yKCk7CisKKyNp
ZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQorZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11
bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQqIGludm9jYXRpb25IaW50LCBH
VmFsdWUqIHJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdw
b2ludGVyIGRhdGEpOworI2VuZGlmCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikK
K3ZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKiwgaW50IG1v
bml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSk7CisjZW5kaWYKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8vIEd0a1ZlcnNpb25pbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9H
dGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRn
ZXRCYWNraW5nU3RvcmVYMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjYwMzc2YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1dpZGdl
dEJhY2tpbmdTdG9yZVgxMS5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0QmFja2luZ1N0b3JlLmgiCisKKyNp
bmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNs
dWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxjYWly
by5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKK3B1YmxpYzoKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7CisgICAgUGl4bWFwIG1fcGl4bWFw
OworICAgIEdDIG1fZ2M7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwor
CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZT4gY3JlYXRl
KEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKHdpZGdldCwgc2l6
ZSkpOworICAgIH0KKworICAgIH5XaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKCkKKyAgICB7Cisg
ICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV9waXhtYXApOworICAgICAgICBYRnJlZUdD
KG1fZGlzcGxheSwgbV9nYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFdlIGtlZXAgdHdv
IGNvcGllcyBvZiB0aGUgc3VyZmFjZSBoZXJlLCB3aGljaCB3aWxsIGRvdWJsZSB0aGUgbWVtb3J5
IHVzYWdlLCBidXQgaW5jcmVhc2UKKyAgICAvLyBzY3JvbGxpbmcgcGVyZm9ybWFuY2Ugc2luY2Ug
d2UgZG8gbm90IGhhdmUgdG8ga2VlcCByZWFsbG9jYXRpbmcgYSBtZW1vcnkgcmVnaW9uIGR1cmlu
ZworICAgIC8vIHF1aWNrIHNjcm9sbGluZyByZXF1ZXN0cy4KKyAgICBXaWRnZXRCYWNraW5nU3Rv
cmVQcml2YXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsK
KyAgICAgICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwod2lkZ2V0
KTsKKyAgICAgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfdmlzdWFsX2dldF9zY3JlZW4odmlz
dWFsKTsKKyAgICAgICAgbV9kaXNwbGF5ID0gR0RLX1NDUkVFTl9YRElTUExBWShzY3JlZW4pOwor
ICAgICAgICBtX3BpeG1hcCA9IFhDcmVhdGVQaXhtYXAobV9kaXNwbGF5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0RLX1dJTkRPV19YSUQoZ2RrX3NjcmVlbl9nZXRfcm9vdF93
aW5kb3coc2NyZWVuKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
ZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpKTsKKyAgICAgICAgbV9nYyA9IFhDcmVhdGVHQyht
X2Rpc3BsYXksIG1fcGl4bWFwLCAwLCAwKTsKKworICAgICAgICBtX3N1cmZhY2UgPSBhZG9wdFJl
ZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbV9waXhtYXAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX1ZJU1VB
TF9YVklTVUFMKHZpc3VhbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgfQor
fTsKKworUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IFdpZGdldEJhY2tpbmdTdG9yZTo6
Y3JlYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlKHdpZGdldCwgc2l6ZSkpOworfQor
CitXaWRnZXRCYWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdpZGdl
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fcHJpdmF0ZShXaWRnZXRCYWNraW5nU3Rv
cmVQcml2YXRlOjpjcmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQorewor
fQorCitXaWRnZXRCYWNraW5nU3RvcmU6On5XaWRnZXRCYWNraW5nU3RvcmUoKQoreworfQorCitj
YWlyb19zdXJmYWNlX3QqIFdpZGdldEJhY2tpbmdTdG9yZTo6Y2Fpcm9TdXJmYWNlKCkKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgV2lkZ2V0QmFj
a2luZ1N0b3JlOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6
ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIEludFJlY3QgdGFyZ2V0UmVjdChzY3JvbGxSZWN0KTsK
KyAgICB0YXJnZXRSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KTsKKyAgICB0YXJnZXRSZWN0LmludGVy
c2VjdChzY3JvbGxSZWN0KTsKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9wcml2YXRlLT5tX3N1cmZhY2Uu
Z2V0KCkpOworICAgIFhDb3B5QXJlYShtX3ByaXZhdGUtPm1fZGlzcGxheSwgbV9wcml2YXRlLT5t
X3BpeG1hcCwgbV9wcml2YXRlLT5tX3BpeG1hcCwgbV9wcml2YXRlLT5tX2djLCAKKyAgICAgICAg
ICAgICAgdGFyZ2V0UmVjdC54KCkgLSBzY3JvbGxPZmZzZXQud2lkdGgoKSwgdGFyZ2V0UmVjdC55
KCkgLSBzY3JvbGxPZmZzZXQuaGVpZ2h0KCksCisgICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCks
IHRhcmdldFJlY3QueSgpKTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xl
KG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0
LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxZmVhYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGli
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRo
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhaXNMb2NhbEZpbGUoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0
cjxjaGFyPiBmaWxlbmFtZShnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIHJldHVy
biBmaWxlbmFtZVRvU3RyaW5nKGZpbGVuYW1lLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNs
YXRvci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmQwZmI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAKQEAgLTAs
MCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8aW50LCBjb25zdCBj
aGFyKj4gSW50Q29uc3RDaGFySGFzaE1hcDsKKworc3RhdGljIHZvaWQgYmFja3NwYWNlQ2FsbGJh
Y2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQor
eworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJiYWNrc3BhY2Ui
KTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiRGVsZXRlQmFja3dh
cmQiKTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRn
ZXQsIGdib29sZWFuIHNlbGVjdCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7
CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNlbGVjdC1hbGwi
KTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2Vs
ZWN0QWxsIiA6ICJVbnNlbGVjdCIpOworfQorCitzdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxs
YmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3Ip
Cit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImN1dC1jbGlw
Ym9hcmQiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ3V0Iik7
Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdl
dCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3Rv
cF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7CisgICAgdHJhbnNs
YXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHkiKTsKK30KKworc3RhdGljIHZvaWQg
cGFzdGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5z
bGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgInBhc3RlLWNsaXBib2FyZCIpOworICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdF
ZGl0b3JDb21tYW5kKCJQYXN0ZSIpOworfQorCitzdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVD
YWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQoreworICAg
IC8vIFdlIGRvbid0IHN1cHBvcnQgdG9nZ2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2RlLCBidXQgdGhl
IGRlZmF1bHQgY2FsbGJhY2sgZXhwZWN0cworICAgIC8vIHRoZSBHdGtUZXh0VmlldyB0byBoYXZl
IGEgbGF5b3V0LCBzbyB3ZSBoYW5kbGUgdGhpcyBzaWduYWwganVzdCB0byBzdG9wIGl0LgorICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUtb3ZlcndyaXRl
Iik7Cit9CisKKy8vIEdUSysgd2lsbCBzdGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMgdG8gdGhlIHdl
YiB2aWV3LiBTbyB3ZSBjYW4gc2FmZWx5IHN0b3Agc2lnbmFsCisvLyBlbWlzc2lvbiB3aXRob3V0
IGJyZWFraW5nIGFjY2Vzc2liaWxpdHkuCitzdGF0aWMgdm9pZCBwb3B1cE1lbnVDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQoreworICAgIGdfc2lnbmFs
X3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwb3B1cC1tZW51Iik7Cit9CisKK3N0YXRp
YyB2b2lkIHNob3dIZWxwQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFu
c2xhdG9yKikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
c2hvdy1oZWxwIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxldGVDb21t
YW5kc1tdWzJdID0geworICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAiRGVs
ZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJzCisgICAg
eyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAg
ICAgICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcworICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2Fy
ZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAv
LyBXb3JkcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9F
bmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcworICAgIHsgIkRlbGV0ZVRv
QmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAg
ICAgICB9LCAvLyBMaW5lIGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
IiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBo
IGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5k
T2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocworICAgIHsgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKK307CisKK3N0YXRpYyB2b2lk
IGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVsZXRlVHlw
ZSBkZWxldGVUeXBlLCBnaW50IGNvdW50LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRv
cikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiZGVsZXRl
LWZyb20tY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwor
CisgICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9IEdfTl9FTEVNRU5UUyBoZXJlIHJl
c3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nCisgICAgLy8gdGhhdCB0aGUgY29uZGl0aW9uIGlz
IGFsd2F5cyB0cnVlLgorCisgICAgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9XT1JEUykg
eworICAgICAgICBpZiAoIWRpcmVjdGlvbikgeworICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOworICAgICAgICAgICAgdHJh
bnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JD
b21tYW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7CisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7CisgICAg
ICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGluZSIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZM
aW5lIik7CisgICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfUEFSQUdSQVBI
UykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFu
ZCgiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByYXdD
b21tYW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9uXTsKKyAgICBp
ZiAoIXJhd0NvbW1hbmQpCisgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGFicyhjb3VudCk7IGkrKykKKyAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNv
bW1hbmQocmF3Q29tbWFuZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtNb3Zl
Q29tbWFuZHNbXVs0XSA9IHsKKyAgICB7ICJNb3ZlQmFja3dhcmQiLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKKyAgICAgICJNb3ZlQmFja3dhcmRBbmRN
b2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIGdyYXBoZW1lCisgICAg
eyAiTW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
UmlnaHQiLAorICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAg
ICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8v
IExlZnQvcmlnaHQgZ3JhcGhlbWUKKyAgICB7ICJNb3ZlV29yZEJhY2t3YXJkIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZCIsCisgICAgICAiTW92ZVdvcmRC
YWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmRB
bmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2FyZCB3b3JkCisg
ICAgeyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJN
b3ZlRG93biIsCisgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwg
Ly8gVXAvZG93biBsaW5lCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAorICAgICAgIk1vdmVUb0JlZ2lubmlu
Z09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRzCisgICAgeyAiTW92
ZVBhcmFncmFwaEZvcndhcmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFyYWdy
YXBoQmFja3dhcmQiLAorICAgICAgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uIiwgICAgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAg
IH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBocworICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdy
YXBoIiwgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiLAorICAgICAg
Ik1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAiTW92ZVRv
RW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdy
YXBoIGVuZHMuCisgICAgeyAiTW92ZVBhZ2VVcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlUGFnZURvd24iLAorICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxl
Y3Rpb24iLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9u
IiAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gcGFnZQorICAgIHsgIk1vdmVUb0JlZ2lubmluZ09m
RG9jdW1lbnQiLCAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudCIsCisg
ICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICJN
b3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgfSwgLy8gQmVnaW4vZW5k
IG9mIGJ1ZmZlcgorICAgIHsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLAorICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gLy8gSG9yaXpvbnRhbCBwYWdlIG1vdmVtZW50Cit9OworCitzdGF0aWMgdm9pZCBtb3ZlQ3Vy
c29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a01vdmVtZW50U3RlcCBzdGVwLCBnaW50
IGNvdW50LCBnYm9vbGVhbiBleHRlbmRTZWxlY3Rpb24sIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0
cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQs
ICJtb3ZlLWN1cnNvciIpOworICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAxIDogMDsK
KyAgICBpZiAoZXh0ZW5kU2VsZWN0aW9uKQorICAgICAgICBkaXJlY3Rpb24gKz0gMjsKKworICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RlcCkgPj0gR19OX0VMRU1FTlRTKGd0a01vdmVD
b21tYW5kcykpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQg
PSBndGtNb3ZlQ29tbWFuZHNbc3RlcF1bZGlyZWN0aW9uXTsKKyAgICBpZiAoIXJhd0NvbW1hbmQp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsg
aSsrKQorICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChyYXdDb21t
YW5kKTsKK30KKworS2V5QmluZGluZ1RyYW5zbGF0b3I6OktleUJpbmRpbmdUcmFuc2xhdG9yKCkK
KyAgICA6IG1fbmF0aXZlV2lkZ2V0KGd0a190ZXh0X3ZpZXdfbmV3KCkpCit7CisgICAgZ19zaWdu
YWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0so
YmFja3NwYWNlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZl
V2lkZ2V0LmdldCgpLCAiY3V0LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY3V0Q2xpcGJvYXJkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgp
LCAiY29weS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKGNvcHlDbGlwYm9hcmRDYWxsYmFjayksIHRo
aXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwYXN0ZS1j
bGlwYm9hcmQiLCBHX0NBTExCQUNLKHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAic2VsZWN0LWFsbCIsIEdf
Q0FMTEJBQ0soc2VsZWN0QWxsQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAibW92ZS1jdXJzb3IiLCBHX0NBTExCQUNLKG1vdmVDdXJz
b3JDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQu
Z2V0KCksICJkZWxldGUtZnJvbS1jdXJzb3IiLCBHX0NBTExCQUNLKGRlbGV0ZUZyb21DdXJzb3JD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0
KCksICJ0b2dnbGUtb3ZlcndyaXRlIiwgR19DQUxMQkFDSyh0b2dnbGVPdmVyd3JpdGVDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJw
b3B1cC1tZW51IiwgR19DQUxMQkFDSyhwb3B1cE1lbnVDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJzaG93LWhlbHAiLCBHX0NBTExC
QUNLKHNob3dIZWxwQ2FsbGJhY2spLCB0aGlzKTsKK30KKworc3RydWN0IEtleUNvbWJpbmF0aW9u
RW50cnkgeworICAgIHVuc2lnbmVkIGdka0tleUNvZGU7CisgICAgdW5zaWduZWQgc3RhdGU7Cisg
ICAgY29uc3QgY2hhciogbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBLZXlDb21iaW5hdGlvbkVu
dHJ5IGtleURvd25FbnRyaWVzW10gPSB7CisgICAgeyBHREtfYiwgICAgICAgICBHREtfQ09OVFJP
TF9NQVNLLCAgICAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICB9LAorICAgIHsgR0RLX2ksICAg
ICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgfSwK
KyAgICB7IEdES19Fc2NhcGUsICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNh
bmNlbCIgICAgICAgIH0sCisgICAgeyBHREtfZ3JlYXRlciwgICBHREtfQ09OVFJPTF9NQVNLLCAg
ICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICB9LAorfTsKKworLy8gVGhlc2UgY29tbWFuZHMg
YXJlIHRleHQgaW5zZXJ0aW9uIGNvbW1hbmRzLCBzbyBzaG91bGQgdGFrZSBwbGFjZQorLy8gd2hp
bGUgaGFuZGxpbmcgdGhlIEtleVByZXNzIGV2ZW50Lgorc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0
aW9uRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7CisgICAgeyBHREtfVGFiLCAgICAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICB9LAorICAgIHsgR0RL
X1RhYiwgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAgICAgICAgICAgICAiSW5zZXJ0QmFja3Rh
YiIgfSwKK307CisKK3ZvaWQgS2V5QmluZGluZ1RyYW5zbGF0b3I6OmdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBFdmVudFR5cGUgdHlwZSwgVmVjdG9yPFdU
Rjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCit7CisgICAgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMu
Y2xlYXIoKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX2JpbmRpbmdzX2Fj
dGl2YXRlX2V2ZW50KEdUS19PQkpFQ1QobV9uYXRpdmVXaWRnZXQuZ2V0KCkpLCBldmVudCk7Cisj
ZWxzZQorICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9ldmVudChHX09CSkVDVChtX25hdGl2ZVdp
ZGdldC5nZXQoKSksIGV2ZW50KTsKKyNlbmRpZgorCisgICAgaWYgKCFtX3BlbmRpbmdFZGl0b3JD
b21tYW5kcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKG1fcGVuZGlu
Z0VkaXRvckNvbW1hbmRzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5RG93bkNvbW1hbmRzTWFwLCAoKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlQcmVzc0Nv
bW1hbmRzTWFwLCAoKSk7CisKKyAgICBpZiAoa2V5RG93bkNvbW1hbmRzTWFwLmlzRW1wdHkoKSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleURvd25F
bnRyaWVzKTsgaSsrKQorICAgICAgICAgICAga2V5RG93bkNvbW1hbmRzTWFwLnNldChrZXlEb3du
RW50cmllc1tpXS5zdGF0ZSA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLmdka0tleUNvZGUsIGtl
eURvd25FbnRyaWVzW2ldLm5hbWUpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHX05fRUxFTUVOVFMoa2V5UHJlc3NFbnRyaWVzKTsgaSsrKQorICAgICAgICAgICAga2V5UHJl
c3NDb21tYW5kc01hcC5zZXQoa2V5UHJlc3NFbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5UHJl
c3NFbnRyaWVzW2ldLmdka0tleUNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9
CisKKyAgICAvLyBTcGVjaWFsLWNhc2UgZW50ZXIga2V5cyBmb3Igd2Ugd2FudCB0aGVtIHRvIHdv
cmsgcmVnYXJkbGVzcyBvZiBtb2RpZmllci4KKyAgICBpZiAoKGV2ZW50LT5rZXl2YWwgPT0gR0RL
X1JldHVybiB8fCBldmVudC0+a2V5dmFsID09IEdES19LUF9FbnRlciB8fCBldmVudC0+a2V5dmFs
ID09IEdES19JU09fRW50ZXIpICYmIHR5cGUgPT0gS2V5UHJlc3MpIHsKKyAgICAgICAgY29tbWFu
ZExpc3QuYXBwZW5kKCJJbnNlcnROZXdMaW5lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRzLCB3ZSB3YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlD
b2RlKCkgZG9lcyB0aGF0LgorICAgIGludCBtYXBLZXkgPSBldmVudC0+c3RhdGUgPDwgMTYgfCBl
dmVudC0+a2V5dmFsOworICAgIGlmIChtYXBLZXkpIHsKKyAgICAgICAgSGFzaE1hcDxpbnQsIGNv
bnN0IGNoYXIqPiogY29tbWFuZE1hcCA9IHR5cGUgPT0gS2V5RG93biA/ICAma2V5RG93bkNvbW1h
bmRzTWFwIDogJmtleVByZXNzQ29tbWFuZHNNYXA7CisgICAgICAgIGlmIChjb25zdCBjaGFyKiBj
b21tYW5kU3RyaW5nID0gY29tbWFuZE1hcC0+Z2V0KG1hcEtleSkpIHsKKyAgICAgICAgICAgIGNv
bW1hbmRMaXN0LmFwcGVuZChjb21tYW5kU3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmM2NDM2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2lmbmRlZiBLZXlCaW5kaW5nVHJhbnNsYXRvcl9oCisjZGVmaW5lIEtleUJpbmRpbmdU
cmFuc2xhdG9yX2gKKworI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0
IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBLZXlCaW5kaW5nVHJhbnNsYXRvciB7CitwdWJsaWM6CisgICAgS2V5QmluZGluZ1RyYW5zbGF0
b3IoKTsKKworICAgIGVudW0gRXZlbnRUeXBlIHsgS2V5RG93biwgS2V5UHJlc3MgfTsKKyAgICB2
b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBFdmVudFR5cGUs
IFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKKyAgICB2b2lkIGFkZFBlbmRpbmdFZGl0b3JDb21tYW5k
KGNvbnN0IGNoYXIqIGNvbW1hbmQpIHsgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKGNv
bW1hbmQpOyB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fbmF0aXZlV2lk
Z2V0OworICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9M
YW5ndWFnZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhNzFl
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3Bw
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgi
CisKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2luZyBwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVs
dCgpIGhlcmUgaXMgbm90IGFuIG9wdGlvbiwgYmVjYXVzZQorLy8gaXQgZG9lc24ndCBzdXBwb3J0
IGNoYW5naW5nIHRoZSBsb2NhbGUgaW4gcnVudGltZSwgc28gaXQgcmV0dXJucworLy8gYWx3YXlz
IHRoZSBzYW1lIHZhbHVlLgorc3RhdGljIFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkKK3sKKyAg
ICBjaGFyKiBsb2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKKworICAg
IGlmICghbG9jYWxlRGVmYXVsdCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiYyIpOworCisgICAg
R093blB0cjxnY2hhcj4gbm9ybWFsaXplZERlZmF1bHQoZ19hc2NpaV9zdHJkb3duKGxvY2FsZURl
ZmF1bHQsIC0xKSk7CisgICAgY2hhciogcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0Lmdl
dCgpLCAnXycpOworCisgICAgaWYgKHB0cikKKyAgICAgICAgKnB0ciA9ICctJzsKKworICAgIHB0
ciA9IHN0cmNocihub3JtYWxpemVkRGVmYXVsdC5nZXQoKSwgJy4nKTsKKworICAgIGlmIChwdHIp
CisgICAgICAgICpwdHIgPSAnXDAnOworCisgICAgcmV0dXJuIFN0cmluZyhub3JtYWxpemVkRGVm
YXVsdC5nZXQoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExh
bmd1YWdlcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsK
KyAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChwbGF0Zm9ybUxhbmd1YWdlKCkpOwor
ICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworfQorICAgIAorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjAyY2FhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKQEAgLTAsMCArMSw3ODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGd0a1N0b2NrTGFiZWwoY29uc3QgY2hhciogc3RvY2tJRCkKK3sKKyAgICBHdGtTdG9j
a0l0ZW0gaXRlbTsKKyAgICBpZiAoIWd0a19zdG9ja19sb29rdXAoc3RvY2tJRCwgJml0ZW0pKQor
ICAgICAgICByZXR1cm4gc3RvY2tJRDsKKyAgICByZXR1cm4gaXRlbS5sYWJlbDsKK30KKworU3Ry
aW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiU3VibWl0IikpOworfQorCitTdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3VibWl0IikpOworfQorCitTdHJpbmcg
cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlJlc2V0IikpOworfQorCitTdHJpbmcgZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiRGV0YWlscyIpKTsKK30KKworU3RyaW5n
IHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3Jk
czogIikpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3NlIEZpbGUiKSk7Cit9CisKK1N0cmluZyBm
aWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJDaG9vc2UgRmlsZXMiKSk7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uTm9G
aWxlU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiKE5v
bmUpIikpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVsKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSkiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJPcGVuIExpbmsgaW4gTmV3IF9XaW5kb3ciKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIl9Eb3dubG9hZCBMaW5rZWQgRmlsZSIpKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkNvcHkgTGluayBMb2NfYXRpb24iKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfSW1hZ2UgaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIlNhX3ZlIEltYWdlIEFzIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIkNvcF95IEltYWdlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNvcHkgSW1hZ2UgX0FkZHJlc3MiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiT3BlbiBfVmlkZW8gaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJPcGVuIF9BdWRpbyBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBWaWRlbyBMaW5rIExvY2F0aW9uIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBBdWRpbyBMaW5rIExvY2F0aW9u
IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scygp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1RvZ2dsZSBNZWRpYSBDb250cm9s
cyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVG9nZ2xlIE1lZGlhIF9Mb29wIFBsYXli
YWNrIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3Jl
ZW4oKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlN3aXRjaCBWaWRlbyB0byBf
RnVsbHNjcmVlbiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1BsYXkiKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJfUGF1c2UiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRp
YU11dGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9NdXRlIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0ZyYW1lIGluIE5ldyBXaW5kb3ciKSk7
Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkKK3sKKyAgICBzdGF0aWMgU3Ry
aW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NL
X0NPUFkpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0RlbGV0ZSgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5n
Ojpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19ERUxFVEUpKTsKKyAgICByZXR1cm4g
c3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpCit7
CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9j
a0xhYmVsKEdUS19TVE9DS19TRUxFQ1RfQUxMKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlKCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHMoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIklucHV0IF9NZXRob2RzIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwg
PSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0dPX0JBQ0spKTsKKyAg
ICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9y
d2FyZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRG
OChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19HT19GT1JXQVJEKSk7CisgICAgcmV0dXJuIHN0b2Nr
TGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkKK3sKKyAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RL
X1NUT0NLX1NUT1ApKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X1JlbG9hZCIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpCit7CisgICAg
c3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVs
KEdUS19TVE9DS19DVVQpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwg
PSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1BBU1RFKSk7CisgICAg
cmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNz
ZXNGb3VuZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTm8gR3Vlc3NlcyBG
b3VuZCIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfSWdub3JlIFNwZWxsaW5nIikpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0xlYXJuIFNwZWxsaW5nIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJfU2VhcmNoIHRoZSBXZWIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdMb29rVXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfTG9vayBVcCBpbiBEaWN0aW9uYXJ5IikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIl9PcGVuIExpbmsiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVH
cmFtbWFyKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJZ25vcmUgX0dyYW1t
YXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlNwZWxsaW5nIGFuZCBfR3JhbW1hciIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wgc2hv
dykKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzaG93ID8gXygiX1Nob3cgU3BlbGxp
bmcgYW5kIEdyYW1tYXIiKSA6IF8oIl9IaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiX0NoZWNrIERvY3VtZW50IE5vdyIpKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgX1R5cGluZyIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgX0dyYW1tYXIgV2l0aCBT
cGVsbGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfRm9udCIpKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0JvbGQoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9
IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQk9MRCkpOworICAgIHJl
dHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkK
K3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0
b2NrTGFiZWwoR1RLX1NUT0NLX0lUQUxJQykpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkKK3sKKyAgICBzdGF0aWMgU3Ry
aW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NL
X1VOREVSTElORSkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnT3V0bGluZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X091dGxpbmUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVu
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiSW5zcGVjdCBfRWxlbWVudCIp
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk1NYXJrKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk0gX0xlZnQtdG8tcmlnaHQgbWFy
ayIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE1NYXJr
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTE0gX1JpZ2h0LXRvLWxlZnQg
bWFyayIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUkVN
YXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUkUgTGVmdC10by1yaWdo
dCBfZW1iZWRkaW5nIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFJMRU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMRSBSaWdo
dC10by1sZWZ0IGVfbWJlZGRpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdV
bmljb2RlSW5zZXJ0TFJPTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
TFJPIExlZnQtdG8tcmlnaHQgX292ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZUluc2VydFJMT01hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIlJMTyBSaWdodC10by1sZWZ0IG9fdmVycmlkZSIpKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRQREZNYXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJQREYgX1BvcCBkaXJlY3Rpb25hbCBmb3JtYXR0aW5nIikpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXU01hcmsoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlpXUyBfWmVybyB3aWR0aCBzcGFjZSIpKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRaV0pNYXJrKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV0ogWmVybyB3aWR0aCBfam9pbmVyIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV05KIFplcm8gd2lkdGggX25vbi1qb2luZXIi
KSk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk5vIHJlY2VudCBzZWFyY2hlcyIpKTsKK30KKwor
U3RyaW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlJlY2VudCBzZWFyY2hlcyIpKTsKK30KKworU3RyaW5nIHNlYXJjaE1l
bnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiX0NsZWFyIHJlY2VudCBzZWFyY2hlcyIpKTsKK30KKworU3RyaW5nIEFYRGVmaW5pdGlv
blRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlZmluaXRpb24iKSk7
Cit9CisKK1N0cmluZyBBWERlc2NyaXB0aW9uTGlzdFRlcm1UZXh0KCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJ0ZXJtIikpOworfQorCitTdHJpbmcgQVhEZXNjcmlwdGlvbkxp
c3REZXRhaWxUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJkZXNjcmlw
dGlvbiIpKTsKK30KKworU3RyaW5nIEFYRm9vdGVyUm9sZURlc2NyaXB0aW9uVGV4dCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZm9vdGVyIikpOworfQorCitTdHJpbmcgQVhC
dXR0b25BY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwcmVz
cyIpKTsKK30KKworU3RyaW5nIEFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWxlY3QiKSk7Cit9CisKK1N0cmluZyBBWFRleHRGaWVs
ZEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImFjdGl2YXRl
IikpOworfQorCitTdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bmNoZWNrIikpOworfQorCitTdHJpbmcgQVhVbmNo
ZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oImNoZWNrIikpOworfQorCitTdHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygianVtcCIpKTsKK30KKworU3RyaW5nIEFYTWVudUxpc3RQ
b3B1cEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEFY
TWVudUxpc3RBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisgICAgCitT
dHJpbmcgbWlzc2luZ1BsdWdpblRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIk1pc3NpbmcgUGx1Zy1pbiIpKTsKK30KKworU3RyaW5nIGNyYXNoZWRQbHVnaW5UZXh0KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IlBsdWctaW4gRmFpbHVyZSIpKTsKK30KKworU3RyaW5nIGJsb2NrZWRQbHVnaW5CeUNvbnRlbnRT
ZWN1cml0eVBvbGljeVRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitTdHJpbmcgaW5zZWN1cmVQbHVnaW5WZXJzaW9uVGV4dCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBp
bmFjdGl2ZVBsdWdpblRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitTdHJpbmcgbXVsdGlwbGVGaWxlVXBsb2FkVGV4dCh1bnNpZ25lZCBu
dW1iZXJPZkZpbGVzKQoreworICAgIC8vIEZJWE1FOiBJZiB0aGlzIGZpbGUgZ2V0cyBsb2NhbGl6
ZWQsIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsb2NhbGl6ZWQgYXMgb25lIHN0cmluZyB3aXRoIGEg
d2lsZGNhcmQgZm9yIHRoZSBudW1iZXIuCisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG51bWJl
ck9mRmlsZXMpICsgU3RyaW5nOjpmcm9tVVRGOChfKCIgZmlsZXMiKSk7Cit9CisKK1N0cmluZyB1
bmtub3duRmlsZVNpemVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJV
bmtub3duIikpOworfQorCitTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0
cmR1cF9wcmludGYoQ18oIlRpdGxlIHN0cmluZyBmb3IgaW1hZ2VzIiwgIiVzICAoJWR4JWQgcGl4
ZWxzKSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5h
bWUudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKK30KKworCisjaWYgRU5BQkxFKFZJREVPKQorCitTdHJp
bmcgbWVkaWFFbGVtZW50TG9hZGluZ1N0YXRlVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiTG9hZGluZy4uLiIpKTsKK30KKworU3RyaW5nIG1lZGlhRWxlbWVudExpdmVC
cm9hZGNhc3RTdGF0ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxp
dmUgQnJvYWRjYXN0IikpOworfQorCitTdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVu
dFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxl
bWVudCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQg
Y29udHJvbGxlciIpKTsKKyAgICBpZiAobmFtZSA9PSAiVmlkZW9FbGVtZW50IikKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidmlkZW8gZWxlbWVudCBjb250cm9sbGVyIikpOwor
ICAgIGlmIChuYW1lID09ICJNdXRlQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygibXV0ZSIpKTsKKyAgICBpZiAobmFtZSA9PSAiVW5NdXRlQnV0dG9uIikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidW5tdXRlIikpOworICAgIGlmIChuYW1lID09
ICJQbGF5QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGxheSIp
KTsKKyAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJwYXVzZSIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2xpZGVyIikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGltZSIpKTsKKyAgICBpZiAobmFt
ZSA9PSAiU2xpZGVyVGh1bWIiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0
aW1lbGluZSBzbGlkZXIgdGh1bWIiKSk7CisgICAgaWYgKG5hbWUgPT0gIlJld2luZEJ1dHRvbiIp
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImJhY2sgMzAgc2Vjb25kcyIpKTsK
KyAgICBpZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCisgICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInJldHVybiB0byByZWFsdGltZSIpKTsKKyAgICBpZiAobmFt
ZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiZWxhcHNlZCB0aW1lIikpOworICAgIGlmIChuYW1lID09ICJUaW1lUmVtYWluaW5nRGlz
cGxheSIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJlbWFpbmluZyB0aW1l
IikpOworICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5IikKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygic3RhdHVzIikpOworICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxz
Y3JlZW5CdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbnRlciBm
dWxsc2NyZWVuIikpOworICAgIGlmIChuYW1lID09ICJFeGl0RnVsbHNjcmVlbkJ1dHRvbiIpCisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImV4aXQgZnVsbHNjcmVlbiIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJmYXN0IGZvcndhcmQiKSk7CisgICAgaWYgKG5hbWUgPT0gIlNlZWtCYWNr
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZmFzdCByZXZlcnNl
IikpOworICAgIGlmIChuYW1lID09ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzaG93IGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiaGlkZSBjbG9zZWQgY2FwdGlvbnMiKSk7CisgICAgaWYgKG5h
bWUgPT0gIkNvbnRyb2xzUGFuZWwiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJtZWRpYSBjb250cm9scyIpKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRI
ZWxwVGV4dChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkF1ZGlvRWxl
bWVudCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImF1ZGlvIGVsZW1lbnQg
cGxheWJhY2sgY29udHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOworICAgIGlmIChuYW1lID09
ICJWaWRlb0VsZW1lbnQiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2aWRl
byBlbGVtZW50IHBsYXliYWNrIGNvbnRyb2xzIGFuZCBzdGF0dXMgZGlzcGxheSIpKTsKKyAgICBp
ZiAobmFtZSA9PSAiTXV0ZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIm11dGUgYXVkaW8gdHJhY2tzIikpOworICAgIGlmIChuYW1lID09ICJVbk11dGVCdXR0b24i
KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bm11dGUgYXVkaW8gdHJhY2tz
IikpOworICAgIGlmIChuYW1lID09ICJQbGF5QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiYmVnaW4gcGxheWJhY2siKSk7CisgICAgaWYgKG5hbWUgPT0gIlBhdXNl
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF1c2UgcGxheWJh
Y2siKSk7CisgICAgaWYgKG5hbWUgPT0gIlNsaWRlciIpCisgICAgICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIm1vdmllIHRpbWUgc2NydWJiZXIiKSk7CisgICAgaWYgKG5hbWUgPT0gIlNs
aWRlclRodW1iIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGlt
ZSBzY3J1YmJlciB0aHVtYiIpKTsKKyAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBtb3ZpZSBiYWNrIDMwIHNlY29u
ZHMiKSk7CisgICAgaWYgKG5hbWUgPT0gIlJldHVyblRvUmVhbHRpbWVCdXR0b24iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyZXR1cm4gc3RyZWFtaW5nIG1vdmllIHRvIHJl
YWwgdGltZSIpKTsKKyAgICBpZiAobmFtZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3ZpZSB0aW1lIGluIHNlY29u
ZHMiKSk7CisgICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibnVtYmVyIG9mIHNlY29uZHMgb2YgbW92aWUgcmVt
YWluaW5nIikpOworICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5IikKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3ZpZSBzdGF0dXMiKSk7CisgICAgaWYg
KG5hbWUgPT0gIlNlZWtCYWNrQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygic2VlayBxdWlja2x5IGJhY2siKSk7CisgICAgaWYgKG5hbWUgPT0gIlNlZWtGb3J3YXJk
QnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBxdWlja2x5
IGZvcndhcmQiKSk7CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBsYXkgbW92aWUgaW4gZnVsbHNjcmVl
biBtb2RlIikpOworICAgIGlmIChuYW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJFeGl0IGZ1bGxzY3JlZW4gbW9kZSIpKTsK
KyAgICBpZiAobmFtZSA9PSAiU2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RhcnQgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlvbnMi
KSk7CisgICAgaWYgKG5hbWUgPT0gIkhpZGVDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCisgICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0b3AgZGlzcGxheWluZyBjbG9zZWQgY2FwdGlv
bnMiKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBsb2NhbGl6ZWRNZWRpYVRpbWVEZXNjcmlwdGlvbihmbG9hdCB0aW1lKQor
eworICAgIGlmICghc3RkOjppc2Zpbml0ZSh0aW1lKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiaW5kZWZpbml0ZSB0aW1lIikpOworCisgICAgaW50IHNlY29uZHMgPSBzdGF0
aWNfY2FzdDxpbnQ+KGFicyh0aW1lKSk7CisgICAgaW50IGRheXMgPSBzZWNvbmRzIC8gKDYwICog
NjAgKiAyNCk7CisgICAgaW50IGhvdXJzID0gc2Vjb25kcyAvICg2MCAqIDYwKTsKKyAgICBpbnQg
bWludXRlcyA9IChzZWNvbmRzIC8gNjApICUgNjA7CisgICAgc2Vjb25kcyAlPSA2MDsKKworICAg
IGlmIChkYXlzKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmlu
dGYoIiVkIGRheXMgJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgZGF5cywgaG91cnMs
IG1pbnV0ZXMsIHNlY29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3Ry
aW5nLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAoaG91cnMpIHsKKyAgICAgICAgR093blB0cjxn
Y2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNv
bmRzIiwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAobWludXRlcykgeworICAg
ICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBtaW51dGVzICVk
IHNlY29uZHMiLCBtaW51dGVzLCBzZWNvbmRzKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KHN0cmluZy5nZXQoKSk7CisgICAgfQorCisgICAgR093blB0cjxnY2hhcj4gc3RyaW5n
KGdfc3RyZHVwX3ByaW50ZigiJWQgc2Vjb25kcyIsIHNlY29uZHMpKTsKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworfQorI2VuZGlmICAvLyBFTkFCTEUoVklERU8p
CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZhbHVlIG1pc3NpbmciKSk7Cit9CisKK1N0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckNoZWNrYm94VGV4dCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdU
ZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVU
ZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFs
dWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclJhZGlvVGV4dCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3Np
bmdUZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNl
bGVjdFRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRp
b25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3Nh
Z2VUeXBlTWlzbWF0Y2hUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInR5cGUgbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7
Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvck11bHRpcGxlRW1h
aWxUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9u
TWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VHlwZU1pc21hdGNoRm9yVVJMVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Cit9CisKK1N0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZVBhdHRlcm5NaXNtYXRjaFRleHQoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInBhdHRlcm4gbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0
aW9uTWVzc2FnZVRvb0xvbmdUZXh0KGludCwgaW50KQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oInRvbyBsb25nIikpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5n
ZVVuZGVyZmxvd1RleHQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJyYW5nZSB1bmRlcmZsb3ciKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVJhbmdlT3ZlcmZsb3dUZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygicmFuZ2Ugb3ZlcmZsb3ciKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVN0ZXBNaXNtYXRjaFRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGVwIG1pc21hdGNoIikpOworfQorCitTdHJp
bmcgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlVuYWNjZXB0YWJsZSBUTFMgY2VydGlmaWNhdGUiKSk7Cit9CisKK1N0cmluZyBs
b2NhbGl6ZWRTdHJpbmcoY29uc3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KGtleSwgc3RybGVuKGtleSkpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VC
YWRJbnB1dEZvck51bWJlclRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOworfQorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorU3RyaW5nIHRleHRUcmFja0Nsb3NlZENhcHRpb25zVGV4dCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsb3NlZCBDYXB0aW9ucyIsICJNZW51IHNl
Y3Rpb24gaGVhZGluZyBmb3IgY2xvc2VkIGNhcHRpb25zIikpOworfQorCitTdHJpbmcgdGV4dFRy
YWNrU3VidGl0bGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIlN1
YnRpdGxlcyIsICJNZW51IHNlY3Rpb24gaGVhZGluZyBmb3Igc3VidGl0bGVzIikpOworfQorCitT
dHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
Q18oIk9mZiIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIHRoZSB0cmFjayB0aGF0IHJlcHJlc2VudHMg
ZGlzYWJsaW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKK30KKworU3RyaW5nIHRleHRUcmFja05vTGFi
ZWxUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiTm8gbGFiZWwiLCAi
TWVudSBpdGVtIGxhYmVsIGZvciBhIGNsb3NlZCBjYXB0aW9ucyB0cmFjayB0aGF0IGhhcyBubyBv
dGhlciBuYW1lIikpOworfQorI2VuZGlmCisKK1N0cmluZyBzbmFwc2hvdHRlZFBsdWdJbkxhYmVs
VGl0bGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJTbmFwc2hvdHRlZCBQ
bHVnLUluIiwgIlRpdGxlIG9mIHRoZSBsYWJlbCB0byBzaG93IG9uIGEgc25hcHNob3R0ZWQgcGx1
Zy1pbiIpKTsKK30KKworU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxTdWJ0aXRsZSgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsaWNrIHRvIHJlc3RhcnQiLCAiU3Vi
dGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hODk4YWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9Mb2dnaW5nR3RrLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5pdGlhbGl6ZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisK
KyNpZiAhTE9HX0RJU0FCTEVECisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gSW5zcGlyZWQgYnkgdGhlIGNvZGUgdXNlZCBieSB0aGUgUXQgcG9ydAorCit2b2lk
IGluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCit7CisgICAgc3RhdGljIGJv
b2wgZGlkSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVscyA9IGZhbHNlOworICAgIGlmIChkaWRJbml0
aWFsaXplTG9nZ2luZ0NoYW5uZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRJbml0aWFs
aXplTG9nZ2luZ0NoYW5uZWxzID0gdHJ1ZTsKKworICAgIGNoYXIqIGxvZ0VudiA9IGdldGVudigi
V0VCS0lUX0RFQlVHIik7CisgICAgaWYgKCFsb2dFbnYpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIHdlIHNldCB1cCB0aGUgbG9ncyBhbnl3YXkgYmVjYXVzZSBzb21lIG9mIG91ciBsb2dnaW5n
LCBzdWNoIGFzCisgICAgLy8gc291cCdzIGlzIGF2YWlsYWJsZSBpbiByZWxlYXNlIGJ1aWxkcwor
I2lmIGRlZmluZWQoTkRFQlVHKQorICAgIGdfd2FybmluZygiV0VCS0lUX0RFQlVHIGlzIG5vdCBl
bXB0eSwgYnV0IHRoaXMgaXMgYSByZWxlYXNlIGJ1aWxkLiBOb3RpY2UgdGhhdCBtYW55IGxvZyBt
ZXNzYWdlcyB3aWxsIG9ubHkgYXBwZWFyIGluIGEgZGVidWcgYnVpbGQuIik7CisjZW5kaWYKKwor
ICAgIGNoYXIqKiBsb2d2ID0gZ19zdHJzcGxpdChsb2dFbnYsICIgIiwgLTEpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGxvZ3ZbaV07IGkrKykgeworICAgICAgICBpZiAoV1RGTG9nQ2hhbm5lbCog
Y2hhbm5lbCA9IGdldENoYW5uZWxGcm9tTmFtZShsb2d2W2ldKSkKKyAgICAgICAgICAgIGNoYW5u
ZWwtPnN0YXRlID0gV1RGTG9nQ2hhbm5lbE9uOworICAgIH0KKworICAgIGdfc3RyZnJlZXYobG9n
dik7CisKKyAgICAvLyB0byBkaXNhYmxlIGxvZ2dpbmcgbm90SW1wbGVtZW50ZWQgc2V0IHRoZSBE
SVNBQkxFX05JX1dBUk5JTkcKKyAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAxCisgICAg
TG9nTm90WWV0SW1wbGVtZW50ZWQuc3RhdGUgPSBXVEZMb2dDaGFubmVsT247Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjlmN2YxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV4dGVuc2lvbk1hcCB7
CisgICAgY29uc3QgY2hhciogZXh0ZW5zaW9uOworICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlOwor
fTsKKworc3RhdGljIGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNpb25NYXAgW10gPSB7CisgICAg
eyAiYm1wIiwgImltYWdlL2JtcCIgfSwKKyAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCisgICAg
eyAiZ2lmIiwgImltYWdlL2dpZiIgfSwKKyAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9LAorICAg
IHsgImh0bWwiLCAidGV4dC9odG1sIiB9LAorICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0s
CisgICAgeyAianBlZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVn
IiB9LAorICAgIHsgImpzIiwgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJw
ZGYiLCAiYXBwbGljYXRpb24vcGRmIiB9LAorICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0sCisg
ICAgeyAicnNzIiwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiIH0sCisgICAgeyAic3ZnIiwgImltYWdl
L3N2Zyt4bWwiIH0sCisgICAgeyAidGV4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInR4dCIs
ICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCisgICAg
eyAieG1sIiwgInRleHQveG1sIiB9LAorICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKKyAgICB7
ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCisgICAgeyAid21sIiwgInRleHQv
dm5kLndhcC53bWwiIH0sCisgICAgeyAid21sYyIsICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMi
IH0sCisgICAgeyAwLCAwIH0KK307CisKK1N0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4dCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgU3RyaW5nIHMgPSBleHQubG93ZXIoKTsKKyAgICBjb25zdCBFeHRl
bnNpb25NYXAgKmUgPSBleHRlbnNpb25NYXA7CisgICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgewor
ICAgICAgICBpZiAocyA9PSBlLT5leHRlbnNpb24pCisgICAgICAgICAgICByZXR1cm4gZS0+bWlt
ZVR5cGU7CisgICAgICAgICsrZTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K2Jvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0
IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZjFjMWNjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBz
ZWxmaXNoLm9yZworICogIENvcHlyaWdodCAoQykgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEg
PGduc0Bnbm9tZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1l
U2Nyb2xsYmFyR3RrLmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUGFzc1JlZlB0cjxNYWluRnJhbWVT
Y3JvbGxiYXJHdGs+IE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNYWluRnJhbWVTY3JvbGxiYXJHdGsoc2Nyb2xsYWJsZUFy
ZWEsIG9yaWVudGF0aW9uKSk7Cit9CisKKy8vIEEgTWFpbkZyYW1lU2Nyb2xsYmFyIGlzIGp1c3Qg
YSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyLiBPdGhlcndpc2UgaXQgaXMgZnVsbHkKKy8vIGZ1bmN0
aW9uYWwuIEEgbm9uLXBhaW50aW5nIHNjcm9sbGJhciBhbGxvd3MgYSBtYWluLWZyYW1lIFNjcm9s
bFZpZXcgdG8gdXNlCisvLyBhIGNvbnRhaW5pbmcgR3RrU2Nyb2xsZWRXaW5kb3cgYXMgaXRzIHVz
ZXIgaW50ZXJmYWNlLiBUaGUgQ2hyb21lQ2xpZW50IGluIHRoZQorLy8gV2ViS2l0IGxheWVyIGp1
c3QgbGlzdGVucyBmb3Igc2Nyb2xsaW5nIGFuZCBzaXppbmcgY2hhbmdlcyBhbmQgdXBkYXRlcyBp
dHMKKy8vIGNvbnRhaW5lciAodGhlIEd0a1Njcm9sbGVkV2luZG93KSBhY2NvcmRpbmdseS4gVGhl
IFNjcm9sbFZpZXcgaXMgcmVzcG9uc2libGUKKy8vIGZvciBkZWNpZGluZyB3aGV0aGVyIG9yIG5v
dCB0byBjcmVhdGUgYSBNYWluRnJhbWVTY3JvbGxiYXIgb3IgbmF0aXZlIHNjcm9sbGJhci4KK01h
aW5GcmFtZVNjcm9sbGJhckd0azo6TWFpbkZyYW1lU2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAg
OiBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFy
KQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGFrZSB1cCBhbnkgc3BhY2UuCisgICAgcmVz
aXplKDAsIDApOworfQorCit2b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIE1haW4g
ZnJhbWUgc2Nyb2xsYmFycyBhcmUgbm90IHBhaW50ZWQgYnkgV2ViQ29yZS4KKyAgICByZXR1cm47
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0
ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhjYjYzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaApAQCAtMCwwICsxLDM5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworCisjaWZuZGVmIE1haW5GcmFtZVNjcm9sbGJhckd0a19oCisj
ZGVmaW5lIE1haW5GcmFtZVNjcm9sbGJhckd0a19oCisKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIE1haW5GcmFtZVNjcm9sbGJhckd0ayA6IHB1YmxpYyBTY3JvbGxiYXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1haW5GcmFtZVNjcm9sbGJhckd0az4gY3JlYXRlKFNjcm9s
bGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgTWFp
bkZyYW1lU2Nyb2xsYmFyR3RrKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24p
OworfTsKKworfQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2Ez
ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsu
Y3BwCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKworI2luY2x1ZGUgIkNsaXBib2Fy
ZEd0ay5oIgorI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZy
YWdtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHT3duUHRyR3RrLmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRl
ckltYWdlLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBh
c3RlYm9hcmQoKQoreworICAgIHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3IFBh
c3RlYm9hcmQoKTsKKyAgICByZXR1cm4gcGFzdGVib2FyZDsKK30KKworUGFzdGVib2FyZDo6UGFz
dGVib2FyZCgpCit7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2Uq
IHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpOworICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVs
cGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKKworICAgIERhdGFPYmplY3RHdGsqIGRh
dGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBk
YXRhT2JqZWN0LT5jbGVhckFsbCgpOworCisgICAgZGF0YU9iamVjdC0+c2V0VGV4dChmcmFtZS0+
ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKKyAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3Jl
YXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNl
LCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CisgICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENvbnRl
bnRzKGNsaXBib2FyZCwgY2FuU21hcnRDb3B5T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVyOjpJ
bmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFz
dGUpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlvbikKK3sKKyAgICBHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKKyAgICBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBi
b2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKworICAgIGRhdGFPYmplY3QtPnNl
dFRleHQodGV4dCk7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsCisgICAgICAgIChzbWFydFJl
cGxhY2VPcHRpb24gPT0gQ2FuU21hcnRSZXBsYWNlKSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1
ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7
Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xpcGJvYXJkKiBj
bGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOworCisgICAgRGF0
YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlw
Ym9hcmQpOworICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBkYXRhT2JqZWN0LT5z
ZXRVUkwodXJsLCBsYWJlbCk7CisgICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNs
aXBib2FyZCk7Cit9CisKK3N0YXRpYyBLVVJMIGdldFVSTEZvckltYWdlTm9kZShOb2RlKiBub2Rl
KQoreworICAgIC8vIEZJWE1FOiBMYXRlciB0aGlzIGNvZGUgc2hvdWxkIGJlIHNoYXJlZCB3aXRo
IENocm9taXVtIHNvbWVob3cuIENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9ybXMgd2FudCBpdC4KKyAg
ICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aW1nVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKQor
ICAgICAgICB1cmxTdHJpbmcgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOworI2lmIEVOQUJMRShTVkcpCisgICAgZWxzZSBpZiAo
bm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQorICAgICAgICB1cmxTdHJpbmcg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpo
cmVmQXR0cik7CisjZW5kaWYKKyAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZW1iZWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKSB7
CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7
CisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShlbGVtZW50LT5pbWFn
ZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSk7CisgICAgfQorICAgIHJldHVybiB1cmxTdHJpbmcuaXNF
bXB0eSgpID8gS1VSTCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFk
aW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOworfQorCit2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0
bGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworCisgICAgaWYgKCEobm9kZS0+cmVuZGVyZXIoKSAm
JiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOwor
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwor
ICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJl
bmRlcmVyKHJlbmRlcmVyKTsKKyAgICBBU1NFUlQoaW1hZ2UpOworCisgICAgR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQgPSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7CisgICAgRGF0YU9iamVjdEd0
ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwor
ICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBLVVJMIHVybCA9IGdldFVSTEZvcklt
YWdlTm9kZShub2RlKTsKKyAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGF0YU9i
amVjdC0+c2V0VVJMKHVybCwgdGl0bGUpOworCisgICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1
cChjcmVhdGVNYXJrdXAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLCBJbmNsdWRlTm9kZSwg
MCwgUmVzb2x2ZUFsbFVSTHMpKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7CisgICAgZGF0YU9iamVjdC0+
c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKKworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQ
YXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKK30K
Kwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNsaXBib2FyZChDbGlwYm9hcmQqIGNsaXBib2FyZCkK
K3sKKyAgICBHdGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCA9IHN0YXRpY19jYXN0PENsaXBib2Fy
ZEd0ayo+KGNsaXBib2FyZCktPmNsaXBib2FyZCgpOworICAgIGlmIChndGtDbGlwYm9hcmQpCisg
ICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRl
Q2xpcGJvYXJkQ29udGVudHMoZ3RrQ2xpcGJvYXJkKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpj
bGVhcigpCit7CisgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihndGtfY2xpcGJvYXJkX2dldF9mb3Jf
ZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FS
RCkpOworfQorCitib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCit7CisgICAgcmV0
dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmNsaXBib2Fy
ZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZSgKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9nZXRf
Zm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQ
Qk9BUkQpKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpk
b2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3sKKyAgICBQYXN0
ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2Fy
ZEhlbHBlcigpOworICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJy
ZW50Q2xpcGJvYXJkKGZyYW1lKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgaGVscGVyLT5nZXRDbGlw
Ym9hcmRDb250ZW50cyhjbGlwYm9hcmQpOworCisgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsK
KworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgeworICAgICAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUt
PmRvY3VtZW50KCksIGRhdGFPYmplY3QtPm1hcmt1cCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdB
bmRQbHVnaW5Db250ZW50SWZOZWVkZWQpOworICAgICAgICBpZiAoZnJhZ21lbnQpCisgICAgICAg
ICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIH0KKworICAgIGlmICghYWxsb3dQ
bGFpblRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGRhdGFPYmplY3QtPmhhc1Rl
eHQoKSkgeworICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7CisgICAgICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4
dC5nZXQoKSwgZGF0YU9iamVjdC0+dGV4dCgpKTsKKyAgICAgICAgaWYgKGZyYWdtZW50KQorICAg
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCit7Cisg
ICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKTsKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+
Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVj
dCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOworCisgICAgaGVscGVy
LT5nZXRDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOworICAgIHJldHVybiBkYXRhT2JqZWN0
LT50ZXh0KCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6aXNTZWxlY3Rpb25Nb2RlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+dXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCgpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6
OnNldFNlbGVjdGlvbk1vZGUoYm9vbCBzZWxlY3Rpb25Nb2RlKQoreworICAgIFBhc3RlYm9hcmRI
ZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnNldFVzZVByaW1hcnlTZWxlY3Rpb25D
bGlwYm9hcmQoc2VsZWN0aW9uTW9kZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3Rl
Ym9hcmRIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTk3
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxw
ZXIuY3BwCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRp
biBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIElnYWxp
YSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHdGtW
ZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIK
KyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgR2RrQXRvbSB0ZXh0UGxhaW5BdG9tOworc3RhdGljIEdka0F0b20gbWFya3VwQXRv
bTsKK3N0YXRpYyBHZGtBdG9tIG5ldHNjYXBlVVJMQXRvbTsKK3N0YXRpYyBHZGtBdG9tIHVyaUxp
c3RBdG9tOworc3RhdGljIEdka0F0b20gc21hcnRQYXN0ZUF0b207CitzdGF0aWMgU3RyaW5nIGdN
YXJrdXBQcmVmaXg7CisKK3N0YXRpYyB2b2lkIHJlbW92ZU1hcmt1cFByZWZpeChTdHJpbmcmIG1h
cmt1cCkKK3sKKyAgICAvLyBUaGUgbWFya3VwIHByZWZpeCBpcyBub3QgaGFybWZ1bCwgYnV0IHdl
IHJlbW92ZSBpdCBmcm9tIHRoZSBzdHJpbmcgYW55d2F5LCBzbyB0aGF0CisgICAgLy8gd2UgY2Fu
IGhhdmUgY29uc2lzdGVudCByZXN1bHRzIHdpdGggb3RoZXIgcG9ydHMgZHVyaW5nIHRoZSBsYXlv
dXQgdGVzdHMuCisgICAgaWYgKG1hcmt1cC5zdGFydHNXaXRoKGdNYXJrdXBQcmVmaXgpKQorICAg
ICAgICBtYXJrdXAucmVtb3ZlKDAsIGdNYXJrdXBQcmVmaXgubGVuZ3RoKCkpOworfQorCitzdGF0
aWMgdm9pZCBpbml0R2RrQXRvbXMoKQoreworICAgIHN0YXRpYyBnYm9vbGVhbiBpbml0aWFsaXpl
ZCA9IEZBTFNFOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbml0aWFsaXplZCA9IFRSVUU7CisKKyAgICB0ZXh0UGxhaW5BdG9tID0gZ2RrX2F0b21faW50
ZXJuKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiLCBGQUxTRSk7CisgICAgbWFya3VwQXRvbSA9
IGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpOworICAgIG5ldHNjYXBlVVJMQXRv
bSA9IGdka19hdG9tX2ludGVybigiX05FVFNDQVBFX1VSTCIsIEZBTFNFKTsKKyAgICB1cmlMaXN0
QXRvbSA9IGdka19hdG9tX2ludGVybigidGV4dC91cmktbGlzdCIsIEZBTFNFKTsKKyAgICBzbWFy
dFBhc3RlQXRvbSA9IGdka19hdG9tX2ludGVybigiYXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5z
bWFydHBhc3RlIiwgRkFMU0UpOworICAgIGdNYXJrdXBQcmVmaXggPSAiPG1ldGEgaHR0cC1lcXVp
dj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIj4i
OworfQorCitQYXN0ZWJvYXJkSGVscGVyKiBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXN0ZWJvYXJkSGVscGVy
LCBkZWZhdWx0SGVscGVyLCAoKSk7CisgICAgcmV0dXJuICZkZWZhdWx0SGVscGVyOworfQorCitQ
YXN0ZWJvYXJkSGVscGVyOjpQYXN0ZWJvYXJkSGVscGVyKCkKKyAgICA6IG1fdGFyZ2V0TGlzdChn
dGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApKQorICAgICwgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xp
cGJvYXJkKGZhbHNlKQoreworICAgIGluaXRHZGtBdG9tcygpOworCisgICAgZ3RrX3RhcmdldF9s
aXN0X2FkZF90ZXh0X3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJn
ZXRUeXBlVGV4dCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QsIG1hcmt1
cEF0b20sIDAsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVNYXJrdXApOworICAgIGd0a190
YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVy
OjpUYXJnZXRUeXBlVVJJTGlzdCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3RhcmdldExp
c3QsIG5ldHNjYXBlVVJMQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU5ldHNj
YXBlVVJMKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobV90YXJnZXRM
aXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOworfQorCitQYXN0
ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhlbHBlcigpCit7CisgICAgZ3RrX3RhcmdldF9saXN0
X3VucmVmKG1fdGFyZ2V0TGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR2RrRGlzcGxheSogZGlz
cGxheUZyb21GcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBQ
YWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBBU1NFUlQocGFnZSk7CisgICAgQ2hyb21l
KiBjaHJvbWUgPSBwYWdlLT5jaHJvbWUoKTsKKyAgICBBU1NFUlQoY2hyb21lKTsKKyAgICBQbGF0
Zm9ybVBhZ2VDbGllbnQgY2xpZW50ID0gY2hyb21lLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAg
ICByZXR1cm4gY2xpZW50ID8gZ3RrX3dpZGdldF9nZXRfZGlzcGxheShjbGllbnQpIDogZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKTsKK30KKworR3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJkSGVscGVy
OjpnZXRDdXJyZW50Q2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAobV91c2VQcmlt
YXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKQorICAgICAgICByZXR1cm4gZ2V0UHJpbWFyeVNlbGVjdGlv
bkNsaXBib2FyZChmcmFtZSk7CisgICAgcmV0dXJuIGdldENsaXBib2FyZChmcmFtZSk7Cit9CisK
K0d0a0NsaXBib2FyZCogUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkKEZyYW1lKiBmcmFt
ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZGlz
cGxheUZyb21GcmFtZShmcmFtZSksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKK30KKworR3Rr
Q2xpcGJvYXJkKiBQYXN0ZWJvYXJkSGVscGVyOjpnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJk
KEZyYW1lKiBmcmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF9nZXRfZm9y
X2Rpc3BsYXkoZGlzcGxheUZyb21GcmFtZShmcmFtZSksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7
Cit9CisKK0d0a1RhcmdldExpc3QqIFBhc3RlYm9hcmRIZWxwZXI6OnRhcmdldExpc3QoKSBjb25z
dAoreworICAgIHJldHVybiBtX3RhcmdldExpc3Q7Cit9CisKK3N0YXRpYyBTdHJpbmcgc2VsZWN0
aW9uRGF0YVRvVVRGOFN0cmluZyhHdGtTZWxlY3Rpb25EYXRhKiBkYXRhKQoreworICAgIC8vIGdf
c3RybmR1cCBndWFyZHMgYWdhaW5zdCBzZWxlY3Rpb24gZGF0YSB0aGF0IGlzIG5vdCBudWxsLXRl
cm1pbmF0ZWQuCisgICAgR093blB0cjxnY2hhcj4gbWFya3VwU3RyaW5nKGdfc3RybmR1cChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0
YSkpLCBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkpOworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KG1hcmt1cFN0cmluZy5nZXQoKSk7Cit9CisKK3ZvaWQgUGFzdGVib2Fy
ZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCit7
CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBi
b2FyZChjbGlwYm9hcmQpOworICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKKworICAgIGlmIChndGtf
Y2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9hdmFpbGFibGUoY2xpcGJvYXJkKSkgeworICAgICAgICBH
T3duUHRyPGdjaGFyPiB0ZXh0RGF0YShndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xpcGJv
YXJkKSk7CisgICAgICAgIGlmICh0ZXh0RGF0YSkKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNl
dFRleHQoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0RGF0YS5nZXQoKSkpOworICAgIH0KKworICAgIGlm
IChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlwYm9hcmQsIG1hcmt1
cEF0b20pKSB7CisgICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBi
b2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7CisgICAgICAg
ICAgICBTdHJpbmcgbWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAg
ICAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7CisgICAgICAgICAgICBkYXRhT2Jq
ZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKKyAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9m
cmVlKGRhdGEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGd0a19jbGlwYm9hcmRfd2Fp
dF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgdXJpTGlzdEF0b20pKSB7CisgICAgICAg
IGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250
ZW50cyhjbGlwYm9hcmQsIHVyaUxpc3RBdG9tKSkgeworICAgICAgICAgICAgZGF0YU9iamVjdC0+
c2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKKyAgICAgICAgICAg
IGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxTZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEq
IHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7
CisgICAgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZVRleHQpCisgICAgICAgIGd0a19zZWxlY3Rpb25f
ZGF0YV9zZXRfdGV4dChzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT50ZXh0KCkudXRmOCgpLmRh
dGEoKSwgLTEpOworCisgICAgZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTWFya3VwKSB7Cisg
ICAgICAgIC8vIFNvbWUgTGludXggYXBwbGljYXRpb25zIHJlZnVzZSB0byBhY2NlcHQgcGFzdGVk
IG1hcmt1cCB1bmxlc3MgaXQgaXMKKyAgICAgICAgLy8gcHJlZml4ZWQgYnkgYSBjb250ZW50LXR5
cGUgbWV0YSB0YWcuCisgICAgICAgIENTdHJpbmcgbWFya3VwID0gU3RyaW5nKGdNYXJrdXBQcmVm
aXggKyBkYXRhT2JqZWN0LT5tYXJrdXAoKSkudXRmOCgpOworICAgICAgICBndGtfc2VsZWN0aW9u
X2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG1hcmt1cEF0b20sIDgsCisgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KG1hcmt1cC5kYXRhKCkpLCBtYXJrdXAubGVuZ3Ro
KCkgKyAxKTsKKworICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlVVJJTGlzdCkgewor
ICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBkYXRhT2JqZWN0LT51cmlMaXN0KCkudXRmOCgpOwor
ICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIHVyaUxpc3RBdG9t
LCA4LAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPih1cmlMaXN0
LmRhdGEoKSksIHVyaUxpc3QubGVuZ3RoKCkgKyAxKTsKKworICAgIH0gZWxzZSBpZiAoaW5mbyA9
PSBUYXJnZXRUeXBlTmV0c2NhcGVVUkwgJiYgZGF0YU9iamVjdC0+aGFzVVJMKCkpIHsKKyAgICAg
ICAgU3RyaW5nIHVybChkYXRhT2JqZWN0LT51cmwoKSk7CisgICAgICAgIFN0cmluZyByZXN1bHQo
dXJsKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKKworICAgICAgICBpZiAoZGF0YU9i
amVjdC0+aGFzVGV4dCgpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkYXRhT2JqZWN0LT50
ZXh0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVybCk7CisK
KyAgICAgICAgR093blB0cjxnY2hhcj4gcmVzdWx0RGF0YShnX3N0cmR1cChyZXN1bHQudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEs
IG5ldHNjYXBlVVJMQXRvbSwgOCwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Z3VjaGFyKj4ocmVzdWx0RGF0YS5nZXQoKSksIHN0cmxlbihyZXN1bHREYXRhLmdldCgpKSArIDEp
OworCisgICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVJbWFnZSkKKyAgICAgICAgZ3Rr
X3NlbGVjdGlvbl9kYXRhX3NldF9waXhidWYoc2VsZWN0aW9uRGF0YSwgZGF0YU9iamVjdC0+aW1h
Z2UoKSk7CisKKyAgICBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVTbWFydFBhc3RlKQorICAg
ICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uRGF0YSwgIiIsIC0xKTsK
K30KKworR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdEZvckRhdGFP
YmplY3QoRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCwgU21hcnRQYXN0ZUluY2x1c2lvbiBzaG91
bGRJbmx1ZGVTbWFydFBhc3RlKQoreworICAgIEd0a1RhcmdldExpc3QqIGxpc3QgPSBndGtfdGFy
Z2V0X2xpc3RfbmV3KDAsIDApOworCisgICAgaWYgKGRhdGFPYmplY3QtPmhhc1RleHQoKSkKKyAg
ICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobGlzdCwgVGFyZ2V0VHlwZVRl
eHQpOworCisgICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKQorICAgICAgICBndGtfdGFy
Z2V0X2xpc3RfYWRkKGxpc3QsIG1hcmt1cEF0b20sIDAsIFRhcmdldFR5cGVNYXJrdXApOworCisg
ICAgaWYgKGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgeworICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfYWRkX3VyaV90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVVUklMaXN0KTsKKyAgICAgICAgZ3Rr
X3RhcmdldF9saXN0X2FkZChsaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAsIFRhcmdldFR5cGVOZXRz
Y2FwZVVSTCk7CisgICAgfQorCisgICAgaWYgKGRhdGFPYmplY3QtPmhhc0ltYWdlKCkpCisgICAg
ICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlSW1h
Z2UsIFRSVUUpOworCisgICAgaWYgKHNob3VsZElubHVkZVNtYXJ0UGFzdGUgPT0gSW5jbHVkZVNt
YXJ0UGFzdGUpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgc21hcnRQYXN0ZUF0
b20sIDAsIFRhcmdldFR5cGVTbWFydFBhc3RlKTsKKworICAgIHJldHVybiBsaXN0OworfQorCit2
b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVj
dGlvbkRhdGEqIGRhdGEsIGd1aW50IGluZm8sIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7
CisgICAgaWYgKCFndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdka0F0b20gdGFyZ2V0ID0gZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90YXJn
ZXQoZGF0YSk7CisgICAgaWYgKHRhcmdldCA9PSB0ZXh0UGxhaW5BdG9tKQorICAgICAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAgIGVs
c2UgaWYgKHRhcmdldCA9PSBtYXJrdXBBdG9tKSB7CisgICAgICAgIFN0cmluZyBtYXJrdXAoc2Vs
ZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgICAgIHJlbW92ZU1hcmt1cFByZWZp
eChtYXJrdXApOworICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKKyAgICB9
IGVsc2UgaWYgKHRhcmdldCA9PSB1cmlMaXN0QXRvbSkgeworICAgICAgICBkYXRhT2JqZWN0LT5z
ZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAgIH0gZWxzZSBp
ZiAodGFyZ2V0ID09IG5ldHNjYXBlVVJMQXRvbSkgeworICAgICAgICBTdHJpbmcgdXJsV2l0aExh
YmVsKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBwaWVjZXM7CisgICAgICAgIHVybFdpdGhMYWJlbC5zcGxpdCgiXG4iLCBwaWVjZXMpOwor
CisgICAgICAgIC8vIEdpdmUgcHJlZmVyZW5jZSB0byB0ZXh0L3VyaS1saXN0IGhlcmUsIGFzIGl0
IGNhbiBob2xkIG1vcmUKKyAgICAgICAgLy8gdGhhbiBvbmUgVVJJIGJ1dCBzdGlsbCB0YWtlICB0
aGUgbGFiZWwgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICBpZiAoIWRhdGFPYmplY3QtPmhhc1VS
SUxpc3QoKSkKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3QocGllY2VzWzBdKTsK
KyAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+
c2V0VGV4dChwaWVjZXNbMV0pOworICAgIH0KK30KKworVmVjdG9yPEdka0F0b20+IFBhc3RlYm9h
cmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdD
b250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIEFsd2F5cyBzZWFyY2ggZm9yIHRoZXNlIGNvbW1v
biBhdG9tcy4KKyAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zOworICAgIGRyb3BBdG9tcy5h
cHBlbmQodGV4dFBsYWluQXRvbSk7CisgICAgZHJvcEF0b21zLmFwcGVuZChtYXJrdXBBdG9tKTsK
KyAgICBkcm9wQXRvbXMuYXBwZW5kKHVyaUxpc3RBdG9tKTsKKyAgICBkcm9wQXRvbXMuYXBwZW5k
KG5ldHNjYXBlVVJMQXRvbSk7CisKKyAgICAvLyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUg
bW9zdCBhcHBsaWNhYmxlIGltYWdlIHR5cGUuCisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBs
aXN0ID0gYWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkpOworICAgIGd0a190YXJn
ZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBlSW1hZ2UsIFRS
VUUpOworICAgIEdka0F0b20gYXRvbSA9IGd0a19kcmFnX2Rlc3RfZmluZF90YXJnZXQod2lkZ2V0
LCBjb250ZXh0LCBsaXN0LmdldCgpKTsKKyAgICBpZiAoYXRvbSAhPSBHREtfTk9ORSkKKyAgICAg
ICAgZHJvcEF0b21zLmFwcGVuZChhdG9tKTsKKworICAgIHJldHVybiBkcm9wQXRvbXM7Cit9CisK
K3N0YXRpYyBEYXRhT2JqZWN0R3RrKiBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7CisK
K3N0YXRpYyB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBj
bGlwYm9hcmQsIEd0a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGdw
b2ludGVyIGRhdGEpCit7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmpl
Y3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOworICAgIEFTU0VSVChkYXRhT2JqZWN0KTsK
KyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2Vs
ZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkYXRhT2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJv
YXJkLCBncG9pbnRlciBkYXRhKQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBE
YXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBBU1NFUlQoZGF0YU9i
amVjdCk7CisKKyAgICAvLyBPbmx5IGNsZWFyIHRoZSBEYXRhT2JqZWN0IGZvciB0aGlzIGNsaXBi
b2FyZCBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBzZXR0aW5nIGl0LgorICAgIGlmIChkYXRhT2Jq
ZWN0ICE9IHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0KQorICAgICAgICBkYXRhT2JqZWN0LT5j
bGVhckFsbCgpOworCisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBHQ2xv
c3VyZSogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxHQ2xvc3VyZSo+KGRhdGEpOworICAgIEdWYWx1
ZSBmaXJzdEFyZ3VtZW50ID0gezAsIHt7MH19fTsKKyAgICBnX3ZhbHVlX2luaXQoJmZpcnN0QXJn
dW1lbnQsIEdfVFlQRV9QT0lOVEVSKTsKKyAgICBnX3ZhbHVlX3NldF9wb2ludGVyKCZmaXJzdEFy
Z3VtZW50LCBjbGlwYm9hcmQpOworICAgIGdfY2xvc3VyZV9pbnZva2UoY2FsbGJhY2ssIDAsIDEs
ICZmaXJzdEFyZ3VtZW50LCAwKTsKKyAgICBnX2Nsb3N1cmVfdW5yZWYoY2FsbGJhY2spOworfQor
Cit2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OndyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJv
YXJkKiBjbGlwYm9hcmQsIFNtYXJ0UGFzdGVJbmNsdXNpb24gaW5jbHVkZVNtYXJ0UGFzdGUsIEdD
bG9zdXJlKiBjYWxsYmFjaykKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgR3RrVGFyZ2V0TGlzdCog
bGlzdCA9IHRhcmdldExpc3RGb3JEYXRhT2JqZWN0KGRhdGFPYmplY3QsIGluY2x1ZGVTbWFydFBh
c3RlKTsKKworICAgIGludCBudW1iZXJPZlRhcmdldHM7CisgICAgR3RrVGFyZ2V0RW50cnkqIHRh
YmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0KGxpc3QsICZudW1iZXJPZlRhcmdl
dHMpOworCisgICAgaWYgKG51bWJlck9mVGFyZ2V0cyA+IDAgJiYgdGFibGUpIHsKKyAgICAgICAg
c2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSBkYXRhT2JqZWN0OworCisgICAgICAgIGd0a19j
bGlwYm9hcmRfc2V0X3dpdGhfZGF0YShjbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMs
CisgICAgICAgICAgICBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBjbGVhckNsaXBib2Fy
ZENvbnRlbnRzQ2FsbGJhY2ssIGNhbGxiYWNrKTsKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRf
Y2FuX3N0b3JlKGNsaXBib2FyZCwgMCwgMCk7CisKKyAgICAgICAgc2V0dGluZ0NsaXBib2FyZERh
dGFPYmplY3QgPSAwOworCisgICAgfSBlbHNlCisgICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIo
Y2xpcGJvYXJkKTsKKworICAgIGlmICh0YWJsZSkKKyAgICAgICAgZ3RrX3RhcmdldF90YWJsZV9m
cmVlKHRhYmxlLCBudW1iZXJPZlRhcmdldHMpOworICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihs
aXN0KTsKK30KKworYm9vbCBQYXN0ZWJvYXJkSGVscGVyOjpjbGlwYm9hcmRDb250ZW50U3VwcG9y
dHNTbWFydFJlcGxhY2UoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCit7CisgICAgcmV0dXJuIGd0
a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgc21hcnRQYXN0
ZUF0b20pOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVi
b2FyZEhlbHBlci5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzOGY4MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTHVjYSBCcnVubyA8bGV0aGFsbWFuODhAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgUGFzdGVib2FyZEhlbHBlcl9oCisjZGVmaW5lIFBhc3RlYm9h
cmRIZWxwZXJfaAorCisjaW5jbHVkZSAiRnJhbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBEYXRhT2JqZWN0R3RrOworCitjbGFzcyBQYXN0ZWJvYXJkSGVscGVyIHsKK3B1Ymxp
YzoKKyAgICBQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgdmlydHVhbCB+UGFzdGVib2FyZEhlbHBl
cigpOworICAgIHN0YXRpYyBQYXN0ZWJvYXJkSGVscGVyKiBkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpOworCisgICAgdm9pZCBzZXRVc2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGJvb2wgdXNl
UHJpbWFyeSkgeyBtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQgPSB1c2VQcmltYXJ5OyB9
CisgICAgYm9vbCB1c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKCkgeyByZXR1cm4gbV91c2VQ
cmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkOyB9CisKKyAgICBlbnVtIFNtYXJ0UGFzdGVJbmNsdXNp
b24geyBJbmNsdWRlU21hcnRQYXN0ZSwgRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSB9OworCisgICAg
R3RrQ2xpcGJvYXJkKiBnZXRDdXJyZW50Q2xpcGJvYXJkKEZyYW1lKik7CisgICAgR3RrQ2xpcGJv
YXJkKiBnZXRDbGlwYm9hcmQoRnJhbWUqKSBjb25zdDsKKyAgICBHdGtDbGlwYm9hcmQqIGdldFBy
aW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoRnJhbWUqKSBjb25zdDsKKyAgICBHdGtUYXJnZXRMaXN0
KiB0YXJnZXRMaXN0KCkgY29uc3Q7CisgICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdEZvckRh
dGFPYmplY3QoRGF0YU9iamVjdEd0ayosIFNtYXJ0UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1
ZGVTbWFydFBhc3RlKTsKKyAgICB2b2lkIGZpbGxTZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRh
dGEqLCBndWludCwgRGF0YU9iamVjdEd0ayopOworICAgIHZvaWQgZmlsbERhdGFPYmplY3RGcm9t
RHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50LCBEYXRhT2JqZWN0R3RrKik7CisgICAg
VmVjdG9yPEdka0F0b20+IGRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiwgR2RrRHJhZ0Nv
bnRleHQqKTsKKyAgICB2b2lkIHdyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiwg
U21hcnRQYXN0ZUluY2x1c2lvbiA9IERvTm90SW5jbHVkZVNtYXJ0UGFzdGUsIEdDbG9zdXJlKiA9
IDApOworICAgIHZvaWQgZ2V0Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKik7CisKKyAg
ICBlbnVtIFBhc3RlYm9hcmRUYXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU1hcmt1cCwgVGFyZ2V0VHlw
ZVRleHQsIFRhcmdldFR5cGVJbWFnZSwgVGFyZ2V0VHlwZVVSSUxpc3QsIFRhcmdldFR5cGVOZXRz
Y2FwZVVSTCwgVGFyZ2V0VHlwZVNtYXJ0UGFzdGUsIFRhcmdldFR5cGVVbmtub3duIH07CisgICAg
Ym9vbCBjbGlwYm9hcmRDb250ZW50U3VwcG9ydHNTbWFydFJlcGxhY2UoR3RrQ2xpcGJvYXJkKik7
CisKK3ByaXZhdGU6CisgICAgR3RrVGFyZ2V0TGlzdCogbV90YXJnZXRMaXN0OworICAgIGJvb2wg
bV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkOworfTsKKworfQorCisjZW5kaWYgLy8gUGFz
dGVib2FyZEhlbHBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2ZDZl
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50R3RrLmNwcApAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAiV2lu
ZG93c0tleWJvYXJkQ29kZXMuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxn
ZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBUaGlzIGlzIGluY29tcGxldGUuICBXZSBzaG91bGQg
Y2hhbmdlIHRoaXMgdG8gbWlycm9yCisvLyBtb3JlIGxpa2Ugd2hhdCBGaXJlZm94IGRvZXMsIGFu
ZCBnZW5lcmF0ZSB0aGVzZSBzd2l0Y2ggc3RhdGVtZW50cworLy8gYXQgYnVpbGQgdGltZS4KK1N0
cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKHVu
c2lnbmVkIGtleUNvZGUpCit7CisgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAgICAgIGNhc2Ug
R0RLX01lbnU6CisgICAgICAgIGNhc2UgR0RLX0FsdF9MOgorICAgICAgICBjYXNlIEdES19BbHRf
UjoKKyAgICAgICAgICAgIHJldHVybiAiQWx0IjsKKyAgICAgICAgY2FzZSBHREtfQ2xlYXI6Cisg
ICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAgICAgICAgY2FzZSBHREtfRG93bjoKKyAgICAg
ICAgICAgIHJldHVybiAiRG93biI7CisgICAgICAgICAgICAvLyAiRW5kIgorICAgICAgICBjYXNl
IEdES19FbmQ6CisgICAgICAgICAgICByZXR1cm4gIkVuZCI7CisgICAgICAgICAgICAvLyAiRW50
ZXIiCisgICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfS1BfRW50
ZXI6CisgICAgICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgICAgIHJldHVybiAiRW50ZXIi
OworICAgICAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICAgICAgcmV0dXJuICJFeGVjdXRl
IjsKKyAgICAgICAgY2FzZSBHREtfRjE6CisgICAgICAgICAgICByZXR1cm4gIkYxIjsKKyAgICAg
ICAgY2FzZSBHREtfRjI6CisgICAgICAgICAgICByZXR1cm4gIkYyIjsKKyAgICAgICAgY2FzZSBH
REtfRjM6CisgICAgICAgICAgICByZXR1cm4gIkYzIjsKKyAgICAgICAgY2FzZSBHREtfRjQ6Cisg
ICAgICAgICAgICByZXR1cm4gIkY0IjsKKyAgICAgICAgY2FzZSBHREtfRjU6CisgICAgICAgICAg
ICByZXR1cm4gIkY1IjsKKyAgICAgICAgY2FzZSBHREtfRjY6CisgICAgICAgICAgICByZXR1cm4g
IkY2IjsKKyAgICAgICAgY2FzZSBHREtfRjc6CisgICAgICAgICAgICByZXR1cm4gIkY3IjsKKyAg
ICAgICAgY2FzZSBHREtfRjg6CisgICAgICAgICAgICByZXR1cm4gIkY4IjsKKyAgICAgICAgY2Fz
ZSBHREtfRjk6CisgICAgICAgICAgICByZXR1cm4gIkY5IjsKKyAgICAgICAgY2FzZSBHREtfRjEw
OgorICAgICAgICAgICAgcmV0dXJuICJGMTAiOworICAgICAgICBjYXNlIEdES19GMTE6CisgICAg
ICAgICAgICByZXR1cm4gIkYxMSI7CisgICAgICAgIGNhc2UgR0RLX0YxMjoKKyAgICAgICAgICAg
IHJldHVybiAiRjEyIjsKKyAgICAgICAgY2FzZSBHREtfRjEzOgorICAgICAgICAgICAgcmV0dXJu
ICJGMTMiOworICAgICAgICBjYXNlIEdES19GMTQ6CisgICAgICAgICAgICByZXR1cm4gIkYxNCI7
CisgICAgICAgIGNhc2UgR0RLX0YxNToKKyAgICAgICAgICAgIHJldHVybiAiRjE1IjsKKyAgICAg
ICAgY2FzZSBHREtfRjE2OgorICAgICAgICAgICAgcmV0dXJuICJGMTYiOworICAgICAgICBjYXNl
IEdES19GMTc6CisgICAgICAgICAgICByZXR1cm4gIkYxNyI7CisgICAgICAgIGNhc2UgR0RLX0Yx
ODoKKyAgICAgICAgICAgIHJldHVybiAiRjE4IjsKKyAgICAgICAgY2FzZSBHREtfRjE5OgorICAg
ICAgICAgICAgcmV0dXJuICJGMTkiOworICAgICAgICBjYXNlIEdES19GMjA6CisgICAgICAgICAg
ICByZXR1cm4gIkYyMCI7CisgICAgICAgIGNhc2UgR0RLX0YyMToKKyAgICAgICAgICAgIHJldHVy
biAiRjIxIjsKKyAgICAgICAgY2FzZSBHREtfRjIyOgorICAgICAgICAgICAgcmV0dXJuICJGMjIi
OworICAgICAgICBjYXNlIEdES19GMjM6CisgICAgICAgICAgICByZXR1cm4gIkYyMyI7CisgICAg
ICAgIGNhc2UgR0RLX0YyNDoKKyAgICAgICAgICAgIHJldHVybiAiRjI0IjsKKyAgICAgICAgY2Fz
ZSBHREtfSGVscDoKKyAgICAgICAgICAgIHJldHVybiAiSGVscCI7CisgICAgICAgIGNhc2UgR0RL
X0hvbWU6CisgICAgICAgICAgICByZXR1cm4gIkhvbWUiOworICAgICAgICBjYXNlIEdES19JbnNl
cnQ6CisgICAgICAgICAgICByZXR1cm4gIkluc2VydCI7CisgICAgICAgIGNhc2UgR0RLX0xlZnQ6
CisgICAgICAgICAgICByZXR1cm4gIkxlZnQiOworICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246
CisgICAgICAgICAgICByZXR1cm4gIlBhZ2VEb3duIjsKKyAgICAgICAgY2FzZSBHREtfUGFnZV9V
cDoKKyAgICAgICAgICAgIHJldHVybiAiUGFnZVVwIjsKKyAgICAgICAgY2FzZSBHREtfUGF1c2U6
CisgICAgICAgICAgICByZXR1cm4gIlBhdXNlIjsKKyAgICAgICAgY2FzZSBHREtfMzI3MF9Qcmlu
dFNjcmVlbjoKKyAgICAgICAgY2FzZSBHREtfUHJpbnQ6CisgICAgICAgICAgICByZXR1cm4gIlBy
aW50U2NyZWVuIjsKKyAgICAgICAgY2FzZSBHREtfUmlnaHQ6CisgICAgICAgICAgICByZXR1cm4g
IlJpZ2h0IjsKKyAgICAgICAgY2FzZSBHREtfU2VsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJT
ZWxlY3QiOworICAgICAgICBjYXNlIEdES19VcDoKKyAgICAgICAgICAgIHJldHVybiAiVXAiOwor
ICAgICAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDA3Ri4KKyAg
ICAgICAgY2FzZSBHREtfRGVsZXRlOgorICAgICAgICAgICAgcmV0dXJuICJVKzAwN0YiOworICAg
ICAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gIlUrMDAwOCI7Cisg
ICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKKyAgICAgICAgY2FzZSBHREtfMzI3MF9CYWNr
VGFiOgorICAgICAgICBjYXNlIEdES19UYWI6CisgICAgICAgICAgICByZXR1cm4gIlUrMDAwOSI7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUr
JTA0WCIsIGdka19rZXl2YWxfdG9fdW5pY29kZShnZGtfa2V5dmFsX3RvX3VwcGVyKGtleUNvZGUp
KSk7CisgICAgfQorfQorCitpbnQgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29k
ZUZvckdka0tleUNvZGUodW5zaWduZWQga2V5Y29kZSkKK3sKKyAgICBzd2l0Y2ggKGtleWNvZGUp
IHsKKyAgICAgICAgY2FzZSBHREtfS1BfMDoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQw
Oy8vICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfMToKKyAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQxOy8vICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkK
KyAgICAgICAgY2FzZSBHREtfS1BfMjoKKyAgICAgICAgICAgIHJldHVybiAgVktfTlVNUEFEMjsg
Ly8gKDYyKSBOdW1lcmljIGtleXBhZCAyIGtleQorICAgICAgICBjYXNlIEdES19LUF8zOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDM7IC8vICg2MykgTnVtZXJpYyBrZXlwYWQgMyBrZXkK
KyAgICAgICAgY2FzZSBHREtfS1BfNDoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ0OyAv
LyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzU6CisgICAg
ICAgICAgICByZXR1cm4gVktfTlVNUEFENTsgLy8oNjUpIE51bWVyaWMga2V5cGFkIDUga2V5Cisg
ICAgICAgIGNhc2UgR0RLX0tQXzY6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENjsgLy8g
KDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQorICAgICAgICBjYXNlIEdES19LUF83OgorICAgICAg
ICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkKKyAg
ICAgICAgY2FzZSBHREtfS1BfODoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ4OyAvLyAo
NjgpIE51bWVyaWMga2V5cGFkIDgga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzk6CisgICAgICAg
ICAgICByZXR1cm4gVktfTlVNUEFEOTsgLy8gKDY5KSBOdW1lcmljIGtleXBhZCA5IGtleQorICAg
ICAgICBjYXNlIEdES19LUF9NdWx0aXBseToKKyAgICAgICAgICAgIHJldHVybiBWS19NVUxUSVBM
WTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfQWRkOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0FERDsgLy8gKDZCKSBBZGQga2V5CisgICAgICAgIGNhc2UgR0RLX0tQ
X1N1YnRyYWN0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1NVQlRSQUNUOyAvLyAoNkQpIFN1YnRy
YWN0IGtleQorICAgICAgICBjYXNlIEdES19LUF9EZWNpbWFsOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfRGl2
aWRlOgorICAgICAgICAgICAgcmV0dXJuIFZLX0RJVklERTsgLy8gKDZGKSBEaXZpZGUga2V5CisK
KyAgICAgICAgY2FzZSBHREtfS1BfUGFnZV9VcDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUklP
UjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgICAgICBjYXNlIEdES19LUF9QYWdlX0Rvd246Cisg
ICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgICAg
IGNhc2UgR0RLX0tQX0VuZDoKKyAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5E
IGtleQorICAgICAgICBjYXNlIEdES19LUF9Ib21lOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hP
TUU7IC8vICgyNCkgSE9NRSBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfTGVmdDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgICAgIGNhc2Ug
R0RLX0tQX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtl
eQorICAgICAgICBjYXNlIEdES19LUF9SaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19SSUdI
VDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfRG93bjoKKyAg
ICAgICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisKKyAgICAg
ICAgY2FzZSBHREtfQmFja1NwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFZLX0JBQ0s7IC8vICgw
OCkgQkFDS1NQQUNFIGtleQorICAgICAgICBjYXNlIEdES19JU09fTGVmdF9UYWI6CisgICAgICAg
IGNhc2UgR0RLXzMyNzBfQmFja1RhYjoKKyAgICAgICAgY2FzZSBHREtfVGFiOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5CisgICAgICAgIGNhc2UgR0RLX0NsZWFy
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOyAvLyAoMEMpIENMRUFSIGtleQorICAgICAg
ICBjYXNlIEdES19JU09fRW50ZXI6CisgICAgICAgIGNhc2UgR0RLX0tQX0VudGVyOgorICAgICAg
ICBjYXNlIEdES19SZXR1cm46CisgICAgICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygwRCkg
UmV0dXJuIGtleQorCisgICAgICAgICAgICAvLyBWS19TSElGVCAoMTApIFNISUZUIGtleQorICAg
ICAgICAgICAgLy8gVktfQ09OVFJPTCAoMTEpIENUUkwga2V5CisKKyAgICAgICAgY2FzZSBHREtf
TWVudToKKyAgICAgICAgICAgIHJldHVybiBWS19BUFBTOyAgLy8gKDVEKSBBcHBsaWNhdGlvbnMg
a2V5IChOYXR1cmFsIGtleWJvYXJkKQorCisgICAgICAgICAgICAvLyBWS19NRU5VICgxMikgQUxU
IGtleQorCisgICAgICAgIGNhc2UgR0RLX1BhdXNlOgorICAgICAgICAgICAgcmV0dXJuIFZLX1BB
VVNFOyAvLyAoMTMpIFBBVVNFIGtleQorICAgICAgICBjYXNlIEdES19DYXBzX0xvY2s6CisgICAg
ICAgICAgICByZXR1cm4gVktfQ0FQSVRBTDsgLy8gKDE0KSBDQVBTIExPQ0sga2V5CisgICAgICAg
IGNhc2UgR0RLX0thbmFfTG9jazoKKyAgICAgICAgY2FzZSBHREtfS2FuYV9TaGlmdDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19LQU5BOyAvLyAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkg
S2FuYSBtb2RlCisgICAgICAgIGNhc2UgR0RLX0hhbmd1bDoKKyAgICAgICAgICAgIHJldHVybiBW
S19IQU5HVUw7IC8vIFZLX0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQorICAgICAgICAgICAg
Ly8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQorICAgICAgICAgICAgLy8gVktfRklOQUwg
KDE4KSBJTUUgZmluYWwgbW9kZQorICAgICAgICBjYXNlIEdES19IYW5ndWxfSGFuamE6CisgICAg
ICAgICAgICByZXR1cm4gVktfSEFOSkE7IC8vICgxOSkgSU1FIEhhbmphIG1vZGUKKyAgICAgICAg
Y2FzZSBHREtfS2Fuamk6CisgICAgICAgICAgICByZXR1cm4gVktfS0FOSkk7IC8vICgxOSkgSU1F
IEthbmppIG1vZGUKKyAgICAgICAgY2FzZSBHREtfRXNjYXBlOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5CisgICAgICAgICAgICAvLyBWS19DT05WRVJUICgx
QykgSU1FIGNvbnZlcnQKKyAgICAgICAgICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9u
Y29udmVydAorICAgICAgICAgICAgLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorICAgICAg
ICAgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0CisgICAg
ICAgIGNhc2UgR0RLX3NwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAvLyAoMjAp
IFNQQUNFQkFSCisgICAgICAgIGNhc2UgR0RLX1BhZ2VfVXA6CisgICAgICAgICAgICByZXR1cm4g
VktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKKyAgICAgICAgY2FzZSBHREtfUGFnZV9Eb3du
OgorICAgICAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQorICAg
ICAgICBjYXNlIEdES19FbmQ6CisgICAgICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVO
RCBrZXkKKyAgICAgICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgICAgIHJldHVybiBWS19IT01F
OyAvLyAoMjQpIEhPTUUga2V5CisgICAgICAgIGNhc2UgR0RLX0xlZnQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19V
cDoKKyAgICAgICAgICAgIHJldHVybiBWS19VUDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKKyAgICAg
ICAgY2FzZSBHREtfUmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykg
UklHSFQgQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX0Rvd246CisgICAgICAgICAgICByZXR1
cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19TZWxl
Y3Q6CisgICAgICAgICAgICByZXR1cm4gVktfU0VMRUNUOyAvLyAoMjkpIFNFTEVDVCBrZXkKKyAg
ICAgICAgY2FzZSBHREtfUHJpbnQ6CisgICAgICAgICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8v
ICgyQykgUFJJTlQgU0NSRUVOIGtleQorICAgICAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7Ly8gKDJCKSBFWEVDVVRFIGtleQorICAgICAgICBjYXNl
IEdES19JbnNlcnQ6CisgICAgICAgIGNhc2UgR0RLX0tQX0luc2VydDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtleQorICAgICAgICBjYXNlIEdES19EZWxldGU6
CisgICAgICAgIGNhc2UgR0RLX0tQX0RlbGV0ZToKKyAgICAgICAgICAgIHJldHVybiBWS19ERUxF
VEU7IC8vICgyRSkgREVMIGtleQorICAgICAgICBjYXNlIEdES19IZWxwOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVMUCBrZXkKKyAgICAgICAgY2FzZSBHREtfMDoKKyAg
ICAgICAgY2FzZSBHREtfcGFyZW5yaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS18wOyAgICAv
LyAgKDMwKSAwKSBrZXkKKyAgICAgICAgY2FzZSBHREtfMToKKyAgICAgICAgY2FzZSBHREtfZXhj
bGFtOgorICAgICAgICAgICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkKKyAgICAgICAg
Y2FzZSBHREtfMjoKKyAgICAgICAgY2FzZSBHREtfYXQ6CisgICAgICAgICAgICByZXR1cm4gVktf
MjsgLy8gICgzMikgMiAmIGtleQorICAgICAgICBjYXNlIEdES18zOgorICAgICAgICBjYXNlIEdE
S19udW1iZXJzaWduOgorICAgICAgICAgICAgcmV0dXJuIFZLXzM7IC8vY2FzZSAnMyc6IGNhc2Ug
JyMnOworICAgICAgICBjYXNlIEdES180OgorICAgICAgICBjYXNlIEdES19kb2xsYXI6IC8vICAo
MzQpIDQga2V5ICckJzsKKyAgICAgICAgICAgIHJldHVybiBWS180OworICAgICAgICBjYXNlIEdE
S181OgorICAgICAgICBjYXNlIEdES19wZXJjZW50OgorICAgICAgICAgICAgcmV0dXJuIFZLXzU7
IC8vICAoMzUpIDUga2V5ICAnJScKKyAgICAgICAgY2FzZSBHREtfNjoKKyAgICAgICAgY2FzZSBH
REtfYXNjaWljaXJjdW06CisgICAgICAgICAgICByZXR1cm4gVktfNjsgLy8gICgzNikgNiBrZXkg
ICdeJworICAgICAgICBjYXNlIEdES183OgorICAgICAgICBjYXNlIEdES19hbXBlcnNhbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYnCisgICAgICAg
IGNhc2UgR0RLXzg6CisgICAgICAgIGNhc2UgR0RLX2FzdGVyaXNrOgorICAgICAgICAgICAgcmV0
dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAnKicKKyAgICAgICAgY2FzZSBHREtfOToKKyAgICAg
ICAgY2FzZSBHREtfcGFyZW5sZWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzk7IC8vICAoMzkp
IDkga2V5ICcoJworICAgICAgICBjYXNlIEdES19hOgorICAgICAgICBjYXNlIEdES19BOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0E7IC8vICAoNDEpIEEga2V5IGNhc2UgJ2EnOiBjYXNlICdBJzog
cmV0dXJuIDB4NDE7CisgICAgICAgIGNhc2UgR0RLX2I6CisgICAgICAgIGNhc2UgR0RLX0I6Cisg
ICAgICAgICAgICByZXR1cm4gVktfQjsgLy8gICg0MikgQiBrZXkgY2FzZSAnYic6IGNhc2UgJ0In
OiByZXR1cm4gMHg0MjsKKyAgICAgICAgY2FzZSBHREtfYzoKKyAgICAgICAgY2FzZSBHREtfQzoK
KyAgICAgICAgICAgIHJldHVybiBWS19DOyAvLyAgKDQzKSBDIGtleSBjYXNlICdjJzogY2FzZSAn
Qyc6IHJldHVybiAweDQzOworICAgICAgICBjYXNlIEdES19kOgorICAgICAgICBjYXNlIEdES19E
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNl
ICdEJzogcmV0dXJuIDB4NDQ7CisgICAgICAgIGNhc2UgR0RLX2U6CisgICAgICAgIGNhc2UgR0RL
X0U6CisgICAgICAgICAgICByZXR1cm4gVktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNh
c2UgJ0UnOiByZXR1cm4gMHg0NTsKKyAgICAgICAgY2FzZSBHREtfZjoKKyAgICAgICAgY2FzZSBH
REtfRjoKKyAgICAgICAgICAgIHJldHVybiBWS19GOyAvLyAgKDQ2KSBGIGtleSBjYXNlICdmJzog
Y2FzZSAnRic6IHJldHVybiAweDQ2OworICAgICAgICBjYXNlIEdES19nOgorICAgICAgICBjYXNl
IEdES19HOgorICAgICAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5IGNhc2UgJ2cn
OiBjYXNlICdHJzogcmV0dXJuIDB4NDc7CisgICAgICAgIGNhc2UgR0RLX2g6CisgICAgICAgIGNh
c2UgR0RLX0g6CisgICAgICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkgY2FzZSAn
aCc6IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsKKyAgICAgICAgY2FzZSBHREtfaToKKyAgICAgICAg
Y2FzZSBHREtfSToKKyAgICAgICAgICAgIHJldHVybiBWS19JOyAvLyAgKDQ5KSBJIGtleSBjYXNl
ICdpJzogY2FzZSAnSSc6IHJldHVybiAweDQ5OworICAgICAgICBjYXNlIEdES19qOgorICAgICAg
ICBjYXNlIEdES19KOgorICAgICAgICAgICAgcmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNh
c2UgJ2onOiBjYXNlICdKJzogcmV0dXJuIDB4NEE7CisgICAgICAgIGNhc2UgR0RLX2s6CisgICAg
ICAgIGNhc2UgR0RLX0s6CisgICAgICAgICAgICByZXR1cm4gVktfSzsgLy8gICg0QikgSyBrZXkg
Y2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0QjsKKyAgICAgICAgY2FzZSBHREtfbDoKKyAg
ICAgICAgY2FzZSBHREtfTDoKKyAgICAgICAgICAgIHJldHVybiBWS19MOyAvLyAgKDRDKSBMIGtl
eSBjYXNlICdsJzogY2FzZSAnTCc6IHJldHVybiAweDRDOworICAgICAgICBjYXNlIEdES19tOgor
ICAgICAgICBjYXNlIEdES19NOgorICAgICAgICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQpIE0g
a2V5IGNhc2UgJ20nOiBjYXNlICdNJzogcmV0dXJuIDB4NEQ7CisgICAgICAgIGNhc2UgR0RLX246
CisgICAgICAgIGNhc2UgR0RLX046CisgICAgICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkg
TiBrZXkgY2FzZSAnbic6IGNhc2UgJ04nOiByZXR1cm4gMHg0RTsKKyAgICAgICAgY2FzZSBHREtf
bzoKKyAgICAgICAgY2FzZSBHREtfTzoKKyAgICAgICAgICAgIHJldHVybiBWS19POyAvLyAgKDRG
KSBPIGtleSBjYXNlICdvJzogY2FzZSAnTyc6IHJldHVybiAweDRGOworICAgICAgICBjYXNlIEdE
S19wOgorICAgICAgICBjYXNlIEdES19QOgorICAgICAgICAgICAgcmV0dXJuIFZLX1A7IC8vICAo
NTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0dXJuIDB4NTA7CisgICAgICAgIGNhc2Ug
R0RLX3E6CisgICAgICAgIGNhc2UgR0RLX1E6CisgICAgICAgICAgICByZXR1cm4gVktfUTsgLy8g
ICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsKKyAgICAgICAgY2Fz
ZSBHREtfcjoKKyAgICAgICAgY2FzZSBHREtfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19SOyAv
LyAgKDUyKSBSIGtleSBjYXNlICdyJzogY2FzZSAnUic6IHJldHVybiAweDUyOworICAgICAgICBj
YXNlIEdES19zOgorICAgICAgICBjYXNlIEdES19TOgorICAgICAgICAgICAgcmV0dXJuIFZLX1M7
IC8vICAoNTMpIFMga2V5IGNhc2UgJ3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7CisgICAgICAg
IGNhc2UgR0RLX3Q6CisgICAgICAgIGNhc2UgR0RLX1Q6CisgICAgICAgICAgICByZXR1cm4gVktf
VDsgLy8gICg1NCkgVCBrZXkgY2FzZSAndCc6IGNhc2UgJ1QnOiByZXR1cm4gMHg1NDsKKyAgICAg
ICAgY2FzZSBHREtfdToKKyAgICAgICAgY2FzZSBHREtfVToKKyAgICAgICAgICAgIHJldHVybiBW
S19VOyAvLyAgKDU1KSBVIGtleSBjYXNlICd1JzogY2FzZSAnVSc6IHJldHVybiAweDU1OworICAg
ICAgICBjYXNlIEdES192OgorICAgICAgICBjYXNlIEdES19WOgorICAgICAgICAgICAgcmV0dXJu
IFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJuIDB4NTY7Cisg
ICAgICAgIGNhc2UgR0RLX3c6CisgICAgICAgIGNhc2UgR0RLX1c6CisgICAgICAgICAgICByZXR1
cm4gVktfVzsgLy8gICg1NykgVyBrZXkgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4gMHg1NzsK
KyAgICAgICAgY2FzZSBHREtfeDoKKyAgICAgICAgY2FzZSBHREtfWDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19YOyAvLyAgKDU4KSBYIGtleSBjYXNlICd4JzogY2FzZSAnWCc6IHJldHVybiAweDU4
OworICAgICAgICBjYXNlIEdES195OgorICAgICAgICBjYXNlIEdES19ZOgorICAgICAgICAgICAg
cmV0dXJuIFZLX1k7IC8vICAoNTkpIFkga2V5IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0dXJuIDB4
NTk7CisgICAgICAgIGNhc2UgR0RLX3o6CisgICAgICAgIGNhc2UgR0RLX1o6CisgICAgICAgICAg
ICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2FzZSAneic6IGNhc2UgJ1onOiByZXR1cm4g
MHg1QTsKKyAgICAgICAgY2FzZSBHREtfTWV0YV9MOgorICAgICAgICAgICAgcmV0dXJuIFZLX0xX
SU47IC8vICg1QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQp
CisgICAgICAgIGNhc2UgR0RLX01ldGFfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19SV0lOOyAv
LyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAgICAg
Ly8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX1NF
UEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKKyAgICAgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2
RCkgU3VidHJhY3Qga2V5CisgICAgICAgICAgICAvLyBWS19ERUNJTUFMICg2RSkgRGVjaW1hbCBr
ZXkKKyAgICAgICAgICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKKyAgICAgICAgICAg
IC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKworICAgICAgICBjYXNlIEdES19OdW1fTG9j
azoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1MT0NLOyAvLyAoOTApIE5VTSBMT0NLIGtleQor
CisgICAgICAgIGNhc2UgR0RLX1Njcm9sbF9Mb2NrOgorICAgICAgICAgICAgcmV0dXJuIFZLX1ND
Uk9MTDsgLy8gKDkxKSBTQ1JPTEwgTE9DSyBrZXkKKworICAgICAgICBjYXNlIEdES19TaGlmdF9M
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0xTSElGVDsgLy8gKEEwKSBMZWZ0IFNISUZUIGtleQor
ICAgICAgICBjYXNlIEdES19TaGlmdF9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1JTSElGVDsg
Ly8gKEExKSBSaWdodCBTSElGVCBrZXkKKyAgICAgICAgY2FzZSBHREtfQ29udHJvbF9MOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0xDT05UUk9MOyAvLyAoQTIpIExlZnQgQ09OVFJPTCBrZXkKKyAg
ICAgICAgY2FzZSBHREtfQ29udHJvbF9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1JDT05UUk9M
OyAvLyAoQTMpIFJpZ2h0IENPTlRST0wga2V5CisgICAgICAgIGNhc2UgR0RLX0FsdF9MOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0xNRU5VOyAvLyAoQTQpIExlZnQgTUVOVSBrZXkKKyAgICAgICAg
Y2FzZSBHREtfQWx0X1I6CisgICAgICAgICAgICByZXR1cm4gVktfUk1FTlU7IC8vIChBNSkgUmln
aHQgTUVOVSBrZXkKKworICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93
cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZP
UldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX0JST1dTRVJfUkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBS
ZWZyZXNoIGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93cyAy
MDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJD
SCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAgICAgICAgICAv
LyBWS19CUk9XU0VSX0ZBVk9SSVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZv
cml0ZXMga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0hPTUUgKEFDKSBXaW5kb3dzIDIw
MDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5CisgICAgICAgICAgICAvLyBWS19WT0xV
TUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIE11dGUga2V5CisgICAgICAgICAg
ICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5
CisgICAgICAgICAgICAvLyBWS19WT0xVTUVfVVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVt
ZSBVcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dz
IDIwMDAvWFA6IE5leHQgVHJhY2sga2V5CisgICAgICAgICAgICAvLyBWS19NRURJQV9QUkVWX1RS
QUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKKyAgICAgICAgICAg
IC8vIFZLX01FRElBX1NUT1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5Cisg
ICAgICAgICAgICAvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQ
bGF5L1BhdXNlIE1lZGlhIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBX
aW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hf
TUVESUFfU0VMRUNUIChCNSkgV2luZG93cyAyMDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5CisgICAg
ICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBw
bGljYXRpb24gMSBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93
cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAyIGtleQorCisgICAgICAgICAgICAvLyBWS19P
RU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICc7Oicga2V5CisgICAgICAgIGNhc2UgR0RLX3NlbWljb2xvbjoKKyAgICAgICAgY2Fz
ZSBHREtfY29sb246CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6IGNh
c2UgJzonOiByZXR1cm4gMHhCQTsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QTFVTIChCQikgV2lu
ZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtleQorICAgICAg
ICBjYXNlIEdES19wbHVzOgorICAgICAgICBjYXNlIEdES19lcXVhbDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19PRU1fUExVUzsgLy9jYXNlICc9JzogY2FzZSAnKyc6IHJldHVybiAweEJCOworICAg
ICAgICAgICAgLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNv
dW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQorICAgICAgICBjYXNlIEdES19jb21tYToKKyAgICAg
ICAgY2FzZSBHREtfbGVzczoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8vY2Fz
ZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKKyAgICAgICAgICAgIC8vIFZLX09FTV9NSU5V
UyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBr
ZXkKKyAgICAgICAgY2FzZSBHREtfbWludXM6CisgICAgICAgIGNhc2UgR0RLX3VuZGVyc2NvcmU6
CisgICAgICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0nOiBjYXNlICdfJzog
cmV0dXJuIDB4QkQ7CisgICAgICAgICAgICAvLyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAy
MDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy4nIGtleQorICAgICAgICBjYXNl
IEdES19wZXJpb2Q6CisgICAgICAgIGNhc2UgR0RLX2dyZWF0ZXI6CisgICAgICAgICAgICByZXR1
cm4gVktfT0VNX1BFUklPRDsgLy9jYXNlICcuJzogY2FzZSAnPic6IHJldHVybiAweEJFOworICAg
ICAgICAgICAgLy8gVktfT0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3Rl
cnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMg
c3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnLz8nIGtleQorICAgICAgICBjYXNlIEdES19zbGFzaDoK
KyAgICAgICAgY2FzZSBHREtfcXVlc3Rpb246CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzI7
IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1cm4gMHhCRjsKKyAgICAgICAgICAgIC8vIFZLX09F
TV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJk
LCB0aGUgJ2B+JyBrZXkKKyAgICAgICAgY2FzZSBHREtfYXNjaWl0aWxkZToKKyAgICAgICAgY2Fz
ZSBHREtfcXVvdGVsZWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8zOyAvL2Nhc2UgJ2An
OiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAgICAgICAgICAvLyBWS19PRU1fNCAoREIpIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
IFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycg
a2V5CisgICAgICAgIGNhc2UgR0RLX2JyYWNrZXRsZWZ0OgorICAgICAgICBjYXNlIEdES19icmFj
ZWxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzQ7IC8vY2FzZSAnWyc6IGNhc2UgJ3sn
OiByZXR1cm4gMHhEQjsKKyAgICAgICAgICAgIC8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKKyAgICAg
ICAgY2FzZSBHREtfYmFja3NsYXNoOgorICAgICAgICBjYXNlIEdES19iYXI6CisgICAgICAgICAg
ICByZXR1cm4gVktfT0VNXzU7IC8vY2FzZSAnXFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7Cisg
ICAgICAgICAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBV
UyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgICAgIGNhc2UgR0RLX2JyYWNr
ZXRyaWdodDoKKyAgICAgICAgY2FzZSBHREtfYnJhY2VyaWdodDoKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsKKyAgICAgICAg
ICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQorICAgICAg
ICBjYXNlIEdES19xdW90ZXJpZ2h0OgorICAgICAgICBjYXNlIEdES19xdW90ZWRibDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fNzsgLy8gY2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4
REU7CisgICAgICAgICAgICAvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMg
Y2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCisgICAgICAgICAgICAvLyBWS19P
RU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5
IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCisgICAgICAg
ICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0
LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5CisgICAgICAgICAgICAvLyBWS19Q
QUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3Rl
cnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBs
b3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9h
cmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZ
QkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorICAgICAgICAgICAg
Ly8gVktfQVRUTiAoRjYpIEF0dG4ga2V5CisgICAgICAgICAgICAvLyBWS19DUlNFTCAoRjcpIENy
U2VsIGtleQorICAgICAgICAgICAgLy8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorICAgICAgICAgICAgLy8gVktfUExB
WSAoRkEpIFBsYXkga2V5CisgICAgICAgICAgICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAg
ICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEga2V5CisgICAgICAgICAgICAvLyBWS19PRU1fQ0xF
QVIgKEZFKSBDbGVhciBrZXkKKyAgICAgICAgY2FzZSBHREtfRjE6CisgICAgICAgIGNhc2UgR0RL
X0YyOgorICAgICAgICBjYXNlIEdES19GMzoKKyAgICAgICAgY2FzZSBHREtfRjQ6CisgICAgICAg
IGNhc2UgR0RLX0Y1OgorICAgICAgICBjYXNlIEdES19GNjoKKyAgICAgICAgY2FzZSBHREtfRjc6
CisgICAgICAgIGNhc2UgR0RLX0Y4OgorICAgICAgICBjYXNlIEdES19GOToKKyAgICAgICAgY2Fz
ZSBHREtfRjEwOgorICAgICAgICBjYXNlIEdES19GMTE6CisgICAgICAgIGNhc2UgR0RLX0YxMjoK
KyAgICAgICAgY2FzZSBHREtfRjEzOgorICAgICAgICBjYXNlIEdES19GMTQ6CisgICAgICAgIGNh
c2UgR0RLX0YxNToKKyAgICAgICAgY2FzZSBHREtfRjE2OgorICAgICAgICBjYXNlIEdES19GMTc6
CisgICAgICAgIGNhc2UgR0RLX0YxODoKKyAgICAgICAgY2FzZSBHREtfRjE5OgorICAgICAgICBj
YXNlIEdES19GMjA6CisgICAgICAgIGNhc2UgR0RLX0YyMToKKyAgICAgICAgY2FzZSBHREtfRjIy
OgorICAgICAgICBjYXNlIEdES19GMjM6CisgICAgICAgIGNhc2UgR0RLX0YyNDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19GMSArIChrZXljb2RlIC0gR0RLX0YxKTsKKyAgICAgICAgY2FzZSBHREtf
S0VZX1ZvaWRTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gVktfUFJPQ0VTU0tFWTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworfQorCitTdHJpbmcg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5zaWduZWQgdmFs
KQoreworICAgIHN3aXRjaCAodmFsKSB7CisgICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKKyAg
ICAgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoIlxyIik7CisgICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlx4OCIpOworICAgICAgICBjYXNlIEdES19UYWI6
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJcdCIpOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgZ3VuaWNoYXIgYyA9IGdka19rZXl2YWxfdG9fdW5pY29kZSh2YWwpOworICAgICAg
ICAgICAgZ2xvbmcgbndjOworICAgICAgICAgICAgZ3VuaWNoYXIyKiB1Y2hhcjE2ID0gZ191Y3M0
X3RvX3V0ZjE2KCZjLCAxLCAwLCAmbndjLCAwKTsKKworICAgICAgICAgICAgU3RyaW5nIHJldFZh
bDsKKyAgICAgICAgICAgIGlmICh1Y2hhcjE2KQorICAgICAgICAgICAgICAgIHJldFZhbCA9IFN0
cmluZygoVUNoYXIqKXVjaGFyMTYsIG53Yyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmV0VmFsID0gU3RyaW5nKCk7CisKKyAgICAgICAgICAgIGdfZnJlZSh1Y2hhcjE2KTsK
KworICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9Cit9CisKK3N0YXRpYyBQbGF0Zm9y
bUV2ZW50OjpUeXBlIGV2ZW50VHlwZUZvckdka0tleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkK
K3sKKyAgICByZXR1cm4gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gUGxhdGZvcm1F
dmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOworfQorCitzdGF0aWMgUGxhdGZv
cm1FdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVyc0Zvckdka0tleUV2ZW50KEdka0V2ZW50S2V5KiBl
dmVudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZlbnQt
PnN0YXRlICYgR0RLX1NISUZUX01BU0sgfHwgZXZlbnQtPmtleXZhbCA9PSBHREtfMzI3MF9CYWNr
VGFiKQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6U2hpZnRLZXk7CisgICAg
aWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8
PSBQbGF0Zm9ybUV2ZW50OjpDdHJsS2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9E
MV9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6QWx0S2V5OworICAg
IGlmIChldmVudC0+c3RhdGUgJiBHREtfTUVUQV9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0g
UGxhdGZvcm1FdmVudDo6TWV0YUtleTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZvcm1F
dmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpOworfQorCisvLyBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25zdHJ1Y3RvcnMKK1BsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgY29uc3Qg
Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMpCisgICAgOiBQbGF0Zm9ybUV2
ZW50KGV2ZW50VHlwZUZvckdka0tleUV2ZW50KGV2ZW50KSwgbW9kaWZpZXJzRm9yR2RrS2V5RXZl
bnQoZXZlbnQpLCBjdXJyZW50VGltZSgpKQorICAgICwgbV90ZXh0KGNvbXBvc2l0aW9uUmVzdWx0
cy5zaW1wbGVTdHJpbmcubGVuZ3RoKCkgPyBjb21wb3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5n
IDogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwpKQorICAgICwgbV91bm1vZGlm
aWVkVGV4dChtX3RleHQpCisgICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZvckdk
a0tleUNvZGUoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3
aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX25hdGl2
ZVZpcnR1YWxLZXlDb2RlKGV2ZW50LT5rZXl2YWwpCisgICAgLCBtX21hY0NoYXJDb2RlKDApCisg
ICAgLCBtX2F1dG9SZXBlYXQoZmFsc2UpCisgICAgLCBtX2lzS2V5cGFkKGV2ZW50LT5rZXl2YWwg
Pj0gR0RLX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tQXzkpCisgICAgLCBtX2lz
U3lzdGVtS2V5KGZhbHNlKQorICAgICwgbV9nZGtFdmVudEtleShldmVudCkKKyAgICAsIG1fY29t
cG9zaXRpb25SZXN1bHRzKGNvbXBvc2l0aW9uUmVzdWx0cykKK3sKKyAgICAvLyBUbyBtYXRjaCB0
aGUgYmVoYXZpb3Igb2YgSUUsIHdlIHJldHVybiBWS19QUk9DRVNTS0VZIGZvciBrZXlzIHRoYXQg
dHJpZ2dlcmVkIGNvbXBvc2l0aW9uIHJlc3VsdHMuCisgICAgaWYgKGNvbXBvc2l0aW9uUmVzdWx0
cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkKKyAgICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUg
PSBWS19QUk9DRVNTS0VZOworfQorCit2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1i
aWd1YXRlS2V5RG93bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKQoreworICAgIC8vIENhbiBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdL
ZXlEb3duIG9yIENoYXIsIGFzIHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZlcnNp
b25zLgorICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5RG93bik7CisgICAgbV90eXBlID0gdHlwZTsK
KworICAgIGlmIChiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7CisgICAgICAgIG1f
dGV4dCA9IFN0cmluZygpOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7Cisg
ICAgfSBlbHNlIGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIgJiYgbV9jb21wb3NpdGlv
blJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVkKCkpIHsKKyAgICAgICAgLy8gSGF2aW5nIGVtcHR5
IHRleHQsIHByZXZlbnRzIHRoaXMgQ2hhciAod2hpY2ggaXMgYSBET00ga2V5cHJlc3MpIGV2ZW50
CisgICAgICAgIC8vIGZyb20gZ29pbmcgdG8gdGhlIERPTS4gS2V5cyB0aGF0IHRyaWdnZXIgY29t
cG9zaXRpb24gZXZlbnRzIHNob3VsZCBub3QKKyAgICAgICAgLy8gZmlyZSBrZXlwcmVzcy4KKyAg
ICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJp
bmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsK
KyAgICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSAwOworICAgIH0KK30KKworYm9vbCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICByZXR1
cm4gZ2RrX2tleW1hcF9nZXRfY2Fwc19sb2NrX3N0YXRlKGdka19rZXltYXBfZ2V0X2RlZmF1bHQo
KSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJT
dGF0ZShib29sJiBzaGlmdEtleSwgYm9vbCYgY3RybEtleSwgYm9vbCYgYWx0S2V5LCBib29sJiBt
ZXRhS2V5KQoreworICAgIEdka01vZGlmaWVyVHlwZSBzdGF0ZTsKKyAgICBndGtfZ2V0X2N1cnJl
bnRfZXZlbnRfc3RhdGUoJnN0YXRlKTsKKworICAgIHNoaWZ0S2V5ID0gc3RhdGUgJiBHREtfU0hJ
RlRfTUFTSzsKKyAgICBjdHJsS2V5ID0gc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIGFs
dEtleSA9IHN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtZXRhS2V5ID0gc3RhdGUgJiBHREtf
TUVUQV9NQVNLOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRm
b3JtTW91c2VFdmVudEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VF
dmVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxMDFjMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50
R3RrLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoK
KyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbW9k
aWZpZXIgaXMgQWx0IGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0QxX01BU0suCisKKy8v
IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVj
dG9ycworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0
b24qIGV2ZW50KQoreworICAgIG1fdGltZXN0YW1wID0gZXZlbnQtPnRpbWU7CisgICAgbV9wb3Np
dGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOworICAgIG1fZ2xv
YmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlf
cm9vdCk7CisKKyAgICBtX21vZGlmaWVycyA9IDA7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdE
S19TSElGVF9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBTaGlmdEtleTsKKyAgICBpZiAo
ZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0g
Q3RybEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAgICAg
bV9tb2RpZmllcnMgfD0gQWx0S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTUVUQV9N
QVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBNZXRhS2V5OworCisgICAgc3dpdGNoIChldmVu
dC0+dHlwZSkgeworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVU
VE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfQlVU
VE9OX1JFTEVBU0U6CisgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3Nl
ZDsKKyAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkgeworICAg
ICAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZDsKKyAgICAgICAg
ICAgIG1fY2xpY2tDb3VudCA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0g
R0RLX0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7CisgICAgICAg
IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAg
bV9jbGlja0NvdW50ID0gMjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzNC
VVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOworCisgICAgICAgIGlm
IChldmVudC0+YnV0dG9uID09IDEpCisgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247
CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMikKKyAgICAgICAgICAgIG1fYnV0
dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDMp
CisgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOworICAgICAgICBicmVhazsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07Cit9CisK
K1BsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKiBt
b3Rpb24pCit7CisgICAgbV90aW1lc3RhbXAgPSBtb3Rpb24tPnRpbWU7CisgICAgbV9wb3NpdGlv
biA9IEludFBvaW50KChpbnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7CisgICAgbV9nbG9i
YWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55
X3Jvb3QpOworCisgICAgbV9tb2RpZmllcnMgPSAwOworICAgIGlmIChtb3Rpb24tPnN0YXRlICYg
R0RLX1NISUZUX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlm
IChtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMg
fD0gQ3RybEtleTsKKyAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAg
ICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19N
RVRBX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7CisKKyAgICBzd2l0Y2gg
KG1vdGlvbi0+dHlwZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIG1f
dHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7CisgICAgICAgIG1fYnV0dG9uID0gTm9C
dXR0b247CisgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07CisKKyAgICBpZiAo
bW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04xX01BU0spCisgICAgICAgIG1fYnV0dG9uID0gTGVm
dEJ1dHRvbjsKKyAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykK
KyAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgZWxzZSBpZiAobW90aW9uLT5z
dGF0ZSAmIEdES19CVVRUT04zX01BU0spCisgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247
Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzc4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcApAQCAtMCwwICsxLDEzMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIER5d2FuIDxj
aHJpc3RpYW5AaW1lbmRpby5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TY3JlZW4uaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNs
dWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEd0a1dpZGdldCogZ2V0VG9wbGV2
ZWwoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9w
bGV2ZWwodG9wbGV2ZWwpID8gdG9wbGV2ZWwgOiAwOworfQorCitzdGF0aWMgR2RrVmlzdWFsKiBn
ZXRWaXN1YWwoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3
aWRnZXQgPyBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpKSA6IDA7CisgICAgaWYgKCFjb250YWluZXIpIHsKKyAgICAgICAgR2RrU2Ny
ZWVuKiBzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CisgICAgICAgIHJldHVybiBz
Y3JlZW4gPyBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKHNjcmVlbikgOiAwOworICAgIH0K
KworICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQoY29udGFpbmVyKSkKKyAgICAgICAg
Y29udGFpbmVyID0gZ2V0VG9wbGV2ZWwoY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29udGFpbmVy
ID8gZ2RrX3dpbmRvd19nZXRfdmlzdWFsKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250YWluZXIp
KSA6IDA7Cit9CisKK2ludCBzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHZGtW
aXN1YWwqIHZpc3VhbCA9IGdldFZpc3VhbCh3aWRnZXQpOworICAgIGlmICghdmlzdWFsKQorICAg
ICAgICByZXR1cm4gMjQ7CisgICAgcmV0dXJuIGdka192aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCk7
Cit9CisKK2ludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdldFZpc3VhbCh3aWRnZXQpOworICAgIGlmICghdmlzdWFs
KQorICAgICAgICByZXR1cm4gODsKKworICAgIHJldHVybiBnZGtfdmlzdWFsX2dldF9iaXRzX3Bl
cl9yZ2IodmlzdWFsKTsKK30KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgcmV0dXJuIHNjcmVlbkRlcHRoKHdpZGdldCkgPCAyOworfQorCisKK3N0YXRp
YyBHZGtTY3JlZW4qIGdldFNjcmVlbihHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4g
Z3RrX3dpZGdldF9oYXNfc2NyZWVuKHdpZGdldCkgPyBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lk
Z2V0KSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKK30KKworRmxvYXRSZWN0IHNjcmVlblJl
Y3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQg
PyBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpKSA6IDA7CisgICAgaWYgKGNvbnRhaW5lcikKKyAgICAgICAgY29udGFpbmVyID0gZ2V0
VG9wbGV2ZWwoY29udGFpbmVyKTsKKworICAgIEdka1NjcmVlbiogc2NyZWVuID0gY29udGFpbmVy
ID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CisgICAg
aWYgKCFzY3JlZW4pCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIGdpbnQgbW9u
aXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVl
biwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKKworICAgIEdka1JlY3Rh
bmdsZSBnZW9tZXRyeTsKKyAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVl
biwgbW9uaXRvciwgJmdlb21ldHJ5KTsKKworICAgIHJldHVybiBGbG9hdFJlY3QoZ2VvbWV0cnku
eCwgZ2VvbWV0cnkueSwgZ2VvbWV0cnkud2lkdGgsIGdlb21ldHJ5LmhlaWdodCk7Cit9CisKK0Zs
b2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIEd0a1dp
ZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkgOiAwOworICAgIGlmIChjb250YWluZXIg
JiYgIWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKGNvbnRhaW5lcikpCisgICAgICAgIHJldHVybiBz
Y3JlZW5SZWN0KHdpZGdldCk7CisKKyAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGNvbnRhaW5lciA/
IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAgIGlm
ICghc2NyZWVuKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBnaW50IG1vbml0
b3IgPSBjb250YWluZXIgPyBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4s
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250YWluZXIpKSA6IDA7CisKKyAgICBHZGtSZWN0YW5n
bGUgd29ya0FyZWE7CisgICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShzY3JlZW4s
IG1vbml0b3IsICZ3b3JrQXJlYSk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHdvcmtBcmVhLngs
IHdvcmtBcmVhLnksIHdvcmtBcmVhLndpZHRoLCB3b3JrQXJlYS5oZWlnaHQpOworCit9CisKK3Zv
aWQgc2NyZWVuQ29sb3JQcm9maWxlKENvbG9yUHJvZmlsZSYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjUyMGJmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKworI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gS2VlcCB0aGlzIGluIHN5
bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCitQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGZsb2F0IGRlbHRhID0gMTsKKworICAgIG1fdHlwZSA9IFBsYXRmb3Jt
RXZlbnQ6OldoZWVsOworICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKworICAgIG1f
bW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0spCisg
ICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBH
REtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlm
IChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBB
bHRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1f
bW9kaWZpZXJzIHw9IE1ldGFLZXk7CisKKyAgICBtX2RlbHRhWCA9IDA7CisgICAgbV9kZWx0YVkg
PSAwOworCisgICAgLy8gRG9jcyBzYXkgYW4gdXB3YXJkcyBzY3JvbGwgKGF3YXkgZnJvbSB0aGUg
dXNlcikgaGFzIGEgcG9zaXRpdmUgZGVsdGEKKyAgICBzd2l0Y2ggKGV2ZW50LT5kaXJlY3Rpb24p
IHsKKyAgICAgICAgY2FzZSBHREtfU0NST0xMX1VQOgorICAgICAgICAgICAgbV9kZWx0YVkgPSBk
ZWx0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdES19TQ1JPTExfRE9XTjoK
KyAgICAgICAgICAgIG1fZGVsdGFZID0gLWRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR0RLX1NDUk9MTF9MRUZUOgorICAgICAgICAgICAgbV9kZWx0YVggPSBkZWx0YTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdES19TQ1JPTExfUklHSFQ6CisgICAg
ICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDMsIDE4KQorICAgICAgICBjYXNlIEdES19TQ1JPTExfU01PT1RIOiB7
CisgICAgICAgICAgICAgICAgZ2RvdWJsZSBkZWx0YVgsIGRlbHRhWTsKKyAgICAgICAgICAgICAg
ICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSwgJmRlbHRhWCwgJmRlbHRhWSk7CisgICAgICAgICAgICAgICAgbV9kZWx0YVggPSAt
ZGVsdGFYOworICAgICAgICAgICAgICAgIG1fZGVsdGFZID0gLWRlbHRhWTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgfQorICAgIG1fd2hlZWxUaWNrc1gg
PSBtX2RlbHRhWDsKKyAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7CisKKyAgICBtX3Bvc2l0
aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eCksIHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnkpKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nh
c3Q8aW50PihldmVudC0+eF9yb290KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KSk7
CisgICAgbV9ncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworICAgIG1fZGly
ZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogcmV0cmll
dmUgdGhlIHVzZXIgc2V0dGluZyBmb3IgdGhlIG51bWJlciBvZiBsaW5lcyB0byBzY3JvbGwgb24g
ZWFjaCB3aGVlbCBldmVudAorICAgIG1fZGVsdGFYICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0
PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmY1MTdiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBN
ZW51R3RrLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBX
ZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBM
dGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgiCisKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSAiR3RrVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGdTZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwor
CitQb3B1cE1lbnVHdGs6OlBvcHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKKyAg
ICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQoreworfQorCitQb3B1cE1lbnVHdGs6On5Qb3B1cE1l
bnVHdGsoKQoreworICAgIGlmIChtX3BvcHVwKSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGhpZGUoKTsKKyAgICB9Cit9CisK
K0d0a0FjdGlvbiogUG9wdXBNZW51R3RrOjpjcmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpbnQg
aXRlbUluZGV4KQoreworICAgIEdPd25QdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmlu
dGYoInBvcHVwLW1lbnUtYWN0aW9uLSVkIiwgaXRlbUluZGV4KSk7CisgICAgR3RrQWN0aW9uKiBh
Y3Rpb24gPSBndGtfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCBjbGllbnQoKS0+aXRlbVRl
eHQoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCBjbGllbnQoKS0+aXRlbVRvb2xUaXAoaXRlbUlu
ZGV4KS51dGY4KCkuZGF0YSgpLCAwKTsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChh
Y3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiLCBHSU5UX1RPX1BPSU5URVIoaXRlbUlu
ZGV4KSk7CisgICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJB
Q0sobWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKKyAgICAvLyBGSVhNRTogQXBwbHkgdGhlIFBv
cHVwTWVudVN0eWxlIGZyb20gY2xpZW50KCktPml0ZW1TdHlsZShpKQorICAgIGd0a19hY3Rpb25f
c2V0X3Zpc2libGUoYWN0aW9uLCAhY2xpZW50KCktPml0ZW1TdHlsZShpdGVtSW5kZXgpLmlzRGlz
cGxheU5vbmUoKSk7CisgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbiwgY2xpZW50
KCktPml0ZW1Jc0VuYWJsZWQoaXRlbUluZGV4KSk7CisKKyAgICByZXR1cm4gYWN0aW9uOworfQor
Cit2b2lkIFBvcHVwTWVudUd0azo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcq
IHZpZXcsIGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoY2xpZW50KCkpOworCisgICAgaWYgKCFt
X3BvcHVwKSB7CisgICAgICAgIG1fcG9wdXAgPSBHdGtQb3B1cE1lbnU6OmNyZWF0ZSgpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAtPnBsYXRmb3JtTWVudSgpLCAidW5tYXAiLCBH
X0NBTExCQUNLKFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVkKSwgdGhpcyk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fcG9wdXAtPmNsZWFyKCk7CisKKyAgICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVu
dCgpLT5saXN0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIGlmIChjbGllbnQoKS0+aXRlbUlzU2VwYXJhdG9yKGkpKQorICAgICAgICAgICAgbV9w
b3B1cC0+YXBwZW5kU2VwYXJhdG9yKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1Jl
ZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihjcmVhdGVHdGtBY3Rpb25Gb3JNZW51
SXRlbShpKSk7CisgICAgICAgICAgICBtX3BvcHVwLT5hcHBlbmRJdGVtKGFjdGlvbi5nZXQoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJbnRQb2ludCBtZW51UG9zaXRpb24gPSBjb252ZXJ0
V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEdUS19XSURHRVQodmlldy0+aG9zdFdpbmRvdygpLT5w
bGF0Zm9ybVBhZ2VDbGllbnQoKSksIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlv
bigpKSk7CisgICAgbWVudVBvc2l0aW9uLm1vdmUoMCwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBt
X3BvcHVwLT5wb3BVcChyZWN0LnNpemUoKSwgbWVudVBvc2l0aW9uLCBzaXplLCBpbmRleCwgZ3Rr
X2dldF9jdXJyZW50X2V2ZW50KCkpOworCisgICAgLy8gR1RLIGNhbiByZWZ1c2UgdG8gYWN0dWFs
bHkgb3BlbiB0aGUgbWVudSB3aGVuIG1vdXNlIGdyYWJzIGZhaWxzLgorICAgIC8vIEVuc3VyZSBX
ZWJDb3JlIGRvZXMgbm90IGdvIGludG8gc29tZSBwZXNreSBzdGF0ZS4KKyAgICBpZiAoIWd0a193
aWRnZXRfZ2V0X3Zpc2libGUobV9wb3B1cC0+cGxhdGZvcm1NZW51KCkpKQorICAgICAgICBjbGll
bnQoKS0+cG9wdXBEaWRIaWRlKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjpoaWRlKCkKK3sK
KyAgICBBU1NFUlQobV9wb3B1cCk7CisgICAgbV9wb3B1cC0+cG9wRG93bigpOworfQorCit2b2lk
IFBvcHVwTWVudUd0azo6dXBkYXRlRnJvbUVsZW1lbnQoKQoreworICAgIGNsaWVudCgpLT5zZXRU
ZXh0RnJvbUl0ZW0oY2xpZW50KCktPnNlbGVjdGVkSW5kZXgoKSk7Cit9CisKK3ZvaWQgUG9wdXBN
ZW51R3RrOjpkaXNjb25uZWN0Q2xpZW50KCkKK3sKKyAgICBtX3BvcHVwQ2xpZW50ID0gMDsKK30K
Kwordm9pZCBQb3B1cE1lbnVHdGs6Om1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9u
LCBQb3B1cE1lbnVHdGsqIHRoYXQpCit7CisgICAgQVNTRVJUKHRoYXQtPmNsaWVudCgpKTsKKyAg
ICB0aGF0LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9n
ZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiKSkpOwor
fQorCit2b2lkIFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVwTWVu
dUd0ayogdGhhdCkKK3sKKyAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOworICAgIHRoYXQtPmNs
aWVudCgpLT5wb3B1cERpZEhpZGUoKTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVH
dGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgxMWZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaApAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBQb3B1cE1lbnVHdGtfaAorI2RlZmluZSBQ
b3B1cE1lbnVHdGtfaAorCisjaW5jbHVkZSAiR3RrUG9wdXBNZW51LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlBvcHVwTWVudS5oIgorI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lVmlldzsKK2NsYXNzIFNj
cm9sbGJhcjsKKworY2xhc3MgUG9wdXBNZW51R3RrIDogcHVibGljIFBvcHVwTWVudSB7CitwdWJs
aWM6CisgICAgUG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCopOworICAgIH5Qb3B1cE1lbnVH
dGsoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcq
LCBpbnQgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RDbGllbnQo
KTsKKworcHJpdmF0ZToKKyAgICBQb3B1cE1lbnVDbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9wdXBDbGllbnQ7IH0KKyAgICBHdGtBY3Rpb24qIGNyZWF0ZUd0a0FjdGlvbkZvck1l
bnVJdGVtKGludCBpdGVtSW5kZXgpOworCisgICAgc3RhdGljIHZvaWQgbWVudVVubWFwcGVkKEd0
a1dpZGdldCosIFBvcHVwTWVudUd0ayopOworICAgIHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZh
dGVkKEd0a0FjdGlvbiosIFBvcHVwTWVudUd0ayopOworCisgICAgUG9wdXBNZW51Q2xpZW50KiBt
X3BvcHVwQ2xpZW50OworICAgIE93blB0cjxHdGtQb3B1cE1lbnU+IG1fcG9wdXA7Cit9OworCit9
CisKKyNlbmRpZiAvLyBQb3B1cE1lbnVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hNDUyNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93LmgiCisKKyNpZiBVU0UoR0xYKQorCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMv
WGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4KKyNpbmNs
dWRlIDxjYWlyby14bGliLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFdpbmRvdywgUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cqPiBXaW5kb3dIYXNoTWFwOworc3RhdGljIFdpbmRvd0hhc2hNYXAmIGdl
dFdpbmRvd0hhc2hNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2luZG93SGFzaE1h
cCwgd2luZG93SGFzaE1hcCwgKCkpOworICAgIHJldHVybiB3aW5kb3dIYXNoTWFwOworfQorCitz
dGF0aWMgaW50IGdEYW1hZ2VFdmVudEJhc2U7CitzdGF0aWMgR2RrRmlsdGVyUmV0dXJuIGZpbHRl
clhEYW1hZ2VFdmVudChHZGtYRXZlbnQqIGdka1hFdmVudCwgR2RrRXZlbnQqIGV2ZW50LCB2b2lk
KikKK3sKKyAgICBYRXZlbnQqIHhFdmVudCA9IHN0YXRpY19jYXN0PFhFdmVudCo+KGdka1hFdmVu
dCk7CisgICAgaWYgKHhFdmVudC0+dHlwZSAhPSBnRGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5v
dGlmeSkKKyAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAgICBYRGFtYWdl
Tm90aWZ5RXZlbnQqIGRhbWFnZUV2ZW50ID0gcmVpbnRlcnByZXRfY2FzdDxYRGFtYWdlTm90aWZ5
RXZlbnQqPih4RXZlbnQpOworICAgIFdpbmRvd0hhc2hNYXAmIHdpbmRvd0hhc2hNYXAgPSBnZXRX
aW5kb3dIYXNoTWFwKCk7CisgICAgV2luZG93SGFzaE1hcDo6aXRlcmF0b3IgaSA9IHdpbmRvd0hh
c2hNYXAuZmluZChkYW1hZ2VFdmVudC0+ZHJhd2FibGUpOworICAgIGlmIChpID09IHdpbmRvd0hh
c2hNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworCisgICAg
aS0+dmFsdWUtPmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygpOworICAgIFhEYW1hZ2VTdWJ0cmFj
dChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKSwgZGFtYWdl
RXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7CisgICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZF
OworfQorCitzdGF0aWMgYm9vbCBzdXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIGhhc0V4
dGVuc2lvbnMgPSBmYWxzZTsKKworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
IGhhc0V4dGVuc2lvbnM7CisKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpbnQgZXJy
b3JCYXNlOworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtf
ZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBpZiAoIVhEYW1hZ2VRdWVyeUV4dGVuc2lvbihk
aXNwbGF5LCAmZ0RhbWFnZUV2ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGludCBldmVudEJhc2U7CisgICAgaWYgKCFYQ29tcG9zaXRlUXVlcnlFeHRl
bnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZSwgJmVycm9yQmFzZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFdlIG5lZWQgdG8gc3VwcG9ydCBYQ29tcG9zaXRlIHZlcnNpb24gMC4y
LgorICAgIGludCBtYWpvciwgbWlub3I7CisgICAgWENvbXBvc2l0ZVF1ZXJ5VmVyc2lvbihkaXNw
bGF5LCAmbWFqb3IsICZtaW5vcik7CisgICAgaWYgKG1ham9yIDwgMCB8fCAoIW1ham9yICYmIG1p
bm9yIDwgMikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhc0V4dGVuc2lvbnMgPSB0
cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93PiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKGNvbnN0IEludFNp
emUmIHNpemUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCit7CisgICAgcmV0dXJuIHN1
cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKSA/IGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdyhzaXplLCBuZWVkc0NvbnRleHQpKSA6IG51bGxwdHI7Cit9CisKK1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJ
bnRTaXplJiBzaXplLCBHTENvbnRleHROZWVkZWQgbmVlZHNDb250ZXh0KQorICAgIDogbV9zaXpl
KHNpemUpCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9wYXJlbnRXaW5kb3coMCkKKyAgICAs
IG1fcGl4bWFwKDApCisgICAgLCBtX25lZWRzQ29udGV4dChuZWVkc0NvbnRleHQpCisgICAgLCBt
X3N1cmZhY2UoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKKyAg
ICAsIG1fZGFtYWdlKDApCisgICAgLCBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKDApCisgICAgLCBt
X2RhbWFnZU5vdGlmeURhdGEoMCkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BM
QVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgU2NyZWVuKiBzY3Jl
ZW4gPSBEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5KGRpc3BsYXkpOworCisgICAgLy8gVGhpcyBpcyBi
YXNlZCBvbiBjb2RlIGZyb20gQ2hyb21pdW06IHNyYy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2Vf
dHJhbnNwb3J0X3N1cmZhY2VfbGludXguY2MKKyAgICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5k
b3dBdHRyaWJ1dGVzOworICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBU
cnVlOworICAgIG1fcGFyZW50V2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAgICAg
ICBSb290V2luZG93T2ZTY3JlZW4oc2NyZWVuKSwKKyAgICAgICAgV2lkdGhPZlNjcmVlbihzY3Jl
ZW4pICsgMSwgMCwgMSwgMSwKKyAgICAgICAgMCwKKyAgICAgICAgQ29weUZyb21QYXJlbnQsCisg
ICAgICAgIElucHV0T3V0cHV0LAorICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgQ1dP
dmVycmlkZVJlZGlyZWN0LAorICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdp
bmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7CisKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLmV2
ZW50X21hc2sgPSBTdHJ1Y3R1cmVOb3RpZnlNYXNrOworICAgIHdpbmRvd0F0dHJpYnV0ZXMub3Zl
cnJpZGVfcmVkaXJlY3QgPSBGYWxzZTsKKyAgICBtX3dpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlz
cGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJlbnRXaW5kb3csCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
cHV0T3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dFdmVudE1hc2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3Bs
YXksIG1fd2luZG93KTsKKworICAgIGlmIChnZXRXaW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgpKQor
ICAgICAgICBnZGtfd2luZG93X2FkZF9maWx0ZXIoMCwgcmVpbnRlcnByZXRfY2FzdDxHZGtGaWx0
ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZlbnQpLCAwKTsKKyAgICBnZXRXaW5kb3dIYXNoTWFwKCku
YWRkKG1fd2luZG93LCB0aGlzKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFhFdmVudCBl
dmVudDsKKyAgICAgICAgWFdpbmRvd0V2ZW50KGRpc3BsYXksIG1fd2luZG93LCBTdHJ1Y3R1cmVO
b3RpZnlNYXNrLCAmZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBNYXBOb3RpZnkg
JiYgZXZlbnQueG1hcC53aW5kb3cgPT0gbV93aW5kb3cpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgWFNlbGVjdElucHV0KGRpc3BsYXksIG1fd2luZG93LCBOb0V2ZW50TWFzayk7Cisg
ICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fd2luZG93LCBDb21wb3NpdGVS
ZWRpcmVjdE1hbnVhbCk7CisgICAgbV9kYW1hZ2UgPSBYRGFtYWdlQ3JlYXRlKGRpc3BsYXksIG1f
d2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkpOworfQorCitSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCkKK3sKKyAgICBBU1NFUlQobV9k
YW1hZ2UpOworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgQVNTRVJUKG1fcGFyZW50V2luZG93
KTsKKworICAgIGdldFdpbmRvd0hhc2hNYXAoKS5yZW1vdmUobV93aW5kb3cpOworICAgIGlmIChn
ZXRXaW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgpKQorICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9m
aWx0ZXIoMCwgcmVpbnRlcnByZXRfY2FzdDxHZGtGaWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZl
bnQpLCAwKTsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShn
ZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBYRGFtYWdlRGVzdHJveShkaXNwbGF5LCBt
X2RhbWFnZSk7CisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOworICAgIFhE
ZXN0cm95V2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFw
QW5kUGl4bWFwU3VyZmFjZSgpOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
R0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisgICAgWFJl
c2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKworICAgIFhGbHVzaChkaXNwbGF5KTsKKworICAgIGlmIChtX25lZWRzQ29udGV4dCA9PSBD
cmVhdGVHTENvbnRleHQpIHsKKyAgICAgICAgY29udGV4dCgpLT53YWl0TmF0aXZlKCk7CisgICAg
ICAgIC8vIFRoaXMgc3dhcCBpcyBiYXNlZCBvbiBjb2RlIGluIENocm9taXVtLiBJdCB0cmllcyB0
byB3b3JrLWFyb3VuZCBhIGJ1ZyBpbiB0aGUgSW50ZWwgZHJpdmVycworICAgICAgICAvLyB3aGVy
ZSBhIHN3YXAgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZnJvbnQgYW5kIGJhY2sgYnVmZmVy
cyBhcmUgcHJvcGVybHkgcmVzaXplZC4KKyAgICAgICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRl
eHQ6OmdldEN1cnJlbnQoKSkKKyAgICAgICAgICAgIGNvbnRleHQoKS0+c3dhcEJ1ZmZlcnMoKTsK
KyAgICB9CisKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZSA9IHRydWU7Cit9CisKK0dMQ29udGV4dCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6
OmNvbnRleHQoKQoreworICAgIEFTU0VSVChtX25lZWRzQ29udGV4dCA9PSBDcmVhdGVHTENvbnRl
eHQpOworCisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsKKworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0Ojpj
cmVhdGVDb250ZXh0Rm9yV2luZG93KG1fd2luZG93LCBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0
KCkpOworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c6OmNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCkKK3sKKyAgICBp
ZiAoIW1fcGl4bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBYRnJlZVBpeG1hcChjYWlyb194
bGliX3N1cmZhY2VfZ2V0X2Rpc3BsYXkobV9zdXJmYWNlLmdldCgpKSwgbV9waXhtYXApOworICAg
IG1fcGl4bWFwID0gMDsKKyAgICBtX3N1cmZhY2UgPSBudWxscHRyOworfQorCitjYWlyb19zdXJm
YWNlX3QqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWlyb1N1cmZhY2VGb3JXaWRnZXQo
R3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCFtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNp
emUgJiYgbV9zdXJmYWNlKQorICAgICAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworCisgICAg
bV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gZmFsc2U7CisKKyAgICAvLyBJdCdzIGltcG9y
dGFudCB0aGF0IHRoZSBuZXcgcGl4bWFwIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBEaXNwbGF5
IHBvaW50ZXIgYXMgdGhlIHRhcmdldAorICAgIC8vIHdpZGdldCBvciBlbHNlIGRyYXdpbmcgc3Bl
ZWQgY2FuIGJlIDEwMHggc2xvd2VyLgorICAgIERpc3BsYXkqIG5ld1BpeG1hcERpc3BsYXkgPSBH
REtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpOworICAg
IFBpeG1hcCBuZXdQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChuZXdQaXhtYXBE
aXNwbGF5LCBtX3dpbmRvdyk7CisgICAgaWYgKCFuZXdQaXhtYXApIHsKKyAgICAgICAgY2xlYW51
cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgWFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICBpZiAoIVhHZXRXaW5k
b3dBdHRyaWJ1dGVzKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93LCAmd2luZG93QXR0cmlidXRl
cykpIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAg
WEZyZWVQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0F0dHJpYnV0ZXMudmlzdWFsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKworICAgIC8v
IE52aWRpYSBkcml2ZXJzIHNlZW0gdG8gcHJlcGFyZSB0aGVpciByZWRpcmVjdGVkIHdpbmRvdyBw
aXhtYXAgYXN5bmNocm9ub3VzbHksIHNvIGZvciBhIGZldyBmcmFjdGlvbnMKKyAgICAvLyBvZiBh
IHNlY29uZCBhZnRlciBlYWNoIHJlc2l6ZSwgd2hpbGUgZG9pbmcgY29udGludW91cyByZXNpemlu
ZyAod2hpY2ggY29uc3RhbnRseSBkZXN0cm95cyBhbmQgY3JlYXRlcworICAgIC8vIHBpeG1hcCB3
aW5kb3ctYmFja2luZ3MpLCB0aGUgcGl4bWFwIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUbyB3
b3JrIGFyb3VuZCB0aGlzIGlzc3VlLCBwYWludCB0aGUgb2xkCisgICAgLy8gcGl4bWFwIHRvIHRo
ZSBuZXcgb25lIHRvIHByb3Blcmx5IGluaXRpYWxpemUgaXQuCisgICAgaWYgKG1fc3VyZmFjZSkg
eworICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3
U3VyZmFjZS5nZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjci5nZXQoKSwg
MSwgMSwgMSk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgY2Fpcm9f
c2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAg
ICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisgICAgfQorCisgICAgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKKyAgICBtX3BpeG1hcCA9IG5ld1BpeG1hcDsKKyAgICBtX3N1cmZh
Y2UgPSBuZXdTdXJmYWNlOworCisgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKK30KKwordm9p
ZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCkK
K3sKKyAgICBpZiAobV9kYW1hZ2VOb3RpZnlDYWxsYmFjaykKKyAgICAgICAgbV9kYW1hZ2VOb3Rp
ZnlDYWxsYmFjayhtX2RhbWFnZU5vdGlmeURhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoR0xYKQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmZmMmE0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAorI2RlZmluZSAgUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3dfaAorCisjaWYgVVNFKEdMWCkKKworI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorCit0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRv
dzsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBEYW1hZ2U7Cit0eXBlZGVmIHZvaWQgKCpEYW1hZ2VO
b3RpZnlDYWxsYmFjaykodm9pZCopOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKK3B1YmxpYzoKKyAgICBlbnVtIEdMQ29udGV4dE5l
ZWRlZCB7IENyZWF0ZUdMQ29udGV4dCwgRG9Ob3RDcmVhdGVHTENvbnRleHQgfTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IElu
dFNpemUmLCBHTENvbnRleHROZWVkZWQgPSBDcmVhdGVHTENvbnRleHQpOworICAgIHZpcnR1YWwg
flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgp
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSk7CisgICAgR0xDb250ZXh0KiBjb250ZXh0KCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBj
YWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0Kik7CisgICAgV2luZG93IHdpbmRvd0lkKCkg
eyByZXR1cm4gbV93aW5kb3c7IH0KKyAgICB2b2lkIGNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygp
OworCisgICAgdm9pZCBzZXREYW1hZ2VOb3RpZnlDYWxsYmFjayhEYW1hZ2VOb3RpZnlDYWxsYmFj
ayBjYWxsYmFjaywgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIG1fZGFtYWdlTm90aWZ5Q2Fs
bGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgbV9kYW1hZ2VOb3RpZnlEYXRhID0gZGF0YTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50
U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCk7CisgICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOworCisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgV2luZG93IG1fd2luZG93Owor
ICAgIFdpbmRvdyBtX3BhcmVudFdpbmRvdzsKKyAgICBQaXhtYXAgbV9waXhtYXA7CisgICAgR0xD
b250ZXh0TmVlZGVkIG1fbmVlZHNDb250ZXh0OworICAgIE93blB0cjxHTENvbnRleHQ+IG1fY29u
dGV4dDsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgdW5zaWdu
ZWQgaW50IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOworICAgIGJvb2wgbV9uZWVkc05ld1BpeG1h
cEFmdGVyUmVzaXplOworCisgICAgRGFtYWdlIG1fZGFtYWdlOworICAgIERhbWFnZU5vdGlmeUNh
bGxiYWNrIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2s7CisgICAgdm9pZCogbV9kYW1hZ2VOb3RpZnlE
YXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdMWCkK
KworI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTJmMjcyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGsuY3BwCkBAIC0wLDAgKzEsNzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
R3RrLmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhU
TUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNpbmNs
dWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlN0cmluZ1RydW5jYXRvci5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJV
c2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGdkay9n
ZGsuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQorI2lu
Y2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBUaGlzIHdvdWxkIGJlIGEgc3RhdGljIG1ldGhvZCwgZXhjZXB0IHRoYXQgZm9yd2FyZCBk
ZWNsYXJpbmcgR1R5cGUgaXMgdHJpY2t5LCBzaW5jZSBpdHMKKy8vIGRlZmluaXRpb24gZGVwZW5k
cyBvbiBpbmNsdWRpbmcgZ2xpYi5oLCBuZWdhdGluZyB0aGUgYmVuZWZpdCBvZiB1c2luZyBhIGZv
cndhcmQgZGVjbGFyYXRpb24uCitleHRlcm4gR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNv
bkZvcldpZGdldFR5cGUoR1R5cGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBnaW50IGRpcmVjdGlv
biwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSk7CitleHRlcm4gR1JlZlB0cjxHZGtQaXhidWY+
IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25z
dCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyICpmYWxsYmFja1N0b2NrSWNvbk5h
bWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKTsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworI2lmIEVOQUJMRShWSURFTykKK3N0YXRpYyBIVE1MTWVk
aWFFbGVtZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCog
bykKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG1lZGlhTm9kZSA9
IG5vZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiAwOworICAgIGlmICghbWVkaWFOb2RlKQorICAg
ICAgICBtZWRpYU5vZGUgPSBub2RlOworICAgIGlmICghbWVkaWFOb2RlIHx8ICFtZWRpYU5vZGUt
PmlzRWxlbWVudE5vZGUoKSB8fCAhc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1lZGlhTm9kZSktPmlz
TWVkaWFFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOworfQorCit2b2lkIFJlbmRlclRoZW1l
R3RrOjppbml0TWVkaWFCdXR0b25zKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpY29uc0luaXRpYWxp
emVkID0gZmFsc2U7CisKKyAgICBpZiAoaWNvbnNJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR1JlZlB0cjxHdGtJY29uRmFjdG9yeT4gaWNvbkZhY3RvcnkgPSBhZG9wdEdSZWYo
Z3RrX2ljb25fZmFjdG9yeV9uZXcoKSk7CisgICAgR3RrSWNvblNvdXJjZSogaWNvblNvdXJjZSA9
IGd0a19pY29uX3NvdXJjZV9uZXcoKTsKKyAgICBjb25zdCBjaGFyKiBpY29uc1tdID0geyAiYXVk
aW8tdm9sdW1lLWhpZ2giLCAiYXVkaW8tdm9sdW1lLW11dGVkIiB9OworCisgICAgZ3RrX2ljb25f
ZmFjdG9yeV9hZGRfZGVmYXVsdChpY29uRmFjdG9yeS5nZXQoKSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhpY29ucyk7ICsraSkgeworICAgICAgICBndGtfaWNv
bl9zb3VyY2Vfc2V0X2ljb25fbmFtZShpY29uU291cmNlLCBpY29uc1tpXSk7CisgICAgICAgIEd0
a0ljb25TZXQqIGljb25TZXQgPSBndGtfaWNvbl9zZXRfbmV3KCk7CisgICAgICAgIGd0a19pY29u
X3NldF9hZGRfc291cmNlKGljb25TZXQsIGljb25Tb3VyY2UpOworICAgICAgICBndGtfaWNvbl9m
YWN0b3J5X2FkZChpY29uRmFjdG9yeS5nZXQoKSwgaWNvbnNbaV0sIGljb25TZXQpOworICAgICAg
ICBndGtfaWNvbl9zZXRfdW5yZWYoaWNvblNldCk7CisgICAgfQorCisgICAgZ3RrX2ljb25fc291
cmNlX2ZyZWUoaWNvblNvdXJjZSk7CisKKyAgICBpY29uc0luaXRpYWxpemVkID0gdHJ1ZTsKK30K
KyNlbmRpZgorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUd0azo6Y3JlYXRl
KCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lR3RrKCkpOworfQorCitQ
YXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBh
Z2UpCit7CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1lR3RrOjpjcmVh
dGUoKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIHJ0OworfQorCitSZW5kZXJUaGVtZUd0azo6UmVu
ZGVyVGhlbWVHdGsoKQorICAgIDogbV9wYW5lbENvbG9yKENvbG9yOjp3aGl0ZSkKKyAgICAsIG1f
c2xpZGVyQ29sb3IoQ29sb3I6OndoaXRlKQorICAgICwgbV9zbGlkZXJUaHVtYkNvbG9yKENvbG9y
Ojp3aGl0ZSkKKyAgICAsIG1fbWVkaWFJY29uU2l6ZSgxNikKKyAgICAsIG1fbWVkaWFTbGlkZXJI
ZWlnaHQoMTQpCit7CisgICAgcGxhdGZvcm1Jbml0KCk7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IGluaXRNZWRpYUNvbG9ycygpOworICAgIGluaXRNZWRpYUJ1dHRvbnMoKTsKKyNlbmRpZgorfQor
CitzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCit7Cisg
ICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBj
YXNlIEJ1dHRvblBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFy
ZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0
OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2Ug
U2xpZGVySG9yaXpvbnRhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6CisgICAg
Y2FzZSBNZWRpYVBsYXlCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0
OgorICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lZGlhRW50ZXJGdWxs
c2NyZWVuQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBl
YXJhbmNlKCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9sU3VwcG9ydHNUaW50
cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzRW5hYmxlZChv
KTsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ck9iamVjdCogbykgY29uc3QKK3sKKyAgICBpZiAoIW8tPmlzQm94KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gRklYTUU6IFRoaXMgc3RyYXRlZ3kgaXMgcG9zc2libHkgaW5jb3JyZWN0
IGZvciB0aGUgR1RLKyBwb3J0LgorICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0g
Q2hlY2tib3hQYXJ0CisgICAgICAgIHx8IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBSYWRp
b1BhcnQpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChvKTsK
KyAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdodCgpIC0gMjsKKyAg
ICB9CisKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7Cit9CisK
Ky8vIFRoaXMgaXMgdXNlZCBpbiBSZW5kZXJUaGVtZUd0azIgYW5kIFJlbmRlclRoZW1lR3RrMy4g
Tm9ybWFsbHksIGl0IHdvdWxkIGJlIGluCisvLyB0aGUgUmVuZGVyVGhlbWVHdGsgaGVhZGVyIChw
ZXJoYXBzIGFzIGEgc3RhdGljIG1ldGhvZCksIGJ1dCB3ZSB3YW50IHRvIGF2b2lkCisvLyBoYXZp
bmcgdG8gaW5jbHVkZSBHVEsrIGhlYWRlcnMgb25seSBmb3IgdGhlIEd0a1RleHREaXJlY3Rpb24g
ZW51bS4KK0d0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgUlRMOgorICAg
ICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JUTDsKKyAgICBjYXNlIExUUjoKKyAgICAgICAgcmV0
dXJuIEdUS19URVhUX0RJUl9MVFI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEdUS19U
RVhUX0RJUl9OT05FOworICAgIH0KK30KKworc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJY29uU3Rh
dGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCkKK3sKKyAg
ICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdU
S19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmpl
Y3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsKKyAgICBpZiAodGhlbWUtPmlz
SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hU
OworCisgICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNo
ZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KKyAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKKyAgICAgICAgc3R5bGUtPnNl
dExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworfQorCit2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFRoZSB0ZXN0cyBjaGVj
ayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBpZ25vcmUgbGluZSBoZWlnaHQu
CisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOworCisgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVyaW5nIHdoZW4gYm9y
ZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCisgICAgc3R5bGUtPnJlc2V0Qm9y
ZGVyUmFkaXVzKCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVudUxpc3Qob2JqZWN0LCBpbmZv
LCByZWN0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0QXJlYShSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBy
ZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50R2Rr
UGl4YnVmKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR2RrUGl4YnVmKiBpY29uLCBj
b25zdCBJbnRSZWN0JiBpY29uUmVjdCkKK3sKKyAgICBJbnRTaXplIGljb25TaXplKGdka19waXhi
dWZfZ2V0X3dpZHRoKGljb24pLCBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNvbikpOworICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBzY2FsZWRJY29uOworICAgIGlmIChpY29uUmVjdC5zaXplKCkgIT0g
aWNvblNpemUpIHsKKyAgICAgICAgLy8gV2UgY291bGQgdXNlIGNhaXJvX3NjYWxlKCkgaGVyZSBi
dXQgY2Fpcm8vcGl4bWFuIGRvd25zY2FsZSBxdWFsaXR5IGlzIHF1aXRlIGJhZC4KKyAgICAgICAg
c2NhbGVkSWNvbiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX3NjYWxlX3NpbXBsZShpY29uLCBpY29u
UmVjdC53aWR0aCgpLCBpY29uUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfSU5URVJQX0JJTElORUFSKSk7Cisg
ICAgICAgIGljb24gPSBzY2FsZWRJY29uLmdldCgpOworICAgIH0KKworICAgIGNhaXJvX3QqIGNy
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgY2Fpcm9fc2F2ZShjcik7
CisgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBpY29uLCBpY29uUmVjdC54KCks
IGljb25SZWN0LnkoKSk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIGNhaXJvX3Jlc3RvcmUo
Y3IpOworfQorCisvLyBEZWZpbmVkIGluIEdUSysgKGd0ay9ndGtpY29uZmFjdG9yeS5jKQorc3Rh
dGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVNZW51ID0gMTY7CitzdGF0aWMgY29uc3QgZ2ludCBn
dGtJY29uU2l6ZVNtYWxsVG9vbGJhciA9IDE4Oworc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNp
emVCdXR0b24gPSAyMDsKK3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplTGFyZ2VUb29sYmFy
ID0gMjQ7CitzdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURuZCA9IDMyOworc3RhdGljIGNv
bnN0IGdpbnQgZ3RrSWNvblNpemVEaWFsb2cgPSA0ODsKKworc3RhdGljIEd0a0ljb25TaXplIGdl
dEljb25TaXplRm9yUGl4ZWxTaXplKGdpbnQgcGl4ZWxTaXplKQoreworICAgIGlmIChwaXhlbFNp
emUgPCBndGtJY29uU2l6ZVNtYWxsVG9vbGJhcikKKyAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJ
WkVfTUVOVTsKKyAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25TaXplU21hbGxUb29sYmFyICYm
IHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplQnV0dG9uKQorICAgICAgICByZXR1cm4gR1RLX0lDT05f
U0laRV9TTUFMTF9UT09MQkFSOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3RrSWNvblNpemVCdXR0
b24gJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIpCisgICAgICAgIHJldHVy
biBHVEtfSUNPTl9TSVpFX0JVVFRPTjsKKyAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25TaXpl
TGFyZ2VUb29sYmFyICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplRG5kKQorICAgICAgICByZXR1
cm4gR1RLX0lDT05fU0laRV9MQVJHRV9UT09MQkFSOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3Rr
SWNvblNpemVEbmQgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVEaWFsb2cpCisgICAgICAgIHJl
dHVybiBHVEtfSUNPTl9TSVpFX0RORDsKKworICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0RJQUxP
RzsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIGksIHJlY3QpOworfQorCitzdGF0aWMgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOworCisgICAgLy8g
R2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KKyAgICBpbnQgZm9udFNp
emUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpZiAoZm9udFNpemUgPCBndGtJY29uU2l6ZU1l
bnUpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgZ2ludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAg
Z3RrX2ljb25fc2l6ZV9sb29rdXAoZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZm9udFNpemUpLCAm
d2lkdGgsICZoZWlnaHQpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkpOworfQorCit2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7
CisgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUpOworfQorCitzdGF0aWMgSW50
UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIEdldCB0aGUg
cmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgorICAgIE5vZGUqIGlucHV0ID0gcmVuZGVyT2Jq
ZWN0LT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKKyAgICBpZiAoIWlucHV0KQorICAgICAgICBpbnB1
dCA9IHJlbmRlck9iamVjdC0+bm9kZSgpOworICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlz
Qm94KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAvLyBJZiBwb3NzaWJsZSBj
ZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0aWNhbGx5IGluIHRoZSBwYXJl
bnQgaW5wdXQgZWxlbWVudC4KKyAgICAvLyBXZSBhbHNvIGFkZCBvbmUgcGl4ZWwgaGVyZSB0byBl
bnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQgdXAgZm9yIGJveCBoZWlnaHRz
CisgICAgLy8gdGhhdCBhcmUgZXZlbiwgd2hpY2ggbG9va3MgaW4gcmVsYXRpb24gdG8gdGhlIGJv
eCB0ZXh0LgorICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0gdG9SZW5kZXJCb3goaW5wdXQt
PnJlbmRlcmVyKCkpLT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0
aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFy
ZW50J3MgYm94LgorICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53
aWR0aCgpLCBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHJlY3QuaGVpZ2h0KCkp
KTsKKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdC54KCksIGlucHV0Q29udGVudEJveC55KCkg
KyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gaWNvblNpemUgKyAxKSAvIDIsIGljb25TaXpl
LCBpY29uU2l6ZSk7CisgICAgcmV0dXJuIHNjYWxlZFJlY3Q7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJl
bnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsKKyAgICBpZiAoaWNvblJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
aWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9D
S19GSU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQaXhl
bFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250
ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIGFk
anVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVs
ZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsKKyAgICBpZiAoaWNvblJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdl
dFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9DS19DTEVBUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Rr
SWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJl
Y3QuaGVpZ2h0KCkpKTsKKyAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNv
bi5nZXQoKSwgaWNvblJlY3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHBy
b3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVs
eS4KKyAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKyAgICBzdHlsZS0+c2V0TGluZUhl
aWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxk
KG8sIGksIHJlY3QpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENhcHNMb2NrSW5k
aWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBUaGUgb3RoZXIgcGFpbnQgbWV0
aG9kcyBkb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgcGFpbnRpbmcgaXMgZGlzYWJsZWQgYmVj
YXVzZSBSZW5kZXJUaGVtZSBhbHJlYWR5IGNoZWNrcyBpdAorICAgIC8vIGJlZm9yZSBjYWxsaW5n
IHRoZW0sIGJ1dCBwYWludENhcHNMb2NrSW5kaWNhdG9yKCkgaXMgY2FsbGVkIGJ5IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZSB3aGljaCBkb2Vzbid0IGNoZWNrIGl0LgorICAgIGlmIChwYWlu
dEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRU
eXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0FQU19MT0NLX1dBUk5JTkcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHRE
aXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGdldEljb25T
aXplRm9yUGl4ZWxTaXplKGljb25TaXplKSk7CisKKyAgICAvLyBPbmx5IHJlLXNjYWxlIHRoZSBp
Y29uIHdoZW4gaXQncyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gaWNvbiBzaXplLgorICAgIGlm
IChpY29uU2l6ZSA+PSBndGtJY29uU2l6ZU1lbnUpCisgICAgICAgIGljb25TaXplID0gZ2RrX3Bp
eGJ1Zl9nZXRfaGVpZ2h0KGljb24uZ2V0KCkpOworCisgICAgLy8gR1RLKyBsb2NhdGVzIHRoZSBp
Y29uIHJpZ2h0IGFsaWduZWQgaW4gdGhlIGVudHJ5LiBUaGUgZ2l2ZW4gcmVjdGFuZ2xlIGlzIGFs
cmVhZHkKKyAgICAvLyBjZW50ZXJlZCB2ZXJ0aWNhbGx5IGJ5IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS4KKyAgICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0g
aWNvblNpemUsCisgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgp
IC0gaWNvblNpemUpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgIGljb25TaXplLCBpY29uU2l6
ZSk7CisgICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGlj
b25SZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRy
KTsKK30KKworZG91YmxlIFJlbmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25z
dAoreworICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVs
dCgpOworCisgICAgZ2Jvb2xlYW4gc2hvdWxkQmxpbms7CisgICAgZ2ludCB0aW1lOworCisgICAg
Z19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWN1cnNvci1ibGluayIsICZzaG91bGRCbGluaywg
Imd0ay1jdXJzb3ItYmxpbmstdGltZSIsICZ0aW1lLCBOVUxMKTsKKworICAgIGlmICghc2hvdWxk
QmxpbmspCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHRpbWUgLyAyMDAwLjsKK30K
KworZG91YmxlIFJlbmRlclRoZW1lR3RrOjpnZXRTY3JlZW5EUEkoKQoreworICAgIC8vIEZJWE1F
OiBSZWFsbHkgdGhpcyBzaG91bGQgYmUgdGhlIHdpZGdldCdzIHNjcmVlbi4KKyAgICBHZGtTY3Jl
ZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNjcmVlbikK
KyAgICAgICAgcmV0dXJuIDk2OyAvLyBEZWZhdWx0IHRvIDk2IERQSS4KKworICAgIGZsb2F0IGRw
aSA9IGdka19zY3JlZW5fZ2V0X3Jlc29sdXRpb24oc2NyZWVuKTsKKyAgICBpZiAoZHBpIDw9IDAp
CisgICAgICAgIHJldHVybiA5NjsKKyAgICByZXR1cm4gZHBpOworfQorCit2b2lkIFJlbmRlclRo
ZW1lR3RrOjpzeXN0ZW1Gb250KGludCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Cit7CisgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dldF9k
ZWZhdWx0KCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
VGhpcyB3aWxsIGJlIGEgZm9udCBzZWxlY3Rpb24gc3RyaW5nIGxpa2UgIlNhbnMgMTAiIHNvIHdl
IGNhbm5vdCB1c2UgaXQgYXMgdGhlIGZhbWlseSBuYW1lLgorICAgIEdPd25QdHI8Z2NoYXI+IGZv
bnROYW1lOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1mb250LW5hbWUiLCAmZm9u
dE5hbWUub3V0UHRyKCksIE5VTEwpOworCisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIHBhbmdv
RGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2Zyb21fc3RyaW5nKGZvbnROYW1l
LmdldCgpKTsKKyAgICBpZiAoIXBhbmdvRGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShwYW5nb19mb250X2Rl
c2NyaXB0aW9uX2dldF9mYW1pbHkocGFuZ29EZXNjcmlwdGlvbikpOworCisgICAgaW50IHNpemUg
PSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKHBhbmdvRGVzY3JpcHRpb24pIC8gUEFO
R09fU0NBTEU7CisgICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIGZvbnQgaXMgaW4gcG9pbnRzLCB3
ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzLgorICAgIGlmICghcGFuZ29fZm9udF9kZXNj
cmlwdGlvbl9nZXRfc2l6ZV9pc19hYnNvbHV0ZShwYW5nb0Rlc2NyaXB0aW9uKSkKKyAgICAgICAg
c2l6ZSA9IHNpemUgKiAoZ2V0U2NyZWVuRFBJKCkgLyA3Mi4wKTsKKworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0
KEZvbnRXZWlnaHROb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2Up
OworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShwYW5nb0Rlc2NyaXB0aW9uKTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKQoreworI2lm
IEVOQUJMRShWSURFTykKKyAgICBpbml0TWVkaWFDb2xvcnMoKTsKKyNlbmRpZgorICAgIFJlbmRl
clRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQorCisjaWYgRU5BQkxFKFZJREVP
KQorU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNHdGtVc2VyQWdlbnRTdHlsZVNoZWV0
LCBzaXplb2YobWVkaWFDb250cm9sc0d0a1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKK30KKworI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK1N0cmluZyBSZW5kZXJUaGVtZUd0azo6ZXh0cmFGdWxs
U2NyZWVuU3R5bGVTaGVldCgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgY2hhciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0lj
b25OYW1lKQoreworICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54KCkgKyAocmVjdC53aWR0aCgp
IC0gbV9tZWRpYUljb25TaXplKSAvIDIsCisgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSAr
IChyZWN0LmhlaWdodCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIsCisgICAgICAgICAgICAgICAg
ICAgICBtX21lZGlhSWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7CisgICAgR1JlZlB0cjxHZGtQ
aXhidWY+IGljb24gPSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVf
Q09OVEFJTkVSLCBzeW1ib2xpY0ljb25OYW1lLCBmYWxsYmFja1N0b2NrSWNvbk5hbWUsCisgICAg
ICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSks
IGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKKyAg
ICBwYWludEdka1BpeGJ1Zihjb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpoYXNPd25EaXNhYmxlZFN0YXRl
SGFuZGxpbmdGb3IoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gKHBhcnQg
IT0gTWVkaWFNdXRlQnV0dG9uUGFydCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LCAi
dmlldy1mdWxsc2NyZWVuLXN5bWJvbGljIiwgR1RLX1NUT0NLX0ZVTExTQ1JFRU4pOworfQorCiti
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gZ2V0TWVkaWFFbGVt
ZW50RnJvbVJlbmRlck9iamVjdChyZW5kZXJPYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIG11dGVkID0gbWVkaWFFbGVtZW50
LT5tdXRlZCgpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFp
bnRJbmZvLmNvbnRleHQsIHJlY3QsCisgICAgICAgIG11dGVkID8gImF1ZGlvLXZvbHVtZS1tdXRl
ZC1zeW1ib2xpYyIgOiAiYXVkaW8tdm9sdW1lLWhpZ2gtc3ltYm9saWMiLAorICAgICAgICBtdXRl
ZCA/ICJhdWRpby12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVtZS1oaWdoIik7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBOb2RlKiBub2RlID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFub2RlLT5pc01lZGlhQ29udHJv
bEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBwbGF5ID0gbWVk
aWFDb250cm9sRWxlbWVudFR5cGUobm9kZSkgPT0gTWVkaWFQbGF5QnV0dG9uOworICAgIHJldHVy
biBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qs
CisgICAgICAgIHBsYXkgPyAibWVkaWEtcGxheWJhY2stc3RhcnQtc3ltYm9saWMiIDogIm1lZGlh
LXBsYXliYWNrLXBhdXNlLXN5bWJvbGljIiwKKyAgICAgICAgcGxheSA/IEdUS19TVE9DS19NRURJ
QV9QTEFZIDogR1RLX1NUT0NLX01FRElBX1BBVVNFKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBy
ZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCBy
ZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9SRVdJ
TkQpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJl
bmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsICJtZWRpYS1zZWVrLWZvcndhcmQt
c3ltYm9saWMiLCBHVEtfU1RPQ0tfTUVESUFfRk9SV0FSRCk7Cit9CisKK3N0YXRpYyBSb3VuZGVk
UmVjdDo6UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorewor
ICAgIHJldHVybiBSb3VuZGVkUmVjdDo6UmFkaWkoCisgICAgICAgIEludFNpemUoc3R5bGUtPmJv
cmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJUb3BM
ZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCisgICAgICAgIEludFNpemUoc3R5bGUt
PmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVy
VG9wUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6ZShz
dHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUt
PmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAg
SW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVl
KCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkp
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVs
ZW1lbnQobyk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAg
IGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7
CisKKyAgICBmbG9hdCBtZWRpYUR1cmF0aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwor
ICAgIGZsb2F0IHRvdGFsVHJhY2tXaWR0aCA9IHIud2lkdGgoKTsKKyAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBvLT5zdHlsZSgpOworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0g
bWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIGZsb2F0IHN0
YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9SRV9FWENFUFRJT04pOworICAgICAg
ICBmbG9hdCBlbmQgPSB0aW1lUmFuZ2VzLT5lbmQoaW5kZXgsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICBmbG9hdCBzdGFydFJhdGlvID0gc3RhcnQgLyBtZWRpYUR1cmF0aW9uOworICAgICAg
ICBmbG9hdCBsZW5ndGhSYXRpbyA9IChlbmQgLSBzdGFydCkgLyBtZWRpYUR1cmF0aW9uOworICAg
ICAgICBpZiAoIWxlbmd0aFJhdGlvKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
SW50UmVjdCByYW5nZVJlY3Qocik7CisgICAgICAgIHJhbmdlUmVjdC5zZXRXaWR0aChsZW5ndGhS
YXRpbyAqIHRvdGFsVHJhY2tXaWR0aCk7CisgICAgICAgIGlmIChpbmRleCkKKyAgICAgICAgICAg
IHJhbmdlUmVjdC5tb3ZlKHN0YXJ0UmF0aW8gKiB0b3RhbFRyYWNrV2lkdGgsIDApOworICAgICAg
ICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QoUm91bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJS
YWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICB9CisKKyAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBvLT5zdHlsZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUm91bmRlZFJlY3QoUm91
bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9s
dW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50
TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgZmxvYXQgdm9sdW1lID0gbWVkaWFFbGVtZW50LT52b2x1
bWUoKTsKKyAgICBpZiAoIXZvbHVtZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKKyAgICBjb250ZXh0LT5z
YXZlKCk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOworCisgICAgaW50
IHJlY3RIZWlnaHQgPSByZWN0LmhlaWdodCgpOworICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVj
dEhlaWdodCAqIHZvbHVtZTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJPYmplY3Qt
PnN0eWxlKCk7CisgICAgSW50UmVjdCB2b2x1bWVSZWN0KHJlY3QpOworICAgIHZvbHVtZVJlY3Qu
bW92ZSgwLCByZWN0SGVpZ2h0IC0gdHJhY2tIZWlnaHQpOworICAgIHZvbHVtZVJlY3Quc2V0SGVp
Z2h0KGNlaWwodHJhY2tIZWlnaHQpKTsKKworICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChS
b3VuZGVkUmVjdCh2b2x1bWVSZWN0LCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLAorICAg
ICAgICBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHls
ZS0+Y29sb3JTcGFjZSgpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVkaWFTbGlkZXJU
aHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Cit9CisKK1N0cmluZyBSZW5kZXJU
aGVtZUd0azo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1l
LCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250cm9s
c1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShkdXJh
dGlvbik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50VGltZShS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFBy
b2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKK30KKworLy8g
VGhlc2UgdmFsdWVzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YS5jcHAKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7CitzdGF0
aWMgY29uc3QgaW50IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzID0gMTA7CitzdGF0aWMgY29uc3Qg
ZG91YmxlIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgPSAwLjEyNTsKK2RvdWJsZSBSZW5kZXJU
aGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWw7Cit9
CisKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9u
SW50ZXJ2YWwgKiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyAqIDI7IC8vICIyIiBmb3IgYmFjayBh
bmQgZm9ydGg7Cit9CisKK0ludFJlY3QgUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNz
UmVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgZnVsbEJhclJl
Y3QpCit7CisgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QoZnVsbEJhclJlY3QpOworICAgIFJlbmRl
clByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyT2JqZWN0
KTsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgeworICAgICAgICBp
bnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3Mt
PnBvc2l0aW9uKCk7CisgICAgICAgIGlmIChyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlv
bigpID09IFJUTCkKKyAgICAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54
KCkgKyBwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzV2lkdGgpOworICAgICAgICBwcm9n
cmVzc1JlY3Quc2V0V2lkdGgocHJvZ3Jlc3NXaWR0aCk7CisgICAgICAgIHJldHVybiBwcm9ncmVz
c1JlY3Q7CisgICAgfQorCisgICAgZG91YmxlIGFuaW1hdGlvblByb2dyZXNzID0gcmVuZGVyUHJv
Z3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCk7CisKKyAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dy
ZXNzIHJlY3Qgc2hyaW5rIHNtYWxsZXIgdGhhbiAyIHBpeGVscy4KKyAgICBpbnQgbmV3V2lkdGgg
PSBtYXgoMiwgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzKTsK
KyAgICBpbnQgbW92YWJsZVdpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBuZXdXaWR0aDsK
KyAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgobmV3V2lkdGgpOworCisgICAgLy8gV2Ugd2FudCB0
aGUgZmlyc3QgMC41IHVuaXRzIG9mIHRoZSBhbmltYXRpb24gcHJvZ3Jlc3MgdG8gcmVwcmVzZW50
IHRoZQorICAgIC8vIGZvcndhcmQgbW90aW9uIGFuZCB0aGUgc2Vjb25kIDAuNSB1bml0cyB0byBy
ZXByZXNlbnQgdGhlIGJhY2t3YXJkIG1vdGlvbiwKKyAgICAvLyB0aHVzIHdlIG11bHRpcGx5IGJ5
IHR3byBoZXJlIHRvIGdldCB0aGUgZnVsbCBzd2VlcCBvZiB0aGUgcHJvZ3Jlc3MgYmFyIHdpdGgK
KyAgICAvLyBlYWNoIGRpcmVjdGlvbi4KKyAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPCAwLjUp
CisgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoYW5pbWF0aW9u
UHJvZ3Jlc3MgKiAyICogbW92YWJsZVdpZHRoKSk7CisgICAgZWxzZQorICAgICAgICBwcm9ncmVz
c1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgKCgxLjAgLSBhbmltYXRpb25Qcm9ncmVzcykg
KiAyICogbW92YWJsZVdpZHRoKSk7CisgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKK30KKyNlbmRp
ZgorCitTdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZp
bGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRp
cGxlRmlsZXNBbGxvd2VkKSBjb25zdAoreworICAgIGlmICh3aWR0aCA8PSAwKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoZmlsZUxpc3QtPmxlbmd0aCgpID4gMSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShtdWx0aXBsZUZpbGVVcGxv
YWRUZXh0KGZpbGVMaXN0LT5sZW5ndGgoKSksIHdpZHRoLCBmb250LCBTdHJpbmdUcnVuY2F0b3I6
OkVuYWJsZVJvdW5kaW5nSGFja3MpOworCisgICAgU3RyaW5nIHN0cmluZzsKKyAgICBpZiAoZmls
ZUxpc3QtPmxlbmd0aCgpKQorICAgICAgICBzdHJpbmcgPSBwYXRoR2V0RmlsZU5hbWUoZmlsZUxp
c3QtPml0ZW0oMCktPnBhdGgoKSk7CisgICAgZWxzZSBpZiAobXVsdGlwbGVGaWxlc0FsbG93ZWQp
CisgICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpOworICAg
IGVsc2UKKyAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsK
KworICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKHN0cmluZywgd2lk
dGgsIGZvbnQsIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7Cit9CisKKyNp
ZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKK0ludFNpemUgUmVuZGVyVGhlbWVHdGs6OnNsaWRl
clRpY2tTaXplKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBzZXQgdGhpcyB0
byB0aGUgc2l6ZSBvZiBvbmUgdGljayBtYXJrLgorICAgIHJldHVybiBJbnRTaXplKDAsIDApOwor
fQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIo
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNldCB0aGlzIHRvIHRoZSBwb3Np
dGlvbiBvZiB0aGUgdGljayBtYXJrcy4KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNGE1ODA4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuaApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUd0a19oCisjZGVmaW5lIFJlbmRlclRoZW1l
R3RrX2gKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgorCit0eXBlZGVmIHN0cnVjdCBfR2RrQ29sb3JtYXAgR2RrQ29sb3JtYXA7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVGhlbWVHdGsgOiBwdWJsaWMgUmVu
ZGVyVGhlbWUgeworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZUd0aygpOworICAgIHZpcnR1YWwg
flJlbmRlclRoZW1lR3RrKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5k
ZXJUaGVtZT4gY3JlYXRlKCk7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1l
J3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0
aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICAvLyBBIG1l
dGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5k
b3cgaGFzIGZvY3VzIG9yIG5vdC4KKyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGlu
dHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICAvLyBBIGdlbmVyYWwgbWV0aG9k
IGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCosIEludFJlY3QmKTsKKworICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUg
cG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlm
IGEgYmFzZWxpbmUKKyAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFt
aW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhh
bXBsZXMgb2YKKyAgICAvLyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KKyAgICB2aXJ0
dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisg
ICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgLy8gTGlzdCBCb3ggc2VsZWN0aW9uIGNvbG9y
CisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBk
b3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxh
dGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKKworICAgIC8vIFN5c3RlbSBmb250cyBhbmQgY29sb3Jz
LgorICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlv
biYpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQp
IGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZp
cnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUs
IGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICB2aXJ0dWFsIFN0cmluZyBleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7CisjZW5kaWYKKyNl
bmRpZgorCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgLy8gUmV0dXJucyBzaXpl
IG9mIG9uZSBzbGlkZXIgdGljayBtYXJrIGZvciBhIGhvcml6b250YWwgdHJhY2suCisgICAgLy8g
Rm9yIHZlcnRpY2FsIHRyYWNrcyB3ZSByb3RhdGUgaXQgYW5kIHVzZSBpdC4gaS5lLiBXaWR0aCBp
cyBhbHdheXMgbGVuZ3RoIGFsb25nIHRoZSB0cmFjay4KKyAgICB2aXJ0dWFsIEludFNpemUgc2xp
ZGVyVGlja1NpemUoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBvZiBzbGlk
ZXIgdGljayBvcmlnaW4gZnJvbSB0aGUgc2xpZGVyIHRyYWNrIGNlbnRlci4KKyAgICB2aXJ0dWFs
IGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3Q7CisjZW5kaWYKKwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0KiBndGtDb250YWluZXIoKSBj
b25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBn
dGtWU2Nyb2xsYmFyKCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtIU2Nyb2xsYmFyKCkgY29u
c3Q7CisgICAgc3RhdGljIHZvaWQgZ2V0SW5kaWNhdG9yTWV0cmljcyhDb250cm9sUGFydCwgaW50
JiBpbmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNwYWNpbmcpOworI2Vsc2UKKyAgICBHdGtT
dHlsZUNvbnRleHQqIGd0a1Njcm9sbGJhclN0eWxlKCk7CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2ti
b3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcik7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7Cisg
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAg
IC8vIFRoZSBNYWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBh
bmQgdGhlICJtZW51IGxpc3QgYnV0dG9uLiIKKyAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hl
biBhIG1lbnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5z
dXJlCisgICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFs
d2F5cyB3YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCisgICAgLy8gd2UgZG9uJ3QgbWFpbnRh
aW4gdGhpcyBkaWZmZXJlbnRpYXRpb24uCisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworI2lmIEVOQUJMRShWSURF
TykKKyAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOworICAgIHZvaWQgaW5pdE1lZGlhQnV0dG9u
cygpOworICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29u
dHJvbFBhcnQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisg
ICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBj
b25zdCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBP
VkVSUklERTsKKworICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisgICAgc3RhdGljIHZvaWQgc2V0
VGV4dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSopOworICAgIHN0YXRpYyBkb3VibGUgZ2V0U2Ny
ZWVuRFBJKCk7CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgYm9vbCBwYWludE1lZGlhQnV0dG9u
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBj
aGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFja1N0b2NrSWNvbk5hbWUp
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKKyAgICBzdGF0aWMgSW50
UmVjdCBjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYp
OworI2VuZGlmCisKKyAgICBtdXRhYmxlIENvbG9yIG1fcGFuZWxDb2xvcjsKKyAgICBtdXRhYmxl
IENvbG9yIG1fc2xpZGVyQ29sb3I7CisgICAgbXV0YWJsZSBDb2xvciBtX3NsaWRlclRodW1iQ29s
b3I7CisgICAgY29uc3QgaW50IG1fbWVkaWFJY29uU2l6ZTsKKyAgICBjb25zdCBpbnQgbV9tZWRp
YVNsaWRlckhlaWdodDsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgdm9pZCBzZXR1
cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0Owor
ICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdDsKKyAgICB2b2lkIGdldENv
bWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmln
aHQsIGludCYgYm90dG9tKSBjb25zdDsKKyAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0
aCgpIGNvbnN0OworICAgIGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OworCisgICAgR3RrV2lkZ2V0KiBndGtCdXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0
a1RyZWVWaWV3KCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtWU2NhbGUoKSBjb25zdDsKKyAg
ICBHdGtXaWRnZXQqIGd0a0hTY2FsZSgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrUmFkaW9C
dXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NoZWNrQnV0dG9uKCkgY29uc3Q7Cisg
ICAgR3RrV2lkZ2V0KiBndGtQcm9ncmVzc0JhcigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3Rr
Q29tYm9Cb3goKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94QnV0dG9uKCkgY29u
c3Q7CisgICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveEFycm93KCkgY29uc3Q7CisgICAgR3RrV2lk
Z2V0KiBndGtDb21ib0JveFNlcGFyYXRvcigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrU3Bp
bkJ1dHRvbigpIGNvbnN0OworCisgICAgR2RrQ29sb3JtYXAqIG1fY29sb3JtYXA7CisgICAgbXV0
YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93OworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a0NvbnRhaW5lcjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtCdXR0b247CisgICAgbXV0
YWJsZSBHdGtXaWRnZXQqIG1fZ3RrRW50cnk7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3Rr
VHJlZVZpZXc7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjYWxlOworICAgIG11dGFi
bGUgR3RrV2lkZ2V0KiBtX2d0a0hTY2FsZTsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtS
YWRpb0J1dHRvbjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDaGVja0J1dHRvbjsKKyAg
ICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtQcm9ncmVzc0JhcjsKKyAgICBtdXRhYmxlIEd0a1dp
ZGdldCogbV9ndGtDb21ib0JveDsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0Jv
eEJ1dHRvbjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0JveEFycm93OworICAg
IG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94U2VwYXJhdG9yOworICAgIG11dGFibGUg
R3RrV2lkZ2V0KiBtX2d0a1ZTY3JvbGxiYXI7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3Rr
SFNjcm9sbGJhcjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtTcGluQnV0dG9uOworICAg
IGJvb2wgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcDsKKyAgICBmcmllbmQgY2xhc3MgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYgLy8gUmVuZGVy
VGhlbWVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azIuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyM2EwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAKQEAgLTAsMCArMSw5NjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCisKKy8vIFdlIG5lZWQgdGhpcyB0byBhbGxvdyBidWlsZGluZyB3aGlsZSB1c2luZyBH
VEtfV0lER0VUX1NFVF9GTEFHUy4gSXQncyBkZXByZWNhdGVkCisvLyBidXQgc29tZSB0aGVtZSBl
bmdpbmVzIHJlcXVpcmUgaXQgdG8gZW5zdXJlIHByb3BlciByZW5kZXJpbmcgb2YgZm9jdXMgaW5k
aWNhdG9ycy4KKyN1bmRlZiBHVEtfRElTQUJMRV9ERVBSRUNBVEVECisKKyNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhaW50SW5m
by5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24u
aCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIldpZGdldFJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFs
dWUgZGVmaW5lZCBieSBHVEsrLCB3aGVyZSBpdCB3YXMgZGVmaW5lZCBhcyBNSU5fQVJST1dfV0lE
VEggaW4gZ3Rrc3BpbmJ1dHRvbi5jLgorc3RhdGljIGNvbnN0IGludCBtaW5TcGluQnV0dG9uQXJy
b3dTaXplID0gNjsKKworLy8gVGhpcyBpcyBub3QgYSBzdGF0aWMgbWV0aG9kLCBiZWNhdXNlIHdl
IHdhbnQgdG8gYXZvaWQgaGF2aW5nIEdUSysgaGVhZGVycyBpbiBSZW5kZXJUaGVtZUd0ay5oLgor
ZXh0ZXJuIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uKTsK
Kwordm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3RoZW1lUGFy
dHNIYXZlUkdCQUNvbG9ybWFwID0gdHJ1ZTsKKyAgICBtX2d0a1dpbmRvdyA9IDA7CisgICAgbV9n
dGtDb250YWluZXIgPSAwOworICAgIG1fZ3RrQnV0dG9uID0gMDsKKyAgICBtX2d0a0VudHJ5ID0g
MDsKKyAgICBtX2d0a1RyZWVWaWV3ID0gMDsKKyAgICBtX2d0a1ZTY2FsZSA9IDA7CisgICAgbV9n
dGtIU2NhbGUgPSAwOworICAgIG1fZ3RrUmFkaW9CdXR0b24gPSAwOworICAgIG1fZ3RrQ2hlY2tC
dXR0b24gPSAwOworICAgIG1fZ3RrUHJvZ3Jlc3NCYXIgPSAwOworICAgIG1fZ3RrQ29tYm9Cb3gg
PSAwOworICAgIG1fZ3RrQ29tYm9Cb3hCdXR0b24gPSAwOworICAgIG1fZ3RrQ29tYm9Cb3hBcnJv
dyA9IDA7CisgICAgbV9ndGtDb21ib0JveFNlcGFyYXRvciA9IDA7CisgICAgbV9ndGtWU2Nyb2xs
YmFyID0gMDsKKyAgICBtX2d0a0hTY3JvbGxiYXIgPSAwOworICAgIG1fZ3RrU3BpbkJ1dHRvbiA9
IDA7CisKKyAgICBtX2NvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChnZGtf
c2NyZWVuX2dldF9kZWZhdWx0KCkpOworICAgIGlmICghbV9jb2xvcm1hcCkgeworICAgICAgICBt
X3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0gZmFsc2U7CisgICAgICAgIG1fY29sb3JtYXAg
PSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KSk7CisgICAgfQorfQorCitSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKCkKK3sKKyAg
ICBpZiAobV9ndGtXaW5kb3cpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2d0a1dpbmRv
dyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVk
aWFDb2xvcnMoKQoreworICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxl
KEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKKyAgICBtX3BhbmVsQ29sb3IgPSBzdHlsZS0+
YmdbR1RLX1NUQVRFX05PUk1BTF07CisgICAgbV9zbGlkZXJDb2xvciA9IHN0eWxlLT5iZ1tHVEtf
U1RBVEVfQUNUSVZFXTsKKyAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBzdHlsZS0+YmdbR1RLX1NU
QVRFX1NFTEVDVEVEXTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9j
dXMoR3RrV2lkZ2V0KiB3aWRnZXQsIEludFJlY3QmIHJlY3QsIGJvb2wgaWdub3JlSW50ZXJpb3JG
b2N1c1Byb3BlcnR5ID0gZmFsc2UpCit7CisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsK
KyAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzID0gMDsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmlu
dGVyaW9yRm9jdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgi
LCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIs
ICZmb2N1c1BhZCwgTlVMTCk7CisgICAgaWYgKCFpZ25vcmVJbnRlcmlvckZvY3VzUHJvcGVydHkg
JiYgaW50ZXJpb3JGb2N1cykKKyAgICAgICAgcmV0dXJuOworICAgIHJlY3QuaW5mbGF0ZShmb2N1
c1dpZHRoICsgZm9jdXNQYWQpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBh
aW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCk7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAg
Y2FzZSBSYWRpb1BhcnQ6IHsKKyAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBpbnRlcmlvciBmb2N1
cyBwcm9wZXJ0eSBhbmQgYWx3YXlzIGV4cGFuZCB0aGUgZm9jdXMgcmVjdC4gSW4gR1RLKywgdGhl
CisgICAgICAgIC8vIGZvY3VzIGluZGljYXRvciBpcyB1c3VhbGx5IG9uIHRoZSB0ZXh0IG5leHQg
dG8gYSBjaGVja2JveCBvciByYWRpbyBidXR0b24sIGJ1dCB0aGF0IGRvZXNuJ3QKKyAgICAgICAg
Ly8gaGFwcGVuIGluIFdlYkNvcmUuIEJ5IGV4cGFuZGluZyB0aGUgZm9jdXMgcmVjdGFuZ2xlIHVu
Y29uZGl0aW9uYWxseSB3ZSBpbmNyZWFzZSBpdHMgcHJvbWluZW5jZS4KKyAgICAgICAgYWRqdXN0
UmVjdEZvckZvY3VzKHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gZ3RrQ2hlY2tCdXR0b24oKSA6IGd0
a1JhZGlvQnV0dG9uKCksIHJlY3QsIHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKKyAgICAgICAgLy8gU2VlIHBhaW50SW5uZXJTcGlu
QnV0dG9uIGZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgd2UgZXhwYW5kIHRoZSBwYWludGluZyBy
ZWN0LgorICAgICAgICByZWN0LmluZmxhdGVZKDIpOworICAgICAgICByZWN0LnNldFdpZHRoKHJl
Y3Qud2lkdGgoKSArIDIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3N0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJlbmRlclRoZW1lR3RrKiB0
aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCF0aGVtZS0+aXNFbmFibGVk
KG9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKG9iamVjdCkpCisgICAgICAgIHJl
dHVybiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7CisgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQob2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7CisgICAgaWYgKHRoZW1lLT5p
c0hvdmVyZWQob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdIVDsKKyAg
ICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKK30KKworc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6
ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrV2lk
Z2V0KiB3aWRnZXQpCit7CisgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCisgICAgaWYgKCFzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKKyAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxM
KTsKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKFJl
bmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQpCit7
CisgICAgLy8gV2UgZG8gbm90IGNhbGwgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZSBoZXJl
LCBiZWNhdXNlIHNvbWUgdGhlbWVzIGJlZ2luIGEgc2VyaWVzIG9mCisgICAgLy8gYW5pbWF0aW9u
IGZyYW1lcyBpbiBhICJ0b2dnbGVkIiBzaWduYWwgaGFuZGxlci4gVGhpcyBwdXRzIHNvbWUgY2hl
Y2tib3hlcyBpbiBhIGhhbGYtd2F5CisgICAgLy8gY2hlY2tlZCBzdGF0ZS4gRXZlcnkgR1RLKyB0
aGVtZSBJIHRlc3RlZCBtZXJlbHkgbG9va3MgYXQgdGhlIHNoYWRvdyB0eXBlIChhbmQgbm90IHRo
ZQorICAgIC8vICdhY3RpdmUnIHByb3BlcnR5KSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qg
dG8gZHJhdyB0aGUgY2hlY2suCisgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHdpZGdldCwg
dGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICF0aGVtZS0+aXNSZWFkT25seUNvbnRy
b2wocmVuZGVyT2JqZWN0KSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwg
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisK
KyAgICBib29sIGluZGV0ZXJtaW5hdGUgPSB0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRlck9i
amVjdCk7CisgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2luY29uc2lzdGVudChHVEtfVE9HR0xF
X0JVVFRPTih3aWRnZXQpLCBpbmRldGVybWluYXRlKTsKKworICAgIEd0a1NoYWRvd1R5cGUgc2hh
ZG93VHlwZSA9IEdUS19TSEFET1dfT1VUOworICAgIGlmIChpbmRldGVybWluYXRlKSAvLyBUaGlz
IG9yaWdpbmF0ZXMgZnJvbSB0aGUgTW96aWxsYSBjb2RlLgorICAgICAgICBzaGFkb3dUeXBlID0g
R1RLX1NIQURPV19FVENIRURfSU47CisgICAgZWxzZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChyZW5k
ZXJPYmplY3QpKQorICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19JTjsKKworICAgIFdp
ZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwor
ICAgIEludFJlY3QgYnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgR3Rr
U3RhdGVUeXBlIHRvZ2dsZVN0YXRlID0gZ2V0R3RrU3RhdGVUeXBlKHRoZW1lLCByZW5kZXJPYmpl
Y3QpOworICAgIGNvbnN0IGNoYXIqIGRldGFpbCA9IDA7CisgICAgaWYgKEdUS19JU19SQURJT19C
VVRUT04od2lkZ2V0KSkgeworICAgICAgICBkZXRhaWwgPSAicmFkaW9idXR0b24iOworICAgICAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50T3B0aW9uKGJ1dHRvblJlY3QsIHdpZGdldCwgdG9nZ2xl
U3RhdGUsIHNoYWRvd1R5cGUsIGRldGFpbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGV0YWls
ID0gImNoZWNrYnV0dG9uIjsKKyAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludENoZWNrKGJ1
dHRvblJlY3QsIHdpZGdldCwgdG9nZ2xlU3RhdGUsIHNoYWRvd1R5cGUsIGRldGFpbCk7CisgICAg
fQorCisgICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBJ
bnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKKyAgICAgICAgYWRqdXN0UmVjdEZvckZvY3Vz
KHdpZGdldCwgZm9jdXNSZWN0LCB0cnVlKTsKKyAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWlu
dEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgZGV0YWlsKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Cit7CisgICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0
b24oKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBwYWludFRvZ2dsZSh0aGlzLCByZW5kZXJPYmplY3QsIGluZm8sIHJlY3Qs
IGd0a0NoZWNrQnV0dG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBz
ZXRUb2dnbGVTaXplKHRoaXMsIHN0eWxlLCBndGtSYWRpb0J1dHRvbigpKTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBhaW50VG9n
Z2xlKHRoaXMsIHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3RrUmFkaW9CdXR0b24oKSk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBzZXRXaWRnZXRIYXNGb2N1cyhHdGtX
aWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gaGFzRm9jdXMpCit7CisgICAgZ19vYmplY3Rfc2V0KHdp
ZGdldCwgImhhcy1mb2N1cyIsIGhhc0ZvY3VzLCBOVUxMKTsKKworICAgIC8vIFRoZXNlIGZ1bmN0
aW9ucyBhcmUgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIsIHlldCB0aGVtZSBlbmdpbmVzIHN0aWxs
IGxvb2sKKyAgICAvLyBhdCB0aGVzZSBmbGFncyB3aGVuIGRldGVybWluaW5nIGlmIGEgd2lkZ2V0
IGhhcyBmb2N1cywgc28gd2UgbXVzdCB1c2UgdGhlbS4KKyAgICBpZiAoaGFzRm9jdXMpCisgICAg
ICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7CisgICAgZWxz
ZQorICAgICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0J1dHRvbigpOworICAgIEludFJlY3Qg
YnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgSW50UmVjdCBmb2N1c1Jl
Y3QoYnV0dG9uUmVjdCk7CisKKyAgICBHdGtTdGF0ZVR5cGUgc3RhdGUgPSBnZXRHdGtTdGF0ZVR5
cGUodGhpcywgb2JqZWN0KTsKKyAgICBndGtfd2lkZ2V0X3NldF9zdGF0ZSh3aWRnZXQsIHN0YXRl
KTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9u
KG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKworICAgIGlmIChpc0ZvY3VzZWQob2Jq
ZWN0KSkgeworICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIFRSVUUpOworCisgICAg
ICAgIGdib29sZWFuIGludGVyaW9yRm9jdXMgPSAwLCBmb2N1c1dpZHRoID0gMCwgZm9jdXNQYWRk
aW5nID0gMDsKKyAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQ
YWRkaW5nLCBOVUxMKTsKKyAgICAgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGV4dGVyaW9yIGZvY3Vz
LCB3ZSBzaHJpbmsgdGhlIGJ1dHRvbiByZWN0IGRvd24gYmVmb3JlCisgICAgICAgIC8vIGRyYXdp
bmcuIElmIHdlIGFyZSB1c2luZyBpbnRlcmlvciBmb2N1cyB3ZSBzaHJpbmsgdGhlIGZvY3VzIHJl
Y3QuIFRoaXMKKyAgICAgICAgLy8gYXBwcm9hY2ggb3JpZ2luYXRlcyBmcm9tIHRoZSBNb3ppbGxh
IHRoZW1lIGRyYXdpbmcgY29kZSAoZ3RrMmRyYXdpbmcuYykuCisgICAgICAgIGlmIChpbnRlcmlv
ckZvY3VzKSB7CisgICAgICAgICAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpOworICAgICAgICAgICAgZm9jdXNSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRo
aWNrbmVzcyAtIGZvY3VzUGFkZGluZyk7CisgICAgICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZVko
LXN0eWxlLT55dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoLWZvY3VzV2lkdGggLSBmb2N1c1BhZGRpbmcp
OworICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlWSgtZm9jdXNQYWRkaW5nIC0gZm9jdXNQ
YWRkaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQg
d2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOworICAgIEd0a1NoYWRvd1R5cGUgc2hh
ZG93VHlwZSA9IHN0YXRlID09IEdUS19TVEFURV9BQ1RJVkUgPyBHVEtfU0hBRE9XX0lOIDogR1RL
X1NIQURPV19PVVQ7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChidXR0b25SZWN0LCB3
aWRnZXQsIHN0YXRlLCBzaGFkb3dUeXBlLCAiYnV0dG9uIik7CisgICAgaWYgKGlzRm9jdXNlZChv
YmplY3QpKQorICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0LCB3
aWRnZXQsIHN0YXRlLCAiYnV0dG9uIik7CisKKyAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQs
IEZBTFNFKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6Z2V0
Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiBzZXBhcmF0
b3IgPSBndGtDb21ib0JveFNlcGFyYXRvcigpOworICAgIGlmICghc2VwYXJhdG9yKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGdib29sZWFuIGhhc1dpZGVTZXBhcmF0b3JzID0gRkFMU0U7Cisg
ICAgZ2ludCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoc2Vw
YXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmaGFz
V2lkZVNlcGFyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFyYXRvci13aWR0
aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAg
ICBpZiAoaGFzV2lkZVNlcGFyYXRvcnMpCisgICAgICAgIHJldHVybiBzZXBhcmF0b3JXaWR0aDsK
KyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUoc2VwYXJhdG9yKS0+eHRoaWNrbmVzczsK
K30KKworaW50IFJlbmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Cit7CisgICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVyc2lu
ZyB0aGUgRFBJIGNvbnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKKyAgICAvLyBHVEsrIHJlbmRlcmlu
ZyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLgorICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNpemUo
KSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKK30KKworc3RhdGlj
IHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBidXR0b24sIGludCYgbGVmdCwg
aW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQoreworICAgIEd0a1N0eWxlKiBzdHls
ZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGJ1dHRvbik7CisgICAgaW50IG91dGVyQm9yZGVyID0g
Z3RrX2NvbnRhaW5lcl9nZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoYnV0dG9uKSk7Cisg
ICAgc3RhdGljIEd0a0JvcmRlciBkZWZhdWx0SW5uZXJCb3JkZXIgPSB7MSwgMSwgMSwgMX07Cisg
ICAgR3RrQm9yZGVyKiBpbm5lckJvcmRlcjsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChidXR0
b24sICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXIsIE5VTEwpOworICAgIGlmICghaW5uZXJC
b3JkZXIpCisgICAgICAgIGlubmVyQm9yZGVyID0gJmRlZmF1bHRJbm5lckJvcmRlcjsKKworICAg
IGxlZnQgPSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT5sZWZ0ICsgc3R5bGUtPnh0aGlja25l
c3M7CisgICAgcmlnaHQgPSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT5yaWdodCArIHN0eWxl
LT54dGhpY2tuZXNzOworICAgIHRvcCA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3JkZXItPnRvcCAr
IHN0eWxlLT55dGhpY2tuZXNzOworICAgIGJvdHRvbSA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3Jk
ZXItPmJvdHRvbSArIHN0eWxlLT55dGhpY2tuZXNzOworCisgICAgaWYgKGlubmVyQm9yZGVyICE9
ICZkZWZhdWx0SW5uZXJCb3JkZXIpCisgICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJvcmRl
cik7Cit9CisKKwordm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRl
clN0eWxlKiBzdHlsZSwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0
b20pIGNvbnN0Cit7CisgICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXdu
IHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCisgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBw
YWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgorICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEEgY29tYm8gYm94IGJ1dHRvbiBpcyBhIGJ1dHRvbiB3aXRoIHdpZGdldHMgcGFja2VkIGludG8g
aXQuCisgICAgR3RrU3R5bGUqIGJ1dHRvbldpZGdldFN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5
bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7CisgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29t
Ym9Cb3hCdXR0b24oKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKworICAgIC8vIEFkZCB4
dGhpY2tuZXNzIGFtb3VudCBvZiBwYWRkaW5nIGZvciBlYWNoIHNpZGUgb2YgdGhlIHNlcGFyYXRv
ci4gVGhpcyBlbnN1cmVzCisgICAgLy8gdGhhdCB0aGUgdGV4dCBkb2VzIG5vdCBidW1wIHVwIGFn
YWluc3QgdGhlIHNlcGFyYXRvci4KKyAgICBpbnQgYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGggPSBj
b21ib0JveEFycm93U2l6ZShzdHlsZSkgKworICAgICAgICBnZXRDb21ib0JveFNlcGFyYXRvcldp
ZHRoKCkgKyAoMyAqIGJ1dHRvbldpZGdldFN0eWxlLT54dGhpY2tuZXNzKTsKKworICAgIGlmIChz
dHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICBsZWZ0ICs9IGFycm93QW5kU2VwZXJh
dG9yTGVuZ3RoOworICAgIGVsc2UKKyAgICAgICAgcmlnaHQgKz0gYXJyb3dBbmRTZXBlcmF0b3JM
ZW5ndGg7Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAs
IHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIGxlZnQ7Cit9CisKK2ludCBSZW5k
ZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9
IDA7CisgICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOworICAgIHJldHVybiByaWdodDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cElu
dGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaW50IGxl
ZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CisgICAgZ2V0Q29tYm9Cb3hQ
YWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIHJldHVybiB0b3A7
Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmln
aHQgPSAwLCBib3R0b20gPSAwOworICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwg
dG9wLCByaWdodCwgYm90dG9tKTsKKyAgICByZXR1cm4gYm90dG9tOworfQorCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50QnV0dG9u
KG9iamVjdCwgaW5mbywgcmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTWVu
dSBsaXN0IGJ1dHRvbiBwYWludGluZyBzdHJhdGVneS4KKyAgICAvLyBGb3IgYnV0dG9ucyB3aXRo
IGFwcGVhcnMtYXMtbGlzdCBzZXQgdG8gZmFsc2UgKGhhdmluZyBhIHNlcGFyYXRvcik6CisgICAg
Ly8gfCBsZWZ0IGJvcmRlciB8IEJ1dHRvbiB0ZXh0IHwgeHRoaWNrbmVzcyB8IHZzZXBhcmF0b3Ig
fCB4dGhpY2tuZXNzIHwgYXJyb3cgfCB4dGhpY2tuZXNzIHwgcmlnaHQgYm9yZGVyIHwKKyAgICAv
LyBGb3IgYnV0dG9ucyB3aXRoIGFwcGVhcnMtYXMtbGlzdCBzZXQgdG8gdHJ1ZSAobm90IGhhdmlu
ZyBhIHNlcGFyYXRvcik6CisgICAgLy8gfCBsZWZ0IGJvcmRlciB8IEJ1dHRvbiB0ZXh0IHwgYXJy
b3cgfCB4dGhpY2tuZXNzIHwgcmlnaHQgYm9yZGVyIHwKKworICAgIGludCBsZWZ0Qm9yZGVyID0g
MCwgcmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3JkZXIgPSAwOworICAg
IGdldEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnRCb3JkZXIsIHRv
cEJvcmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7CisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gb2JqZWN0LT5zdHlsZSgpOworICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFycm93
U2l6ZShzdHlsZSk7CisgICAgR3RrU3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9nZXRf
c3R5bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7CisKKyAgICBJbnRSZWN0IGFycm93UmVjdCgwLCAo
cmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7Cisg
ICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGFycm93UmVjdC5zZXRY
KGxlZnRCb3JkZXIgKyBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyk7CisgICAgZWxzZQorICAgICAg
ICBhcnJvd1JlY3Quc2V0WChyZWN0LndpZHRoKCkgLSByaWdodEJvcmRlciAtIGJ1dHRvblN0eWxl
LT54dGhpY2tuZXNzIC0gYXJyb3dTaXplKTsKKyAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUg
PSBpc1ByZXNzZWQob2JqZWN0KSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKwor
ICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJl
Y3QpOworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhpcywg
b2JqZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCBndGtD
b21ib0JveEFycm93KCksIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9XX0RPV04sICJh
cnJvdyIpOworCisgICAgLy8gU29tZSBjb21ibyBib3hlcyBkbyBub3QgaGF2ZSBhIHNlcGFyYXRv
ci4KKyAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2VwYXJhdG9yKCk7Cisg
ICAgaWYgKCFzZXBhcmF0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdh
bnQgdG8gZGVjcmVhc2UgdGhlIGhlaWdodCBvZiB0aGUgc2VwYXJhdG9yIGJhc2VkIG9uIHRoZSBm
b2N1cyBwYWRkaW5nIG9mIHRoZSBidXR0b24uCisgICAgZ2ludCBmb2N1c1BhZGRpbmcgPSAwLCBm
b2N1c1dpZHRoID0gMDsgCisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoZ3RrQ29tYm9Cb3hCdXR0
b24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1
c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3Vz
UGFkZGluZywgTlVMTCk7CisgICAgdG9wQm9yZGVyICs9IGZvY3VzUGFkZGluZyArIGZvY3VzV2lk
dGg7CisgICAgYm90dG9tQm9yZGVyICs9IGZvY3VzUGFkZGluZyArIGZvY3VzV2lkdGg7CisgICAg
aW50IHNlcGFyYXRvcldpZHRoID0gZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpOworICAgIElu
dFJlY3Qgc2VwYXJhdG9yUmVjdCgwLCB0b3BCb3JkZXIsIHNlcGFyYXRvcldpZHRoLCByZWN0Lmhl
aWdodCgpIC0gdG9wQm9yZGVyIC0gYm90dG9tQm9yZGVyKTsKKyAgICBpZiAoc3R5bGUtPmRpcmVj
dGlvbigpID09IFJUTCkKKyAgICAgICAgc2VwYXJhdG9yUmVjdC5zZXRYKGFycm93UmVjdC54KCkg
KyBhcnJvd1JlY3Qud2lkdGgoKSArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzICsgc2VwYXJhdG9y
V2lkdGgpOworICAgIGVsc2UKKyAgICAgICAgc2VwYXJhdG9yUmVjdC5zZXRYKGFycm93UmVjdC54
KCkgLSBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyAtIHNlcGFyYXRvcldpZHRoKTsKKworICAgIGdi
b29sZWFuIGhhc1dpZGVTZXBhcmF0b3JzID0gRkFMU0U7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9n
ZXQoc2VwYXJhdG9yLCAid2lkZS1zZXBhcmF0b3JzIiwgJmhhc1dpZGVTZXBhcmF0b3JzLCBOVUxM
KTsKKyAgICBpZiAoaGFzV2lkZVNlcGFyYXRvcnMpCisgICAgICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRCb3goc2VwYXJhdG9yUmVjdCwgc2VwYXJhdG9yLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtf
U0hBRE9XX0VUQ0hFRF9PVVQsICJ2c2VwYXJhdG9yIik7CisgICAgZWxzZQorICAgICAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50VkxpbmUoc2VwYXJhdG9yUmVjdCwgc2VwYXJhdG9yLCBHVEtfU1RB
VEVfTk9STUFMLCAidnNlcGFyYXRvciIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKworICAgIGJvb2wgZW5hYmxlZCA9IGlzRW5h
YmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpOwor
ICAgIEd0a1N0YXRlVHlwZSBiYWNrZ3JvdW5kU3RhdGUgPSBlbmFibGVkID8gR1RLX1NUQVRFX05P
Uk1BTCA6IEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRp
dmUod2lkZ2V0LCBlbmFibGVkKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0
LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsK
KyAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKTsK
KworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQs
IHJlY3QpOworICAgIEludFJlY3QgdGV4dEZpZWxkUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUo
KSk7CisKKyAgICAvLyBUaGUgZW50cnkgYmFja2dyb3VuZCBpcyBvbmx5IHBhaW50ZWQgb3ZlciB0
aGUgaW50ZXJpb3IgcGFydCBvZiB0aGUgR1RLKyBlbnRyeSwgbm90CisgICAgLy8gdGhlIGVudGly
ZSBmcmFtZS4gVGhpcyBoYXBwZW5zIGluIHRoZSBNb3ppbGxhIHRoZW1lIGRyYXdpbmcgY29kZSBh
cyB3ZWxsLgorICAgIEludFJlY3QgaW50ZXJpb3JSZWN0KHRleHRGaWVsZFJlY3QpOworICAgIEd0
a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgaW50ZXJp
b3JSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVzcyk7CisgICAgaW50ZXJpb3JSZWN0Lmlu
ZmxhdGVZKC1zdHlsZS0+eXRoaWNrbmVzcyk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEZs
YXRCb3goaW50ZXJpb3JSZWN0LCB3aWRnZXQsIGJhY2tncm91bmRTdGF0ZSwgR1RLX1NIQURPV19O
T05FLCAiZW50cnlfYmciKTsKKworICAgIC8vIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGRyYXdp
bmcgdGhlIGFjdHVhbCBmcmFtZS4KKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2hhZG93KHRl
eHRGaWVsZFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgImVu
dHJ5Iik7CisKKyAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOworICAgIGdpbnQgZm9jdXNXaWR0
aDsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgIE5VTEwpOworICAgIGlm
IChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSAmJiAhaW50ZXJpb3JGb2N1cykgeworICAgICAgICAv
LyBXaGVuIEdUSysgcGFpbnRzIGEgdGV4dCBlbnRyeSB3aXRoIGZvY3VzLCBpdCBzaHJpbmtzIHRo
ZSBzaXplIG9mIHRoZSBmcmFtZSBhcmVhIGJ5IHRoZQorICAgICAgICAvLyBmb2N1cyB3aWR0aCBh
bmQgcGFpbnRzIG92ZXIgdGhlIHByZXZpb3VzbHkgdW5mb2N1c2VkIHRleHQgZW50cnkuIFdlIG5l
ZWQgdG8gZW11bGF0ZSB0aGF0CisgICAgICAgIC8vIGJ5IGRyYXdpbmcgYm90aCB0aGUgdW5mb2N1
c2VkIGZyYW1lIGFib3ZlIGFuZCB0aGUgZm9jdXNlZCBmcmFtZSBoZXJlLgorICAgICAgICBJbnRS
ZWN0IHNoYWRvd1JlY3QodGV4dEZpZWxkUmVjdCk7CisgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0
ZSgtZm9jdXNXaWR0aCk7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTaGFkb3coc2hh
ZG93UmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50cnki
KTsKKworICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXModGV4dEZpZWxkUmVjdCwg
d2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCAiZW50cnkiKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvYmplY3QtPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKTsKKyAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCB8
fCBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVy
UGFydCk7CisKKyAgICAvLyBXZSBzaHJpbmsgdGhlIHRyb3VnaCByZWN0IHNsaWdodGx5IHRvIG1h
a2Ugcm9vbSBmb3IgdGhlIGZvY3VzIGluZGljYXRvci4KKyAgICBJbnRSZWN0IHRyb3VnaFJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOyAvLyBUaGlzIGlzIHJlbGF0aXZlIHRvIHJlY3QuCisg
ICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOworICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250
YWxQYXJ0KSB7CisgICAgICAgIHdpZGdldCA9IGd0a0hTY2FsZSgpOworICAgICAgICB0cm91Z2hS
ZWN0LmluZmxhdGVYKC1ndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT54dGhpY2tuZXNzKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB3aWRnZXQgPSBndGtWU2NhbGUoKTsKKyAgICAgICAgdHJv
dWdoUmVjdC5pbmZsYXRlWSgtZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+eXRoaWNrbmVz
cyk7CisgICAgfQorICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHRE
aXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgd2lk
Z2V0Q29udGV4dC5ndGtQYWludEJveCh0cm91Z2hSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9BQ1RJ
VkUsIEdUS19TSEFET1dfT1VULCAidHJvdWdoIik7CisgICAgaWYgKGlzRm9jdXNlZChvYmplY3Qp
KQorICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoSW50UmVjdChJbnRQb2ludCgp
LCByZWN0LnNpemUoKSksIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCksICJ0
cm91Z2giKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29udHJvbFBhcnQg
cGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIEFTU0VSVChwYXJ0ID09
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKKworICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gMDsKKyAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAwOworICAgIEd0a09y
aWVudGF0aW9uIG9yaWVudGF0aW9uOworICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQpIHsKKyAgICAgICAgd2lkZ2V0ID0gZ3RrSFNjYWxlKCk7CisgICAgICAgIGRldGFp
bCA9ICJoc2NhbGUiOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9IT1JJ
Wk9OVEFMOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpZGdldCA9IGd0a1ZTY2FsZSgpOworICAg
ICAgICBkZXRhaWwgPSAidnNjYWxlIjsKKyAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5U
QVRJT05fVkVSVElDQUw7CisgICAgfQorICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRn
ZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisg
ICAgLy8gT25seSBzb21lIHRoZW1lcyBoYXZlIHNsaWRlciB0aHVtYnMgcmVzcG9uZCB0byBjbGlj
a3MgYW5kIHNvbWUgZG9uJ3QuIFRoaXMgaW5mb3JtYXRpb24gaXMKKyAgICAvLyBnYXRoZXJlZCB2
aWEgdGhlICdhY3RpdmF0ZS1zbGlkZXInIHByb3BlcnR5LCBidXQgaXQncyBkZXByZWNhdGVkIGlu
IEdUSysgMi4yMiBhbmQgcmVtb3ZlZCBpbgorICAgIC8vIEdUSysgMy54LiBUaGUgZHJhd2JhY2sg
b2Ygbm90IGhvbm9yaW5nIGl0IGlzIHRoYXQgc2xpZGVyIHRodW1icyBjaGFuZ2UgY29sb3Igd2hl
biB5b3UgY2xpY2sKKyAgICAvLyBvbiB0aGVtLiAKKyAgICBJbnRSZWN0IHRodW1iUmVjdChJbnRQ
b2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRD
b250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNs
aWRlcih0aHVtYlJlY3QsIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCksIEdU
S19TSEFET1dfT1VULCBkZXRhaWwsIG9yaWVudGF0aW9uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHls
ZS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBh
cnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBh
cnQgPyBndGtIU2NhbGUoKSA6IGd0a1ZTY2FsZSgpOworICAgIGludCBsZW5ndGggPSAwLCB3aWR0
aCA9IDA7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICJzbGlkZXJfbGVuZ3RoIiwgJmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAic2xpZGVyX3dpZHRoIiwgJndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworCisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAg
ICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9
PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZp
eGVkKSk7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK2Jvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gZ3RrUHJvZ3Jlc3NCYXIoKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kaXJl
Y3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChw
YWludEluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCBmdWxsUHJvZ3Jlc3NCYXJSZWN0
KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94
KGZ1bGxQcm9ncmVzc0JhclJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURP
V19JTiwgInRyb3VnaCIpOworCisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KTsKKyAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsUHJvZ3Jlc3NCYXJS
ZWN0KTsKKyAgICBwcm9ncmVzc1JlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzKTsKKyAg
ICBwcm9ncmVzc1JlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tuZXNzKTsKKyAgICBwcm9ncmVz
c1JlY3QgPSBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KHJlbmRlck9iamVj
dCwgcHJvZ3Jlc3NSZWN0KTsKKworICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChwcm9ncmVzc1JlY3QsIHdpZGdldCwgR1RL
X1NUQVRFX1BSRUxJR0hULCBHVEtfU0hBRE9XX09VVCwgImJhciIpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAoreworICAgIEd0a1N0eWxlKiBndGtTdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGd0
a1NwaW5CdXR0b24oKSk7CisgICAgY29uc3QgUGFuZ29Gb250RGVzY3JpcHRpb24qIGZvbnREZXNj
cmlwdGlvbiA9IGd0a1N0eWxlLT5mb250X2Rlc2M7CisgICAgZ2ludCBmb250U2l6ZSA9IHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0aW9uKTsKKworICAgIC8vIEZv
cmNlIGFuIG9kZCBhcnJvdyBzaXplIGhlcmUuIEdUSysgMy54IGZvcmNlcyBldmVuIGluIHRoaXMg
Y2FzZSwgYnV0CisgICAgLy8gTm9kb2thLWJhc2VkIHRoZW1lcyBsb29rIGluY29ycmVjdCB3aXRo
IGFuIGV2ZW4gYXJyb3cgc2l6ZS4KKyAgICBpbnQgd2lkdGggPSBtYXgoUEFOR09fUElYRUxTKGZv
bnRTaXplKSwgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSk7CisgICAgd2lkdGggKz0gLSgod2lkdGgg
JSAyKSAtIDEpICsgZ3RrU3R5bGUtPnh0aGlja25lc3M7CisKKyAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgod2lk
dGgsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0
dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBXZSBleHBhbmQgdGhlIHBhaW50ZWQg
YXJlYSBieSAyIHBpeGVscyBvbiB0aGUgdG9wIGFuZCBib3R0b20gYW5kIDIgcGl4ZWxzIG9uIHRo
ZSByaWdodC4gVGhpcworICAgIC8vIGlzIGJlY2F1c2UgR1RLKyB0aGVtZXMgd2FudCB0byBkcmF3
IG92ZXIgdGhlIHRleHQgYm94IGJvcmRlcnMsIGJ1dCBXZWJDb3JlIHJlbmRlcnMgdGhlIGlubmVy
CisgICAgLy8gc3BpbiBidXR0b24gaW5zaWRlIHRoZSB0ZXh0IGJveC4KKyAgICBJbnRSZWN0IGV4
cGFuZGVkUmVjdChyZWN0KTsKKyAgICBleHBhbmRlZFJlY3QuaW5mbGF0ZVkoMik7CisgICAgZXhw
YW5kZWRSZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSArIDIpOworCisgICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCBleHBhbmRlZFJlY3Qp
OworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrU3BpbkJ1dHRvbigpOworICAgIGd0a193aWRn
ZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgSW50UmVjdCBmdWxsU3BpbkJ1dHRvblJlY3Qo
SW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQ
YWludEJveChmdWxsU3BpbkJ1dHRvblJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgR1RL
X1NIQURPV19JTiwgInNwaW5idXR0b24iKTsKKworICAgIGJvb2wgdXBQcmVzc2VkID0gaXNTcGlu
VXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpOworICAgIGJvb2wgdXBIb3ZlcmVkID0g
aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpOworICAgIGJvb2wgY29udHJv
bEFjdGl2ZSA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5Q29udHJvbChy
ZW5kZXJPYmplY3QpOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IHVwUHJlc3NlZCA/
IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKworICAgIEd0a1N0YXRlVHlwZSBzdGF0
ZVR5cGUgPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7CisgICAgaWYgKGNvbnRyb2xBY3RpdmUpIHsK
KyAgICAgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpICYmIHVwUHJlc3NlZCkKKyAgICAg
ICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgIGVsc2UgaWYgKGlz
SG92ZXJlZChyZW5kZXJPYmplY3QpICYmIHVwSG92ZXJlZCkKKyAgICAgICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9QUkVMSUdIVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGVU
eXBlID0gR1RLX1NUQVRFX05PUk1BTDsKKyAgICB9CisgICAgSW50UmVjdCB0b3BSZWN0KEludFBv
aW50KCksIGV4cGFuZGVkUmVjdC5zaXplKCkpOworICAgIHRvcFJlY3Quc2V0SGVpZ2h0KGV4cGFu
ZGVkUmVjdC5oZWlnaHQoKSAvIDIpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3godG9w
UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX3VwIik7CisK
KyAgICAvLyBUaGUgYXJyb3cgc2l6ZS9wb3NpdGlvbiBjYWxjdWxhdGlvbiBoZXJlIGlzIGJhc2Vk
IG9uIHRoZSBhcmJpdHJhcnkgZ3ltbmFzdGljcyB0aGF0IGhhcHBlbgorICAgIC8vIGluIGd0a3Nw
aW5idXR0b24uYy4gSXQgaXNuJ3QgcHJldHR5IHRoZXJlIGFuZCBpdCBpc24ndCBwcmV0dHkgaGVy
ZS4gVGhpcyBtYW5hZ2VzIHRvIG1ha2UKKyAgICAvLyB0aGUgYnV0dG9uIGxvb2sgbmF0aXZlIGZv
ciBtYW55IHRoZW1lcyB0aG91Z2guCisgICAgSW50UmVjdCBhcnJvd1JlY3Q7CisgICAgaW50IGFy
cm93U2l6ZSA9IChleHBhbmRlZFJlY3Qud2lkdGgoKSAtIDMpIC8gMjsKKyAgICBhcnJvd1NpemUg
LT0gKGFycm93U2l6ZSAlIDIpIC0gMTsgLy8gRm9yY2Ugb2RkLgorICAgIGFycm93UmVjdC5zZXRX
aWR0aChhcnJvd1NpemUpOworICAgIGFycm93UmVjdC5zZXRIZWlnaHQoYXJyb3dTaXplKTsKKyAg
ICBhcnJvd1JlY3QubW92ZSgoZXhwYW5kZWRSZWN0LndpZHRoKCkgLSBhcnJvd1JlY3Qud2lkdGgo
KSkgLyAyLAorICAgICAgICAgICAgICAgICAgICh0b3BSZWN0LmhlaWdodCgpIC0gYXJyb3dSZWN0
LmhlaWdodCgpKSAvIDIgKyAxKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJy
b3dSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9XX1VQLCAic3Bp
bmJ1dHRvbiIpOworCisgICAgc2hhZG93VHlwZSA9IGlzUHJlc3NlZChyZW5kZXJPYmplY3QpICYm
ICF1cFByZXNzZWQgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7CisgICAgaWYgKGNv
bnRyb2xBY3RpdmUpIHsKKyAgICAgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpICYmICF1
cFByZXNzZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfQUNUSVZFOworICAg
ICAgICBlbHNlIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAmJiAhdXBIb3ZlcmVkKQorICAg
ICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOworICAgIH0KKyAgICBJbnRS
ZWN0IGJvdHRvbVJlY3QoSW50UG9pbnQoMCwgZXhwYW5kZWRSZWN0LmhlaWdodCgpIC8gMiksIGV4
cGFuZGVkUmVjdC5zaXplKCkpOworICAgIGJvdHRvbVJlY3Quc2V0SGVpZ2h0KGV4cGFuZGVkUmVj
dC5oZWlnaHQoKSAtIGJvdHRvbVJlY3QueSgpKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50
Qm94KGJvdHRvbVJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAic3BpbmJ1dHRv
bl9kb3duIik7CisKKyAgICBhcnJvd1JlY3Quc2V0WShhcnJvd1JlY3QueSgpICsgYm90dG9tUmVj
dC55KCkgLSAxKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCB3
aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9XX0RPV04sICJzcGluYnV0dG9u
Iik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9j
a0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIGljb25OYW1l
LCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sKKyAgICBBU1NF
UlQod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DT05UQUlORVIgfHwgd2lkZ2V0VHlwZSA9PSBHVEtf
VFlQRV9FTlRSWSk7CisKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7CisgICAg
R3RrV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NPTlRBSU5FUiA/IEdU
S19XSURHRVQodGhlbWUtPmd0a0NvbnRhaW5lcigpKSA6IHRoZW1lLT5ndGtFbnRyeSgpOworCisg
ICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKKyAgICBH
dGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2xvb2t1cF9pY29uX3NldChzdHlsZSwgaWNv
bk5hbWUpOworICAgIHJldHVybiBhZG9wdEdSZWYoZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29uKGlj
b25TZXQsIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrU3RhdGVU
eXBlPihzdGF0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSwgMCwgMCkpOworfQorCitHUmVm
UHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdp
ZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIgKmZhbGxi
YWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNp
emUpCit7CisgICAgcmV0dXJuIGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUod2lkZ2V0VHlwZSwg
ZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBkaXJlY3Rpb24sIHN0YXRlLCBpY29uU2l6ZSk7Cit9CisK
K0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOworICAg
IHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT5iYXNlW0dUS19TVEFURV9TRUxF
Q1RFRF07Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0
a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2Vb
R1RLX1NUQVRFX0FDVElWRV07Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3
aWRnZXQgPSBndGtFbnRyeSgpOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRn
ZXQpLT50ZXh0W0dUS19TVEFURV9TRUxFQ1RFRF07Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3Rr
OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX0FDVElWRV07Cit9CisKK0NvbG9yIFJl
bmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJu
IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmll
dygpOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT5iYXNlW0dUS19T
VEFURV9BQ1RJVkVdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQg
PSBndGtUcmVlVmlldygpOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
LT50ZXh0W0dUS19TVEFURV9TRUxFQ1RFRF07Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpp
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9n
ZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXTsKK30KKworQ29sb3IgUmVu
ZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAoreworICAgIHN3
aXRjaCAoY3NzVmFsdWVJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OgorICAgICAg
ICByZXR1cm4gQ29sb3IoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQnV0dG9uKCkpLT5mZ1tHVEtf
U1RBVEVfTk9STUFMXSk7CisgICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICBy
ZXR1cm4gQ29sb3IoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrRW50cnkoKSktPmZnW0dUS19TVEFU
RV9OT1JNQUxdKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5
c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZ3RrU3R5bGVT
ZXRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3R5bGUqIHByZXZpb3VzLCBSZW5kZXJU
aGVtZSogcmVuZGVyVGhlbWUpCit7CisgICAgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGZ1bmN0
aW9uIGRvZXNuJ3QgZ2V0IGNhbGxlZCBtYW55IHRpbWVzIGZvciBhIHNpbmdsZSBHVEsrIHN0eWxl
IGNoYW5nZSBzaWduYWwuCisgICAgcmVuZGVyVGhlbWUtPnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQorewor
ICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lOVF9UT19QT0lOVEVSKFRS
VUUpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRh
aW5lcihHdGtXaWRnZXQqIHdpZGdldCwgR3RrV2lkZ2V0KiB3aW5kb3cpIGNvbnN0Cit7CisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3aWRnZXQpOworICAgIHNl
dHVwV2lkZ2V0KHdpZGdldCk7CisKKyAgICAvLyBGSVhNRTogUGVyaGFwcyB0aGlzIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBmb3IgdGhlIGNvbnRhaW5pbmcgd2luZG93IG9yIHBhcmVudCBjb250YWlu
ZXIuCisgICAgZ19zaWduYWxfY29ubmVjdCh3aWRnZXQsICJzdHlsZS1zZXQiLCBHX0NBTExCQUNL
KGd0a1N0eWxlU2V0Q2FsbGJhY2spLCBjb25zdF9jYXN0PFJlbmRlclRoZW1lR3RrKj4odGhpcykp
OworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb250YWluZXIoKSBjb25zdAor
eworICAgIGlmIChtX2d0a0NvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIG1fZ3RrQ29udGFpbmVy
OworCisgICAgbV9ndGtXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsK
KyAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX2d0a1dpbmRvdywgbV9jb2xvcm1hcCk7Cisg
ICAgc2V0dXBXaWRnZXQobV9ndGtXaW5kb3cpOworICAgIGd0a193aWRnZXRfc2V0X25hbWUobV9n
dGtXaW5kb3csICJNb3ppbGxhR3RrV2lkZ2V0Iik7CisKKyAgICBtX2d0a0NvbnRhaW5lciA9IGd0
a19maXhlZF9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrQ29u
dGFpbmVyLCBtX2d0a1dpbmRvdyk7CisgICAgcmV0dXJuIG1fZ3RrQ29udGFpbmVyOworfQorCitH
dGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtCdXR0b24oKSBjb25zdAoreworICAgIGlmICht
X2d0a0J1dHRvbikKKyAgICAgICAgcmV0dXJuIG1fZ3RrQnV0dG9uOworICAgIG1fZ3RrQnV0dG9u
ID0gZ3RrX2J1dHRvbl9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1f
Z3RrQnV0dG9uLCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrQnV0dG9uOworfQor
CitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtFbnRyeSgpIGNvbnN0Cit7CisgICAgaWYg
KG1fZ3RrRW50cnkpCisgICAgICAgIHJldHVybiBtX2d0a0VudHJ5OworICAgIG1fZ3RrRW50cnkg
PSBndGtfZW50cnlfbmV3KCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0
a0VudHJ5LCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrRW50cnk7Cit9CisKK0d0
a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1RyZWVWaWV3KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9ndGtUcmVlVmlldykKKyAgICAgICAgcmV0dXJuIG1fZ3RrVHJlZVZpZXc7CisgICAgbV9ndGtU
cmVlVmlldyA9IGd0a190cmVlX3ZpZXdfbmV3KCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0Nv
bnRhaW5lcihtX2d0a1RyZWVWaWV3LCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3Rr
VHJlZVZpZXc7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1ZTY2FsZSgpIGNv
bnN0Cit7CisgICAgaWYgKG1fZ3RrVlNjYWxlKQorICAgICAgICByZXR1cm4gbV9ndGtWU2NhbGU7
CisgICAgbV9ndGtWU2NhbGUgPSBndGtfdnNjYWxlX25ldygwKTsKKyAgICBzZXR1cFdpZGdldEFu
ZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjYWxlLCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJu
IG1fZ3RrVlNjYWxlOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtIU2NhbGUo
KSBjb25zdAoreworICAgIGlmIChtX2d0a0hTY2FsZSkKKyAgICAgICAgcmV0dXJuIG1fZ3RrSFNj
YWxlOworICAgIG1fZ3RrSFNjYWxlID0gZ3RrX2hzY2FsZV9uZXcoMCk7CisgICAgc2V0dXBXaWRn
ZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0hTY2FsZSwgZ3RrQ29udGFpbmVyKCkpOworICAgIHJl
dHVybiBtX2d0a0hTY2FsZTsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrUmFk
aW9CdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a1JhZGlvQnV0dG9uKQorICAgICAgICBy
ZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKKyAgICBtX2d0a1JhZGlvQnV0dG9uID0gZ3RrX3JhZGlv
X2J1dHRvbl9uZXcoMCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a1Jh
ZGlvQnV0dG9uLCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrUmFkaW9CdXR0b247
Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NoZWNrQnV0dG9uKCkgY29uc3QK
K3sKKyAgICBpZiAobV9ndGtDaGVja0J1dHRvbikKKyAgICAgICAgcmV0dXJuIG1fZ3RrQ2hlY2tC
dXR0b247CisgICAgbV9ndGtDaGVja0J1dHRvbiA9IGd0a19jaGVja19idXR0b25fbmV3KCk7Cisg
ICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0NoZWNrQnV0dG9uLCBndGtDb250
YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrQ2hlY2tCdXR0b247Cit9CisKK0d0a1dpZGdldCog
UmVuZGVyVGhlbWVHdGs6Omd0a1Byb2dyZXNzQmFyKCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtQ
cm9ncmVzc0JhcikKKyAgICAgICAgcmV0dXJuIG1fZ3RrUHJvZ3Jlc3NCYXI7CisgICAgbV9ndGtQ
cm9ncmVzc0JhciA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7CisgICAgc2V0dXBXaWRnZXRBbmRB
ZGRUb0NvbnRhaW5lcihtX2d0a1Byb2dyZXNzQmFyLCBndGtDb250YWluZXIoKSk7CisgICAgcmV0
dXJuIG1fZ3RrUHJvZ3Jlc3NCYXI7Cit9CisKK3N0YXRpYyB2b2lkIGdldEd0a0NvbWJvQm94QnV0
dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciB0YXJnZXQpCit7CisgICAgaWYgKCFHVEtf
SVNfVE9HR0xFX0JVVFRPTih3aWRnZXQpKQorICAgICAgICByZXR1cm47CisgICAgR3RrV2lkZ2V0
Kiogd2lkZ2V0VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kio+KHRhcmdldCk7CisgICAg
KndpZGdldFRhcmdldCA9IHdpZGdldDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEd0a1dp
ZGdldCogYXJyb3c7CisgICAgR3RrV2lkZ2V0KiBzZXBhcmF0b3I7Cit9IENvbWJvQm94V2lkZ2V0
UGllY2VzOworCitzdGF0aWMgdm9pZCBnZXRHdGtDb21ib0JveFBpZWNlcyhHdGtXaWRnZXQqIHdp
ZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAoR1RLX0lTX0FSUk9XKHdpZGdldCkpIHsK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+YXJyb3cg
PSB3aWRnZXQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKEdUS19JU19TRVBBUkFU
T1Iod2lkZ2V0KSkgCisgICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0UGllY2VzKj4o
ZGF0YSktPnNlcGFyYXRvciA9IHdpZGdldDsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0
azo6Z3RrQ29tYm9Cb3goKSBjb25zdAoreworICAgIGlmIChtX2d0a0NvbWJvQm94KQorICAgICAg
ICByZXR1cm4gbV9ndGtDb21ib0JveDsKKyAgICBtX2d0a0NvbWJvQm94ID0gZ3RrX2NvbWJvX2Jv
eF9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrQ29tYm9Cb3gs
IGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtDb21ib0JveDsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZUd0azo6cmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdAoreworICAgIGd0
a0NvbWJvQm94KCk7IC8vIEVuc3VyZSB0aGF0IHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBjb21ibyBi
b3guCisKKyAgICAvLyBTb21lIHRoZW1lcyBsb29rIGF0IHdpZGdldCBhbmNlc3RyeSB0byBkZXRl
cm1pbmUgaG93IHRvIHJlbmRlciB3aWRnZXRzLCBzbworICAgIC8vIGdldCB0aGUgR3RrQnV0dG9u
IHRoYXQgaXMgdGhlIGFjdHVhbCBjaGlsZCBvZiB0aGUgY29tYm8gYm94LgorICAgIGd0a19jb250
YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIobV9ndGtDb21ib0JveCksIGdldEd0a0NvbWJvQm94
QnV0dG9uLCAmbV9ndGtDb21ib0JveEJ1dHRvbik7CisgICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hC
dXR0b24pOworICAgIHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hCdXR0b24pOworICAgIGdfb2Jq
ZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtDb21ib0JveEJ1dHRvbiksIHJlaW50
ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveEJ1dHRvbikpOworCisgICAgQ29t
Ym9Cb3hXaWRnZXRQaWVjZXMgcGllY2VzID0geyAwLCAwIH07CisgICAgR3RrV2lkZ2V0KiBidXR0
b25DaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oZ3RrQ29tYm9Cb3hCdXR0b24oKSkp
OworICAgIGlmIChHVEtfSVNfSEJPWChidXR0b25DaGlsZCkpCisgICAgICAgIGd0a19jb250YWlu
ZXJfZm9yYWxsKEdUS19DT05UQUlORVIoYnV0dG9uQ2hpbGQpLCBnZXRHdGtDb21ib0JveFBpZWNl
cywgJnBpZWNlcyk7CisgICAgZWxzZSBpZiAoR1RLX0lTX0FSUk9XKGJ1dHRvbkNoaWxkKSkKKyAg
ICAgICAgcGllY2VzLmFycm93ID0gYnV0dG9uQ2hpbGQ7CisKKyAgICBBU1NFUlQocGllY2VzLmFy
cm93KTsKKyAgICBtX2d0a0NvbWJvQm94QXJyb3cgPSBwaWVjZXMuYXJyb3c7CisgICAgc2V0dXBX
aWRnZXQobV9ndGtDb21ib0JveEFycm93KTsKKyAgICAvLyBXaGVuIHRoZSBzdHlsZSBjaGFuZ2Vz
LCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4KKyAgICBnX29iamVjdF9h
ZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fZ3RrQ29tYm9Cb3hBcnJvdyksIHJlaW50ZXJwcmV0
X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveEFycm93KSk7CisKKyAgICBtX2d0a0NvbWJv
Qm94U2VwYXJhdG9yID0gcGllY2VzLnNlcGFyYXRvcjsKKyAgICBpZiAobV9ndGtDb21ib0JveFNl
cGFyYXRvcikgeworICAgICAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKTsK
KyAgICAgICAgLy8gV2hlbiB0aGUgc3R5bGUgY2hhbmdlcywgdGhlIGNvbWJvIGJveCBtYXkgZGVz
dHJveSBpdHMgY2hpbGRyZW4uCisgICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19P
QkpFQ1QobV9ndGtDb21ib0JveFNlcGFyYXRvciksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXIq
PigmbV9ndGtDb21ib0JveFNlcGFyYXRvcikpOworICAgIH0KK30KKworR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hCdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a0Nv
bWJvQm94QnV0dG9uKQorICAgICAgICByZXR1cm4gbV9ndGtDb21ib0JveEJ1dHRvbjsKKyAgICBy
ZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpOworICAgIEFTU0VSVChtX2d0a0NvbWJvQm94QnV0dG9u
KTsKKyAgICByZXR1cm4gbV9ndGtDb21ib0JveEJ1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hBcnJvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29t
Ym9Cb3hBcnJvdykKKyAgICAgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hBcnJvdzsKKyAgICByZWZy
ZXNoQ29tYm9Cb3hDaGlsZHJlbigpOworICAgIEFTU0VSVChtX2d0a0NvbWJvQm94QXJyb3cpOwor
ICAgIHJldHVybiBtX2d0a0NvbWJvQm94QXJyb3c7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhl
bWVHdGs6Omd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3QKK3sKKyAgICAvLyBtX2d0a0NvbWJv
Qm94U2VwYXJhdG9yIG1heSBiZSBudWxsIGVpdGhlciBiZWNhdXNlIHdlIGhhdmVuJ3QgaW5pdGlh
bGl6ZWQgdGhlIGNvbWJvIGJveAorICAgIC8vIG9yIGJlY2F1c2UgdGhlIGNvbWJvIGJveGVzIGlu
IHRoaXMgdGhlbWUgZG9uJ3QgaGF2ZSBzZXBhcmF0b3JzLiBJZiBtX2d0a0NvbWJvQm94QXJyb3cK
KyAgICAvLyBhcnJvdyBpc24ndCBudWxsLCB3ZSBkZWZpbml0ZWx5IGhhdmUgaW5pdGlhbGl6ZWQg
dGhlIGNvbWJvIGJveC4KKyAgICBpZiAobV9ndGtDb21ib0JveEFycm93IHx8IG1fZ3RrQ29tYm9C
b3hCdXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94U2VwYXJhdG9yOworICAgIHJl
ZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0
b3I7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0hTY3JvbGxiYXIoKSBjb25z
dAoreworICAgIGlmIChtX2d0a0hTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX2d0a0hTY3Jv
bGxiYXI7CisgICAgbV9ndGtIU2Nyb2xsYmFyID0gZ3RrX2hzY3JvbGxiYXJfbmV3KDApOworICAg
IHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtIU2Nyb2xsYmFyLCBndGtDb250YWlu
ZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKK30KKworR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrVlNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrVlNjcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIG1fZ3RrVlNjcm9sbGJhcjsKKyAgICBtX2d0a1ZTY3JvbGxi
YXIgPSBndGtfdnNjcm9sbGJhcl9uZXcoMCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRh
aW5lcihtX2d0a1ZTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtW
U2Nyb2xsYmFyOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtTcGluQnV0dG9u
KCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtTcGluQnV0dG9uKQorICAgICAgICByZXR1cm4gbV9n
dGtTcGluQnV0dG9uOworICAgIG1fZ3RrU3BpbkJ1dHRvbiA9IGd0a19zcGluX2J1dHRvbl9uZXdf
d2l0aF9yYW5nZSgwLCAxMCwgMSk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lciht
X2d0a1NwaW5CdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtTcGluQnV0
dG9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZF
UlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMu
Y3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhN2Y1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTAsMCArMSwxMDAyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5z
ZW4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCisKKyNpZm5kZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCisjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlIDxjbWF0aD4K
KyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsr
LCB3aGVyZSBpdCB3YXMgZGVmaW5lZCBhcyBNSU5fQVJST1dfU0laRSBpbiBndGthcnJvdy5jLgor
c3RhdGljIGNvbnN0IGludCBtaW5BcnJvd1NpemUgPSAxNTsKKy8vIFRoaXMgaXMgdGhlIGRlZmF1
bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsrLCB3aGVyZSBpdCB3YXMgZGVmaW5lZCBhcyBNSU5fQVJS
T1dfV0lEVEggaW4gZ3Rrc3BpbmJ1dHRvbi5jLgorc3RhdGljIGNvbnN0IGludCBtaW5TcGluQnV0
dG9uQXJyb3dTaXplID0gNjsKKwordHlwZWRlZiBIYXNoTWFwPEdUeXBlLCBHUmVmUHRyPEd0a1N0
eWxlQ29udGV4dD4gPiBTdHlsZUNvbnRleHRNYXA7CitzdGF0aWMgU3R5bGVDb250ZXh0TWFwJiBz
dHlsZUNvbnRleHRNYXAoKTsKKworc3RhdGljIHZvaWQgZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2so
R09iamVjdCosIEdQYXJhbVNwZWMqKQoreworICAgIFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gc3R5bGVDb250ZXh0TWFwKCkuZW5kKCk7CisgICAgZm9yIChTdHlsZUNvbnRl
eHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdHlsZUNvbnRleHRNYXAoKS5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9pbnZhbGlkYXRl
KGl0ZXItPnZhbHVlLmdldCgpKTsKKworICAgIFBhZ2U6OnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNh
bGNGb3JBbGxQYWdlcygpOworfQorCitzdGF0aWMgU3R5bGVDb250ZXh0TWFwJiBzdHlsZUNvbnRl
eHRNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3R5bGVDb250ZXh0TWFwLCBtYXAs
ICgpKTsKKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFp
bml0aWFsaXplZCkgeworICAgICAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGlu
Z3NfZ2V0X2RlZmF1bHQoKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChzZXR0aW5ncywgIm5v
dGlmeTo6Z3RrLXRoZW1lLW5hbWUiLCBHX0NBTExCQUNLKGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNr
KSwgMCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6Omd0ay1j
b2xvci1zY2hlbWUiLCBHX0NBTExCQUNLKGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKSwgMCk7Cisg
ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1hcDsKK30KKwor
c3RhdGljIEd0a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUp
Cit7CisgICAgU3R5bGVDb250ZXh0TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3R5bGVDb250ZXh0
TWFwKCkuYWRkKHdpZGdldFR5cGUsIDApOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworCisgICAgR3RrV2lk
Z2V0UGF0aCogcGF0aCA9IGd0a193aWRnZXRfcGF0aF9uZXcoKTsKKyAgICBndGtfd2lkZ2V0X3Bh
dGhfYXBwZW5kX3R5cGUocGF0aCwgd2lkZ2V0VHlwZSk7CisKKyAgICBpZiAod2lkZ2V0VHlwZSA9
PSBHVEtfVFlQRV9TQ1JPTExCQVIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0NST0xMQkFSKTsKKyAgICBlbHNlIGlmICh3
aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKKyAgICBlbHNlIGlm
ICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0FSUk9XKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgImFycm93Iik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlw
ZSA9PSBHVEtfVFlQRV9CVVRUT04pCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKyAgICBlbHNlIGlmICh3aWRn
ZXRUeXBlID09IEdUS19UWVBFX1NDQUxFKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDQUxFKTsKKyAgICBlbHNlIGlmICh3
aWRnZXRUeXBlID09IEdUS19UWVBFX1NFUEFSQVRPUikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRo
X2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TRVBBUkFUT1IpOworICAg
IGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfUFJPR1JFU1NfQkFSKQorICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1BS
T0dSRVNTQkFSKTsKKyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NQSU5fQlVU
VE9OKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RL
X1NUWUxFX0NMQVNTX1NQSU5CVVRUT04pOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RL
X1RZUEVfVFJFRV9WSUVXKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3Mo
cGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1ZJRVcpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0NIRUNLKTsKKyAgICBlbHNlIGlmICh3
aWRnZXRUeXBlID09IEdUS19UWVBFX1JBRElPX0JVVFRPTikKKyAgICAgICAgZ3RrX3dpZGdldF9w
YXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19SQURJTyk7CisKKyAg
ICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVf
Y29udGV4dF9uZXcoKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4dC5n
ZXQoKSwgcGF0aCk7CisgICAgZ3RrX3dpZGdldF9wYXRoX2ZyZWUocGF0aCk7CisKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gY29udGV4dDsKKyAgICByZXR1cm4gY29udGV4dC5nZXQoKTsK
K30KKworR3RrU3R5bGVDb250ZXh0KiBSZW5kZXJUaGVtZUd0azo6Z3RrU2Nyb2xsYmFyU3R5bGUo
KQoreworICAgIHJldHVybiBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NST0xMQkFSKTsKK30K
KworLy8gVGhpcyBpcyBub3QgYSBzdGF0aWMgbWV0aG9kLCBiZWNhdXNlIHdlIHdhbnQgdG8gYXZv
aWQgaGF2aW5nIEdUSysgaGVhZGVycyBpbiBSZW5kZXJUaGVtZUd0ay5oLgorZXh0ZXJuIEd0a1Rl
eHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9uKTsKKwordm9pZCBSZW5k
ZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkKK3sKK30KKworUmVuZGVyVGhlbWVHdGs6On5SZW5k
ZXJUaGVtZUd0aygpCit7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFJlbmRlclRoZW1l
R3RrOjppbml0TWVkaWFDb2xvcnMoKQoreworICAgIEdka1JHQkEgY29sb3I7CisgICAgR3RrU3R5
bGVDb250ZXh0KiBjb250YWluZXJDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NP
TlRBSU5FUik7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihj
b250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19OT1JNQUwsICZjb2xvcik7CisgICAgbV9w
YW5lbENvbG9yID0gY29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRf
Y29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmY29sb3IpOwor
ICAgIG1fc2xpZGVyQ29sb3IgPSBjb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFj
a2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwg
JmNvbG9yKTsKKyAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBjb2xvcjsKK30KKyNlbmRpZgorCitz
dGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9jdXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKKyAg
ICByZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIEludFJlY3QmIHJlY3QpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gMDsK
KyAgICBib29sIGNoZWNrSW50ZXJpb3JGb2N1cyA9IGZhbHNlOworICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBzd2l0Y2ggKHBh
cnQpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICAg
ICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChwYXJ0ID09IENoZWNrYm94UGFydCA/IEdUS19U
WVBFX0NIRUNLX0JVVFRPTiA6IEdUS19UWVBFX1JBRElPX0JVVFRPTik7CisKKyAgICAgICAgZ2lu
dCBpbmRpY2F0b3JTcGFjaW5nOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwgImluZGljYXRvci1zcGFjaW5nIiwgJmluZGljYXRvclNwYWNpbmcsIE5VTEwpOwor
ICAgICAgICByZWN0LmluZmxhdGUoaW5kaWNhdG9yU3BhY2luZyk7CisKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgorICAgIGNhc2UgU2xpZGVySG9yaXpvbnRh
bFBhcnQ6CisgICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgY2FzZSBNZW51bGlz
dEJ1dHRvblBhcnQ6CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgICAgIGNvbnRleHQgPSBn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICAgICAgY2hlY2tJbnRlcmlvckZv
Y3VzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAg
IGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX0VOVFJZKTsKKyAgICAgICAgY2hlY2tJbnRlcmlvckZvY3VzID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFT
U0VSVChjb250ZXh0KTsKKyAgICBpZiAoY2hlY2tJbnRlcmlvckZvY3VzKSB7CisgICAgICAgIGdi
b29sZWFuIGludGVyaW9yRm9jdXM7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywgTlVMTCk7CisgICAg
ICAgIGlmIChpbnRlcmlvckZvY3VzKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBh
ZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFRv
Z2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCit7
CisgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBz
aG91bGRuJ3QgY2hhbmdlIHRoZW0uCisgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNp
Y09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIE90aGVyIHBvcnRzIGhhcmQtY29kZSB0aGlzIHRvIDEzIHdoaWNoIGlzIGFsc28g
dGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsrLgorICAgIC8vIEdUSysgdXNlcnMgdGVu
ZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgorICAgIC8vIEl0IGNvdWxkIGJlIG1hZGUgYSBj
b25maWd1cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3RoZXIgdGhhbiAxMyBhY3R1YWxseSBicmVhayBz
aXRlIGNvbXBhdGliaWxpdHkuCisgICAgZ2ludCBpbmRpY2F0b3JTaXplOworICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9y
U2l6ZSwgTlVMTCk7CisKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkp
OworCisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKK30KKworc3RhdGljIHZvaWQg
cGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBl
LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4
dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOworCisgICAgLy8gU29tZSB0aGVtZXMgZG8gbm90IHJlbmRlciBsYXJnZSB0
b2dnbGUgYnV0dG9ucyBwcm9wZXJseSwgc28gd2Ugc2ltcGx5CisgICAgLy8gc2hyaW5rIHRoZSBy
ZWN0YW5nbGUgYmFjayBkb3duIHRvIHRoZSBkZWZhdWx0IHNpemUgYW5kIHRoZW4gY2VudGVyIGl0
CisgICAgLy8gaW4gdGhlIGZ1bGwgdG9nZ2xlIGJ1dHRvbiByZWdpb24uIFRoZSByZWFzb24gZm9y
IG5vdCBzaW1wbHkgZm9yY2luZyB0b2dnbGUKKyAgICAvLyBidXR0b25zIHRvIGJlIGEgc21hbGxl
ciBzaXplIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBicmVhayBzaXRlIGxheW91dHMuCisgICAg
Z2ludCBpbmRpY2F0b3JTaXplOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250
ZXh0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7CisgICAgSW50UmVj
dCByZWN0KGZ1bGxSZWN0KTsKKyAgICBpZiAocmVjdC53aWR0aCgpID4gaW5kaWNhdG9yU2l6ZSkg
eworICAgICAgICByZWN0LmluZmxhdGVYKC0ocmVjdC53aWR0aCgpIC0gaW5kaWNhdG9yU2l6ZSkg
LyAyKTsKKyAgICAgICAgcmVjdC5zZXRXaWR0aChpbmRpY2F0b3JTaXplKTsgLy8gSW4gY2FzZSBy
ZWN0LndpZHRoKCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAxLgorICAgIH0KKworICAg
IGlmIChyZWN0LmhlaWdodCgpID4gaW5kaWNhdG9yU2l6ZSkgeworICAgICAgICByZWN0LmluZmxh
dGVZKC0ocmVjdC5oZWlnaHQoKSAtIGluZGljYXRvclNpemUpIC8gMik7CisgICAgICAgIHJlY3Qu
c2V0SGVpZ2h0KGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVx
dWFsIHRvIGluZGljYXRvclNpemUgKyAxLgorICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSkpOworICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCB3aWRnZXRUeXBlID09IEdUS19U
WVBFX0NIRUNLX0JVVFRPTiA/IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFT
U19SQURJTyk7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKCF0aGVtZS0+aXNFbmFi
bGVkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVj
dCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVs
c2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgaWYgKHRoZW1lLT5pc0luZGV0ZXJtaW5hdGUo
cmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5DT05TSVNU
RU5UOworICAgIGVsc2UgaWYgKHRoZW1lLT5pc0NoZWNrZWQocmVuZGVyT2JqZWN0KSkKKyAgICAg
ICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgIGlmICh0aGVtZS0+aXNQcmVz
c2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1NFTEVD
VEVEOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZ
UEVfQ0hFQ0tfQlVUVE9OKQorICAgICAgICBndGtfcmVuZGVyX2NoZWNrKGNvbnRleHQsIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGVsc2UKKyAgICAgICAgZ3RrX3Jl
bmRlcl9vcHRpb24oY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgIElu
dFJlY3QgaW5kaWNhdG9yUmVjdChyZWN0KTsKKyAgICAgICAgZ2ludCBpbmRpY2F0b3JTcGFjaW5n
OworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRv
ci1zcGFjaW5nIiwgJmluZGljYXRvclNwYWNpbmcsIE5VTEwpOworICAgICAgICBpbmRpY2F0b3JS
ZWN0LmluZmxhdGUoaW5kaWNhdG9yU3BhY2luZyk7CisgICAgICAgIGd0a19yZW5kZXJfZm9jdXMo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBpbmRp
Y2F0b3JSZWN0LngoKSwgaW5kaWNhdG9yUmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNhdG9yUmVjdC53aWR0aCgpLCBpbmRpY2F0b3JSZWN0LmhlaWdodCgpKTsKKyAgICB9
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworfQorCit2b2lkIFJl
bmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
eworICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NIRUNLX0JVVFRP
TiksIHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZUEVfQ0hFQ0tf
QlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1JBRElPX0JVVFRPTiksIHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRS
YWRpbyhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZ
UEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVuZGVyVGhlbWUqIHRo
ZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAg
aWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlD
b250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lO
U0VOU0lUSVZFOworICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkK
KyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgaWYgKHRoZW1l
LT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZM
QUdfQUNUSVZFOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0
aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgaWYgKHRoZW1lLT5pc0RlZmF1
bHQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBHdGtCb3JkZXIqIGJvcmRlclB0ciA9IDA7Cisg
ICAgICAgIEd0a0JvcmRlciBib3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKKworICAgICAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImRlZmF1bHQtYm9yZGVyIiwgJmJvcmRl
clB0ciwgTlVMTCk7CisgICAgICAgIGlmIChib3JkZXJQdHIpIHsKKyAgICAgICAgICAgIGJvcmRl
ciA9ICpib3JkZXJQdHI7CisgICAgICAgICAgICBndGtfYm9yZGVyX2ZyZWUoYm9yZGVyUHRyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJ1dHRvblJlY3QubW92ZShib3JkZXIubGVmdCwgYm9yZGVy
LnRvcCk7CisgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYnV0dG9uUmVjdC53aWR0aCgpIC0g
KGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0KSk7CisgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVp
Z2h0KGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoYm9yZGVyLnRvcCArIGJvcmRlci5ib3R0b20pKTsK
KworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxF
X0NMQVNTX0RFRkFVTFQpOworICAgIH0KKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250
ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJl
Y3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0Lmhl
aWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgp
LCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworCisgICAgaWYgKHRo
ZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBnaW50IGZvY3VzV2lkdGgs
IGZvY3VzUGFkOworICAgICAgICBnYm9vbGVhbiBkaXNwbGFjZUZvY3VzLCBpbnRlcmlvckZvY3Vz
OworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIs
ICZmb2N1c1BhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlv
ci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRpc3BsYWNlLWZvY3VzIiwgJmRpc3BsYWNlRm9jdXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICBpZiAoaW50ZXJpb3JGb2N1cykg
eworICAgICAgICAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOworICAgICAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdz
PihmbGFncyksICZib3JkZXJXaWR0aCk7CisKKyAgICAgICAgICAgIGJ1dHRvblJlY3QgPSBJbnRS
ZWN0KGJ1dHRvblJlY3QueCgpICsgYm9yZGVyV2lkdGgubGVmdCArIGZvY3VzUGFkLCBidXR0b25S
ZWN0LnkoKSArIGJvcmRlcldpZHRoLnRvcCArIGZvY3VzUGFkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnV0dG9uUmVjdC53aWR0aCgpIC0gKDIgKiBmb2N1c1BhZCArIGJvcmRl
cldpZHRoLmxlZnQgKyBib3JkZXJXaWR0aC5yaWdodCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidXR0b25SZWN0LmhlaWdodCgpIC0gKDIgKiBmb2N1c1BhZCArIGJvcmRlcldp
ZHRoLnRvcCArIGJvcmRlcldpZHRoLmJvdHRvbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGJ1dHRvblJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOworCisgICAgICAg
IGlmIChkaXNwbGFjZUZvY3VzICYmIHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgewor
ICAgICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFg7CisgICAgICAgICAgICBnaW50IGNo
aWxkRGlzcGxhY2VtZW50WTsKKyAgICAgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGls
ZC1kaXNwbGFjZW1lbnQteCIsICZjaGlsZERpc3BsYWNlbWVudFgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlz
cGxhY2VtZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
KTsKKyAgICAgICAgICAgIGJ1dHRvblJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxk
RGlzcGxhY2VtZW50WSk7CisgICAgICAgIH0KKworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNv
bnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9u
UmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3Qu
aGVpZ2h0KCkpOworICAgIH0KK30KK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgcmVuZGVyQnV0
dG9uKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKworICAg
IGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyB2b2lkIGdldENvbWJvQm94TWV0cmljcyhSZW5kZXJTdHlsZSogc3R5bGUs
IEd0a0JvcmRlciYgYm9yZGVyLCBpbnQmIGZvY3VzLCBpbnQmIHNlcGFyYXRvcikKK3sKKyAgICAv
LyBJZiB0aGlzIG1lbnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0
aGVtZSwgd2UKKyAgICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQg
V2ViQ29yZSBhbHJlYWR5IHVzZXMuCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9D
b250cm9sUGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0
a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigpKSkpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwg
JmJvcmRlcik7CisKKyAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOworICAgIGdpbnQgZm9jdXNX
aWR0aCwgZm9jdXNQYWQ7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRl
cmlvckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13
aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9j
dXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7CisgICAgZm9jdXMgPSBpbnRlcmlvckZvY3Vz
ID8gZm9jdXNXaWR0aCArIGZvY3VzUGFkIDogMDsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jl
c3RvcmUoY29udGV4dCk7CisKKyAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1NFUEFSQVRPUik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAg
IEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlv
bj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsICJzZXBhcmF0b3IiKTsKKworICAgIGdib29sZWFu
IHdpZGVTZXBhcmF0b3JzOworICAgIGdpbnQgc2VwYXJhdG9yV2lkdGg7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRvcnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLy8gR1RLKyBhbHdheXMg
dXNlcyBib3JkZXIubGVmdCwgcmVnYXJkbGVzcyBvZiB0ZXh0IGRpcmVjdGlvbi4gU2VlIGd0a3Nl
cGVyYXRvci5jLgorICAgIGlmICghd2lkZVNlcGFyYXRvcnMpCisgICAgICAgIHNlcGFyYXRvcldp
ZHRoID0gYm9yZGVyLmxlZnQ7CisKKyAgICBzZXBhcmF0b3IgPSBzZXBhcmF0b3JXaWR0aDsKKwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK2ludCBSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3sKKyAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBp
bnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1l
dHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7Cisg
ICAgaW50IGxlZnQgPSBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNXaWR0aDsKKyAgICBpZiAoc3R5
bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgbGVmdCArPSBzZXBhcmF0b3JXaWR0aCAr
IG1pbkFycm93U2l6ZTsKKyAgICByZXR1cm4gbGVmdDsKK30KKworaW50IFJlbmRlclRoZW1lR3Rr
Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgZm9j
dXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Mo
c3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAgaW50
IHJpZ2h0ID0gYm9yZGVyV2lkdGgucmlnaHQgKyBmb2N1c1dpZHRoOworICAgIGlmIChzdHlsZS0+
ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICByaWdodCArPSBzZXBhcmF0b3JXaWR0aCArIG1p
bkFycm93U2l6ZTsKKyAgICByZXR1cm4gcmlnaHQ7Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAg
IEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dp
ZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHls
ZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICByZXR1cm4g
Ym9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpw
b3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7Cisg
ICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3Vz
V2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0
eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVy
biBib3JkZXJXaWR0aC5ib3R0b20gKyBmb2N1c1dpZHRoOworfQorCitib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBjYWlyb190KiBj
YWlyb0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7
CisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGly
ZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkpKTsKKworICAgIC8vIFBhaW50IHRoZSBidXR0b24uCisgICAgR3RrU3R5bGVDb250ZXh0KiBi
dXR0b25TdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGJ1dHRvblN0eWxlQ29udGV4dCk7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihidXR0b25TdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGJ1dHRvblN0eWxlQ29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAgcmVuZGVyQnV0dG9uKHRoaXMsIGJ1dHRvblN0eWxl
Q29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworCisgICAgLy8gR2V0IHRo
ZSBpbm5lciByZWN0YW5nbGUuCisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBH
dGtCb3JkZXIqIGlubmVyQm9yZGVyUHRyID0gMDsKKyAgICBHdGtCb3JkZXIgaW5uZXJCb3JkZXIg
PSB7IDEsIDEsIDEsIDEgfTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYnV0dG9u
U3R5bGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5uZXItYm9y
ZGVyIiwgJmlubmVyQm9yZGVyUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Zm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKGlubmVyQm9yZGVyUHRyKSB7CisgICAgICAgIGlu
bmVyQm9yZGVyID0gKmlubmVyQm9yZGVyUHRyOworICAgICAgICBndGtfYm9yZGVyX2ZyZWUoaW5u
ZXJCb3JkZXJQdHIpOworICAgIH0KKworICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aDsKKyAgICBH
dGtTdGF0ZUZsYWdzIHN0YXRlID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGJ1dHRvblN0
eWxlQ29udGV4dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihidXR0b25TdHls
ZUNvbnRleHQsIHN0YXRlLCAmYm9yZGVyV2lkdGgpOworCisgICAgZm9jdXNXaWR0aCArPSBmb2N1
c1BhZDsKKyAgICBJbnRSZWN0IGlubmVyUmVjdChyZWN0LngoKSArIGlubmVyQm9yZGVyLmxlZnQg
KyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LnkoKSArIGlubmVyQm9yZGVyLnRvcCArIGJvcmRlcldpZHRoLnRvcCArIGZvY3VzV2lkdGgs
CisgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gYm9yZGVyV2lkdGgubGVmdCAt
IGJvcmRlcldpZHRoLnJpZ2h0IC0gaW5uZXJCb3JkZXIubGVmdCAtIGlubmVyQm9yZGVyLnJpZ2h0
IC0gKDIgKiBmb2N1c1dpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgp
IC0gYm9yZGVyV2lkdGgudG9wIC0gYm9yZGVyV2lkdGguYm90dG9tIC0gaW5uZXJCb3JkZXIudG9w
IC0gaW5uZXJCb3JkZXIuYm90dG9tIC0gKDIgKiBmb2N1c1dpZHRoKSk7CisKKyAgICBpZiAoaXNQ
cmVzc2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFg7
CisgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50
WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZC1kaXNwbGFjZW1l
bnQteSIsICZjaGlsZERpc3BsYWNlbWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKKyAgICAgICAgaW5uZXJSZWN0Lm1vdmUoY2hpbGREaXNwbGFjZW1lbnRY
LCBjaGlsZERpc3BsYWNlbWVudFkpOworICAgIH0KKyAgICBpbm5lclJlY3Quc2V0V2lkdGgobWF4
KDEsIGlubmVyUmVjdC53aWR0aCgpKSk7CisgICAgaW5uZXJSZWN0LnNldEhlaWdodChtYXgoMSwg
aW5uZXJSZWN0LmhlaWdodCgpKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGJ1
dHRvblN0eWxlQ29udGV4dCk7CisKKyAgICAvLyBQYWludCB0aGUgYXJyb3cuCisgICAgR3RrU3R5
bGVDb250ZXh0KiBhcnJvd1N0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9B
UlJPVyk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShhcnJvd1N0eWxlQ29udGV4dCk7CisK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGFycm93U3R5bGVDb250ZXh0LCBk
aXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29u
dGV4dCwgImFycm93Iik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5
bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKworICAgIGdmbG9hdCBhcnJvd1Nj
YWxpbmc7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGFycm93U3R5bGVDb250ZXh0
LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOworCisgICAgSW50U2l6ZSBh
cnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5lclJlY3QuaGVpZ2h0KCkpOworICAgIEZsb2F0UG9p
bnQgYXJyb3dQb3NpdGlvbihpbm5lclJlY3QubG9jYXRpb24oKSk7CisgICAgaWYgKGRpcmVjdGlv
biA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoaW5uZXJS
ZWN0LndpZHRoKCkgLSBhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICAvLyBHVEsrIGFjdHVh
bGx5IGZldGNoZXMgdGhlIHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBmcm9tIHRoZSB3aWRnZXQs
IGJ1dCBzaW5jZSB3ZQorICAgIC8vIGRvbid0IGhhdmUgYSB3aWRnZXQgaGVyZSwgd2UgYXJlIGp1
c3QgdXNpbmcgdGhlIGRlZmF1bHQgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIG9mIDAuNS4KKyAg
ICBnaW50IGV4dGVudCA9IHN0ZDo6bWluKGFycm93U2l6ZS53aWR0aCgpLCBhcnJvd1NpemUuaGVp
Z2h0KCkpICogYXJyb3dTY2FsaW5nOworICAgIGFycm93UG9zaXRpb24ubW92ZSgoYXJyb3dTaXpl
LndpZHRoKCkgLSBleHRlbnQpIC8gMiwgKGFycm93U2l6ZS5oZWlnaHQoKSAtIGV4dGVudCkgLyAy
KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShhcnJvd1N0eWxlQ29udGV4dCwg
c3RhdGUpOworICAgIGd0a19yZW5kZXJfYXJyb3coYXJyb3dTdHlsZUNvbnRleHQsIGNhaXJvQ29u
dGV4dCwgR19QSSwgYXJyb3dQb3NpdGlvbi54KCksIGFycm93UG9zaXRpb24ueSgpLCBleHRlbnQp
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShhcnJvd1N0eWxlQ29udGV4dCk7CisK
KyAgICAvLyBQYWludCB0aGUgc2VwYXJhdG9yIGlmIG5lZWRlZC4KKyAgICBHdGtTdHlsZUNvbnRl
eHQqIHNlcGFyYXRvclN0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01C
T19CT1gpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0
KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oc2VwYXJhdG9yU3R5bGVD
b250ZXh0LCBkaXJlY3Rpb24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzZXBh
cmF0b3JTdHlsZUNvbnRleHQsICJzZXBhcmF0b3IiKTsKKworICAgIGdib29sZWFuIHdpZGVTZXBh
cmF0b3JzOworICAgIGdpbnQgc2VwYXJhdG9yV2lkdGg7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0eWxlKHNlcGFyYXRvclN0eWxlQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKHdpZGVTZXBh
cmF0b3JzICYmICFzZXBhcmF0b3JXaWR0aCkgeworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VwYXJhdG9yU3R5bGVDb250
ZXh0LCBzdGF0ZSk7CisgICAgSW50UG9pbnQgc2VwYXJhdG9yUG9zaXRpb24oYXJyb3dQb3NpdGlv
bi54KCksIGlubmVyUmVjdC55KCkpOworICAgIGlmICh3aWRlU2VwYXJhdG9ycykgeworICAgICAg
ICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCisgICAgICAgICAgICBzZXBhcmF0
b3JQb3NpdGlvbi5tb3ZlKC1zZXBhcmF0b3JXaWR0aCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoYXJyb3dTaXplLndpZHRoKCksIDApOworCisg
ICAgICAgIGd0a19yZW5kZXJfZnJhbWUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBjYWlyb0NvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBh
cmF0b3JQb3NpdGlvbi55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yV2lk
dGgsIGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR3RrQm9yZGVy
IHBhZGRpbmc7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKHNlcGFyYXRv
clN0eWxlQ29udGV4dCwgc3RhdGUsICZwYWRkaW5nKTsKKyAgICAgICAgR3RrQm9yZGVyIGJvcmRl
cjsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihzZXBhcmF0b3JTdHlsZUNv
bnRleHQsIHN0YXRlLCAmYm9yZGVyKTsKKworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19U
RVhUX0RJUl9MVFIpCisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKC0ocGFkZGlu
Zy5sZWZ0ICsgYm9yZGVyLmxlZnQpLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Vw
YXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICAgICAgY2Fp
cm9fc2F2ZShjYWlyb0NvbnRleHQpOworCisgICAgICAgIC8vIEFuIGV4dHJhIGNsaXAgcHJldmVu
dHMgdGhlIHNlcGFyYXRvciBibGVlZGluZyBvdXRzaWRlIG9mIHRoZSBzcGVjaWZpZWQgcmVjdGFu
Z2xlIGJlY2F1c2Ugb2Ygc3VicGl4ZWwgcG9zaXRpb25pbmcuCisgICAgICAgIGNhaXJvX3JlY3Rh
bmdsZShjYWlyb0NvbnRleHQsIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRp
b24ueSgpLCBib3JkZXIubGVmdCwgaW5uZXJSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2Fpcm9f
Y2xpcChjYWlyb0NvbnRleHQpOworICAgICAgICBndGtfcmVuZGVyX2xpbmUoc2VwYXJhdG9yU3R5
bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0
b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0Lm1heFkoKSk7CisgICAgICAg
IGNhaXJvX3Jlc3RvcmUoY2Fpcm9Db250ZXh0KTsKKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX0VOVFJZKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQs
IEdUS19TVFlMRV9DTEFTU19FTlRSWSk7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYg
KCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmpl
Y3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKyAgICBl
bHNlIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfRk9DVVNFRDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4
dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0a19yZW5kZXJf
YmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
KyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOworCisgICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpICYmIGlzRW5hYmxl
ZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7CisgICAg
ICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgaWYgKCFp
bnRlcmlvckZvY3VzKSB7CisgICAgICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdChyZWN0KTsKKyAg
ICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CisgICAg
ICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNS
ZWN0LngoKSwgZm9jdXNSZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWln
aHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KGNvbnRleHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBhcHBseVNs
aWRlclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBDb250cm9s
UGFydCBwYXJ0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfU0NBTEUpOworICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQ
YXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFM
KTsKKyAgICBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IFNs
aWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQ29u
dHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAg
IEFTU0VSVF9VTlVTRUQocGFydCwgcGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBwYXJ0
ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyUGFydCk7
CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfU0NBTEUpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGd0a1RleHREaXJlY3Rpb24o
cmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIGFwcGx5U2xpZGVyU3R5
bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7CisKKyAgICBpZiAoIWlz
RW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkp
CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBHVEtfU1RBVEVf
RkxBR19JTlNFTlNJVElWRSk7CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwg
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAoaXNGb2N1
c2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsK
KyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAm
Zm9jdXNQYWQsIE5VTEwpOworICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdChyZWN0KTsKKyAgICAg
ICAgZm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKKyAgICAgICAgZ3Rr
X3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNSZWN0LngoKSwgZm9jdXNS
ZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7CisgICAgfQor
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxl
KCktPmFwcGVhcmFuY2UoKTsKKyAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRp
YVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24o
KSkpOworICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNT
X1NMSURFUik7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKCFpc0VuYWJsZWQocmVu
ZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKyAgICBlbHNlIGlmIChpc0hvdmVy
ZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElH
SFQ7CisgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19BQ1RJVkU7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisKKyAgICBndGtfcmVu
ZGVyX3NsaWRlcihjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAor
ICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/
IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMIDogR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZ2ludCBzbGlkZXJXaWR0aCwgc2xpZGVyTGVuZ3RoOworICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdpZHRoIiwgJnNsaWRlcldp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLWxlbmd0aCIsICZz
bGlkZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAg
IGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKKyAgICAgICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQg
PT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xp
ZGVyTGVuZ3RoLCBGaXhlZCkpOworfQorCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiti
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQcm9ncmVzcygpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9QUk9HUkVTU19CQVIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4
dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxF
X0NMQVNTX1RST1VHSCk7CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShj
b250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGd0a19z
dHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOworCisKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOworICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KHJl
Y3QueCgpICsgcGFkZGluZy5sZWZ0LCByZWN0LnkoKSArIHBhZGRpbmcudG9wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIChwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJp
Z2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC0gKHBhZGRpbmcu
dG9wICsgcGFkZGluZy5ib3R0b20pKTsKKyAgICBwcm9ncmVzc1JlY3QgPSBSZW5kZXJUaGVtZUd0
azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KHJlbmRlck9iamVjdCwgcHJvZ3Jlc3NSZWN0KTsKKwor
ICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgZ3RrX3JlbmRlcl9hY3Rp
dml0eShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCks
IHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHByb2dyZXNzUmVjdC53aWR0aCgp
LCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShjb250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworc3RhdGljIGdpbnQg
c3BpbkJ1dHRvbkFycm93U2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgY29u
c3QgUGFuZ29Gb250RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbjsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXQoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICJmb250
IiwgJmZvbnREZXNjcmlwdGlvbiwgTlVMTCk7CisgICAgZ2ludCBmb250U2l6ZSA9IHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0aW9uKTsKKyAgICBnaW50IGFycm93
U2l6ZSA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dTaXpl
KTsKKworICAgIHJldHVybiBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAyOyAvLyBGb3JjZSBldmVu
LgorfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAg
ICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJ
Tl9CVVRUT04pOworCisgICAgR3RrQm9yZGVyIHBhZGRpbmc7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZw
YWRkaW5nKTsKKworICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJvd1NpemUoY29udGV4dCkg
KyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwg
Rml4ZWQpKTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRTcGluQXJyb3dCdXR0b24oUmVuZGVyVGhl
bWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrQXJyb3dUeXBlIGFycm93VHlwZSkKK3sKKyAgICBBU1NFUlQoYXJyb3dUeXBlID09IEdUS19B
UlJPV19VUCB8fCBhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04pOworCisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Mo
Y29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICBHdGtUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9kaXJlY3Rpb24oY29udGV4dCk7Cisg
ICAgZ3VpbnQgc3RhdGUgPSBzdGF0aWNfY2FzdDxndWludD4oZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0YXRlKGNvbnRleHQpKTsKKyAgICBpZiAoIShzdGF0ZSAmIEdUS19TVEFURV9GTEFHX0lOU0VO
U0lUSVZFKSkgeworICAgICAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKSB7
CisgICAgICAgICAgICBpZiAoKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVAgJiYgdGhlbWUtPmlz
U3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgICAgICAgICB8
fCAoYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOICYmICF0aGVtZS0+aXNTcGluVXBCdXR0b25Q
YXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKSkKKyAgICAgICAgICAgICAgICBzdGF0ZSB8PSBHVEtf
U1RBVEVfRkxBR19BQ1RJVkU7CisgICAgICAgIH0gZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJlZChy
ZW5kZXJPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoKGFycm93VHlwZSA9PSBHVEtfQVJST1df
VVAgJiYgdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAg
ICAgICAgICAgICAgICB8fCAoYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOICYmICF0aGVtZS0+
aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKSkKKyAgICAgICAgICAgICAg
ICBzdGF0ZSB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oc3RhdGUpKTsKKworICAgIC8vIFBhaW50IGJ1dHRvbi4KKyAgICBJbnRSZWN0IGJ1
dHRvblJlY3QocmVjdCk7CisgICAgZ3VpbnQganVuY3Rpb24gPSBndGtfc3R5bGVfY29udGV4dF9n
ZXRfanVuY3Rpb25fc2lkZXMoY29udGV4dCk7CisgICAgaWYgKGFycm93VHlwZSA9PSBHVEtfQVJS
T1dfVVApCisgICAgICAgIGp1bmN0aW9uIHw9IEdUS19KVU5DVElPTl9CT1RUT007CisgICAgZWxz
ZSB7CisgICAgICAgIGp1bmN0aW9uIHw9IEdUS19KVU5DVElPTl9UT1A7CisgICAgICAgIGJ1dHRv
blJlY3QubW92ZSgwLCByZWN0LmhlaWdodCgpIC8gMik7CisgICAgfQorICAgIGJ1dHRvblJlY3Qu
c2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
anVuY3Rpb25fc2lkZXMoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrSnVuY3Rpb25TaWRlcz4oanVu
Y3Rpb24pKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8u
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25S
ZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKKyAgICBn
dGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0Lndp
ZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworCisgICAgLy8gUGFpbnQgYXJyb3cgY2VudGVy
ZWQgaW5zaWRlIGJ1dHRvbi4KKyAgICAvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZ3Rrc3BpbmJ1
dHRvbi5jIGNvZGUuCisgICAgSW50UmVjdCBhcnJvd1JlY3Q7CisgICAgZ2RvdWJsZSBhbmdsZTsK
KyAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkgeworICAgICAgICBhbmdsZSA9IDA7
CisgICAgICAgIGFycm93UmVjdC5zZXRZKHJlY3QueSgpKTsKKyAgICAgICAgYXJyb3dSZWN0LnNl
dEhlaWdodChyZWN0LmhlaWdodCgpIC8gMiAtIDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFu
Z2xlID0gR19QSTsKKyAgICAgICAgYXJyb3dSZWN0LnNldFkocmVjdC55KCkgKyBidXR0b25SZWN0
LnkoKSk7CisgICAgICAgIGFycm93UmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIGFycm93
UmVjdC55KCkgLSAyKTsKKyAgICB9CisgICAgYXJyb3dSZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgo
KSAtIDMpOworICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAg
YXJyb3dSZWN0LnNldFgocmVjdC54KCkgKyAxKTsKKyAgICBlbHNlCisgICAgICAgIGFycm93UmVj
dC5zZXRYKHJlY3QueCgpICsgMik7CisKKyAgICBnaW50IHdpZHRoID0gYXJyb3dSZWN0LndpZHRo
KCkgLyAyOworICAgIHdpZHRoIC09IHdpZHRoICUgMiAtIDE7IC8vIEZvcmNlIG9kZC4KKyAgICBn
aW50IGhlaWdodCA9ICh3aWR0aCArIDEpIC8gMjsKKworICAgIGFycm93UmVjdC5tb3ZlKChhcnJv
d1JlY3Qud2lkdGgoKSAtIHdpZHRoKSAvIDIsIChhcnJvd1JlY3QuaGVpZ2h0KCkgLSBoZWlnaHQp
IC8gMik7CisgICAgZ3RrX3JlbmRlcl9hcnJvdyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFuZ2xlLCBhcnJvd1JlY3QueCgpLCBhcnJvd1JlY3Qu
eSgpLCB3aWR0aCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwor
fQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNv
bnRleHQpOworCisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRl
eHQsIGRpcmVjdGlvbik7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKCFpc0VuYWJs
ZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQorICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKyAgICBlbHNlIGlmIChp
c0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
Rk9DVVNFRDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZW1v
dmVfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsKKworICAgIHBhaW50U3Bp
bkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0
LCBHVEtfQVJST1dfVVApOworICAgIHBhaW50U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQs
IHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1dfRE9XTik7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3
aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3Rh
dGUsIGdpbnQgaWNvblNpemUpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0
U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOworICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtf
c3R5bGVfY29udGV4dF9sb29rdXBfaWNvbl9zZXQoY29udGV4dCwgaWNvbk5hbWUpOworCisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd1aW50IGZsYWdzID0gMDsK
KyAgICBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX1BSRUxJR0hUKQorICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBlbHNlIGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVf
SU5TRU5TSVRJVkUpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZF
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0
PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVj
dGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihkaXJlY3Rpb24pKTsK
KyAgICBHZGtQaXhidWYqIGljb24gPSBndGtfaWNvbl9zZXRfcmVuZGVyX2ljb25fcGl4YnVmKGlj
b25TZXQsIGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a0ljb25TaXplPihpY29uU2l6ZSkpOworCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBhZG9w
dEdSZWYoaWNvbik7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja1N5bWJvbGljSWNv
bkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogc3ltYm9saWNJY29u
TmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwg
Z2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmIChzdGF0ZSA9
PSBHVEtfU1RBVEVfUFJFTElHSFQpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BS
RUxJR0hUOworICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJVElWRSkKKyAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4o
ZmxhZ3MpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0
YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOworICAgIEd0a0ljb25JbmZv
KiBpbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2ljb24oZ3RrX2ljb25fdGhlbWVfZ2V0X2Rl
ZmF1bHQoKSwgc3ltYm9saWNJY29uTmFtZSwgaWNvblNpemUsCisgICAgICAgIHN0YXRpY19jYXN0
PEd0a0ljb25Mb29rdXBGbGFncz4oR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NWRyB8IEdUS19JQ09O
X0xPT0tVUF9GT1JDRV9TSVpFKSk7CisgICAgR2RrUGl4YnVmKiBpY29uID0gMDsKKyAgICBpZiAo
aW5mbykgeworICAgICAgICBpY29uID0gZ3RrX2ljb25faW5mb19sb2FkX3N5bWJvbGljX2Zvcl9j
b250ZXh0KGluZm8sIGNvbnRleHQsIDAsIDApOworICAgICAgICBndGtfaWNvbl9pbmZvX2ZyZWUo
aW5mbyk7CisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsK
KworICAgIGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuIGdldFN0b2NrSWNvbkZvcldpZGdldFR5
cGUod2lkZ2V0VHlwZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBkaXJlY3Rpb24sIHN0YXRlLCBp
Y29uU2l6ZSk7CisKKyAgICByZXR1cm4gYWRvcHRHUmVmKGljb24pOworfQorCitDb2xvciBSZW5k
ZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSksIEdUS19T
VEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNv
bG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0
KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9yKTsK
KyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JH
QkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgJmdka1JH
QkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhl
bWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAor
eworICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9j
b2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RBVEVfRkxBR19BQ1RJ
VkUsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9y
IFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVX
KSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBn
ZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjppbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxl
Q29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZnZGtS
R0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRo
ZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29s
b3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVfVklFVyksIEdUS19TVEFURV9GTEFHX1NF
TEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitD
b2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVfVklFVyksIEdU
S19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFD
b2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1
ZUlkKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworCisgICAgc3dpdGNoIChj
c3NWYWx1ZUlkKSB7CisgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKSwg
c3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZnZGtSR0JBQ29sb3IpOworICAgICAgICBy
ZXR1cm4gZ2RrUkdCQUNvbG9yOworICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9udGV4dDoKKyAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9F
TlRSWSksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmZ2RrUkdCQUNvbG9yKTsKKyAg
ICAgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
UmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9SdW5Mb29wR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
OTBmMzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3Rr
LmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAg
TW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisKKyNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSdW5Mb29wOjpSdW5Mb29wKCkKK3sKKyAgICAv
LyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgZG9lc24ndCBhZGQgYW4gZXh0cmEgcmVmZXJlbmNl
LgorICAgIG1fcnVuTG9vcENvbnRleHQgPSBpc01haW5UaHJlYWQoKSA/IGdfbWFpbl9jb250ZXh0
X2RlZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7CisgICAgQVNTRVJU
KG1fcnVuTG9vcENvbnRleHQpOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBpbm5lcm1vc3RMb29w
ID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX3J1bkxvb3BDb250ZXh0LmdldCgpLCBGQUxT
RSkpOworICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsKKyAgICBtX3J1bkxvb3BNYWluTG9vcHMu
YXBwZW5kKGlubmVybW9zdExvb3ApOworfQorCitSdW5Mb29wOjp+UnVuTG9vcCgpCit7CisgICAg
Zm9yIChpbnQgaSA9IG1fcnVuTG9vcE1haW5Mb29wcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ydW5Mb29wTWFpbkxvb3Bz
W2ldLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBnX21haW5fbG9vcF9x
dWl0KG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIFJ1bkxv
b3A6OnJ1bigpCit7CisgICAgUnVuTG9vcCogbWFpblJ1bkxvb3AgPSBSdW5Mb29wOjpjdXJyZW50
KCk7CisgICAgR01haW5Mb29wKiBpbm5lcm1vc3RMb29wID0gbWFpblJ1bkxvb3AtPmlubmVybW9z
dExvb3AoKTsKKyAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmcoaW5uZXJtb3N0TG9vcCkp
IHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExvb3ApOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBuZXN0ZWQgbG9vcCBpZiB0aGUg
aW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgorICAgIEdNYWluTG9vcCogbmVzdGVk
TWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcoMCwgRkFMU0UpOworICAgIG1haW5SdW5Mb29wLT5w
dXNoTmVzdGVkTWFpbkxvb3AobmVzdGVkTWFpbkxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihu
ZXN0ZWRNYWluTG9vcCk7CisgICAgbWFpblJ1bkxvb3AtPnBvcE5lc3RlZE1haW5Mb29wKCk7Cit9
CisKK0dNYWluTG9vcCogUnVuTG9vcDo6aW5uZXJtb3N0TG9vcCgpCit7CisgICAgLy8gVGhlIGlu
bmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KKyAgICBBU1NFUlQoIW1f
cnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3J1bkxvb3BNYWluTG9v
cHNbMF0uZ2V0KCk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6cHVzaE5lc3RlZE1haW5Mb29wKEdNYWlu
TG9vcCogbmVzdGVkTG9vcCkKK3sKKyAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91
bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1w
dHkoKSk7CisgICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVuZChhZG9wdEdSZWYobmVzdGVkTG9v
cCkpOworfQorCit2b2lkIFJ1bkxvb3A6OnBvcE5lc3RlZE1haW5Mb29wKCkKK3sKKyAgICAvLyBU
aGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VS
VCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7CisgICAgbV9ydW5Mb29wTWFpbkxvb3Bz
LnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBSdW5Mb29wOjpzdG9wKCkKK3sKKyAgICAvLyBUaGUg
aW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VSVCgh
bV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7CisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IGxh
c3RNYWluTG9vcCA9IG1fcnVuTG9vcE1haW5Mb29wcy5sYXN0KCk7CisgICAgaWYgKGdfbWFpbl9s
b29wX2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgpKSkKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOworfQorCitnYm9vbGVhbiBSdW5Mb29wOjpxdWV1ZVdv
cmsoUnVuTG9vcCogcnVuTG9vcCkKK3sKKyAgICBydW5Mb29wLT5wZXJmb3JtV29yaygpOworICAg
IHJldHVybiBGQUxTRTsKK30KKwordm9pZCBSdW5Mb29wOjp3YWtlVXAoKQoreworICAgIEdSZWZQ
dHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOworICAg
IGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7
CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29yayksIHRoaXMsIDApOworICAgIGdfc291
cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9vcENvbnRleHQuZ2V0KCkpOworCisgICAg
Z19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENvbnRleHQuZ2V0KCkpOworfQorCitSdW5M
b29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wKiBydW5Mb29wKQorICAgIDogbV9ydW5M
b29wKHJ1bkxvb3ApCisgICAgLCBtX3RpbWVyU291cmNlKDApCit7Cit9CisKK1J1bkxvb3A6OlRp
bWVyQmFzZTo6flRpbWVyQmFzZSgpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIFJ1bkxvb3A6
OlRpbWVyQmFzZTo6Y2xlYXJUaW1lclNvdXJjZSgpCit7CisgICAgbV90aW1lclNvdXJjZSA9IDA7
Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZENhbGxiYWNrKFJ1
bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCit7CisgICAgR1NvdXJjZSogY3VycmVudFRpbWVyU291
cmNlID0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCk7CisgICAgYm9vbCBpc1JlcGVhdGluZyA9
IHRpbWVyLT5pc1JlcGVhdGluZygpOworICAgIC8vIFRoaXMgY2FuIGNoYW5nZSB0aGUgdGltZXJT
b3VyY2UgYnkgc3RhcnRpbmcgYSBuZXcgdGltZXIgd2l0aGluIHRoZSBjYWxsYmFjay4KKyAgICB0
aW1lci0+ZmlyZWQoKTsKKyAgICBpZiAoIWlzUmVwZWF0aW5nICYmIGN1cnJlbnRUaW1lclNvdXJj
ZSA9PSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKSkKKyAgICAgICAgdGltZXItPmNsZWFyVGlt
ZXJTb3VyY2UoKTsKKyAgICByZXR1cm4gaXNSZXBlYXRpbmc7Cit9CisKK3ZvaWQgUnVuTG9vcDo6
VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKK3sKKyAg
ICBpZiAobV90aW1lclNvdXJjZSkKKyAgICAgICAgc3RvcCgpOworCisgICAgbV90aW1lclNvdXJj
ZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZmly
ZUludGVydmFsICogMTAwMCkpKTsKKyAgICBtX2lzUmVwZWF0aW5nID0gcmVwZWF0OworICAgIGdf
c291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2spLCB0
aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lclNvdXJjZS5nZXQoKSwgbV9ydW5M
b29wLT5tX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJh
c2U6OnN0b3AoKQoreworICAgIGlmICghbV90aW1lclNvdXJjZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNlLmdldCgpKTsKKyAgICBjbGVhclRp
bWVyU291cmNlKCk7Cit9CisKK2Jvb2wgUnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdGltZXJTb3VyY2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBiMDVhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQ29sbGFib3JhIEx0ZC4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5j
bHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCit7CisgICAgLy8gSW50ZXJpb3IgZnJh
bWUgU2Nyb2xsVmlld3MgbmV2ZXIgaGF2ZSBNYWluRnJhbWVTY3JvbGxiYXJzLgorICAgIGlmIChz
Y3JvbGxWaWV3LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYg
d2UgZG9uJ3QgaGF2ZSBhIGhvc3Qgd2luZG93IG9yIGEgY29udGFpbmluZyB3aWRnZXQgKGFsYSBX
ZWJLaXQyKS4KKyAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gc2Nyb2xsVmlldy0+aG9zdFdp
bmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdyB8fCAhaG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdl
Q2xpZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdib29sZWFuIHNlbGZTY3Jv
bGxpbmcgPSBGQUxTRTsKKyAgICBnX29iamVjdF9nZXQoaG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdl
Q2xpZW50KCksICJzZWxmLXNjcm9sbGluZyIsICZzZWxmU2Nyb2xsaW5nLCBOVUxMKTsKKyAgICBy
ZXR1cm4gIXNlbGZTY3JvbGxpbmc7Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxW
aWV3OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7
CisgICAgaWYgKHNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcih0aGlzKSkKKyAgICAgICAg
cmV0dXJuIE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKHRoaXMsIG9yaWVudGF0aW9uKTsK
KyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50
YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnZpc2li
bGVDb250ZW50UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xs
YmFySW5jbHVzaW9uKSBjb25zdAoreworICAgIGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMgPSBzY3Jv
bGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnM7CisKKyAgICAvLyBJZiB3ZSBhcmUg
YW4gaW50ZXJpb3IgZnJhbWUgc2Nyb2xsYmFyIG9yIGFyZSBpbiBzb21lIHNvcnQgb2YgdHJhbnNp
dGlvbgorICAgIC8vIHN0YXRlLCBqdXN0IGNhbGN1bGF0ZSBvdXIgc2l6ZSBiYXNlZCBvbiB3aGF0
IHRoZSBHVEsrIHRoZW1lIHNheXMgdGhlCisgICAgLy8gc2Nyb2xsYmFyIHdpZHRoIHNob3VsZCBi
ZS4KKyAgICBpZiAoIXNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcih0aGlzKSkgeworICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUobWF4
KDAsIHdpZHRoKCkgLSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhaW5jbHVkZVNjcm9sbGJhcnMg
PyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpIDogMCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1heCgwLCBoZWlnaHQoKSAtIChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYg
IWluY2x1ZGVTY3JvbGxiYXJzID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDAp
KSkpOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IGhhdmUgYSBwYXJlbnQsIHNvIHdlIGFyZSB0
aGUgbWFpbiBmcmFtZSBhbmQgdGh1cyBoYXZlCisgICAgLy8gYSBwYXJlbnQgd2lkZ2V0IHdoaWNo
IHdlIGNhbiB1c2UgdG8gbWVhc3VyZSB0aGUgdmlzaWJsZSByZWdpb24uCisgICAgR3RrV2lkZ2V0
KiBtZWFzdXJlZFdpZGdldCA9IGhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Cisg
ICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQobWVhc3Vy
ZWRXaWRnZXQpOworCisgICAgLy8gV2UgbWF5IG5vdCBiZSBpbiBhIHdpZGdldCB0aGF0IGRpc3Bs
YXlzIHNjcm9sbGJhcnMsIGJ1dCB3ZSBtYXkKKyAgICAvLyBoYXZlIG90aGVyIGtpbmRzIG9mIGRl
Y29yYXRpb24gdGhhdCBtYWtlIHVzIHNtYWxsZXIuCisgICAgaWYgKHBhcmVudFdpZGdldCAmJiBp
bmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgbWVhc3VyZWRXaWRnZXQgPSBwYXJlbnRXaWRnZXQ7
CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxs
b2NhdGlvbihtZWFzdXJlZFdpZGdldCwgJmFsbG9jYXRpb24pOworICAgIHJldHVybiBJbnRSZWN0
KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgp
KSwKKyAgICAgICAgICAgICAgICAgICBJbnRTaXplKGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRp
b24uaGVpZ2h0KSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMoU2Ny
b2xsYmFyTW9kZSBob3Jpem9udGFsTW9kZSwgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbE1vZGUsIGJv
b2wgaG9yaXpvbnRhbExvY2ssIGJvb2wgdmVydGljYWxMb2NrKQoreworICAgIC8vIEZJWE1FOiBS
ZXN0cnVjdHVyZSB0aGUgU2Nyb2xsVmlldyBhYnN0cmFjdGlvbiBzbyB0aGF0IHdlIGRvIG5vdCBo
YXZlIHRvCisgICAgLy8gY29weSB0aGlzIHZlcmJhdGltIGZyb20gU2Nyb2xsVmlldy5jcHAuIFVu
dGlsIHRoZW4sIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcworICAgIC8vIGlzIGtlcHQgaW4gc3lu
Yy4KKyAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CisKKyAgICBpZiAoaG9yaXpvbnRhbE1v
ZGUgIT0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TG9jaykgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID0gaG9yaXpvbnRhbE1v
ZGU7CisgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmVydGlj
YWxNb2RlICE9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFy
TG9jaykgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IHZlcnRpY2FsTW9kZTsK
KyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgIH0KKworICAgIGlmIChob3Jpem9udGFs
TG9jaykKKyAgICAgICAgc2V0SG9yaXpvbnRhbFNjcm9sbGJhckxvY2soKTsKKworICAgIGlmICh2
ZXJ0aWNhbExvY2spCisgICAgICAgIHNldFZlcnRpY2FsU2Nyb2xsYmFyTG9jaygpOworCisgICAg
aWYgKG5lZWRzVXBkYXRlKQorICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgp
KTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHBvbGljeSBjaGFuZ2VzIG9uIFNj
cm9sbFZpZXcncyB1bmxlc3MgdGhpcworICAgIC8vIG9uZSBoYXMgYW4gYWRqdXN0bWVudCBhdHRh
Y2hlZCBhbmQgaXQgaXMgYSBtYWluIGZyYW1lLgorICAgIGlmIChwYXJlbnQoKSB8fCAhaXNGcmFt
ZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRm9yIGZyYW1lcyB0aGF0IGRvIGhh
dmUgYWRqdXN0bWVudHMgYXR0YWNoZWQsIHdlIHdhbnQgdG8gcmVwb3J0CisgICAgLy8gcG9saWN5
IGNoYW5nZXMsIHNvIHRoYXQgdGhleSBtYXkgYmUgYXBwbGllZCB0byB0aGUgd2lkZ2V0IHRvCisg
ICAgLy8gd2hpY2ggdGhlIFdlYlZpZXcncyBjb250YWluZXIgKGUuZy4gR3RrU2Nyb2xsZWRXaW5k
b3cpLgorICAgIGlmIChob3N0V2luZG93KCkpCisgICAgICAgIGhvc3RXaW5kb3coKS0+c2Nyb2xs
YmFyc01vZGVEaWRDaGFuZ2UoKTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyVGhlbWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTNm
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1l
R3RrLmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWVHdGsuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlJlbmRlclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBIYXNoU2V0PFNjcm9s
bGJhclRoZW1lQ2xpZW50Kj4qIGdTY3JvbGxiYXJzOworCitTY3JvbGxiYXJUaGVtZSogU2Nyb2xs
YmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWVHdGsg
dGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKK30KKworU2Nyb2xsYmFyVGhlbWVHdGs6On5TY3Jv
bGxiYXJUaGVtZUd0aygpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnJlZ2lzdGVy
U2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYgKCFn
U2Nyb2xsYmFycykKKyAgICAgICAgZ1Njcm9sbGJhcnMgPSBuZXcgSGFzaFNldDxTY3JvbGxiYXJU
aGVtZUNsaWVudCo+OworICAgIGdTY3JvbGxiYXJzLT5hZGQoc2Nyb2xsYmFyKTsKK30KKwordm9p
ZCBTY3JvbGxiYXJUaGVtZUd0azo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQoreworICAgIGdTY3JvbGxiYXJzLT5yZW1vdmUoc2Nyb2xsYmFyKTsK
KyAgICBpZiAoZ1Njcm9sbGJhcnMtPmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGUgZ1Njcm9s
bGJhcnM7CisgICAgICAgIGdTY3JvbGxiYXJzID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xs
YmFyVGhlbWVHdGs6OnVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpCit7CisgICAgaWYg
KCFnU2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXBkYXRlIHRoZSB0aGlj
a25lc3Mgb2YgZXZlcnkgaW50ZXJpb3IgZnJhbWUgc2Nyb2xsYmFyIHdpZGdldC4gVGhlCisgICAg
Ly8gcGxhdGZvcm0taW5kZXBlbmRlbnQgc2Nyb2xsYmFyIHRoZW0gY29kZSBpc24ndCB5ZXQgc21h
cnQgZW5vdWdoIHRvIGdldAorICAgIC8vIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBpdCBwYWludHMu
CisgICAgSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+OjppdGVyYXRvciBlbmQgPSBnU2Ny
b2xsYmFycy0+ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj46
Oml0ZXJhdG9yIGl0ID0gZ1Njcm9sbGJhcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyID0gKCppdCk7CisKKyAgICAg
ICAgLy8gVG9wLWxldmVsIHNjcm9sbGJhciBpLmUuIHNjcm9sbGJhcnMgd2hvIGhhdmUgYSBwYXJl
bnQgU2Nyb2xsVmlldworICAgICAgICAvLyB3aXRoIG5vIHBhcmVudCBhcmUgbmF0aXZlLCBhbmQg
dGh1cyBkbyBub3QgbmVlZCB0byBiZSByZXNpemVkLgorICAgICAgICBpZiAoIXNjcm9sbGJhci0+
cGFyZW50KCkgfHwgIXNjcm9sbGJhci0+cGFyZW50KCktPnBhcmVudCgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyLT5zZXRG
cmFtZVJlY3QoSW50UmVjdCgwLCBzY3JvbGxiYXItPnBhcmVudCgpLT5oZWlnaHQoKSAtIHRoaWNr
bmVzcywgc2Nyb2xsYmFyLT53aWR0aCgpLCB0aGlja25lc3MpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdChzY3JvbGxiYXItPnBhcmVu
dCgpLT53aWR0aCgpIC0gdGhpY2tuZXNzLCAwLCB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0
KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6Omhhc1RodW1iKFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXMganVz
dCBjYWxsZWQgYXMgYSBwYWludC10aW1lIG9wdGltaXphdGlvbiB0byBzZWUgaWYKKyAgICAvLyBw
YWludGluZyB0aGUgdGh1bWIgY2FuIGJlIHNraXBwZWQuICBXZSBkb24ndCBoYXZlIHRvIGJlIGV4
YWN0IGhlcmUuCisgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikgPiAwOworfQorCitJ
bnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCit7CisgICAgaWYgKHBh
cnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgJiYgIW1faGFzQmFja0J1dHRvbkVuZFBhcnQpCisgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCAmJiAhbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworCisgICAgaW50IHggPSBzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7Cisg
ICAgaW50IHkgPSBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7CisgICAgSW50
U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIpOworICAgIGlmIChwYXJ0ID09IEJhY2tC
dXR0b25TdGFydFBhcnQpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBCYWNrQnV0dG9uRW5kUGFydCAoYWx0ZXJuYXRl
IGJ1dHRvbikKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgc2Nyb2xs
YmFyLT53aWR0aCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCAtICgyICogc2l6ZS53aWR0aCgpKSwg
eSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIFZlcnRpY2FsU2Nyb2xs
YmFyIGFsdGVybmF0ZSBidXR0b24KKyAgICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXItPnko
KSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIgKiBzaXpl
LmhlaWdodCgpKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworSW50UmVjdCBT
Y3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQoreworICAgIGlmIChwYXJ0ID09
IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9u
RW5kUGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCkKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKworICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsKKyAg
ICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsK
KyAgICAgICAgaW50IHkgPSBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7Cisg
ICAgICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KQorICAgICAgICAgICAgcmV0
dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBzaXplLndp
ZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworCisgICAgICAgIC8vIEZvcndhcmRCdXR0b25TdGFydFBhcnQgKGFsdGVybmF0ZSBidXR0
b24pCisgICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgbV90cm91Z2hCb3Jk
ZXJXaWR0aCArIHNpemUud2lkdGgoKSwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
KyAgICB9CisKKyAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhcgorICAgIGludCB4ID0gc2Nyb2xsYmFy
LT54KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOworICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXItPnkoKSArIHNj
cm9sbGJhci0+aGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIEZvcndhcmRCdXR0b25TdGFy
dFBhcnQgKGFsdGVybmF0ZSBidXR0b24pCisgICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFy
LT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoICsgc2l6ZS5oZWlnaHQoKSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKK30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tS
ZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGJvb2wpCit7CisgICAgLy8gVGhl
IHBhZGRpbmcgYWxvbmcgdGhlIHRodW1iIG1vdmVtZW50IGF4aXMgaW5jbHVkZXMgdGhlIHRyb3Vn
aCBib3JkZXIKKyAgICAvLyBwbHVzIHRoZSBzaXplIG9mIHN0ZXBwZXIgc3BhY2luZyAodGhlIHNw
YWNlIGJldHdlZW4gdGhlIHN0ZXBwZXIgYW5kCisgICAgLy8gdGhlIHBsYWNlIHdoZXJlIHRoZSB0
aHVtYiBzdG9wcykuIFRoZXJlIGlzIG9mdGVuIG5vIHN0ZXBwZXIgc3BhY2luZy4KKyAgICBpbnQg
bW92ZW1lbnRBeGlzUGFkZGluZyA9IG1fdHJvdWdoQm9yZGVyV2lkdGggKyBtX3N0ZXBwZXJTcGFj
aW5nOworCisgICAgLy8gVGhlIGZhdG5lc3Mgb2YgdGhlIHNjcm9sbGJhciBvbiB0aGUgbm9uLW1v
dmVtZW50IGF4aXMuCisgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3Jv
bGxiYXItPmNvbnRyb2xTaXplKCkpOworCisgICAgaW50IHN0YXJ0QnV0dG9uc09mZnNldCA9IDA7
CisgICAgaW50IGJ1dHRvbnNXaWR0aCA9IDA7CisgICAgaWYgKG1faGFzRm9yd2FyZEJ1dHRvblN0
YXJ0UGFydCkgeworICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9zdGVwcGVyU2l6ZTsK
KyAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisgICAgfQorICAgIGlmICht
X2hhc0JhY2tCdXR0b25TdGFydFBhcnQpIHsKKyAgICAgICAgc3RhcnRCdXR0b25zT2Zmc2V0ICs9
IG1fc3RlcHBlclNpemU7CisgICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXplOwor
ICAgIH0KKyAgICBpZiAobV9oYXNCYWNrQnV0dG9uRW5kUGFydCkKKyAgICAgICAgYnV0dG9uc1dp
ZHRoICs9IG1fc3RlcHBlclNpemU7CisgICAgaWYgKG1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQp
CisgICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXplOworCisgICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIC8v
IE9uY2UgdGhlIHNjcm9sbGJhciBiZWNvbWVzIHNtYWxsZXIgdGhhbiB0aGUgbmF0dXJhbCBzaXpl
IG9mIHRoZQorICAgICAgICAvLyB0d28gYnV0dG9ucywgdGhlIHRyYWNrIGRpc2FwcGVhcnMuCisg
ICAgICAgIGlmIChzY3JvbGxiYXItPndpZHRoKCkgPCAyICogdGhpY2tuZXNzKQorICAgICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54
KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0LCBzY3JvbGxiYXIt
PnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0aCgpIC0gKDIgKiBt
b3ZlbWVudEF4aXNQYWRkaW5nKSAtIGJ1dHRvbnNXaWR0aCwgdGhpY2tuZXNzKTsKKyAgICB9CisK
KyAgICBpZiAoc2Nyb2xsYmFyLT5oZWlnaHQoKSA8IDIgKiB0aGlja25lc3MpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9s
bGJhci0+eSgpICsgbW92ZW1lbnRBeGlzUGFkZGluZyArIHN0YXJ0QnV0dG9uc09mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSAoMiAqIG1v
dmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoKTsKK30KKworSW50UmVjdCBTY3JvbGxi
YXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCit7CisgICAgSW50UmVjdCB0cmFj
a1JlY3QgPSBjb25zdHJhaW5UcmFja1JlY3RUb1RyYWNrUGllY2VzKHNjcm9sbGJhciwgdW5jb25z
dHJhaW5lZFRyYWNrUmVjdCk7CisgICAgaW50IHRodW1iUG9zID0gdGh1bWJQb3NpdGlvbihzY3Jv
bGxiYXIpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0LngoKSArIHRodW1iUG9z
LCB0cmFja1JlY3QueSgpICsgKHRyYWNrUmVjdC5oZWlnaHQoKSAtIG1fdGh1bWJGYXRuZXNzKSAv
IDIsIHRodW1iTGVuZ3RoKHNjcm9sbGJhciksIG1fdGh1bWJGYXRuZXNzKTsgCisKKyAgICAvLyBW
ZXJ0aWNhbFNjcm9sbGJhcgorICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyAodHJh
Y2tSZWN0LndpZHRoKCkgLSBtX3RodW1iRmF0bmVzcykgLyAyLCB0cmFja1JlY3QueSgpICsgdGh1
bWJQb3MsIG1fdGh1bWJGYXRuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKTsKK30KKworYm9v
bCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgdGhlIFNjcm9sbGJhckNvbnRy
b2xQYXJ0TWFzayBiYXNlZCBvbiB0aGUgZGFtYWdlUmVjdAorICAgIFNjcm9sbGJhckNvbnRyb2xQ
YXJ0TWFzayBzY3JvbGxNYXNrID0gTm9QYXJ0OworCisgICAgSW50UmVjdCBiYWNrQnV0dG9uU3Rh
cnRQYWludFJlY3Q7CisgICAgSW50UmVjdCBiYWNrQnV0dG9uRW5kUGFpbnRSZWN0OworICAgIElu
dFJlY3QgZm9yd2FyZEJ1dHRvblN0YXJ0UGFpbnRSZWN0OworICAgIEludFJlY3QgZm9yd2FyZEJ1
dHRvbkVuZFBhaW50UmVjdDsKKyAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxiYXIpKSB7CisgICAg
ICAgIGJhY2tCdXR0b25TdGFydFBhaW50UmVjdCA9IGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwg
QmFja0J1dHRvblN0YXJ0UGFydCwgdHJ1ZSk7CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVy
c2VjdHMoYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sg
fD0gQmFja0J1dHRvblN0YXJ0UGFydDsKKyAgICAgICAgYmFja0J1dHRvbkVuZFBhaW50UmVjdCA9
IGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwgQmFja0J1dHRvbkVuZFBhcnQsIHRydWUpOworICAg
ICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGJhY2tCdXR0b25FbmRQYWludFJlY3QpKQor
ICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBCYWNrQnV0dG9uRW5kUGFydDsKKyAgICAgICAgZm9y
d2FyZEJ1dHRvblN0YXJ0UGFpbnRSZWN0ID0gZm9yd2FyZEJ1dHRvblJlY3Qoc2Nyb2xsYmFyLCBG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50
ZXJzZWN0cyhmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QpKQorICAgICAgICAgICAgc2Nyb2xs
TWFzayB8PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OworICAgICAgICBmb3J3YXJkQnV0dG9uRW5k
UGFpbnRSZWN0ID0gZm9yd2FyZEJ1dHRvblJlY3Qoc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uRW5k
UGFydCwgdHJ1ZSk7CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoZm9yd2FyZEJ1
dHRvbkVuZFBhaW50UmVjdCkpCisgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0
b25FbmRQYXJ0OworICAgIH0KKworICAgIEludFJlY3QgdHJhY2tQYWludFJlY3QgPSB0cmFja1Jl
Y3Qoc2Nyb2xsYmFyLCB0cnVlKTsKKyAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKHRyYWNr
UGFpbnRSZWN0KSkKKyAgICAgICAgc2Nyb2xsTWFzayB8PSBUcmFja0JHUGFydDsKKworICAgIGlm
IChtX3Ryb3VnaFVuZGVyU3RlcHBlcnMgJiYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQ
YXJ0CisgICAgICAgICAgICB8fCBzY3JvbGxNYXNrICYgQmFja0J1dHRvbkVuZFBhcnQKKyAgICAg
ICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0CisgICAgICAgICAg
ICB8fCBzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpKQorICAgICAgICBzY3JvbGxN
YXNrIHw9IFRyYWNrQkdQYXJ0OworCisgICAgYm9vbCB0aHVtYlByZXNlbnQgPSBoYXNUaHVtYihz
Y3JvbGxiYXIpOworICAgIEludFJlY3QgY3VycmVudFRodW1iUmVjdDsKKyAgICBpZiAodGh1bWJQ
cmVzZW50KSB7CisgICAgICAgIEludFJlY3QgdHJhY2sgPSB0cmFja1JlY3Qoc2Nyb2xsYmFyLCBm
YWxzZSk7CisgICAgICAgIGN1cnJlbnRUaHVtYlJlY3QgPSB0aHVtYlJlY3Qoc2Nyb2xsYmFyLCB0
cmFjayk7CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoY3VycmVudFRodW1iUmVj
dCkpCisgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IFRodW1iUGFydDsKKyAgICB9CisKKyAgICBT
Y3JvbGxiYXJDb250cm9sUGFydE1hc2sgYWxsQnV0dG9ucyA9IEJhY2tCdXR0b25TdGFydFBhcnQg
fCBCYWNrQnV0dG9uRW5kUGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfCBGb3J3YXJkQnV0dG9uRW5kUGFydDsKKyAg
ICBpZiAoc2Nyb2xsTWFzayAmIFRyYWNrQkdQYXJ0IHx8IHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQg
fHwgc2Nyb2xsTWFzayAmIGFsbEJ1dHRvbnMpCisgICAgICAgIHBhaW50U2Nyb2xsYmFyQmFja2dy
b3VuZChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhcik7CisgICAgICAgIHBhaW50VHJhY2tCYWNr
Z3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCB0cmFja1BhaW50UmVjdCk7CisKKyAg
ICAvLyBQYWludCB0aGUgYmFjayBhbmQgZm9yd2FyZCBidXR0b25zLgorICAgIGlmIChzY3JvbGxN
YXNrICYgQmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3ND
b250ZXh0LCBzY3JvbGxiYXIsIGJhY2tCdXR0b25TdGFydFBhaW50UmVjdCwgQmFja0J1dHRvblN0
YXJ0UGFydCk7CisgICAgaWYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydCkKKyAgICAg
ICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGJhY2tCdXR0b25FbmRQ
YWludFJlY3QsIEJhY2tCdXR0b25FbmRQYXJ0KTsKKyAgICBpZiAoc2Nyb2xsTWFzayAmIEZvcndh
cmRCdXR0b25TdGFydFBhcnQpCisgICAgICAgIHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwg
c2Nyb2xsYmFyLCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QsIEZvcndhcmRCdXR0b25TdGFy
dFBhcnQpOworICAgIGlmIChzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCisgICAg
ICAgIHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBmb3J3YXJkQnV0dG9u
RW5kUGFpbnRSZWN0LCBGb3J3YXJkQnV0dG9uRW5kUGFydCk7CisKKyAgICAvLyBQYWludCB0aGUg
dGh1bWIuCisgICAgaWYgKHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQpCisgICAgICAgIHBhaW50VGh1
bWIoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGN1cnJlbnRUaHVtYlJlY3QpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnNob3VsZENlbnRlck9u
VGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2
ZW50KQoreworICAgIHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSAmJiBldmVudC5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uKTsKK30KKwor
aW50IFNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJv
bFNpemUpCit7CisgICAgcmV0dXJuIG1fdGh1bWJGYXRuZXNzICsgKG1fdHJvdWdoQm9yZGVyV2lk
dGggKiAyKTsKK30KKworSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUd0azo6YnV0dG9uU2l6ZShTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKG1f
dGh1bWJGYXRuZXNzLCBtX3N0ZXBwZXJTaXplKTsKKworICAgIC8vIEhvcml6b250YWxTY3JvbGxi
YXIKKyAgICByZXR1cm4gSW50U2l6ZShtX3N0ZXBwZXJTaXplLCBtX3RodW1iRmF0bmVzcyk7Cit9
CisKK2ludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIG1fbWluVGh1bWJMZW5ndGg7Cit9
CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0
ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2RmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKQEAgLTAsMCArMSw4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjcm9s
bGJhclRoZW1lR3RrX2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVHdGtfaAorCisjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTY3JvbGxiYXI7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lR3RrIDogcHVibGljIFNjcm9sbGJh
clRoZW1lQ29tcG9zaXRlIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxiYXJUaGVtZUd0aygpOworICAg
IHZpcnR1YWwgflNjcm9sbGJhclRoZW1lR3RrKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0
dG9ucyhTY3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBi
b29sKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdHJh
Y2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCk7CisgICAgSW50UmVjdCB0aHVtYlJl
Y3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJh
Y2tSZWN0KTsKKyAgICBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFNjcm9s
bGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsK
KyAgICB2b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJh
clRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRUaHVtYihHcmFw
aGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Ny
b2xsYmFyQ29udHJvbFNpemUpOworICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9s
bGJhclRoZW1lQ2xpZW50Kik7CisgICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNj
cm9sbGJhclRoZW1lQ2xpZW50Kik7CisKKyAgICAvLyBUT0RPOiBUaGVzZSBhcmUgdGhlIGRlZmF1
bHQgR1RLKyB2YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhlc2UgZnJvbSB0
aGUgdGhlbWUgaXRzZWxmLgorICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGlt
ZXJEZWxheSgpIHsgcmV0dXJuIDAuMjA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xs
VGltZXJEZWxheSgpIHsgcmV0dXJuIDAuMDI7IH0KKyAgICB2b2lkIHVwZGF0ZVRoZW1lUHJvcGVy
dGllcygpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7CisgICAg
dm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZvaWQg
dW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworCitwcm90ZWN0ZWQ6
CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrU3R5bGVDb250ZXh0KiBtX2NvbnRl
eHQ7CisjZW5kaWYKKyAgICBpbnQgbV90aHVtYkZhdG5lc3M7CisgICAgaW50IG1fdHJvdWdoQm9y
ZGVyV2lkdGg7CisgICAgaW50IG1fc3RlcHBlclNpemU7CisgICAgaW50IG1fc3RlcHBlclNwYWNp
bmc7CisgICAgaW50IG1fbWluVGh1bWJMZW5ndGg7CisgICAgZ2Jvb2xlYW4gbV90cm91Z2hVbmRl
clN0ZXBwZXJzOworICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKKyAg
ICBnYm9vbGVhbiBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0OworICAgIGdib29sZWFuIG1faGFz
QmFja0J1dHRvblN0YXJ0UGFydDsKKyAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25FbmRQYXJ0
OworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3Rr
Mi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2YmI4YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcApA
QCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVHdGsu
aCIKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgi
CisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxi
YWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFNjcm9sbGJhclRoZW1l
R3RrKiBzY3JvbGxiYXJUaGVtZSkKK3sKKyAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhlbWVQ
cm9wZXJ0aWVzKCk7Cit9CisKK1Njcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygp
Cit7CisgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgZ19zaWduYWxfY29ubmVjdChz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5n
ZXQoKSktPmd0a0hTY3JvbGxiYXIoKSwKKyAgICAgICAgICJzdHlsZS1zZXQiLCBHX0NBTExCQUNL
KGd0a1N0eWxlU2V0Q2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKK3sKKyAgICBHdGtXaWRnZXQqIHNjcm9sbGJhciA9
IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LmdldCgpKS0+Z3RrSFNjcm9sbGJhcigpOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHNjcm9s
bGJhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX3dpZHRoIiwgJm1fdGh1bWJG
YXRuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2hfYm9yZGVyIiwgJm1fdHJv
dWdoQm9yZGVyV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc2l6ZSIs
ICZtX3N0ZXBwZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2gtdW5kZXIt
c3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICJoYXMtYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3
YXJkQnV0dG9uRW5kUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFy
eS1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWJhY2t3YXJkLXN0ZXBwZXIiLCAmbV9o
YXNCYWNrQnV0dG9uRW5kUGFydCwgTlVMTCk7CisgICAgbV9taW5UaHVtYkxlbmd0aCA9IGd0a19y
YW5nZV9nZXRfbWluX3NsaWRlcl9zaXplKEdUS19SQU5HRShzY3JvbGxiYXIpKTsKKyAgICB1cGRh
dGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKTsKK30KKworc3RhdGljIEd0a1dpZGdldCogZ2V0
V2lkZ2V0Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7Cisg
ICAgUmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihS
ZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOworICAgIHJldHVybiBzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyB0aGVtZS0+Z3RrVlNjcm9sbGJh
cigpIDogdGhlbWUtPmd0a0hTY3JvbGxiYXIoKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8v
IFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJz
IHByb3BlcnR5IGlzIHRydWUsIHRoaXMKKyAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBv
ZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQor
ICAgIC8vIHRyYWNrIHJlY3QuCisgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsK
KyAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQorICAgICAgICBmdWxsU2Nyb2xsYmFyUmVj
dCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndp
ZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0KTsKKyAgICBJbnRSZWN0
IHBhaW50UmVjdChJbnRQb2ludCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5zaXplKCkpOworICAgIHdp
ZGdldENvbnRleHQuZ3RrUGFpbnRCb3gocGFpbnRSZWN0LCBnZXRXaWRnZXRGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVEFURV9BQ1RJ
VkUsIEdUS19TSEFET1dfSU4sICJ0cm91Z2giKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBJbnRSZWN0IGZ1bGxTY3JvbGxi
YXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJh
ci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdD
b250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QpOworICAgIHdp
ZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFNjcm9sbGJhclJlY3QsIGdldFdpZGdldEZvclNj
cm9sbGJhcihzY3JvbGxiYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NU
QVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNjcm9sbGVkX3dpbmRvdyIpOworfQorCit2b2lk
IFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIp
OworICAgIGdib29sZWFuIGFjdGl2YXRlU2xpZGVyOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0
KHdpZGdldCwgImFjdGl2YXRlLXNsaWRlciIsICZhY3RpdmF0ZVNsaWRlciwgTlVMTCk7CisKKyAg
ICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKKyAgICBHdGtTaGFk
b3dUeXBlIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKKyAgICBpZiAoYWN0aXZhdGVTbGlk
ZXIgJiYgc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkgeworICAgICAgICBz
dGF0ZVR5cGUgPSBHVEtfU1RBVEVfQUNUSVZFOworICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NI
QURPV19JTjsKKyAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVt
YlBhcnQgfHwgc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAg
c3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOworCisgICAgLy8gVGhlIGFkanVzdG1lbnQg
Y29udHJvbHMgdGhlIHJlbmRlcmluZyBvZiB0aGUgc2Nyb2xsYmFyIHRodW1iLiBJZiBpdCdzIG5v
dCBzZXQKKyAgICAvLyBwcm9wZXJseSB0aGUgdGhlbWUgbWF5IG5vdCBkcmF3IHRoZSB0aHVtYiBi
b3JkZXJzIHByb3Blcmx5LgorICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBndGtfcmFu
Z2VfZ2V0X2FkanVzdG1lbnQoR1RLX1JBTkdFKHdpZGdldCkpOworICAgIGd0a19hZGp1c3RtZW50
X3NldF92YWx1ZShhZGp1c3RtZW50LCBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSk7CisgICAgZ3Rr
X2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkanVzdG1lbnQsIDApOworICAgIGd0a19hZGp1c3RtZW50
X3NldF91cHBlcihhZGp1c3RtZW50LCBzY3JvbGxiYXItPm1heGltdW0oKSk7CisKKyAgICBHdGtP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOworICAg
IGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAg
ICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50LCByZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw7Cisg
ICAgfSBlbHNlCisgICAgICAgIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3NpemUoYWRqdXN0bWVu
dCwgcmVjdC53aWR0aCgpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29u
dGV4dChjb250ZXh0LCByZWN0KTsKKyAgICBJbnRSZWN0IHNsaWRlclJlY3QoSW50UG9pbnQoKSwg
cmVjdC5zaXplKCkpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTbGlkZXIoc2xpZGVyUmVj
dCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzbGlkZXIiLCBvcmllbnRhdGlvbik7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQoreworICAgIC8vIFRoZSBidXR0b25zIHdpbGwg
YmUgZGlzYWJsZWQgaWYgdGhlIHRodW1iIGlzIGFzIHRoZSBhcHByb3ByaWF0ZSBleHRyZW1lLgor
ICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VUOworICAgIEd0a1N0
YXRlVHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7CisgICAgYm9vbCBwcmVz
c2VkID0gKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKTsKKworICAgIGlmICgoQmFj
a0J1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQorICAg
ICAgICB8fCAoQmFja0J1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKSkKKyAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpCisgICAgICAgIHx8IChG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkg
IT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7CisgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9OT1JNQUw7CisgICAgICAgIGlmIChwcmVzc2VkKSB7CisgICAgICAgICAgICBzdGF0ZVR5cGUg
PSBHVEtfU1RBVEVfQUNUSVZFOworICAgICAgICAgICAgc2hhZG93VHlwZSA9IEdUS19TSEFET1df
SU47CisgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkp
CisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7CisgICAgfQorCisg
ICAgLy8gVGhlbWVzIGRldGVybWluZSBob3cgdG8gZHJhdyB0aGUgYnV0dG9uICh3aGljaCBidXR0
b24gdG8gZHJhdykgYmFzZWQgb24gdGhlIGFsbG9jYXRpb24KKyAgICAvLyBvZiB0aGUgd2lkZ2V0
LiBXaGVyZSB0aGUgdGFyZ2V0IHJlY3QgaXMgaW4gcmVsYXRpb24gdG8gdGhlIHRvdGFsIHdpZGdl
dCBhbGxvY2F0aW9uCisgICAgLy8gZGV0ZXJtaW5lcyB0aGUgYnV0dG9uLgorICAgIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOworICAg
IGludCBidXR0b25TaXplID0gKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IHJl
Y3QuaGVpZ2h0KCkgOiByZWN0LndpZHRoKCk7CisgICAgaW50IHRvdGFsQWxsb2NhdGlvbiA9IGJ1
dHRvblNpemUgKiA1OyAvLyBPbmUgc3BhY2UgZm9yIGVhY2ggYnV0dG9uIGFuZCBvbmUgZXh0cmEu
CisgICAgaW50IGJ1dHRvbk9mZnNldCA9IDA7CisgICAgaWYgKEZvcndhcmRCdXR0b25TdGFydFBh
cnQgPT0gcGFydCkKKyAgICAgICAgYnV0dG9uT2Zmc2V0ID0gYnV0dG9uU2l6ZTsKKyAgICBlbHNl
IGlmIChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0KQorICAgICAgICBidXR0b25PZmZzZXQgPSAz
ICogYnV0dG9uU2l6ZTsKKyAgICBlbHNlIGlmIChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBwYXJ0
KQorICAgICAgICBidXR0b25PZmZzZXQgPSA0ICogYnV0dG9uU2l6ZTsKKworICAgIC8vIE5vdyB3
ZSB3YW50IHRoZSBhbGxvY2F0aW9uIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4gb2YgdGhl
IHBhaW50ZWQgcmVjdC4KKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdpZGdldEZvclNjcm9s
bGJhcihzY3JvbGxiYXIpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtf
d2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOworICAgIGFsbG9jYXRp
b24ueCA9IGFsbG9jYXRpb24ueSA9IDA7CisgICAgYWxsb2NhdGlvbi53aWR0aCA9IHJlY3Qud2lk
dGgoKTsKKyAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAo
b3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgYWxsb2NhdGlvbi5o
ZWlnaHQgPSB0b3RhbEFsbG9jYXRpb247CisgICAgICAgIGFsbG9jYXRpb24ueSAtPSBidXR0b25P
ZmZzZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYWxsb2NhdGlvbi53aWR0aCA9IHRvdGFsQWxs
b2NhdGlvbjsKKyAgICAgICAgYWxsb2NhdGlvbi54IC09IGJ1dHRvbk9mZnNldDsKKyAgICB9Cisg
ICAgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworICAg
IGNvbnN0IGNoYXIqIGRldGFpbCA9IG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8g
InZzY3JvbGxiYXIiIDogImhzY3JvbGxiYXIiOworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQg
d2lkZ2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKKworICAgIEludFJlY3QgYnV0dG9uUmVjdChJ
bnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChi
dXR0b25SZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKKworICAg
IGZsb2F0IGFycm93U2NhbGluZzsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJh
cnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7CisgICAgSW50U2l6ZSBhcnJvd1Np
emUgPSByZWN0LnNpemUoKTsKKyAgICBhcnJvd1NpemUuc2NhbGUoYXJyb3dTY2FsaW5nKTsKKyAg
ICBJbnRSZWN0IGFycm93UmVjdChJbnRQb2ludChidXR0b25SZWN0LngoKSArIChidXR0b25SZWN0
LndpZHRoKCkgLSBhcnJvd1NpemUud2lkdGgoKSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1dHRvblJlY3QueSgpICsgKGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSBhcnJvd1Np
emUuaGVpZ2h0KCkpIC8gMiksCisgICAgICAgICAgICAgICAgICAgICAgYXJyb3dTaXplKTsKKyAg
ICBpZiAocHJlc3NlZCkgeworICAgICAgICBpbnQgYXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rp
c3BsYWNlbWVudFk7CisgICAgICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC14IiwgJmFycm93RGlz
cGxhY2VtZW50WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNl
bWVudC15IiwgJmFycm93RGlzcGxhY2VtZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7CisgICAgICAgIGFycm93UmVjdC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJy
b3dEaXNwbGFjZW1lbnRZKTsKKyAgICB9CisKKyAgICBHdGtBcnJvd1R5cGUgYXJyb3dUeXBlID0g
R1RLX0FSUk9XX0RPV047CisgICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFy
KSB7CisgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19VUDsK
KyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAg
ICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1JJR0hUOworICAgICAgICBpZiAocGFydCA9PSBC
YWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCisgICAgICAg
ICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfTEVGVDsKKyAgICB9CisgICAgd2lkZ2V0Q29udGV4
dC5ndGtQYWludEFycm93KGFycm93UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUs
IGFycm93VHlwZSwgZGV0YWlsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhl
bWVHdGszLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ5YzU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMu
Y3BwCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUd0ay5oIgorCisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBTY3Jv
bGxiYXJUaGVtZUd0ayogc2Nyb2xsYmFyVGhlbWUpCit7CisgICAgc2Nyb2xsYmFyVGhlbWUtPnVw
ZGF0ZVRoZW1lUHJvcGVydGllcygpOworfQorCitTY3JvbGxiYXJUaGVtZUd0azo6U2Nyb2xsYmFy
VGhlbWVHdGsoKQorICAgIDogbV9jb250ZXh0KHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4o
UmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrU2Nyb2xsYmFyU3R5bGUoKSkK
K3sKKyAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
Y29udGV4dCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGll
cygpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbi1zbGlkZXItbGVuZ3RoIiwgJm1fbWluVGh1
bWJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXItd2lkdGgi
LCAmbV90aHVtYkZhdG5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91
Z2gtYm9yZGVyIiwgJm1fdHJvdWdoQm9yZGVyV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzdGVwcGVyLXNpemUiLCAmbV9zdGVwcGVyU2l6ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc3BhY2luZyIsICZtX3N0ZXBwZXJTcGFjaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwg
Jm1fdHJvdWdoVW5kZXJTdGVwcGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Imhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvblN0YXJ0UGFydCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNG
b3J3YXJkQnV0dG9uRW5kUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhh
cy1zZWNvbmRhcnktYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25FbmRQYXJ0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1mb3J3YXJkLXN0
ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3Mo
KTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Cit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19TQ1JPTExCQVIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0
LCBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICBHVEtfU1RZTEVfQ0xBU1NfVkVS
VElDQUwgOiBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICAvLyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3VnaC11bmRlci1z
dGVwcGVycyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCisgICAgLy8gc2hvdWxkIGJlIHRoZSBmdWxs
IHNpemUgb2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91bGQgb25seSBi
ZSB0aGUKKyAgICAvLyB0cmFjayByZWN0LgorICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3Qo
cmVjdCk7CisgICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycykKKyAgICAgICAgZnVsbFNjcm9s
bGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xs
YmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKKworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xh
c3NlcyhtX2NvbnRleHQsIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSk7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7CisK
KyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNjcm9sbGJhclJl
Y3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJSZWN0LndpZHRoKCks
IGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKG1fY29u
dGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgICAgICAgICAg
ICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1bGxTY3JvbGxiYXJSZWN0LnkoKSwgZnVsbFNj
cm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9sbGJhclJlY3QuaGVpZ2h0KCkpOworCisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQpOworfQorCit2b2lkIFNjcm9sbGJh
clRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQoreworICAgIGd0a19zdHlsZV9j
b250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0
Q2xhc3NlcyhtX2NvbnRleHQsIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSk7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgInNjcm9sbGVkLXdpbmRvdyIpOworICAg
IGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCks
IHNjcm9sbGJhci0+aGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZSht
X2NvbnRleHQpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29udGV4
dCk7CisKKyAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKTsKKyAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9j
b250ZXh0LCBvcmllbnRhdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1f
Y29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NMSURFUik7CisKKyAgICBndWludCBmbGFncyA9IDA7
CisgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCisgICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
UFJFTElHSFQ7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKG1fY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0a19yZW5kZXJfc2xpZGVy
KG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gR1RLX09SSUVOVEFUSU9OX1ZF
UlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfcmVzdG9yZShtX2NvbnRleHQpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpw
YWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKK3sK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7CisKKyAgICBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKTsKKyAgICBh
cHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250ZXh0LCBvcmllbnRhdGlvbik7
CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09
IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChCYWNrQnV0dG9u
RW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQorICAgICAgICB8fCAo
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAh
PSBzY3JvbGxiYXItPm1heGltdW0oKSkKKyAgICAgICAgfHwgKEZvcndhcmRCdXR0b25TdGFydFBh
cnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGlt
dW0oKSkpIHsKKyAgICAgICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKQor
ICAgICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAgICBpZiAo
cGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCisgICAgICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICB9IGVsc2UKKyAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KG1fY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0
a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRU
T04pOworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQsIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisKKyAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsICJhcnJvdy1zY2FsaW5nIiwgJmFycm93U2Nh
bGluZywgTlVMTCk7CisKKyAgICBkb3VibGUgYXJyb3dTaXplID0gc3RkOjptaW4ocmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKSAqIGFycm93U2NhbGluZzsKKyAgICBGbG9hdFBvaW50IGFycm93
UG9pbnQocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gYXJyb3dTaXplKSAvIDIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUp
IC8gMik7CisKKyAgICBpZiAoZmxhZ3MgJiBHVEtfU1RBVEVfRkxBR19BQ1RJVkUpIHsKKyAgICAg
ICAgZ2ludCBhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKKyAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteCIsICZhcnJvd0Rpc3BsYWNl
bWVudFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyb3ctZGlzcGxh
Y2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIGFycm93UG9pbnQubW92ZShhcnJvd0Rpc3BsYWNl
bWVudFgsIGFycm93RGlzcGxhY2VtZW50WSk7CisgICAgfQorCisgICAgZ2RvdWJsZSBhbmdsZTsK
KyAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgYW5n
bGUgPSAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0
b25TdGFydFBhcnQpID8gR19QSSA6IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5nbGUgPSAo
cGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFy
dFBhcnQpID8gR19QSSAvIDIgOiAzICogKEdfUEkgLyAyKTsKKyAgICB9CisKKyAgICBndGtfcmVu
ZGVyX2Fycm93KG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFu
Z2xlLCBhcnJvd1BvaW50LngoKSwgYXJyb3dQb2ludC55KCksIGFycm93U2l6ZSk7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vICFHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjI0MTM3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Nl
YXJjaFBvcHVwTWVudUd0ay5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2VhcmNoUG9wdXBNZW51R3RrLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlYXJjaFBvcHVwTWVudUd0azo6U2VhcmNoUG9w
dXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogbV9wb3B1cChhZG9wdFJl
ZihuZXcgUG9wdXBNZW51R3RrKGNsaWVudCkpKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK1BvcHVwTWVudSogU2VhcmNoUG9wdXBNZW51R3RrOjpwb3B1cE1lbnUoKQoreworICAgIHJl
dHVybiBtX3BvcHVwLmdldCgpOworfQorCit2b2lkIFNlYXJjaFBvcHVwTWVudUd0azo6c2F2ZVJl
Y2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNlYXJjaFBvcHVwTWVudUd0azo6
bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNlYXJjaFBvcHVwTWVudUd0azo6
ZW5hYmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3Rr
LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1M2M2M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTZWFyY2hQb3B1cE1lbnVHdGtfaAorI2RlZmluZSBT
ZWFyY2hQb3B1cE1lbnVHdGtfaAorCisjaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgiCisjaW5jbHVk
ZSAiU2VhcmNoUG9wdXBNZW51LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Vh
cmNoUG9wdXBNZW51R3RrIDogcHVibGljIFNlYXJjaFBvcHVwTWVudSB7CitwdWJsaWM6CisgICAg
U2VhcmNoUG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCopOworCisgICAgdmlydHVhbCBQb3B1
cE1lbnUqIHBvcHVwTWVudSgpOworICAgIHZpcnR1YWwgdm9pZCBzYXZlUmVjZW50U2VhcmNoZXMo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRl
bXMpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOworICAgIHZpcnR1YWwgYm9v
bCBlbmFibGVkKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFBvcHVwTWVudUd0az4gbV9wb3B1
cDsKK307CisKK30KKworI2VuZGlmIC8vIFNlYXJjaFBvcHVwTWVudUd0a19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzcwNDBmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2hh
cmVkQnVmZmVyR3RrLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxhYm9yYSBMdGQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaW5jbHVkZSA8
Z2xpYi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgpCit7CisgICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZp
bGVQYXRoKTsKKyAgICBnY2hhciogY29udGVudHM7CisgICAgZ3NpemUgc2l6ZTsKKyAgICBHRXJy
b3IqIGVycm9yID0gMDsKKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZW5hbWUuZGF0
YSgpLCAmY29udGVudHMsICZzaXplLCAmZXJyb3IpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGZ1bGx5IHJlYWQgY29udGVudHMgb2YgZmlsZSAlcyAtICVzIiwgZmlsZW5hbWVGb3JE
aXNwbGF5KGZpbGVQYXRoKS51dGY4KCkuZGF0YSgpLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRz
LCBzaXplKTsKKyAgICBnX2ZyZWUoY29udGVudHMpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFy
ZWRUaW1lckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxYTM1
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsu
Y3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkVGltZXIuaCIK
KworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgZ3VpbnQgc2hhcmVkVGltZXI7CitzdGF0aWMgdm9pZCAoKnNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbikoKTsKKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24odm9pZCAoKmYpKCkpCit7CisgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uID0gZjsK
K30KKworc3RhdGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50ZXIpCit7CisgICAgaWYgKHNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbikKKyAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9u
KCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVy
dmFsKGRvdWJsZSBpbnRlcnZhbCkKK3sKKyAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1bmN0
aW9uKTsKKworICAgIGd1aW50IGludGVydmFsSW5NUyA9IHN0YXRpY19jYXN0PGd1aW50PihpbnRl
cnZhbCAqIDEwMDApOworCisgICAgc3RvcFNoYXJlZFRpbWVyKCk7CisgICAgc2hhcmVkVGltZXIg
PSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX1JFRFJBVywgaW50ZXJ2YWxJbk1TLCB0
aW1lb3V0X2NiLCAwLCAwKTsKK30KKwordm9pZCBzdG9wU2hhcmVkVGltZXIoKQoreworICAgIGlm
IChzaGFyZWRUaW1lciA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiByZW1v
dmVkU291cmNlID0gZ19zb3VyY2VfcmVtb3ZlKHNoYXJlZFRpbWVyKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlbW92ZWRTb3VyY2UsIHJlbW92ZWRTb3VyY2UpOworICAgIHNoYXJlZFRpbWVyID0gMDsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yZjczMTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9Tb3VuZEd0ay5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJTb3VuZC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgc3lzdGVtQmVlcCgpCit7CisgICAgZ2RrX2JlZXAoKTsKK30KKworfQorCisv
LyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzQ0NDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
QEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJETlMuaCIKKyNpbmNsdWRlICJFZGl0
b3IuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1
bWVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6
ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3ZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6ZXMo
VmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1N0cmluZyBzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJp
bmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVybiBTdHJpbmcoKTsg
fQorZmxvYXQgdXNlcklkbGVUaW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gRkxUX01B
WDsgfSAvLyByZXR1cm4gYW4gYXJiaXRyYXJpbHkgaGlnaCB1c2VySWRsZVRpbWUgc28gdGhhdCBy
ZWxlYXNpbmcgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBpc24ndCBwb3N0cG9uZWQKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmYzYmM3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1VzZXJBZ2VudEd0ay5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VXNlckFnZW50R3RrLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZiBPUyhVTklYKQorI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZWxpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIlN5c3Rl
bUluZm8uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBwbGF0Zm9ybUZvclVBU3RyaW5nKCkKK3sKKyNpZiBQTEFURk9STShYMTEpCisgICAgcmV0
dXJuICJYMTEiOworI2VsaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gIiI7CisjZWxpZiBQTEFU
Rk9STShNQUMpCisgICAgcmV0dXJuICJNYWNpbnRvc2giOworI2VsaWYgZGVmaW5lZChHREtfV0lO
RE9XSU5HX0RJUkVDVEZCKQorICAgIHJldHVybiAiRGlyZWN0RkIiOworI2Vsc2UKKyAgICByZXR1
cm4gIlVua25vd24iOworI2VuZGlmCit9CisKK3N0YXRpYyBTdHJpbmcgcGxhdGZvcm1WZXJzaW9u
Rm9yVUFTdHJpbmcoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1YU9TVmVy
c2lvbiwgKFN0cmluZygpKSk7CisgICAgaWYgKCF1YU9TVmVyc2lvbi5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB1YU9TVmVyc2lvbjsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgdWFPU1ZlcnNp
b24gPSB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7CisjZWxpZiBPUyhEQVJXSU4pCisjaWYg
Q1BVKFg4NikKKyAgICB1YU9TVmVyc2lvbiA9ICJJbnRlbCBNYWMgT1MgWCI7CisjZWxzZQorICAg
IHVhT1NWZXJzaW9uID0gIlBQQyBNYWMgT1MgWCI7CisjZW5kaWYKKyNlbGlmIE9TKFVOSVgpCisg
ICAgc3RydWN0IHV0c25hbWUgbmFtZTsKKyAgICBpZiAodW5hbWUoJm5hbWUpICE9IC0xKQorICAg
ICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZzo6Zm9ybWF0KCIlcyAlcyIsIG5hbWUuc3lzbmFtZSwg
bmFtZS5tYWNoaW5lKTsKKyAgICBlbHNlCisgICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJV
bmtub3duIik7CisjZWxzZQorICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nKCJVbmtub3duIik7Cisj
ZW5kaWYKKyAgICByZXR1cm4gdWFPU1ZlcnNpb247Cit9CisKK1N0cmluZyBzdGFuZGFyZFVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBhcHBsaWNh
dGlvblZlcnNpb24pCit7CisgICAgLy8gQ3JlYXRlIGEgZGVmYXVsdCB1c2VyIGFnZW50IHN0cmlu
ZyB3aXRoIGEgbGliZXJhbCBpbnRlcnByZXRhdGlvbiBvZiAKKyAgICAvLyBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1VzZXJfQWdlbnRfU3RyaW5nc19SZWZlcmVuY2UK
KyAgICAvLworICAgIC8vIEZvcm1pbmcgYSBmdW5jdGlvbmFsIHVzZXIgYWdlbnQgaXMgcmVhbGx5
IGRpZmZpY3VsdC4gV2UgbXVzdCBtZW50aW9uIFNhZmFyaSwgYmVjYXVzZSBzb21lCisgICAgLy8g
c2l0ZXMgY2hlY2sgZm9yIHRoYXQgd2hlbiBkZXRlY3RpbmcgV2ViS2l0IGJyb3dzZXJzLiBBZGRp
dGlvbmFsbHkgc29tZSBzaXRlcyBhc3N1bWUgdGhhdAorICAgIC8vIGJyb3dzZXJzIHRoYXQgYXJl
ICJTYWZhcmkiIGJ1dCBub3QgcnVubmluZyBvbiBPUyBYIGFyZSB0aGUgU2FmYXJpIGlPUyBicm93
c2VyLCBzbyB3ZQorICAgIC8vIGFsc28gY2xhaW0gdG8gYmUgIENocm9taXVtLiBHZXR0aW5nIHRo
aXMgd3JvbmcgY2FuIGNhdXNlIHNpdGVzIHRvIGxvYWQgdGhlIHdyb25nIEphdmFTY3JpcHQsCisg
ICAgLy8gQ1NTLCBvciBjdXN0b20gZm9udHMuIEluIHNvbWUgY2FzZXMgc2l0ZXMgd29uJ3QgbG9h
ZCByZXNvdXJjZXMgYXQgYWxsLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQ1N0cmlu
ZywgdWFWZXJzaW9uLCAoU3RyaW5nOjpmb3JtYXQoIiVpLiVpIiwgV0VCS0lUX1VTRVJfQUdFTlRf
TUFKT1JfVkVSU0lPTiwgV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTikudXRmOCgpKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0YXRpY1VBLCAoU3RyaW5n
Ojpmb3JtYXQoIk1vemlsbGEvNS4wICglczsgJXMpIEFwcGxlV2ViS2l0LyVzIChLSFRNTCwgbGlr
ZSBHZWNrbykgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJDaHJvbWl1bS8yNS4wLjEzNDkuMiBDaHJvbWUvMjUuMC4xMzQ5
LjIgU2FmYXJpLyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUZvclVBU3RyaW5nKCksIHBsYXRmb3JtVmVy
c2lvbkZvclVBU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YVZlcnNpb24uZGF0YSgp
LCB1YVZlcnNpb24uZGF0YSgpKSkpOworICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gc3RhdGljVUE7CisKKyAgICBTdHJpbmcgZmluYWxBcHBsaWNhdGlv
blZlcnNpb24gPSBhcHBsaWNhdGlvblZlcnNpb247CisgICAgaWYgKGZpbmFsQXBwbGljYXRpb25W
ZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgZmluYWxBcHBsaWNhdGlvblZlcnNpb24gPSB1YVZl
cnNpb24uZGF0YSgpOworCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyAlcy8lcyIsIHN0
YXRpY1VBLnV0ZjgoKS5kYXRhKCksIGFwcGxpY2F0aW9uTmFtZS51dGY4KCkuZGF0YSgpLCBmaW5h
bEFwcGxpY2F0aW9uVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5o
LmluIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTUwYjdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbgpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVc2VyQWdlbnRH
dGtfaAorI2RlZmluZSBVc2VyQWdlbnRHdGtfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjZGVmaW5lIFdFQktJVF9V
U0VSX0FHRU5UX01BSk9SX1ZFUlNJT04gKEBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9O
QCkKKyNkZWZpbmUgV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTiAoQFdFQktJVF9VU0VS
X0FHRU5UX01JTk9SX1ZFUlNJT05AKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBz
dGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSA9ICIiLCBjb25z
dCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVyc2lvbiA9ICIiKTsKKworfQorCisjZW5kaWYgLy8gVXNl
ckFnZW50R3RrX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRHdGsu
Y3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjIwM2YzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRn
ZXQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhvc3RXaW5k
b3cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaWRnZXQ6OldpZGdldChQbGF0Zm9ybVdp
ZGdldCB3aWRnZXQpCit7CisgICAgaW5pdCh3aWRnZXQpOworfQorCitXaWRnZXQ6On5XaWRnZXQo
KQoreworICAgIEFTU0VSVCghcGFyZW50KCkpOworCisgICAgcmVsZWFzZVBsYXRmb3JtV2lkZ2V0
KCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCit7Cit9CisKK3Zv
aWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgU2Nyb2xs
VmlldyogdmlldyA9IHJvb3QoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAg
ICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1cnNvcihjdXJzb3IpOworfQorCit2b2lkIFdpZGdl
dDo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBpZiAoaXNQYXJl
bnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93
KHBsYXRmb3JtV2lkZ2V0KCkpOworfQorCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgc2V0
U2VsZlZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRm
b3JtV2lkZ2V0KCkpCisgICAgICAgIGd0a193aWRnZXRfaGlkZShwbGF0Zm9ybVdpZGdldCgpKTsK
K30KKwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBp
c1NlbGVjdGVkKQoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gU2VlIGlmIHRoZSBwbGF0Zm9ybVdpZGdldCBoYXMgYSB3ZWJraXQtd2lkZ2V0
LWlzLXNlbGVjdGVkIHByb3BlcnR5CisgICAgLy8gYW5kIHNldCBpdCBhZnRlcndhcmRzLgorICAg
IEdQYXJhbVNwZWMqIHNwZWMgPSBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5KEdfT0JKRUNU
X0dFVF9DTEFTUyhwbGF0Zm9ybVdpZGdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0LXdpZGdldC1pcy1zZWxlY3RlZCIpOwor
ICAgIGlmICghc3BlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19vYmplY3Rfc2V0KHBsYXRm
b3JtV2lkZ2V0KCksICJ3ZWJraXQtd2lkZ2V0LWlzLXNlbGVjdGVkIiwgaXNTZWxlY3RlZCwgTlVM
TCk7Cit9CisKK0ludFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAoreworICAgIHJldHVy
biBtX2ZyYW1lOworfQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgbV9mcmFtZSA9IHJlY3Q7CisgICAgZnJhbWVSZWN0c0NoYW5nZWQoKTsK
K30KKwordm9pZCBXaWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCit7CisgICAgaWYgKCFw
bGF0Zm9ybVdpZGdldCgpKQorICAgICAgICAgcmV0dXJuOworICAgIGdfb2JqZWN0X3VucmVmKHBs
YXRmb3JtV2lkZ2V0KCkpOworfQorCit2b2lkIFdpZGdldDo6cmV0YWluUGxhdGZvcm1XaWRnZXQo
KQoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgIHJldHVybjsKKyAgICBn
X29iamVjdF9yZWZfc2luayhwbGF0Zm9ybVdpZGdldCgpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTlmNWRhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTAsMCArMSwyNDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIEdka1BpeG1hcCogZ1NjcmF0Y2hCdWZmZXIgPSAwOworc3RhdGljIHZv
aWQgcHVyZ2VTY3JhdGNoQnVmZmVyKCkKK3sKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGdTY3JhdGNoQnVmZmVyKTsKKyAgICBnU2NyYXRjaEJ1ZmZlciA9
IDA7Cit9CisKKy8vIFdpZGdldCByZW5kZXJpbmcgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRo
ZSBidWZmZXIgZm9yIHRoZSBpbnRlcm1lZGlhdGUKKy8vIHJlbmRlci4gSW5zdGVhZCBvZiBjcmVh
dGluZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBvcGVyYXRpb24sCisvLyB3
ZSBjcmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHB1cmdlZCB2aWEg
YSB0aW1lci4KK2NsYXNzIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIDogcHVibGljIFRpbWVyQmFz
ZSB7Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIHsgcHVyZ2VTY3JhdGNoQnVm
ZmVyKCk7IH0KK307CisKK3N0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCBwdXJn
ZVNjcmF0Y2hCdWZmZXJUaW1lciwgKCkpOworICAgIGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7Cisg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDIpOworfQorCitXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorICAgIDogbV9ncmFw
aGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICwgbV90YXJnZXRSZWN0KHRhcmdldFJl
Y3QpCisgICAgLCBtX2hhZEVycm9yKGZhbHNlKQoreworICAgIFJlbmRlclRoZW1lR3RrKiB0aGVt
ZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLmdldCgpKTsKKworICAgIC8vIEZhbGxiYWNrOiBXZSBmYWlsZWQgdG8gY3JlYXRlIGFuIFJH
QkEgY29sb3JtYXAgZWFybGllciwgc28gd2UgY2Fubm90IHByb3Blcmx5IHBhaW50IAorICAgIC8v
IHRvIGEgdGVtcG9yYXJ5IHN1cmZhY2UgYW5kIHByZXNlcnZlIHRyYW5zcGFyZW5jeS4gVG8gZW5z
dXJlIGRlY2VudCB3aWRnZXQgcmVuZGVyaW5nLCBqdXN0CisgICAgLy8gcGFpbnQgZGlyZWN0bHkg
dG8gdGhlIHRhcmdldCBkcmF3YWJsZS4gVGhpcyB3aWxsIG5vdCByZW5kZXIgQ1NTIHJvdGF0aW9u
YWwgdHJhbnNmb3JtcyBwcm9wZXJseS4KKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZl
UkdCQUNvbG9ybWFwICYmIGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKKyAgICAgICAg
bV90YXJnZXQgPSBncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gV2UgbmV2ZXIgd2FudCB0byBjcmVhdGUgYSBzY3JhdGNoIGJ1ZmZl
ciBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiBvdXIgdGFyZ2V0IEdka0RyYXdhYmxlLgorICAgIC8v
IFRoaXMgcHJldmVudHMgZ2lhbnQgcGl4bWFwIGFsbG9jYXRpb25zIGZvciB2ZXJ5IGxhcmdlIHdp
ZGdldHMgaW4gc21hbGxlciB2aWV3cy4KKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1l
bnQgdGhpcyBjaGVjayBmb3IgV2ViS2l0MiBhcyB3ZWxsLgorICAgIGlmIChncmFwaGljc0NvbnRl
eHQtPmdka1dpbmRvdygpKSB7CisgICAgICAgIGludCBtYXhXaWR0aCA9IDAsIG1heEhlaWdodCA9
IDA7CisgICAgICAgIGdldEdka0RyYXdhYmxlU2l6ZShncmFwaGljc0NvbnRleHQtPmdka1dpbmRv
dygpLCAmbWF4V2lkdGgsICZtYXhIZWlnaHQpOworICAgICAgICBtX3RhcmdldFJlY3Quc2V0U2l6
ZShtX3RhcmdldFJlY3Quc2l6ZSgpLnNocnVua1RvKEludFNpemUobWF4V2lkdGgsIG1heEhlaWdo
dCkpKTsKKyAgICB9CisKKyAgICAvLyBXaWRnZXRzIHNvbWV0aW1lcyBuZWVkIHRvIGRyYXcgb3V0
c2lkZSB0aGVpciBib3VuZGFyaWVzIGZvciB0aGluZ3Mgc3VjaCBhcworICAgIC8vIGV4dGVyaW9y
IGZvY3VzLiBXZSB3YW50IHRvIGFsbG9jYXRlIGEgc29tZSBleHRyYSBwaXhlbHMgaW4gb3VyIHN1
cmZhY2UgZm9yIHRoaXMuCisgICAgc3RhdGljIGludCBleHRyYVNwYWNlID0gMTU7CisgICAgbV90
YXJnZXRSZWN0LmluZmxhdGUoZXh0cmFTcGFjZSk7CisKKyAgICAvLyBUaGlzIG9mZnNldCB3aWxs
IG1hcCBhIHBvaW50IGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgd2lkZ2V0IHRvIHRo
ZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnRpbmcgYnVmZmVyLgorICAgIG1fcGFpbnRP
ZmZzZXQgPSB0YXJnZXRSZWN0LmxvY2F0aW9uKCkgLSBtX3RhcmdldFJlY3QubG9jYXRpb24oKTsK
KworICAgIGludCB3aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpICsgKGV4dHJhU3BhY2UgKiAy
KTsKKyAgICBpbnQgaGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpICsgKGV4dHJhU3BhY2Ug
KiAyKTsKKyAgICBpbnQgc2NyYXRjaFdpZHRoID0gMDsKKyAgICBpbnQgc2NyYXRjaEhlaWdodCA9
IDA7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAgICBnZGtfcGl4bWFwX2dldF9zaXpl
KGdTY3JhdGNoQnVmZmVyLCAmc2NyYXRjaFdpZHRoLCAmc2NyYXRjaEhlaWdodCk7CisKKyAgICAv
LyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJyZW50IGJ1
ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgICAgaWYgKCFnU2NyYXRjaEJ1ZmZlciB8fCBzY3JhdGNo
V2lkdGggPCB3aWR0aCB8fCBzY3JhdGNoSGVpZ2h0IDwgaGVpZ2h0KSB7CisgICAgICAgIHB1cmdl
U2NyYXRjaEJ1ZmZlcigpOworICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhl
bHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXplZCByZXF1ZXN0
cy4KKyAgICAgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKKyAgICAgICAgaGVp
Z2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OworCisgICAgICAgIGdTY3JhdGNoQnVmZmVy
ID0gZ2RrX3BpeG1hcF9uZXcoMCwgd2lkdGgsIGhlaWdodCwgZ2RrX2NvbG9ybWFwX2dldF92aXN1
YWwodGhlbWUtPm1fY29sb3JtYXApLT5kZXB0aCk7CisgICAgICAgIGdka19kcmF3YWJsZV9zZXRf
Y29sb3JtYXAoZ1NjcmF0Y2hCdWZmZXIsIHRoZW1lLT5tX2NvbG9ybWFwKTsKKyAgICB9CisgICAg
bV90YXJnZXQgPSBnU2NyYXRjaEJ1ZmZlcjsKKworICAgIC8vIENsZWFyIHRoZSBzY3JhdGNoIGJ1
ZmZlci4KKyAgICBSZWZQdHI8Y2Fpcm9fdD4gc2NyYXRjaEJ1ZmZlckNvbnRleHQgPSBhZG9wdFJl
ZihnZGtfY2Fpcm9fY3JlYXRlKGdTY3JhdGNoQnVmZmVyKSk7CisgICAgY2Fpcm9fc2V0X29wZXJh
dG9yKHNjcmF0Y2hCdWZmZXJDb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Cisg
ICAgY2Fpcm9fcGFpbnQoc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCkpOworfQorCitXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpCit7CisgICAgLy8gV2Ug
ZG8gbm90IG5lZWQgdG8gYmxpdCBiYWNrIHRvIHRoZSB0YXJnZXQgaW4gdGhlIGZhbGxiYWNrIGNh
c2UuIFNlZSBhYm92ZS4KKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7CisgICAg
aWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBtX2dyYXBoaWNzQ29u
dGV4dC0+Z2RrV2luZG93KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IHBhaW50
IHRoZSByZXN1bHRzIGJhY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgorICAgIGlmIChtX2hhZEVy
cm9yKSB7CisgICAgICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGl0IGlzIG5lY2Vz
c2FyeSB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBzb3VyY2UgaGVyZS4KKyAgICBjYWlyb190KiBj
YWlyb0NvbnRleHQgPSBtX2dyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7
CisgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcHJldmlvdXNTb3VyY2UoY2Fpcm9fZ2V0X3Nv
dXJjZShjYWlyb0NvbnRleHQpKTsKKworICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChj
YWlyb0NvbnRleHQsIGdTY3JhdGNoQnVmZmVyLCBtX3RhcmdldFJlY3QueCgpLCBtX3RhcmdldFJl
Y3QueSgpKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LCBtX3RhcmdldFJlY3Qu
eCgpLCBtX3RhcmdldFJlY3QueSgpLCBtX3RhcmdldFJlY3Qud2lkdGgoKSwgbV90YXJnZXRSZWN0
LmhlaWdodCgpKTsKKyAgICBjYWlyb19maWxsKGNhaXJvQ29udGV4dCk7CisgICAgY2Fpcm9fc2V0
X3NvdXJjZShjYWlyb0NvbnRleHQsIHByZXZpb3VzU291cmNlLmdldCgpKTsKKyAgICBzY2hlZHVs
ZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
OmNhbGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIEdka1JlY3RhbmdsZSogY2xp
cFJlY3QpCit7CisgICAgY2xpcFJlY3QtPnggPSBtX3BhaW50T2Zmc2V0LndpZHRoKCkgKyByZWN0
LngoKTsKKyAgICBjbGlwUmVjdC0+eSA9IG1fcGFpbnRPZmZzZXQuaGVpZ2h0KCkgKyByZWN0Lnko
KTsKKyAgICBjbGlwUmVjdC0+d2lkdGggPSBtX3RhcmdldFJlY3Qud2lkdGgoKTsKKyAgICBjbGlw
UmVjdC0+aGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpOworfQorCit2b2lkIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdl
dCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0Owor
ICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisKKyAgICAvLyBTb21lIHdp
ZGdldHMgYWxzbyBuZWVkIHRoZWlyIGFsbG9jYXRpb24gYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3Ig
ZXh0cmEgc3BhY2UuCisgICAgLy8gUmlnaHQgbm93IG9ubHkgc2Nyb2xsYmFyIGJ1dHRvbnMgaGF2
ZSBzaWduaWZpY2FudCBhbGxvY2F0aW9ucy4KKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247
CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKKyAg
ICBhbGxvY2F0aW9uLnggKz0gY2xpcFJlY3QueDsKKyAgICBhbGxvY2F0aW9uLnkgKz0gY2xpcFJl
Y3QueTsKKyAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24p
OworCisgICAgZ3RrX3BhaW50X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rh
cmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsCisgICAgICAgICAgICAgICAg
ICB3aWRnZXQsIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWlu
dEZsYXRCb3goY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRl
VHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRl
dGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJl
Y3QocmVjdCwgJmNsaXBSZWN0KTsKKyAgICBndGtfcGFpbnRfZmxhdF9ib3goZ3RrX3dpZGdldF9n
ZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBS
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQsIGRldGFpbCwgY2xpcFJlY3QueCwg
Y2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0
a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBjb25zdCBnY2hhciogZGV0
YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVDbGlwUmVj
dChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9mb2N1cyhndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAg
ICAgICAgICAgICAgICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
Omd0a1BhaW50U2xpZGVyKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdj
aGFyKiBkZXRhaWwsIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIEdka1JlY3Rh
bmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwor
ICAgIGd0a19wYWludF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJn
ZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCisgICAgICAgICAg
ICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSwgb3JpZW50YXRpb24pOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0Nv
bnRleHQ6Omd0a1BhaW50Q2hlY2soY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29u
c3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgY2Fs
Y3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKKyAgICBndGtfcGFpbnRfY2hlY2soZ3Rr
X3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlw
ZSwgJmNsaXBSZWN0LCB3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJl
Y3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9p
ZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiBy
ZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93
VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3Rhbmds
ZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAg
IGd0a19wYWludF9vcHRpb24oZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQs
IHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCisgICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRT
aGFkb3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFp
bCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3Qo
cmVjdCwgJmNsaXBSZWN0KTsKKyAgICBndGtfcGFpbnRfc2hhZG93KGd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwg
d2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVj
dC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50QXJyb3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0
KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlw
ZSwgaW50IGFycm93RGlyZWN0aW9uLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1Jl
Y3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3Qp
OworICAgIGd0a19wYWludF9hcnJvdyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rh
cmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwgZGV0YWlsLAor
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtBcnJvd1R5cGU+KGFycm93RGlyZWN0
aW9uKSwgVFJVRSwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKK30KKwordm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludFZMaW5l
KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3Rh
dGVUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVj
dDsKKyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWlu
dF92bGluZShndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBl
LCAmY2xpcFJlY3QsIHdpZGdldCwgZGV0YWlsLAorICAgICAgICAgICAgICAgICAgICBjbGlwUmVj
dC55LCBjbGlwUmVjdC55ICsgcmVjdC5oZWlnaHQoKSwgY2xpcFJlY3QueCk7CisKK30KKworfQor
CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzFmMmM4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHRfaAorI2RlZmluZSBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKKwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKy8vIFVz
dWFsbHkgdGhpcyBpcyB0b28gZXhwZW5zaXZlIHRvIGhhdmUgaW4gaGVhZGVycywgYnV0IEd0a1N0
YXRlVHlwZSBHdGtTaGFkb3dUeXBlIGFyZQorLy8gZW51bXMgYW5kIGNhbm5vdCBiZSBmb3J3YXJk
IGRlY2xhcmVkLiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggaXMgY3VycmVudGx5IG9ubHkKKy8v
IGluY2x1ZGVkIGluIFJlbmRlclRoZW1lR3RrMi5jcHAgYW5kIFNjcm9sbGJhclRoZW1lR3RrMi5j
cHAuCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFJlbmRlclRoZW1lR3RrOworCitjbGFzcyBXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB+V2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dCgpOworCisgICAgdm9pZCBndGtQYWludEJveChjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0
KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOworICAgIHZvaWQg
Z3RrUGFpbnRGbGF0Qm94KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUs
IEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludEZvY3VzKGNv
bnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7Cisg
ICAgdm9pZCBndGtQYWludFNsaWRlcihjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3Rh
dGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciosIEd0a09yaWVudGF0aW9uKTsKKyAg
ICB2b2lkIGd0a1BhaW50Q2hlY2soY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50T3B0
aW9uKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0
JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciop
OworICAgIHZvaWQgZ3RrUGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3Rr
U3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFy
Kik7CisgICAgdm9pZCBndGtQYWludFZMaW5lKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBH
dGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjYWxjdWxh
dGVDbGlwUmVjdChjb25zdCBJbnRSZWN0JiwgR2RrUmVjdGFuZ2xlKik7CisKKyAgICBHcmFwaGlj
c0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OworICAgIEludFJlY3QgbV90YXJnZXRSZWN0Owor
ICAgIEludFNpemUgbV9wYWludE9mZnNldDsKKyAgICBib29sIG1faGFkRXJyb3I7CisgICAgR2Rr
RHJhd2FibGUqIG1fdGFyZ2V0OworCit9OworCit9CisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJ
T05fMgorI2VuZGlmIC8vIFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9hdWRpby9BdWRpb0J1c0d0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42ZmM3ODdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9hdWRp
by9BdWRpb0J1c0d0ay5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NPd25QdHI8QXVkaW9CdXM+IEF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZShjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIEdPd25QdHI8Z2No
YXI+IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMud2F2IiwgbmFtZSkpOworICAgIGNvbnN0
IGNoYXIqIGVudmlyb25tZW50UGF0aCA9IGdldGVudigiQVVESU9fUkVTT1VSQ0VTX1BBVEgiKTsK
KyAgICBHT3duUHRyPGdjaGFyPiBhYnNvbHV0ZUZpbGVuYW1lOworICAgIGlmIChlbnZpcm9ubWVu
dFBhdGgpCisgICAgICAgIGFic29sdXRlRmlsZW5hbWUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoZW52
aXJvbm1lbnRQYXRoLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOworICAgIGVsc2UKKyAgICAgICAg
YWJzb2x1dGVGaWxlbmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQYXRo
KCkuZGF0YSgpLCAicmVzb3VyY2VzIiwgImF1ZGlvIiwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsK
KyAgICByZXR1cm4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShhYnNvbHV0ZUZpbGVuYW1lLmdldCgp
LCBmYWxzZSwgc2FtcGxlUmF0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L2dyYXBoaWNzL0NvbG9yR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29s
b3JHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTZiYTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0NvbG9yR3RrLmNw
cApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29sb3I6OkNvbG9yKGNvbnN0IEdka0NvbG9yJiBj
KQorICAgIDogbV9jb2xvcihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVl
ID4+IDgpKQorICAgICwgbV92YWxpZCh0cnVlKQoreworfQorCisjaWZuZGVmIEdUS19BUElfVkVS
U0lPTl8yCitDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKKyAgICA6IG1fY29sb3IobWFr
ZVJHQkEoc3RhdGljX2Nhc3Q8aW50PihjLnJlZCAqIDI1NSksCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oYy5ncmVlbiAqIDI1NSksCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oYy5ibHVlICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50PihjLmFscGhhICogMjU1KSkpCisgICAgLCBtX3ZhbGlkKHRydWUp
Cit7Cit9CisKK0NvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKK3sKKyAgICBkb3VibGUg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CisgICAgR2RrUkdCQSByZ2JhID0geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9Owor
ICAgIHJldHVybiByZ2JhOworfQorI2VuZGlmCisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0Z1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmU5ZDdmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBo
aWNzL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAgKzEsNDU0IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgVVNF
KE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQorCisjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0ay5oIgorCisjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJHV29y
bGQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCisKKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUgSFVEX0FVVE9fSElERV9JTlRFUlZBTCAzMDAwIC8vIDMg
c2Vjb25kcworI2RlZmluZSBQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMIDE1MCAvLyAxNTBt
cworCisvLyBVc2Ugc3ltYm9saWMgaWNvbnMgb25seSBpZiB3ZSBidWlsZCB3aXRoIEdUSystMyBz
dXBwb3J0LiBUaGV5IGNvdWxkCisvLyBiZSBlbmFibGVkIGZvciB0aGUgR1RLKzIgYnVpbGQgYnV0
IHdlJ2QgbmVlZCB0byBidW1wIHRoZSByZXF1aXJlZAorLy8gdmVyc2lvbiB0byBhdCBsZWFzdCAy
LjIyLgorI2lmIEdUS19NQUpPUl9WRVJTSU9OID4gMgorI2RlZmluZSBJQ09OX05BTUVfU1VGRklY
ICItc3ltYm9saWMiCisjZWxzZQorI2RlZmluZSBJQ09OX05BTUVfU1VGRklYCisjZW5kaWYKKwor
I2RlZmluZSBQTEFZX0lDT05fTkFNRSAibWVkaWEtcGxheWJhY2stc3RhcnQiSUNPTl9OQU1FX1NV
RkZJWAorI2RlZmluZSBQQVVTRV9JQ09OX05BTUUgIm1lZGlhLXBsYXliYWNrLXBhdXNlIklDT05f
TkFNRV9TVUZGSVgKKyNkZWZpbmUgRVhJVF9GVUxMU0NSRUVOX0lDT05fTkFNRSAidmlldy1yZXN0
b3JlIklDT05fTkFNRV9TVUZGSVgKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZ2Jv
b2xlYW4gaGlkZUh1ZENhbGxiYWNrKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRy
b2xsZXIpCit7CisgICAgY29udHJvbGxlci0+aGlkZUh1ZCgpOworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vdGlvbiogZXZlbnQsICBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIGNvbnRyb2xsZXItPnNob3dIdWQodHJ1
ZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIG9uRnVsbHNjcmVlbkd0a0Fj
dGl2ZU5vdGlmaWNhdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR1BhcmFtU3BlYyogcHJvcGVydHks
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgaWYgKCFn
dGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHdpZGdldCkpKQorICAgICAgICBjb250cm9s
bGVyLT5oaWRlSHVkKCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtDb25m
aWd1cmVFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50LCBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIGNvbnRyb2xs
ZXItPmd0a0NvbmZpZ3VyZShldmVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkIG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3koR3RrV2lkZ2V0KiB3aWRnZXQsIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+ZXhpdEZ1
bGxzY3JlZW4oKTsKK30KKworc3RhdGljIHZvaWQgdG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKEd0
a0FjdGlvbiogYWN0aW9uLCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVy
KQoreworICAgIGNvbnRyb2xsZXItPnRvZ2dsZVBsYXkoKTsKK30KKworc3RhdGljIHZvaWQgZXhp
dEZ1bGxzY3JlZW5BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+ZXhpdE9uVXNlclJl
cXVlc3QoKTsKK30KKworc3RhdGljIGdib29sZWFuIHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2so
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICByZXR1cm4g
Y29udHJvbGxlci0+dXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsKK30KKworc3RhdGljIGdib29sZWFu
IHRpbWVTY2FsZUJ1dHRvblByZXNzZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9u
KiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAg
ICBpZiAoZXZlbnQtPnR5cGUgIT0gR0RLX0JVVFRPTl9QUkVTUykKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgY29udHJvbGxlci0+YmVnaW5TZWVrKCk7CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZVNjYWxlQnV0dG9uUmVsZWFzZWQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5lbmRTZWVrKCk7CisgICAgcmV0dXJu
IEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0aW1lU2NhbGVWYWx1ZUNoYW5nZWQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7Cisg
ICAgY29udHJvbGxlci0+ZG9TZWVrKCk7Cit9CisKK3N0YXRpYyB2b2lkIHZvbHVtZVZhbHVlQ2hh
bmdlZChHdGtTY2FsZUJ1dHRvbiAqYnV0dG9uLCBnZG91YmxlIHZhbHVlLCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIGNvbnRyb2xsZXItPnNldFZvbHVt
ZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKK30KKworCitGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKKyAgICA6IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
U3RyZWFtZXIocGxheWVyKQorICAgICwgbV9odWRUaW1lb3V0SWQoMCkKKyAgICAsIG1fcHJvZ3Jl
c3NCYXJVcGRhdGVJZCgwKQorICAgICwgbV9zZWVrTG9jayhmYWxzZSkKKyAgICAsIG1fd2luZG93
KDApCisgICAgLCBtX2h1ZFdpbmRvdygwKQorICAgICwgbV92b2x1bWVCdXR0b24oMCkKKyAgICAs
IG1fa2V5UHJlc3NTaWduYWxJZCgwKQorICAgICwgbV9kZXN0cm95U2lnbmFsSWQoMCkKKyAgICAs
IG1faXNBY3RpdmVTaWduYWxJZCgwKQorICAgICwgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCgwKQor
ICAgICwgbV9jb25maWd1cmVFdmVudFNpZ25hbElkKDApCisgICAgLCBtX2h1ZE1vdGlvbk5vdGlm
eVNpZ25hbElkKDApCisgICAgLCBtX3RpbWVTY2FsZUJ1dHRvblByZXNzZWRTaWduYWxJZCgwKQor
ICAgICwgbV90aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkKDApCisgICAgLCBtX3BsYXlB
Y3Rpb25BY3RpdmF0ZVNpZ25hbElkKDApCisgICAgLCBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3Rp
dmF0ZVNpZ25hbElkKDApCit7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
azo6Z3RrQ29uZmlndXJlKEdka0V2ZW50Q29uZmlndXJlKiBldmVudCkKK3sKKyAgICB1cGRhdGVI
dWRQb3NpdGlvbigpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnNo
b3dIdWQoYm9vbCBhdXRvSGlkZSkKK3sKKyAgICBpZiAoIW1faHVkV2luZG93KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9odWRUaW1lb3V0SWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVt
b3ZlKG1faHVkVGltZW91dElkKTsKKyAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAwOworICAgIH0K
KworICAgIC8vIFNob3cgdGhlIGN1cnNvci4KKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7CisgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdp
bmRvdywgMCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHByb2dyZXNzIGJhciBpbW1lZGlhdGVseSBi
ZWZvcmUgc2hvd2luZyB0aGUgd2luZG93LgorICAgIHVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2h1ZFdpbmRvdyk7CisgICAgdXBkYXRlSHVkUG9zaXRp
b24oKTsKKworICAgIC8vIFN0YXJ0IHBlcmlvZGljIHVwZGF0ZXMgb2YgdGhlIHByb2dyZXNzIGJh
ci4KKyAgICBpZiAoIW1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCkKKyAgICAgICAgbV9wcm9ncmVzc0Jh
clVwZGF0ZUlkID0gZ190aW1lb3V0X2FkZChQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihwcm9ncmVzc0JhclVwZGF0ZUNhbGxiYWNrKSwg
dGhpcyk7CisKKyAgICAvLyBIaWRlIHRoZSBodWQgaW4gZmV3IHNlY29uZHMsIGlmIHJlcXVlc3Rl
ZC4KKyAgICBpZiAoYXV0b0hpZGUpCisgICAgICAgIG1faHVkVGltZW91dElkID0gZ190aW1lb3V0
X2FkZChIVURfQVVUT19ISURFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihoaWRlSHVkQ2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjpoaWRlSHVkKCkKK3sKKyAgICBpZiAobV9odWRUaW1lb3V0SWQpIHsKKyAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElkKTsKKyAgICAgICAgbV9odWRUaW1lb3V0
SWQgPSAwOworICAgIH0KKworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEtlZXAgdGhlIGh1ZCB2aXNpYmxlIGlmIGEgc2VlayBpcyBpbiBwcm9ncmVzcyBv
ciBpZiB0aGUgdm9sdW1lCisgICAgLy8gcG9wdXAgaXMgdmlzaWJsZS4KKyAgICBHdGtXaWRnZXQq
IHZvbHVtZVBvcHVwID0gZ3RrX3NjYWxlX2J1dHRvbl9nZXRfcG9wdXAoR1RLX1NDQUxFX0JVVFRP
TihtX3ZvbHVtZUJ1dHRvbikpOworICAgIGlmIChtX3NlZWtMb2NrIHx8IGd0a193aWRnZXRfZ2V0
X3Zpc2libGUodm9sdW1lUG9wdXApKSB7CisgICAgICAgIHNob3dIdWQodHJ1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0
X3dpbmRvdyhtX3dpbmRvdyk7CisgICAgR2RrQ3Vyc29yKiBjdXJzb3IgPSBibGFua0N1cnNvcigp
OworICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNvcik7CisKKyAgICBndGtf
d2lkZ2V0X2hpZGUobV9odWRXaW5kb3cpOworCisgICAgaWYgKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJ
ZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0JhclVwZGF0ZUlkKTsKKyAg
ICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBvbkZ1bGxzY3JlZW5HdGtLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEtleSogZXZlbnQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIp
Cit7CisgICAgc3dpdGNoIChldmVudC0+a2V5dmFsKSB7CisgICAgY2FzZSBHREtfRXNjYXBlOgor
ICAgICAgICBjb250cm9sbGVyLT5leGl0T25Vc2VyUmVxdWVzdCgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdES19zcGFjZToKKyAgICBjYXNlIEdES19SZXR1cm46CisgICAgICAgIGNvbnRy
b2xsZXItPnRvZ2dsZVBsYXkoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfVXA6Cisg
ICAgICAgIGNvbnRyb2xsZXItPmluY3JlYXNlVm9sdW1lKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR0RLX0Rvd246CisgICAgICAgIGNvbnRyb2xsZXItPmRlY3JlYXNlVm9sdW1lKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBUUlVFOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Omlu
aXRpYWxpemVXaW5kb3coKQoreworICAgIG1fd2luZG93ID0gcmVpbnRlcnByZXRfY2FzdDxHdGtX
aWRnZXQqPihtX2dzdHJlYW1lckdXb3JsZC0+cGxhdGZvcm1WaWRlb1dpbmRvdygpLT53aW5kb3co
KSk7CisKKyAgICBpZiAoIW1faHVkV2luZG93KQorICAgICAgICBjcmVhdGVIdWQoKTsKKworICAg
IC8vIEVuc3VyZSBibGFjayBiYWNrZ3JvdW5kLgorI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisg
ICAgR2RrQ29sb3IgY29sb3IgPSB7IDEsIDAsIDAsIDAgfTsKKyAgICBndGtfd2lkZ2V0X21vZGlm
eV9iZyhtX3dpbmRvdywgR1RLX1NUQVRFX05PUk1BTCwgJmNvbG9yKTsKKyNlbHNlCisgICAgR2Rr
UkdCQSBjb2xvciA9IHsgMCwgMCwgMCwgMX07CisgICAgZ3RrX3dpZGdldF9vdmVycmlkZV9iYWNr
Z3JvdW5kX2NvbG9yKG1fd2luZG93LCBHVEtfU1RBVEVfRkxBR19OT1JNQUwsICZjb2xvcik7Cisj
ZW5kaWYKKyAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQobV93aW5kb3csIEZBTFNF
KTsKKworICAgIG1fa2V5UHJlc3NTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3cs
ICJrZXktcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0tleVByZXNzRXZl
bnQpLCB0aGlzKTsKKyAgICBtX2Rlc3Ryb3lTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93
aW5kb3csICJkZXN0cm95IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtEZXN0cm95KSwgdGhp
cyk7CisgICAgbV9pc0FjdGl2ZVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywg
Im5vdGlmeTo6aXMtYWN0aXZlIiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtBY3RpdmVOb3Rp
ZmljYXRpb24pLCB0aGlzKTsKKworICAgIGd0a193aWRnZXRfc2hvd19hbGwobV93aW5kb3cpOwor
CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cp
OworICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjdXJzb3IoYWRvcHRHUmVmKGJsYW5rQ3Vyc29yKCkp
KTsKKyAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCBjdXJzb3IuZ2V0KCkpOworCisg
ICAgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJt
b3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtNb3Rpb25Ob3Rp
ZnlFdmVudCksIHRoaXMpOworICAgIG1fY29uZmlndXJlRXZlbnRTaWduYWxJZCA9IGdfc2lnbmFs
X2Nvbm5lY3QobV93aW5kb3csICJjb25maWd1cmUtZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNj
cmVlbkd0a0NvbmZpZ3VyZUV2ZW50KSwgdGhpcyk7CisKKyAgICBndGtfd2luZG93X2Z1bGxzY3Jl
ZW4oR1RLX1dJTkRPVyhtX3dpbmRvdykpOworICAgIHNob3dIdWQodHJ1ZSk7Cit9CisKK3ZvaWQg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6dXBkYXRlSHVkUG9zaXRpb24oKQoreworICAg
IGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgc2Ny
ZWVuIHJlY3RhbmdsZS4KKyAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193aW5kb3dfZ2V0X3Nj
cmVlbihHVEtfV0lORE9XKG1fd2luZG93KSk7CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtf
d2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOworICAgIEdka1JlY3RhbmdsZSBmdWxsc2NyZWVu
UmVjdGFuZ2xlOworICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBn
ZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdpbmRvdyksICZmdWxsc2Ny
ZWVuUmVjdGFuZ2xlKTsKKworICAgIC8vIEdldCB0aGUgcG9wdXAgd2luZG93IHNpemUuCisgICAg
aW50IGh1ZFdpZHRoLCBodWRIZWlnaHQ7CisgICAgZ3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lO
RE9XKG1faHVkV2luZG93KSwgJmh1ZFdpZHRoLCAmaHVkSGVpZ2h0KTsKKworICAgIC8vIFJlc2l6
ZSB0aGUgaHVkIHRvIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBzY3JlZW4uCisgICAgZ3RrX3dpbmRv
d19yZXNpemUoR1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksIGZ1bGxzY3JlZW5SZWN0YW5nbGUud2lk
dGgsIGh1ZEhlaWdodCk7CisKKyAgICAvLyBNb3ZlIHRoZSBodWQgdG8gdGhlIGJvdHRvbSBvZiB0
aGUgc2NyZWVuLgorICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwg
ZnVsbHNjcmVlblJlY3RhbmdsZS54LCBmdWxsc2NyZWVuUmVjdGFuZ2xlLmhlaWdodCArIGZ1bGxz
Y3JlZW5SZWN0YW5nbGUueSAtIGh1ZEhlaWdodCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0azo6ZGVzdHJveVdpbmRvdygpCit7CisgICAgaWYgKCFtX2h1ZFdpbmRvdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2lu
ZG93LCBtX2tleVByZXNzU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX3dpbmRvdywgbV9kZXN0cm95U2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdChtX3dpbmRvdywgbV9pc0FjdGl2ZVNpZ25hbElkKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fbW90aW9uTm90aWZ5U2lnbmFsSWQpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9jb25maWd1cmVFdmVudFNpZ25h
bElkKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9odWRXaW5kb3csIG1faHVk
TW90aW9uTm90aWZ5U2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCht
X3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkKTsKKyAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV90aW1lSFNjYWxlLCBtX3RpbWVTY2FsZUJ1dHRvblJl
bGVhc2VkU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVI
U2NhbGUsIG1faHNjYWxlVXBkYXRlSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7CisgICAgZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0KG1fcGxheVBhdXNlQWN0aW9uLCBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25h
bElkKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9leGl0RnVsbHNjcmVlbkFj
dGlvbiwgbV9leGl0RnVsbGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZCk7CisKKyAgICBpZiAo
bV9odWRUaW1lb3V0SWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElk
KTsKKyAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAwOworICAgIH0KKworICAgIGlmIChtX3Byb2dy
ZXNzQmFyVXBkYXRlSWQpIHsKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcHJvZ3Jlc3NCYXJV
cGRhdGVJZCk7CisgICAgICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IDA7CisgICAgfQorCisg
ICAgZ3RrX3dpZGdldF9oaWRlKG1fd2luZG93KTsKKworICAgIGlmIChtX2h1ZFdpbmRvdykKKyAg
ICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faHVkV2luZG93KTsKKyAgICBtX2h1ZFdpbmRvdyA9
IDA7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6cGxheVN0YXRlQ2hh
bmdlZCgpCit7CisgICAgaWYgKG1fY2xpZW50LT5tZWRpYVBsYXllcklzUGF1c2VkKCkpCisgICAg
ICAgIGdfb2JqZWN0X3NldChtX3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0aXAiLCBfKCJQbGF5Iiks
ICJpY29uLW5hbWUiLCBQTEFZX0lDT05fTkFNRSwgTlVMTCk7CisgICAgZWxzZQorICAgICAgICBn
X29iamVjdF9zZXQobV9wbGF5UGF1c2VBY3Rpb24sICJ0b29sdGlwIiwgXygiUGF1c2UiKSwgImlj
b24tbmFtZSIsIFBBVVNFX0lDT05fTkFNRSwgTlVMTCk7CisgICAgc2hvd0h1ZCghbV9jbGllbnQt
Pm1lZGlhUGxheWVySXNQYXVzZWQoKSk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlckd0azo6dm9sdW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX3ZvbHVtZUJ1dHRvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ19zaWduYWxfaGFuZGxlcl9ibG9jayhtX3ZvbHVtZUJ1dHRv
biwgbV92b2x1bWVVcGRhdGVJZCk7CisgICAgZ3RrX3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RL
X1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT52b2x1bWUoKSk7CisgICAg
Z19zaWduYWxfaGFuZGxlcl91bmJsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlk
KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjptdXRlQ2hhbmdlZCgp
Cit7CisgICAgaWYgKCFtX3ZvbHVtZUJ1dHRvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19z
aWduYWxfaGFuZGxlcl9ibG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7Cisg
ICAgZ3RrX3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1
dHRvbiksIG1fcGxheWVyLT5tdXRlZCgpID8gMCA6IG1fcGxheWVyLT52b2x1bWUoKSk7CisgICAg
Z19zaWduYWxfaGFuZGxlcl91bmJsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlk
KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpiZWdpblNlZWsoKQor
eworICAgIG1fc2Vla0xvY2sgPSB0cnVlOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGs6OmRvU2VlaygpCit7CisgICAgaWYgKCFtX3NlZWtMb2NrKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3BsYXllci0+c2VlayhndGtfcmFuZ2VfZ2V0X3ZhbHVlKEdUS19SQU5HRSht
X3RpbWVIU2NhbGUpKSptX3BsYXllci0+ZHVyYXRpb24oKSAvIDEwMCk7Cit9CisKK3ZvaWQgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZW5kU2VlaygpCit7CisgICAgbV9zZWVrTG9jayA9
IGZhbHNlOworfQorCitnYm9vbGVhbiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjp1cGRh
dGVIdWRQcm9ncmVzc0JhcigpCit7CisgICAgZmxvYXQgbWVkaWFEdXJhdGlvbihtX3BsYXllci0+
ZHVyYXRpb24oKSk7CisgICAgZmxvYXQgbWVkaWFQb3NpdGlvbihtX3BsYXllci0+Y3VycmVudFRp
bWUoKSk7CisKKyAgICBpZiAoIW1fc2Vla0xvY2spIHsKKyAgICAgICAgZ2RvdWJsZSB2YWx1ZSA9
IDAuMDsKKworICAgICAgICBpZiAobWVkaWFQb3NpdGlvbiAmJiBtZWRpYUR1cmF0aW9uKQorICAg
ICAgICAgICAgdmFsdWUgPSAobWVkaWFQb3NpdGlvbiAqIDEwMC4wKSAvIG1lZGlhRHVyYXRpb247
CisKKyAgICAgICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRq
dXN0bWVudChHVEtfUkFOR0UobV90aW1lSFNjYWxlKSk7CisgICAgICAgIGd0a19hZGp1c3RtZW50
X3NldF92YWx1ZShhZGp1c3RtZW50LCB2YWx1ZSk7CisgICAgfQorCisgICAgZ3RrX3JhbmdlX3Nl
dF9maWxsX2xldmVsKEdUS19SQU5HRShtX3RpbWVIU2NhbGUpLCAobV9wbGF5ZXItPm1heFRpbWVM
b2FkZWQoKSAvIG1lZGlhRHVyYXRpb24pKiAxMDApOworCisgICAgZ2NoYXIqIGxhYmVsID0gZ19z
dHJkdXBfcHJpbnRmKCIlcyAvICVzIiwgdGltZVRvU3RyaW5nKG1lZGlhUG9zaXRpb24pLnV0Zjgo
KS5kYXRhKCksIHRpbWVUb1N0cmluZyhtZWRpYUR1cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKG1fdGltZUxhYmVsKSwgbGFiZWwpOworICAg
IGdfZnJlZShsYWJlbCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0azo6Y3JlYXRlSHVkKCkKK3sKKyAgICBtX2h1ZFdpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIGd0a193aW5kb3dfc2V0X2dyYXZpdHko
R1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksIEdES19HUkFWSVRZX1NPVVRIX1dFU1QpOworICAgIGd0
a193aW5kb3dfc2V0X3R5cGVfaGludChHVEtfV0lORE9XKG1faHVkV2luZG93KSwgR0RLX1dJTkRP
V19UWVBFX0hJTlRfTk9STUFMKTsKKworICAgIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQgPSBn
X3NpZ25hbF9jb25uZWN0KG1faHVkV2luZG93LCAibW90aW9uLW5vdGlmeS1ldmVudCIsIEdfQ0FM
TEJBQ0sob25GdWxsc2NyZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQpLCB0aGlzKTsKKworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCisgICAgR3RrV2lkZ2V0KiBoYm94ID0gZ3RrX2hib3hfbmV3KEZB
TFNFLCA0KTsKKyNlbHNlCisgICAgR3RrV2lkZ2V0KiBoYm94ID0gZ3RrX2JveF9uZXcoR1RLX09S
SUVOVEFUSU9OX0hPUklaT05UQUwsIDQpOworI2VuZGlmCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX2h1ZFdpbmRvdyksIGhib3gpOworCisgICAgbV9wbGF5UGF1c2VBY3Rp
b24gPSBndGtfYWN0aW9uX25ldygicGxheSIsIF8oIlBsYXkgLyBQYXVzZSIpLCBfKCJQbGF5IG9y
IHBhdXNlIHRoZSBtZWRpYSIpLCBQQVVTRV9JQ09OX05BTUUpOworICAgIG1fcGxheUFjdGlvbkFj
dGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fcGxheVBhdXNlQWN0aW9uLCAiYWN0
aXZhdGUiLCBHX0NBTExCQUNLKHRvZ2dsZVBsYXlQYXVzZUFjdGl2YXRlZCksIHRoaXMpOworCisg
ICAgR3RrV2lkZ2V0KiBpdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfdG9vbF9pdGVtKG1fcGxheVBh
dXNlQWN0aW9uKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgaXRlbSwg
RkFMU0UsIFRSVUUsIDApOworCisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXco
XygiVGltZToiKSk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIGxhYmVs
LCBGQUxTRSwgVFJVRSwgMCk7CisKKyAgICBHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gR1RL
X0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAxMDAuMCwgMC4xLCAxLjAs
IDEuMCkpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgbV90aW1lSFNjYWxlID0gZ3Rr
X2hzY2FsZV9uZXcoYWRqdXN0bWVudCk7CisjZWxzZQorICAgIG1fdGltZUhTY2FsZSA9IGd0a19z
Y2FsZV9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIGFkanVzdG1lbnQpOworI2VuZGlm
CisgICAgZ3RrX3NjYWxlX3NldF9kcmF3X3ZhbHVlKEdUS19TQ0FMRShtX3RpbWVIU2NhbGUpLCBG
QUxTRSk7CisgICAgZ3RrX3JhbmdlX3NldF9zaG93X2ZpbGxfbGV2ZWwoR1RLX1JBTkdFKG1fdGlt
ZUhTY2FsZSksIFRSVUUpOworICAgIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkID0g
Z19zaWduYWxfY29ubmVjdChtX3RpbWVIU2NhbGUsICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NB
TExCQUNLKHRpbWVTY2FsZUJ1dHRvblByZXNzZWQpLCB0aGlzKTsKKyAgICBtX3RpbWVTY2FsZUJ1
dHRvblJlbGVhc2VkU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fdGltZUhTY2FsZSwgImJ1
dHRvbi1yZWxlYXNlLWV2ZW50IiwgR19DQUxMQkFDSyh0aW1lU2NhbGVCdXR0b25SZWxlYXNlZCks
IHRoaXMpOworICAgIG1faHNjYWxlVXBkYXRlSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fdGltZUhT
Y2FsZSwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZVZhbHVlQ2hhbmdlZCks
IHRoaXMpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUhT
Y2FsZSwgVFJVRSwgVFJVRSwgMCk7CisKKyAgICBtX3RpbWVMYWJlbCA9IGd0a19sYWJlbF9uZXco
IiIpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBtX3RpbWVMYWJlbCwg
RkFMU0UsIFRSVUUsIDApOworCisgICAgLy8gVm9sdW1lIGJ1dHRvbi4KKyAgICBtX3ZvbHVtZUJ1
dHRvbiA9IGd0a192b2x1bWVfYnV0dG9uX25ldygpOworICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGhib3gpLCBtX3ZvbHVtZUJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOworICAgIGd0a19z
Y2FsZV9idXR0b25fc2V0X3ZhbHVlKEdUS19TQ0FMRV9CVVRUT04obV92b2x1bWVCdXR0b24pLCBt
X3BsYXllci0+dm9sdW1lKCkpOworICAgIG1fdm9sdW1lVXBkYXRlSWQgPSBnX3NpZ25hbF9jb25u
ZWN0KG1fdm9sdW1lQnV0dG9uLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodm9sdW1lVmFs
dWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAgICBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uID0gZ3RrX2Fj
dGlvbl9uZXcoImV4aXQiLCBfKCJFeGl0IEZ1bGxzY3JlZW4iKSwgXygiRXhpdCBmcm9tIGZ1bGxz
Y3JlZW4gbW9kZSIpLCBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FKTsKKyAgICBtX2V4aXRGdWxs
Y3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX2V4aXRGdWxs
c2NyZWVuQWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGV4aXRGdWxsc2NyZWVuQWN0aXZh
dGVkKSwgdGhpcyk7CisgICAgZ19vYmplY3Rfc2V0KG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24sICJp
Y29uLW5hbWUiLCBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBpdGVtID0g
Z3RrX2FjdGlvbl9jcmVhdGVfdG9vbF9pdGVtKG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24pOworICAg
IGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBpdGVtLCBGQUxTRSwgVFJVRSwgMCk7
CisKKyAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSBnX3RpbWVvdXRfYWRkKFBST0dSRVNTX0JB
Ul9VUERBVEVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNz
QmFyVXBkYXRlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIHBsYXlTdGF0ZUNoYW5nZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL2dyYXBoaWNzL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NzcwYzUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXJHdGsuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2Fs
aWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19o
CisjZGVmaW5lIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaAorCisjaWYgRU5BQkxFKFZJ
REVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisK
KyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayA6IHB1
YmxpYyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UqKTsKKworICAgIHZvaWQgZ3RrQ29uZmlndXJlKEdka0V2ZW50Q29uZmlndXJlKik7CisKKyAg
ICB2b2lkIHBsYXlTdGF0ZUNoYW5nZWQoKTsKKworICAgIHZvaWQgYmVnaW5TZWVrKCk7CisgICAg
dm9pZCBkb1NlZWsoKTsKKyAgICB2b2lkIGVuZFNlZWsoKTsKKworICAgIHZvaWQgaGlkZUh1ZCgp
OworICAgIHZvaWQgc2hvd0h1ZChib29sKTsKKyAgICBnYm9vbGVhbiB1cGRhdGVIdWRQcm9ncmVz
c0JhcigpOworCisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7CisgICAgdm9pZCBtdXRlQ2hhbmdl
ZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZVdpbmRvdygpOworICAgIHZvaWQg
ZGVzdHJveVdpbmRvdygpOworCisgICAgdm9pZCBjcmVhdGVIdWQoKTsKKyAgICB2b2lkIHVwZGF0
ZUh1ZFBvc2l0aW9uKCk7CisKKyAgICBndWludCBtX2h1ZFRpbWVvdXRJZDsKKyAgICBndWludCBt
X3Byb2dyZXNzQmFyVXBkYXRlSWQ7CisgICAgZ3VpbnQgbV9wcm9ncmVzc0JhckZpbGxVcGRhdGVJ
ZDsKKyAgICBndWludCBtX2hzY2FsZVVwZGF0ZUlkOworICAgIGd1aW50IG1fdm9sdW1lVXBkYXRl
SWQ7CisgICAgYm9vbCBtX3NlZWtMb2NrOworICAgIEd0a1dpZGdldCogbV93aW5kb3c7CisgICAg
R3RrV2lkZ2V0KiBtX2h1ZFdpbmRvdzsKKyAgICBHdGtBY3Rpb24qIG1fcGxheVBhdXNlQWN0aW9u
OworICAgIEd0a0FjdGlvbiogbV9leGl0RnVsbHNjcmVlbkFjdGlvbjsKKyAgICBHdGtXaWRnZXQq
IG1fdGltZUhTY2FsZTsKKyAgICBHdGtXaWRnZXQqIG1fdGltZUxhYmVsOworICAgIEd0a1dpZGdl
dCogbV92b2x1bWVCdXR0b247CisKKyAgICB1bnNpZ25lZCBsb25nIG1fa2V5UHJlc3NTaWduYWxJ
ZDsKKyAgICB1bnNpZ25lZCBsb25nIG1fZGVzdHJveVNpZ25hbElkOworICAgIHVuc2lnbmVkIGxv
bmcgbV9pc0FjdGl2ZVNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9tb3Rpb25Ob3RpZnlT
aWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25nIG1fY29uZmlndXJlRXZlbnRTaWduYWxJZDsKKyAg
ICB1bnNpZ25lZCBsb25nIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQ7CisgICAgdW5zaWduZWQg
bG9uZyBtX3RpbWVTY2FsZUJ1dHRvblByZXNzZWRTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25n
IG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25nIG1f
cGxheUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBtX2V4aXRGdWxs
Y3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkOworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAv
LyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDgwMThhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHdGtWZXJz
aW9uaW5nLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwor
R2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKK3sKKyAgICByZXR1cm4gZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZh
Y2UsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9V
dGlsaXRpZXMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRp
ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjViM2VkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGll
cy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEdka0NhaXJvVXRpbGl0aWVzX2gKKyNkZWZpbmUgR2RrQ2Fpcm9V
dGlsaXRpZXNfaAorCitHZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlKTsKKworI2VuZGlmIC8vIEdka0NhaXJvVXRpbGl0aWVzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0ay5jcHAgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ljb25HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNlOTU3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL2dyYXBoaWNzL0ljb25HdGsuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSWNvbi5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJY29uOjpJY29uKCkKKyAgICA6IG1faWNvbigwKQoreworfQorCitJY29u
Ojp+SWNvbigpCit7CisgICAgaWYgKG1faWNvbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9p
Y29uKTsKK30KKworc3RhdGljIFN0cmluZyBsb29rdXBJY29uTmFtZShTdHJpbmcgTUlNRVR5cGUp
Cit7CisgICAgLyoKKyAgICAgTG9va3VwIGFuIGFwcHJvcHJpYXRlIGljb24gYWNjb3JkaW5nIHRv
IGVpdGhlciB0aGUgSWNvbiBOYW1pbmcgU3BlYworICAgICBvciBjb252ZW50aW9uYWwgR25vbWUg
aWNvbiBuYW1lcyByZXNwZWN0aXZlbHkuCisKKyAgICAgU2VlIGh0dHA6Ly9zdGFuZGFyZHMuZnJl
ZWRlc2t0b3Aub3JnL2ljb24tbmFtaW5nLXNwZWMvaWNvbi1uYW1pbmctc3BlYy1sYXRlc3QuaHRt
bAorCisgICAgIFRoZSBpY29uIHRoZW1lIGlzIHByb2JlZCBmb3IgdGhlIGZvbGxvd2luZyBuYW1l
czoKKyAgICAgMS4gbWVkaWEtc3VidHlwZQorICAgICAyLiBnbm9tZS1taW1lLW1lZGlhLXN1YnR5
cGUKKyAgICAgMy4gbWVkaWEteC1nZW5lcmljCisgICAgIDQuIGdub21lLW1pbWUtbWVkaWEKKwor
ICAgICBJbiB0aGUgd29yc3QgY2FzZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBzdG9jayBmaWxlIGlj
b24uCisgICAgKi8KKyAgICBpbnQgcG9zID0gTUlNRVR5cGUuZmluZCgnLycpOworICAgIGlmKHBv
cyA+PSAwKSB7CisgICAgICAgIFN0cmluZyBtZWRpYSA9IE1JTUVUeXBlLnN1YnN0cmluZygwLCBw
b3MpOworICAgICAgICBTdHJpbmcgc3VidHlwZSA9IE1JTUVUeXBlLnN1YnN0cmluZyhwb3MgKyAx
KTsKKyAgICAgICAgR3RrSWNvblRoZW1lKiBpY29uVGhlbWUgPSBndGtfaWNvbl90aGVtZV9nZXRf
ZGVmYXVsdCgpOworICAgICAgICBTdHJpbmcgaWNvbk5hbWUgPSBtZWRpYSArICItIiArIHN1YnR5
cGU7CisgICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVtZSwgaWNvbk5h
bWUudXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7CisgICAgICAg
IGljb25OYW1lID0gImdub21lLW1pbWUtIiArIG1lZGlhICsgIi0iICsgc3VidHlwZTsKKyAgICAg
ICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFzX2ljb24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCku
ZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBpY29uTmFtZTsKKyAgICAgICAgaWNvbk5hbWUg
PSBtZWRpYSArICIteC1nZW5lcmljIjsKKyAgICAgICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFzX2lj
b24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVy
biBpY29uTmFtZTsKKyAgICAgICAgaWNvbk5hbWUgPSBtZWRpYSArICJnbm9tZS1taW1lLSIgKyBt
ZWRpYTsKKyAgICAgICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFzX2ljb24oaWNvblRoZW1lLCBpY29u
TmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBpY29uTmFtZTsKKyAgICB9
CisgICAgcmV0dXJuIEdUS19TVE9DS19GSUxFOworfQorCisvLyBGSVhNRTogTW92ZSB0aGUgY29k
ZSB0byBDaHJvbWVDbGllbnQ6Omljb25Gb3JGaWxlcygpLgorUGFzc1JlZlB0cjxJY29uPiBJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKK3sK
KyAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoZmlsZW5hbWVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIGlmICghZ19wYXRoX3NraXBfcm9v
dChmaWxlbmFtZXNbMF0udXRmOCgpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICBTdHJpbmcgTUlNRVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
clBhdGgoZmlsZW5hbWVzWzBdKTsKKyAgICAgICAgU3RyaW5nIGljb25OYW1lID0gbG9va3VwSWNv
bk5hbWUoTUlNRVR5cGUpOworCisgICAgICAgIFJlZlB0cjxJY29uPiBpY29uID0gYWRvcHRSZWYo
bmV3IEljb24pOworICAgICAgICBpY29uLT5tX2ljb24gPSBndGtfaWNvbl90aGVtZV9sb2FkX2lj
b24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSwg
MTYsIEdUS19JQ09OX0xPT0tVUF9VU0VfQlVJTFRJTiwgMCk7CisgICAgICAgIGlmICghaWNvbi0+
bV9pY29uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBpY29uLnJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICAvL0ZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAgIHJldHVybiAw
OworfQorCit2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPOiBTY2FsZS9jbGlwIHRoZSBpbWFnZSBpZiBu
ZWNlc3NhcnkuCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKTsKKyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhi
dWYoY3IsIG1faWNvbiwgcmVjdC54KCksIHJlY3QueSgpKTsKKyAgICBjYWlyb19wYWludChjcik7
CisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9ncmFwaGljcy9JbWFnZUJ1ZmZlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDZmZjUzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJHdGsuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworI2lu
Y2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBHT3duUHRyPGdjaGFyPiYgYnVmZmVy
LCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBl
bmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KKyAg
ICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4
YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKKworICAgIFN0
cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKKyAgICBpZiAo
dHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBl
ICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5cGUgPT0gImpwZWciKSB7Cisg
ICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFz
PiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYK
KyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0
aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIHBpeGJ1ZiA9IGFk
b3B0R1JlZihjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNl
VG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICBpZiAodHlwZSA9PSAianBlZyIg
JiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAg
ICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgc3RhdGljX2Nh
c3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7CisgICAgICAgIGdka19waXhidWZfc2F2
ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwg
dHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3IsICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4
KCkuZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3Rv
X2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBl
LnV0ZjgoKS5kYXRhKCksICZlcnJvciwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQor
CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBkb3VibGUqIHF1YWxpdHksIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisKKyAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIoMCk7CisgICAgZ3NpemUg
YnVmZmVyU2l6ZTsKKyAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZhY2UsIG1pbWVU
eXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4gImRhdGE6
LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoYnVm
ZmVyLmdldCgpLCBidWZmZXJTaXplLCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToi
ICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUd0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZDlmYmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9ncmFwaGljcy9JbWFnZUd0ay5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJHT3duUHRyR3RrLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjaGFyKiBnZXRQYXRoVG9J
bWFnZVJlc291cmNlKGNoYXIqIHJlc291cmNlKQoreworICAgIGlmIChnX2dldGVudigiV0VCS0lU
X1RPUF9MRVZFTCIpKQorICAgICAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShnX2dldGVudigi
V0VCS0lUX1RPUF9MRVZFTCIpLCAiU291cmNlIiwgIldlYkNvcmUiLCAiUmVzb3VyY2VzIiwgcmVz
b3VyY2UsIE5VTEwpOworCisgICAgcmV0dXJuIGdfYnVpbGRfZmlsZW5hbWUoc2hhcmVkUmVzb3Vy
Y2VzUGF0aCgpLmRhdGEoKSwgImltYWdlcyIsIHJlc291cmNlLCBOVUxMKTsKK30KKworc3RhdGlj
IENTdHJpbmcgZ2V0VGhlbWVJY29uRmlsZU5hbWUoY29uc3QgY2hhciogbmFtZSwgaW50IHNpemUp
Cit7CisgICAgR3RrSWNvbkluZm8qIGljb25JbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2lj
b24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBzaXplLCBHVEtfSUNPTl9MT09L
VVBfTk9fU1ZHKTsKKyAgICAvLyBUcnkgdG8gZmFsbGJhY2sgb24gTUlTU0lOR19JTUFHRS4KKyAg
ICBpZiAoIWljb25JbmZvKQorICAgICAgICBpY29uSW5mbyA9IGd0a19pY29uX3RoZW1lX2xvb2t1
cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX01JU1NJTkdfSU1BR0UsIHNpemUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0lDT05f
TE9PS1VQX05PX1NWRyk7CisgICAgaWYgKGljb25JbmZvKSB7CisgICAgICAgIEdPd25QdHI8R3Rr
SWNvbkluZm8+IGluZm8oaWNvbkluZm8pOworICAgICAgICByZXR1cm4gQ1N0cmluZyhndGtfaWNv
bl9pbmZvX2dldF9maWxlbmFtZShpbmZvLmdldCgpKSk7CisgICAgfQorCisgICAgLy8gTm8gaWNv
biB3YXMgZm91bmQsIHRoaXMgY2FuIGhhcHBlbiBpZiBub3QgR1RLIHRoZW1lIGlzIHNldC4gSW4K
KyAgICAvLyB0aGF0IGNhc2UgYW4gZW1wdHkgSW1hZ2Ugd2lsbCBiZSBjcmVhdGVkLgorICAgIHJl
dHVybiBDU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9h
ZFJlc291cmNlU2hhcmVkQnVmZmVyKENTdHJpbmcgbmFtZSkKK3sKKyAgICBHT3duUHRyPGdjaGFy
PiBjb250ZW50OworICAgIGdzaXplIGxlbmd0aDsKKyAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVu
dHMobmFtZS5kYXRhKCksICZjb250ZW50Lm91dFB0cigpLCAmbGVuZ3RoLCAwKSkKKyAgICAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoY29udGVudC5nZXQoKSwgbGVuZ3RoKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6
aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCit7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IGxvYWRJ
bWFnZUZyb21GaWxlKENTdHJpbmcgZmlsZU5hbWUpCit7CisgICAgUmVmUHRyPEJpdG1hcEltYWdl
PiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFmaWxlTmFtZS5pc051bGwo
KSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBsb2FkUmVzb3VyY2VT
aGFyZWRCdWZmZXIoZmlsZU5hbWUpOworICAgICAgICBpbWctPnNldERhdGEoYnVmZmVyLnJlbGVh
c2UoKSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBpbWcucmVsZWFzZSgpOworfQorCitQYXNz
UmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBDU3RyaW5nIGZpbGVOYW1lOworICAgIGlmICghc3RyY21wKCJtaXNzaW5nSW1h
Z2UiLCBuYW1lKSkKKyAgICAgICAgZmlsZU5hbWUgPSBnZXRUaGVtZUljb25GaWxlTmFtZShHVEtf
U1RPQ0tfTUlTU0lOR19JTUFHRSwgMTYpOworICAgIGlmIChmaWxlTmFtZS5pc051bGwoKSkgewor
ICAgICAgICBHT3duUHRyPGdjaGFyPiBpbWFnZU5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcy5wbmci
LCBuYW1lKSk7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGdsaWJGaWxlTmFtZShnZXRQYXRoVG9J
bWFnZVJlc291cmNlKGltYWdlTmFtZS5nZXQoKSkpOworICAgICAgICBmaWxlTmFtZSA9IGdsaWJG
aWxlTmFtZS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbG9hZEltYWdlRnJvbUZpbGUoZmls
ZU5hbWUpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtVGhlbWVJ
Y29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKQoreworICAgIHJldHVybiBsb2FkSW1hZ2VG
cm9tRmlsZShnZXRUaGVtZUljb25GaWxlTmFtZShuYW1lLCBzaXplKSk7Cit9CisKK0dka1BpeGJ1
ZiogQml0bWFwSW1hZ2U6OmdldEdka1BpeGJ1ZigpCit7CisgICAgTmF0aXZlSW1hZ2VDYWlybyog
aW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBpbWFnZSA/
IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoaW1hZ2UtPnN1cmZhY2UoKSkgOiAwOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFBvaW50R3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDIxNTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFBvaW50R3RrLmNwcApAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCisjaW5jbHVk
ZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBvaW50OjpJbnRQb2lu
dChjb25zdCBHZGtQb2ludCYgcCkKKyAgICA6IG1feChwLngpCisgICAgLCBtX3kocC55KQorewor
fQorCitJbnRQb2ludDo6b3BlcmF0b3IgR2RrUG9pbnQoKSBjb25zdAoreworICAgIEdka1BvaW50
IHAgPSB7IHgoKSwgeSgpIH07CisgICAgcmV0dXJuIHA7Cit9CisKK30KKworLy8gdmltOiB0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVj
dEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFJlY3RHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzEyODEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFJlY3RHdGsuY3BwCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1
ZGUgPGdkay9nZGsuaD4KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgR2RrUmVjdGFuZ2xlJiByKQorICAgIDog
bV9sb2NhdGlvbihJbnRQb2ludChyLngsIHIueSkpCisgICAgLCBtX3NpemUoci53aWR0aCwgci5o
ZWlnaHQpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIEdka1JlY3RhbmdsZSgpIGNvbnN0Cit7
CisgICAgR2RrUmVjdGFuZ2xlIHIgPSB7IHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9Owor
ICAgIHJldHVybiByOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zNDIzZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEs
MTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKworI2RlZmluZSBT
RUNSRVRfV0lUSF9VTlNUQUJMRSAxCisjZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVDVF9UT19DSEFO
R0UgMQorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5jbHVkZSAiR1Jl
ZlB0ckd0ay5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8bGlic2Vj
cmV0L3NlY3JldC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tp
bmdTdG9yZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDcmVkZW50aWFsQmFja2luZ1N0
b3JlLCBiYWNraW5nU3RvcmUsICgpKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlOworfQorCitz
dGF0aWMgR1JlZlB0cjxHSGFzaFRhYmxlPiBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hh
bGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENy
ZWRlbnRpYWwmIGNyZWRlbnRpYWwgPSBDcmVkZW50aWFsKCkpCit7CisgICAgU291cFVSSSogdXJp
ID0gc291cF9tZXNzYWdlX2dldF91cmkoY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOworICAgIEdS
ZWZQdHI8R0hhc2hUYWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihzZWNyZXRfYXR0cmlidXRl
c19idWlsZCgKKyAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKKyAgICAgICAg
ImRvbWFpbiIsIHNvdXBfYXV0aF9nZXRfcmVhbG0oY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAorICAg
ICAgICAic2VydmVyIiwgdXJpLT5ob3N0LAorICAgICAgICAicHJvdG9jb2wiLCB1cmktPnNjaGVt
ZSwKKyAgICAgICAgImF1dGh0eXBlIiwgc291cF9hdXRoX2dldF9zY2hlbWVfbmFtZShjaGFsbGVu
Z2Uuc291cEF1dGgoKSksCisgICAgICAgICJwb3J0IiwgdXJpLT5wb3J0LAorICAgICAgICBOVUxM
KSk7CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYXR0cmli
dXRlczsKKworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQoYXR0cmlidXRlcy5nZXQoKSwgZ19zdHJk
dXAoInVzZXIiKSwgZ19zdHJkdXAoY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSkpOwor
ICAgIHJldHVybiBhdHRyaWJ1dGVzOworfQorCitzdHJ1Y3QgQ3JlZGVudGlhbEZvckNoYWxsZW5n
ZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEgeworICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNy
ZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkKiBkYXRhOwor
fTsKKworc3RhdGljIHZvaWQgY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFj
ayhTZWNyZXRTZXJ2aWNlKiBzZXJ2aWNlLCBHQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0LCBDcmVk
ZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSogY2FsbGJhY2tEYXRhKQor
eworICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxs
YmFjayBjYWxsYmFjayA9IGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2s7CisgICAgdm9pZCogZGF0YSA9
IGNhbGxiYWNrRGF0YS0+ZGF0YTsKKyAgICBkZWxldGUgY2FsbGJhY2tEYXRhOworCisgICAgR093
blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdPd25QdHI8R0xpc3Q+IGVsZW1lbnRzKHNlY3JldF9z
ZXJ2aWNlX3NlYXJjaF9maW5pc2goc2VydmljZSwgYXN5bmNSZXN1bHQsICZlcnJvci5vdXRQdHIo
KSkpOworICAgIGlmIChlcnJvciB8fCAhZWxlbWVudHMgfHwgIWVsZW1lbnRzLT5kYXRhKSB7Cisg
ICAgICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPFNlY3JldEl0ZW0+IHNlY3JldEl0ZW0gPSBhZG9wdEdSZWYoc3Rh
dGljX2Nhc3Q8U2VjcmV0SXRlbSo+KGVsZW1lbnRzLT5kYXRhKSk7CisgICAgR1JlZlB0cjxHSGFz
aFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9hdHRyaWJ1dGVz
KHNlY3JldEl0ZW0uZ2V0KCkpKTsKKyAgICBTdHJpbmcgdXNlciA9IFN0cmluZzo6ZnJvbVVURjgo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5n
ZXQoKSwgInVzZXIiKSkpOworICAgIGlmICh1c2VyLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxs
YmFjayhDcmVkZW50aWFsKCksIGRhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c2l6ZV90IGxlbmd0aDsKKyAgICBHUmVmUHRyPFNlY3JldFZhbHVlPiBzZWNyZXRWYWx1ZSA9IGFk
b3B0R1JlZihzZWNyZXRfaXRlbV9nZXRfc2VjcmV0KHNlY3JldEl0ZW0uZ2V0KCkpKTsKKyAgICBj
b25zdCBjaGFyKiBwYXNzd29yZERhdGEgPSBzZWNyZXRfdmFsdWVfZ2V0KHNlY3JldFZhbHVlLmdl
dCgpLCAmbGVuZ3RoKTsKKyAgICBTdHJpbmcgcGFzc3dvcmQgPSBTdHJpbmc6OmZyb21VVEY4KHBh
c3N3b3JkRGF0YSwgbGVuZ3RoKTsKKworICAgIGNhbGxiYWNrKENyZWRlbnRpYWwodXNlciwgcGFz
c3dvcmQsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCksIGRhdGEpOworfQorCit2b2lk
IENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OmNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNh
bGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBkYXRhKQoreworICAgIC8vIFRoZSBkZWZhdWx0IGZsYWcg
b25seSByZXR1cm5zIHRoZSBtb3N0IHJlY2VudCBpdGVtLCBub3QgYWxsIG9mIHRoZW0uCisgICAg
U2VjcmV0U2VhcmNoRmxhZ3Mgc2VhcmNoRmxhZ3MgPSBzdGF0aWNfY2FzdDxTZWNyZXRTZWFyY2hG
bGFncz4oU0VDUkVUX1NFQVJDSF9VTkxPQ0sgfCBTRUNSRVRfU0VBUkNIX0xPQURfU0VDUkVUUyk7
CisgICAgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEqIGNhbGxi
YWNrRGF0YSA9IG5ldyBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0
YTsKKyAgICBjYWxsYmFja0RhdGEtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgY2FsbGJhY2tE
YXRhLT5kYXRhID0gZGF0YTsKKworICAgIHNlY3JldF9zZXJ2aWNlX3NlYXJjaCgKKyAgICAgICAg
MCwgLy8gVGhlIGRlZmF1bHQgU2VjcmV0U2VydmljZS4KKyAgICAgICAgU0VDUkVUX1NDSEVNQV9D
T01QQVRfTkVUV09SSywKKyAgICAgICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxs
ZW5nZShjaGFsbGVuZ2UpLmdldCgpLAorICAgICAgICBzZWFyY2hGbGFncywKKyAgICAgICAgMCwg
Ly8gY2FuY2VsbGFibGUKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxi
YWNrPihjcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrKSwKKyAgICAgICAg
Y2FsbGJhY2tEYXRhKTsKK30KKwordm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpzdG9yZUNy
ZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFs
bGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgQ1N0cmluZyB1dGY4
UGFzc3dvcmQgPSBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpOworICAgIEdSZWZQdHI8U2Vj
cmV0VmFsdWU+IG5ld1NlY3JldFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF92YWx1ZV9uZXcodXRm
OFBhc3N3b3JkLmRhdGEoKSwgdXRmOFBhc3N3b3JkLmxlbmd0aCgpLCAidGV4dC9wbGFpbiIpKTsK
KworICAgIHNlY3JldF9zZXJ2aWNlX3N0b3JlKAorICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBT
ZWNyZXRTZXJ2aWNlLgorICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorICAg
ICAgICBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3Jl
ZGVudGlhbCkuZ2V0KCksCisgICAgICAgIFNFQ1JFVF9DT0xMRUNUSU9OX0RFRkFVTFQsCisgICAg
ICAgIF8oIldlYktpdEdUSysgcGFzc3dvcmQiKSwKKyAgICAgICAgbmV3U2VjcmV0VmFsdWUuZ2V0
KCksCisgICAgICAgIDAsIC8vIGNhbmNlbGxhYmxlCisgICAgICAgIDAsIC8vIGNhbGxiYWNrCisg
ICAgICAgIDApOyAvLyBkYXRhCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZGE5YTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5o
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAorI2RlZmluZSBDcmVkZW50aWFsQmFja2lu
Z1N0b3JlX2gKKworI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKworY2xhc3MgQ3JlZGVudGlhbEJh
Y2tpbmdTdG9yZSB7CitXVEZfTUFLRV9OT05DT1BZQUJMRShDcmVkZW50aWFsQmFja2luZ1N0b3Jl
KTsKK3B1YmxpYzoKKyAgICBmcmllbmQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlh
bEJhY2tpbmdTdG9yZSgpOworICAgIHZpcnR1YWwgfkNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKSB7
IH0KKworICAgIHR5cGVkZWYgdm9pZCAoKkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayko
Y29uc3QgQ3JlZGVudGlhbCYsIHZvaWQqIGRhdGEpOworCisgICAgdm9pZCBjcmVkZW50aWFsRm9y
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbEZvckNo
YWxsZW5nZUNhbGxiYWNrLCB2b2lkKiBkYXRhKTsKKyAgICB2b2lkIHN0b3JlQ3JlZGVudGlhbHNG
b3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50
aWFsJik7Citwcml2YXRlOgorICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmUoKSB7IH0KK307CisK
K0NyZWRlbnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzVlNWEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlE
KCkKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAgIHJldHVy
biAiIjsKK30KKworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgorICAgIHJldHVybiAiZW5fdXMi
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2YwYjNhMy4uZDcwOTFmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDIyIEBACiAyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFp
bC5jb20+CiAKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMg
ZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSB2YXJpb3Vz
IGNwcGZsYWdzIGxpc3RpbmdzIHRoYXQgYXJlIG5vdyBlbXB0eS4KKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOiBSZW1vdmUgYnVpbGQgdGFyZ2V0cyBmb3Igc291cmNlIGZpbGVzIHRoYXQg
d2VyZSBtb3ZlZCB0byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRvIFNvdXJjZS9QbGF0Zm9ybS9ndGsuCisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3RrLzogTW92ZWQgYWxsIHRoZSBzb3VyY2UgZmlsZXMg
dG8gU291cmNlL1BsYXRmb3JtL2d0ay9hdWRpby4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvOiBNb3ZlZCBhbGwgdGhlIHNvdXJjZSBmaWxlcyB0byBTb3VyY2UvUGxhdGZvcm0vZ3Rr
L2dyYXBoaWNzLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvZ3RrLzogTW92ZWQgYWxsIHRo
ZSBzb3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrLgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvZ3RrLzogTW92ZWQgYWxsIHRoZSBzb3VyY2UgZmlsZXMgdG8gU291cmNl
L1BsYXRmb3JtL2d0ay90ZXh0LgorCisyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2Jl
cnNla0BnbWFpbC5jb20+CisKICAgICAgICAgW0dUS10gUmVtb3ZlIGxpYldlYkNvcmVQbGF0Zm9y
bS5sYSwgYnVpbGRpbmcgaXRzIHNvdXJjZXMgaW50byBsaWJQbGF0Zm9ybS5sYQogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KaW5kZXggNGIwOTljNC4uZjRhMzMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTc5LDcgKzc5LDYgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0IFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIgXApAQCAtMTIzLDgg
KzEyMiw2IEBAIHBsYXRmb3JtX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZyBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
ZW5jaGFudAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhYjczOWJhLi40ZjYw
YjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MzEsMTYgKzU3MzEsNiBA
QCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9XaW5kUnVsZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmls
ZUZvcm1hdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LVVJMR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1
YWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2ls
bFJpbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcCBcCkBA
IC01ODk3LDggKzU4ODcsNiBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRp
YWxCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAgXApAQCAtNjAwMSw3
ICs1OTg5LDYgQEAgcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3lzdGVtVGltZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQv
VGV4dENoZWNrZXJFbmNoYW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5j
aGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpUmVzb2x2ZXIuaCBcCkBAIC02MTE4LDcgKzYxMDUsNiBAQCBwbGF0Zm9ybV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVjdGlvbkd0ay5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5jcHAgXApA
QCAtNjE0MCw5MSArNjEyNiwxMCBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd0d0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9y
bVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JY29uR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ltYWdlQnVmZmVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ludFBvaW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ludFJlY3RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxl
U3lzdGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5
c3RlbUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0N1cnNvckd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9EcmFnSWNvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0lt
YWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a1V0aWxpdGllcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0
ckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtQb3B1cE1lbnUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBN
ZW51LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUG9wdXBNZW51R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVw
TWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbGJhclRoZW1lR3RrMy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxWaWV3R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVw
TWVudUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1l
bnVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAogCiBpZiBUQVJH
RVRfWDExCiBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJp
bi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBc
CkBAIC02MjMzLDkgKzYxMzgsNyBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIGlmIFVTRV9PUEVO
R0wKIHBsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dMQ29udGV4dC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dMQ29udGV4dC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCiBlbmRpZiAjIEVORCBVU0VfT1BFTkdMCiBpZiBV
U0VfRUdMCiBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2ZmM3ODdmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2d0ay9BdWRpb0J1c0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQot
Ci0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLQotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5oIgot
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxBdWRpb0J1cz4gQXVkaW9CdXM6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGZsb2F0IHNhbXBsZVJhdGUpCi17
Ci0gICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcy53YXYiLCBu
YW1lKSk7Ci0gICAgY29uc3QgY2hhciogZW52aXJvbm1lbnRQYXRoID0gZ2V0ZW52KCJBVURJT19S
RVNPVVJDRVNfUEFUSCIpOwotICAgIEdPd25QdHI8Z2NoYXI+IGFic29sdXRlRmlsZW5hbWU7Ci0g
ICAgaWYgKGVudmlyb25tZW50UGF0aCkKLSAgICAgICAgYWJzb2x1dGVGaWxlbmFtZS5zZXQoZ19i
dWlsZF9maWxlbmFtZShlbnZpcm9ubWVudFBhdGgsIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNldChnX2J1aWxkX2ZpbGVuYW1lKHNo
YXJlZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJyZXNvdXJjZXMiLCAiYXVkaW8iLCBmaWxlbmFt
ZS5nZXQoKSwgTlVMTCkpOwotICAgIHJldHVybiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGFic29s
dXRlRmlsZW5hbWUuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRlKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4ZjU2YmE2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkNvbG9yLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotQ29sb3I6OkNvbG9yKGNvbnN0IEdka0NvbG9yJiBjKQotICAgIDogbV9j
b2xvcihtYWtlUkdCKGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVlID4+IDgpKQotICAg
ICwgbV92YWxpZCh0cnVlKQotewotfQotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi1Db2xv
cjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgYykKLSAgICA6IG1fY29sb3IobWFrZVJHQkEoc3RhdGlj
X2Nhc3Q8aW50PihjLnJlZCAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oYy5ncmVlbiAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oYy5ibHVlICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihjLmFscGhhICogMjU1KSkpCi0gICAgLCBtX3ZhbGlkKHRydWUpCi17Ci19Ci0KLUNv
bG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QKLXsKLSAgICBkb3VibGUgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGE7Ci0gICAgZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
R2RrUkdCQSByZ2JhID0geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OwotICAgIHJldHVybiBy
Z2JhOwotfQotI2VuZGlmCi0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTlkN2YyZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0NTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTAotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLQotI2luY2x1ZGUgIkZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaCIKLQotI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVk
ZSAiR1N0cmVhbWVyR1dvcmxkLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1z
Lmg+Ci0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIEhVRF9BVVRPX0hJREVfSU5U
RVJWQUwgMzAwMCAvLyAzIHNlY29uZHMKLSNkZWZpbmUgUFJPR1JFU1NfQkFSX1VQREFURV9JTlRF
UlZBTCAxNTAgLy8gMTUwbXMKLQotLy8gVXNlIHN5bWJvbGljIGljb25zIG9ubHkgaWYgd2UgYnVp
bGQgd2l0aCBHVEsrLTMgc3VwcG9ydC4gVGhleSBjb3VsZAotLy8gYmUgZW5hYmxlZCBmb3IgdGhl
IEdUSysyIGJ1aWxkIGJ1dCB3ZSdkIG5lZWQgdG8gYnVtcCB0aGUgcmVxdWlyZWQKLS8vIHZlcnNp
b24gdG8gYXQgbGVhc3QgMi4yMi4KLSNpZiBHVEtfTUFKT1JfVkVSU0lPTiA+IDIKLSNkZWZpbmUg
SUNPTl9OQU1FX1NVRkZJWCAiLXN5bWJvbGljIgotI2Vsc2UKLSNkZWZpbmUgSUNPTl9OQU1FX1NV
RkZJWAotI2VuZGlmCi0KLSNkZWZpbmUgUExBWV9JQ09OX05BTUUgIm1lZGlhLXBsYXliYWNrLXN0
YXJ0IklDT05fTkFNRV9TVUZGSVgKLSNkZWZpbmUgUEFVU0VfSUNPTl9OQU1FICJtZWRpYS1wbGF5
YmFjay1wYXVzZSJJQ09OX05BTUVfU1VGRklYCi0jZGVmaW5lIEVYSVRfRlVMTFNDUkVFTl9JQ09O
X05BTUUgInZpZXctcmVzdG9yZSJJQ09OX05BTUVfU1VGRklYCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGdib29sZWFuIGhpZGVIdWRDYWxsYmFjayhGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPmhpZGVIdWQoKTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtNb3Rp
b25Ob3RpZnlFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50LCAg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9s
bGVyLT5zaG93SHVkKHRydWUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBv
bkZ1bGxzY3JlZW5HdGtBY3RpdmVOb3RpZmljYXRpb24oR3RrV2lkZ2V0KiB3aWRnZXQsIEdQYXJh
bVNwZWMqIHByb3BlcnR5LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVy
KQotewotICAgIGlmICghZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyh3aWRnZXQpKSkK
LSAgICAgICAgY29udHJvbGxlci0+aGlkZUh1ZCgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gb25G
dWxsc2NyZWVuR3RrQ29uZmlndXJlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Q29u
ZmlndXJlKiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikK
LXsKLSAgICBjb250cm9sbGVyLT5ndGtDb25maWd1cmUoZXZlbnQpOwotICAgIHJldHVybiBUUlVF
OwotfQotCi1zdGF0aWMgdm9pZCBvbkZ1bGxzY3JlZW5HdGtEZXN0cm95KEd0a1dpZGdldCogd2lk
Z2V0LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNv
bnRyb2xsZXItPmV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRvZ2dsZVBsYXlQ
YXVzZUFjdGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9sbGVyLT50b2dnbGVQbGF5KCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGV4aXRGdWxsc2NyZWVuQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9uLCBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xs
ZXItPmV4aXRPblVzZXJSZXF1ZXN0KCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBwcm9ncmVzc0Jh
clVwZGF0ZUNhbGxiYWNrKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIp
Ci17Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXItPnVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7Ci19Ci0K
LXN0YXRpYyBnYm9vbGVhbiB0aW1lU2NhbGVCdXR0b25QcmVzc2VkKEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNv
bnRyb2xsZXIpCi17Ci0gICAgaWYgKGV2ZW50LT50eXBlICE9IEdES19CVVRUT05fUFJFU1MpCi0g
ICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGNvbnRyb2xsZXItPmJlZ2luU2VlaygpOwotICAg
IHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVTY2FsZUJ1dHRvblJlbGVh
c2VkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQsIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+ZW5kU2Vl
aygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGltZVNjYWxlVmFsdWVD
aGFuZ2VkKEd0a1dpZGdldCogd2lkZ2V0LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBj
b250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPmRvU2VlaygpOwotfQotCi1zdGF0aWMgdm9p
ZCB2b2x1bWVWYWx1ZUNoYW5nZWQoR3RrU2NhbGVCdXR0b24gKmJ1dHRvbiwgZ2RvdWJsZSB2YWx1
ZSwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250
cm9sbGVyLT5zZXRWb2x1bWUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Ci19Ci0KLQotRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi0gICAgOiBGdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyR1N0cmVhbWVyKHBsYXllcikKLSAgICAsIG1faHVkVGltZW91dElkKDAp
Ci0gICAgLCBtX3Byb2dyZXNzQmFyVXBkYXRlSWQoMCkKLSAgICAsIG1fc2Vla0xvY2soZmFsc2Up
Ci0gICAgLCBtX3dpbmRvdygwKQotICAgICwgbV9odWRXaW5kb3coMCkKLSAgICAsIG1fdm9sdW1l
QnV0dG9uKDApCi0gICAgLCBtX2tleVByZXNzU2lnbmFsSWQoMCkKLSAgICAsIG1fZGVzdHJveVNp
Z25hbElkKDApCi0gICAgLCBtX2lzQWN0aXZlU2lnbmFsSWQoMCkKLSAgICAsIG1fbW90aW9uTm90
aWZ5U2lnbmFsSWQoMCkKLSAgICAsIG1fY29uZmlndXJlRXZlbnRTaWduYWxJZCgwKQotICAgICwg
bV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZCgwKQotICAgICwgbV90aW1lU2NhbGVCdXR0b25QcmVz
c2VkU2lnbmFsSWQoMCkKLSAgICAsIG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRTaWduYWxJZCgw
KQotICAgICwgbV9wbGF5QWN0aW9uQWN0aXZhdGVTaWduYWxJZCgwKQotICAgICwgbV9leGl0RnVs
bGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZCgwKQotewotfQotCi12b2lkIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGs6Omd0a0NvbmZpZ3VyZShHZGtFdmVudENvbmZpZ3VyZSogZXZlbnQp
Ci17Ci0gICAgdXBkYXRlSHVkUG9zaXRpb24oKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjpzaG93SHVkKGJvb2wgYXV0b0hpZGUpCi17Ci0gICAgaWYgKCFtX2h1ZFdp
bmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faHVkVGltZW91dElkKSB7Ci0gICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX2h1ZFRpbWVvdXRJZCk7Ci0gICAgICAgIG1faHVkVGltZW91
dElkID0gMDsKLSAgICB9Ci0KLSAgICAvLyBTaG93IHRoZSBjdXJzb3IuCi0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIGdka193aW5k
b3dfc2V0X2N1cnNvcih3aW5kb3csIDApOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwcm9ncmVzcyBi
YXIgaW1tZWRpYXRlbHkgYmVmb3JlIHNob3dpbmcgdGhlIHdpbmRvdy4KLSAgICB1cGRhdGVIdWRQ
cm9ncmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwobV9odWRXaW5kb3cpOwotICAg
IHVwZGF0ZUh1ZFBvc2l0aW9uKCk7Ci0KLSAgICAvLyBTdGFydCBwZXJpb2RpYyB1cGRhdGVzIG9m
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgaWYgKCFtX3Byb2dyZXNzQmFyVXBkYXRlSWQpCi0gICAg
ICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IGdfdGltZW91dF9hZGQoUFJPR1JFU1NfQkFSX1VQ
REFURV9JTlRFUlZBTCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocHJvZ3Jlc3NCYXJV
cGRhdGVDYWxsYmFjayksIHRoaXMpOwotCi0gICAgLy8gSGlkZSB0aGUgaHVkIGluIGZldyBzZWNv
bmRzLCBpZiByZXF1ZXN0ZWQuCi0gICAgaWYgKGF1dG9IaWRlKQotICAgICAgICBtX2h1ZFRpbWVv
dXRJZCA9IGdfdGltZW91dF9hZGQoSFVEX0FVVE9fSElERV9JTlRFUlZBTCwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oaGlkZUh1ZENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLXZvaWQgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6aGlkZUh1ZCgpCi17Ci0gICAgaWYgKG1faHVkVGlt
ZW91dElkKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX2h1ZFRpbWVvdXRJZCk7Ci0gICAg
ICAgIG1faHVkVGltZW91dElkID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIW1faHVkV2luZG93KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBLZWVwIHRoZSBodWQgdmlzaWJsZSBpZiBhIHNlZWsg
aXMgaW4gcHJvZ3Jlc3Mgb3IgaWYgdGhlIHZvbHVtZQotICAgIC8vIHBvcHVwIGlzIHZpc2libGUu
Ci0gICAgR3RrV2lkZ2V0KiB2b2x1bWVQb3B1cCA9IGd0a19zY2FsZV9idXR0b25fZ2V0X3BvcHVw
KEdUS19TQ0FMRV9CVVRUT04obV92b2x1bWVCdXR0b24pKTsKLSAgICBpZiAobV9zZWVrTG9jayB8
fCBndGtfd2lkZ2V0X2dldF92aXNpYmxlKHZvbHVtZVBvcHVwKSkgewotICAgICAgICBzaG93SHVk
KHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR2RrV2luZG93KiB3aW5kb3cg
PSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIEdka0N1cnNvciogY3Vyc29y
ID0gYmxhbmtDdXJzb3IoKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCBjdXJz
b3IpOwotCi0gICAgZ3RrX3dpZGdldF9oaWRlKG1faHVkV2luZG93KTsKLQotICAgIGlmIChtX3By
b2dyZXNzQmFyVXBkYXRlSWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcHJvZ3Jlc3NC
YXJVcGRhdGVJZCk7Ci0gICAgICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IDA7Ci0gICAgfQot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gb25GdWxsc2NyZWVuR3RrS2V5UHJlc3NFdmVudChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrKiBjb250cm9sbGVyKQotewotICAgIHN3aXRjaCAoZXZlbnQtPmtleXZhbCkgewotICAgIGNh
c2UgR0RLX0VzY2FwZToKLSAgICAgICAgY29udHJvbGxlci0+ZXhpdE9uVXNlclJlcXVlc3QoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHREtfc3BhY2U6Ci0gICAgY2FzZSBHREtfUmV0dXJu
OgotICAgICAgICBjb250cm9sbGVyLT50b2dnbGVQbGF5KCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR0RLX1VwOgotICAgICAgICBjb250cm9sbGVyLT5pbmNyZWFzZVZvbHVtZSgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdES19Eb3duOgotICAgICAgICBjb250cm9sbGVyLT5kZWNy
ZWFzZVZvbHVtZSgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjppbml0aWFsaXplV2luZG93KCkKLXsKLSAgICBtX3dpbmRvdyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R3RrV2lkZ2V0Kj4obV9nc3RyZWFtZXJHV29ybGQtPnBsYXRmb3JtVmlkZW9X
aW5kb3coKS0+d2luZG93KCkpOwotCi0gICAgaWYgKCFtX2h1ZFdpbmRvdykKLSAgICAgICAgY3Jl
YXRlSHVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgYmxhY2sgYmFja2dyb3VuZC4KLSNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotICAgIEdka0NvbG9yIGNvbG9yID0geyAxLCAwLCAwLCAwIH07Ci0gICAg
Z3RrX3dpZGdldF9tb2RpZnlfYmcobV93aW5kb3csIEdUS19TVEFURV9OT1JNQUwsICZjb2xvcik7
Ci0jZWxzZQotICAgIEdka1JHQkEgY29sb3IgPSB7IDAsIDAsIDAsIDF9OwotICAgIGd0a193aWRn
ZXRfb3ZlcnJpZGVfYmFja2dyb3VuZF9jb2xvcihtX3dpbmRvdywgR1RLX1NUQVRFX0ZMQUdfTk9S
TUFMLCAmY29sb3IpOwotI2VuZGlmCi0gICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVk
KG1fd2luZG93LCBGQUxTRSk7Ci0KLSAgICBtX2tleVByZXNzU2lnbmFsSWQgPSBnX3NpZ25hbF9j
b25uZWN0KG1fd2luZG93LCAia2V5LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3Jl
ZW5HdGtLZXlQcmVzc0V2ZW50KSwgdGhpcyk7Ci0gICAgbV9kZXN0cm95U2lnbmFsSWQgPSBnX3Np
Z25hbF9jb25uZWN0KG1fd2luZG93LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVu
R3RrRGVzdHJveSksIHRoaXMpOwotICAgIG1faXNBY3RpdmVTaWduYWxJZCA9IGdfc2lnbmFsX2Nv
bm5lY3QobV93aW5kb3csICJub3RpZnk6OmlzLWFjdGl2ZSIsIEdfQ0FMTEJBQ0sob25GdWxsc2Ny
ZWVuR3RrQWN0aXZlTm90aWZpY2F0aW9uKSwgdGhpcyk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKG1fd2luZG93KTsKLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KG1fd2luZG93KTsKLSAgICBHUmVmUHRyPEdka0N1cnNvcj4gY3Vyc29yKGFkb3B0R1Jl
ZihibGFua0N1cnNvcigpKSk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgY3Vy
c29yLmdldCgpKTsKLQotICAgIG1fbW90aW9uTm90aWZ5U2lnbmFsSWQgPSBnX3NpZ25hbF9jb25u
ZWN0KG1fd2luZG93LCAibW90aW9uLW5vdGlmeS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2Ny
ZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQpLCB0aGlzKTsKLSAgICBtX2NvbmZpZ3VyZUV2ZW50U2ln
bmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiY29uZmlndXJlLWV2ZW50IiwgR19D
QUxMQkFDSyhvbkZ1bGxzY3JlZW5HdGtDb25maWd1cmVFdmVudCksIHRoaXMpOwotCi0gICAgZ3Rr
X3dpbmRvd19mdWxsc2NyZWVuKEdUS19XSU5ET1cobV93aW5kb3cpKTsKLSAgICBzaG93SHVkKHRy
dWUpOwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnVwZGF0ZUh1ZFBv
c2l0aW9uKCkKLXsKLSAgICBpZiAoIW1faHVkV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBHZXQgdGhlIHNjcmVlbiByZWN0YW5nbGUuCi0gICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBn
dGtfd2luZG93X2dldF9zY3JlZW4oR1RLX1dJTkRPVyhtX3dpbmRvdykpOwotICAgIEdka1dpbmRv
dyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2luZG93KTsKLSAgICBHZGtSZWN0
YW5nbGUgZnVsbHNjcmVlblJlY3RhbmdsZTsKLSAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dl
b21ldHJ5KHNjcmVlbiwgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCB3
aW5kb3cpLCAmZnVsbHNjcmVlblJlY3RhbmdsZSk7Ci0KLSAgICAvLyBHZXQgdGhlIHBvcHVwIHdp
bmRvdyBzaXplLgotICAgIGludCBodWRXaWR0aCwgaHVkSGVpZ2h0OwotICAgIGd0a193aW5kb3df
Z2V0X3NpemUoR1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksICZodWRXaWR0aCwgJmh1ZEhlaWdodCk7
Ci0KLSAgICAvLyBSZXNpemUgdGhlIGh1ZCB0byB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgc2NyZWVu
LgotICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBmdWxsc2Ny
ZWVuUmVjdGFuZ2xlLndpZHRoLCBodWRIZWlnaHQpOwotCi0gICAgLy8gTW92ZSB0aGUgaHVkIHRv
IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4KLSAgICBndGtfd2luZG93X21vdmUoR1RLX1dJTkRP
VyhtX2h1ZFdpbmRvdyksIGZ1bGxzY3JlZW5SZWN0YW5nbGUueCwgZnVsbHNjcmVlblJlY3Rhbmds
ZS5oZWlnaHQgKyBmdWxsc2NyZWVuUmVjdGFuZ2xlLnkgLSBodWRIZWlnaHQpOwotfQotCi12b2lk
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmRlc3Ryb3lXaW5kb3coKQotewotICAgIGlm
ICghbV9odWRXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdChtX3dpbmRvdywgbV9rZXlQcmVzc1NpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fZGVzdHJveVNpZ25hbElkKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1faXNBY3RpdmVTaWduYWxJZCk7Ci0g
ICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBtX21vdGlvbk5vdGlmeVNp
Z25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fY29u
ZmlndXJlRXZlbnRTaWduYWxJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1f
aHVkV2luZG93LCBtX2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV90aW1lSFNjYWxlLCBtX3RpbWVTY2FsZUJ1dHRvblByZXNzZWRTaWdu
YWxJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhTY2FsZSwgbV90
aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rp
c2Nvbm5lY3QobV90aW1lSFNjYWxlLCBtX2hzY2FsZVVwZGF0ZUlkKTsKLSAgICBnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOwotICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3BsYXlQYXVzZUFjdGlvbiwgbV9wbGF5QWN0
aW9uQWN0aXZhdGVTaWduYWxJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1f
ZXhpdEZ1bGxzY3JlZW5BY3Rpb24sIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFs
SWQpOwotCi0gICAgaWYgKG1faHVkVGltZW91dElkKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92
ZShtX2h1ZFRpbWVvdXRJZCk7Ci0gICAgICAgIG1faHVkVGltZW91dElkID0gMDsKLSAgICB9Ci0K
LSAgICBpZiAobV9wcm9ncmVzc0JhclVwZGF0ZUlkKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92
ZShtX3Byb2dyZXNzQmFyVXBkYXRlSWQpOwotICAgICAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQg
PSAwOwotICAgIH0KLQotICAgIGd0a193aWRnZXRfaGlkZShtX3dpbmRvdyk7Ci0KLSAgICBpZiAo
bV9odWRXaW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2h1ZFdpbmRvdyk7Ci0g
ICAgbV9odWRXaW5kb3cgPSAwOwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGs6OnBsYXlTdGF0ZUNoYW5nZWQoKQotewotICAgIGlmIChtX2NsaWVudC0+bWVkaWFQbGF5ZXJJ
c1BhdXNlZCgpKQotICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5UGF1c2VBY3Rpb24sICJ0b29s
dGlwIiwgXygiUGxheSIpLCAiaWNvbi1uYW1lIiwgUExBWV9JQ09OX05BTUUsIE5VTEwpOwotICAg
IGVsc2UKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheVBhdXNlQWN0aW9uLCAidG9vbHRpcCIs
IF8oIlBhdXNlIiksICJpY29uLW5hbWUiLCBQQVVTRV9JQ09OX05BTUUsIE5VTEwpOwotICAgIHNo
b3dIdWQoIW1fY2xpZW50LT5tZWRpYVBsYXllcklzUGF1c2VkKCkpOwotfQotCi12b2lkIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnZvbHVtZUNoYW5nZWQoKQotewotICAgIGlmICghbV92
b2x1bWVCdXR0b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfYmxv
Y2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOwotICAgIGd0a19zY2FsZV9idXR0
b25fc2V0X3ZhbHVlKEdUS19TQ0FMRV9CVVRUT04obV92b2x1bWVCdXR0b24pLCBtX3BsYXllci0+
dm9sdW1lKCkpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfdW5ibG9jayhtX3ZvbHVtZUJ1dHRvbiwg
bV92b2x1bWVVcGRhdGVJZCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
azo6bXV0ZUNoYW5nZWQoKQotewotICAgIGlmICghbV92b2x1bWVCdXR0b24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9s
dW1lVXBkYXRlSWQpOwotICAgIGd0a19zY2FsZV9idXR0b25fc2V0X3ZhbHVlKEdUS19TQ0FMRV9C
VVRUT04obV92b2x1bWVCdXR0b24pLCBtX3BsYXllci0+bXV0ZWQoKSA/IDAgOiBtX3BsYXllci0+
dm9sdW1lKCkpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfdW5ibG9jayhtX3ZvbHVtZUJ1dHRvbiwg
bV92b2x1bWVVcGRhdGVJZCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
azo6YmVnaW5TZWVrKCkKLXsKLSAgICBtX3NlZWtMb2NrID0gdHJ1ZTsKLX0KLQotdm9pZCBGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpkb1NlZWsoKQotewotICAgIGlmICghbV9zZWVrTG9j
aykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbGF5ZXItPnNlZWsoZ3RrX3JhbmdlX2dldF92
YWx1ZShHVEtfUkFOR0UobV90aW1lSFNjYWxlKSkqbV9wbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAp
OwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmVuZFNlZWsoKQotewot
ICAgIG1fc2Vla0xvY2sgPSBmYWxzZTsKLX0KLQotZ2Jvb2xlYW4gRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0azo6dXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKQotewotICAgIGZsb2F0IG1lZGlhRHVy
YXRpb24obV9wbGF5ZXItPmR1cmF0aW9uKCkpOwotICAgIGZsb2F0IG1lZGlhUG9zaXRpb24obV9w
bGF5ZXItPmN1cnJlbnRUaW1lKCkpOwotCi0gICAgaWYgKCFtX3NlZWtMb2NrKSB7Ci0gICAgICAg
IGdkb3VibGUgdmFsdWUgPSAwLjA7Ci0KLSAgICAgICAgaWYgKG1lZGlhUG9zaXRpb24gJiYgbWVk
aWFEdXJhdGlvbikKLSAgICAgICAgICAgIHZhbHVlID0gKG1lZGlhUG9zaXRpb24gKiAxMDAuMCkg
LyBtZWRpYUR1cmF0aW9uOwotCi0gICAgICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBn
dGtfcmFuZ2VfZ2V0X2FkanVzdG1lbnQoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSkpOwotICAgICAg
ICBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoYWRqdXN0bWVudCwgdmFsdWUpOwotICAgIH0KLQot
ICAgIGd0a19yYW5nZV9zZXRfZmlsbF9sZXZlbChHVEtfUkFOR0UobV90aW1lSFNjYWxlKSwgKG1f
cGxheWVyLT5tYXhUaW1lTG9hZGVkKCkgLyBtZWRpYUR1cmF0aW9uKSogMTAwKTsKLQotICAgIGdj
aGFyKiBsYWJlbCA9IGdfc3RyZHVwX3ByaW50ZigiJXMgLyAlcyIsIHRpbWVUb1N0cmluZyhtZWRp
YVBvc2l0aW9uKS51dGY4KCkuZGF0YSgpLCB0aW1lVG9TdHJpbmcobWVkaWFEdXJhdGlvbikudXRm
OCgpLmRhdGEoKSk7Ci0gICAgZ3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChtX3RpbWVMYWJl
bCksIGxhYmVsKTsKLSAgICBnX2ZyZWUobGFiZWwpOwotICAgIHJldHVybiBUUlVFOwotfQotCi12
b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmNyZWF0ZUh1ZCgpCi17Ci0gICAgbV9o
dWRXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBndGtfd2lu
ZG93X3NldF9ncmF2aXR5KEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBHREtfR1JBVklUWV9TT1VU
SF9XRVNUKTsKLSAgICBndGtfd2luZG93X3NldF90eXBlX2hpbnQoR1RLX1dJTkRPVyhtX2h1ZFdp
bmRvdyksIEdES19XSU5ET1dfVFlQRV9ISU5UX05PUk1BTCk7Ci0KLSAgICBtX2h1ZE1vdGlvbk5v
dGlmeVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX2h1ZFdpbmRvdywgIm1vdGlvbi1ub3Rp
ZnktZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KSwg
dGhpcyk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogaGJveCA9
IGd0a19oYm94X25ldyhGQUxTRSwgNCk7Ci0jZWxzZQotICAgIEd0a1dpZGdldCogaGJveCA9IGd0
a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCA0KTsKLSNlbmRpZgotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9odWRXaW5kb3cpLCBoYm94KTsKLQotICAg
IG1fcGxheVBhdXNlQWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoInBsYXkiLCBfKCJQbGF5IC8gUGF1
c2UiKSwgXygiUGxheSBvciBwYXVzZSB0aGUgbWVkaWEiKSwgUEFVU0VfSUNPTl9OQU1FKTsKLSAg
ICBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3BsYXlQ
YXVzZUFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyh0b2dnbGVQbGF5UGF1c2VBY3RpdmF0
ZWQpLCB0aGlzKTsKLQotICAgIEd0a1dpZGdldCogaXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX3Rv
b2xfaXRlbShtX3BsYXlQYXVzZUFjdGlvbik7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1goaGJveCksIGl0ZW0sIEZBTFNFLCBUUlVFLCAwKTsKLQotICAgIEd0a1dpZGdldCogbGFiZWwg
PSBndGtfbGFiZWxfbmV3KF8oIlRpbWU6IikpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtf
Qk9YKGhib3gpLCBsYWJlbCwgRkFMU0UsIFRSVUUsIDApOwotCi0gICAgR3RrQWRqdXN0bWVudCog
YWRqdXN0bWVudCA9IEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwg
MTAwLjAsIDAuMSwgMS4wLCAxLjApKTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIG1f
dGltZUhTY2FsZSA9IGd0a19oc2NhbGVfbmV3KGFkanVzdG1lbnQpOwotI2Vsc2UKLSAgICBtX3Rp
bWVIU2NhbGUgPSBndGtfc2NhbGVfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBhZGp1
c3RtZW50KTsKLSNlbmRpZgotICAgIGd0a19zY2FsZV9zZXRfZHJhd192YWx1ZShHVEtfU0NBTEUo
bV90aW1lSFNjYWxlKSwgRkFMU0UpOwotICAgIGd0a19yYW5nZV9zZXRfc2hvd19maWxsX2xldmVs
KEdUS19SQU5HRShtX3RpbWVIU2NhbGUpLCBUUlVFKTsKLSAgICBtX3RpbWVTY2FsZUJ1dHRvblBy
ZXNzZWRTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAiYnV0dG9uLXBy
ZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh0aW1lU2NhbGVCdXR0b25QcmVzc2VkKSwgdGhpcyk7Ci0g
ICAgbV90aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdCht
X3RpbWVIU2NhbGUsICJidXR0b24tcmVsZWFzZS1ldmVudCIsIEdfQ0FMTEJBQ0sodGltZVNjYWxl
QnV0dG9uUmVsZWFzZWQpLCB0aGlzKTsKLSAgICBtX2hzY2FsZVVwZGF0ZUlkID0gZ19zaWduYWxf
Y29ubmVjdChtX3RpbWVIU2NhbGUsICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0aW1lU2Nh
bGVWYWx1ZUNoYW5nZWQpLCB0aGlzKTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KGhib3gpLCBtX3RpbWVIU2NhbGUsIFRSVUUsIFRSVUUsIDApOwotCi0gICAgbV90aW1lTGFiZWwg
PSBndGtfbGFiZWxfbmV3KCIiKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94
KSwgbV90aW1lTGFiZWwsIEZBTFNFLCBUUlVFLCAwKTsKLQotICAgIC8vIFZvbHVtZSBidXR0b24u
Ci0gICAgbV92b2x1bWVCdXR0b24gPSBndGtfdm9sdW1lX2J1dHRvbl9uZXcoKTsKLSAgICBndGtf
Ym94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbV92b2x1bWVCdXR0b24sIEZBTFNFLCBUUlVF
LCAwKTsKLSAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9OKG1f
dm9sdW1lQnV0dG9uKSwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKLSAgICBtX3ZvbHVtZVVwZGF0ZUlk
ID0gZ19zaWduYWxfY29ubmVjdChtX3ZvbHVtZUJ1dHRvbiwgInZhbHVlLWNoYW5nZWQiLCBHX0NB
TExCQUNLKHZvbHVtZVZhbHVlQ2hhbmdlZCksIHRoaXMpOwotCi0gICAgbV9leGl0RnVsbHNjcmVl
bkFjdGlvbiA9IGd0a19hY3Rpb25fbmV3KCJleGl0IiwgXygiRXhpdCBGdWxsc2NyZWVuIiksIF8o
IkV4aXQgZnJvbSBmdWxsc2NyZWVuIG1vZGUiKSwgRVhJVF9GVUxMU0NSRUVOX0lDT05fTkFNRSk7
Ci0gICAgbV9leGl0RnVsbGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZCA9IGdfc2lnbmFsX2Nv
bm5lY3QobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhleGl0
RnVsbHNjcmVlbkFjdGl2YXRlZCksIHRoaXMpOwotICAgIGdfb2JqZWN0X3NldChtX2V4aXRGdWxs
c2NyZWVuQWN0aW9uLCAiaWNvbi1uYW1lIiwgRVhJVF9GVUxMU0NSRUVOX0lDT05fTkFNRSwgTlVM
TCk7Ci0gICAgaXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX3Rvb2xfaXRlbShtX2V4aXRGdWxsc2Ny
ZWVuQWN0aW9uKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgaXRlbSwg
RkFMU0UsIFRSVUUsIDApOwotCi0gICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gZ190aW1lb3V0
X2FkZChQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihwcm9ncmVzc0JhclVwZGF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBwbGF5U3Rh
dGVDaGFuZ2VkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ1NzcwYzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwKLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKLSNkZWZpbmUgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLQotI2luY2x1ZGUgIkZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrIDogcHVibGljIEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIgewotcHVibGljOgotICAgIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwotCi0gICAg
dm9pZCBndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUqKTsKLQotICAgIHZvaWQgcGxheVN0
YXRlQ2hhbmdlZCgpOwotCi0gICAgdm9pZCBiZWdpblNlZWsoKTsKLSAgICB2b2lkIGRvU2Vlaygp
OwotICAgIHZvaWQgZW5kU2VlaygpOwotCi0gICAgdm9pZCBoaWRlSHVkKCk7Ci0gICAgdm9pZCBz
aG93SHVkKGJvb2wpOwotICAgIGdib29sZWFuIHVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7Ci0KLSAg
ICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKLSAgICB2b2lkIG11dGVDaGFuZ2VkKCk7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBpbml0aWFsaXplV2luZG93KCk7Ci0gICAgdm9pZCBkZXN0cm95V2luZG93
KCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUh1ZCgpOwotICAgIHZvaWQgdXBkYXRlSHVkUG9zaXRpb24o
KTsKLQotICAgIGd1aW50IG1faHVkVGltZW91dElkOwotICAgIGd1aW50IG1fcHJvZ3Jlc3NCYXJV
cGRhdGVJZDsKLSAgICBndWludCBtX3Byb2dyZXNzQmFyRmlsbFVwZGF0ZUlkOwotICAgIGd1aW50
IG1faHNjYWxlVXBkYXRlSWQ7Ci0gICAgZ3VpbnQgbV92b2x1bWVVcGRhdGVJZDsKLSAgICBib29s
IG1fc2Vla0xvY2s7Ci0gICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsKLSAgICBHdGtXaWRnZXQqIG1f
aHVkV2luZG93OwotICAgIEd0a0FjdGlvbiogbV9wbGF5UGF1c2VBY3Rpb247Ci0gICAgR3RrQWN0
aW9uKiBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uOwotICAgIEd0a1dpZGdldCogbV90aW1lSFNjYWxl
OwotICAgIEd0a1dpZGdldCogbV90aW1lTGFiZWw7Ci0gICAgR3RrV2lkZ2V0KiBtX3ZvbHVtZUJ1
dHRvbjsKLQotICAgIHVuc2lnbmVkIGxvbmcgbV9rZXlQcmVzc1NpZ25hbElkOwotICAgIHVuc2ln
bmVkIGxvbmcgbV9kZXN0cm95U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2lzQWN0aXZl
U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX21vdGlvbk5vdGlmeVNpZ25hbElkOwotICAg
IHVuc2lnbmVkIGxvbmcgbV9jb25maWd1cmVFdmVudFNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxv
bmcgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fdGltZVNj
YWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV90aW1lU2NhbGVC
dXR0b25SZWxlYXNlZFNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV9wbGF5QWN0aW9uQWN0
aXZhdGVTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFj
dGl2YXRlU2lnbmFsSWQ7Ci19OwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ4MDE4YTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLQotR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICByZXR1cm4gZ2RrX3BpeGJ1Zl9nZXRfZnJv
bV9zdXJmYWNlKHN1cmZhY2UsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChzdXJmYWNlKSk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZmNWIzZWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBHZGtDYWlyb1V0aWxpdGllc19oCi0jZGVmaW5lIEdka0NhaXJvVXRpbGl0aWVzX2gKLQot
R2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSk7Ci0KLSNlbmRpZiAvLyBHZGtDYWlyb1V0aWxpdGllc19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNlOTU3YjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJY29uLmgiCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUljb246Okljb24oKQotICAgIDogbV9pY29uKDAp
Ci17Ci19Ci0KLUljb246On5JY29uKCkKLXsKLSAgICBpZiAobV9pY29uKQotICAgICAgICBnX29i
amVjdF91bnJlZihtX2ljb24pOwotfQotCi1zdGF0aWMgU3RyaW5nIGxvb2t1cEljb25OYW1lKFN0
cmluZyBNSU1FVHlwZSkKLXsKLSAgICAvKgotICAgICBMb29rdXAgYW4gYXBwcm9wcmlhdGUgaWNv
biBhY2NvcmRpbmcgdG8gZWl0aGVyIHRoZSBJY29uIE5hbWluZyBTcGVjCi0gICAgIG9yIGNvbnZl
bnRpb25hbCBHbm9tZSBpY29uIG5hbWVzIHJlc3BlY3RpdmVseS4KLQotICAgICBTZWUgaHR0cDov
L3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvaWNvbi1uYW1pbmctc3BlYy9pY29uLW5hbWluZy1z
cGVjLWxhdGVzdC5odG1sCi0KLSAgICAgVGhlIGljb24gdGhlbWUgaXMgcHJvYmVkIGZvciB0aGUg
Zm9sbG93aW5nIG5hbWVzOgotICAgICAxLiBtZWRpYS1zdWJ0eXBlCi0gICAgIDIuIGdub21lLW1p
bWUtbWVkaWEtc3VidHlwZQotICAgICAzLiBtZWRpYS14LWdlbmVyaWMKLSAgICAgNC4gZ25vbWUt
bWltZS1tZWRpYQotCi0gICAgIEluIHRoZSB3b3JzdCBjYXNlIGl0IGZhbGxzIGJhY2sgdG8gdGhl
IHN0b2NrIGZpbGUgaWNvbi4KLSAgICAqLwotICAgIGludCBwb3MgPSBNSU1FVHlwZS5maW5kKCcv
Jyk7Ci0gICAgaWYocG9zID49IDApIHsKLSAgICAgICAgU3RyaW5nIG1lZGlhID0gTUlNRVR5cGUu
c3Vic3RyaW5nKDAsIHBvcyk7Ci0gICAgICAgIFN0cmluZyBzdWJ0eXBlID0gTUlNRVR5cGUuc3Vi
c3RyaW5nKHBvcyArIDEpOwotICAgICAgICBHdGtJY29uVGhlbWUqIGljb25UaGVtZSA9IGd0a19p
Y29uX3RoZW1lX2dldF9kZWZhdWx0KCk7Ci0gICAgICAgIFN0cmluZyBpY29uTmFtZSA9IG1lZGlh
ICsgIi0iICsgc3VidHlwZTsKLSAgICAgICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFzX2ljb24oaWNv
blRoZW1lLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybiBpY29u
TmFtZTsKLSAgICAgICAgaWNvbk5hbWUgPSAiZ25vbWUtbWltZS0iICsgbWVkaWEgKyAiLSIgKyBz
dWJ0eXBlOwotICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGlj
b25OYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOwotICAg
ICAgICBpY29uTmFtZSA9IG1lZGlhICsgIi14LWdlbmVyaWMiOwotICAgICAgICBpZihndGtfaWNv
bl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGljb25OYW1lOwotICAgICAgICBpY29uTmFtZSA9IG1lZGlhICsgImdu
b21lLW1pbWUtIiArIG1lZGlhOwotICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihp
Y29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGlj
b25OYW1lOwotICAgIH0KLSAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTEU7Ci19Ci0KLS8vIEZJWE1F
OiBNb3ZlIHRoZSBjb2RlIHRvIENocm9tZUNsaWVudDo6aWNvbkZvckZpbGVzKCkuCi1QYXNzUmVm
UHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZmlsZW5hbWVzKQotewotICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKCFn
X3BhdGhfc2tpcF9yb290KGZpbGVuYW1lc1swXS51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgIFN0cmluZyBNSU1FVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlbmFtZXNbMF0pOwotICAgICAgICBTdHJpbmcgaWNvbk5h
bWUgPSBsb29rdXBJY29uTmFtZShNSU1FVHlwZSk7Ci0KLSAgICAgICAgUmVmUHRyPEljb24+IGlj
b24gPSBhZG9wdFJlZihuZXcgSWNvbik7Ci0gICAgICAgIGljb24tPm1faWNvbiA9IGd0a19pY29u
X3RoZW1lX2xvYWRfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBpY29uTmFtZS51
dGY4KCkuZGF0YSgpLCAxNiwgR1RLX0lDT05fTE9PS1VQX1VTRV9CVUlMVElOLCAwKTsKLSAgICAg
ICAgaWYgKCFpY29uLT5tX2ljb24pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0
dXJuIGljb24ucmVsZWFzZSgpOwotICAgIH0KLQotICAgIC8vRklYTUU6IEltcGxlbWVudCB0aGlz
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChjb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRPRE86IFNjYWxlL2NsaXAg
dGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGdka19jYWlyb19z
ZXRfc291cmNlX3BpeGJ1ZihjciwgbV9pY29uLCByZWN0LngoKSwgcmVjdC55KCkpOwotICAgIGNh
aXJvX3BhaW50KGNyKTsKLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmY1M2IuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkdka0NhaXJv
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUg
IkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGVuY29kZUlt
YWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgZG91YmxlKiBxdWFsaXR5LCBHT3duUHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVy
U2l6ZSkKLXsKLSAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBj
b21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2
ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5n
Lmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKLQotICAgIFN0cmluZyB0eXBlID0gbWlt
ZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIg
JiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5
cGUgIT0gImJtcCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4
YnVmPiBwaXhidWY7Ci0gICAgaWYgKHR5cGUgPT0gImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcg
ZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0
aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29t
cG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBw
b3J0IGFscGhhLgotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2Up
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb0lt
YWdlU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoc3Vy
ZmFjZSkpOwotICAgIGlmICghcGl4YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
RXJyb3IqIGVycm9yID0gMDsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFs
aXR5U3RyaW5nID0gU3RyaW5nOjpmb3JtYXQoIiVkIiwgc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0
eSAqIDEwMC4wICsgMC41KSk7Ci0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4
YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0
YSgpLCAmZXJyb3IsICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxM
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYu
Z2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCks
ICZlcnJvciwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1
YWxpdHksIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0K
LSAgICBHT3duUHRyPGdjaGFyPiBidWZmZXIoMCk7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAg
ICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZhY2UsIG1pbWVUeXBlLCBxdWFsaXR5LCBi
dWZmZXIsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0
b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoYnVmZmVyLmdldCgpLCBidWZm
ZXJTaXplLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAi
O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDlkOWZiZWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY2hh
ciogZ2V0UGF0aFRvSW1hZ2VSZXNvdXJjZShjaGFyKiByZXNvdXJjZSkKLXsKLSAgICBpZiAoZ19n
ZXRlbnYoIldFQktJVF9UT1BfTEVWRUwiKSkKLSAgICAgICAgcmV0dXJuIGdfYnVpbGRfZmlsZW5h
bWUoZ19nZXRlbnYoIldFQktJVF9UT1BfTEVWRUwiKSwgIlNvdXJjZSIsICJXZWJDb3JlIiwgIlJl
c291cmNlcyIsIHJlc291cmNlLCBOVUxMKTsKLQotICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1l
KHNoYXJlZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJpbWFnZXMiLCByZXNvdXJjZSwgTlVMTCk7
Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGdldFRoZW1lSWNvbkZpbGVOYW1lKGNvbnN0IGNoYXIqIG5h
bWUsIGludCBzaXplKQotewotICAgIEd0a0ljb25JbmZvKiBpY29uSW5mbyA9IGd0a19pY29uX3Ro
ZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2l6ZSwg
R1RLX0lDT05fTE9PS1VQX05PX1NWRyk7Ci0gICAgLy8gVHJ5IHRvIGZhbGxiYWNrIG9uIE1JU1NJ
TkdfSU1BR0UuCi0gICAgaWYgKCFpY29uSW5mbykKLSAgICAgICAgaWNvbkluZm8gPSBndGtfaWNv
bl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19NSVNTSU5H
X0lNQUdFLCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19JQ09OX0xPT0tVUF9OT19TVkcpOwotICAgIGlmIChpY29uSW5mbykgewotICAgICAg
ICBHT3duUHRyPEd0a0ljb25JbmZvPiBpbmZvKGljb25JbmZvKTsKLSAgICAgICAgcmV0dXJuIENT
dHJpbmcoZ3RrX2ljb25faW5mb19nZXRfZmlsZW5hbWUoaW5mby5nZXQoKSkpOwotICAgIH0KLQot
ICAgIC8vIE5vIGljb24gd2FzIGZvdW5kLCB0aGlzIGNhbiBoYXBwZW4gaWYgbm90IEdUSyB0aGVt
ZSBpcyBzZXQuIEluCi0gICAgLy8gdGhhdCBjYXNlIGFuIGVtcHR5IEltYWdlIHdpbGwgYmUgY3Jl
YXRlZC4KLSAgICByZXR1cm4gQ1N0cmluZygpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihDU3RyaW5nIG5hbWUpCi17Ci0gICAg
R093blB0cjxnY2hhcj4gY29udGVudDsKLSAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgaWYgKCFnX2Zp
bGVfZ2V0X2NvbnRlbnRzKG5hbWUuZGF0YSgpLCAmY29udGVudC5vdXRQdHIoKSwgJmxlbmd0aCwg
MCkpCi0gICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwotCi0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQuZ2V0KCksIGxlbmd0aCk7Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQotewotfQotCi1QYXNzUmVmUHRy
PEltYWdlPiBsb2FkSW1hZ2VGcm9tRmlsZShDU3RyaW5nIGZpbGVOYW1lKQotewotICAgIFJlZlB0
cjxCaXRtYXBJbWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGlmICghZmls
ZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
bG9hZFJlc291cmNlU2hhcmVkQnVmZmVyKGZpbGVOYW1lKTsKLSAgICAgICAgaW1nLT5zZXREYXRh
KGJ1ZmZlci5yZWxlYXNlKCksIHRydWUpOwotICAgIH0KLSAgICByZXR1cm4gaW1nLnJlbGVhc2Uo
KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgQ1N0cmluZyBmaWxlTmFtZTsKLSAgICBpZiAoIXN0cmNt
cCgibWlzc2luZ0ltYWdlIiwgbmFtZSkpCi0gICAgICAgIGZpbGVOYW1lID0gZ2V0VGhlbWVJY29u
RmlsZU5hbWUoR1RLX1NUT0NLX01JU1NJTkdfSU1BR0UsIDE2KTsKLSAgICBpZiAoZmlsZU5hbWUu
aXNOdWxsKCkpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gaW1hZ2VOYW1lKGdfc3RyZHVwX3By
aW50ZigiJXMucG5nIiwgbmFtZSkpOwotICAgICAgICBHT3duUHRyPGdjaGFyPiBnbGliRmlsZU5h
bWUoZ2V0UGF0aFRvSW1hZ2VSZXNvdXJjZShpbWFnZU5hbWUuZ2V0KCkpKTsKLSAgICAgICAgZmls
ZU5hbWUgPSBnbGliRmlsZU5hbWUuZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxvYWRJbWFn
ZUZyb21GaWxlKGZpbGVOYW1lKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKLXsKLSAgICByZXR1
cm4gbG9hZEltYWdlRnJvbUZpbGUoZ2V0VGhlbWVJY29uRmlsZU5hbWUobmFtZSwgc2l6ZSkpOwot
fQotCi1HZGtQaXhidWYqIEJpdG1hcEltYWdlOjpnZXRHZGtQaXhidWYoKQotewotICAgIE5hdGl2
ZUltYWdlQ2Fpcm8qIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBy
ZXR1cm4gaW1hZ2UgPyBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGltYWdlLT5zdXJmYWNl
KCkpIDogMDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9JbnRQb2ludEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0
MDIxNTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ludFBvaW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEdka1BvaW50
JiBwKQotICAgIDogbV94KHAueCkKLSAgICAsIG1feShwLnkpCi17Ci19Ci0KLUludFBvaW50Ojpv
cGVyYXRvciBHZGtQb2ludCgpIGNvbnN0Ci17Ci0gICAgR2RrUG9pbnQgcCA9IHsgeCgpLCB5KCkg
fTsKLSAgICByZXR1cm4gcDsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjMxMjgxLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFJlY3Q6OkludFJlY3QoY29uc3QgR2RrUmVjdGFuZ2xl
JiByKQotICAgIDogbV9sb2NhdGlvbihJbnRQb2ludChyLngsIHIueSkpCi0gICAgLCBtX3NpemUo
ci53aWR0aCwgci5oZWlnaHQpCi17Ci19Ci0KLUludFJlY3Q6Om9wZXJhdG9yIEdka1JlY3Rhbmds
ZSgpIGNvbnN0Ci17Ci0gICAgR2RrUmVjdGFuZ2xlIHIgPSB7IHgoKSwgeSgpLCB3aWR0aCgpLCBo
ZWlnaHQoKSB9OwotICAgIHJldHVybiByOwotfQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDMwZmJkYTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZh
bWlkb3dAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAq
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAiQXN5bmNGaWxlU3lz
dGVtR3RrLmgiCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbT4gQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUoKQotewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQXN5bmNGaWxlU3lzdGVtR3RrKCkpOwotfQotCi12b2lkIEFzeW5j
RmlsZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3Qg
U3RyaW5nJiBzdG9yYWdlSWRlbnRpZmllciwgRmlsZVN5c3RlbVR5cGUsIGJvb2wsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICBjYWxsYmFja3MtPmRpZEZhaWwoTk9UX1NVUFBPUlRFRF9FUlIpOwotfQot
Ci12b2lkIEFzeW5jRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIGJh
c2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyLCBGaWxlU3lzdGVtVHlwZSB0
eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY2FsbGJhY2tzLT5kaWRGYWlsKE5PVF9TVVBQT1JU
RURfRVJSKTsKLX0KLQotQXN5bmNGaWxlU3lzdGVtR3RrOjpBc3luY0ZpbGVTeXN0ZW1HdGsoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUFzeW5jRmlsZVN5c3RlbUd0azo6fkFzeW5j
RmlsZVN5c3RlbUd0aygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3lu
Y0ZpbGVTeXN0ZW1HdGs6Om1vdmUoY29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29uc3QgS1VSTCYg
ZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lz
dGVtR3RrOjpjb3B5KGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0
aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6
cmVtb3ZlKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3lu
Y0ZpbGVTeXN0ZW1HdGs6OnJlbW92ZVJlY3Vyc2l2ZWx5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlYWRNZXRhZGF0YShj
b25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lz
dGVtR3RrOjpjcmVhdGVGaWxlKGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVEaXJlY3Rv
cnkoY29uc3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmZpbGVFeGlzdHMoY29uc3QgS1VSTCYgcGF0aCwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6ZGlyZWN0b3J5
RXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3lu
Y0ZpbGVTeXN0ZW1HdGs6OnJlYWREaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVXcml0ZXIoQXN5
bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzlmNTczNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRv
d0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmICBBc3luY0ZpbGVT
eXN0ZW1HdGtfaAotI2RlZmluZSAgQXN5bmNGaWxlU3lzdGVtR3RrX2gKLQotI2lmIEVOQUJMRShG
SUxFX1NZU1RFTSkKLQotI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzOwotCi1jbGFzcyBBc3luY0ZpbGVTeXN0ZW1HdGsgOiBwdWJsaWMgQXN5
bmNGaWxlU3lzdGVtIHsKLXB1YmxpYzoKLSAgICBBc3luY0ZpbGVTeXN0ZW1HdGsoKTsKLSAgICB2
aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1HdGsoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGNv
bnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weShj
b25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVSZWN1cnNpdmVseShjb25zdCBLVVJMJiBwYXRoLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRmlsZShjb25zdCBLVVJMJiBwYXRo
LCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wg
ZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZp
cnR1YWwgdm9pZCBmaWxlRXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGRpcmVjdG9yeUV4aXN0cyhj
b25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwot
ICAgIHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdy
aXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vICBBc3luY0ZpbGVTeXN0ZW1HdGtfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjYzYjZjZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0v
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ2xpcGJvYXJkR3RrLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1
ZGUgIkRyYWdEYXRhLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5o
IgotI2luY2x1ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIu
aCIKLSNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsKLSAg
ICBDbGlwYm9hcmREYXRhVHlwZVRleHQsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCi0g
ICAgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0LAotICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAot
ICAgIENsaXBib2FyZERhdGFUeXBlSW1hZ2UsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3du
Ci19OwotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJk
KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1
cm4gQ2xpcGJvYXJkR3RrOjpjcmVhdGUocG9saWN5LCBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlz
cGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCks
IGZyYW1lKTsKLX0KLQotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENs
aXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZy
YW1lKQotewotICAgIHJldHVybiBDbGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRh
LT5wbGF0Zm9ybURhdGEoKSwgRHJhZ0FuZERyb3AsIGZyYW1lKTsKLX0KLQotQ2xpcGJvYXJkR3Rr
OjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSkKLSAgICA6IENsaXBib2FyZChwb2xpY3ksIENvcHlB
bmRQYXN0ZSkKLSAgICAsIG1fZGF0YU9iamVjdChEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQo
Y2xpcGJvYXJkKSkKLSAgICAsIG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKLSAgICAsIG1fZnJhbWUo
ZnJhbWUpCi17Ci19Ci0KLUNsaXBib2FyZEd0azo6Q2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCwgQ2xp
cGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBGcmFtZSogZnJhbWUpCi0gICAgOiBDbGlwYm9hcmQo
cG9saWN5LCBjbGlwYm9hcmRUeXBlKQotICAgICwgbV9kYXRhT2JqZWN0KGRhdGFPYmplY3QpCi0g
ICAgLCBtX2NsaXBib2FyZCgwKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotQ2xpcGJv
YXJkR3RrOjp+Q2xpcGJvYXJkR3RrKCkKLXsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAg
IG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLXN0YXRpYyBDbGlwYm9hcmRE
YXRhVHlwZSBkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShjb25zdCBTdHJpbmcm
IHJhd1R5cGUpCi17Ci0gICAgU3RyaW5nIHR5cGUocmF3VHlwZS5zdHJpcFdoaXRlU3BhY2UoKSk7
Ci0KLSAgICAvLyBUd28gc3BlY2lhbCBjYXNlcyBmb3IgSUUgY29tcGF0aWJpbGl0eQotICAgIGlm
ICh0eXBlID09ICJUZXh0IiB8fCB0eXBlID09ICJ0ZXh0IikKLSAgICAgICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlVGV4dDsKLSAgICBpZiAodHlwZSA9PSAiVVJMIikKLSAgICAgICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlVVJMOwotCi0gICAgLy8gRnJvbSB0aGUgTWFjIHBvcnQ6IElnbm9y
ZSBhbnkgdHJhaWxpbmcgY2hhcnNldCAtIEpTIHN0cmluZ3MgYXJlCi0gICAgLy8gVW5pY29kZSwg
d2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBjaGFyc2V0IGlzc3VlLgotICAgIGlmICh0eXBlID09ICJ0
ZXh0L3BsYWluIiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCi0gICAgICAgIHJl
dHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHQ7Ci0gICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIg
fHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L2h0bWw7IikpCi0gICAgICAgIHJldHVybiBDbGlwYm9h
cmREYXRhVHlwZU1hcmt1cDsKLSAgICBpZiAodHlwZSA9PSAiRmlsZXMiIHx8IHR5cGUgPT0gInRl
eHQvdXJpLWxpc3QiIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC91cmktbGlzdDsiKSkKLSAgICAg
ICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDsKLQotICAgIC8vIE5vdCBhIGtub3du
IHR5cGUsIHNvIGp1c3QgZGVmYXVsdCB0byB1c2luZyB0aGUgdGV4dCBwb3J0aW9uLgotICAgIHJl
dHVybiBDbGlwYm9hcmREYXRhVHlwZVVua25vd247Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpj
bGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQotewotICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2xpcGJvYXJkRGF0
YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJp
bmcpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklM
aXN0OgotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVj
dC0+Y2xlYXJVUklMaXN0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVNYXJrdXA6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJNYXJrdXAoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6Ci0gICAgICAgIG1fZGF0
YU9iamVjdC0+Y2xlYXJUZXh0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVJbWFnZToKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckltYWdlKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgotICAgICAgICBt
X2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlm
IChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLQot
dm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFyQWxsRGF0YSgpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBkbyBub3Qg
Y2xlYXIgZmlsZW5hbWVzLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWM6ICJUaGUgY2xlYXJEYXRhKCkg
bWV0aG9kCi0gICAgLy8gZG9lcyBub3QgYWZmZWN0IHdoZXRoZXIgYW55IGZpbGVzIHdlcmUgaW5j
bHVkZWQgaW4gdGhlIGRyYWcsIHNvIHRoZSB0eXBlcwotICAgIC8vIGF0dHJpYnV0ZSdzIGxpc3Qg
bWlnaHQgc3RpbGwgbm90IGJlIGVtcHR5IGFmdGVyIGNhbGxpbmcgY2xlYXJEYXRhKCkgKGl0IHdv
dWxkIAotICAgIC8vIHN0aWxsIGNvbnRhaW4gdGhlICJGaWxlcyIgc3RyaW5nIGlmIGFueSBmaWxl
cyB3ZXJlIGluY2x1ZGVkIGluIHRoZSBkcmFnKS4iCi0gICAgbV9kYXRhT2JqZWN0LT5jbGVhckFs
bEV4Y2VwdEZpbGVuYW1lcygpOwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotU3RyaW5nIENsaXBib2FyZEd0azo6Z2V0RGF0YShj
b25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpIGNvbnN0Ci17Ci0gICAgaWYgKHBvbGljeSgpICE9IENs
aXBib2FyZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVm
YXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQp
OwotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RUeXBlRnJvbUhUTUxD
bGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOwotICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFU
eXBlVVJJTGlzdCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJpTGlzdCgpOwotICAg
IGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlVVJMKQotICAgICAgICByZXR1cm4gbV9kYXRh
T2JqZWN0LT51cmwoKTsKLSAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+bWFya3VwKCk7Ci0gICAgaWYgKHR5cGUgPT0g
Q2xpcGJvYXJkRGF0YVR5cGVUZXh0KQotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50ZXh0
KCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkR3RrOjpzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAg
IGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlw
ZSA9IGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOwotICAg
IGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCB8fCB0eXBlID09IENsaXBib2Fy
ZERhdGFUeXBlVVJMKSB7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VVJJTGlzdChkYXRhKTsK
LSAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IENsaXBib2Fy
ZERhdGFUeXBlTWFya3VwKSB7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGRhdGEp
OwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJv
YXJkRGF0YVR5cGVUZXh0KSB7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChkYXRhKTsK
LSAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19
Ci0KLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0Ci17Ci0g
ICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBi
b2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7
Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
LQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgaWYgKG1fZGF0YU9iamVjdC0+
aGFzVGV4dCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgICAgICB0
eXBlcy5hZGQoIlRleHQiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7Ci0gICAgfQotCi0g
ICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCi0gICAgICAgIHR5cGVzLmFkZCgidGV4
dC9odG1sIik7Ci0KLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKLSAgICAg
ICAgdHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVVJMIik7
Ci0gICAgfQotCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzRmlsZW5hbWVzKCkpCi0gICAgICAg
IHR5cGVzLmFkZCgiRmlsZXMiKTsKLQotICAgIHJldHVybiB0eXBlczsKLX0KLQotUGFzc1JlZlB0
cjxGaWxlTGlzdD4gQ2xpcGJvYXJkR3RrOjpmaWxlcygpIGNvbnN0Ci17Ci0gICAgaWYgKHBvbGlj
eSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQotICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0
ZSgpOwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2Fy
ZCk7Ci0KLSAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgp
OwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZp
bGVuYW1lcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsg
aSsrKQotICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXNbaV0s
IEZpbGU6OkFsbENvbnRlbnRUeXBlcykpOwotICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCi17Ci0gICAgc2V0RHJhZ0ltYWdlKGltYWdlLCAw
LCBsb2NhdGlvbik7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2VFbGVtZW50
KE5vZGUqIGVsZW1lbnQsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKLXsKLSAgICBzZXREcmFn
SW1hZ2UoMCwgZWxlbWVudCwgbG9jYXRpb24pOwotfQotCi12b2lkIENsaXBib2FyZEd0azo6c2V0
RHJhZ0ltYWdlKENhY2hlZEltYWdlKiBpbWFnZSwgTm9kZSogZWxlbWVudCwgY29uc3QgSW50UG9p
bnQmIGxvY2F0aW9uKQotewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRJbWFnZVdyaXRh
YmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQo
dGhpcyk7Ci0gICAgbV9kcmFnSW1hZ2UgPSBpbWFnZTsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0g
ICAgICAgIG1fZHJhZ0ltYWdlLT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICBtX2RyYWdMb2MgPSBs
b2NhdGlvbjsKLSAgICBtX2RyYWdJbWFnZUVsZW1lbnQgPSBlbGVtZW50OwotfQotCi1EcmFnSW1h
Z2VSZWYgQ2xpcGJvYXJkR3RrOjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxvY2F0aW9uKSBj
b25zdAotewotICAgIGxvY2F0aW9uID0gbV9kcmFnTG9jOwotCi0gICAgaWYgKG1fZHJhZ0ltYWdl
KQotICAgICAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKG1fZHJhZ0ltYWdlLT5p
bWFnZSgpKTsKLSAgICBpZiAobV9kcmFnSW1hZ2VFbGVtZW50ICYmIG1fZnJhbWUpCi0gICAgICAg
IHJldHVybiBtX2ZyYW1lLT5ub2RlSW1hZ2UobV9kcmFnSW1hZ2VFbGVtZW50LmdldCgpKTsKLQot
ICAgIHJldHVybiAwOyAvLyBXZSBkbyBub3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY3Jl
YXRlIGEgZHJhZyBpbWFnZSwgdXNlIHRoZSBkZWZhdWx0IGljb24uCi19Ci0KLXN0YXRpYyBDYWNo
ZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICAvLyBBdHRl
bXB0IHRvIHB1bGwgQ2FjaGVkSW1hZ2UgZnJvbSBlbGVtZW50Ci0gICAgQVNTRVJUKGVsZW1lbnQp
OwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwotICAg
IGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihy
ZW5kZXJlcik7Ci0gICAgaWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZElt
YWdlKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmRlY2xhcmVB
bmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVS
TCh1cmwsIGxhYmVsKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAo
ZWxlbWVudCwgSW5jbHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7Ci0KLSAgICBDYWNoZWRJ
bWFnZSogaW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKLSAgICBpZiAoIWltYWdlIHx8
ICFpbWFnZS0+aXNMb2FkZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHZGtQ
aXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50
LT5yZW5kZXJlcigpKS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgIGlmICghcGl4YnVmKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2RhdGFPYmplY3QtPnNldEltYWdlKHBpeGJ1Zi5nZXQoKSk7Ci19
Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbGFiZWwsIEZyYW1lKikKLXsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxh
YmVsKTsKLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9h
cmQpOwotfQotCi12b2lkIENsaXBib2FyZEd0azo6d3JpdGVSYW5nZShSYW5nZSogcmFuZ2UsIEZy
YW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UpOwotCi0gICAgbV9kYXRhT2JqZWN0LT5z
ZXRUZXh0KGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOwotICAgIG1fZGF0YU9iamVj
dC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLQotICAgIGlmIChtX2NsaXBib2FyZCkK
LSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3Rr
Ojp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgbV9kYXRhT2JqZWN0
LT5zZXRUZXh0KHRleHQpOwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRl
bnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRHdGs6Omhhc0RhdGEoKQotewot
ICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0g
ICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpIHx8IG1fZGF0YU9iamVjdC0+aGFzTWFy
a3VwKCkKLSAgICAgICAgfHwgbV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkgfHwgbV9kYXRhT2Jq
ZWN0LT5oYXNJbWFnZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xp
cGJvYXJkR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWQ2M2MuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9h
cmRHdGtfaAotI2RlZmluZSBDbGlwYm9hcmRHdGtfaAotCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2VD
bGllbnQuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3Rr
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBDYWNoZWRJbWFnZTsKLSAgICBj
bGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQYXN0ZWJvYXJkSGVscGVyOwotCi0gICAgLy8gU3RhdGUg
YXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9w
YXN0ZQotICAgIC8vIENyZWF0ZWQgZnJvbSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQg
YnkgdGhlIGRvbQotICAgIGNsYXNzIENsaXBib2FyZEd0ayA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1
YmxpYyBDYWNoZWRJbWFnZUNsaWVudCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBj
cmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9h
cmQsIEZyYW1lKiBmcmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbGlwYm9hcmRHdGsocG9saWN5LCBjbGlwYm9hcmQsIGZyYW1lKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmpl
Y3QsIENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwgRnJhbWUqIGZyYW1lKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGRh
dGFPYmplY3QsIGNsaXBib2FyZFR5cGUsIGZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmly
dHVhbCB+Q2xpcGJvYXJkR3RrKCk7Ci0KLSAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJik7Ci0gICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7Ci0gICAgICAgIFN0cmluZyBnZXRE
YXRhKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4g
ZmlsZXMoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSos
IGNvbnN0IEludFBvaW50Jik7Ci0gICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2Rl
KiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1h
Z2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKLQotICAgICAgICB2aXJ0dWFsIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYsIEZyYW1lKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRl
UmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRl
eHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKLQot
ICAgICAgICBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoKSB7IHJldHVybiBt
X2RhdGFPYmplY3Q7IH0KLSAgICAgICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVy
biBtX2NsaXBib2FyZDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENs
aXBib2FyZEFjY2Vzc1BvbGljeSwgR3RrQ2xpcGJvYXJkKiwgRnJhbWUqKTsKLSAgICAgICAgQ2xp
cGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3Rr
PiwgQ2xpcGJvYXJkVHlwZSwgRnJhbWUqKTsKLQotICAgICAgICBSZWZQdHI8RGF0YU9iamVjdEd0
az4gbV9kYXRhT2JqZWN0OwotICAgICAgICBHdGtDbGlwYm9hcmQqIG1fY2xpcGJvYXJkOwotICAg
ICAgICBGcmFtZSogbV9mcmFtZTsKLSAgICB9OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYzBlNzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5M
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJh
dGlvbiBjb3JlQWN0aW9uKQotewotICAgIEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uID0gc3RhdGlj
X2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7Ci0gICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJh
dGlvbk5vbmUpCi0gICAgICAgIHJldHVybiBnZGtBY3Rpb247Ci0KLSAgICBpZiAoY29yZUFjdGlv
biAmIERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxH
ZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBnZGtBY3Rpb24pOwotICAgIGlmIChjb3Jl
QWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19j
YXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTU9WRSB8IGdka0FjdGlvbik7Ci0gICAgaWYg
KGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAgZ2RrQWN0aW9uID0gc3Rh
dGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9MSU5LIHwgZ2RrQWN0aW9uKTsKLSAg
ICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQotICAgICAgICBnZGtBY3Rp
b24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX1BSSVZBVEUgfCBnZGtB
Y3Rpb24pOwotCi0gICAgcmV0dXJuIGdka0FjdGlvbjsKLX0KLQotR2RrRHJhZ0FjdGlvbiBkcmFn
T3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikK
LXsKLSAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlv
biAmIERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOwot
ICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIHJldHVybiBH
REtfQUNUSU9OX01PVkU7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykK
LSAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERy
YWdPcGVyYXRpb25Qcml2YXRlKQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLX0KLQotRHJhZ09wZXJh
dGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9u
KQotewotICAgIC8vIFdlIGhhdmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25F
dmVyeSBvdGhlciB0aGFuCi0gICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxh
Z3MgYXJlIG9uLgotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkgJiYgZ2RrQWN0
aW9uICYgR0RLX0FDVElPTl9NT1ZFCi0gICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05f
TElOSyAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZBVEUpCi0gICAgICAgIHJldHVybiBE
cmFnT3BlcmF0aW9uRXZlcnk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgYWN0aW9uID0gRHJhZ09wZXJh
dGlvbk5vbmU7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWSkKLSAgICAgICAg
YWN0aW9uIHw9IERyYWdPcGVyYXRpb25Db3B5OwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNU
SU9OX01PVkUpCi0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTW92ZTsKLSAgICBpZiAo
Z2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJh
dGlvbkxpbms7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKLSAgICAg
ICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Qcml2YXRlOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEcmFnT3BlcmF0aW9uPihhY3Rpb24pOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI2ZjYzNDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKLSNk
ZWZpbmUgQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKLQotI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgi
Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdka0RyYWdB
Y3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbik7Ci1HZGtE
cmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09wZXJhdGlv
bik7Ci1EcmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oR2RrRHJhZ0Fj
dGlvbik7Ci0KLX0KLQotI2VuZGlmIC8vIENsaXBib2FyZFV0aWxpdGllc0d0a19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NWYyM2IuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIENvbXBvc2l0aW9uUmVzdWx0c19oCi0jZGVmaW5lIENvbXBvc2l0aW9uUmVzdWx0
c19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdHJ1Y3QgQ29tcG9zaXRpb25SZXN1bHRzIHsKLSAgICBDb21wb3NpdGlvblJlc3Vs
dHMoKQotICAgICAgICA6IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZh
bHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBDb21wb3NpdGlvblJlc3VsdHMoU3RyaW5nIHNpbXBs
ZVN0cmluZykKLSAgICAgICAgOiBzaW1wbGVTdHJpbmcoc2ltcGxlU3RyaW5nKQotICAgICAgICAs
IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBlbnVtIFJlc3VsdHNJbmRpY2F0b3IgeyBXaWxsU2VuZENvbXBvc2l0aW9uUmVz
dWx0c1Nvb24gfTsKLSAgICBDb21wb3NpdGlvblJlc3VsdHMoUmVzdWx0c0luZGljYXRvcikKLSAg
ICAgICAgOiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZSh0cnVlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGNvbXBvc2l0aW9uVXBkYXRlZCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGU7Ci0g
ICAgfQotCi0gICAgLy8gU29tZSBzaW1wbGUgaW5wdXQgbWV0aG9kcyByZXR1cm4gYSBzdHJpbmcg
Zm9yIGFsbCBrZXlib2FyZCBldmVudHMuIFRoaXMKLSAgICAvLyB2YWx1ZSBzaG91bGQgYmUgdHJl
YXRlZCBhcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBrZXljb2RlLgotICAgIFN0
cmluZyBzaW1wbGVTdHJpbmc7Ci0KLSAgICBib29sIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBv
c2l0aW9uVXBkYXRlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gQ29tcG9zaXRpb25SZXN1bHRzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzAwMmM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNvbnRleHRNZW51OjpDb250ZXh0TWVu
dSgpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3
KCkpOwotfQotCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQotewotfQot
Ci1Db250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pCi17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0K
LSAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChpdGVtLnJl
bGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwotICAgIEFTU0VSVChwbGF0Zm9ybUl0ZW0pOwot
Ci0gICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBsYXRm
b3JtSXRlbS5nZXQoKSkpCi0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlO
RVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgpKTsKLQotICAgIGd0a19tZW51X3NoZWxsX2Fw
cGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBwbGF0Zm9ybUl0ZW0u
Z2V0KCkpOwotICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybUl0ZW0uZ2V0KCkpOwotfQotCi12
b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2Ny
aXB0aW9uIG1lbnUpCi17Ci0gICAgQVNTRVJUKG1lbnUpOwotICAgIGlmIChtX3BsYXRmb3JtRGVz
Y3JpcHRpb24gPT0gbWVudSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3BsYXRmb3JtRGVz
Y3JpcHRpb24pCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbikpOwotCi0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsKLX0K
LQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRp
b24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci19Ci0KLVBs
YXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlw
dGlvbigpCi17Ci0gICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBtX3Bs
YXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gMDsKLQotICAg
IHJldHVybiBkZXNjcmlwdGlvbjsKLX0KLQotdW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3Vu
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0KLSAgICBH
T3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09O
VEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpKTsKLSAgICByZXR1cm4gZ19saXN0X2xlbmd0
aChjaGlsZHJlbi5nZXQoKSk7Ci19Ci0KLVZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IGNvbnRleHRN
ZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotewotICAg
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJdGVtVmVjdG9yOwotCi0gICAgR093blB0cjxH
TGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUiht
ZW51KSkpOwotICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgp
KTsKLSAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNvdW50KTsKLQotICAg
IGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9u
ZXh0KGl0ZW0pKSB7Ci0gICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3Rr
V2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRn
ZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1lbnVJdGVtVmVjdG9yLmFwcGVu
ZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOwotICAgIH0KLQotICAgIHJldHVybiBtZW51SXRlbVZl
Y3RvcjsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1NZW51RGVzY3JpcHRp
b24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKLXsKLSAgICBHdGtNZW51
KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGxh
dGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51SXRlbXNbaV0ucmVsZWFzZVBsYXRmb3JtRGVz
Y3JpcHRpb24oKSk7Ci0gICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVM
TChtZW51KSwgcGxhdGZvcm1JdGVtKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3Jt
SXRlbSk7Ci0gICAgfQotICAgIHJldHVybiBtZW51OwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Nv
bnRleHRNZW51SXRlbUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MGI1
YmUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
SXRlbUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTAotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpCi0KLSNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKLQotI2luY2x1ZGUgIkNv
bnRleHRNZW51LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
ICJ3ZWJraXQtY29udGV4dC1tZW51IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBndGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0aW9uKGNvbnN0IENvbnRleHRN
ZW51QWN0aW9uJiBhY3Rpb24pCi17Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0NvcHlNZWRpYUxpbmtUb0NsaXBib2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHk6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfQ09QWTsKLSAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
cGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFt
ZUluTmV3V2luZG93OgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdX
aW5kb3c6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKLSAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0Rvd25sb2FkSW1hZ2VUb0Rpc2s6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0FWRTsKLSAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19HT19CQUNLOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgotICAgICAg
ICByZXR1cm4gR1RLX1NUT0NLX0dPX0ZPUldBUkQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTdG9wOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NUT1A7Ci0gICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdSZWxvYWQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfUkVGUkVTSDsKLSAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0N1dDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19D
VVQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19QQVNURTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKLSAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19ERUxFVEU7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
ZWxlY3RBbGw6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0FMTDsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfTk87Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nOgot
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09LOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3RoZXI6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRTsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0OgotICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX0ZJTkQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfRklORDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5XaXRoRGVmYXVsdEFwcGxpY2F0aW9uOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47
Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tSW46Ci0gICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfWk9PTV9JTjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlpvb21PdXQ6Ci0gICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9PVVQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1Q
REZBdXRvU2l6ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX0ZJVDsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVBERk5leHRQYWdlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dP
X0ZPUldBUkQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZQcmV2aW91c1BhZ2U6Ci0gICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfR09fQkFDSzsKLSAgICAvLyBOZXcgdGFncywgbm90IHBhcnQg
b2YgQVBJCi0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19PUEVOOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVs
bGluZzoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TUEVMTF9DSEVDSzsKLSAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVD
VF9GT05UOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzOgotICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9GT05UOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Qm9sZDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19CT0xEOwotICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnSXRhbGljOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0lUQUxJQzsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19VTkRFUkxJTkU7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzOgotICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9DT0xPUjsKLSAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdU
b2dnbGVNZWRpYUxvb3A6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxU
b0NsaXBib2FyZDoKLSAgICAgICAgLy8gTm8gaWNvbiBmb3IgdGhpcy4KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19GVUxMU0NSRUVOOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotc3RhdGljIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlv
biBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24oQ29udGV4dE1lbnVJdGVtVHlwZSB0
eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wg
ZW5hYmxlZCwgYm9vbCBjaGVja2VkKQotewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUp
Ci0gICAgICAgIHJldHVybiBHVEtfTUVOVV9JVEVNKGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25l
dygpKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoImNv
bnRleHQtbWVudS1hY3Rpb24tJWQiLCBhY3Rpb24pKTsKLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4g
cGxhdGZvcm1BY3Rpb247Ci0KLSAgICBpZiAodHlwZSA9PSBDaGVja2FibGVBY3Rpb25UeXBlKSB7
Ci0gICAgICAgIHBsYXRmb3JtQWN0aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2ds
ZV9hY3Rpb25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0
a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpKTsKLSAgICAgICAgZ3RrX3Rv
Z2dsZV9hY3Rpb25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihwbGF0Zm9ybUFjdGlvbi5n
ZXQoKSksIGNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICBwbGF0Zm9ybUFjdGlvbiA9IGFk
b3B0R1JlZihndGtfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZS51dGY4KCkuZGF0
YSgpLCAwLCBndGtTdG9ja0lERnJvbUNvbnRleHRNZW51QWN0aW9uKGFjdGlvbikpKTsKLSAgICBn
dGtfYWN0aW9uX3NldF9zZW5zaXRpdmUocGxhdGZvcm1BY3Rpb24uZ2V0KCksIGVuYWJsZWQpOwot
Ci0gICAgR3RrTWVudUl0ZW0qIGl0ZW0gPSBHVEtfTUVOVV9JVEVNKGd0a19hY3Rpb25fY3JlYXRl
X21lbnVfaXRlbShwbGF0Zm9ybUFjdGlvbi5nZXQoKSkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGl0ZW0pLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTiwgR0lOVF9UT19QT0lO
VEVSKGFjdGlvbikpOwotCi0gICAgcmV0dXJuIGl0ZW07Ci19Ci0KLS8vIEV4dHJhY3QgdGhlIEFj
dGlvblR5cGUgZnJvbSB0aGUgbWVudSBpdGVtCi1Db250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51
SXRlbShQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gaXRlbSkKLSAgICA6IG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbihpdGVtKQotewotICAgIC8vIERvbid0IHNob3cgYWNjZWwgbGFiZWxzIGluIGNv
bnRleHQgbWVudSBpdGVtcy4KLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwot
ICAgIGlmICghYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWd0a19hY3Rpb25f
Z2V0X2FjY2VsX3BhdGgoYWN0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0
KiBjaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oaXRlbSkpOwotICAgIGlmIChHVEtf
SVNfQUNDRUxfTEFCRUwoY2hpbGQpKQotICAgICAgICBndGtfYWNjZWxfbGFiZWxfc2V0X2FjY2Vs
X2Nsb3N1cmUoR1RLX0FDQ0VMX0xBQkVMKGNoaWxkKSwgMCk7Ci19Ci0KLUNvbnRleHRNZW51SXRl
bTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51KiBzdWJNZW51KQotewotICAgIG1fcGxhdGZv
cm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX21lbnVfaXRlbV9uZXcoKSk7Ci0gICAg
aWYgKHN1Yk1lbnUpCi0gICAgICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7Ci19Ci0KLUNvbnRleHRN
ZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4
dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBDb250ZXh0TWVudSogc3Vi
TWVudSkKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJ
dGVtRGVzY3JpcHRpb24odHlwZSwgYWN0aW9uLCB0aXRsZSwgdHJ1ZSwgZmFsc2UpOwotICAgIGlm
IChzdWJNZW51KQotICAgICAgICBzZXRTdWJNZW51KHN1Yk1lbnUpOwotfQotCi1Db250ZXh0TWVu
dUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRN
ZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29s
IGNoZWNrZWQpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1N
ZW51SXRlbURlc2NyaXB0aW9uKHR5cGUsIGFjdGlvbiwgdGl0bGUsIGVuYWJsZWQsIGNoZWNrZWQp
OwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2Vk
LCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQotewotICAgIG1fcGxhdGZv
cm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihTdWJtZW51
VHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7Ci0gICAgc2V0U3ViTWVudShz
dWJNZW51SXRlbXMpOwotfQotCi1Db250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0oKQot
ewotfQotCi1QbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxl
YXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gMDsKLSAgICByZXR1cm4gcGxhdGZvcm1EZXNjcmlwdGlvbjsK
LX0KLQotQ29udGV4dE1lbnVJdGVtVHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAot
ewotICAgIGlmIChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShtX3BsYXRmb3JtRGVzY3JpcHRp
b24pKQotICAgICAgICByZXR1cm4gU2VwYXJhdG9yVHlwZTsKLSAgICBpZiAoR1RLX0lTX0NIRUNL
X01FTlVfSVRFTShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4gQ2hlY2th
YmxlQWN0aW9uVHlwZTsKLSAgICBpZiAoZ3RrX21lbnVfaXRlbV9nZXRfc3VibWVudShtX3BsYXRm
b3JtRGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4gU3VibWVudVR5cGU7Ci0gICAgcmV0dXJu
IEFjdGlvblR5cGU7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKENvbnRleHRN
ZW51SXRlbVR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBTZXBhcmF0b3JUeXBlKQotICAg
ICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVV9JVEVNKGd0a19zZXBhcmF0b3Jf
bWVudV9pdGVtX25ldygpKTsKLX0KLQotQ29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVt
OjphY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFj
dGlvbj4oR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbiksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OKSkpOwotfQotCi12b2lk
IENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsK
LSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTiwgR0lOVF9UT19QT0lOVEVSKGFjdGlvbikpOwotfQot
Ci1TdHJpbmcgQ29udGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNvbnN0Ci17Ci0gICAgR3RrQWN0aW9u
KiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICByZXR1cm4gYWN0aW9uID8gU3RyaW5nOjpmcm9t
VVRGOChndGtfYWN0aW9uX2dldF9sYWJlbChhY3Rpb24pKSA6IFN0cmluZygpOwotfQotCi12b2lk
IENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBH
dGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIGlmIChhY3Rpb24pCi0gICAgICAg
IGd0a19hY3Rpb25fc2V0X2xhYmVsKGFjdGlvbiwgdGl0bGUudXRmOCgpLmRhdGEoKSk7Ci19Ci0K
LVBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51
KCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHN1Yk1lbnUgPSBndGtfbWVudV9pdGVtX2dldF9z
dWJtZW51KG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0gICAgcmV0dXJuIHN1Yk1lbnUgPyBHVEtf
TUVOVShzdWJNZW51KSA6IDA7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51
KENvbnRleHRNZW51KiBtZW51KQotewotICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUobV9w
bGF0Zm9ybURlc2NyaXB0aW9uLCBHVEtfV0lER0VUKG1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2Ny
aXB0aW9uKCkpKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoVmVjdG9y
PENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKLXsKLSAgICBDb250ZXh0TWVudSBtZW51
KHBsYXRmb3JtTWVudURlc2NyaXB0aW9uKHN1Yk1lbnVJdGVtcykpOwotICAgIHNldFN1Yk1lbnUo
Jm1lbnUpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sIHNob3Vs
ZENoZWNrKQotewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYg
KGFjdGlvbiAmJiBHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQotICAgICAgICBndGtfdG9n
Z2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbiksIHNob3VsZENo
ZWNrKTsKLX0KLQotYm9vbCBDb250ZXh0TWVudUl0ZW06OmNoZWNrZWQoKSBjb25zdAotewotICAg
IEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAmJiBHVEtf
SVNfVE9HR0xFX0FDVElPTihhY3Rpb24pKQotICAgICAgICByZXR1cm4gZ3RrX3RvZ2dsZV9hY3Rp
b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0FDVElPTihhY3Rpb24pKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQ29udGV4dE1lbnVJdGVtOjplbmFibGVkKCkgY29uc3QKLXsKLSAgICBH
dGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIHJldHVybiBhY3Rpb24gPyBndGtf
YWN0aW9uX2dldF9zZW5zaXRpdmUoYWN0aW9uKSA6IGZhbHNlOwotfQotCi12b2lkIENvbnRleHRN
ZW51SXRlbTo6c2V0RW5hYmxlZChib29sIHNob3VsZEVuYWJsZSkKLXsKLSAgICBHdGtBY3Rpb24q
IGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIGlmIChhY3Rpb24pCi0gICAgICAgIGd0a19hY3Rp
b25fc2V0X3NlbnNpdGl2ZShhY3Rpb24sIHNob3VsZEVuYWJsZSk7Ci19Ci0KLUd0a0FjdGlvbiog
Q29udGV4dE1lbnVJdGVtOjpndGtBY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBndGtfYWN0
aXZhdGFibGVfZ2V0X3JlbGF0ZWRfYWN0aW9uKEdUS19BQ1RJVkFUQUJMRShtX3BsYXRmb3JtRGVz
Y3JpcHRpb24pKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4ZmI5MDVhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DdXJzb3JHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQotICogQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3Rv
YXN0cy5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIElnYWxpYSBTLkwuCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
dXJzb3JHdGsuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlICJJbWFn
ZS5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNp
bmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIEdSZWZQdHI8R2Rr
Q3Vyc29yPiBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JUeXBlIGN1cnNvclR5cGUpCi17
Ci0gICAgQ3VzdG9tQ3Vyc29yIGN1cnNvciA9IEN1c3RvbUN1cnNvcnNbY3Vyc29yVHlwZV07Ci0g
ICAgR1JlZlB0cjxHZGtDdXJzb3I+IGMgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9u
YW1lKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIGN1cnNvci5uYW1lKSk7Ci0gICAgaWYgKGMp
Ci0gICAgICAgIHJldHVybiBjOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc291cmNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY29uc3RfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oY3Vyc29yLmJpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwg
NCkpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1hc2sgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihj
dXJzb3IubWFza19iaXRzKSwgQ0FJUk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKLSAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0ExLCAzMiwgMzIpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgY2Fpcm9f
c2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIDApOwotICAgIGNh
aXJvX21hc2tfc3VyZmFjZShjci5nZXQoKSwgbWFzay5nZXQoKSwgMCwgMCk7Ci0KLSAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGdka19waXhidWZfZ2V0X2Zyb21fc3Vy
ZmFjZShzdXJmYWNlLmdldCgpLCAwLCAwLCAzMiwgMzIpKTsKLSAgICByZXR1cm4gYWRvcHRHUmVm
KGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBp
eGJ1Zi5nZXQoKSwgY3Vyc29yLmhvdF94LCBjdXJzb3IuaG90X3kpKTsKLX0KLQotc3RhdGljIEdS
ZWZQdHI8R2RrQ3Vyc29yPiBjcmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgaG90U3BvdCkKLXsKLSAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0
ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3BvdCk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBp
eGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgIHJldHVybiBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQo
KSwgcGl4YnVmLmdldCgpLCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55
KCkpKTsKLX0KLQotdm9pZCBDdXJzb3I6OmVuc3VyZVBsYXRmb3JtQ3Vyc29yKCkgY29uc3QKLXsK
LSAgICBpZiAobV9wbGF0Zm9ybUN1cnNvciB8fCBtX3R5cGUgPT0gQ3Vyc29yOjpQb2ludGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQ3Vyc29y
OjpQb2ludGVyOgotICAgICAgICAvLyBBIG51bGwgR2RrQ3Vyc29yIGlzIHRoZSBkZWZhdWx0IGN1
cnNvciBmb3IgdGhlIHdpbmRvdy4KLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQ1JPU1MpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDdXJzb3I6OkhhbmQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBh
ZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0hBTkQyKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ3Vyc29yOjpJQmVhbToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1Jl
ZihnZGtfY3Vyc29yX25ldyhHREtfWFRFUk0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
dXJzb3I6OldhaXQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXcoR0RLX1dBVENIKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpI
ZWxwOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3
KEdES19RVUVTVElPTl9BUlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6
TW92ZToKLSAgICBjYXNlIEN1cnNvcjo6TWlkZGxlUGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfRkxFVVIpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkVhc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OkVh
c3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJz
b3JfbmV3KEdES19SSUdIVF9TSURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29y
OjpOb3J0aFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhQYW5uaW5nOgotICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfU0lERSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgotICAg
IGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfUklHSFRfQ09STkVSKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RSZXNpemU6Ci0gICAgY2FzZSBD
dXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9MRUZUX0NPUk5FUikpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEN1cnNvcjo6U291dGhSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRo
UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29y
X25ldyhHREtfQk9UVE9NX1NJREUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6
OlNvdXRoRWFzdFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9U
VE9NX1JJR0hUX0NPUk5FUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6U291
dGhXZXN0UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nOgotICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01f
TEVGVF9DT1JORVIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNp
emU6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXco
R0RLX0xFRlRfU0lERSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhT
b3V0aFJlc2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vy
c29yX25ldyhHREtfVE9QX1RFRSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6
RWFzdFdlc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgotICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJl
c2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgotICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKLSAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfSF9E
T1VCTEVfQVJST1cpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6
ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhH
REtfU0JfVl9ET1VCTEVfQVJST1cpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6
OlZlcnRpY2FsVGV4dDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vy
c29yKEN1c3RvbUN1cnNvclZlcnRpY2FsVGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q3Vyc29yOjpDZWxsOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19j
dXJzb3JfbmV3KEdES19QTFVTKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpD
b250ZXh0TWVudToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29y
KEN1c3RvbUN1cnNvckNvbnRleHRNZW51KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJz
b3I6OkFsaWFzOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3Io
Q3VzdG9tQ3Vyc29yQWxpYXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6UHJv
Z3Jlc3M6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0
b21DdXJzb3JQcm9ncmVzcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb0Ry
b3A6Ci0gICAgY2FzZSBDdXJzb3I6Ok5vdEFsbG93ZWQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JOb0Ryb3ApOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEN1cnNvcjo6Q29weToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNy
ZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckNvcHkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEN1cnNvcjo6Tm9uZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVk
Q3Vyc29yKEN1c3RvbUN1cnNvck5vbmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNv
cjo6Wm9vbUluOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3Io
Q3VzdG9tQ3Vyc29yWm9vbUluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Olpv
b21PdXQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0
b21DdXJzb3Jab29tT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkdyYWI6
Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJz
b3JHcmFiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkdyYWJiaW5nOgotICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3Jh
YmJpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgotICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlQ3VzdG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1f
aG90U3BvdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQ3Vyc29yOjpDdXJzb3IoY29u
c3QgQ3Vyc29yJiBvdGhlcikKLSAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgLCBtX2lt
YWdlKG90aGVyLm1faW1hZ2UpCi0gICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RTcG90KQotICAg
ICwgbV9wbGF0Zm9ybUN1cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQotewotfQotCi1DdXJz
b3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCi17Ci0gICAgbV90eXBl
ID0gb3RoZXIubV90eXBlOwotICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwotICAgIG1faG90
U3BvdCA9IG90aGVyLm1faG90U3BvdDsKLSAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9w
bGF0Zm9ybUN1cnNvcjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigp
Ci17Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJz
b3JHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4OTE5Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAs
MCBAQAotLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBM
IDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBh
cmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEg
KHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3
YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNl
bnNlLgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCi0gKgot
ICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBUaW0g
Q29wcGVyZmllbGQuCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3Bl
ciBhcmUgQ29weXJpZ2h0IChDKSAyMDAxCi0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKiAgIFRpbSBDb3BwZXJm
aWVsZCA8dGltZWNvcEBuZXR3b3JrLmVtYWlsLm5lLmpwPgotICogICBDaHJpc3RpYW4gRHl3YW4g
PGNocmlzdGlhbkB0d290b2FzdHMuZGU+Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhl
ciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUg
IkdQTCIpLCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICog
b2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBv
ciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3Vy
Ci0gKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFj
ZSB0aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQg
YnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92
aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3Ig
dGhlIExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lm
bmRlZiBDdXJzb3JHdGtfaAotI2RlZmluZSBDdXJzb3JHdGtfaAotCi0jaW5jbHVkZSAiQ3Vyc29y
LmgiCi0KLS8qCi0gVGhlc2UgY3Vyc29ycyBhcmUgY29waWVkIGZyb20gTW96aWxsYSBjb2RlOgot
ICBodHRwOi8vbHhyLm1vemlsbGEub3JnL21vemlsbGExLjgvc291cmNlL3dpZGdldC9zcmMvZ3Rr
Mi9uc0d0a0N1cnNvcnMuaAotKi8KLQotLyogTU9aX0NVUlNPUl9WRVJUSUNBTF9URVhUICovCi1z
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4dF9iaXRzW10gPSB7Ci0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4
NDAsIDB4MDAsIDB4MDAsCi0gIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2YsIDB4
MDAsIDB4MDAsIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4NDAsIDB4MDAsIDB4
MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAg
fTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3ZlcnRpY2FsX3RleHRfbWFza19i
aXRzW10gPSB7Ci0gIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4
MDAsIDB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsCi0gIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4
ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0gIDB4MGYsIDB4
ZjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfTsKLQotLyogTU9aX0NVUlNPUl9DT05URVhUX01FTlUgKi8KLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHhmYywgMHhmZCwgMHgwMCwgMHgwMCwKLSAgMHhmYywgMHhmZiwgMHgwMCwg
MHgwMCwgMHg3YywgMHg4NCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmYywgMHgwMCwgMHgwMCwKLSAg
MHhjNCwgMHg4NCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHg4
NSwgMHgwMCwgMHgwMCwKLSAgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfbWVudV9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3
ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhm
ZCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhmZSwgMHhmZiwgMHgw
MSwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMSwgMHgwMCwK
LSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwg
MHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhjMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmZCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pf
Q1VSU09SX0NPUFkgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5X2JpdHNb
XSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywg
MHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHg3YywgMHgwMCwg
MHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwgMHgwMCwgMHgw
MCwKLSAgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHg3YywgMHgzMCwgMHgwMCwgMHgwMCwgMHg2
YywgMHgzMCwgMHgwMCwgMHgwMCwKLSAgMHhjNCwgMHhmYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhm
YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwKLSAgMHg4MCwgMHgzMSwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfY29weV9tYXNrX2Jp
dHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgz
ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgw
MCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwg
MHgwMCwKLSAgMHhmZSwgMHgzNywgMHgwMCwgMHgwMCwgMHhmZSwgMHg3YiwgMHgwMCwgMHgwMCwg
MHhmZSwgMHhmYywgMHgwMCwgMHgwMCwKLSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwg
MHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHg3Yiwg
MHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0FMSUFTICovCi1zdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBtb3pfYWxpYXNfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBj
LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAw
eDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAwLAotICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAw
eDdjLCAweGYwLCAweDAwLCAweDAwLCAweDZjLCAweGUwLCAweDAwLCAweDAwLAotICAweGM0LCAw
eGYwLCAweDAwLCAweDAwLCAweGMwLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDE5LCAweDAw
LCAweDAwLAotICAweDgwLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel9hbGlhc19tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgw
MCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHhmNywgMHgwMCwgMHgw
MCwgMHhmZSwgMHhmYiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwMSwgMHgwMCwKLSAgMHhl
ZSwgMHhmOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhiZiwg
MHgwMCwgMHgwMCwKLSAgMHhjMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09S
X1pPT01fSU4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX2luX2JpdHNb
XSA9IHsKLSAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwg
MHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwKLSAgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MSwg
MHgwOCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwKLSAgMHhmOSwgMHgwOSwg
MHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwNCwgMHgwMCwgMHgw
MCwKLSAgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhm
MCwgMHgxYywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9pbl9tYXNr
X2JpdHNbXSA9IHsKLSAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwg
MHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwg
MHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKLSAgMHhmZiwg
MHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgw
MCwgMHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgw
MCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1pPT01fT1VUICovCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9vdXRfYml0c1tdID0gewotICAweGYwLCAweDAwLCAw
eDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAw
LAotICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweGY5
LCAweDA5LCAweDAwLCAweDAwLAotICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDAxLCAweDA4
LCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAotICAweDAyLCAweDA0LCAweDAw
LCAweDAwLCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAw
eGUwLCAweDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9tYXNrX2JpdHNbXSA9IHsKLSAgMHhmMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgw
MCwgMHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgw
MCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhm
ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgw
NywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0v
KiBNT1pfQ1VSU09SX05PVF9BTExPV0VEICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBt
b3pfbm90X2FsbG93ZWRfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgw
LCAweDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLAotICAweGYwLCAweGYw
LCAweDAwLCAweDAwLCAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAzLCAw
eDAwLAotICAweGVjLCAweDAwLCAweDAzLCAweDAwLCAweGNlLCAweDAxLCAweDA3LCAweDAwLCAw
eDg2LCAweDAzLCAweDA2LCAweDAwLAotICAweDA2LCAweDA3LCAweDA2LCAweDAwLCAweDA2LCAw
eDBlLCAweDA2LCAweDAwLCAweDA2LCAweDFjLCAweDA2LCAweDAwLAotICAweDBlLCAweDM4LCAw
eDA3LCAweDAwLCAweDBjLCAweDcwLCAweDAzLCAweDAwLCAweDFjLCAweGUwLCAweDAzLCAweDAw
LAotICAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweGUw
LCAweDdmLCAweDAwLCAweDAwLAotICAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIG1vel9ub3RfYWxsb3dlZF9tYXNrX2JpdHNbXSA9IHsKLSAgMHg4MCwgMHgxZiwgMHgwMCwg
MHgwMCwgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAg
MHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmZSwgMHhj
MCwgMHgwNywgMHgwMCwKLSAgMHhmZSwgMHg4MSwgMHgwNywgMHgwMCwgMHhmZiwgMHg4MywgMHgw
ZiwgMHgwMCwgMHhjZiwgMHgwNywgMHgwZiwgMHgwMCwKLSAgMHg4ZiwgMHgwZiwgMHgwZiwgMHgw
MCwgMHgwZiwgMHgxZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgzZSwgMHgwZiwgMHgwMCwKLSAgMHgx
ZiwgMHhmYywgMHgwZiwgMHgwMCwgMHgxZSwgMHhmOCwgMHgwNywgMHgwMCwgMHgzZSwgMHhmMCwg
MHgwNywgMHgwMCwKLSAgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwg
MHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwg
MHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09S
X1NQSU5OSU5HICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfc3Bpbm5pbmdfYml0
c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFj
LCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAw
LCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAw
eDAwLAotICAweGZjLCAweDNiLCAweDAwLCAweDAwLCAweDdjLCAweDM4LCAweDAwLCAweDAwLCAw
eDZjLCAweDU0LCAweDAwLCAweDAwLAotICAweGM0LCAweGRjLCAweDAwLCAweDAwLCAweGMwLCAw
eDQ0LCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLAotICAweDgwLCAweDM5LCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19t
YXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhm
ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYiwg
MHgwMCwgMHgwMCwKLSAgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwg
MHgwMCwgMHhmZSwgMHhmZSwgMHgwMCwgMHgwMCwKLSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwg
MHhlNCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKLSAgMHhjMCwg
MHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX05PTkUgKi8KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBtb3pfbm9uZV9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VS
U09SX0hBTkRfR1JBQiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3Jh
Yl9iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCi0gIDB4NjAsIDB4MzksIDB4MDAsIDB4MDAs
IDB4OTAsIDB4NDksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDksIDB4MDEsIDB4MDAsCi0gIDB4MjAs
IDB4YzksIDB4MDIsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDIsIDB4MDAsIDB4NTgsIDB4NDAsIDB4
MDIsIDB4MDAsCi0gIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDEsIDB4
MDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsCi0gIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsCi0gIDB4NDAsIDB4
NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRf
Z3JhYl9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
NiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgzZiwgMHgwMCwgMHgwMCwKLSAgMHhmMCwgMHg3ZiwgMHgw
MCwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwK
LSAgMHhmMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmYywg
MHhmZiwgMHgwNywgMHgwMCwKLSAgMHhmZSwgMHhmZiwgMHgwNywgMHgwMCwgMHhmZSwgMHhmZiwg
MHgwMywgMHgwMCwgMHhmYywgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhmOCwgMHhmZiwgMHgwMywg
MHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwKLSAg
MHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhm
ZiwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0hBTkRfR1JBQkJJTkcg
Ki8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9oYW5kX2dyYWJiaW5nX2JpdHNbXSA9
IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHgzNiwgMHgw
MCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMSwgMHgwMCwK
LSAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwg
MHgwMCwgMHgwMSwgMHgwMCwKLSAgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwg
MHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKLSAgMHg0MCwgMHg0MCwgMHgwMCwg
MHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OwotCi1zdGF0aWMgY29uc3QgIHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdf
bWFza19iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MzYsIDB4MDAsIDB4MDAsCi0gIDB4
ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYs
IDB4MDMsIDB4MDAsCi0gIDB4ZTAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMs
IDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsCi0gIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAs
IDB4ZjgsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsCi0gIDB4ZTAs
IDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2YsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotZW51bSBDdXN0b21DdXJzb3JUeXBlIHsKLSAgICBDdXN0
b21DdXJzb3JDb3B5ID0gMCwKLSAgICBDdXN0b21DdXJzb3JBbGlhcywKLSAgICBDdXN0b21DdXJz
b3JDb250ZXh0TWVudSwKLSAgICBDdXN0b21DdXJzb3Jab29tSW4sCi0gICAgQ3VzdG9tQ3Vyc29y
Wm9vbU91dCwKLSAgICBDdXN0b21DdXJzb3JWZXJ0aWNhbFRleHQsCi0gICAgQ3VzdG9tQ3Vyc29y
Tm9Ecm9wLAotICAgIEN1c3RvbUN1cnNvclByb2dyZXNzLAotICAgIEN1c3RvbUN1cnNvck5vbmUs
Ci0gICAgQ3VzdG9tQ3Vyc29yR3JhYiwKLSAgICBDdXN0b21DdXJzb3JHcmFiYmluZywKLX07Ci0K
LXR5cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGJpdHM7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogbWFza19iaXRzOwotICAg
IGludCBob3RfeDsKLSAgICBpbnQgaG90X3k7Ci19IEN1c3RvbUN1cnNvcjsKLQotLy8gY3JlYXRl
IGN1c3RvbSBwaXhtYXAgY3Vyc29yIGZyb20gY3Vyc29ycyBpbiBuc0dUS0N1cnNvckRhdGEuaAot
c3RhdGljIGNvbnN0IEN1c3RvbUN1cnNvciBDdXN0b21DdXJzb3JzW10gPSB7Ci0gICAgeyAiY29w
eSIsIG1vel9jb3B5X2JpdHMsIG1vel9jb3B5X21hc2tfYml0cywgMiwgMiB9LAotICAgIHsgImFs
aWFzIiwgbW96X2FsaWFzX2JpdHMsIG1vel9hbGlhc19tYXNrX2JpdHMsIDIsIDIgfSwKLSAgICB7
ICJjb250ZXh0LW1lbnUiLCBtb3pfbWVudV9iaXRzLCBtb3pfbWVudV9tYXNrX2JpdHMsIDIsIDIg
fSwKLSAgICB7ICJ6b29tLWluIiwgbW96X3pvb21faW5fYml0cywgbW96X3pvb21faW5fbWFza19i
aXRzLCA2LCA2IH0sCi0gICAgeyAiem9vbS1vdXQiLCBtb3pfem9vbV9vdXRfYml0cywgbW96X3pv
b21fb3V0X21hc2tfYml0cywgNiwgNiB9LAotICAgIHsgInZlcnRpY2FsLXRleHQiLCBtb3pfdmVy
dGljYWxfdGV4dF9iaXRzLCBtb3pfdmVydGljYWxfdGV4dF9tYXNrX2JpdHMsIDgsIDQgfSwKLSAg
ICB7ICJkbmQtbm8tZHJvcCIsIG1vel9ub3RfYWxsb3dlZF9iaXRzLCBtb3pfbm90X2FsbG93ZWRf
bWFza19iaXRzLCA5LCAgOSB9LAotICAgIHsgImxlZnRfcHRyX3dhdGNoIiwgbW96X3NwaW5uaW5n
X2JpdHMsIG1vel9zcGlubmluZ19tYXNrX2JpdHMsIDIsICAyfSwKLSAgICB7ICJub25lIiwgbW96
X25vbmVfYml0cywgbW96X25vbmVfbWFza19iaXRzLCAwLCAwIH0sCi0gICAgeyAiZ3JhYiIsIG1v
el9oYW5kX2dyYWJfYml0cywgbW96X2hhbmRfZ3JhYl9tYXNrX2JpdHMsIDEwLCAxMCB9LAotICAg
IHsgImdyYWJiaW5nIiwgbW96X2hhbmRfZ3JhYmJpbmdfYml0cywgbW96X2hhbmRfZ3JhYmJpbmdf
bWFza19iaXRzLCAxMCwgMTAgfQotfTsKLQotI2VuZGlmIC8vIEN1cnNvckd0a19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFkZmM2NmUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnRpbiBSb2JpbnNvbgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRh
dGFPYmplY3RHdGsuaCIKLQotI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIHJl
cGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmluZyYgc3RyKQotewotICAgIHN0YXRp
YyBjb25zdCBVQ2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyID0gMHhBMDsKLSAgICBzdGF0
aWMgY29uc3QgVUNoYXIgU3BhY2VDaGFyYWN0ZXIgPSAnICc7Ci0gICAgc3RyLnJlcGxhY2UoTm9u
QnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VDaGFyYWN0ZXIpOwotfQotCi1TdHJpbmcgRGF0
YU9iamVjdEd0azo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmFuZ2UpCi0gICAgICAgIHJl
dHVybiBtX3JhbmdlLT50ZXh0KCk7Ci0gICAgcmV0dXJuIG1fdGV4dDsKLX0KLQotU3RyaW5nIERh
dGFPYmplY3RHdGs6Om1hcmt1cCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmFuZ2UpCi0gICAgICAg
IHJldHVybiBjcmVhdGVNYXJrdXAobV9yYW5nZS5nZXQoKSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpOwotICAgIHJldHVybiBtX21hcmt1cDsK
LX0KLQotdm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCkK
LXsKLSAgICBtX3JhbmdlID0gMDsKLSAgICBtX3RleHQgPSBuZXdUZXh0OwotICAgIHJlcGxhY2VO
b25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKG1fdGV4dCk7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0
azo6c2V0TWFya3VwKGNvbnN0IFN0cmluZyYgbmV3TWFya3VwKQotewotICAgIG1fcmFuZ2UgPSAw
OwotICAgIG1fbWFya3VwID0gbmV3TWFya3VwOwotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OnNl
dFVSSUxpc3QoY29uc3QgU3RyaW5nJiB1cmlMaXN0U3RyaW5nKQotewotICAgIG1fdXJpTGlzdCA9
IHVyaUxpc3RTdHJpbmc7Ci0KLSAgICAvLyBUaGlzIGNvZGUgaXMgb3JpZ2luYWxseSBmcm9tOiBw
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwLgotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbWFrZSB0aGlzIGNvZGUgY3Jvc3MtcGxhdGZvcm0gZXZlbnR1YWxseS4KLQotICAg
IC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZlciwgZm9yIGNv
bXBhdGliaWxpdHkKLSAgICAvLyByZWFzb25zIHdlIGFsc28gYWxsb3cganVzdCBcbiBoZXJlLgot
ICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7Ci0gICAgdXJpTGlzdFN0cmluZy5zcGxpdCgnXG4n
LCB1cmlMaXN0KTsKLQotICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJz
dCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4KLSAgICAvLyBJbiBjYXNlIG5vIFVSTHMg
Y2FuIGJlIGZvdW5kLCBzdWJzZXF1ZW50IGNhbGxzIHRvIGdldERhdGEoIlVSTCIpCi0gICAgLy8g
d2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUg
c3BlYyAoc2VlCi0gICAgLy8gIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZh
Y2VzIikuIEFsc28gZXh0cmFjdCBhbGwgZmlsZW5hbWVzCi0gICAgLy8gZnJvbSB0aGUgVVJJIGxp
c3QuCi0gICAgYm9vbCBzZXRVUkwgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nJiBsaW5lID0gdXJpTGlzdFtp
XTsKLSAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIGlmIChs
aW5lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAobGluZVsw
XSA9PSAnIycpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBLVVJMIHVybCA9IEtV
UkwoS1VSTCgpLCBsaW5lKTsKLSAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIGlmICghc2V0VVJMKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAg
ICAgICAgICAgc2V0VVJMID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR093
blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICAgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUo
Z19maWxlbmFtZV9mcm9tX3VyaShsaW5lLnV0ZjgoKS5kYXRhKCksIDAsICZlcnJvci5vdXRQdHIo
KSkpOwotICAgICAgICAgICAgaWYgKCFlcnJvciAmJiBmaWxlbmFtZSkKLSAgICAgICAgICAgICAg
ICBtX2ZpbGVuYW1lcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZS5nZXQoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OnNldFVSTChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCi17Ci0gICAgbV91cmwgPSB1cmw7Ci0gICAg
bV91cmlMaXN0ID0gdXJsOwotICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKLQotICAgIFN0cmlu
ZyBhY3R1YWxMYWJlbChsYWJlbCk7Ci0gICAgaWYgKGFjdHVhbExhYmVsLmlzRW1wdHkoKSkKLSAg
ICAgICAgYWN0dWFsTGFiZWwgPSB1cmw7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKLSAg
ICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7Ci0gICAgbWFya3VwLmFwcGVuZCh1cmwuc3Ry
aW5nKCkpOwotICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIpOwotICAgIEdPd25QdHI8Z2NoYXI+IGVz
Y2FwZWQoZ19tYXJrdXBfZXNjYXBlX3RleHQoYWN0dWFsTGFiZWwudXRmOCgpLmRhdGEoKSwgLTEp
KTsKLSAgICBtYXJrdXAuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXNjYXBlZC5nZXQoKSkpOwot
ICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKLSAgICBzZXRNYXJrdXAobWFya3VwLnRvU3RyaW5n
KCkpOwotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyVGV4dCgpCi17Ci0gICAgbV9yYW5n
ZSA9IDA7Ci0gICAgbV90ZXh0ID0gIiI7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJN
YXJrdXAoKQotewotICAgIG1fcmFuZ2UgPSAwOwotICAgIG1fbWFya3VwID0gIiI7Ci19Ci0KLVN0
cmluZyBEYXRhT2JqZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0Ci17Ci0gICAgaWYgKGhhc1RleHQo
KSkKLSAgICAgICAgcmV0dXJuIHRleHQoKTsKLQotICAgIGlmIChoYXNVUkwoKSkKLSAgICAgICAg
cmV0dXJuIHVybCgpOwotCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIERhdGFPYmpl
Y3RHdGs6OmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCkKLXsKLSAgICBtX3RleHQgPSAiIjsKLSAg
ICBtX21hcmt1cCA9ICIiOwotICAgIG1fdXJpTGlzdCA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgp
OwotICAgIG1faW1hZ2UgPSAwOwotICAgIG1fcmFuZ2UgPSAwOwotfQotCi12b2lkIERhdGFPYmpl
Y3RHdGs6OmNsZWFyQWxsKCkKLXsKLSAgICBjbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygpOwotICAg
IG1fZmlsZW5hbWVzLmNsZWFyKCk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIERhdGFPYmplY3RHdGs6
OmZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKLXsKLSAgICBzdGF0aWMgSGFz
aE1hcDxHdGtDbGlwYm9hcmQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBvYmplY3RNYXA7Ci0K
LSAgICBpZiAoIW9iamVjdE1hcC5jb250YWlucyhjbGlwYm9hcmQpKSB7Ci0gICAgICAgIFJlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7Ci0g
ICAgICAgIG9iamVjdE1hcC5zZXQoY2xpcGJvYXJkLCBkYXRhT2JqZWN0KTsKLSAgICAgICAgcmV0
dXJuIGRhdGFPYmplY3QuZ2V0KCk7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxHdGtDbGlwYm9hcmQq
LCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPjo6aXRlcmF0b3IgaXQgPSBvYmplY3RNYXAuZmluZChj
bGlwYm9hcmQpOwotICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1MjgxYjFlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJ0aW4gUm9iaW5zb24KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpZm5kZWYgRGF0YU9iamVjdEd0a19oCi0jZGVmaW5lIERhdGFPYmpl
Y3RHdGtfaAotCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5j
bHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIERhdGFPYmplY3RHdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhT2JqZWN0R3RrPiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YU9iamVjdEd0aygpKTsKLSAgICB9
Ci0KLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAgIGNv
bnN0IFN0cmluZyYgdXJpTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJpTGlzdDsgfQotICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1l
czsgfQotICAgIEdka1BpeGJ1ZiogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSkgeyBtX3Jh
bmdlID0gbmV3UmFuZ2U7IH0KLSAgICB2b2lkIHNldEltYWdlKEdka1BpeGJ1ZiogbmV3SW1hZ2Up
IHsgbV9pbWFnZSA9IG5ld0ltYWdlOyB9Ci0gICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwotICAgIGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2Ug
fHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1cCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFuZ2UgfHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzVVJJTGlz
dCgpIGNvbnN0IHsgcmV0dXJuICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNV
UkwoKSBjb25zdCB7IHJldHVybiAhbV91cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsg
fQotICAgIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlz
RW1wdHkoKTsgfQotICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9
Ci0gICAgdm9pZCBjbGVhclVSSUxpc3QoKSB7IG1fdXJpTGlzdCA9ICIiOyB9Ci0gICAgdm9pZCBj
bGVhclVSTCgpIHsgbV91cmwgPSBLVVJMKCk7IH0KLSAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1f
aW1hZ2UgPSAwOyB9Ci0KLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIFN0cmluZyBtYXJr
dXAoKSBjb25zdDsKLSAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBz
ZXRNYXJrdXAoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRVUklMaXN0KGNvbnN0IFN0cmlu
ZyYpOwotICAgIFN0cmluZyB1cmxMYWJlbCgpIGNvbnN0OwotCi0gICAgdm9pZCBjbGVhckFsbEV4
Y2VwdEZpbGVuYW1lcygpOwotICAgIHZvaWQgY2xlYXJBbGwoKTsKLSAgICB2b2lkIGNsZWFyVGV4
dCgpOwotICAgIHZvaWQgY2xlYXJNYXJrdXAoKTsKLQotICAgIHN0YXRpYyBEYXRhT2JqZWN0R3Rr
KiBmb3JDbGlwYm9hcmQoR3RrQ2xpcGJvYXJkKik7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1f
dGV4dDsKLSAgICBTdHJpbmcgbV9tYXJrdXA7Ci0gICAgS1VSTCBtX3VybDsKLSAgICBTdHJpbmcg
bV91cmlMaXN0OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwotICAgIEdSZWZQdHI8
R2RrUGl4YnVmPiBtX2ltYWdlOwotICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIERhdGFPYmplY3RHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EcmFnRGF0YUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYTQ3NDku
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLQot
I2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ym9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdAotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzRmlsZW5hbWVzKCk7Ci19Ci0KLXVu
c2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZpbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
bGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKS5zaXplKCk7Ci19Ci0KLXZvaWQgRHJhZ0RhdGE6
OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgcmVzdWx0
ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmhhc1RleHQoKTsKLX0KLQotU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dChGcmFtZSop
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dCgpOwotfQotCi1D
b2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yKCk7Ci19
Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBjb250YWluc1BsYWluVGV4dCgpIHx8IGNvbnRhaW5zVVJMKDApIHx8IG1fcGxh
dGZvcm1EcmFnRGF0YS0+aGFzTWFya3VwKCkgfHwgY29udGFpbnNDb2xvcigpIHx8IGNvbnRhaW5z
RmlsZXMoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRnJhbWUqIGZyYW1lLCBG
aWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFhc1VSTChmcmFtZSwgZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKLX0KLQotU3RyaW5n
IERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFt
ZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EcmFn
RGF0YS0+aGFzVVJMKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoZmlsZW5h
bWVQb2xpY3kgIT0gQ29udmVydEZpbGVuYW1lcykgewotICAgICAgICBLVVJMIHVybChLVVJMKCks
IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOwotICAgICAgICBpZiAodXJsLmlzTG9jYWxGaWxl
KCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHVy
bChtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybCgpKTsKLSAgICBpZiAodGl0bGUpCi0gICAgICAgICp0
aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsTGFiZWwoKTsKLSAgICByZXR1cm4gdXJsOwot
fQotCi0KLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQo
RnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc01hcmt1cCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50
KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+bWFya3VwKCksICIiKTsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ4MTg3NzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJY29uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJEcmFnSWNvbi5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCi1zdGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRD
YWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEV4cG9zZSogZXZlbnQsIERyYWdJY29uKiBpY29u
KQotewotICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2Ny
ZWF0ZShldmVudC0+d2luZG93KSk7Ci0gICAgaWNvbi0+ZHJhdyhjb250ZXh0LmdldCgpKTsKLSAg
ICByZXR1cm4gVFJVRTsKLX0KLSNlbHNlCi1zdGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dE
cmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBjYWlyb190KiBjb250ZXh0LCBEcmFnSWNvbiog
aWNvbikKLXsKLSAgICBpZiAoIWdka19jYWlyb19nZXRfY2xpcF9yZWN0YW5nbGUoY29udGV4dCwg
MCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpY29uLT5kcmF3KGNvbnRleHQpOwotICAg
IHJldHVybiBUUlVFOwotfQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi0KLURyYWdJY29u
OjpEcmFnSWNvbigpCi0gICAgOiBpc0NvbXBvc2l0ZWQoZ2RrX3NjcmVlbl9pc19jb21wb3NpdGVk
KGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSkpCi0gICAgLCBtX3dpbmRvdygwKQotewotICAgIGlm
ICghaXNDb21wb3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0g
ICAgZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0so
ZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOwotI2Vsc2UKLSAgICBnX3Np
Z25hbF9jb25uZWN0KG1fd2luZG93LCAiZHJhdyIsIEdfQ0FMTEJBQ0soZHJhZ0ljb25XaW5kb3dE
cmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOwotI2VuZGlmCi0KLSAgICAvLyBUaGlzIHN0cmF0ZWd5
IG9yaWdpbmFsbHkgY29tZXMgZnJvbSBDaHJvbWl1bTogc3JjL2Nocm9tZS9icm93c2VyL2d0ay90
YWJfY29udGVudHNfZHJhZ19zb3VyY2UuY2MKLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193
aWRnZXRfZ2V0X3NjcmVlbihtX3dpbmRvdyk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAg
ICBHZGtDb2xvcm1hcCogcmdiYSA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAoc2NyZWVu
KTsKLSAgICBpZiAocmdiYSkKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfY29sb3JtYXAobV93aW5k
b3csIHJnYmEpOwotI2Vsc2UKLSAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0
X3JnYmFfdmlzdWFsKHNjcmVlbik7Ci0gICAgaWYgKCF2aXN1YWwpCi0gICAgICAgIHZpc3VhbCA9
IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKTsKLSAgICBndGtfd2lkZ2V0X3Nl
dF92aXN1YWwobV93aW5kb3csIHZpc3VhbCk7Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIK
LX0KLQotRHJhZ0ljb246On5EcmFnSWNvbigpCi17Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cpOwotfQotCi12b2lkIERyYWdJY29uOjpkcmF3
KGNhaXJvX3QqIGNvbnRleHQpCi17Ci0gICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQsIDAsIDAs
Ci0gICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1h
Z2UuZ2V0KCkpLAotICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQobV9pbWFnZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LCBD
QUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250
ZXh0LCBtX2ltYWdlLmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19maWxsKGNvbnRleHQpOwotfQot
Ci12b2lkIERyYWdJY29uOjpzZXRJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdlKQotewotICAg
IEFTU0VSVChpbWFnZSk7Ci0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIG1faW1hZ2VTaXplID0g
SW50U2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSkpOwotICAgIGlmIChpc0NvbXBvc2l0ZWQpIHsKLSAg
ICAgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dpbmRvdyksIG1faW1hZ2VTaXpl
LndpZHRoKCksIG1faW1hZ2VTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgbV9waXhidWYgPSBhZG9wdEdSZWYoY2Fp
cm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihpbWFnZSkpOwotI2VuZGlmCi19Ci0KLXZvaWQgRHJh
Z0ljb246OnVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgSW50UG9p
bnQgaG90c3BvdChtX2ltYWdlU2l6ZSk7Ci0gICAgaG90c3BvdC5zY2FsZSgwLjUsIDAuNSk7Ci0g
ICAgdXNlRm9yRHJhZyhjb250ZXh0LCBob3RzcG90KTsKLX0KLQotdm9pZCBEcmFnSWNvbjo6dXNl
Rm9yRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3Qp
Ci17Ci0gICAgaWYgKGlzQ29tcG9zaXRlZCkgewotICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl93
aWRnZXQoY29udGV4dCwgbV93aW5kb3csIGhvdHNwb3QueCgpLCBob3RzcG90LnkoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBndGtfZHJh
Z19zZXRfaWNvbl9waXhidWYoY29udGV4dCwgbV9waXhidWYuZ2V0KCksIGhvdHNwb3QueCgpLCBo
b3RzcG90LnkoKSk7Ci0jZWxzZQotICAgIGd0a19kcmFnX3NldF9pY29uX3N1cmZhY2UoY29udGV4
dCwgbV9pbWFnZS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmJlNDM1ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRHJhZ0ljb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEcmFnSWNvbl9o
Ci0jZGVmaW5lIERyYWdJY29uX2gKLQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8
UmVmUHRyQ2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRHJhZ0ljb24gewotcHVibGljOgotICAgIERyYWdJY29u
KCk7Ci0gICAgdmlydHVhbCB+RHJhZ0ljb24oKTsKLQotICAgIHZvaWQgZHJhdyhjYWlyb190Kik7
Ci0gICAgdm9pZCBzZXRJbWFnZShjYWlyb19zdXJmYWNlX3QqKTsKLSAgICB2b2lkIHVzZUZvckRy
YWcoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQq
LCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc0NvbXBv
c2l0ZWQ7Ci0gICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX2ltYWdlOwotICAgIEludFNpemUgbV9pbWFnZVNpemU7Ci0jaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9waXhidWY7Ci0jZW5kaWYKLX07Ci0K
LX0KLQotI2VuZGlmIC8vIERyYWdJY29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RyYWdJbWFnZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiN2M0YzEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogMjAxMCBJZ2FsaWEgUy5M
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRHJhZ0ltYWdlLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1
ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxjYWlyby5o
PgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRTaXpl
IGRyYWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmIGltYWdlKQotewotICAgIGlmIChpbWFnZSkKLSAg
ICAgICAgcmV0dXJuIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2Up
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2UpKTsKLQotICAgIHJldHVybiBJ
bnRTaXplKDAsIDApOwotfQotCi12b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1h
Z2UpCi17Ci0gICAgaWYgKGltYWdlKQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1h
Z2UpOwotfQotCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdl
LCBGbG9hdFNpemUgc2NhbGUpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpbnQgbmV3V2lkdGggPSBzY2FsZS53aWR0aCgpICogY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoaW1hZ2UpOwotICAgIGludCBuZXdIZWlnaHQgPSBzY2FsZS5oZWlnaHQoKSAq
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV90KiBzY2FsZWRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcihpbWFnZSwg
Q0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7Ci0KLSAgICBS
ZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzY2FsZWRTdXJm
YWNlKSk7Ci0gICAgY2Fpcm9fc2NhbGUoY29udGV4dC5nZXQoKSwgc2NhbGUud2lkdGgoKSwgc2Nh
bGUuaGVpZ2h0KCkpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRfc291
cmNlKGNvbnRleHQuZ2V0KCkpLCBDQUlST19FWFRFTkRfUEFEKTsKLSAgICBjYWlyb19wYXR0ZXJu
X3NldF9maWx0ZXIoY2Fpcm9fZ2V0X3NvdXJjZShjb250ZXh0LmdldCgpKSwgQ0FJUk9fRklMVEVS
X0JFU1QpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LmdldCgpLCBDQUlST19PUEVS
QVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LmdldCgp
LCBpbWFnZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7Ci0KLSAgICBk
ZWxldGVEcmFnSW1hZ2UoaW1hZ2UpOwotICAgIHJldHVybiBzY2FsZWRTdXJmYWNlOwotfQotCi1E
cmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFn
ZSwgZmxvYXQgZnJhY3Rpb24pCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAoIWdka19zY3JlZW5faXNfY29tcG9zaXRlZChnZGtfc2NyZWVuX2dldF9kZWZh
dWx0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2U7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY29u
dGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShpbWFnZSkpOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9ERVNUX0lOKTsKLSAgICBjYWlyb19z
ZXRfc291cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMCwgMCwgMCwgZnJhY3Rpb24pOwotICAgIGNh
aXJvX3BhaW50KGNvbnRleHQuZ2V0KCkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uRW51bSkKLXsKLSAgICBOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIHJldHVybiBuYXRpdmVJ
bWFnZSA/IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG5hdGl2ZUltYWdlLT5zdXJmYWNlKCkpIDog
MDsKLX0KLQotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShD
YWNoZWRJbWFnZSopCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1
NGQ1NWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXJyb3Jz
R3RrLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluTmV0d29yaywgTmV0
d29ya0Vycm9yQ2FuY2VsbGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCksIF8oIkxvYWQgcmVxdWVzdCBjYW5jZWxsZWQiKSk7Ci19Ci0KLVJlc291cmNl
RXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5u
b3RVc2VSZXN0cmljdGVkUG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLCBfKCJOb3QgYWxsb3dlZCB0byB1c2UgcmVzdHJpY3RlZCBuZXR3b3JrIHBv
cnQiKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5ub3RTaG93VVJMLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIlVSTCBjYW5ub3QgYmUgc2hvd24iKSk7
Ci19Ci0KLVJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
ZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGlj
eUNoYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCgpLnN0cmluZygp
LCBfKCJGcmFtZSBsb2FkIHdhcyBpbnRlcnJ1cHRlZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBj
YW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJy
b3JDYW5ub3RTaG93TWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uu
dXJsKCkuc3RyaW5nKCksIF8oIkNvbnRlbnQgd2l0aCB0aGUgc3BlY2lmaWVkIE1JTUUgdHlwZSBj
YW5ub3QgYmUgc2hvd24iKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVy
cm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKGVycm9yRG9tYWluTmV0d29yaywgTmV0d29ya0Vycm9yRmlsZURvZXNOb3RFeGlz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygi
RmlsZSBkb2VzIG5vdCBleGlzdCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFu
ZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUGx1Z2luLCBQbHVnaW5FcnJvcldpbGxIYW5k
bGVMb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LCBfKCJQbHVnaW4gd2lsbCBoYW5kbGUgbG9hZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBkb3du
bG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBuZXR3b3JrRXJyb3IpCi17Ci0g
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93bmxvYWRFcnJv
ck5ldHdvcmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0Vycm9yLmZhaWxpbmdV
UkwoKSwgbmV0d29ya0Vycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpOwotfQotCi1SZXNvdXJj
ZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3du
bG9hZCwgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiVXNlciBjYW5jZWxsZWQgdGhlIGRvd25s
b2FkIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
Ci17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93bmxv
YWRFcnJvckRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVy
bCgpLnN0cmluZygpLCBlcnJvck1lc3NhZ2UpOwotfQotCi1SZXNvdXJjZUVycm9yIHByaW50RXJy
b3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQotewotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29u
dGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckdlbmVyYWwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkg
OiBLVVJMKCksIGVycm9yTWVzc2FnZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgcHJpbnRlck5vdEZv
dW5kRXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQpCi17Ci0gICAgRG9jdW1l
bnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
blByaW50LCBQcmludEVycm9yUHJpbnRlck5vdEZvdW5kLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpLCBfKCJQ
cmludGVyIG5vdCBmb3VuZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJhbmdl
VG9QcmludChjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCkKLXsKLSAgICBEb2N1bWVu
dExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWlu
UHJpbnQsIFByaW50RXJyb3JJbnZhbGlkUGFnZVJhbmdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpLCBfKCJJ
bnZhbGlkIHBhZ2UgcmFuZ2UiKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTgyY2M5OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RXJyb3JzR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgRXJyb3JzR3RrX2gKLSNkZWZpbmUgRXJy
b3JzR3RrX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFByaW50Q29udGV4dDsKLWNsYXNzIFJlc291cmNlRXJyb3I7Ci1j
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotCi1jb25zdCBj
aGFyKiBjb25zdCBlcnJvckRvbWFpbk5ldHdvcmsgPSAiV2ViS2l0TmV0d29ya0Vycm9yIjsKLWNv
bnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluUG9saWN5ID0gIldlYktpdFBvbGljeUVycm9yIjsK
LWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluUGx1Z2luID0gIldlYktpdFBsdWdpbkVycm9y
IjsKLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluRG93bmxvYWQgPSAiV2ViS2l0RG93bmxv
YWRFcnJvciI7Ci1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblByaW50ID0gIldlYktpdFBy
aW50RXJyb3IiOwotCi1lbnVtIE5ldHdvcmtFcnJvciB7Ci0gICAgTmV0d29ya0Vycm9yRmFpbGVk
ID0gMzk5LAotICAgIE5ldHdvcmtFcnJvclRyYW5zcG9ydCA9IDMwMCwKLSAgICBOZXR3b3JrRXJy
b3JVbmtub3duUHJvdG9jb2wgPSAzMDEsCi0gICAgTmV0d29ya0Vycm9yQ2FuY2VsbGVkID0gMzAy
LAotICAgIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhpc3QgPSAzMDMKLX07Ci0KLS8vIFN5bmMn
ZCB3aXRoIE1hYydzIFdlYktpdCBFcnJvcnMuCi1lbnVtIFBvbGljeUVycm9yIHsKLSAgICBQb2xp
Y3lFcnJvckZhaWxlZCA9IDE5OSwKLSAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSA9
IDEwMCwKLSAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwgPSAxMDEsCi0gICAgUG9saWN5RXJy
b3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAotICAgIFBvbGljeUVy
cm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQgPSAxMDMKLX07Ci0KLWVudW0gUGx1Z2luRXJyb3Ig
ewotICAgIFBsdWdpbkVycm9yRmFpbGVkID0gMjk5LAotICAgIFBsdWdpbkVycm9yQ2Fubm90Rmlu
ZFBsdWdpbiA9IDIwMCwKLSAgICBQbHVnaW5FcnJvckNhbm5vdExvYWRQbHVnaW4gPSAyMDEsCi0g
ICAgUGx1Z2luRXJyb3JKYXZhVW5hdmFpbGFibGUgPSAyMDIsCi0gICAgUGx1Z2luRXJyb3JDb25u
ZWN0aW9uQ2FuY2VsbGVkID0gMjAzLAotICAgIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQgPSAy
MDQKLX07Ci0KLWVudW0gRG93bmxvYWRFcnJvciB7Ci0gICAgRG93bmxvYWRFcnJvck5ldHdvcmsg
PSA0OTksCi0gICAgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlciA9IDQwMCwKLSAgICBEb3du
bG9hZEVycm9yRGVzdGluYXRpb24gPSA0MDEKLX07Ci0KLWVudW0gUHJpbnRFcnJvciB7Ci0gICAg
UHJpbnRFcnJvckdlbmVyYWwgPSA1OTksCi0gICAgUHJpbnRFcnJvclByaW50ZXJOb3RGb3VuZCA9
IDUwMCwKLSAgICBQcmludEVycm9ySW52YWxpZFBhZ2VSYW5nZSA9IDUwMQotfTsKLQotUmVzb3Vy
Y2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291cmNl
RXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotUmVzb3VyY2VFcnJv
ciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci1SZXNvdXJjZUVy
cm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
Jik7Ci1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJv
cihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci1SZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29y
a0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLVJlc291cmNlRXJyb3IgZG93bmxvYWRDYW5j
ZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci1SZXNvdXJjZUVycm9y
IGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNvbnN0IFBy
aW50Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLVJlc291cmNlRXJyb3Ig
cHJpbnRlck5vdEZvdW5kRXJyb3IoY29uc3QgUHJpbnRDb250ZXh0Kik7Ci1SZXNvdXJjZUVycm9y
IGludmFsaWRQYWdlUmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCopOwotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmN2I1Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgotCi0jaW5jbHVkZSA8Z2xpYi5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCi17Ci0g
ICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Zp
bGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1H
dGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTIwNzI5Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCi0jaW5jbHVkZSAi
VVVJRC5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dsaWJV
dGlsaXRpZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLyogT24gbGludXgg
ZmlsZSBuYW1lcyBhcmUganVzdCByYXcgYnl0ZXMsIHNvIGFsc28gc3RyaW5ncyB0aGF0IGNhbm5v
dCBiZSBlbmNvZGVkIGluIGFueSB3YXkKLSAqIGFyZSB2YWxpZCBmaWxlIG5hbWVzLiBUaGlzIG1l
YW4gdGhhdCB3ZSBjYW5ub3QganVzdCBzdG9yZSBhIGZpbGUgbmFtZSBhcy1pcyBpbiBhIFN0cmlu
ZwotICogYnV0IHdlIGhhdmUgdG8gZXNjYXBlIGl0LgotICogT24gV2luZG93cyB0aGUgR0xpYiBm
aWxlIG5hbWUgZW5jb2RpbmcgaXMgYWx3YXlzIFVURi04IHNvIHdlIGNhbiBvcHRpbWl6ZSB0aGlz
IGNhc2UuICovCi1TdHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKiBmaWxlbmFtZSkK
LXsKLSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSNpZiBP
UyhXSU5ET1dTKQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKTsKLSNlbHNl
Ci0gICAgR093blB0cjxnY2hhcj4gZXNjYXBlZFN0cmluZyhnX3VyaV9lc2NhcGVfc3RyaW5nKGZp
bGVuYW1lLCAiLzoiLCBmYWxzZSkpOwotICAgIHJldHVybiBlc2NhcGVkU3RyaW5nLmdldCgpOwot
I2VuZGlmCi19Ci0KLUNTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBwYXRoLnV0ZjgoKTsKLSNl
bHNlCi0gICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ191cmlfdW5lc2NhcGVfc3RyaW5nKHBh
dGgudXRmOCgpLmRhdGEoKSwgMCkpOwotICAgIHJldHVybiBmaWxlbmFtZS5nZXQoKTsKLSNlbmRp
ZgotfQotCi0vLyBDb252ZXJ0cyBhIHN0cmluZyB0byBzb21ldGhpbmcgc3VpdGFibGUgdG8gYmUg
ZGlzcGxheWVkIHRvIHRoZSB1c2VyLgotU3RyaW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25zdCBT
dHJpbmcmIHN0cmluZykKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBzdHJpbmc7Ci0j
ZWxzZQotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3Ry
aW5nKTsKLSAgICBHT3duUHRyPGdjaGFyPiBkaXNwbGF5KGdfZmlsZW5hbWVfdG9fdXRmOChmaWxl
bmFtZS5kYXRhKCksIDAsIDAsIDAsIDApKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJl
dHVybiBzdHJpbmc7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXNwbGF5LmdldCgp
KTsKLSNlbmRpZgotfQotCi1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewot
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQotICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCi0g
ICAgICAgIHJlc3VsdCA9IGdfZmlsZV90ZXN0KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RFU1Rf
RVhJU1RTKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBDU3RyaW5n
IGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0gICAgaWYgKCFm
aWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gZ19yZW1vdmUoZmlsZW5hbWUuZGF0
YSgpKSA9PSAwOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURp
cmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
Ci0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gZ19ybWRpcihm
aWxlbmFtZS5kYXRhKCkpID09IDA7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGdl
dEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQotewot
ICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0g
ICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
U3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRh
dGEoKSwgJnN0YXRSZXN1bHQpOwotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcm
IHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1lKQotewotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAg
IGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOwotICAg
IGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbW9kaWZpZWRU
aW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKLSAgICByZXR1cm4gdHJ1ZTsKLQotfQotCi1ib29s
IGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRh
dGEpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHN0cnVjdCBzdGF0IHN0YXRSZXN1bHQ7Ci0gICAgZ2ludCByZXN1bHQgPSBnX3N0YXQo
ZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbWV0YWRhdGEubW9kaWZpY2F0aW9uVGltZSA9IHN0YXRSZXN1
bHQuc3RfbXRpbWU7Ci0gICAgbWV0YWRhdGEubGVuZ3RoID0gc3RhdFJlc3VsdC5zdF9zaXplOwot
ICAgIG1ldGFkYXRhLnR5cGUgPSBTX0lTRElSKHN0YXRSZXN1bHQuc3RfbW9kZSkgPyBGaWxlTWV0
YWRhdGE6OlR5cGVEaXJlY3RvcnkgOiBGaWxlTWV0YWRhdGE6OlR5cGVGaWxlOwotICAgIHJldHVy
biB0cnVlOwotCi19Ci0KLVN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKLXsKLSAgICBpZiAocGF0aC5lbmRz
V2l0aChHX0RJUl9TRVBBUkFUT1JfUykpCi0gICAgICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50
OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHBhdGggKyBHX0RJUl9TRVBBUkFUT1JfUyArIGNv
bXBvbmVudDsKLX0KLQotYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBnaW50IHJlc3VsdCA9IGdfbWtkaXJfd2l0aF9wYXJlbnRzKGZpbGVuYW1lLmRhdGEoKSwg
U19JUldYVSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0ID09IDA7Ci19Ci0KLVN0cmluZyBob21lRGly
ZWN0b3J5UGF0aCgpCi17Ci0gICAgcmV0dXJuIGZpbGVuYW1lVG9TdHJpbmcoZ19nZXRfaG9tZV9k
aXIoKSk7Ci19Ci0KLVN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFt
ZSkKLXsKLSAgICBpZiAocGF0aE5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aE5h
bWU7Ci0KLSAgICBDU3RyaW5nIHRtcEZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGhOYW1lKTsKLSAgICBHT3duUHRyPGdjaGFyPiBiYXNlTmFtZShnX3BhdGhfZ2V0X2Jhc2Vu
YW1lKHRtcEZpbGVuYW1lLmRhdGEoKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGJh
c2VOYW1lLmdldCgpKTsKLX0KLQotQ1N0cmluZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKQot
ewotICAgIENTdHJpbmcgcGF0aCA9IGdldEN1cnJlbnRFeGVjdXRhYmxlUGF0aCgpOwotICAgIGlm
ICghcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAvLyBJZiB0aGUg
YWJvdmUgZmFpbHMsIGNoZWNrIHRoZSBQQVRIIGVudiB2YXJpYWJsZS4KLSAgICBHT3duUHRyPGNo
YXI+IGN1cnJlbnRFeGVQYXRoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoZ19nZXRfcHJnbmFtZSgp
KSk7Ci0gICAgaWYgKCFjdXJyZW50RXhlUGF0aC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIENTdHJp
bmcoKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoY3Vy
cmVudEV4ZVBhdGguZ2V0KCkpKTsKLSAgICByZXR1cm4gZGlybmFtZS5nZXQoKTsKLX0KLQotQ1N0
cmluZyBzaGFyZWRSZXNvdXJjZXNQYXRoKCkKLXsKLSAgICBzdGF0aWMgQ1N0cmluZyBjYWNoZWRQ
YXRoOwotICAgIGlmICghY2FjaGVkUGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hl
ZFBhdGg7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEhNT0RVTEUgaG1vZHVsZSA9IDA7Ci0gICAg
R2V0TW9kdWxlSGFuZGxlRXhBKEdFVF9NT0RVTEVfSEFORExFX0VYX0ZMQUdfRlJPTV9BRERSRVNT
LCByZWludGVycHJldF9jYXN0PGNoYXIqPihzaGFyZWRSZXNvdXJjZXNQYXRoKSwgJmhtb2R1bGUp
OwotCi0gICAgR093blB0cjxnY2hhcj4gcnVudGltZURpcihnX3dpbjMyX2dldF9wYWNrYWdlX2lu
c3RhbGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9kdWxlKGhtb2R1bGUpKTsKLSAgICBHT3duUHRyPGdj
aGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKHJ1bnRpbWVEaXIuZ2V0KCksICJzaGFyZSIs
ICJ3ZWJraXRndGstIldFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkcsIE5VTEwpKTsKLSNlbHNl
Ci0gICAgR093blB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShEQVRBX0RJUiwg
IndlYmtpdGd0ay0iV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOwotI2VuZGlm
Ci0KLSAgICBjYWNoZWRQYXRoID0gZGF0YVBhdGguZ2V0KCk7Ci0gICAgcmV0dXJuIGNhY2hlZFBh
dGg7Ci19Ci0KLXVpbnQ2NF90IGdldFZvbHVtZUZyZWVTaXplRm9yUGF0aChjb25zdCBjaGFyKiBw
YXRoKQotewotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19m
b3JfcGF0aChwYXRoKSk7Ci0gICAgR1JlZlB0cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRH
UmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVtX2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJ
QlVURV9GSUxFU1lTVEVNX0ZSRUUsIDAsIDApKTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnX2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2
NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUpOwotfQot
Ci1TdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgLyogTm8g
bnVsbCBjaGVja2luZyBuZWVkZWQgKi8KLSAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRo
X2dldF9kaXJuYW1lKGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpKTsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1lLmdldCgpKTsKLX0KLQotVmVjdG9yPFN0
cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmls
dGVyKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7Ci0KLSAgICBDU3RyaW5nIGZpbGVu
YW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIEdEaXIqIGRpciA9IGdf
ZGlyX29wZW4oZmlsZW5hbWUuZGF0YSgpLCAwLCAwKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAg
cmV0dXJuIGVudHJpZXM7Ci0KLSAgICBHUGF0dGVyblNwZWMgKnBzcGVjID0gZ19wYXR0ZXJuX3Nw
ZWNfbmV3KChmaWx0ZXIudXRmOCgpKS5kYXRhKCkpOwotICAgIHdoaWxlIChjb25zdCBjaGFyKiBu
YW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcikpIHsKLSAgICAgICAgaWYgKCFnX3BhdHRlcm5fbWF0
Y2hfc3RyaW5nKHBzcGVjLCBuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IEdPd25QdHI8Z2NoYXI+IGVudHJ5KGdfYnVpbGRfZmlsZW5hbWUoZmlsZW5hbWUuZGF0YSgpLCBu
YW1lLCBOVUxMKSk7Ci0gICAgICAgIGVudHJpZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoZW50
cnkuZ2V0KCkpKTsKLSAgICB9Ci0gICAgZ19wYXR0ZXJuX3NwZWNfZnJlZShwc3BlYyk7Ci0gICAg
Z19kaXJfY2xvc2UoZGlyKTsKLQotICAgIHJldHVybiBlbnRyaWVzOwotfQotCi1TdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
aGFuZGxlKQotewotICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50Zigi
JXMlcyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpOwotICAgIEdPd25QdHI8Z2NoYXI+IHRlbXBQYXRoKGdfYnVpbGRfZmls
ZW5hbWUoZ19nZXRfdG1wX2RpcigpLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOwotICAgIEdSZWZQ
dHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aCh0ZW1wUGF0aC5n
ZXQoKSkpOwotCi0gICAgaGFuZGxlID0gZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQo
KSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFu
ZGxlKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KHRlbXBQYXRoLmdldCgpKTsKLX0KLQotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCi17Ci0gICAgQ1N0cmluZyBmc1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZnNSZXAuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotCi0gICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZzUmVwLmRh
dGEoKSkpOwotICAgIEdGaWxlSU9TdHJlYW0qIGlvU3RyZWFtID0gMDsKLSAgICBpZiAobW9kZSA9
PSBPcGVuRm9yUmVhZCkKLSAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUo
ZmlsZS5nZXQoKSwgMCwgMCk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpIHsK
LSAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZzUmVwLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVU
ZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCi0gICAg
ICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAw
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfY3JlYXRlX3Jl
YWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOwotICAgIH0KLQot
ICAgIHJldHVybiBpb1N0cmVhbTsKLX0KLQotdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlJiBoYW5kbGUpCi17Ci0gICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKGhhbmRsZSksIDAs
IDApOwotICAgIGdfb2JqZWN0X3VucmVmKGhhbmRsZSk7Ci0gICAgaGFuZGxlID0gaW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZTsKLX0KLQotbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQsIEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKLXsK
LSAgICBHU2Vla1R5cGUgc2Vla1R5cGUgPSBHX1NFRUtfU0VUOwotICAgIHN3aXRjaCAob3JpZ2lu
KSB7Ci0gICAgY2FzZSBTZWVrRnJvbUJlZ2lubmluZzoKLSAgICAgICAgc2Vla1R5cGUgPSBHX1NF
RUtfU0VUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlZWtGcm9tQ3VycmVudDoKLSAgICAg
ICAgc2Vla1R5cGUgPSBHX1NFRUtfQ1VSOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlZWtG
cm9tRW5kOgotICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19FTkQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IGlmICghZ19zZWVrYWJsZV9zZWVrKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0
cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0LCBzZWVrVHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gZ19z
ZWVrYWJsZV90ZWxsKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lP
X1NUUkVBTShoYW5kbGUpKSkpOwotfQotCi1pbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBnc2l6ZSBi
eXRlc1dyaXR0ZW47Ci0gICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChnX2lvX3N0cmVhbV9n
ZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEsIGxlbmd0aCwgJmJ5dGVzV3JpdHRlbiwgMCwgMCk7Ci0gICAgcmV0
dXJuIGJ5dGVzV3JpdHRlbjsKLX0KLQotaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIEdPd25QdHI8R0Vycm9y
PiBlcnJvcjsKLSAgICBkbyB7Ci0gICAgICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0
cmVhbV9yZWFkKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxl
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEs
IGxlbmd0aCwgMCwgJmVycm9yLm91dFB0cigpKTsKLSAgICAgICAgaWYgKGJ5dGVzUmVhZCA+PSAw
KQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzUmVhZDsKLSAgICB9IHdoaWxlIChlcnJvciAmJiBl
cnJvci0+Y29kZSA9PSBHX0ZJTEVfRVJST1JfSU5UUik7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1i
b29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCi17Ci0jaWYgT1MoV0lORE9X
UykKLSAgICByZXR1cm4gOjpGcmVlTGlicmFyeShtb2R1bGUpOwotI2Vsc2UKLSAgICByZXR1cm4g
Z19tb2R1bGVfY2xvc2UobW9kdWxlKTsKLSNlbmRpZgotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
YjY5M2Y0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRy
R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3du
ZWRHUHRyPEdka0V2ZW50PihHZGtFdmVudCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAg
IGdka19ldmVudF9mcmVlKHB0cik7Ci19Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0
cjxHdGtJY29uSW5mbz4oR3RrSWNvbkluZm8qIGluZm8pCi17Ci0gICAgaWYgKGluZm8pCi0gICAg
ICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZvKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HT3duUHRyR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNWU4
MzcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsu
aAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR093blB0ckd0a19oCi0jZGVmaW5l
IEdPd25QdHJHdGtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50PihH
ZGtFdmVudCopOwotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEd0a0ljb25JbmZvPihH
dGtJY29uSW5mbyopOwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dSZWZQdHJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTUwNmRmLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSBMdGQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdSZWZQdHJHdGsuaCIKLQotI2RlZmluZSBTRUNSRVRfV0lUSF9VTlNUQUJMRSAxCi0j
ZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVDVF9UT19DSEFOR0UgMQotCi0jaW5jbHVkZSA8Z2xpYi5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzZWNyZXQvc2VjcmV0Lmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0
a1RhcmdldExpc3QqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfcmVmKHB0cik7Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIGd0a190
YXJnZXRfbGlzdF91bnJlZihwdHIpOwotfQotCi10ZW1wbGF0ZSA8PiBTZWNyZXRWYWx1ZSogcmVm
R1B0cihTZWNyZXRWYWx1ZSogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIHNlY3JldF92
YWx1ZV9yZWYocHRyKTsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIHNlY3Jl
dF92YWx1ZV91bnJlZihwdHIpOwotfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXRlbXBs
YXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKLXsKLSAgICBpZiAocHRy
KQotICAgICAgICBnZGtfY3Vyc29yX3JlZihwdHIpOwotICAgIHJldHVybiBwdHI7Ci19Ci0KLXRl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNvciogcHRyKQotewotICAgIGlmIChwdHIp
Ci0gICAgICAgIGdka19jdXJzb3JfdW5yZWYocHRyKTsKLX0KLSNlbmRpZgotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTE5Mjg2NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFy
dGluIFJvYmluc29uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1JlZlB0ckd0a19oCi0jZGVmaW5lIEdS
ZWZQdHJHdGtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi10eXBlZGVm
IHN0cnVjdCBfU2VjcmV0VmFsdWUgU2VjcmV0VmFsdWU7Ci0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7Ci10
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwotCi10ZW1wbGF0
ZSA8PiBTZWNyZXRWYWx1ZSogcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsKLXRlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLXRlbXBsYXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Ci10
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Ci0jZW5kaWYKLQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFk
c0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk2MDlkLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHph
bmRvYmVyc2VrQGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdhbWVwYWRzLmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgIkdh
bWVwYWREZXZpY2VMaW51eC5oIgotI2luY2x1ZGUgIkdhbWVwYWRMaXN0LmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgPGdpby9ndW5peGlucHV0c3RyZWFtLmg+Ci0jaW5jbHVkZSA8
Z3VkZXYvZ3VkZXYuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEdhbWVwYWREZXZpY2VHdGsgOiBwdWJsaWMgR2FtZXBhZERldmljZUxpbnV4IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHYW1lcGFkRGV2aWNlR3RrPiBjcmVhdGUoU3Ry
aW5nIGRldmljZUZpbGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdhbWVw
YWREZXZpY2VHdGsoZGV2aWNlRmlsZSkpOwotICAgIH0KLSAgICB+R2FtZXBhZERldmljZUd0aygp
OwotCi1wcml2YXRlOgotICAgIEdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUpOwot
Ci0gICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVh
bSwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJl
YW07Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKLX07Ci0KLUdhbWVwYWREZXZpY2VH
dGs6OkdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUpCi0gICAgOiBHYW1lcGFkRGV2
aWNlTGludXgoZGV2aWNlRmlsZSkKLXsKLSAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAtMSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX3VuaXhf
aW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOwotICAgIG1fc291cmNl
ID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UoR19QT0xM
QUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsKLSAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJj
ZS5nZXQoKSwgMCk7Ci19Ci0KLUdhbWVwYWREZXZpY2VHdGs6On5HYW1lcGFkRGV2aWNlR3RrKCkK
LXsKLSAgICBpZiAobV9zb3VyY2UpCi0gICAgICAgIGdfc291cmNlX2Rlc3Ryb3kobV9zb3VyY2Uu
Z2V0KCkpOwotfQotCi1nYm9vbGVhbiBHYW1lcGFkRGV2aWNlR3RrOjpyZWFkQ2FsbGJhY2soR09i
amVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgR2FtZXBhZERldmlj
ZUd0ayogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZERldmljZUd0ayo+
KGRhdGEpOwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBzdHJ1Y3QganNfZXZlbnQg
ZXZlbnQ7Ci0KLSAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fcmVhZF9u
b25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShwb2xsYWJsZVN0cmVhbSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2
ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotCi0gICAgLy8gRklYTUU6
IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgR19JT19FUlJP
Ul9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGlsCi0gICAgLy8gdGhl
IHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhlcndpc2UuCi0gICAg
aWYgKGVycm9yKQotICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBH
X0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKLQotICAgIEFTU0VSVF9VTlVTRUQo
bGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7Ci0gICAgZ2FtZXBhZERldmljZS0+dXBkYXRlRm9y
RXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1jbGFzcyBHYW1lcGFkc0d0ayB7
Ci1wdWJsaWM6Ci0gICAgR2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQg
cmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOwotICAgIHZvaWQgdW5yZWdpc3RlckRl
dmljZShTdHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0KEdh
bWVwYWRMaXN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgfkdhbWVwYWRzR3RrKCk7Ci0gICAgc3RhdGlj
IHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2
RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgc3RhdGljIGdib29sZWFuIGlzR2FtZXBhZERl
dmljZShHVWRldkRldmljZSopOwotCi0gICAgVmVjdG9yPE93blB0cjxHYW1lcGFkRGV2aWNlR3Rr
PiA+IG1fc2xvdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VHdGsqPiBtX2Rl
dmljZU1hcDsKLQotICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1fZ3VkZXZDbGllbnQ7Ci19Owot
Ci1HYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKQotICAgIDogbV9zbG90
cyhsZW5ndGgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsgImlu
cHV0IiwgMCB9OwotICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVudF9u
ZXcoc3Vic3lzdGVtcykpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndWRldkNsaWVudC5nZXQo
KSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxsYmFjayksIHRoaXMpOwotCi0gICAg
R093blB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0
ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1swXSkpOwotICAgIGZvciAoR0xpc3Qq
IGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlz
dF9uZXh0KGxpc3RJdGVtKSkgewotICAgICAgICBHVWRldkRldmljZSogZGV2aWNlID0gR19VREVW
X0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7Ci0gICAgICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3Ry
aW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKLSAg
ICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQotICAgICAgICAgICAgcmVnaXN0ZXJE
ZXZpY2UoZGV2aWNlRmlsZSk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGRldmljZSk7Ci0gICAg
fQotfQotCi1HYW1lcGFkc0d0azo6fkdhbWVwYWRzR3RrKCkKLXsKLSAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVudC5nZXQoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci19Ci0KLXZvaWQgR2FtZXBhZHNHdGs6OnJlZ2lz
dGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQotewotICAgIExPRyhHYW1lcGFkLCAiR2FtZXBh
ZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNpemUoKTsgaW5kZXgrKykgewot
ICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7Ci0gICAgICAgICAgICBtX3Nsb3RzW2luZGV4
XSA9IEdhbWVwYWREZXZpY2VHdGs6OmNyZWF0ZShkZXZpY2VGaWxlKTsKLSAgICAgICAgICAgIG1f
ZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2luZGV4XS5nZXQoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6dW5y
ZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKLXsKLSAgICBMT0coR2FtZXBhZCwgIkdh
bWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKLQotICAg
IEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBtX2RldmljZU1hcC50YWtlKGRldmlj
ZUZpbGUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmluZChnYW1lcGFkRGV2aWNlKTsK
LSAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotCi0gICAgbV9zbG90c1tpbmRleF0uY2xl
YXIoKTsKLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExp
c3QqIGludG8pCi17Ci0gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgp
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgp
KSB7Ci0gICAgICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gbV9zbG90
c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+
aXRlbShpKTsKLSAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKLSAgICAgICAgICAgICAgICBnYW1l
cGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkp
OwotICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERldmljZS0+aWQoKSk7Ci0gICAgICAg
ICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwotICAg
ICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBh
ZERldmljZS0+YXhlc0RhdGEoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5idXR0b25zKGdhbWVw
YWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5idXR0b25zRGF0YSgpKTsK
LQotICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGludG8tPnNldChpLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2FtZXBhZHNHdGs6
Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqIHVkZXZDbGllbnQsIGdjaGFyKiBhY3Rpb24s
IEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKCFpc0dhbWVw
YWREZXZpY2UoZGV2aWNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2FtZXBhZHNHdGsqIGdh
bWVwYWRzR3RrID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkc0d0ayo+KGRhdGEpOwotICAgIFN0
cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZp
Y2VfZmlsZShkZXZpY2UpKTsKLQotICAgIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgImFkZCIpKQot
ICAgICAgICBnYW1lcGFkc0d0ay0+cmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci0gICAgZWxz
ZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkKLSAgICAgICAgZ2FtZXBhZHNHdGst
PnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci19Ci0KLWdib29sZWFuIEdhbWVwYWRzR3Rr
Ojppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmljZSkKLXsKLSAgICBjb25zdCBnY2hh
ciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSk7Ci0g
ICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGgo
ZGV2aWNlKTsKLSAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5c2ZzUGF0aCkKLSAgICAgICAgcmV0
dXJuIEZBTFNFOwotCi0gICAgaWYgKCFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2Us
ICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJRF9J
TlBVVF9KT1lTVElDSyIpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICByZXR1cm4gZ19z
dHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1dC9qcyIpOwotfQotCi12b2lkIHNh
bXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQotewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAoaW50by0+bGVuZ3RoKCkpKTsKLSAgICBnYW1l
cGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhMmVhYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAi
R3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50IGdMYXlvdXRDb2x1bW5TcGFjaW5nID0gMTI7
Ci1zdGF0aWMgY29uc3QgaW50IGdMYXlvdXRSb3dTcGFjaW5nID0gNjsKLXN0YXRpYyBjb25zdCBp
bnQgZ0J1dHRvblNwYWNpbmcgPSA1OwotCi1HdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0
aGVudGljYXRpb25EaWFsb2coY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCi0gICAgOiBtX2RpYWxvZygwKQotICAgICwg
bV9sb2dpbkVudHJ5KDApCi0gICAgLCBtX3Bhc3N3b3JkRW50cnkoMCkKLSAgICAsIG1fcmVtZW1i
ZXJDaGVja0J1dHRvbigwKQotICAgICwgbV9jaGFsbGVuZ2UoY2hhbGxlbmdlKQotICAgICwgbV9j
cmVkZW50aWFsU3RvcmFnZU1vZGUobW9kZSkKLXsKLX0KLQotR3RrQXV0aGVudGljYXRpb25EaWFs
b2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1v
ZGUgbW9kZSkKLSAgICA6IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCi0gICAgLCBtX2xvZ2lu
RW50cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNr
QnV0dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRp
YWxTdG9yYWdlTW9kZShtb2RlKQotewotICAgIEd0a1dpZGdldCogY29udGVudEFyZWEgPSBndGtf
ZGlhbG9nX2dldF9jb250ZW50X2FyZWEoR1RLX0RJQUxPRyhtX2RpYWxvZykpOwotICAgIGd0a19j
b250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKEdUS19ESUFMT0cobV9kaWFs
b2cpKSwgNSk7Ci0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGNvbnRlbnRBcmVhKSwg
Mik7IC8qIDIgKiA1ICsgMiA9IDEyICovCi0KLSAgICBHdGtXaW5kb3cqIHdpbmRvdyA9IEdUS19X
SU5ET1cobV9kaWFsb2cpOwotICAgIGd0a193aW5kb3dfc2V0X3Jlc2l6YWJsZSh3aW5kb3csIEZB
TFNFKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZSh3aW5kb3csICIiKTsKLSAgICBndGtfd2lu
ZG93X3NldF9pY29uX25hbWUod2luZG93LCBHVEtfU1RPQ0tfRElBTE9HX0FVVEhFTlRJQ0FUSU9O
KTsKLQotICAgIGlmIChwYXJlbnRXaW5kb3cpCi0gICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5z
aWVudF9mb3Iod2luZG93LCBwYXJlbnRXaW5kb3cpOwotCi0gICAgY3JlYXRlQ29udGVudHNJbkNv
bnRhaW5lcihjb250ZW50QXJlYSk7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3Rh
dGljIHZvaWQgcGFja1R3b0NvbHVtbkxheW91dEluQm94KEd0a1dpZGdldCogYm94LCAuLi4pCi17
Ci0gICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7Ci0gICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBi
b3gpOwotCi0gICAgR3RrV2lkZ2V0KiB0YWJsZSA9IGd0a190YWJsZV9uZXcoMSwgMiwgRkFMU0Up
OwotICAgIGd0a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlv
dXRDb2x1bW5TcGFjaW5nKTsKLSAgICBndGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFC
TEUodGFibGUpLCBnTGF5b3V0Um93U3BhY2luZyk7Ci0KLSAgICBHdGtXaWRnZXQqIGZpcnN0Q29s
dW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgaW50IHJv
d051bWJlciA9IDA7Ci0gICAgd2hpbGUgKGZpcnN0Q29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgIGlm
IChyb3dOdW1iZXIpCi0gICAgICAgICAgICBndGtfdGFibGVfcmVzaXplKEdUS19UQUJMRSh0YWJs
ZSksIHJvd051bWJlciArIDEsIDIpOwotCi0gICAgICAgIEd0a1dpZGdldCogc2Vjb25kQ29sdW1u
V2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEd0a0F0
dGFjaE9wdGlvbnMgYXR0YWNoT3B0aW9ucyA9IHN0YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+
KEdUS19FWFBBTkQgfCBHVEtfRklMTCk7Ci0gICAgICAgIGd0a190YWJsZV9hdHRhY2goR1RLX1RB
QkxFKHRhYmxlKSwgZmlyc3RDb2x1bW5XaWRnZXQsCi0gICAgICAgICAgICAwLCBzZWNvbmRDb2x1
bW5XaWRnZXQgPyAxIDogMiwKLSAgICAgICAgICAgIHJvd051bWJlciwgcm93TnVtYmVyICsgMSwK
LSAgICAgICAgICAgIGF0dGFjaE9wdGlvbnMsIGF0dGFjaE9wdGlvbnMsCi0gICAgICAgICAgICAw
LCAwKTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KQotICAgICAgICAgICAgZ3Rr
X3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZWNvbmRDb2x1bW5XaWRn
ZXQsIDEsIDIsIHJvd051bWJlciwgcm93TnVtYmVyICsgMSk7Ci0KLSAgICAgICAgZmlyc3RDb2x1
bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgcm93
TnVtYmVyKys7Ci0gICAgfQotCi0gICAgdmFfZW5kKGFyZ3VtZW50TGlzdCk7Ci0KLSAgICBndGtf
Ym94X3BhY2tfc3RhcnQoR1RLX0JPWChib3gpLCB0YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKLX0K
LSNlbHNlCi1zdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBi
b3gsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKLSAgICB2YV9zdGFydChhcmd1
bWVudExpc3QsIGJveCk7Ci0KLSAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsK
LSAgICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRS
b3dTcGFjaW5nKTsKLSAgICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCks
IGdMYXlvdXRSb3dTcGFjaW5nKTsKLSAgICBndGtfZ3JpZF9zZXRfY29sdW1uX2hvbW9nZW5lb3Vz
KEdUS19HUklEKGdyaWQpLCBUUlVFKTsKLQotICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRn
ZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICBpbnQgcm93TnVtYmVy
ID0gMDsKLSAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKLSAgICAgICAgR3RrV2lkZ2V0
KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsK
LSAgICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGggPSBzZWNvbmRDb2x1bW5XaWRnZXQgPyAxIDog
MjsKLQotICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIGZpcnN0Q29sdW1u
V2lkZ2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lkZ2V0V2lkdGgsIDEpOwotICAgICAgICBndGtf
d2lkZ2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgZ3Rr
X3dpZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVtbldpZGdldCwgVFJVRSk7Ci0KLSAgICAgICAg
aWYgKHNlY29uZENvbHVtbldpZGdldCkgewotICAgICAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdU
S19HUklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIHJvd051bWJlciwgMSwgMSk7Ci0g
ICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJV
RSk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKHNlY29uZENvbHVtbldpZGdl
dCwgVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2Fy
Zyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9
Ci0KLSAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGJveCksIGdyaWQsIEZBTFNFLCBGQUxTRSwgMCk7Ci19Ci0jZW5kaWYKLQotc3RhdGlj
IEd0a1dpZGdldCogY3JlYXRlRGlhbG9nTGFiZWwoY29uc3QgY2hhciogbGFiZWxTdHJpbmcsIGlu
dCBob3Jpem9udGFsUGFkZGluZyA9IDApCi17Ci0gICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19s
YWJlbF9uZXcobGFiZWxTdHJpbmcpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01J
U0MobGFiZWwpLCAwLCAwLjUpOwotICAgIGlmIChob3Jpem9udGFsUGFkZGluZykKLSAgICAgICAg
Z3RrX21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0MobGFiZWwpLCAwLCBob3Jpem9udGFsUGFkZGlu
Zyk7Ci0gICAgcmV0dXJuIGxhYmVsOwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFs
b2dFbnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCi17Ci0gICAgKm1lbWJlciA9IGd0a19lbnRyeV9u
ZXcoKTsKLSAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWSgqbWVt
YmVyKSwgVFJVRSk7Ci0gICAgcmV0dXJuICptZW1iZXI7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2c6OmNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250YWlu
ZXIpCi17Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBn
dGtfaGJveF9uZXcoRkFMU0UsIGdMYXlvdXRDb2x1bW5TcGFjaW5nKTsKLSNlbHNlCi0gICAgR3Rr
V2lkZ2V0KiBoQm94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIGdM
YXlvdXRDb2x1bW5TcGFjaW5nKTsKLSNlbmRpZgotICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRl
cl93aWR0aChHVEtfQ09OVEFJTkVSKGhCb3gpLCBnQnV0dG9uU3BhY2luZyk7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluZXIpLCBoQm94KTsKLQotICAgIEd0a1dp
ZGdldCogaWNvbiA9IGd0a19pbWFnZV9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfRElBTE9HX0FV
VEhFTlRJQ0FUSU9OLCBHVEtfSUNPTl9TSVpFX0RJQUxPRyk7Ci0gICAgZ3RrX21pc2Nfc2V0X2Fs
aWdubWVudChHVEtfTUlTQyhpY29uKSwgMC41LCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQo
R1RLX0JPWChoQm94KSwgaWNvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLQotICAgIEdPd25QdHI8Y2hh
cj4gcHJvbXB0KGdfc3RyZHVwX3ByaW50ZigKLSAgICAgICAgXygiVGhlIHNpdGUgJXM6JWkgcmVx
dWVzdHMgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQiKSwKLSAgICAgICAgbV9jaGFsbGVuZ2UucHJv
dGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgIG1fY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLnBvcnQoKSkpOwotCi0gICAgbV9yZW1lbWJlckNoZWNrQnV0dG9u
ID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dv
cmQiKSk7Ci0gICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0
X2NoaWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKLSAgICBndGtf
d2lkZ2V0X3NldF9ub19zaG93X2FsbChtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIG1fY3JlZGVudGlh
bFN0b3JhZ2VNb2RlID09IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2UpOwotCi0KLSAgICAvLyBX
ZSBhcmUgYWRkaW5nIHRoZSBidXR0b24gYm94IGhlcmUgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2lu
ZyB0aGUgcmVhZHktbWFkZSBHdGtEaWFsb2cgYnV0dG9ucy4KLSAgICAvLyBUaGlzIGlzIHNvIHRo
YXQgd2UgY2FuIHNoYXJlIHRoZSBjb2RlIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90
IHVzZSBHdGtEaWFsb2cuCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQq
IGJ1dHRvbkJveCA9IGd0a19oYnV0dG9uX2JveF9uZXcoKTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0
KiBidXR0b25Cb3ggPSBndGtfYnV0dG9uX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05U
QUwpOwotI2VuZGlmCi0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGJ1dHRvbkJveCks
IGdCdXR0b25TcGFjaW5nKTsKLSAgICBndGtfYnV0dG9uX2JveF9zZXRfbGF5b3V0KEdUS19CVVRU
T05fQk9YKGJ1dHRvbkJveCksIEdUS19CVVRUT05CT1hfRU5EKTsKLQotICAgIG1fb2theUJ1dHRv
biA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX09LKTsKLSAgICBtX2NhbmNl
bEJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0NBTkNFTCk7Ci0g
ICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYnV0dG9uQm94KSwgbV9jYW5jZWxCdXR0b24s
IEZBTFNFLCBUUlVFLCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25C
b3gpLCBtX29rYXlCdXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KG1fb2theUJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFj
ayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jYW5jZWxCdXR0b24sICJjbGlja2Vk
IiwgR19DQUxMQkFDSyhidXR0b25DbGlja2VkQ2FsbGJhY2spLCB0aGlzKTsKLQotICAgIFN0cmlu
ZyByZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnJlYWxtKCk7Ci0gICAgaWYg
KCFyZWFsbS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFja1R3b0NvbHVtbkxheW91dEluQm94KGhC
b3gsCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChwcm9tcHQuZ2V0KCksIGdMYXlvdXRS
b3dTcGFjaW5nKSwgTlVMTCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlNlcnZl
ciBtZXNzYWdlOiIpKSwgY3JlYXRlRGlhbG9nTGFiZWwocmVhbG0udXRmOCgpLmRhdGEoKSksCi0g
ICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxv
Z0VudHJ5KCZtX2xvZ2luRW50cnkpLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygi
UGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKLSAgICAg
ICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwKLSAgICAgICAgICAgIGJ1dHRvbkJv
eCwgTlVMTCwgTlVMTCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBwYWNrVHdvQ29sdW1uTGF5
b3V0SW5Cb3goaEJveCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQo
KSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFi
ZWwoXygiVXNlcm5hbWU6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKLSAg
ICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9n
RW50cnkoJm1fcGFzc3dvcmRFbnRyeSksCi0gICAgICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0
b24sIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBidXR0b25Cb3gsIE5VTEwsIE5VTEwpOwotICAg
IH0KLQotICAgIGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVu
dHJ5KSwgRkFMU0UpOwotICAgIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lz
dGVudFN0b3JhZ2UgPSBtX2NoYWxsZW5nZS5wcm9wb3NlZENyZWRlbnRpYWwoKTsKLSAgICBpZiAo
IWNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGd0
a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGd0a19lbnRy
eV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJz
aXN0ZW50U3RvcmFnZS5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBndGtfdG9n
Z2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1
dHRvbiksIFRSVUUpOwotICAgIH0KLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6
c2hvdygpCi17Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2RlZmF1bHQobV9va2F5QnV0dG9uLCBU
UlVFKTsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZGVmYXVsdChtX29rYXlCdXR0b24pOwotICAgIGd0
a193aWRnZXRfZ3JhYl9mb2N1cyhtX2xvZ2luRW50cnkpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93
X2FsbChtX2RpYWxvZyk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ry
b3koKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShtX2RpYWxvZyk7Ci0gICAgZGVsZXRlIHRo
aXM7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZShjb25z
dCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHko
KSkKLSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRS
ZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKG1fY2hhbGxlbmdlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3Jl
ZGVudGlhbChtX2NoYWxsZW5nZSwgY3JlZGVudGlhbCk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2c6OmJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqIGJ1dHRvbiwgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKLXsKLSAgICBDcmVkZW50aWFsIGNyZWRlbnRp
YWw7Ci0gICAgaWYgKGJ1dHRvbiA9PSBkaWFsb2ctPm1fb2theUJ1dHRvbikgewotICAgICAgICBj
b25zdCBjaGFyICp1c2VybmFtZSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9n
LT5tX2xvZ2luRW50cnkpKTsKLSAgICAgICAgY29uc3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50
cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGRpYWxvZy0+bV9wYXNzd29yZEVudHJ5KSk7Ci0gICAgICAg
IGJvb2wgcmVtZW1iZXJQYXNzd29yZCA9IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RL
X1RPR0dMRV9CVVRUT04oZGlhbG9nLT5tX3JlbWVtYmVyQ2hlY2tCdXR0b24pKTsKLSAgICAgICAg
Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlOwotCi0gICAgICAgIGlmIChyZW1lbWJl
clBhc3N3b3JkICYmIGRpYWxvZy0+bV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gQWxsb3dQZXJz
aXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlUGVybWFuZW50OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwZXJzaXN0ZW5jZSA9
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb247Ci0KLSAgICAgICAgY3JlZGVudGlhbCA9
IENyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgo
cGFzc3dvcmQpLCBwZXJzaXN0ZW5jZSk7Ci0gICAgfQotCi0gICAgZGlhbG9nLT5hdXRoZW50aWNh
dGUoY3JlZGVudGlhbCk7Ci0gICAgZGlhbG9nLT5kZXN0cm95KCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtB
dXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3N2M4
MWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR3RrQXV0aGVudGljYXRp
b25EaWFsb2dfaAotI2RlZmluZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCi0KLSNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOwot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgZW51bSBDcmVkZW50
aWFsU3RvcmFnZU1vZGUgewotICAgICAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUg
dXNlciBpcyBhc2tlZCB3aGV0aGVyIHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCi0g
ICAgICAgIERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2UgLy8gQ3JlZGVudGlhbCBpbmZvcm1hdGlv
biBpcyBvbmx5IGtlcHQgaW4gdGhlIHNlc3Npb24uCi0gICAgfTsKLQotICAgIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0
b3JhZ2VNb2RlKTsKLSAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7Ci0gICAg
dmlydHVhbCB+R3RrQXV0aGVudGljYXRpb25EaWFsb2coKSB7IH0KLSAgICB2b2lkIHNob3coKTsK
LSAgICB2b2lkIGRlc3Ryb3koKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgY3JlYXRlQ29udGVu
dHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGF1
dGhlbnRpY2F0ZShjb25zdCBDcmVkZW50aWFsJik7Ci0gICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsK
LSAgICBHdGtXaWRnZXQqIG1fbG9naW5FbnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRF
bnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKLSAgICBHdGtXaWRn
ZXQqIG1fb2theUJ1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1fY2FuY2VsQnV0dG9uOwotCi1wcml2
YXRlOgotICAgIHN0YXRpYyB2b2lkIGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOwotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1f
Y2hhbGxlbmdlOwotICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtX2NyZWRlbnRpYWxTdG9yYWdl
TW9kZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtDbGlja0NvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ns
aWNrQ291bnRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzhhMzIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0NsaWNrQ291bnRlci5oIgotCi0jaW5j
bHVkZSAiR093blB0ckd0ay5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1HdGtDbGlja0NvdW50ZXI6Okd0a0NsaWNrQ291bnRlcigpCi0gICAgOiBtX2N1
cnJlbnRDbGlja0NvdW50KDApCi0gICAgLCBtX3ByZXZpb3VzQ2xpY2tCdXR0b24oMCkKLSAgICAs
IG1fcHJldmlvdXNDbGlja1RpbWUoMCkKLXsKLX0KLQotdm9pZCBHdGtDbGlja0NvdW50ZXI6OnJl
c2V0KCkKLXsKLSAgICBtX2N1cnJlbnRDbGlja0NvdW50ID0gMDsKLSAgICBtX3ByZXZpb3VzQ2xp
Y2tQb2ludCA9IEludFBvaW50KCk7Ci0gICAgbV9wcmV2aW91c0NsaWNrVGltZSA9IDA7Ci0gICAg
bV9wcmV2aW91c0NsaWNrQnV0dG9uID0gMDsKLX0KLQotYm9vbCBHdGtDbGlja0NvdW50ZXI6OnNo
b3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCi17Ci0g
ICAgLy8gRm9yIGRvdWJsZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5vcm1h
bCBidXR0b24gcHJlc3MgZXZlbnQKLSAgICAvLyBhbmQgYSBzcGVjaWZpYyB0eXBlIChsaWtlIEdE
S18yQlVUVE9OX1BSRVNTKS4gSWYgd2UgZGV0ZWN0IGEgc3BlY2lhbCBwcmVzcwotICAgIC8vIGNv
bWluZyB1cCwgaWdub3JlIHRoaXMgZXZlbnQgYXMgaXQgY2VydGFpbmx5IGdlbmVyYXRlZCB0aGUg
ZG91YmxlIG9yIHRyaXBsZQotICAgIC8vIGNsaWNrLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90IGVh
dGluZyB0aGlzIGV2ZW50IGlzIHR3byBET00gYnV0dG9uIHByZXNzIGV2ZW50cwotICAgIC8vIGFy
ZSBnZW5lcmF0ZWQuCi0gICAgR093blB0cjxHZGtFdmVudD4gbmV4dEV2ZW50KGdka19ldmVudF9w
ZWVrKCkpOwotICAgIGlmICghbmV4dEV2ZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0RXZlbnQt
PmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBndWludDMyIGdldEV2ZW50VGltZShHZGtFdmVu
dCogZXZlbnQpCi17Ci0gICAgZ3VpbnQzMiB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50
KTsKLSAgICBpZiAodGltZSkKLSAgICAgICAgcmV0dXJuIHRpbWU7Ci0KLSAgICAvLyBSZWFsIGV2
ZW50cyBhbHdheXMgaGF2ZSBhIG5vbi16ZXJvIHRpbWUsIGJ1dCBldmVudHMgc3ludGhlc2l6ZWQK
LSAgICAvLyBieSB0aGUgRFJUIGRvIG5vdCBhbmQgd2UgbXVzdCBjYWxjdWxhdGUgYSB0aW1lIG1h
bnVhbGx5LiBUaGlzIHRpbWUKLSAgICAvLyBpcyBub3QgY2FsY3VsYXRlZCBpbiB0aGUgRFJULCBi
ZWNhdXNlIEdUSysgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGgKLSAgICAvLyBhbnl0aGluZyBvdGhl
ciB0aGFuIEdES19DVVJSRU5UX1RJTUUgb24gc3ludGhlc2l6ZWQgZXZlbnRzLgotICAgIEdUaW1l
VmFsIHRpbWVWYWx1ZTsKLSAgICBnX2dldF9jdXJyZW50X3RpbWUoJnRpbWVWYWx1ZSk7Ci0gICAg
cmV0dXJuICh0aW1lVmFsdWUudHZfc2VjICogMTAwMCkgKyAodGltZVZhbHVlLnR2X3VzZWMgLyAx
MDAwKTsKLX0KLQotaW50IEd0a0NsaWNrQ291bnRlcjo6Y2xpY2tDb3VudEZvckdka0J1dHRvbkV2
ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCi17Ci0g
ICAgZ2ludCBkb3VibGVDbGlja0Rpc3RhbmNlID0gMjUwOwotICAgIGdpbnQgZG91YmxlQ2xpY2tU
aW1lID0gNTsKLSAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2Zv
cl9zY3JlZW4oZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkpOwotICAgIGdfb2JqZWN0X2dl
dChzZXR0aW5ncywKLSAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xpY2stZGlzdGFuY2Ui
LCAmZG91YmxlQ2xpY2tEaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xp
Y2stdGltZSIsICZkb3VibGVDbGlja1RpbWUsIE5VTEwpOwotCi0gICAgLy8gR1RLKyBvbmx5IGNv
dW50cyB1cCB0byB0cmlwbGUgY2xpY2tzLCBidXQgV2ViQ29yZSB3YW50cyB0byBrbm93IGFib3V0
Ci0gICAgLy8gcXVhZHJ1cGxlIGNsaWNrcywgcXVpbnR1cGxlIGNsaWNrcywgYWQgaW5maW5pdHVt
LiBIZXJlLCB3ZSByZXBsaWNhdGUgdGhlCi0gICAgLy8gR0RLIGxvZ2ljIGZvciBjb3VudGluZyBj
bGlja3MuCi0gICAgR2RrRXZlbnQqIGV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihi
dXR0b25FdmVudCkpOwotICAgIGd1aW50MzIgZXZlbnRUaW1lID0gZ2V0RXZlbnRUaW1lKGV2ZW50
KTsKLQotICAgIGlmICgoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MgfHwgZXZlbnQt
PnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgIHx8ICgoYWJzKGJ1dHRvbkV2ZW50
LT54IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCi0g
ICAgICAgICAgICAmJiAoYWJzKGJ1dHRvbkV2ZW50LT55IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQu
eSgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCi0gICAgICAgICAgICAmJiAoZXZlbnRUaW1lIC0g
bV9wcmV2aW91c0NsaWNrVGltZSA8IHN0YXRpY19jYXN0PGd1aW50Pihkb3VibGVDbGlja1RpbWUp
KQotICAgICAgICAgICAgJiYgKGJ1dHRvbkV2ZW50LT5idXR0b24gPT0gbV9wcmV2aW91c0NsaWNr
QnV0dG9uKSkpCi0gICAgICAgIG1fY3VycmVudENsaWNrQ291bnQrKzsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAxOwotCi0gICAgZ2RvdWJsZSB4LCB5OwotICAgIGdk
a19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOwotICAgIG1fcHJldmlvdXNDbGlja1Bv
aW50ID0gSW50UG9pbnQoeCwgeSk7Ci0gICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gYnV0dG9u
RXZlbnQtPmJ1dHRvbjsKLSAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gZXZlbnRUaW1lOwotCi0g
ICAgcmV0dXJuIG1fY3VycmVudENsaWNrQ291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZjYTFkZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEd0a0NsaWNrQ291bnRl
cl9oCi0jZGVmaW5lIEd0a0NsaWNrQ291bnRlcl9oCi0KLSNpbmNsdWRlICJJbnRQb2ludC5oIgot
Ci10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3RrQ2xpY2tDb3VudGVyIHsKLXB1YmxpYzoKLSAgICBH
dGtDbGlja0NvdW50ZXIoKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBzaG91bGRQcm9j
ZXNzQnV0dG9uRXZlbnQoR2RrRXZlbnRCdXR0b24qKTsKLSAgICBpbnQgY2xpY2tDb3VudEZvckdk
a0J1dHRvbkV2ZW50KEd0a1dpZGdldCosIEdka0V2ZW50QnV0dG9uKik7Ci0KLXByaXZhdGU6Ci0g
ICAgaW50IG1fY3VycmVudENsaWNrQ291bnQ7Ci0gICAgSW50UG9pbnQgbV9wcmV2aW91c0NsaWNr
UG9pbnQ7Ci0gICAgdW5zaWduZWQgaW50IG1fcHJldmlvdXNDbGlja0J1dHRvbjsKLSAgICBpbnQg
bV9wcmV2aW91c0NsaWNrVGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5k
RHJvcEhlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERy
b3BIZWxwZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTdhNjA3Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtEcmFnQW5kRHJvcEhlbHBlci5oIgotCi0j
aW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIK
LSNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0j
aW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRHJvcHBpbmdDb250ZXh0IHsKLSAgICBEcm9wcGlu
Z0NvbnRleHQoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbikKLSAgICAgICAgOiBnZGtDb250ZXh0KGdka0NvbnRleHQpCi0gICAgICAgICwgZGF0YU9i
amVjdChEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSkKLSAgICAgICAgLCBsYXN0TW90aW9uUG9zaXRp
b24ocG9zaXRpb24pCi0gICAgICAgICwgZHJvcEhhcHBlbmVkKGZhbHNlKQotICAgICAgICAsIGV4
aXRlZENhbGxiYWNrKDApCi0gICAgewotICAgIH0KLQotICAgIEdka0RyYWdDb250ZXh0KiBnZGtD
b250ZXh0OwotICAgIFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0Owot
ICAgIFdlYkNvcmU6OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKLSAgICBpbnQgcGVuZGlu
Z0RhdGFSZXF1ZXN0czsKLSAgICBib29sIGRyb3BIYXBwZW5lZDsKLSAgICBEcmFnRXhpdGVkQ2Fs
bGJhY2sgZXhpdGVkQ2FsbGJhY2s7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8R2RrRHJhZ0NvbnRl
eHQqLCBEcm9wcGluZ0NvbnRleHQqPiBEcm9wcGluZ0NvbnRleHRNYXA7Ci10eXBlZGVmIEhhc2hN
YXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBEcmFnZ2luZ0RhdGFP
YmplY3RzTWFwOwotCi1HdGtEcmFnQW5kRHJvcEhlbHBlcjo6fkd0a0RyYWdBbmREcm9wSGVscGVy
KCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9kcm9wcGluZ0NvbnRleHRzKTsKLX0KLQotYm9v
bCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCogZHJh
Z0NvbnRleHQpCi17Ci0gICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0
b3IgPSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZmluZChkcmFnQ29udGV4dCk7Ci0gICAgaWYgKGl0
ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgbV9kcmFnZ2luZ0RhdGFPYmplY3RzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERy
YWdEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rp
b25EYXRhLCBndWludCBpbmZvKQotewotICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJh
dG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoY29udGV4dCk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZp
bGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT52YWx1ZS5nZXQo
KSk7Ci19Ci0KLXN0cnVjdCBIYW5kbGVEcmFnTGF0ZXJEYXRhIHsKLSAgICBEcm9wcGluZ0NvbnRl
eHQqIGNvbnRleHQ7Ci0gICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIqIGdsdWU7Ci19OwotCi1zdGF0
aWMgZ2Jvb2xlYW4gaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayhIYW5kbGVEcmFnTGF0ZXJE
YXRhKiBkYXRhKQotewotICAgIGRhdGEtPmdsdWUtPmhhbmRsZURyYWdMZWF2ZUxhdGVyKGRhdGEt
PmNvbnRleHQpOwotICAgIGRlbGV0ZSBkYXRhOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9p
ZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBpbmdDb250
ZXh0KiBjb250ZXh0KQotewotICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0
b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0LT5nZGtDb250ZXh0KTsKLSAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJZiB0aGUgdmlldyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0
aGVyZSBhcmUgc3RpbGwgcGVuZGluZyBkYXRhKQotICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1cGRh
dGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZy4KLSAgICBpZiAoY29udGV4dC0+
cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uID0gY29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOwotICAgIERyYWdEYXRh
IGRyYWdEYXRhKGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV93aWRnZXQsIHBv
c2l0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICBEcmFnT3BlcmF0aW9uTm9uZSk7Ci0gICAg
Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sobV93aWRnZXQsICZkcmFnRGF0YSwgY29udGV4dC0+ZHJv
cEhhcHBlbmVkKTsKLQotICAgIG1fZHJvcHBpbmdDb250ZXh0cy5yZW1vdmUoaXRlcmF0b3IpOwot
ICAgIGRlbGV0ZSBjb250ZXh0OwotfQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5k
bGVEcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIERyYWdFeGl0ZWRDYWxsYmFj
ayBleGl0ZWRDYWxsYmFjaykKLXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0
ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoZ2RrQ29udGV4dCk7Ci0gICAgaWYgKGl0
ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdpbGwgZmlyZSBhIGRyYWctbGVhdmUgc2lnbmFsIHJp
Z2h0IGJlZm9yZSBmaXJpbmcKLSAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0
aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKLSAgICAvLyB0aG9zZSBm
b3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBo
ZXJlLgotICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVy
RGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGRhdGEtPmNv
bnRleHQtPmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7Ci0gICAgZGF0YS0+Z2x1ZSA9
IHRoaXM7Ci0gICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHF1ZXJ5TmV3RHJvcENvbnRleHREYXRhKERyb3BwaW5nQ29udGV4dCogZHJvcENvbnRleHQsIEd0
a1dpZGdldCogd2lkZ2V0LCBndWludCB0aW1lKQotewotICAgIEdka0RyYWdDb250ZXh0KiBnZGtD
b250ZXh0ID0gZHJvcENvbnRleHQtPmdka0NvbnRleHQ7Ci0gICAgVmVjdG9yPEdka0F0b20+IGFj
Y2VwdGFibGVUYXJnZXRzKFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCktPmRyb3BBdG9tc0ZvckNvbnRleHQod2lkZ2V0LCBnZGtDb250ZXh0KSk7Ci0gICAgZHJvcENv
bnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7IGkrKykK
LSAgICAgICAgZ3RrX2RyYWdfZ2V0X2RhdGEod2lkZ2V0LCBnZGtDb250ZXh0LCBhY2NlcHRhYmxl
VGFyZ2V0cy5hdChpKSwgdGltZSk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9w
SGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRQb2ludCYgcG9zaXRpb24sIHVuc2lnbmVkIHRpbWUpCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0
KiBkcm9wcGluZ0NvbnRleHQgPSAwOwotICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3Ig
aXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsKLSAgICBpZiAoaXRl
cmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKSB7Ci0gICAgICAgIGRyb3BwaW5nQ29u
dGV4dCA9IG5ldyBEcm9wcGluZ0NvbnRleHQoY29udGV4dCwgcG9zaXRpb24pOwotICAgICAgICBt
X2Ryb3BwaW5nQ29udGV4dHMuc2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7Ci0gICAgICAg
IHF1ZXJ5TmV3RHJvcENvbnRleHREYXRhKGRyb3BwaW5nQ29udGV4dCwgbV93aWRnZXQsIHRpbWUp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlv
bjsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdl
YkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVkIGFsbAotICAgIC8vIHRoZSBkYXRhIGZvciB0aGlz
IGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQKLSAg
ICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgotICAgIEFTU0VSVChkcm9wcGluZ0NvbnRleHQpOwot
ICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0
KCk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFn
RGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBz
ZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZvLCBJbnRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAg
RHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0
cy5maW5kKGNvbnRleHQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGlu
Z0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzLS07Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywg
ZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKLQotICAgIGlmIChkcm9wcGluZ0Nv
bnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8g
VGhlIGNvb3JkaW5hdGVzIHBhc3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2lnbmFsIGFyZSBz
b21ldGltZXMKLSAgICAvLyBpbmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBjb29yZGluYXRl
cyBvZiB0aGUgbGFzdCBtb3Rpb24gZXZlbnQuCi0gICAgcG9zaXRpb24gPSBkcm9wcGluZ0NvbnRl
eHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHBl
bmRpbmcgcmVxdWVzdHMsIHN0YXJ0IHNlbmRpbmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJDb3JlLgot
ICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Ci19Ci0KLURhdGFP
YmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29u
dGV4dCogY29udGV4dCkKLXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJh
dG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGl0ZXJhdG9y
ID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBE
cm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBk
cm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gZHJvcHBp
bmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOwotfQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVs
cGVyOjpzdGFydGVkRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCwgRGF0YU9iamVjdEd0ayog
ZGF0YU9iamVjdCkKLXsKLSAgICBtX2RyYWdnaW5nRGF0YU9iamVjdHMuc2V0KGNvbnRleHQsIGRh
dGFPYmplY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNTRiMDJjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgR3RrRHJhZ0FuZERyb3BIZWxwZXJfaAot
I2RlZmluZSBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCi0KLSNpbmNsdWRlICJEYXRhT2JqZWN0R3Rr
LmgiCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RydWN0IERyb3BwaW5nQ29udGV4dDsKLWNsYXNzIERyYWdEYXRhOwotCi10eXBl
ZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dpZGdldCosIERyYWdEYXRhKiwgYm9v
bCBkcm9wSGFwcGVuZWQpOwotCi1jbGFzcyBHdGtEcmFnQW5kRHJvcEhlbHBlciB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxwZXIpOwotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIoKQotICAg
ICAgICA6IG1fd2lkZ2V0KDApCi0gICAgewotICAgIH0KLSAgICB+R3RrRHJhZ0FuZERyb3BIZWxw
ZXIoKTsKLQotICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KSB7IG1fd2lkZ2V0
ID0gd2lkZ2V0OyB9Ci0gICAgYm9vbCBoYW5kbGVEcmFnRW5kKEdka0RyYWdDb250ZXh0Kik7Ci0g
ICAgdm9pZCBoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCosIEd0a1NlbGVjdGlvbkRh
dGEqLCBndWludCBpbmZvKTsKLSAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4
dCosIERyYWdFeGl0ZWRDYWxsYmFjayk7Ci0gICAgdm9pZCBoYW5kbGVEcmFnTGVhdmVMYXRlcihE
cm9wcGluZ0NvbnRleHQqKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnTW90aW9uKEdk
a0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCB1bnNpZ25lZCB0aW1lKTsKLSAgICBEYXRh
T2JqZWN0R3RrKiBoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiwgR3RrU2Vs
ZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8sIEludFBvaW50Jik7Ci0gICAgRGF0YU9iamVjdEd0
ayogaGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIHN0YXJ0ZWREcmFn
KEdka0RyYWdDb250ZXh0KiwgRGF0YU9iamVjdEd0ayopOwotCi1wcml2YXRlOgotICAgIEd0a1dp
ZGdldCogbV93aWRnZXQ7Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29u
dGV4dCo+IG1fZHJvcHBpbmdDb250ZXh0czsKLSAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0Kiwg
UmVmUHRyPERhdGFPYmplY3RHdGs+ID4gbV9kcmFnZ2luZ0RhdGFPYmplY3RzOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjk5ODBiNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUyICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrSW5w
dXRNZXRob2RGaWx0ZXIuaCIKLQotI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKLSNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDxn
dGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotLy8gVGhlIFdpbmRvd3Mg
Y29tcG9zaXRpb24ga2V5IGV2ZW50IGNvZGUgaXMgMjk5IG9yIFZLX1BST0NFU1NLRVkuIFdlIG5l
ZWQgdG8KLS8vIGVtaXQgdGhpcyBjb2RlIGZvciB3ZWIgY29tcGF0aWJpbGl0eSByZWFzb25zIHdo
ZW4ga2V5IGV2ZW50cyB0cmlnZ2VyCi0vLyBjb21wb3NpdGlvbiByZXN1bHRzLiBHREsgZG9lc24n
dCBoYXZlIGFuIGVxdWl2YWxlbnQsIHNvIHdlIHNlbmQgVm9pZFN5bWJvbAotLy8gaGVyZSB0byBX
ZWJDb3JlLiBQbGF0Zm9ybUtleUV2ZW50IGtub3dzIHRvIGNvbnZlcnQgdGhpcyBjb2RlIGludG8K
LS8vIFZLX1BST0NFU1NLRVkuCi1jb25zdCBpbnQgZ0NvbXBvc2l0aW9uRXZlbnRLZXlDb2RlID0g
R0RLX0tFWV9Wb2lkU3ltYm9sOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lk
IGhhbmRsZUNvbW1pdENhbGxiYWNrKEd0a0lNQ29udGV4dCosIGNvbnN0IGNoYXIqIGNvbXBvc2l0
aW9uU3RyaW5nLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+
aGFuZGxlQ29tbWl0KGNvbXBvc2l0aW9uU3RyaW5nKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxl
UHJlZWRpdFN0YXJ0Q2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIq
IGZpbHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRTdGFydCgpOwotfQotCi1zdGF0
aWMgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxiYWNrKEd0a0lNQ29udGV4dCosIEd0a0lu
cHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5kbGVQcmVlZGl0Q2hh
bmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2soR3RrSU1D
b250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBmaWx0ZXItPmhh
bmRsZVByZWVkaXRFbmQoKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlV2lkZ2V0UmVhbGl6ZShH
dGtXaWRnZXQqIHdpZGdldCwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwotICAgIEFT
U0VSVCh3aW5kb3cpOwotICAgIGd0a19pbV9jb250ZXh0X3NldF9jbGllbnRfd2luZG93KGZpbHRl
ci0+Y29udGV4dCgpLCB3aW5kb3cpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpz
ZXRXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgQVNTRVJUKCFtX3dpZGdldCk7Ci0K
LSAgICBtX3dpZGdldCA9IHdpZGdldDsKLSAgICBpZiAoZ3RrX3dpZGdldF9nZXRfd2luZG93KG1f
d2lkZ2V0KSkKLSAgICAgICAgaGFuZGxlV2lkZ2V0UmVhbGl6ZShtX3dpZGdldCwgdGhpcyk7Ci0g
ICAgZWxzZQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKHdpZGdldCwgInJlYWxpemUi
LCBHX0NBTExCQUNLKGhhbmRsZVdpZGdldFJlYWxpemUpLCB0aGlzKTsKLX0KLQotdm9pZCBHdGtJ
bnB1dE1ldGhvZEZpbHRlcjo6c2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0JiBjdXJzb3JSZWN0
KQotewotICAgIC8vIERvbid0IG1vdmUgdGhlIHdpbmRvdyB1bmxlc3MgdGhlIGN1cnNvciBhY3R1
YWxseSBtb3ZlcyBtb3JlIHRoYW4gMTAKLSAgICAvLyBwaXhlbHMuIFRoaXMgcHJldmVudHMgdXMg
ZnJvbSBtYWtpbmcgdGhlIHdpbmRvdyBmbGFzaCBkdXJpbmcgbWlub3IKLSAgICAvLyBjdXJzb3Ig
YWRqdXN0bWVudHMuCi0gICAgc3RhdGljIGNvbnN0IGludCB3aW5kb3dNb3ZlbWVudFRocmVzaG9s
ZCA9IDEwICogMTA7Ci0gICAgaWYgKGN1cnNvclJlY3QubG9jYXRpb24oKS5kaXN0YW5jZVNxdWFy
ZWRUb1BvaW50KG1fbGFzdENhcmVMb2NhdGlvbikgPCB3aW5kb3dNb3ZlbWVudFRocmVzaG9sZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0Q2FyZUxvY2F0aW9uID0gY3Vyc29yUmVjdC5s
b2NhdGlvbigpOwotICAgIEludFJlY3QgdHJhbnNsYXRlZFJlY3QgPSBjdXJzb3JSZWN0OwotCi0g
ICAgQVNTRVJUKG1fd2lkZ2V0KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAg
Z3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihtX3dpZGdldCwgJmFsbG9jYXRpb24pOwotICAgIHRy
YW5zbGF0ZWRSZWN0Lm1vdmUoYWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnkpOwotCi0gICAgR2Rr
UmVjdGFuZ2xlIGdka0N1cnNvclJlY3QgPSBjdXJzb3JSZWN0OwotICAgIGd0a19pbV9jb250ZXh0
X3NldF9jdXJzb3JfbG9jYXRpb24obV9jb250ZXh0LmdldCgpLCAmZ2RrQ3Vyc29yUmVjdCk7Ci19
Ci0KLUd0a0lucHV0TWV0aG9kRmlsdGVyOjpHdGtJbnB1dE1ldGhvZEZpbHRlcigpCi0gICAgOiBt
X2N1cnNvck9mZnNldCgwKQotICAgICwgbV9jb250ZXh0KGFkb3B0R1JlZihndGtfaW1fbXVsdGlj
b250ZXh0X25ldygpKSkKLSAgICAsIG1fd2lkZ2V0KDApCi0gICAgLCBtX2VuYWJsZWQoZmFsc2Up
Ci0gICAgLCBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkoZmFsc2UpCi0gICAgLCBtX2ZpbHRlcmlu
Z0tleUV2ZW50KGZhbHNlKQotICAgICwgbV9wcmVlZGl0Q2hhbmdlZChmYWxzZSkKLSAgICAsIG1f
cHJldmVudE5leHRDb21taXQoZmFsc2UpCi0gICAgLCBtX2p1c3RTZW50RmFrZUtleVVwKGZhbHNl
KQotICAgICwgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzKEdES19LRVlf
Vm9pZFN5bWJvbCkKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgImNv
bW1pdCIsIEdfQ0FMTEJBQ0soaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtc3RhcnQiLCBHX0NBTExCQUNL
KGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWNoYW5nZWQiLCBHX0NBTExCQUNLKGhhbmRsZVBy
ZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29u
dGV4dC5nZXQoKSwgInByZWVkaXQtZW5kIiwgR19DQUxMQkFDSyhoYW5kbGVQcmVlZGl0RW5kQ2Fs
bGJhY2spLCB0aGlzKTsKLX0KLQotR3RrSW5wdXRNZXRob2RGaWx0ZXI6On5HdGtJbnB1dE1ldGhv
ZEZpbHRlcigpCi17Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1f
Y29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlQ29tbWl0Q2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9j
b250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0U3RhcnRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVu
YyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRD
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVQ
cmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X2J5X2Z1bmMobV93aWRnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVdpZGdl
dFJlYWxpemUpLCB0aGlzKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0RW5h
YmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFibGVkID0gZW5hYmxlZDsKLSAgICBpZiAo
ZW5hYmxlZCkKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4obV9jb250ZXh0LmdldCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQu
Z2V0KCkpOwotfQotCi1ib29sIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpmaWx0ZXJLZXlFdmVudChH
ZGtFdmVudEtleSogZXZlbnQpCi17Ci0gICAgaWYgKCFjYW5FZGl0KCkgfHwgIW1fZW5hYmxlZCkK
LSAgICAgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7Ci0KLSAgICBtX3ByZWVk
aXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IHRydWU7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IG1f
bGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0czsKLSAgICBtX2xhc3RGaWx0ZXJl
ZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBHREtfS0VZX1ZvaWRTeW1ib2w7Ci0KLSAgICBi
b29sIGZpbHRlcmVkID0gZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKG1fY29udGV4dC5n
ZXQoKSwgZXZlbnQpOwotICAgIG1fZmlsdGVyaW5nS2V5RXZlbnQgPSBmYWxzZTsKLQotICAgIGJv
b2wganVzdFNlbnRGYWtlS2V5VXAgPSBtX2p1c3RTZW50RmFrZUtleVVwOwotICAgIG1fanVzdFNl
bnRGYWtlS2V5VXAgPSBmYWxzZTsKLSAgICBpZiAoanVzdFNlbnRGYWtlS2V5VXAgJiYgZXZlbnQt
PnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IFNpbXBsZSBpbnB1dCBtZXRob2RzIHdvcmsgc3VjaCB0aGF0IGV2ZW4gbm9ybWFsIGtleXN0cm9r
ZXMgZmlyZSB0aGUKLSAgICAvLyBjb21taXQgc2lnbmFsLiBXZSBkZXRlY3QgdGhvc2Ugc2l0dWF0
aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBub3JtYWwKLSAgICAvLyBrZXkgZXZlbnRzLCBzdXBwbHlp
bmcgdGhlIGNvbW1pdCBzdHJpbmcgYXMgdGhlIGtleSBjaGFyYWN0ZXIuCi0gICAgaWYgKGZpbHRl
cmVkICYmICFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgJiYgIW1fcHJlZWRpdENoYW5nZWQgJiYg
bV9jb25maXJtZWRDb21wb3NpdGlvbi5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgIGJvb2wgcmVz
dWx0ID0gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50LCBtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsK
LSAgICAgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmIChmaWx0ZXJlZCAmJiBldmVudC0+dHlwZSA9PSBH
REtfS0VZX1BSRVNTKSB7Ci0gICAgICAgIGlmICghbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZp
cm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRD
dXJyZW50bHkgPSB0cnVlOwotICAgICAgICAgICAgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVX
aXRoTm9SZXN1bHRzID0gZXZlbnQtPmtleXZhbDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKGV2ZW50KTsKLSAgICAgICAgaWYgKCFtX2NvbmZpcm1lZENvbXBvc2l0aW9u
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFs
c2U7Ci0gICAgICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBwcmV2
aW91c2x5IGZpbHRlcmVkIGEga2V5IHByZXNzIGV2ZW50IGFuZCBpdCB5aWVsZGVkIG5vIHJlc3Vs
dHMuIFN1cHByZXNzCi0gICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcga2V5IHJlbGVhc2UgZXZlbnQg
dG8gYXZvaWQgY29uZnVzaW5nIHRoZSB3ZWIgY29udGVudC4KLSAgICBpZiAoZXZlbnQtPnR5cGUg
PT0gR0RLX0tFWV9SRUxFQVNFICYmIGxhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3Vs
dHMgPT0gZXZlbnQtPmtleXZhbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBBdCB0
aGlzIHBvaW50IGEga2V5c3Ryb2tlIHdhcyBlaXRoZXI6Ci0gICAgLy8gMS4gVW5maWx0ZXJlZAot
ICAgIC8vIDIuIEEgZmlsdGVyZWQga2V5dXAgZXZlbnQuIEFzIHRoZSBJTUUgY29kZSBpbiBFZGl0
b3JDbGllbnQuaCBkb2Vzbid0Ci0gICAgLy8gICAgZXZlciBsb29rIGF0IGtleXVwIGV2ZW50cywg
d2Ugc2VuZCBhbnkgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUKLSAgICAvLyAgICB0aGUga2V5
IGV2ZW50LgotICAgIC8vIEJvdGggbWlnaHQgaGF2ZSBjb21wb3NpdGlvbiByZXN1bHRzIG9yIG5v
dC4KLSAgICAvLwotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIHNlbmQgdGhlIGNvbXBvc2l0aW9u
IHJlc3VsdHMgYmVmb3JlIHRoZSBldmVudAotICAgIC8vIGJlY2F1c2Ugc29tZSBJTSBtb2R1bGVz
IG9wZXJhdGUgdGhhdCB3YXkuIEZvciBleGFtcGxlICh0YWtlbiBmcm9tCi0gICAgLy8gdGhlIENo
cm9taXVtIHNvdXJjZSksIHRoZSBsYXRpbi1wb3N0IGlucHV0IG1ldGhvZCBnaXZlcyB0aGlzIHNl
cXVlbmNlCi0gICAgLy8gd2hlbiB5b3UgcHJlc3MgJ2EnIGFuZCB0aGVuIGJhY2tzcGFjZToKLSAg
ICAvLyAgMS4ga2V5ZG93biAnYScgKGZpbHRlcmVkKQotICAgIC8vICAyLiBwcmVlZGl0IGNoYW5n
ZWQgdG8gImEiCi0gICAgLy8gIDMuIGtleXVwICdhJyAodW5maWx0ZXJlZCkKLSAgICAvLyAgNC4g
a2V5ZG93biBCYWNrc3BhY2UgKHVuZmlsdGVyZWQpCi0gICAgLy8gIDUuIGNvbW1pdCAiYSIKLSAg
ICAvLyAgNi4gcHJlZWRpdCBlbmQKLSAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNF
bXB0eSgpKQotICAgICAgICBjb25maXJtQ29tcG9zaXRpb24oKTsKLSAgICBpZiAobV9wcmVlZGl0
Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlUHJlZWRpdCgpOwotICAgIHJldHVybiBzZW5kU2ltcGxl
S2V5RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlN
b3VzZUJ1dHRvblByZXNzKCkKLXsKLSAgICAvLyBDb25maXJtaW5nIHRoZSBjb21wb3NpdGlvbiBt
YXkgdHJpZ2dlciBhIHNlbGVjdGlvbiBjaGFuZ2UsIHdoaWNoCi0gICAgLy8gbWlnaHQgdHJpZ2dl
ciBmdXJ0aGVyIHVud2FudGVkIGFjdGlvbnMgb24gdGhlIGNvbnRleHQsIHNvIHdlIHByZXZlbnQK
LSAgICAvLyB0aGF0IGJ5IHNldHRpbmcgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5IHRvIGZhbHNl
LgotICAgIGlmIChtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCi0gICAgICAgIGNvbmZpcm1DdXJy
ZW50Q29tcG9zaXRpb24oKTsKLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsK
LSAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhv
ZEZpbHRlcjo6cmVzZXRDb250ZXh0KCkKLXsKLQotICAgIC8vIFdlIGFsd2F5cyBjYW5jZWwgdGhl
IGN1cnJlbnQgV2ViQ29yZSBjb21wb3NpdGlvbiBoZXJlLCBpbiBjYXNlIHRoZQotICAgIC8vIGNv
bXBvc2l0aW9uIHdhcyBzZXQgb3V0c2lkZSB0aGUgR1RLKyBJTUUgcGF0aCAodmlhIGEgc2NyaXB0
LCBmb3IKLSAgICAvLyBpbnN0YW5jZSkgYW5kIHdlIGFyZW4ndCB0cmFja2luZyBpdC4KLSAgICBj
YW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKTsKLQotICAgIGlmICghbV9jb21wb3NpbmdUZXh0Q3Vy
cmVudGx5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0g
ZmFsc2U7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgR3RrSW5w
dXRNZXRob2RGaWx0ZXI6OmNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpCi17Ci0gICAgbV9wcmV2
ZW50TmV4dENvbW1pdCA9ICFtX3ByZWVkaXQuaXNFbXB0eSgpOwotCi0gICAgZ3RrX2ltX2NvbnRl
eHRfcmVzZXQobV9jb250ZXh0LmdldCgpKTsKLQotICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRs
eSA9IGZhbHNlOwotICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSBmYWxzZTsKLSAgICBtX3ByZWVk
aXQgPSBTdHJpbmcoKTsKLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci19
Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRJbigpCi17Ci0gICAg
bV9lbmFibGVkID0gdHJ1ZTsKLSAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2NvbnRleHQu
Z2V0KCkpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlGb2N1c2VkT3V0
KCkKLXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
Y29tcG9zaW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlv
bigpOwotICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOwotICAgIGd0a19pbV9jb250ZXh0
X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOwotICAgIG1fZW5hYmxlZCA9IGZhbHNlOwotfQot
Ci12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpjb25maXJtQ29tcG9zaXRpb24oKQotewotICAg
IGNvbmZpcm1Db21wb3NpdGlvblRleHQobV9jb25maXJtZWRDb21wb3NpdGlvbik7Ci0gICAgbV9j
b25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjp1cGRhdGVQcmVlZGl0KCkKLXsKLSAgICBzZXRQcmVlZGl0KG1fcHJlZWRpdCwgbV9j
dXJzb3JPZmZzZXQpOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBH
dGtJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5
RXZlbnRzKFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2VuZCkKLXsKLSAgICBHT3duUHRyPEdka0V2
ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpKTsKLSAgICBldmVudC0+a2V5
LnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2ZW50LT5rZXkua2V5dmFsID0gZ0NvbXBv
c2l0aW9uRXZlbnRLZXlDb2RlOwotICAgIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFrZWQpOwotCi0gICAgbV9jb25m
aXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotICAgIGlmIChyZXN1bHRzVG9TZW5kICYgQ29t
cG9zaXRpb24pCi0gICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotCi0g
ICAgZXZlbnQtPnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAgc2VuZFNpbXBsZUtleUV2ZW50
KCZldmVudC0+a2V5LCBTdHJpbmcoKSwgRXZlbnRGYWtlZCk7Ci0gICAgbV9qdXN0U2VudEZha2VL
ZXlVcCA9IHRydWU7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUNvbW1p
dChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZykKLXsKLSAgICBpZiAobV9wcmV2ZW50TmV4
dENvbW1pdCkgewotICAgICAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gZmFsc2U7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbi5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChjb21w
b3NpdGlvblN0cmluZykpOwotCi0gICAgLy8gSWYgdGhlIGNvbW1pdCB3YXMgdHJpZ2dlcmVkIG91
dHNpZGUgb2YgYSBrZXkgZXZlbnQsIGp1c3Qgc2VuZAotICAgIC8vIHRoZSBJTUUgZXZlbnQgbm93
LiBJZiB3ZSBhcmUgaGFuZGxpbmcgYSBrZXkgZXZlbnQsIHdlJ2xsIGRlY2lkZQotICAgIC8vIGxh
dGVyIGhvdyB0byBoYW5kbGUgdGhpcy4KLSAgICBpZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQpCi0g
ICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhDb21wb3Np
dGlvbik7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRTdGFy
dCgpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRDb21taXQgfHwgIW1fZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOwotICAgIG1fcHJlZWRpdCA9
ICIiOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdl
ZCgpCi17Ci0gICAgaWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdPd25Q
dHI8Z2NoYXI+IG5ld1ByZWVkaXQ7Ci0gICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRfc3Ry
aW5nKG1fY29udGV4dC5nZXQoKSwgJm5ld1ByZWVkaXQub3V0UHRyKCksIDAsICZtX2N1cnNvck9m
ZnNldCk7Ci0KLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCkgewotICAgICAgICBpZiAoc3Ry
bGVuKG5ld1ByZWVkaXQuZ2V0KCkpID4gMCkKLSAgICAgICAgICAgIG1fcHJldmVudE5leHRDb21t
aXQgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fcHJlZWRpdCA9IFN0cmluZzo6ZnJvbVVURjgobmV3UHJlZWRpdC5nZXQoKSk7Ci0gICAg
bV9jdXJzb3JPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1heChtX2N1cnNvck9mZnNldCwgMCksIHN0
YXRpY19jYXN0PGludD4obV9wcmVlZGl0Lmxlbmd0aCgpKSk7Ci0KLSAgICBtX2NvbXBvc2luZ1Rl
eHRDdXJyZW50bHkgPSAhbV9wcmVlZGl0LmlzRW1wdHkoKTsKLSAgICBtX3ByZWVkaXRDaGFuZ2Vk
ID0gdHJ1ZTsKLQotICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAgc2VuZENv
bXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFByZWVkaXQpOwotfQotCi12b2lk
IEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVlZGl0RW5kKCkKLXsKLSAgICBpZiAobV9w
cmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3ByZWVkaXQgPSBTdHJpbmcoKTsKLSAgICBtX2N1cnNvck9mZnNldCA9IDA7Ci0gICAgbV9wcmVl
ZGl0Q2hhbmdlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fZmlsdGVyaW5nS2V5RXZlbnQpCi0gICAg
ICAgIHVwZGF0ZVByZWVkaXQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMGU0ODI1My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrSW5wdXRNZXRob2RGaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtJbnB1dE1ldGhv
ZEZpbHRlcl9oCi0jZGVmaW5lIEd0a0lucHV0TWV0aG9kRmlsdGVyX2gKLQotI2luY2x1ZGUgIkdS
ZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR3RrSU1D
b250ZXh0IEd0a0lNQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEd0a0lucHV0TWV0aG9kRmlsdGVyIHsK
LXB1YmxpYzoKLSAgICBHdGtJbnB1dE1ldGhvZEZpbHRlcigpOwotICAgIH5HdGtJbnB1dE1ldGhv
ZEZpbHRlcigpOwotCi0gICAgYm9vbCBmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSopOwotICAg
IHZvaWQgbm90aWZ5TW91c2VCdXR0b25QcmVzcygpOwotICAgIHZvaWQgbm90aWZ5Rm9jdXNlZElu
KCk7Ci0gICAgdm9pZCBub3RpZnlGb2N1c2VkT3V0KCk7Ci0gICAgdm9pZCByZXNldENvbnRleHQo
KTsKLSAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7Ci0KLSAgICB2b2lkIGhhbmRsZUNvbW1pdChj
b25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZyk7Ci0gICAgdm9pZCBoYW5kbGVQcmVlZGl0Q2hh
bmdlZCgpOwotICAgIHZvaWQgaGFuZGxlUHJlZWRpdFN0YXJ0KCk7Ci0gICAgdm9pZCBoYW5kbGVQ
cmVlZGl0RW5kKCk7Ci0KLSAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIHZvaWQg
Y2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7Ci0gICAgdm9pZCB1cGRhdGVQcmVlZGl0KCk7Ci0g
ICAgdm9pZCBzZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGxvY2F0aW9uKTsKLQotICAgIEd0
a0lNQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAg
ZW51bSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gewotICAgICAgICBFdmVudEZha2VkLAotICAg
ICAgICBFdmVudE5vdEZha2VkCi0gICAgfTsKLQotcHJvdGVjdGVkOgotICAgIGVudW0gUmVzdWx0
c1RvU2VuZCB7Ci0gICAgICAgIFByZWVkaXQgPSAxIDw8IDEsCi0gICAgICAgIENvbXBvc2l0aW9u
ID0gMSA8PCAyLAotICAgICAgICBQcmVlZGl0QW5kQ29tcG9zaXRpb24gPSBQcmVlZGl0ICsgQ29t
cG9zaXRpb24KLSAgICB9OwotCi0gICAgdm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAg
dmlydHVhbCBib29sIGNhbkVkaXQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVL
ZXlFdmVudChHZGtFdmVudEtleSosIFdURjo6U3RyaW5nIGV2ZW50U3RyaW5nID0gU3RyaW5nKCks
IEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiA9IEV2ZW50Tm90RmFrZWQpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSos
IFJlc3VsdHNUb1NlbmQgPSBQcmVlZGl0QW5kQ29tcG9zaXRpb24sIEV2ZW50RmFrZWRGb3JDb21w
b3NpdGlvbiA9IEV2ZW50Tm90RmFrZWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNv
bXBvc2l0aW9uVGV4dChTdHJpbmcgY29tcG9zaXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
Q3VycmVudENvbXBvc2l0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0KFN0
cmluZywgaW50IGN1cnNvck9mZnNldCkgPSAwOwotCi0gICAgV1RGOjpTdHJpbmcgbV9jb25maXJt
ZWRDb21wb3NpdGlvbjsKLSAgICBXVEY6OlN0cmluZyBtX3ByZWVkaXQ7Ci0gICAgaW50IG1fY3Vy
c29yT2Zmc2V0OwotCi1wcml2YXRlOgotICAgIHZvaWQgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRp
dFdpdGhGYWtlS2V5RXZlbnRzKFJlc3VsdHNUb1NlbmQpOwotCi0gICAgR1JlZlB0cjxHdGtJTUNv
bnRleHQ+IG1fY29udGV4dDsKLSAgICBHdGtXaWRnZXQqIG1fd2lkZ2V0OwotICAgIGJvb2wgbV9l
bmFibGVkOwotICAgIGJvb2wgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5OwotICAgIGJvb2wgbV9m
aWx0ZXJpbmdLZXlFdmVudDsKLSAgICBib29sIG1fcHJlZWRpdENoYW5nZWQ7Ci0gICAgYm9vbCBt
X3ByZXZlbnROZXh0Q29tbWl0OwotICAgIGJvb2wgbV9qdXN0U2VudEZha2VLZXlVcDsKLSAgICB1
bnNpZ25lZCBpbnQgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOwotICAg
IEludFBvaW50IG1fbGFzdENhcmVMb2NhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEd0a0lucHV0TWV0aG9kRmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDRjZjFiNjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a1BsdWdpbldpZGdldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJHdGtQbHVnaW5XaWRnZXQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNs
dWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3RrUGx1Z2luV2lkZ2V0
OjpHdGtQbHVnaW5XaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi0gICAgOiBXaWRnZXQod2lkZ2V0
KQotewotICAgIGd0a193aWRnZXRfaGlkZSh3aWRnZXQpOwotfQotCi1HdGtQbHVnaW5XaWRnZXQ6
On5HdGtQbHVnaW5XaWRnZXQoKQotewotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIoZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBsYXRmb3JtV2lkZ2V0KCkpKSwgcGxhdGZvcm1X
aWRnZXQoKSk7Ci19Ci0KLXZvaWQgR3RrUGx1Z2luV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25z
dCBJbnRSZWN0JiBjb3JlUmVjdCkKLXsKLSAgICAvKiBubyBuZWVkIHRvICovCi0gICAgaWYgKCFn
dGtfd2lkZ2V0X2dldF9oYXNfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhwbGF0
Zm9ybVdpZGdldCgpKTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R2RrUmVjdGFuZ2xlIHJlY3QgPSBjb3JlUmVjdDsKLSAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdCh3aW5kb3csICZyZWN0LCBGQUxTRSk7Ci19Ci0KLXZvaWQgR3RrUGx1Z2luV2lkZ2V0Ojpm
cmFtZVJlY3RzQ2hhbmdlZCgpCi17Ci0gICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7Ci0g
ICAgSW50UG9pbnQgbG9jID0gcGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlv
bigpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OwotCi0gICAgZ3RrX3dpZGdldF9zZXRfc2l6
ZV9yZXF1ZXN0KHBsYXRmb3JtV2lkZ2V0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHBsYXRmb3JtV2lkZ2V0KCksICZhbGxvY2F0
aW9uKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3M2VjNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR3RrUGx1Z2luV2lk
Z2V0X2gKLSNkZWZpbmUgR3RrUGx1Z2luV2lkZ2V0X2gKLQotI2luY2x1ZGUgIldpZGdldC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgR3RrUGx1Z2luV2lkZ2V0IDogcHVibGlj
IFdpZGdldCB7Ci0gICAgcHVibGljOgotICAgICAgICBHdGtQbHVnaW5XaWRnZXQoR3RrV2lkZ2V0
Kik7Ci0gICAgICAgIHZpcnR1YWwgfkd0a1BsdWdpbldpZGdldCgpOwotICAgICAgICB2b2lkIGlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9pZCBmcmFtZVJlY3RzQ2hh
bmdlZCgpOwotICAgIH07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrUG9wdXBNZW51LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1N2Ex
Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1l
bnRzIGluIFdlYkNvcmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a1BvcHVwTWVudS5o
IgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIkd0a1ZlcnNp
b25pbmcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBnU2Vh
cmNoVGltZW91dE1zID0gMTAwMDsKLQotR3RrUG9wdXBNZW51OjpHdGtQb3B1cE1lbnUoKQotICAg
IDogbV9wb3B1cChndGtfbWVudV9uZXcoKSkKLSAgICAsIG1fcHJldmlvdXNLZXlFdmVudENoYXJh
Y3RlcigwKQotICAgICwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKDApCi17Ci0gICAgbV9r
ZXlQcmVzc0hhbmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgImtleS1w
cmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0soR3RrUG9wdXBNZW51OjprZXlQcmVzc0V2ZW50Q2FsbGJh
Y2spLCB0aGlzKTsKLX0KLQotR3RrUG9wdXBNZW51Ojp+R3RrUG9wdXBNZW51KCkKLXsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgbV9rZXlQcmVzc0hhbmRs
ZXJJRCk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjpjbGVhcigpCi17Ci0gICAgZ3RrX2NvbnRh
aW5lcl9mb3JlYWNoKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0X2Nh
c3Q8R3RrQ2FsbGJhY2s+KG1lbnVSZW1vdmVJdGVtKSwgdGhpcyk7Ci19Ci0KLXZvaWQgR3RrUG9w
dXBNZW51OjphcHBlbmRTZXBhcmF0b3IoKQotewotICAgIEd0a1dpZGdldCogbWVudUl0ZW0gPSBn
dGtfc2VwYXJhdG9yX21lbnVfaXRlbV9uZXcoKTsKLSAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQo
R1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKLSAgICBndGtfd2lkZ2V0
X3Nob3cobWVudUl0ZW0pOwotfQotCi12b2lkIEd0a1BvcHVwTWVudTo6YXBwZW5kSXRlbShHdGtB
Y3Rpb24qIGFjdGlvbikKLXsKLSAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX2FjdGlvbl9j
cmVhdGVfbWVudV9pdGVtKGFjdGlvbik7Ci0gICAgZ3RrX3dpZGdldF9zZXRfdG9vbHRpcF90ZXh0
KG1lbnVJdGVtLCBndGtfYWN0aW9uX2dldF90b29sdGlwKGFjdGlvbikpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobWVudUl0ZW0sICJzZWxlY3QiLCBHX0NBTExCQUNLKEd0a1BvcHVwTWVudTo6c2Vs
ZWN0SXRlbUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19N
RU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBtZW51SXRlbSk7Ci0KLSAgICBpZiAoZ3RrX2FjdGlv
bl9pc192aXNpYmxlKGFjdGlvbikpCi0gICAgICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRlbSk7
Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51Ojpwb3BVcChjb25zdCBJbnRTaXplJiBtZW51U2l6ZSwg
Y29uc3QgSW50UG9pbnQmIG1lbnVQb3NpdGlvbiwgaW50IGl0ZW1Db3VudCwgaW50IHNlbGVjdGVk
SXRlbSwgY29uc3QgR2RrRXZlbnQqIGV2ZW50KQotewotICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0
YXRlKCk7Ci0gICAgbV9tZW51UG9zaXRpb24gPSBtZW51UG9zaXRpb247Ci0gICAgZ3RrX21lbnVf
c2V0X2FjdGl2ZShHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgc2VsZWN0ZWRJdGVtKTsKLQotICAg
IC8vIFRoaXMgYXBwcm9hY2ggZm9sbG93cyB0aGUgb25lIGluIGd0a2NvbWJvYm94LmMuCi0gICAg
R3RrUmVxdWlzaXRpb24gcmVxdWlzaXRpb247Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1
ZXN0KG1fcG9wdXAuZ2V0KCksIC0xLCAtMSk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAg
ICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRpb24pOwot
I2Vsc2UKLSAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShtX3BvcHVwLmdldCgpLCAm
cmVxdWlzaXRpb24sIDApOwotI2VuZGlmCi0KLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVl
c3QobV9wb3B1cC5nZXQoKSwgc3RkOjptYXgobWVudVNpemUud2lkdGgoKSwgcmVxdWlzaXRpb24u
d2lkdGgpLCAtMSk7Ci0KLSAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9j
aGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKLSAgICBHTGlzdCogcCA9IGNo
aWxkcmVuOwotICAgIGlmIChpdGVtQ291bnQpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBpdGVtQ291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgPiBzZWxlY3RlZEl0ZW0pCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIEd0a1dpZGdldCogaXRlbSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R3RrV2lkZ2V0Kj4ocC0+ZGF0YSk7Ci0gICAgICAgICAgICBHdGtSZXF1
aXNpdGlvbiBpdGVtUmVxdWlzaXRpb247Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICAg
ICAgICAgIGd0a193aWRnZXRfZ2V0X2NoaWxkX3JlcXVpc2l0aW9uKGl0ZW0sICZpdGVtUmVxdWlz
aXRpb24pOwotI2Vsc2UKLSAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXpl
KGl0ZW0sICZpdGVtUmVxdWlzaXRpb24sIDApOwotI2VuZGlmCi0gICAgICAgICAgICBtX21lbnVQ
b3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIGl0ZW1SZXF1aXNpdGlvbi5oZWlnaHQp
OwotCi0gICAgICAgICAgICBwID0gZ19saXN0X25leHQocCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBDZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAgaW4gdGhl
IGNvbWJvIGJveCBhcmVhLgotICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0
aW9uLnkoKSAtIG1lbnVTaXplLmhlaWdodCgpIC8gMik7Ci0gICAgfQotICAgIGdfbGlzdF9mcmVl
KGNoaWxkcmVuKTsKLQotICAgIGd1aW50IGJ1dHRvbjsKLSAgICBndWludDMyIGFjdGl2YXRlVGlt
ZTsKLSAgICBpZiAoZXZlbnQpIHsKLSAgICAgICAgYnV0dG9uID0gZXZlbnQtPnR5cGUgPT0gR0RL
X0JVVFRPTl9QUkVTUyA/IGV2ZW50LT5idXR0b24uYnV0dG9uIDogMTsKLSAgICAgICAgYWN0aXZh
dGVUaW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBidXR0b24gPSAxOwotICAgICAgICBhY3RpdmF0ZVRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwot
ICAgIH0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ3RrX21lbnVfcG9wdXAoR1RL
X01FTlUobV9wb3B1cC5nZXQoKSksIDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0
aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCBidXR0b24sIGFjdGl2YXRlVGlt
ZSk7Ci0jZWxzZQotICAgIGd0a19tZW51X3BvcHVwX2Zvcl9kZXZpY2UoR1RLX01FTlUobV9wb3B1
cC5nZXQoKSksIGV2ZW50ID8gZ2RrX2V2ZW50X2dldF9kZXZpY2UoZXZlbnQpIDogMCwgMCwgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBv
c2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBidXR0b24sIGFjdGl2
YXRlVGltZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OnBvcERvd24oKQotewot
ICAgIGd0a19tZW51X3BvcGRvd24oR1RLX01FTlUobV9wb3B1cC5nZXQoKSkpOwotICAgIHJlc2V0
VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjptZW51UmVtb3Zl
SXRlbShHdGtXaWRnZXQqIHdpZGdldCwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0gICAg
QVNTRVJUKHBvcHVwTWVudS0+bV9wb3B1cCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RL
X0NPTlRBSU5FUihwb3B1cE1lbnUtPm1fcG9wdXAuZ2V0KCkpLCB3aWRnZXQpOwotfQotCi12b2lk
IEd0a1BvcHVwTWVudTo6bWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqIHgsIGdp
bnQqIHksIGdib29sZWFuKiBwdXNoSW4sIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQotewotICAg
ICp4ID0gcG9wdXBNZW51LT5tX21lbnVQb3NpdGlvbi54KCk7Ci0gICAgKnkgPSBwb3B1cE1lbnUt
Pm1fbWVudVBvc2l0aW9uLnkoKTsKLSAgICAqcHVzaEluID0gdHJ1ZTsKLX0KLQotdm9pZCBHdGtQ
b3B1cE1lbnU6OnJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCkKLXsKLSAgICBtX2N1cnJlbnRseVNl
bGVjdGVkTWVudUl0ZW0gPSAwOwotICAgIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlciA9IDA7
Ci0gICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nID0gIiI7Ci19Ci0KLWJvb2wgR3RrUG9wdXBNZW51
Ojp0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICAvLyBJZiB3ZSB3ZXJl
IGdpdmVuIGEgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXIganVzdCBza2lwIGl0LgotICAgIGd1bmlj
aGFyIHVuaWNvZGVDaGFyYWN0ZXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZXZlbnQtPmtleXZh
bCk7Ci0gICAgaWYgKCFnX3VuaWNoYXJfaXNwcmludCh1bmljb2RlQ2hhcmFjdGVyKSkgewotICAg
ICAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgZ2xvbmcgY2hhcmFjdGVyc1dyaXR0ZW47Ci0gICAgR093blB0cjxndW5pY2hh
cjI+IHV0ZjE2U3RyaW5nKGdfdWNzNF90b191dGYxNigmdW5pY29kZUNoYXJhY3RlciwgMSwgMCwg
JmNoYXJhY3RlcnNXcml0dGVuLCAwKSk7Ci0gICAgaWYgKCF1dGYxNlN0cmluZykgewotICAgICAg
ICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgc2FtZSBhcyB0aGUgbGFzdCBjaGFy
YWN0ZXIsIHRoZSB1c2VyIGlzIHByb2JhYmx5IHRyeWluZyB0bwotICAgIC8vIGN5Y2xlIHRocm91
Z2ggdGhlIG1lbnVsaXN0IGVudHJpZXMuIFRoaXMgbWF0Y2hlcyB0aGUgV2ViQ29yZSBiZWhhdmlv
ciBmb3IgY29sbGFwc2VkCi0gICAgLy8gbWVudWxpc3RzLgotICAgIGJvb2wgcmVwZWF0aW5nQ2hh
cmFjdGVyID0gdW5pY29kZUNoYXJhY3RlciAhPSBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXI7
Ci0gICAgaWYgKGV2ZW50LT50aW1lIC0gbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wID4gZ1Nl
YXJjaFRpbWVvdXRNcykKLSAgICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nID0gU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPih1dGYxNlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNXcml0
dGVuKTsKLSAgICBlbHNlIGlmIChyZXBlYXRpbmdDaGFyYWN0ZXIpCi0gICAgICAgIG1fY3VycmVu
dFNlYXJjaFN0cmluZy5hcHBlbmQoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPih1dGYx
NlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNXcml0dGVuKSk7Ci0KLSAgICBtX3ByZXZpb3VzS2V5
RXZlbnRUaW1lc3RhbXAgPSBldmVudC0+dGltZTsKLSAgICBtX3ByZXZpb3VzS2V5RXZlbnRDaGFy
YWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyOwotCi0gICAgLy8gTGlrZSB0aGUgQ2hyb21pdW0gcG9y
dCwgd2UgY2FzZSBmb2xkIGJlZm9yZSBzZWFyY2hpbmcsIGJlY2F1c2UgCi0gICAgLy8gc3RybmNt
cCBkb2VzIG5vdCBoYW5kbGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCi0gICAgR093blB0cjxnY2hh
cj4gc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQoZ191dGY4X2Nhc2Vmb2xkKG1fY3VycmVudFNl
YXJjaFN0cmluZy51dGY4KCkuZGF0YSgpLCAtMSkpOwotICAgIHNpemVfdCBwcmVmaXhMZW5ndGgg
PSBzdHJsZW4oc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCkpOwotCi0gICAgR0xpc3Qq
IGNoaWxkcmVuID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtX3Bv
cHVwLmdldCgpKSk7Ci0gICAgaWYgKCFjaGlsZHJlbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBJZiBhIG1lbnUgaXRlbSBoYXMgYWxyZWFkeSBiZWVuIHNlbGVjdGVkLCBzdGFydCBz
ZWFyY2hpbmcgZnJvbSB0aGUgY3VycmVudAotICAgIC8vIGl0ZW0gZG93biB0aGUgbGlzdC4gVGhp
cyB3aWxsIG1ha2UgbXVsdGlwbGUga2V5IHByZXNzZXMgb2YgdGhlIHNhbWUgY2hhcmFjdGVyCi0g
ICAgLy8gYWR2YW5jZSB0aGUgc2VsZWN0aW9uLgotICAgIEdMaXN0KiBjdXJyZW50Q2hpbGQgPSBj
aGlsZHJlbjsKLSAgICBpZiAobV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKSB7Ci0gICAgICAg
IGN1cnJlbnRDaGlsZCA9IGdfbGlzdF9maW5kKGNoaWxkcmVuLCBtX2N1cnJlbnRseVNlbGVjdGVk
TWVudUl0ZW0pOwotICAgICAgICBpZiAoIWN1cnJlbnRDaGlsZCkgewotICAgICAgICAgICAgbV9j
dXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0gMDsKLSAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9
IGNoaWxkcmVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVwZWF0aW5nIGNoYXJhY3RlcnMg
c2hvdWxkIGl0ZXJhdGUuCi0gICAgICAgIGlmIChyZXBlYXRpbmdDaGFyYWN0ZXIpIHsKLSAgICAg
ICAgICAgIGlmIChHTGlzdCogbmV4dENoaWxkID0gZ19saXN0X25leHQoY3VycmVudENoaWxkKSkK
LSAgICAgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBuZXh0Q2hpbGQ7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBHTGlzdCogZmlyc3RDaGlsZCA9IGN1cnJlbnRDaGlsZDsKLSAgICBkbyB7Ci0g
ICAgICAgIGN1cnJlbnRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCk7Ci0gICAgICAg
IGlmICghY3VycmVudENoaWxkKQotICAgICAgICAgICAgY3VycmVudENoaWxkID0gY2hpbGRyZW47
Ci0KLSAgICAgICAgR093blB0cjxnY2hhcj4gaXRlbVRleHQoZ191dGY4X2Nhc2Vmb2xkKGd0a19t
ZW51X2l0ZW1fZ2V0X2xhYmVsKEdUS19NRU5VX0lURU0oY3VycmVudENoaWxkLT5kYXRhKSksIC0x
KSk7Ci0gICAgICAgIGlmICghc3RybmNtcChzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZC5nZXQo
KSwgaXRlbVRleHQuZ2V0KCksIHByZWZpeExlbmd0aCkpIHsKLSAgICAgICAgICAgIGd0a19tZW51
X3NoZWxsX3NlbGVjdF9pdGVtKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBHVEtfV0lE
R0VUKGN1cnJlbnRDaGlsZC0+ZGF0YSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9IHdoaWxlIChjdXJyZW50Q2hpbGQgIT0gZmlyc3RDaGlsZCk7Ci0KLSAgICBnX2xpc3Rf
ZnJlZShjaGlsZHJlbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51
OjpzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qIGl0ZW0sIEd0a1BvcHVwTWVudSogcG9w
dXBNZW51KQotewotICAgIHBvcHVwTWVudS0+bV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0g
R1RLX1dJREdFVChpdGVtKTsKLX0KLQotZ2Jvb2xlYW4gR3RrUG9wdXBNZW51OjprZXlQcmVzc0V2
ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCwgR3RrUG9w
dXBNZW51KiBwb3B1cE1lbnUpCi17Ci0gICAgcmV0dXJuIHBvcHVwTWVudS0+dHlwZUFoZWFkRmlu
ZChldmVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2M2YWQ0NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9w
dXBNZW51LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0a1BvcHVwTWVudV9o
Ci0jZGVmaW5lIEd0a1BvcHVwTWVudV9oCi0KLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5j
bHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL0Zh
c3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBl
ZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR3RrUG9wdXBNZW51IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtQ
b3B1cE1lbnUpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8R3RrUG9wdXBNZW51PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBHdGtQb3B1cE1lbnUoKSk7Ci0gICAgfQotCi0gICAgfkd0a1Bv
cHVwTWVudSgpOwotCi0gICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybU1lbnUoKSBjb25zdCB7IHJldHVy
biBtX3BvcHVwLmdldCgpOyB9Ci0gICAgdm9pZCBjbGVhcigpOwotICAgIHZvaWQgYXBwZW5kU2Vw
YXJhdG9yKCk7Ci0gICAgdm9pZCBhcHBlbmRJdGVtKEd0a0FjdGlvbiopOwotICAgIHZvaWQgcG9w
VXAoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFBvaW50JiwgaW50IGl0ZW1zQ291bnQsIGludCBz
ZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2ZW50Kik7Ci0gICAgdm9pZCBwb3BEb3duKCk7Ci0KLXBy
aXZhdGU6Ci0gICAgR3RrUG9wdXBNZW51KCk7Ci0KLSAgICB2b2lkIHJlc2V0VHlwZUFoZWFkRmlu
ZFN0YXRlKCk7Ci0gICAgYm9vbCB0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5Kik7Ci0KLSAgICBz
dGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlbSosIEd0a1BvcHVwTWVudSop
OwotICAgIHN0YXRpYyB2b2lkIG1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50Kiwg
Z2ludCosIGdib29sZWFuKiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGljIHZvaWQgbWVudVJl
bW92ZUl0ZW0oR3RrV2lkZ2V0KiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGljIHZvaWQgc2Vs
ZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGlj
IGdib29sZWFuIGtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEtleSos
IEd0a1BvcHVwTWVudSopOwotCi0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fcG9wdXA7Ci0gICAg
SW50UG9pbnQgbV9tZW51UG9zaXRpb247Ci0gICAgU3RyaW5nIG1fY3VycmVudFNlYXJjaFN0cmlu
ZzsKLSAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXA7Ci0gICAgdW5zaWdu
ZWQgaW50IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKLSAgICBHdGtXaWRnZXQqIG1fY3Vy
cmVudGx5U2VsZWN0ZWRNZW51SXRlbTsKLSAgICB1bnNpZ25lZCBpbnQgbV9rZXlQcmVzc0hhbmRs
ZXJJRDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEd0a1BvcHVwTWVudV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjOThiNWJhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIK
LQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUludFBvaW50IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBhY3R1YWxseSBhIHZlcnkgdHJpY2t5IG9wZXJhdGlvbiBhbmQgdGhlIHJlc3Vs
dHMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQKLSAgICAvLyBvbmx5IGJlIHRob3VnaHQgb2YgYXMg
YSBndWVzcy4gRm9yIGluc3RhbmNlLCBzb21ldGltZXMgaXQgbWF5IG5vdCBjb3JyZWN0bHkgdGFr
ZSBpbnRvCi0gICAgLy8gYWNjb3VudCB3aW5kb3cgZGVjb3JhdGlvbnMuCi0KLSAgICBHdGtXaWRn
ZXQqIHRvcGxldmVsV2lkZ2V0ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsKLSAg
ICBpZiAoIXRvcGxldmVsV2lkZ2V0IHx8ICFndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRvcGxldmVs
V2lkZ2V0KSB8fCAhR1RLX0lTX1dJTkRPVyh0b3BsZXZlbFdpZGdldCkpCi0gICAgICAgIHJldHVy
biBwb2ludDsKLQotICAgIEdka1dpbmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KHRvcGxldmVsV2lkZ2V0KTsKLSAgICBpZiAoIWdka1dpbmRvdykKLSAgICAgICAgcmV0dXJu
IHBvaW50OwotCi0gICAgaW50IHhJbldpbmRvdywgeUluV2luZG93OwotICAgIGd0a193aWRnZXRf
dHJhbnNsYXRlX2Nvb3JkaW5hdGVzKHdpZGdldCwgdG9wbGV2ZWxXaWRnZXQsIHBvaW50LngoKSwg
cG9pbnQueSgpLCAmeEluV2luZG93LCAmeUluV2luZG93KTsKLQotICAgIGludCB3aW5kb3dPcmln
aW5YLCB3aW5kb3dPcmlnaW5ZOwotICAgIGdka193aW5kb3dfZ2V0X29yaWdpbihnZGtXaW5kb3cs
ICZ3aW5kb3dPcmlnaW5YLCAmd2luZG93T3JpZ2luWSk7Ci0KLSAgICByZXR1cm4gSW50UG9pbnQo
d2luZG93T3JpZ2luWCArIHhJbldpbmRvdywgd2luZG93T3JpZ2luWSArIHlJbldpbmRvdyk7Ci19
Ci0KLWJvb2wgd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KEd0a1dpZGdldCogd2lkZ2V0
KQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHdpZGdldCkgJiYgR1RLX0lT
X1dJTkRPVyh3aWRnZXQpICYmICFHVEtfSVNfT0ZGU0NSRUVOX1dJTkRPVyh3aWRnZXQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
VXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YmRkZTYuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBH
dGtVdGlsaXRpZXNfaCAKLSNkZWZpbmUgR3RrVXRpbGl0aWVzX2ggCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSW50UG9pbnQ7Ci0KLUludFBvaW50IGNvbnZlcnRXaWRnZXRQb2ludFRv
U2NyZWVuUG9pbnQoR3RrV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKTsKLWJvb2wgd2lkZ2V0SXNP
bnNjcmVlblRvcGxldmVsV2luZG93KEd0a1dpZGdldCopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBHdGtVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtWZXJzaW9uaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMmY4
NGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuYworKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlIDxndGsv
Z3RrLmg+Ci0KLSNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQotI2luY2x1ZGUgPFgxMS9YYXRvbS5o
PgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0jZW5kaWYKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNCwgMCkKLXZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1lbnQq
IGFkanVzbWVudCwgZ2RvdWJsZSB2YWx1ZSkKLXsKLSAgICAgICAgbV9hZGp1c3RtZW50LT52YWx1
ZSA9IG1fY3VycmVudFBvczsKLSAgICAgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZCht
X2FkanVzdG1lbnQpOwotfQotCi12b2lkIGd0a19hZGp1c3RtZW50X2NvbmZpZ3VyZShHdGtBZGp1
c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxvd2VyLCBnZG91Ymxl
IHVwcGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwSW5jcmVt
ZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUpCi17Ci0gICAgZ19v
YmplY3RfZnJlZXplX25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7Ci0KLSAgICBnX29iamVj
dF9zZXQoYWRqdXN0bWVudCwKLSAgICAgICAgICAgICAgICAgImxvd2VyIiwgbG93ZXIsCi0gICAg
ICAgICAgICAgICAgICJ1cHBlciIsIHVwcGVyLAotICAgICAgICAgICAgICAgICAic3RlcC1pbmNy
ZW1lbnQiLCBzdGVwSW5jcmVtZW50LAotICAgICAgICAgICAgICAgICAicGFnZS1pbmNyZW1lbnQi
LCBwYWdlSW5jcmVtZW50LAotICAgICAgICAgICAgICAgICAicGFnZS1zaXplIiwgcGFnZVNpemUs
Ci0gICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgZ19vYmplY3RfdGhhd19ub3RpZnkoR19P
QkpFQ1QoYWRqdXN0bWVudCkpOwotCi0gICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGp1c3Rt
ZW50KTsKLSAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKGFkanVzdG1lbnQpOwotfQot
I2VuZGlmCi0KLUdka0RldmljZSAqZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2luZG93
KiB3aW5kb3cpCi17Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrRGV2aWNlTWFu
YWdlciAqbWFuYWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRv
d19nZXRfZGlzcGxheSh3aW5kb3cpKTsKLSAgICByZXR1cm4gZ2RrX2RldmljZV9tYW5hZ2VyX2dl
dF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKTsKLSNlbHNlCi0gICAgcmV0dXJuIGdka19kZXZpY2Vf
Z2V0X2NvcmVfcG9pbnRlcigpOwotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi19Ci0KLSNp
ZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCi12b2lkIGdka193aW5kb3dfZ2V0X3Jvb3Rf
Y29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQgeSwgZ2ludCogcm9vdFgsIGdp
bnQqIHJvb3RZKQotewotICAgIGdka193aW5kb3dfZ2V0X3Jvb3Rfb3JpZ2luKHdpbmRvdywgcm9v
dFgsIHJvb3RZKTsKLSAgICAqcm9vdFggPSAqcm9vdFggKyB4OwotICAgICpyb290WSA9ICpyb290
WSArIHk7Ci19Ci0jZW5kaWYKLQotR2RrQ3Vyc29yICogYmxhbmtDdXJzb3IoKQotewotI2lmIEdU
S19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotICAgIHJldHVybiBnZGtfY3Vyc29yX25ldyhHREtf
QkxBTktfQ1VSU09SKTsKLSNlbHNlCi0gICAgR2RrQ3Vyc29yICogY3Vyc29yOwotICAgIEdka1Bp
eG1hcCAqIHNvdXJjZTsKLSAgICBHZGtQaXhtYXAgKiBtYXNrOwotICAgIEdka0NvbG9yIGZvcmVn
cm91bmQgPSB7IDAsIDY1NTM1LCAwLCAwIH07IC8vIFJlZC4KLSAgICBHZGtDb2xvciBiYWNrZ3Jv
dW5kID0geyAwLCAwLCAwLCA2NTUzNSB9OyAvLyBCbHVlLgotICAgIHN0YXRpYyBnY2hhciBjdXJz
b3JCaXRzW10gPSB7MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDB9OwotCi0g
ICAgc291cmNlID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMsIDgs
IDgpOwotICAgIG1hc2sgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29yQml0
cywgOCwgOCk7Ci0gICAgY3Vyc29yID0gZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhtYXAoc291cmNl
LCBtYXNrLCAmZm9yZWdyb3VuZCwgJmJhY2tncm91bmQsIDgsIDgpOwotICAgIGdka19waXhtYXBf
dW5yZWYoc291cmNlKTsKLSAgICBnZGtfcGl4bWFwX3VucmVmKG1hc2spOwotICAgIHJldHVybiBj
dXJzb3I7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi19Ci0KLSNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi1jb25zdCBnY2hhciogZ3RrX21lbnVfaXRlbV9n
ZXRfbGFiZWwoR3RrTWVudUl0ZW0qIG1lbnVJdGVtKQotewotICAgIEd0a1dpZGdldCAqIGxhYmVs
ID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtZW51SXRlbSkpOwotICAgIGlmIChHVEtfSVNf
TEFCRUwobGFiZWwpKQotICAgICAgICByZXR1cm4gZ3RrX2xhYmVsX2dldF90ZXh0KEdUS19MQUJF
TChsYWJlbCkpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9O
KDIsIDE2LCAwKQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBjYWlyb19mb3Jt
YXRfdAotZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChjYWlyb19jb250ZW50X3QgY29udGVu
dCkKLXsKLSAgICBzd2l0Y2ggKGNvbnRlbnQpIHsKLSAgICBjYXNlIENBSVJPX0NPTlRFTlRfQ09M
T1I6Ci0gICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfUkdCMjQ7Ci0gICAgY2FzZSBDQUlST19D
T05URU5UX0FMUEhBOgotICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0E4OwotICAgIGNhc2Ug
Q0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
Q0FJUk9fRk9STUFUX0FSR0IzMjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjYWlyb19zdXJmYWNlX3Qq
Ci1nZGtfY2Fpcm9fc3VyZmFjZV9jb2VyY2VfdG9faW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2NvbnRlbnRfdCBj
b250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KQotewotICAgIGNhaXJv
X3N1cmZhY2VfdCAqIGNvcHk7Ci0gICAgY2Fpcm9fdCAqIGNyOwotCi0gICAgaWYgKGNhaXJvX3N1
cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAg
ICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gY29udGVudAotICAg
ICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSA+PSB3aWR0aAot
ICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkgPj0gaGVp
Z2h0KQotICAgICAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7Ci0K
LSAgICBjb3B5ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoZ2RrX2NhaXJvX2Zvcm1hdF9m
b3JfY29udGVudChjb250ZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7
Ci0KLSAgICBjciA9IGNhaXJvX2NyZWF0ZShjb3B5KTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3Io
Y3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjcik7Ci0gICAgY2Fpcm9fZGVz
dHJveShjcik7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnZlcnRf
YWxwaGEoZ3VjaGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLAotICAgICAgICAgICAgICBn
dWNoYXIgKiBzcmNEYXRhLCBpbnQgc3JjU3RyaWRlLAotICAgICAgICAgICAgICBpbnQgc3JjWCwg
aW50IHNyY1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAg
IHNyY0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1kgKiA0OwotCi0gICAgZm9yICh5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAq
KSBzcmNEYXRhOwotCi0gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAg
ICAgICAgICBndWludCBhbHBoYSA9IHNyY1t4XSA+PiAyNDsKLQotICAgICAgICAgICAgaWYgKCFh
bHBoYSkgewotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAwOwotICAgICAg
ICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAwOwotICAgICAgICAgICAgICAgIGRlc3RE
YXRhW3ggKiA0ICsgMl0gPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBkZXN0RGF0YVt4ICogNCArIDBdID0gKCgoc3JjW3hdICYgMHhmZjAwMDApID4+IDE2KSAqIDI1
NSArIGFscGhhIC8gMikgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCAr
IDFdID0gKCgoc3JjW3hdICYgMHgwMGZmMDApID4+ICA4KSAqIDI1NSArIGFscGhhIC8gMikgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0gKCgoc3JjW3hdICYg
MHgwMDAwZmYpID4+ICAwKSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOwotICAgICAgICBkZXN0RGF0YSArPSBkZXN0
U3RyaWRlOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvbnZlcnRfbm9fYWxwaGEoZ3VjaGFy
ICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLCBndWNoYXIgKiBzcmNEYXRhLAotICAgICAgICAg
ICAgICAgICBpbnQgc3JjU3RyaWRlLCBpbnQgc3JjWCwgaW50IHNyY1ksCi0gICAgICAgICAgICAg
ICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIHNyY0Rh
dGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1ggKiA0OwotCi0gICAgZm9yICh5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBzcmNE
YXRhOwotCi0gICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgICAg
ICBkZXN0RGF0YVt4ICogMyArIDBdID0gc3JjW3hdID4+IDE2OwotICAgICAgICAgICAgZGVzdERh
dGFbeCAqIDMgKyAxXSA9IHNyY1t4XSA+PiAgODsKLSAgICAgICAgICAgIGRlc3REYXRhW3ggKiAz
ICsgMl0gPSBzcmNbeF07Ci0gICAgICAgIH0KLQotICAgICAgICBzcmNEYXRhICs9IHNyY1N0cmlk
ZTsKLSAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsKLSAgICB9Ci19Ci0KLS8qKgotICog
Z2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlOgotICogQHN1cmZhY2U6IHN1cmZhY2UgdG8gY29w
eSBmcm9tCi0gKiBAc3JjX3g6IFNvdXJjZSBYIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCi0g
KiBAc3JjX3k6IFNvdXJjZSBZIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCi0gKiBAd2lkdGg6
IFdpZHRoIGluIHBpeGVscyBvZiByZWdpb24gdG8gZ2V0Ci0gKiBAaGVpZ2h0OiBIZWlnaHQgaW4g
cGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKLSAqCi0gKiBUcmFuc2ZlcnMgaW1hZ2UgZGF0YSBmcm9t
IGEgI2NhaXJvX3N1cmZhY2VfdCBhbmQgY29udmVydHMgaXQgdG8gYW4gUkdCKEEpCi0gKiByZXBy
ZXNlbnRhdGlvbiBpbnNpZGUgYSAjR2RrUGl4YnVmLiBUaGlzIGFsbG93cyB5b3UgdG8gZWZmaWNp
ZW50bHkgcmVhZAotICogaW5kaXZpZHVhbCBwaXhlbHMgZnJvbSBjYWlybyBzdXJmYWNlcy4gRm9y
ICNHZGtXaW5kb3dzLCB1c2UKLSAqIGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KCkgaW5zdGVh
ZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGFuIFJHQiBwaXhidWYgd2l0aCA4
IGJpdHMgcGVyIGNoYW5uZWwuIFRoZSBwaXhidWYKLSAqIHdpbGwgY29udGFpbiBhbiBhbHBoYSBj
aGFubmVsIGlmIHRoZSBAc3VyZmFjZSBjb250YWlucyBvbmUuCi0gKgotICogUmV0dXJuIHZhbHVl
OiAodHJhbnNmZXIgZnVsbCk6IEEgbmV3bHktY3JlYXRlZCBwaXhidWYgd2l0aCBhIHJlZmVyZW5j
ZSBjb3VudAotICogb2YgMSwgb3IgJU5VTEwgb24gZXJyb3IKLSAqKi8KLUdka1BpeGJ1ZioKLWdk
a19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QgKiBzdXJmYWNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fY29u
dGVudF90IGNvbnRlbnQ7Ci0gICAgR2RrUGl4YnVmICogZGVzdDsKLQotICAgIC8qIEdlbmVyYWwg
c2FuaXR5IGNoZWNrcyAqLwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN1cmZhY2UsIE5VTEwp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNyY1ggPj0gMCAmJiBzcmNZID49IDAsIE5VTEwp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBOVUxM
KTsKLQotICAgIGNvbnRlbnQgPSBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpIHwg
Q0FJUk9fQ09OVEVOVF9DT0xPUjsKLSAgICBkZXN0ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9S
U1BBQ0VfUkdCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAhIShjb250ZW50ICYgQ0FJUk9f
Q09OVEVOVF9BTFBIQSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgc3VyZmFjZSA9IGdka19jYWly
b19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShzdXJmYWNlLCBjb250ZW50LCBzcmNYICsgd2lkdGgs
IHNyY1kgKyBoZWlnaHQpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7Ci0gICAg
aWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpIHx8ICFkZXN0KSB7Ci0gICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
fQotCi0gICAgaWYgKGdka19waXhidWZfZ2V0X2hhc19hbHBoYShkZXN0KSkKLSAgICAgICAgY29u
dmVydF9hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAotICAg
ICAgICAgICAgICAgICAgICAgICBzcmNYLCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCwgaGVpZ2h0KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnZlcnRfbm9fYWxwaGEoZ2RrX3Bp
eGJ1Zl9nZXRfcGl4ZWxzKGRlc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfcGl4
YnVmX2dldF9yb3dzdHJpZGUoZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3JjWCwgc3JjWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGgsIGhlaWdodCk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0gICAg
cmV0dXJuIGRlc3Q7Ci19Ci0KLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKLXZvaWQg
Z2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50
ICpoZWlnaHQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChHREtfSVNfUElYTUFQKGRyYXdhYmxl
KSB8fCBHREtfSVNfV0lORE9XKGRyYXdhYmxlKSk7Ci0KLSAgICBpZiAoR0RLX0lTX1BJWE1BUChk
cmF3YWJsZSkpIHsKLSAgICAgICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShHREtfUElYTUFQKGRyYXdh
YmxlKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHZGtX
aW5kb3cgKndpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgICp3aWR0aCA9IGdka193
aW5kb3dfZ2V0X3dpZHRoKHdpbmRvdyk7Ci0gICAgKmhlaWdodCA9IGdka193aW5kb3dfZ2V0X2hl
aWdodCh3aW5kb3cpOwotfQotI2Vsc2UKLXZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdh
YmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQpCi17Ci0gICAgZ2RrX2RyYXdh
YmxlX2dldF9zaXplKGRyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLSNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKLQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi0K
LSNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQotZ2Jvb2xlYW4gZ19zaWduYWxfYWNj
dW11bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKmludm9jYXRpb25IaW50
LCBHVmFsdWUgKnJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUgKmhhbmRsZXJSZXR1cm4s
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ192YWx1ZV9jb3B5KGhhbmRsZXJSZXR1cm4sIHJldHVy
bkFjY3VtdWxhdG9yKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0jZW5kaWYKLQotI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLWNhaXJvX3N1cmZhY2VfdCAqZ2RrX3dpbmRvd19jcmVh
dGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRvdyAqd2luZG93LCBjYWlyb19jb250ZW50X3QgY29u
dGVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGNhaXJvX3QgKmNhaXJvQ29udGV4
dCA9IGdka19jYWlyb19jcmVhdGUod2luZG93KTsKLSAgICBjYWlyb19zdXJmYWNlX3QgKmNhaXJv
U3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY2Fpcm9Db250ZXh0KTsKLSAgICBjYWlyb19zdXJm
YWNlX3QgKm5ld1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFyKGNhaXJvU3Vy
ZmFjZSwgY29udGVudCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgY2Fpcm9fZGVzdHJveShjYWlyb0Nv
bnRleHQpOwotICAgIHJldHVybiBuZXdTdXJmYWNlOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19W
RVJTSU9OKDIsIDIyLCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCi0jaWZk
ZWYgR0RLX1dJTkRPV0lOR19YMTEKLXN0YXRpYyBpbnQgZ2V0U2NyZWVuQ3VycmVudERlc2t0b3Ao
R2RrU2NyZWVuICpzY3JlZW4pCi17Ci0gICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQTEFZ
X1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7Ci0gICAgV2luZG93IHJv
b3RXaW5kb3cgPSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBHREtfU0NSRUVOX1hOVU1CRVIoc2NyZWVu
KSk7Ci0gICAgQXRvbSBjdXJyZW50RGVza3RvcCA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVU
X0NVUlJFTlRfREVTS1RPUCIsIFRydWUpOwotCi0gICAgQXRvbSB0eXBlOwotICAgIGludCBmb3Jt
YXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOwotICAgIHVuc2ln
bmVkIGNoYXIgKnJldHVybmVkRGF0YSA9IE5VTEw7Ci0gICAgWEdldFdpbmRvd1Byb3BlcnR5KGRp
c3BsYXksIHJvb3RXaW5kb3csIGN1cnJlbnREZXNrdG9wLCAwLCBHX01BWExPTkcsIEZhbHNlLCBY
QV9DQVJESU5BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZpdGVt
c0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7Ci0KLSAgICBpbnQgd29ya3NwYWNl
ID0gMDsKLSAgICBpZiAodHlwZSA9PSBYQV9DQVJESU5BTCAmJiBmb3JtYXQgPT0gMzIgJiYgaXRl
bXNDb3VudCA+IDApCi0gICAgICAgIHdvcmtzcGFjZSA9IChpbnQpcmV0dXJuZWREYXRhWzBdOwot
Ci0gICAgaWYgKHJldHVybmVkRGF0YSkKLSAgICAgICAgWEZyZWUocmV0dXJuZWREYXRhKTsKLQot
ICAgIHJldHVybiB3b3Jrc3BhY2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFNjcmVlbldvcmtBcmVh
KEdka1NjcmVlbiAqc2NyZWVuLCBHZGtSZWN0YW5nbGUgKmFyZWEpCi17Ci0gICAgRGlzcGxheSAq
ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2Ny
ZWVuKSk7Ci0gICAgQXRvbSB3b3JrQXJlYSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX1dP
UktBUkVBIiwgVHJ1ZSk7Ci0KLSAgICAvKiBEZWZhdWx0cyBpbiBjYXNlIG9mIGVycm9yLiAqLwot
ICAgIGFyZWEtPnggPSAwOwotICAgIGFyZWEtPnkgPSAwOwotICAgIGFyZWEtPndpZHRoID0gZ2Rr
X3NjcmVlbl9nZXRfd2lkdGgoc2NyZWVuKTsKLSAgICBhcmVhLT5oZWlnaHQgPSBnZGtfc2NyZWVu
X2dldF9oZWlnaHQoc2NyZWVuKTsKLQotICAgIGlmICh3b3JrQXJlYSA9PSBOb25lKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3BsYXks
IEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKLSAgICBBdG9tIHR5cGU7Ci0gICAgaW50IGZv
cm1hdDsKLSAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7Ci0gICAgdW5z
aWduZWQgY2hhciAqcmV0dXJuZWREYXRhID0gMDsKLSAgICBpbnQgcmVzdWx0ID0gWEdldFdpbmRv
d1Byb3BlcnR5KGRpc3BsYXksIHJvb3RXaW5kb3csIHdvcmtBcmVhLCAwLCA0ICogMzIgLyogTWF4
IGxlbmd0aCAqLywgRmFsc2UsIEFueVByb3BlcnR5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRlbXNDb3VudCwgJmJ5dGVzQWZ0ZXIs
ICZyZXR1cm5lZERhdGEpOwotICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcyB8fCB0eXBlID09IE5v
bmUgfHwgIWZvcm1hdCB8fCBieXRlc0FmdGVyIHx8IGl0ZW1zQ291bnQgJSA0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnQgZGVza3RvcCA9IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKHNjcmVl
bik7Ci0gICAgbG9uZyAqd29ya0FyZWFzID0gKGxvbmcgKilyZXR1cm5lZERhdGE7Ci0gICAgYXJl
YS0+eCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNF07Ci0gICAgYXJlYS0+eSA9IHdvcmtBcmVhc1tk
ZXNrdG9wICogNCArIDFdOwotICAgIGFyZWEtPndpZHRoID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0
ICsgMl07Ci0gICAgYXJlYS0+aGVpZ2h0ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgM107Ci0K
LSAgICBYRnJlZShyZXR1cm5lZERhdGEpOwotfQotI2VuZGlmIC8vIEdES19XSU5ET1dJTkdfWDEx
Ci0KLXZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKnNjcmVl
biwgaW50IG1vbml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAgICBnZGtfc2NyZWVuX2dl
dF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgYXJlYSk7Ci0KLSNpZmRlZiBHREtf
V0lORE9XSU5HX1gxMQotICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKLSAgICBnZXRTY3JlZW5X
b3JrQXJlYShzY3JlZW4sICZ3b3JrQXJlYSk7Ci0gICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3Qo
JndvcmtBcmVhLCBhcmVhLCBhcmVhKTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIEdUS19DSEVDS19W
RVJTSU9OKDMsIDMsIDYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrVmVyc2lvbmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzOWVlMi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3Jh
IEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBHdGtWZXJzaW9uaW5nX2gKLSNkZWZpbmUgR3RrVmVyc2lvbmluZ19oCi0KLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSNpbmNsdWRlIDxnZGsv
Z2Rra2V5c3ltcy1jb21wYXQuaD4KLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8vIE1hY3Jv
cyB0byBhdm9pZCBkZXByZWNhdGlvbiBjaGVja2luZyBjaHVybgotI2lmbmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgotI2RlZmluZSBHREtfV0lORE9XX1hXSU5ET1cod2luZG93KSAoZ2RrX3gxMV93aW5k
b3dfZ2V0X3hpZCh3aW5kb3cpKQotI2Vsc2UKLUdka1BpeGJ1ZiogZ2RrX3BpeGJ1Zl9nZXRfZnJv
bV9zdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgaW50IHNyY1gsIGludCBzcmNZLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKLXZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgaW50
KiB3aWR0aCwgaW50KiBoZWlnaHQpOwotI2VuZGlmCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMjMsIDQpCi0jZGVmaW5lIGdka19waXhtYXBfZ2V0X3NpemUgZ2RrX2RyYXdhYmxlX2dldF9z
aXplCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQpCi0KLSNpZiAhR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMjMsIDApCi0jZGVmaW5lIGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2lu
ZG93KSBnZGtfZHJhd2FibGVfZ2V0X2Rpc3BsYXkod2luZG93KQotI2RlZmluZSBnZGtfd2luZG93
X2dldF92aXN1YWwgZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tf
VkVSU0lPTigyLCAyMywgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLWNh
aXJvX3N1cmZhY2VfdCogZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRv
dyogd2luZG93LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLQotI2lmICFHVEtfQ0hF
Q0tfVkVSU0lPTigyLCAyMSwgMikKLSNkZWZpbmUgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFs
KSAodmlzdWFsKS0+ZGVwdGgKLSNkZWZpbmUgZ2RrX3Zpc3VhbF9nZXRfYml0c19wZXJfcmdiKHZp
c3VhbCkgKHZpc3VhbCktPmJpdHNfcGVyX3JnYgotI2RlZmluZSBnZGtfZHJhZ19jb250ZXh0X2dl
dF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkgKGNvbnRleHQpLT5hY3Rpb24KLSNkZWZpbmUgZ2Rr
X2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSAoY29udGV4dCktPmFjdGlvbnMKLSNl
bmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKLQotI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBH
VEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfcmVhbGl6
ZWQod2lkZ2V0LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9GTEFHUygod2lkZ2V0KSwgR1RLX1JFQUxJ
WkVEKQotI2RlZmluZSBndGtfcmFuZ2VfZ2V0X21pbl9zbGlkZXJfc2l6ZShyYW5nZSkgKHJhbmdl
KS0+bWluX3NsaWRlcl9zaXplCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAsIDAp
Ci0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCi0jZGVmaW5lIGd0a193aWRnZXRf
aXNfdG9wbGV2ZWwod2lkZ2V0KSBHVEtfV0lER0VUX1RPUExFVkVMKHdpZGdldCkKLSNkZWZpbmUg
Z3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdl
dCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfaGFzX3dpbmRvdyh3aWRnZXQpICFHVEtfV0lER0VU
X05PX1dJTkRPVyh3aWRnZXQpCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X2Nhbl9mb2N1cyh3aWRn
ZXQpIEdUS19XSURHRVRfQ0FOX0ZPQ1VTKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9pc19z
ZW5zaXRpdmUod2lkZ2V0KSBHVEtfV0lER0VUX0lTX1NFTlNJVElWRSh3aWRnZXQpCi0jZW5kaWYg
Ly8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMTgsIDApCi0jZGVmaW5lIGd0a193aWRnZXRfc2V0X3Zpc2libGUod2lkZ2V0LCBGQUxTRSkg
R1RLX1dJREdFVF9VTlNFVF9GTEFHUygod2lkZ2V0KSwgR1RLX1ZJU0lCTEUpCi0jZGVmaW5lIGd0
a193aWRnZXRfZ2V0X3Zpc2libGUod2lkZ2V0KSAoR1RLX1dJREdFVF9GTEFHUyh3aWRnZXQpICYg
R1RLX1ZJU0lCTEUpCi0KLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgbmV3
X3dpbmRvdykgKHdpZGdldCktPndpbmRvdyA9IChuZXdfd2luZG93KQotI2RlZmluZSBndGtfd2lk
Z2V0X3NldF9jYW5fZm9jdXMod2lkZ2V0LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9GTEFHUygod2lk
Z2V0KSwgR1RLX0NBTl9GT0NVUykKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3
aWRnZXQsIGFsbG9jKSAoKihhbGxvYykgPSAod2lkZ2V0KS0+YWxsb2NhdGlvbikKLSNkZWZpbmUg
Z3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9jKSAoKHdpZGdldCktPmFsbG9j
YXRpb24gPSAqKGFsbG9jKSkKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkK
LQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKLXZvaWQgZ2RrX3dpbmRvd19nZXRf
cm9vdF9jb29yZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwgZ2ludCB5LCBnaW50KiByb290
WCwgZ2ludCogcm9vdFkpOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQot
Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotY29uc3QgZ2NoYXIqIGd0a19tZW51
X2l0ZW1fZ2V0X2xhYmVsKEd0a01lbnVJdGVtKik7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMTYsIDApCi0KLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKLSNkZWZp
bmUgZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCkgKHdpZGdldCktPndpbmRvdwotI2RlZmlu
ZSBndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqKSAoYWRqKS0+dmFsdWUKLSNkZWZpbmUgZ3Rr
X2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxvZykgKGRpYWxvZyktPnZib3gKLSNkZWZpbmUg
Z3RrX2RpYWxvZ19nZXRfYWN0aW9uX2FyZWEoZGlhbG9nKSAoZGlhbG9nKS0+YWN0aW9uX2FyZWEK
LSNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoZGF0YSkgKGRhdGEpLT5sZW5n
dGgKLSNkZWZpbmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEpIChkYXRhKS0+ZGF0
YQotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3RhcmdldChkYXRhKSAoZGF0YSktPnRh
cmdldAotI2RlZmluZSBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXplKGFkaiwgbmV3VmFsdWUp
ICgoYWRqKS0+cGFnZV9zaXplID0gbmV3VmFsdWUpCi0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3Nl
dF92YWx1ZShhZGosIG5ld1ZhbHVlKSAoKGFkaiktPnZhbHVlID0gbmV3VmFsdWUpCi0jZGVmaW5l
IGd0a19hZGp1c3RtZW50X3NldF9sb3dlcihhZGosIG5ld1ZhbHVlKSAoKGFkaiktPmxvd2VyID0g
bmV3VmFsdWUpCi0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF91cHBlcihhZGosIG5ld1ZhbHVl
KSAoKGFkaiktPnVwcGVyID0gbmV3VmFsdWUpCi0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfY29uZmln
dXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdkb3VibGUgdmFsdWUsIGdkb3VibGUgbG93
ZXIsIGdkb3VibGUgdXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91Ymxl
IHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFnZUluY3JlbWVudCwgZ2RvdWJsZSBwYWdlU2l6ZSk7
Ci0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1lbnQqIGFkanVzbWVu
dCwgZ2RvdWJsZSB2YWx1ZSk7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTQsIDAp
Ci0KLUdka0RldmljZSogZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2luZG93KiB3aW5k
b3cpOwotR2RrQ3Vyc29yKiBibGFua0N1cnNvcigpOwotCi0jaWYgIUdMSUJfQ0hFQ0tfVkVSU0lP
TigyLCAyNywgMSkKLWdib29sZWFuIGdfc2lnbmFsX2FjY3VtdWxhdG9yX2ZpcnN0X3dpbnMoR1Np
Z25hbEludm9jYXRpb25IaW50KiBpbnZvY2F0aW9uSGludCwgR1ZhbHVlKiByZXR1cm5BY2N1bXVs
YXRvciwgY29uc3QgR1ZhbHVlKiBoYW5kbGVyUmV0dXJuLCBncG9pbnRlciBkYXRhKTsKLSNlbmRp
ZgotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCi12b2lkIGdka19zY3JlZW5fZ2V0
X21vbml0b3Jfd29ya2FyZWEoR2RrU2NyZWVuICosIGludCBtb25pdG9yLCBHZGtSZWN0YW5nbGUg
KmFyZWEpOwotI2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvLyBHdGtWZXJzaW9uaW5n
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNr
aW5nU3RvcmVYMTEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJh
Y2tpbmdTdG9yZVgxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMzc2YmMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tp
bmdTdG9yZVgxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXaWRnZXRCYWNraW5nU3RvcmUu
aCIKLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgotI2luY2x1
ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka3guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLQotcHVibGljOgotICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLSAgICBQaXhtYXAg
bV9waXhtYXA7Ci0gICAgR0MgbV9nYzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1
cmZhY2U7Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRl
PiBjcmVhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUod2lk
Z2V0LCBzaXplKSk7Ci0gICAgfQotCi0gICAgfldpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUoKQot
ICAgIHsKLSAgICAgICAgWEZyZWVQaXhtYXAobV9kaXNwbGF5LCBtX3BpeG1hcCk7Ci0gICAgICAg
IFhGcmVlR0MobV9kaXNwbGF5LCBtX2djKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2Ug
a2VlcCB0d28gY29waWVzIG9mIHRoZSBzdXJmYWNlIGhlcmUsIHdoaWNoIHdpbGwgZG91YmxlIHRo
ZSBtZW1vcnkgdXNhZ2UsIGJ1dCBpbmNyZWFzZQotICAgIC8vIHNjcm9sbGluZyBwZXJmb3JtYW5j
ZSBzaW5jZSB3ZSBkbyBub3QgaGF2ZSB0byBrZWVwIHJlYWxsb2NhdGluZyBhIG1lbW9yeSByZWdp
b24gZHVyaW5nCi0gICAgLy8gcXVpY2sgc2Nyb2xsaW5nIHJlcXVlc3RzLgotICAgIFdpZGdldEJh
Y2tpbmdTdG9yZVByaXZhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUp
Ci0gICAgewotICAgICAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3Vh
bCh3aWRnZXQpOwotICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka192aXN1YWxfZ2V0X3Nj
cmVlbih2aXN1YWwpOwotICAgICAgICBtX2Rpc3BsYXkgPSBHREtfU0NSRUVOX1hESVNQTEFZKHNj
cmVlbik7Ci0gICAgICAgIG1fcGl4bWFwID0gWENyZWF0ZVBpeG1hcChtX2Rpc3BsYXksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfV0lORE9XX1hJRChnZGtfc2NyZWVuX2dl
dF9yb290X3dpbmRvdyhzY3JlZW4pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka192aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCkpOwotICAgICAgICBtX2djID0gWENy
ZWF0ZUdDKG1fZGlzcGxheSwgbV9waXhtYXAsIDAsIDApOwotCi0gICAgICAgIG1fc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobV9kaXNwbGF5LCBtX3BpeG1hcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
REtfVklTVUFMX1hWSVNVQUwodmlzdWFsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsK
LSAgICB9Ci19OwotCi1QYXNzT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZT4gV2lkZ2V0QmFja2lu
Z1N0b3JlOjpjcmVhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmUod2lkZ2V0LCBzaXpl
KSk7Ci19Ci0KLVdpZGdldEJhY2tpbmdTdG9yZTo6V2lkZ2V0QmFja2luZ1N0b3JlKEd0a1dpZGdl
dCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9wcml2YXRlKFdpZGdldEJh
Y2tpbmdTdG9yZVByaXZhdGU6OmNyZWF0ZSh3aWRnZXQsIHNpemUpKQotICAgICwgbV9zaXplKHNp
emUpCi17Ci19Ci0KLVdpZGdldEJhY2tpbmdTdG9yZTo6fldpZGdldEJhY2tpbmdTdG9yZSgpCi17
Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogV2lkZ2V0QmFja2luZ1N0b3JlOjpjYWlyb1N1cmZhY2Uo
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotdm9pZCBX
aWRnZXRCYWNraW5nU3RvcmU6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25z
dCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgSW50UmVjdCB0YXJnZXRSZWN0KHNjcm9s
bFJlY3QpOwotICAgIHRhcmdldFJlY3QubW92ZShzY3JvbGxPZmZzZXQpOwotICAgIHRhcmdldFJl
Y3QuaW50ZXJzZWN0KHNjcm9sbFJlY3QpOwotICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3ByaXZhdGUtPm1f
c3VyZmFjZS5nZXQoKSk7Ci0gICAgWENvcHlBcmVhKG1fcHJpdmF0ZS0+bV9kaXNwbGF5LCBtX3By
aXZhdGUtPm1fcGl4bWFwLCBtX3ByaXZhdGUtPm1fcGl4bWFwLCBtX3ByaXZhdGUtPm1fZ2MsIAot
ICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSAtIHNjcm9sbE9mZnNldC53aWR0aCgpLCB0YXJn
ZXRSZWN0LnkoKSAtIHNjcm9sbE9mZnNldC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICB0YXJnZXRS
ZWN0LngoKSwgdGFyZ2V0UmVjdC55KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9y
ZWN0YW5nbGUobV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhkMWZlYWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tV
UkxHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIktVUkwuaCIKLQotI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKLXsKLSAgICBpZiAo
IWlzVmFsaWQoKSB8fCAhaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRo
KHBhdGgoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR093blB0cjxjaGFyPiBmaWxlbmFtZShnX2Zp
bGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOwotICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGZp
bGVuYW1lLmdldCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZDBmYjguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxp
YSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiS2V5QmluZGluZ1RyYW5zbGF0b3IuaCIKLQotI2luY2x1ZGUgIkd0a1Zl
cnNpb25pbmcuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPGludCwg
Y29uc3QgY2hhcio+IEludENvbnN0Q2hhckhhc2hNYXA7Ci0KLXN0YXRpYyB2b2lkIGJhY2tzcGFj
ZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNs
YXRvcikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiYmFj
a3NwYWNlIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkRlbGV0
ZUJhY2t3YXJkIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbGVjdEFsbENhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBnYm9vbGVhbiBzZWxlY3QsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xh
dG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJzZWxl
Y3QtYWxsIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoc2VsZWN0
ID8gIlNlbGVjdEFsbCIgOiAiVW5zZWxlY3QiKTsKLX0KLQotc3RhdGljIHZvaWQgY3V0Q2xpcGJv
YXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFu
c2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJj
dXQtY2xpcGJvYXJkIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQo
IkN1dCIpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5Q2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0
KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2ln
bmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJjb3B5LWNsaXBib2FyZCIpOwotICAg
IHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJDb3B5Iik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRp
bmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25f
YnlfbmFtZSh3aWRnZXQsICJwYXN0ZS1jbGlwYm9hcmQiKTsKLSAgICB0cmFuc2xhdG9yLT5hZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCgiUGFzdGUiKTsKLX0KLQotc3RhdGljIHZvaWQgdG9nZ2xlT3Zl
cndyaXRlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKikK
LXsKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRvZ2dsaW5nIHRoZSBvdmVyd3JpdGUgbW9kZSwg
YnV0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVjdHMKLSAgICAvLyB0aGUgR3RrVGV4dFZpZXcg
dG8gaGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxlIHRoaXMgc2lnbmFsIGp1c3QgdG8gc3RvcCBp
dC4KLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAidG9nZ2xlLW92
ZXJ3cml0ZSIpOwotfQotCi0vLyBHVEsrIHdpbGwgc3RpbGwgc2VuZCB0aGVzZSBzaWduYWxzIHRv
IHRoZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVseSBzdG9wIHNpZ25hbAotLy8gZW1pc3Npb24g
d2l0aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5Lgotc3RhdGljIHZvaWQgcG9wdXBNZW51Q2Fs
bGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKikKLXsKLSAgICBn
X3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAicG9wdXAtbWVudSIpOwotfQot
Ci1zdGF0aWMgdm9pZCBzaG93SGVscENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5k
aW5nVHJhbnNsYXRvciopCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdp
ZGdldCwgInNob3ctaGVscCIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZ3RrRGVs
ZXRlQ29tbWFuZHNbXVsyXSA9IHsKLSAgICB7ICJEZWxldGVCYWNrd2FyZCIsICAgICAgICAgICAg
ICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgfSwgLy8gQ2hhcmFjdGVy
cwotICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndh
cmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkIGVuZHMKLSAgICB7ICJEZWxldGVXb3Jk
QmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAg
ICAgfSwgLy8gV29yZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgIkRl
bGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gTGluZXMKLSAgICB7ICJE
ZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgIkRlbGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAg
ICAgICAgICAgICAgfSwgLy8gTGluZSBlbmRzCi0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZlBh
cmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAgIH0sIC8vIFBh
cmFncmFwaCBlbmRzCi0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICJEZWxl
dGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAgIH0sIC8vIFBhcmFncmFwaHMKLSAgICB7
IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSAvLyBXaGl0ZXNwYWNlIChNLVwgaW4gRW1hY3MpCi19OwotCi1zdGF0
aWMgdm9pZCBkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0Rl
bGV0ZVR5cGUgZGVsZXRlVHlwZSwgZ2ludCBjb3VudCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRy
YW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwg
ImRlbGV0ZS1mcm9tLWN1cnNvciIpOwotICAgIGludCBkaXJlY3Rpb24gPSBjb3VudCA+IDAgPyAx
IDogMDsKLQotICAgIC8vIEVuc3VyaW5nIHRoYXQgZGVsZXRlVHlwZSA8PSBHX05fRUxFTUVOVFMg
aGVyZSByZXN1bHRzIGluIGEgY29tcGlsZXIgd2FybmluZwotICAgIC8vIHRoYXQgdGhlIGNvbmRp
dGlvbiBpcyBhbHdheXMgdHJ1ZS4KLQotICAgIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVf
V09SRFMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIHRyYW5zbGF0
b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEZvcndhcmQiKTsKLSAgICAgICAg
ICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEJhY2t3YXJk
Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5n
RWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIpOwotICAgICAgICAgICAgdHJhbnNsYXRv
ci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfRElTUExBWV9MSU5FUykg
ewotICAgICAgICBpZiAoIWRpcmVjdGlvbikKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBl
bmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVU
b0VuZE9mTGluZSIpOwotICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlwZSA9PSBHVEtfREVMRVRFX1BB
UkFHUkFQSFMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pCi0gICAgICAgICAgICB0cmFuc2xh
dG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgi
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRv
ckNvbW1hbmQoIk1vdmVUb0VuZE9mUGFyYWdyYXBoIik7Ci0gICAgfQotCi0gICAgY29uc3QgY2hh
ciogcmF3Q29tbWFuZCA9IGd0a0RlbGV0ZUNvbW1hbmRzW2RlbGV0ZVR5cGVdW2RpcmVjdGlvbl07
Ci0gICAgaWYgKCFyYXdDb21tYW5kKQotICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCi0gICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdF
ZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
Z3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7Ci0gICAgeyAiTW92ZUJhY2t3YXJkIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZCIsCi0gICAgICAiTW92ZUJhY2t3
YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZEFuZE1v
ZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2FyZCBncmFwaGVt
ZQotICAgIHsgIk1vdmVMZWZ0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTW92ZVJpZ2h0IiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAg
ICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAg
ICB9LCAvLyBMZWZ0L3JpZ2h0IGdyYXBoZW1lCi0gICAgeyAiTW92ZVdvcmRCYWNrd2FyZCIsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmQiLAotICAgICAgIk1v
dmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAiTW92ZVdvcmRG
b3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIEZvcndhcmQvYmFja3dhcmQg
d29yZAotICAgIHsgIk1vdmVVcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiTW92ZURvd24iLAotICAgICAgIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICAgIH0sIC8vIFVwL2Rvd24gbGluZQotICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIsICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiwKLSAgICAgICJNb3ZlVG9C
ZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgIk1vdmVUb0VuZE9mTGlu
ZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBVcC9kb3duIGxpbmUgZW5kcwotICAg
IHsgIk1vdmVQYXJhZ3JhcGhGb3J3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92
ZVBhcmFncmFwaEJhY2t3YXJkIiwKLSAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlm
eVNlbGVjdGlvbiIsICAgICAgICAgIk1vdmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVj
dGlvbiIgICB9LCAvLyBVcC9kb3duIHBhcmFncmFwaHMKLSAgICB7ICJNb3ZlVG9CZWdpbm5pbmdP
ZlBhcmFncmFwaCIsICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mUGFyYWdyYXBoIiwK
LSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIsICAg
Ik1vdmVUb0VuZE9mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICB9LCAvLyBVcC9kb3du
IHBhcmFncmFwaCBlbmRzLgotICAgIHsgIk1vdmVQYWdlVXAiLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiwKLSAgICAgICJNb3ZlUGFnZVVwQW5kTW9k
aWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbiIgICAgICAgICAgICB9LCAvLyBVcC9kb3duIHBhZ2UKLSAgICB7ICJNb3ZlVG9CZWdp
bm5pbmdPZkRvY3VtZW50IiwgICAgICAgICAgICAgICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1l
bnQiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24i
LCAgICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgIH0sIC8vIEJl
Z2luL2VuZCBvZiBidWZmZXIKLSAgICB7IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKLSAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IC8vIEhvcml6b250YWwgcGFnZSBtb3ZlbWVudAotfTsKLQotc3RhdGljIHZvaWQg
bW92ZUN1cnNvckNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtNb3ZlbWVudFN0ZXAgc3Rl
cCwgZ2ludCBjb3VudCwgZ2Jvb2xlYW4gZXh0ZW5kU2VsZWN0aW9uLCBLZXlCaW5kaW5nVHJhbnNs
YXRvciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUo
d2lkZ2V0LCAibW92ZS1jdXJzb3IiKTsKLSAgICBpbnQgZGlyZWN0aW9uID0gY291bnQgPiAwID8g
MSA6IDA7Ci0gICAgaWYgKGV4dGVuZFNlbGVjdGlvbikKLSAgICAgICAgZGlyZWN0aW9uICs9IDI7
Ci0KLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZXApID49IEdfTl9FTEVNRU5UUyhn
dGtNb3ZlQ29tbWFuZHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiByYXdD
b21tYW5kID0gZ3RrTW92ZUNvbW1hbmRzW3N0ZXBdW2RpcmVjdGlvbl07Ci0gICAgaWYgKCFyYXdD
b21tYW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhj
b3VudCk7IGkrKykKLSAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQo
cmF3Q29tbWFuZCk7Ci19Ci0KLUtleUJpbmRpbmdUcmFuc2xhdG9yOjpLZXlCaW5kaW5nVHJhbnNs
YXRvcigpCi0gICAgOiBtX25hdGl2ZVdpZGdldChndGtfdGV4dF92aWV3X25ldygpKQotewotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJiYWNrc3BhY2UiLCBHX0NB
TExCQUNLKGJhY2tzcGFjZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCht
X25hdGl2ZVdpZGdldC5nZXQoKSwgImN1dC1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKGN1dENsaXBi
b2FyZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdl
dC5nZXQoKSwgImNvcHktY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhjb3B5Q2xpcGJvYXJkQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAi
cGFzdGUtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhwYXN0ZUNsaXBib2FyZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInNlbGVjdC1h
bGwiLCBHX0NBTExCQUNLKHNlbGVjdEFsbENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgIm1vdmUtY3Vyc29yIiwgR19DQUxMQkFDSyht
b3ZlQ3Vyc29yQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZl
V2lkZ2V0LmdldCgpLCAiZGVsZXRlLWZyb20tY3Vyc29yIiwgR19DQUxMQkFDSyhkZWxldGVGcm9t
Q3Vyc29yQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lk
Z2V0LmdldCgpLCAidG9nZ2xlLW92ZXJ3cml0ZSIsIEdfQ0FMTEJBQ0sodG9nZ2xlT3ZlcndyaXRl
Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0Lmdl
dCgpLCAicG9wdXAtbWVudSIsIEdfQ0FMTEJBQ0socG9wdXBNZW51Q2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAic2hvdy1oZWxwIiwg
R19DQUxMQkFDSyhzaG93SGVscENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLXN0cnVjdCBLZXlDb21i
aW5hdGlvbkVudHJ5IHsKLSAgICB1bnNpZ25lZCBnZGtLZXlDb2RlOwotICAgIHVuc2lnbmVkIHN0
YXRlOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19OwotCi1zdGF0aWMgY29uc3QgS2V5Q29tYmlu
YXRpb25FbnRyeSBrZXlEb3duRW50cmllc1tdID0gewotICAgIHsgR0RLX2IsICAgICAgICAgR0RL
X0NPTlRST0xfTUFTSywgICAgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgfSwKLSAgICB7IEdE
S19pLCAgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIlRvZ2dsZUl0YWxp
YyIgIH0sCi0gICAgeyBHREtfRXNjYXBlLCAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJDYW5jZWwiICAgICAgICB9LAotICAgIHsgR0RLX2dyZWF0ZXIsICAgR0RLX0NPTlRST0xf
TUFTSywgICAgICAgICAgICAgICAiQ2FuY2VsIiAgICAgICAgfSwKLX07Ci0KLS8vIFRoZXNlIGNv
bW1hbmRzIGFyZSB0ZXh0IGluc2VydGlvbiBjb21tYW5kcywgc28gc2hvdWxkIHRha2UgcGxhY2UK
LS8vIHdoaWxlIGhhbmRsaW5nIHRoZSBLZXlQcmVzcyBldmVudC4KLXN0YXRpYyBjb25zdCBLZXlD
b21iaW5hdGlvbkVudHJ5IGtleVByZXNzRW50cmllc1tdID0gewotICAgIHsgR0RLX1RhYiwgICAg
ICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgfSwKLSAg
ICB7IEdES19UYWIsICAgICAgIEdES19TSElGVF9NQVNLLCAgICAgICAgICAgICAgICAgIkluc2Vy
dEJhY2t0YWIiIH0sCi19OwotCi12b2lkIEtleUJpbmRpbmdUcmFuc2xhdG9yOjpnZXRFZGl0b3JD
b21tYW5kc0ZvcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgRXZlbnRUeXBlIHR5cGUsIFZl
Y3RvcjxXVEY6OlN0cmluZz4mIGNvbW1hbmRMaXN0KQotewotICAgIG1fcGVuZGluZ0VkaXRvckNv
bW1hbmRzLmNsZWFyKCk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a19iaW5k
aW5nc19hY3RpdmF0ZV9ldmVudChHVEtfT0JKRUNUKG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgZXZl
bnQpOwotI2Vsc2UKLSAgICBndGtfYmluZGluZ3NfYWN0aXZhdGVfZXZlbnQoR19PQkpFQ1QobV9u
YXRpdmVXaWRnZXQuZ2V0KCkpLCBldmVudCk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9wZW5kaW5n
RWRpdG9yQ29tbWFuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZCht
X3BlbmRpbmdFZGl0b3JDb21tYW5kcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtleURvd25Db21tYW5kc01h
cCwgKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwga2V5
UHJlc3NDb21tYW5kc01hcCwgKCkpOwotCi0gICAgaWYgKGtleURvd25Db21tYW5kc01hcC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhr
ZXlEb3duRW50cmllcyk7IGkrKykKLSAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC5zZXQo
a2V5RG93bkVudHJpZXNbaV0uc3RhdGUgPDwgMTYgfCBrZXlEb3duRW50cmllc1tpXS5nZGtLZXlD
b2RlLCBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR19OX0VMRU1FTlRTKGtleVByZXNzRW50cmllcyk7IGkrKykKLSAgICAgICAgICAg
IGtleVByZXNzQ29tbWFuZHNNYXAuc2V0KGtleVByZXNzRW50cmllc1tpXS5zdGF0ZSA8PCAxNiB8
IGtleVByZXNzRW50cmllc1tpXS5nZGtLZXlDb2RlLCBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7
Ci0gICAgfQotCi0gICAgLy8gU3BlY2lhbC1jYXNlIGVudGVyIGtleXMgZm9yIHdlIHdhbnQgdGhl
bSB0byB3b3JrIHJlZ2FyZGxlc3Mgb2YgbW9kaWZpZXIuCi0gICAgaWYgKChldmVudC0+a2V5dmFs
ID09IEdES19SZXR1cm4gfHwgZXZlbnQtPmtleXZhbCA9PSBHREtfS1BfRW50ZXIgfHwgZXZlbnQt
PmtleXZhbCA9PSBHREtfSVNPX0VudGVyKSAmJiB0eXBlID09IEtleVByZXNzKSB7Ci0gICAgICAg
IGNvbW1hbmRMaXN0LmFwcGVuZCgiSW5zZXJ0TmV3TGluZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRm9yIGtleXByZXNzIGV2ZW50cywgd2Ugd2FudCBjaGFyQ29kZSgpLCBi
dXQga2V5Q29kZSgpIGRvZXMgdGhhdC4KLSAgICBpbnQgbWFwS2V5ID0gZXZlbnQtPnN0YXRlIDw8
IDE2IHwgZXZlbnQtPmtleXZhbDsKLSAgICBpZiAobWFwS2V5KSB7Ci0gICAgICAgIEhhc2hNYXA8
aW50LCBjb25zdCBjaGFyKj4qIGNvbW1hbmRNYXAgPSB0eXBlID09IEtleURvd24gPyAgJmtleURv
d25Db21tYW5kc01hcCA6ICZrZXlQcmVzc0NvbW1hbmRzTWFwOwotICAgICAgICBpZiAoY29uc3Qg
Y2hhciogY29tbWFuZFN0cmluZyA9IGNvbW1hbmRNYXAtPmdldChtYXBLZXkpKSB7Ci0gICAgICAg
ICAgICBjb21tYW5kTGlzdC5hcHBlbmQoY29tbWFuZFN0cmluZyk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NDM2ZGUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxp
YSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEtleUJpbmRp
bmdUcmFuc2xhdG9yX2gKLSNkZWZpbmUgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAotCi0jaW5jbHVk
ZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50
S2V5OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEtleUJpbmRpbmdUcmFuc2xhdG9y
IHsKLXB1YmxpYzoKLSAgICBLZXlCaW5kaW5nVHJhbnNsYXRvcigpOwotCi0gICAgZW51bSBFdmVu
dFR5cGUgeyBLZXlEb3duLCBLZXlQcmVzcyB9OwotICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNG
b3JLZXlFdmVudChHZGtFdmVudEtleSosIEV2ZW50VHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYp
OwotICAgIHZvaWQgYWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkg
eyBtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7IH0KLQotcHJpdmF0ZToK
LSAgICBHUmVmUHRyPEd0a1dpZGdldD4gbV9uYXRpdmVXaWRnZXQ7Ci0gICAgVmVjdG9yPFdURjo6
U3RyaW5nPiBtX3BlbmRpbmdFZGl0b3JDb21tYW5kczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0xhbmd1YWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFn
ZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YTcxZTUuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxhbmd1
YWdlLmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxsb2NhbGUu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBVc2luZyBwYW5nb19sYW5ndWFnZV9nZXRf
ZGVmYXVsdCgpIGhlcmUgaXMgbm90IGFuIG9wdGlvbiwgYmVjYXVzZQotLy8gaXQgZG9lc24ndCBz
dXBwb3J0IGNoYW5naW5nIHRoZSBsb2NhbGUgaW4gcnVudGltZSwgc28gaXQgcmV0dXJucwotLy8g
YWx3YXlzIHRoZSBzYW1lIHZhbHVlLgotc3RhdGljIFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkK
LXsKLSAgICBjaGFyKiBsb2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsK
LQotICAgIGlmICghbG9jYWxlRGVmYXVsdCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygiYyIpOwot
Ci0gICAgR093blB0cjxnY2hhcj4gbm9ybWFsaXplZERlZmF1bHQoZ19hc2NpaV9zdHJkb3duKGxv
Y2FsZURlZmF1bHQsIC0xKSk7Ci0gICAgY2hhciogcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZh
dWx0LmdldCgpLCAnXycpOwotCi0gICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9ICctJzsKLQot
ICAgIHB0ciA9IHN0cmNocihub3JtYWxpemVkRGVmYXVsdC5nZXQoKSwgJy4nKTsKLQotICAgIGlm
IChwdHIpCi0gICAgICAgICpwdHIgPSAnXDAnOwotCi0gICAgcmV0dXJuIFN0cmluZyhub3JtYWxp
emVkRGVmYXVsdC5nZXQoKSk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZl
cnJlZExhbmd1YWdlcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1
YWdlczsKLSAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChwbGF0Zm9ybUxhbmd1YWdl
KCkpOwotICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotfQotICAgIAotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDJjYWEyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDc4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0
aWFuIER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
TnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBndGtTdG9ja0xhYmVsKGNv
bnN0IGNoYXIqIHN0b2NrSUQpCi17Ci0gICAgR3RrU3RvY2tJdGVtIGl0ZW07Ci0gICAgaWYgKCFn
dGtfc3RvY2tfbG9va3VwKHN0b2NrSUQsICZpdGVtKSkKLSAgICAgICAgcmV0dXJuIHN0b2NrSUQ7
Ci0gICAgcmV0dXJuIGl0ZW0ubGFiZWw7Ci19Ci0KLVN0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0
TGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlN1Ym1pdCIpKTsKLX0K
LQotU3RyaW5nIGlucHV0RWxlbWVudEFsdFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlN1Ym1pdCIpKTsKLX0KLQotU3RyaW5nIHJlc2V0QnV0dG9uRGVmYXVsdExhYmVs
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSZXNldCIpKTsKLX0KLQotU3Ry
aW5nIGRlZmF1bHREZXRhaWxzU3VtbWFyeVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkRldGFpbHMiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1
Y3Rpb24oKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlRoaXMgaXMgYSBzZWFy
Y2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICIpKTsKLX0KLQotU3RyaW5nIGZp
bGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIkNob29zZSBGaWxlIikpOwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbkNob29zZU11bHRpcGxl
RmlsZXNMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3NlIEZp
bGVzIikpOwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIihOb25lKSIpKTsKLX0KLQotU3RyaW5nIGZp
bGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiKE5vbmUpIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bmtJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBM
aW5rIGluIE5ldyBfV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRMaW5rVG9EaXNrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfRG93
bmxvYWQgTGlua2VkIEZpbGUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5
TGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3B5
IExpbmsgTG9jX2F0aW9uIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3Blbklt
YWdlSW5OZXdXaW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4g
X0ltYWdlIGluIE5ldyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZEltYWdlVG9EaXNrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJT
YV92ZSBJbWFnZSBBcyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFn
ZVRvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBJ
bWFnZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xp
cGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3B5IEltYWdlIF9B
ZGRyZXNzIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVvSW5OZXdX
aW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX1ZpZGVvIGlu
IE5ldyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuQXVkaW9J
bk5ld1dpbmRvdygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfQXVk
aW8gaW4gTmV3IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlW
aWRlb0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
Q29wX3kgVmlkZW8gTGluayBMb2NhdGlvbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0NvcHlBdWRpb0xpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiQ29wX3kgQXVkaW8gTGluayBMb2NhdGlvbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIl9Ub2dnbGUgTWVkaWEgQ29udHJvbHMiKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlRvZ2dsZSBNZWRpYSBfTG9vcCBQbGF5YmFjayIpKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJTd2l0Y2ggVmlkZW8gdG8gX0Z1bGxzY3JlZW4iKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIl9QbGF5IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFQYXVzZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1BhdXNlIikpOwot
fQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJfTXV0ZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5GcmFtZUluTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJPcGVuIF9GcmFtZSBpbiBOZXcgV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnQ29weSgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5n
Ojpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19DT1BZKSk7Ci0gICAgcmV0dXJuIHN0
b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKQotewotICAg
IHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJl
bChHVEtfU1RPQ0tfREVMRVRFKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3Rv
Y2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfU0VMRUNU
X0FMTCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnVW5pY29kZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0luc2Vy
dCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnSW5wdXRNZXRob2RzKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJ
bnB1dCBfTWV0aG9kcyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygp
Ci17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtT
dG9ja0xhYmVsKEdUS19TVE9DS19HT19CQUNLKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19
Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKQotewotICAgIHN0YXRpYyBT
dHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RP
Q0tfR09fRk9SV0FSRCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnU3RvcCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0g
U3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19TVE9QKSk7Ci0gICAgcmV0
dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9SZWxvYWQiKSk7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdDdXQoKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJl
bCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ1VUKSk7Ci0gICAg
cmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgp
Ci17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtT
dG9ja0xhYmVsKEdUS19TVE9DS19QQVNURSkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIk5vIEd1ZXNzZXMgRm91bmQiKSk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiX0lnbm9yZSBTcGVsbGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
Il9MZWFybiBTcGVsbGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJj
aFdlYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX1NlYXJjaCB0aGUgV2Vi
IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KGNv
bnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0xvb2sgVXAg
aW4gRGljdGlvbmFyeSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5r
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3BlbiBMaW5rIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiSWdub3JlIF9HcmFtbWFyIikpOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJTcGVsbGluZyBhbmQgX0dyYW1tYXIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChib29sIHNob3cpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoc2hvdyA/IF8oIl9TaG93IFNwZWxsaW5nIGFuZCBHcmFtbWFyIikgOiBfKCJf
SGlkZSBTcGVsbGluZyBhbmQgR3JhbW1hciIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9D
aGVjayBEb2N1bWVudCBOb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVj
a1NwZWxsaW5nV2hpbGVUeXBpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IkNoZWNrIFNwZWxsaW5nIFdoaWxlIF9UeXBpbmciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkNoZWNrIF9HcmFtbWFyIFdpdGggU3BlbGxpbmciKSk7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiX0ZvbnQiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkK
LXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0
b2NrTGFiZWwoR1RLX1NUT0NLX0JPTEQpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpCi17Ci0gICAgc3RhdGljIFN0cmluZyBz
dG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19JVEFM
SUMpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1VuZGVybGluZSgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5n
Ojpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19VTkRFUkxJTkUpKTsKLSAgICByZXR1
cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9PdXRsaW5lIikpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKQotewotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIkluc3BlY3QgX0VsZW1lbnQiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJNTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiTFJNIF9MZWZ0LXRvLXJpZ2h0IG1hcmsiKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxNTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiUkxNIF9SaWdodC10by1sZWZ0IG1hcmsiKSk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJFTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiTFJFIExlZnQtdG8tcmlnaHQgX2VtYmVkZGluZyIpKTsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTEVNYXJrKCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTEUgUmlnaHQtdG8tbGVmdCBlX21iZWRkaW5nIikp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExST01hcmsoKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSTyBMZWZ0LXRvLXJpZ2h0IF9vdmVy
cmlkZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRSTE9N
YXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSTE8gUmlnaHQtdG8tbGVm
dCBvX3ZlcnJpZGUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5z
ZXJ0UERGTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUERGIF9Qb3Ag
ZGlyZWN0aW9uYWwgZm9ybWF0dGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGVJbnNlcnRaV1NNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJaV1MgX1plcm8gd2lkdGggc3BhY2UiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdVbmljb2RlSW5zZXJ0WldKTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiWldKIFplcm8gd2lkdGggX2pvaW5lciIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1VuaWNvZGVJbnNlcnRaV05KTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiWldOSiBaZXJvIHdpZHRoIF9ub24tam9pbmVyIikpOwotfQotCi1TdHJpbmcgc2VhcmNo
TWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJObyByZWNlbnQgc2VhcmNoZXMiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hNZW51UmVjZW50
U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJSZWNlbnQg
c2VhcmNoZXMiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1Rl
eHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9DbGVhciByZWNlbnQgc2Vh
cmNoZXMiKSk7Ci19Ci0KLVN0cmluZyBBWERlZmluaXRpb25UZXh0KCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJkZWZpbml0aW9uIikpOwotfQotCi1TdHJpbmcgQVhEZXNjcmlw
dGlvbkxpc3RUZXJtVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidGVy
bSIpKTsKLX0KLQotU3RyaW5nIEFYRGVzY3JpcHRpb25MaXN0RGV0YWlsVGV4dCgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZGVzY3JpcHRpb24iKSk7Ci19Ci0KLVN0cmluZyBB
WEZvb3RlclJvbGVEZXNjcmlwdGlvblRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oImZvb3RlciIpKTsKLX0KLQotU3RyaW5nIEFYQnV0dG9uQWN0aW9uVmVyYigpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicHJlc3MiKSk7Ci19Ci0KLVN0cmluZyBBWFJh
ZGlvQnV0dG9uQWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
c2VsZWN0IikpOwotfQotCi1TdHJpbmcgQVhUZXh0RmllbGRBY3Rpb25WZXJiKCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJhY3RpdmF0ZSIpKTsKLX0KLQotU3RyaW5nIEFYQ2hl
Y2tlZENoZWNrQm94QWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygidW5jaGVjayIpKTsKLX0KLQotU3RyaW5nIEFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJi
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJjaGVjayIpKTsKLX0KLQotU3Ry
aW5nIEFYTGlua0FjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
Imp1bXAiKSk7Ci19Ci0KLVN0cmluZyBBWE1lbnVMaXN0UG9wdXBBY3Rpb25WZXJiKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBWE1lbnVMaXN0QWN0aW9uVmVyYigpCi17
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotICAgIAotU3RyaW5nIG1pc3NpbmdQbHVnaW5UZXh0
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJNaXNzaW5nIFBsdWctaW4iKSk7
Ci19Ci0KLVN0cmluZyBjcmFzaGVkUGx1Z2luVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJQbHVnLWluIEZhaWx1cmUiKSk7Ci19
Ci0KLVN0cmluZyBibG9ja2VkUGx1Z2luQnlDb250ZW50U2VjdXJpdHlQb2xpY3lUZXh0KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5n
IGluc2VjdXJlUGx1Z2luVmVyc2lvblRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgaW5hY3RpdmVQbHVnaW5UZXh0KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5n
IG11bHRpcGxlRmlsZVVwbG9hZFRleHQodW5zaWduZWQgbnVtYmVyT2ZGaWxlcykKLXsKLSAgICAv
LyBGSVhNRTogSWYgdGhpcyBmaWxlIGdldHMgbG9jYWxpemVkLCB0aGlzIHNob3VsZCByZWFsbHkg
YmUgbG9jYWxpemVkIGFzIG9uZSBzdHJpbmcgd2l0aCBhIHdpbGRjYXJkIGZvciB0aGUgbnVtYmVy
LgotICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXJPZkZpbGVzKSArIFN0cmluZzo6ZnJv
bVVURjgoXygiIGZpbGVzIikpOwotfQotCi1TdHJpbmcgdW5rbm93bkZpbGVTaXplVGV4dCgpCi17
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVW5rbm93biIpKTsKLX0KLQotU3RyaW5n
IGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKENfKCJUaXRsZSBz
dHJpbmcgZm9yIGltYWdlcyIsICIlcyAgKCVkeCVkIHBpeGVscykiKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7
Ci19Ci0KLQotI2lmIEVOQUJMRShWSURFTykKLQotU3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdT
dGF0ZVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxvYWRpbmcuLi4i
KSk7Ci19Ci0KLVN0cmluZyBtZWRpYUVsZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMaXZlIEJyb2FkY2FzdCIpKTsKLX0KLQot
U3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIGlmIChuYW1lID09ICJBdWRpb0VsZW1lbnQiKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJhdWRpbyBlbGVtZW50IGNvbnRyb2xsZXIiKSk7Ci0gICAgaWYg
KG5hbWUgPT0gIlZpZGVvRWxlbWVudCIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInZpZGVvIGVsZW1lbnQgY29udHJvbGxlciIpKTsKLSAgICBpZiAobmFtZSA9PSAiTXV0ZUJ1
dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm11dGUiKSk7Ci0gICAg
aWYgKG5hbWUgPT0gIlVuTXV0ZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInVubXV0ZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiUGxheUJ1dHRvbiIpCi0gICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBsYXkiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlBh
dXNlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF1c2UiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlciIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIm1vdmllIHRpbWUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlclRodW1iIikKLSAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidGltZWxpbmUgc2xpZGVyIHRodW1iIikp
OwotICAgIGlmIChuYW1lID09ICJSZXdpbmRCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJiYWNrIDMwIHNlY29uZHMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlJldHVy
blRvUmVhbHRpbWVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJy
ZXR1cm4gdG8gcmVhbHRpbWUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkN1cnJlbnRUaW1lRGlzcGxh
eSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImVsYXBzZWQgdGltZSIpKTsK
LSAgICBpZiAobmFtZSA9PSAiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJyZW1haW5pbmcgdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAi
U3RhdHVzRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0YXR1
cyIpKTsKLSAgICBpZiAobmFtZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZW50ZXIgZnVsbHNjcmVlbiIpKTsKLSAgICBpZiAo
bmFtZSA9PSAiRXhpdEZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJleGl0IGZ1bGxzY3JlZW4iKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtGb3J3
YXJkQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZmFzdCBmb3J3
YXJkIikpOwotICAgIGlmIChuYW1lID09ICJTZWVrQmFja0J1dHRvbiIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oImZhc3QgcmV2ZXJzZSIpKTsKLSAgICBpZiAobmFtZSA9PSAi
U2hvd0Nsb3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygic2hvdyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkhpZGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImhp
ZGUgY2xvc2VkIGNhcHRpb25zIikpOwotICAgIGlmIChuYW1lID09ICJDb250cm9sc1BhbmVsIikK
LSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibWVkaWEgY29udHJvbHMiKSk7Ci0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50SGVscFRleHQoY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIGlmIChuYW1lID09ICJBdWRpb0VsZW1lbnQiKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJhdWRpbyBlbGVtZW50IHBsYXliYWNrIGNvbnRyb2xzIGFuZCBz
dGF0dXMgZGlzcGxheSIpKTsKLSAgICBpZiAobmFtZSA9PSAiVmlkZW9FbGVtZW50IikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidmlkZW8gZWxlbWVudCBwbGF5YmFjayBjb250
cm9scyBhbmQgc3RhdHVzIGRpc3BsYXkiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIk11dGVCdXR0b24i
KQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtdXRlIGF1ZGlvIHRyYWNrcyIp
KTsKLSAgICBpZiAobmFtZSA9PSAiVW5NdXRlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygidW5tdXRlIGF1ZGlvIHRyYWNrcyIpKTsKLSAgICBpZiAobmFtZSA9PSAi
UGxheUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImJlZ2luIHBs
YXliYWNrIikpOwotICAgIGlmIChuYW1lID09ICJQYXVzZUJ1dHRvbiIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInBhdXNlIHBsYXliYWNrIikpOwotICAgIGlmIChuYW1lID09
ICJTbGlkZXIiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1l
IHNjcnViYmVyIikpOwotICAgIGlmIChuYW1lID09ICJTbGlkZXJUaHVtYiIpCi0gICAgICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1vdmllIHRpbWUgc2NydWJiZXIgdGh1bWIiKSk7Ci0g
ICAgaWYgKG5hbWUgPT0gIlJld2luZEJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oInNlZWsgbW92aWUgYmFjayAzMCBzZWNvbmRzIikpOwotICAgIGlmIChuYW1lID09
ICJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygicmV0dXJuIHN0cmVhbWluZyBtb3ZpZSB0byByZWFsIHRpbWUiKSk7Ci0gICAgaWYgKG5h
bWUgPT0gIkN1cnJlbnRUaW1lRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oImN1cnJlbnQgbW92aWUgdGltZSBpbiBzZWNvbmRzIikpOwotICAgIGlmIChuYW1lID09
ICJUaW1lUmVtYWluaW5nRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIm51bWJlciBvZiBzZWNvbmRzIG9mIG1vdmllIHJlbWFpbmluZyIpKTsKLSAgICBpZiAobmFt
ZSA9PSAiU3RhdHVzRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
ImN1cnJlbnQgbW92aWUgc3RhdHVzIikpOwotICAgIGlmIChuYW1lID09ICJTZWVrQmFja0J1dHRv
biIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInNlZWsgcXVpY2tseSBiYWNr
IikpOwotICAgIGlmIChuYW1lID09ICJTZWVrRm9yd2FyZEJ1dHRvbiIpCi0gICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInNlZWsgcXVpY2tseSBmb3J3YXJkIikpOwotICAgIGlmIChu
YW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJQbGF5IG1vdmllIGluIGZ1bGxzY3JlZW4gbW9kZSIpKTsKLSAgICBpZiAobmFt
ZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiRXhpdCBmdWxsc2NyZWVuIG1vZGUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNob3dD
bG9zZWRDYXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
InN0YXJ0IGRpc3BsYXlpbmcgY2xvc2VkIGNhcHRpb25zIikpOwotICAgIGlmIChuYW1lID09ICJI
aWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJzdG9wIGRpc3BsYXlpbmcgY2xvc2VkIGNhcHRpb25zIikpOwotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgbG9jYWxpemVk
TWVkaWFUaW1lRGVzY3JpcHRpb24oZmxvYXQgdGltZSkKLXsKLSAgICBpZiAoIXN0ZDo6aXNmaW5p
dGUodGltZSkpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImluZGVmaW5pdGUg
dGltZSIpKTsKLQotICAgIGludCBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8aW50PihhYnModGltZSkp
OwotICAgIGludCBkYXlzID0gc2Vjb25kcyAvICg2MCAqIDYwICogMjQpOwotICAgIGludCBob3Vy
cyA9IHNlY29uZHMgLyAoNjAgKiA2MCk7Ci0gICAgaW50IG1pbnV0ZXMgPSAoc2Vjb25kcyAvIDYw
KSAlIDYwOwotICAgIHNlY29uZHMgJT0gNjA7Ci0KLSAgICBpZiAoZGF5cykgewotICAgICAgICBH
T3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBkYXlzICVkIGhvdXJzICVk
IG1pbnV0ZXMgJWQgc2Vjb25kcyIsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSk7Ci0g
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKGhvdXJzKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9w
cmludGYoIiVkIGhvdXJzICVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIsIGhvdXJzLCBtaW51dGVzLCBz
ZWNvbmRzKSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7
Ci0gICAgfQotCi0gICAgaWYgKG1pbnV0ZXMpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gc3Ry
aW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgbWludXRlcywgc2Vj
b25kcykpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOwot
ICAgIH0KLQotICAgIEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIHNl
Y29uZHMiLCBzZWNvbmRzKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdl
dCgpKTsKLX0KLSNlbmRpZiAgLy8gRU5BQkxFKFZJREVPKQotCi1TdHJpbmcgdmFsaWRhdGlvbk1l
c3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJ2YWx1ZSBtaXNzaW5nIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1p
c3NpbmdGb3JDaGVja2JveFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFs
aWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JGaWxlVGV4dCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7
Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zvck11bHRpcGxlRmls
ZVRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25N
ZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VW
YWx1ZU1pc3NpbmdGb3JSYWRpb1RleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1Rl
eHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0
eXBlIG1pc21hdGNoIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0
Y2hGb3JFbWFpbFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlv
bk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JNdWx0aXBsZUVtYWlsVGV4dCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0
KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvclVSTFRleHQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdl
VHlwZU1pc21hdGNoVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VQYXR0ZXJu
TWlzbWF0Y2hUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXR0ZXJu
IG1pc21hdGNoIikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChp
bnQsIGludCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0b28gbG9uZyIpKTsK
LX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KGNvbnN0IFN0
cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmFuZ2UgdW5kZXJmbG93
IikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChjb25z
dCBTdHJpbmcmKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJhbmdlIG92ZXJm
bG93IikpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VTdGVwTWlzbWF0Y2hUZXh0KGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygic3RlcCBtaXNtYXRjaCIpKTsKLX0KLQotU3RyaW5nIHVuYWNjZXB0YWJsZVRMU0NlcnRp
ZmljYXRlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJVbmFjY2VwdGFibGUg
VExTIGNlcnRpZmljYXRlIikpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkU3RyaW5nKGNvbnN0IGNo
YXIqIGtleSkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChrZXksIHN0cmxlbihrZXkp
KTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlQmFkSW5wdXRGb3JOdW1iZXJUZXh0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5
cGVNaXNtYXRjaFRleHQoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLVN0cmluZyB0
ZXh0VHJhY2tDbG9zZWRDYXB0aW9uc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KENfKCJDbG9zZWQgQ2FwdGlvbnMiLCAiTWVudSBzZWN0aW9uIGhlYWRpbmcgZm9yIGNsb3Nl
ZCBjYXB0aW9ucyIpKTsKLX0KLQotU3RyaW5nIHRleHRUcmFja1N1YnRpdGxlc1RleHQoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJTdWJ0aXRsZXMiLCAiTWVudSBzZWN0aW9u
IGhlYWRpbmcgZm9yIHN1YnRpdGxlcyIpKTsKLX0KLQotU3RyaW5nIHRleHRUcmFja09mZlRleHQo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJPZmYiLCAiTWVudSBpdGVtIGxh
YmVsIGZvciB0aGUgdHJhY2sgdGhhdCByZXByZXNlbnRzIGRpc2FibGluZyBjbG9zZWQgY2FwdGlv
bnMiKSk7Ci19Ci0KLVN0cmluZyB0ZXh0VHJhY2tOb0xhYmVsVGV4dCgpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoQ18oIk5vIGxhYmVsIiwgIk1lbnUgaXRlbSBsYWJlbCBmb3IgYSBj
bG9zZWQgY2FwdGlvbnMgdHJhY2sgdGhhdCBoYXMgbm8gb3RoZXIgbmFtZSIpKTsKLX0KLSNlbmRp
ZgotCi1TdHJpbmcgc25hcHNob3R0ZWRQbHVnSW5MYWJlbFRpdGxlKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChDXygiU25hcHNob3R0ZWQgUGx1Zy1JbiIsICJUaXRsZSBvZiB0aGUg
bGFiZWwgdG8gc2hvdyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Ci19Ci0KLVN0cmluZyBz
bmFwc2hvdHRlZFBsdWdJbkxhYmVsU3VidGl0bGUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KENfKCJDbGljayB0byByZXN0YXJ0IiwgIlN1YnRpdGxlIG9mIHRoZSBsYWJlbCB0byBz
aG93IG9uIGEgc25hcHNob3R0ZWQgcGx1Zy1pbiIpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhODk4YWY3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dn
aW5nR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbml0aWFsaXplTG9nZ2luZy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLQotI2lmICFMT0dfRElTQUJMRUQKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBJbnNwaXJlZCBieSB0aGUgY29kZSB1c2VkIGJ5IHRoZSBRdCBwb3J0Ci0K
LXZvaWQgaW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBzdGF0
aWMgYm9vbCBkaWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzID0gZmFsc2U7Ci0gICAgaWYgKGRp
ZEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRpZElu
aXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMgPSB0cnVlOwotCi0gICAgY2hhciogbG9nRW52ID0gZ2V0
ZW52KCJXRUJLSVRfREVCVUciKTsKLSAgICBpZiAoIWxvZ0VudikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gd2Ugc2V0IHVwIHRoZSBsb2dzIGFueXdheSBiZWNhdXNlIHNvbWUgb2Ygb3VyIGxv
Z2dpbmcsIHN1Y2ggYXMKLSAgICAvLyBzb3VwJ3MgaXMgYXZhaWxhYmxlIGluIHJlbGVhc2UgYnVp
bGRzCi0jaWYgZGVmaW5lZChOREVCVUcpCi0gICAgZ193YXJuaW5nKCJXRUJLSVRfREVCVUcgaXMg
bm90IGVtcHR5LCBidXQgdGhpcyBpcyBhIHJlbGVhc2UgYnVpbGQuIE5vdGljZSB0aGF0IG1hbnkg
bG9nIG1lc3NhZ2VzIHdpbGwgb25seSBhcHBlYXIgaW4gYSBkZWJ1ZyBidWlsZC4iKTsKLSNlbmRp
ZgotCi0gICAgY2hhcioqIGxvZ3YgPSBnX3N0cnNwbGl0KGxvZ0VudiwgIiAiLCAtMSk7Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgbG9ndltpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChXVEZMb2dDaGFu
bmVsKiBjaGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKGxvZ3ZbaV0pKQotICAgICAgICAgICAg
Y2hhbm5lbC0+c3RhdGUgPSBXVEZMb2dDaGFubmVsT247Ci0gICAgfQotCi0gICAgZ19zdHJmcmVl
dihsb2d2KTsKLQotICAgIC8vIHRvIGRpc2FibGUgbG9nZ2luZyBub3RJbXBsZW1lbnRlZCBzZXQg
dGhlIERJU0FCTEVfTklfV0FSTklORwotICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIDEK
LSAgICBMb2dOb3RZZXRJbXBsZW1lbnRlZC5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjdmMTRjLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNp
biA8emFja0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RydWN0IEV4dGVuc2lvbk1hcCB7Ci0gICAgY29uc3QgY2hhciogZXh0ZW5z
aW9uOwotICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlOwotfTsKLQotc3RhdGljIGNvbnN0IEV4dGVu
c2lvbk1hcCBleHRlbnNpb25NYXAgW10gPSB7Ci0gICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwK
LSAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCi0gICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwK
LSAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9LAotICAgIHsgImh0bWwiLCAidGV4dC9odG1sIiB9
LAotICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCi0gICAgeyAianBlZyIsICJpbWFnZS9q
cGVnIiB9LAotICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAotICAgIHsgImpzIiwgImFwcGxp
Y2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKLSAgICB7ICJwZGYiLCAiYXBwbGljYXRpb24vcGRmIiB9
LAotICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0sCi0gICAgeyAicnNzIiwgImFwcGxpY2F0aW9u
L3Jzcyt4bWwiIH0sCi0gICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwiIH0sCi0gICAgeyAidGV4
dCIsICJ0ZXh0L3BsYWluIiB9LAotICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAotICAgIHsg
InhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCi0gICAgeyAieG1sIiwgInRleHQveG1sIiB9LAot
ICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKLSAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94
aHRtbCt4bWwiIH0sCi0gICAgeyAid21sIiwgInRleHQvdm5kLndhcC53bWwiIH0sCi0gICAgeyAi
d21sYyIsICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiIH0sCi0gICAgeyAwLCAwIH0KLX07Ci0K
LVN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBT
dHJpbmcgJmV4dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgU3RyaW5n
IHMgPSBleHQubG93ZXIoKTsKLSAgICBjb25zdCBFeHRlbnNpb25NYXAgKmUgPSBleHRlbnNpb25N
YXA7Ci0gICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgewotICAgICAgICBpZiAocyA9PSBlLT5leHRl
bnNpb24pCi0gICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7Ci0gICAgICAgICsrZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6
aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
TWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9N
YWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MWMxY2M4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJh
bWVTY3JvbGxiYXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgemVj
a2VAc2VsZmlzaC5vcmcKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNp
bHZhIDxnbnNAZ25vbWUub3JnPgotICogIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRk
LgotICogIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1haW5G
cmFtZVNjcm9sbGJhckd0ay5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVBhc3NSZWZQdHI8TWFpbkZy
YW1lU2Nyb2xsYmFyR3RrPiBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OmNyZWF0ZShTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrKHNjcm9sbGFi
bGVBcmVhLCBvcmllbnRhdGlvbikpOwotfQotCi0vLyBBIE1haW5GcmFtZVNjcm9sbGJhciBpcyBq
dXN0IGEgbm9uLXBhaW50aW5nIHNjcm9sbGJhci4gT3RoZXJ3aXNlIGl0IGlzIGZ1bGx5Ci0vLyBm
dW5jdGlvbmFsLiBBIG5vbi1wYWludGluZyBzY3JvbGxiYXIgYWxsb3dzIGEgbWFpbi1mcmFtZSBT
Y3JvbGxWaWV3IHRvIHVzZQotLy8gYSBjb250YWluaW5nIEd0a1Njcm9sbGVkV2luZG93IGFzIGl0
cyB1c2VyIGludGVyZmFjZS4gVGhlIENocm9tZUNsaWVudCBpbiB0aGUKLS8vIFdlYktpdCBsYXll
ciBqdXN0IGxpc3RlbnMgZm9yIHNjcm9sbGluZyBhbmQgc2l6aW5nIGNoYW5nZXMgYW5kIHVwZGF0
ZXMgaXRzCi0vLyBjb250YWluZXIgKHRoZSBHdGtTY3JvbGxlZFdpbmRvdykgYWNjb3JkaW5nbHku
IFRoZSBTY3JvbGxWaWV3IGlzIHJlc3BvbnNpYmxlCi0vLyBmb3IgZGVjaWRpbmcgd2hldGhlciBv
ciBub3QgdG8gY3JlYXRlIGEgTWFpbkZyYW1lU2Nyb2xsYmFyIG9yIG5hdGl2ZSBzY3JvbGxiYXIu
Ci1NYWluRnJhbWVTY3JvbGxiYXJHdGs6Ok1haW5GcmFtZVNjcm9sbGJhckd0ayhTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQot
ICAgIDogU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9s
bGJhcikKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHRha2UgdXAgYW55IHNwYWNlLgotICAg
IHJlc2l6ZSgwLCAwKTsKLX0KLQotdm9pZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBN
YWluIGZyYW1lIHNjcm9sbGJhcnMgYXJlIG5vdCBwYWludGVkIGJ5IFdlYkNvcmUuCi0gICAgcmV0
dXJuOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFt
ZVNjcm9sbGJhckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNj
cm9sbGJhckd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjhjYjYzLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJH
dGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0KLSNp
Zm5kZWYgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrX2gKLSNkZWZpbmUgTWFpbkZyYW1lU2Nyb2xsYmFy
R3RrX2gKLQotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
IDogcHVibGljIFNjcm9sbGJhciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWFp
bkZyYW1lU2Nyb2xsYmFyR3RrPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmll
bnRhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICBNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xs
YWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBT
Y3JvbGxiYXJHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRH
dGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTdhM2Y5Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKLQotI2luY2x1ZGUgIkNsaXBi
b2FyZEd0ay5oIgotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgi
Ci0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgot
I2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlJl
bmRlckltYWdlLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJh
bFBhc3RlYm9hcmQoKQotewotICAgIHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3
IFBhc3RlYm9hcmQoKTsKLSAgICByZXR1cm4gcGFzdGVib2FyZDsKLX0KLQotUGFzdGVib2FyZDo6
UGFzdGVib2FyZCgpCi17Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFu
Z2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0g
aGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKLQotICAgIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAg
ICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgZGF0YU9iamVjdC0+c2V0VGV4dChmcmFt
ZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAo
Y3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZh
bHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7Ci0gICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKGNsaXBib2FyZCwgY2FuU21hcnRDb3B5T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVy
OjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0
UGFzdGUpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlvbikKLXsKLSAgICBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKLSAgICBE
YXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNs
aXBib2FyZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIGRhdGFPYmplY3Qt
PnNldFRleHQodGV4dCk7Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsCi0gICAgICAgIChzbWFy
dFJlcGxhY2VPcHRpb24gPT0gQ2FuU21hcnRSZXBsYWNlKSA/IFBhc3RlYm9hcmRIZWxwZXI6Oklu
Y2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0
ZSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7Ci0gICAgR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwotCi0gICAg
RGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChj
bGlwYm9hcmQpOwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0KLSAgICBkYXRhT2JqZWN0
LT5zZXRVUkwodXJsLCBsYWJlbCk7Ci0gICAgaGVscGVyLT53cml0ZUNsaXBib2FyZENvbnRlbnRz
KGNsaXBib2FyZCk7Ci19Ci0KLXN0YXRpYyBLVVJMIGdldFVSTEZvckltYWdlTm9kZShOb2RlKiBu
b2RlKQotewotICAgIC8vIEZJWE1FOiBMYXRlciB0aGlzIGNvZGUgc2hvdWxkIGJlIHNoYXJlZCB3
aXRoIENocm9taXVtIHNvbWVob3cuIENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9ybXMgd2FudCBpdC4K
LSAgICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOwotICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW1nVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcp
KQotICAgICAgICB1cmxTdHJpbmcgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOwotI2lmIEVOQUJMRShTVkcpCi0gICAgZWxzZSBp
ZiAobm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQotICAgICAgICB1cmxTdHJp
bmcgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVz
OjpocmVmQXR0cik7Ci0jZW5kaWYKLSAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZW1iZWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcp
KSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSk7Ci0gICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShlbGVtZW50LT5p
bWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSk7Ci0gICAgfQotICAgIHJldHVybiB1cmxTdHJpbmcu
aXNFbXB0eSgpID8gS1VSTCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBM
ZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwotfQotCi12b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
dGl0bGUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVuZGVyZXIo
KSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkp
OwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgp
OwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZv
clJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaW1hZ2UpOwotCi0gICAgR3RrQ2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7Ci0gICAgRGF0YU9iamVj
dEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQp
OwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0KLSAgICBLVVJMIHVybCA9IGdldFVSTEZv
ckltYWdlTm9kZShub2RlKTsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGF0
YU9iamVjdC0+c2V0VVJMKHVybCwgdGl0bGUpOwotCi0gICAgICAgIGRhdGFPYmplY3QtPnNldE1h
cmt1cChjcmVhdGVNYXJrdXAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLCBJbmNsdWRlTm9k
ZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7Ci0gICAgZGF0YU9iamVj
dC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKLQotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsK
LX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNsaXBib2FyZChDbGlwYm9hcmQqIGNsaXBib2Fy
ZCkKLXsKLSAgICBHdGtDbGlwYm9hcmQqIGd0a0NsaXBib2FyZCA9IHN0YXRpY19jYXN0PENsaXBi
b2FyZEd0ayo+KGNsaXBib2FyZCktPmNsaXBib2FyZCgpOwotICAgIGlmIChndGtDbGlwYm9hcmQp
Ci0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndy
aXRlQ2xpcGJvYXJkQ29udGVudHMoZ3RrQ2xpcGJvYXJkKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJk
OjpjbGVhcigpCi17Ci0gICAgZ3RrX2NsaXBib2FyZF9jbGVhcihndGtfY2xpcGJvYXJkX2dldF9m
b3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBC
T0FSRCkpOwotfQotCi1ib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCi17Ci0gICAg
cmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmNsaXBi
b2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZSgKLSAgICAgICAgZ3RrX2NsaXBib2FyZF9n
ZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9D
TElQQk9BUkQpKTsKLX0KLQotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJk
Ojpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKLXsKLSAgICBQ
YXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpOwotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRD
dXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0g
RGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgaGVscGVyLT5nZXRD
bGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOwotCi0gICAgY2hvc2VQbGFpblRleHQgPSBmYWxz
ZTsKLQotICAgIGlmIChkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewotICAgICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJh
bWUtPmRvY3VtZW50KCksIGRhdGFPYmplY3QtPm1hcmt1cCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRp
bmdBbmRQbHVnaW5Db250ZW50SWZOZWVkZWQpOwotICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmICghYWxs
b3dQbGFpblRleHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhh
c1RleHQoKSkgewotICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29u
dGV4dC5nZXQoKSwgZGF0YU9iamVjdC0+dGV4dCgpKTsKLSAgICAgICAgaWYgKGZyYWdtZW50KQot
ICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCi17
Ci0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVs
dFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBl
ci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotCi0gICAgaGVs
cGVyLT5nZXRDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOwotICAgIHJldHVybiBkYXRhT2Jq
ZWN0LT50ZXh0KCk7Ci19Ci0KLWJvb2wgUGFzdGVib2FyZDo6aXNTZWxlY3Rpb25Nb2RlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+dXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCgpOwotfQotCi12b2lkIFBhc3RlYm9h
cmQ6OnNldFNlbGVjdGlvbk1vZGUoYm9vbCBzZWxlY3Rpb25Nb2RlKQotewotICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnNldFVzZVByaW1hcnlTZWxlY3Rp
b25DbGlwYm9hcmQoc2VsZWN0aW9uTW9kZSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzZhOTc1NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEhlbHBlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5o
IgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIEdka0F0b20gdGV4dFBsYWlu
QXRvbTsKLXN0YXRpYyBHZGtBdG9tIG1hcmt1cEF0b207Ci1zdGF0aWMgR2RrQXRvbSBuZXRzY2Fw
ZVVSTEF0b207Ci1zdGF0aWMgR2RrQXRvbSB1cmlMaXN0QXRvbTsKLXN0YXRpYyBHZGtBdG9tIHNt
YXJ0UGFzdGVBdG9tOwotc3RhdGljIFN0cmluZyBnTWFya3VwUHJlZml4OwotCi1zdGF0aWMgdm9p
ZCByZW1vdmVNYXJrdXBQcmVmaXgoU3RyaW5nJiBtYXJrdXApCi17Ci0gICAgLy8gVGhlIG1hcmt1
cCBwcmVmaXggaXMgbm90IGhhcm1mdWwsIGJ1dCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgc3RyaW5n
IGFueXdheSwgc28gdGhhdAotICAgIC8vIHdlIGNhbiBoYXZlIGNvbnNpc3RlbnQgcmVzdWx0cyB3
aXRoIG90aGVyIHBvcnRzIGR1cmluZyB0aGUgbGF5b3V0IHRlc3RzLgotICAgIGlmIChtYXJrdXAu
c3RhcnRzV2l0aChnTWFya3VwUHJlZml4KSkKLSAgICAgICAgbWFya3VwLnJlbW92ZSgwLCBnTWFy
a3VwUHJlZml4Lmxlbmd0aCgpKTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdEdka0F0b21zKCkKLXsK
LSAgICBzdGF0aWMgZ2Jvb2xlYW4gaW5pdGlhbGl6ZWQgPSBGQUxTRTsKLQotICAgIGlmIChpbml0
aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdGlhbGl6ZWQgPSBUUlVFOwotCi0g
ICAgdGV4dFBsYWluQXRvbSA9IGdka19hdG9tX2ludGVybigidGV4dC9wbGFpbjtjaGFyc2V0PXV0
Zi04IiwgRkFMU0UpOwotICAgIG1hcmt1cEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRt
bCIsIEZBTFNFKTsKLSAgICBuZXRzY2FwZVVSTEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oIl9ORVRT
Q0FQRV9VUkwiLCBGQUxTRSk7Ci0gICAgdXJpTGlzdEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRl
eHQvdXJpLWxpc3QiLCBGQUxTRSk7Ci0gICAgc21hcnRQYXN0ZUF0b20gPSBnZGtfYXRvbV9pbnRl
cm4oImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIsIEZBTFNFKTsKLSAgICBn
TWFya3VwUHJlZml4ID0gIjxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50
PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCI+IjsKLX0KLQotUGFzdGVib2FyZEhlbHBlciog
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUGFzdGVib2FyZEhlbHBlciwgZGVmYXVsdEhlbHBlciwgKCkpOwotICAg
IHJldHVybiAmZGVmYXVsdEhlbHBlcjsKLX0KLQotUGFzdGVib2FyZEhlbHBlcjo6UGFzdGVib2Fy
ZEhlbHBlcigpCi0gICAgOiBtX3RhcmdldExpc3QoZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKSkK
LSAgICAsIG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChmYWxzZSkKLXsKLSAgICBpbml0
R2RrQXRvbXMoKTsKLQotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKG1fdGFy
Z2V0TGlzdCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZVRleHQpOwotICAgIGd0a190YXJn
ZXRfbGlzdF9hZGQobV90YXJnZXRMaXN0LCBtYXJrdXBBdG9tLCAwLCBQYXN0ZWJvYXJkSGVscGVy
OjpUYXJnZXRUeXBlTWFya3VwKTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRz
KG1fdGFyZ2V0TGlzdCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZVVSSUxpc3QpOwotICAg
IGd0a190YXJnZXRfbGlzdF9hZGQobV90YXJnZXRMaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAsIFBh
c3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVOZXRzY2FwZVVSTCk7Ci0gICAgZ3RrX3RhcmdldF9s
aXN0X2FkZF9pbWFnZV90YXJnZXRzKG1fdGFyZ2V0TGlzdCwgUGFzdGVib2FyZEhlbHBlcjo6VGFy
Z2V0VHlwZUltYWdlLCBUUlVFKTsKLX0KLQotUGFzdGVib2FyZEhlbHBlcjo6flBhc3RlYm9hcmRI
ZWxwZXIoKQotewotICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihtX3RhcmdldExpc3QpOwotfQot
Ci1zdGF0aWMgaW5saW5lIEdka0Rpc3BsYXkqIGRpc3BsYXlGcm9tRnJhbWUoRnJhbWUqIGZyYW1l
KQotewotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7
Ci0gICAgQVNTRVJUKHBhZ2UpOwotICAgIENocm9tZSogY2hyb21lID0gcGFnZS0+Y2hyb21lKCk7
Ci0gICAgQVNTRVJUKGNocm9tZSk7Ci0gICAgUGxhdGZvcm1QYWdlQ2xpZW50IGNsaWVudCA9IGNo
cm9tZS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgcmV0dXJuIGNsaWVudCA/IGd0a193aWRn
ZXRfZ2V0X2Rpc3BsYXkoY2xpZW50KSA6IGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCk7Ci19Ci0K
LUd0a0NsaXBib2FyZCogUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q3VycmVudENsaXBib2FyZChGcmFt
ZSogZnJhbWUpCi17Ci0gICAgaWYgKG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCkKLSAg
ICAgICAgcmV0dXJuIGdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoZnJhbWUpOwotICAgIHJl
dHVybiBnZXRDbGlwYm9hcmQoZnJhbWUpOwotfQotCi1HdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRI
ZWxwZXI6OmdldENsaXBib2FyZChGcmFtZSogZnJhbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0
a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGRpc3BsYXlGcm9tRnJhbWUoZnJhbWUpLCBHREtf
U0VMRUNUSU9OX0NMSVBCT0FSRCk7Ci19Ci0KLUd0a0NsaXBib2FyZCogUGFzdGVib2FyZEhlbHBl
cjo6Z2V0UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChGcmFtZSogZnJhbWUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGRpc3BsYXlGcm9tRnJhbWUo
ZnJhbWUpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkpOwotfQotCi1HdGtUYXJnZXRMaXN0KiBQYXN0
ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90YXJnZXRM
aXN0OwotfQotCi1zdGF0aWMgU3RyaW5nIHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoR3RrU2Vs
ZWN0aW9uRGF0YSogZGF0YSkKLXsKLSAgICAvLyBnX3N0cm5kdXAgZ3VhcmRzIGFnYWluc3Qgc2Vs
ZWN0aW9uIGRhdGEgdGhhdCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLgotICAgIEdPd25QdHI8Z2No
YXI+IG1hcmt1cFN0cmluZyhnX3N0cm5kdXAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Z3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEpKSwgZ3RrX3NlbGVjdGlvbl9kYXRhX2dl
dF9sZW5ndGgoZGF0YSkpKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChtYXJrdXBTdHJp
bmcuZ2V0KCkpOwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmdldENsaXBib2FyZENvbnRl
bnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQotewotICAgIERhdGFPYmplY3RHdGsqIGRhdGFP
YmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBBU1NF
UlQoZGF0YU9iamVjdCk7Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZh
aWxhYmxlKGNsaXBib2FyZCkpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gdGV4dERhdGEoZ3Rr
X2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2FyZCkpOwotICAgICAgICBpZiAodGV4dERh
dGEpCi0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4
dERhdGEuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3Rh
cmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBtYXJrdXBBdG9tKSkgewotICAgICAgICBpZiAoR3Rr
U2VsZWN0aW9uRGF0YSogZGF0YSA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xp
cGJvYXJkLCBtYXJrdXBBdG9tKSkgewotICAgICAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxlY3Rp
b25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKLSAgICAgICAgICAgIHJlbW92ZU1hcmt1cFByZWZp
eChtYXJrdXApOwotICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKG1hcmt1cCk7Ci0g
ICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZnJlZShkYXRhKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlw
Ym9hcmQsIHVyaUxpc3RBdG9tKSkgewotICAgICAgICBpZiAoR3RrU2VsZWN0aW9uRGF0YSogZGF0
YSA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCB1cmlMaXN0QXRv
bSkpIHsKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRv
VVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZnJlZShk
YXRhKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxs
U2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZv
LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAgIGlmIChpbmZvID09IFRhcmdldFR5
cGVUZXh0KQotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uRGF0
YSwgZGF0YU9iamVjdC0+dGV4dCgpLnV0ZjgoKS5kYXRhKCksIC0xKTsKLQotICAgIGVsc2UgaWYg
KGluZm8gPT0gVGFyZ2V0VHlwZU1hcmt1cCkgewotICAgICAgICAvLyBTb21lIExpbnV4IGFwcGxp
Y2F0aW9ucyByZWZ1c2UgdG8gYWNjZXB0IHBhc3RlZCBtYXJrdXAgdW5sZXNzIGl0IGlzCi0gICAg
ICAgIC8vIHByZWZpeGVkIGJ5IGEgY29udGVudC10eXBlIG1ldGEgdGFnLgotICAgICAgICBDU3Ry
aW5nIG1hcmt1cCA9IFN0cmluZyhnTWFya3VwUHJlZml4ICsgZGF0YU9iamVjdC0+bWFya3VwKCkp
LnV0ZjgoKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRhLCBt
YXJrdXBBdG9tLCA4LAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIq
PihtYXJrdXAuZGF0YSgpKSwgbWFya3VwLmxlbmd0aCgpICsgMSk7Ci0KLSAgICB9IGVsc2UgaWYg
KGluZm8gPT0gVGFyZ2V0VHlwZVVSSUxpc3QpIHsKLSAgICAgICAgQ1N0cmluZyB1cmlMaXN0ID0g
ZGF0YU9iamVjdC0+dXJpTGlzdCgpLnV0ZjgoKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRh
X3NldChzZWxlY3Rpb25EYXRhLCB1cmlMaXN0QXRvbSwgOCwKLSAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4odXJpTGlzdC5kYXRhKCkpLCB1cmlMaXN0Lmxlbmd0aCgp
ICsgMSk7Ci0KLSAgICB9IGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZU5ldHNjYXBlVVJMICYm
IGRhdGFPYmplY3QtPmhhc1VSTCgpKSB7Ci0gICAgICAgIFN0cmluZyB1cmwoZGF0YU9iamVjdC0+
dXJsKCkpOwotICAgICAgICBTdHJpbmcgcmVzdWx0KHVybCk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIlxuIik7Ci0KLSAgICAgICAgaWYgKGRhdGFPYmplY3QtPmhhc1RleHQoKSkKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoZGF0YU9iamVjdC0+dGV4dCgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh1cmwpOwotCi0gICAgICAgIEdPd25QdHI8Z2NoYXI+IHJl
c3VsdERhdGEoZ19zdHJkdXAocmVzdWx0LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgZ3RrX3Nl
bGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRhLCBuZXRzY2FwZVVSTEF0b20sIDgsCi0gICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KHJlc3VsdERhdGEuZ2V0KCkp
LCBzdHJsZW4ocmVzdWx0RGF0YS5nZXQoKSkgKyAxKTsKLQotICAgIH0gZWxzZSBpZiAoaW5mbyA9
PSBUYXJnZXRUeXBlSW1hZ2UpCi0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfcGl4YnVm
KHNlbGVjdGlvbkRhdGEsIGRhdGFPYmplY3QtPmltYWdlKCkpOwotCi0gICAgZWxzZSBpZiAoaW5m
byA9PSBUYXJnZXRUeXBlU21hcnRQYXN0ZSkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3Nl
dF90ZXh0KHNlbGVjdGlvbkRhdGEsICIiLCAtMSk7Ci19Ci0KLUd0a1RhcmdldExpc3QqIFBhc3Rl
Ym9hcmRIZWxwZXI6OnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqIGRhdGFP
YmplY3QsIFNtYXJ0UGFzdGVJbmNsdXNpb24gc2hvdWxkSW5sdWRlU21hcnRQYXN0ZSkKLXsKLSAg
ICBHdGtUYXJnZXRMaXN0KiBsaXN0ID0gZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKTsKLQotICAg
IGlmIChkYXRhT2JqZWN0LT5oYXNUZXh0KCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRf
dGV4dF90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVUZXh0KTsKLQotICAgIGlmIChkYXRhT2JqZWN0
LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCBtYXJrdXBB
dG9tLCAwLCBUYXJnZXRUeXBlTWFya3VwKTsKLQotICAgIGlmIChkYXRhT2JqZWN0LT5oYXNVUklM
aXN0KCkpIHsKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0cyhsaXN0LCBU
YXJnZXRUeXBlVVJJTGlzdCk7Ci0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgbmV0
c2NhcGVVUkxBdG9tLCAwLCBUYXJnZXRUeXBlTmV0c2NhcGVVUkwpOwotICAgIH0KLQotICAgIGlm
IChkYXRhT2JqZWN0LT5oYXNJbWFnZSgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2lt
YWdlX3RhcmdldHMobGlzdCwgVGFyZ2V0VHlwZUltYWdlLCBUUlVFKTsKLQotICAgIGlmIChzaG91
bGRJbmx1ZGVTbWFydFBhc3RlID09IEluY2x1ZGVTbWFydFBhc3RlKQotICAgICAgICBndGtfdGFy
Z2V0X2xpc3RfYWRkKGxpc3QsIHNtYXJ0UGFzdGVBdG9tLCAwLCBUYXJnZXRUeXBlU21hcnRQYXN0
ZSk7Ci0KLSAgICByZXR1cm4gbGlzdDsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxs
RGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRhKiBkYXRhLCBndWludCBpbmZv
LCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAgIGlmICghZ3RrX3NlbGVjdGlvbl9k
YXRhX2dldF9kYXRhKGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHZGtBdG9tIHRhcmdl
dCA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFyZ2V0KGRhdGEpOwotICAgIGlmICh0YXJnZXQg
PT0gdGV4dFBsYWluQXRvbSkKLSAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChzZWxlY3Rpb25E
YXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKLSAgICBlbHNlIGlmICh0YXJnZXQgPT0gbWFya3VwQXRv
bSkgewotICAgICAgICBTdHJpbmcgbWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0
YSkpOwotICAgICAgICByZW1vdmVNYXJrdXBQcmVmaXgobWFya3VwKTsKLSAgICAgICAgZGF0YU9i
amVjdC0+c2V0TWFya3VwKG1hcmt1cCk7Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gdXJpTGlz
dEF0b20pIHsKLSAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9V
VEY4U3RyaW5nKGRhdGEpKTsKLSAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBuZXRzY2FwZVVSTEF0
b20pIHsKLSAgICAgICAgU3RyaW5nIHVybFdpdGhMYWJlbChzZWxlY3Rpb25EYXRhVG9VVEY4U3Ry
aW5nKGRhdGEpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gcGllY2VzOwotICAgICAgICB1cmxX
aXRoTGFiZWwuc3BsaXQoIlxuIiwgcGllY2VzKTsKLQotICAgICAgICAvLyBHaXZlIHByZWZlcmVu
Y2UgdG8gdGV4dC91cmktbGlzdCBoZXJlLCBhcyBpdCBjYW4gaG9sZCBtb3JlCi0gICAgICAgIC8v
IHRoYW4gb25lIFVSSSBidXQgc3RpbGwgdGFrZSAgdGhlIGxhYmVsIGlmIHRoZXJlIGlzIG9uZS4K
LSAgICAgICAgaWYgKCFkYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpCi0gICAgICAgICAgICBkYXRh
T2JqZWN0LT5zZXRVUklMaXN0KHBpZWNlc1swXSk7Ci0gICAgICAgIGlmIChwaWVjZXMuc2l6ZSgp
ID4gMSkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQocGllY2VzWzFdKTsKLSAgICB9
Ci19Ci0KLVZlY3RvcjxHZGtBdG9tPiBQYXN0ZWJvYXJkSGVscGVyOjpkcm9wQXRvbXNGb3JDb250
ZXh0KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICAv
LyBBbHdheXMgc2VhcmNoIGZvciB0aGVzZSBjb21tb24gYXRvbXMuCi0gICAgVmVjdG9yPEdka0F0
b20+IGRyb3BBdG9tczsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKHRleHRQbGFpbkF0b20pOwotICAg
IGRyb3BBdG9tcy5hcHBlbmQobWFya3VwQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZCh1cmlM
aXN0QXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZChuZXRzY2FwZVVSTEF0b20pOwotCi0gICAg
Ly8gRm9yIGltYWdlcywgdHJ5IHRvIGZpbmQgdGhlIG1vc3QgYXBwbGljYWJsZSBpbWFnZSB0eXBl
LgotICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gbGlzdCA9IGFkb3B0R1JlZihndGtfdGFyZ2V0
X2xpc3RfbmV3KDAsIDApKTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMo
bGlzdC5nZXQoKSwgVGFyZ2V0VHlwZUltYWdlLCBUUlVFKTsKLSAgICBHZGtBdG9tIGF0b20gPSBn
dGtfZHJhZ19kZXN0X2ZpbmRfdGFyZ2V0KHdpZGdldCwgY29udGV4dCwgbGlzdC5nZXQoKSk7Ci0g
ICAgaWYgKGF0b20gIT0gR0RLX05PTkUpCi0gICAgICAgIGRyb3BBdG9tcy5hcHBlbmQoYXRvbSk7
Ci0KLSAgICByZXR1cm4gZHJvcEF0b21zOwotfQotCi1zdGF0aWMgRGF0YU9iamVjdEd0ayogc2V0
dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSAwOwotCi1zdGF0aWMgdm9pZCBnZXRDbGlwYm9hcmRD
b250ZW50c0NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBHdGtTZWxlY3Rpb25EYXRh
ICpzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBncG9pbnRlciBkYXRhKQotewotICAgIERhdGFP
YmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJv
YXJkKTsKLSAgICBBU1NFUlQoZGF0YU9iamVjdCk7Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVm
YXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwg
aW5mbywgZGF0YU9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyQ2xpcGJvYXJkQ29udGVu
dHNDYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJk
KGNsaXBib2FyZCk7Ci0gICAgQVNTRVJUKGRhdGFPYmplY3QpOwotCi0gICAgLy8gT25seSBjbGVh
ciB0aGUgRGF0YU9iamVjdCBmb3IgdGhpcyBjbGlwYm9hcmQgaWYgd2UgYXJlIG5vdCBjdXJyZW50
bHkgc2V0dGluZyBpdC4KLSAgICBpZiAoZGF0YU9iamVjdCAhPSBzZXR0aW5nQ2xpcGJvYXJkRGF0
YU9iamVjdCkKLSAgICAgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIGlmICghZGF0
YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0Nsb3N1cmUqIGNhbGxiYWNrID0gc3RhdGljX2Nh
c3Q8R0Nsb3N1cmUqPihkYXRhKTsKLSAgICBHVmFsdWUgZmlyc3RBcmd1bWVudCA9IHswLCB7ezB9
fX07Ci0gICAgZ192YWx1ZV9pbml0KCZmaXJzdEFyZ3VtZW50LCBHX1RZUEVfUE9JTlRFUik7Ci0g
ICAgZ192YWx1ZV9zZXRfcG9pbnRlcigmZmlyc3RBcmd1bWVudCwgY2xpcGJvYXJkKTsKLSAgICBn
X2Nsb3N1cmVfaW52b2tlKGNhbGxiYWNrLCAwLCAxLCAmZmlyc3RBcmd1bWVudCwgMCk7Ci0gICAg
Z19jbG9zdXJlX3VucmVmKGNhbGxiYWNrKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjp3
cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBTbWFydFBhc3Rl
SW5jbHVzaW9uIGluY2x1ZGVTbWFydFBhc3RlLCBHQ2xvc3VyZSogY2FsbGJhY2spCi17Ci0gICAg
RGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChj
bGlwYm9hcmQpOwotICAgIEd0a1RhcmdldExpc3QqIGxpc3QgPSB0YXJnZXRMaXN0Rm9yRGF0YU9i
amVjdChkYXRhT2JqZWN0LCBpbmNsdWRlU21hcnRQYXN0ZSk7Ci0KLSAgICBpbnQgbnVtYmVyT2ZU
YXJnZXRzOwotICAgIEd0a1RhcmdldEVudHJ5KiB0YWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3
X2Zyb21fbGlzdChsaXN0LCAmbnVtYmVyT2ZUYXJnZXRzKTsKLQotICAgIGlmIChudW1iZXJPZlRh
cmdldHMgPiAwICYmIHRhYmxlKSB7Ci0gICAgICAgIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0
ID0gZGF0YU9iamVjdDsKLQotICAgICAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoY2xp
cGJvYXJkLCB0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAotICAgICAgICAgICAgZ2V0Q2xpcGJvYXJk
Q29udGVudHNDYWxsYmFjaywgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBjYWxsYmFj
ayk7Ci0gICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nhbl9zdG9yZShjbGlwYm9hcmQsIDAsIDAp
OwotCi0gICAgICAgIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0gMDsKLQotICAgIH0gZWxz
ZQotICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7Ci0KLSAgICBpZiAodGFi
bGUpCi0gICAgICAgIGd0a190YXJnZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJnZXRz
KTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYobGlzdCk7Ci19Ci0KLWJvb2wgUGFzdGVib2Fy
ZEhlbHBlcjo6Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkKQotewotICAgIHJldHVybiBndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0
X2F2YWlsYWJsZShjbGlwYm9hcmQsIHNtYXJ0UGFzdGVBdG9tKTsKLX0KLQotfQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDIzOGY4MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBMdWNhIEJydW5vIDxsZXRoYWxtYW44OEBn
bWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJr
aXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2lmbmRlZiBQYXN0ZWJvYXJkSGVscGVyX2gKLSNkZWZpbmUgUGFzdGVi
b2FyZEhlbHBlcl9oCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIERhdGFPYmplY3RHdGs7Ci0KLWNsYXNzIFBhc3RlYm9hcmRIZWxwZXIgewotcHVi
bGljOgotICAgIFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkSGVs
cGVyKCk7Ci0gICAgc3RhdGljIFBhc3RlYm9hcmRIZWxwZXIqIGRlZmF1bHRQYXN0ZWJvYXJkSGVs
cGVyKCk7Ci0KLSAgICB2b2lkIHNldFVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoYm9vbCB1
c2VQcmltYXJ5KSB7IG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCA9IHVzZVByaW1hcnk7
IH0KLSAgICBib29sIHVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKSB7IHJldHVybiBtX3Vz
ZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQ7IH0KLQotICAgIGVudW0gU21hcnRQYXN0ZUluY2x1
c2lvbiB7IEluY2x1ZGVTbWFydFBhc3RlLCBEb05vdEluY2x1ZGVTbWFydFBhc3RlIH07Ci0KLSAg
ICBHdGtDbGlwYm9hcmQqIGdldEN1cnJlbnRDbGlwYm9hcmQoRnJhbWUqKTsKLSAgICBHdGtDbGlw
Ym9hcmQqIGdldENsaXBib2FyZChGcmFtZSopIGNvbnN0OwotICAgIEd0a0NsaXBib2FyZCogZ2V0
UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChGcmFtZSopIGNvbnN0OwotICAgIEd0a1RhcmdldExp
c3QqIHRhcmdldExpc3QoKSBjb25zdDsKLSAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9y
RGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKiwgU21hcnRQYXN0ZUluY2x1c2lvbiA9IERvTm90SW5j
bHVkZVNtYXJ0UGFzdGUpOwotICAgIHZvaWQgZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9u
RGF0YSosIGd1aW50LCBEYXRhT2JqZWN0R3RrKik7Ci0gICAgdm9pZCBmaWxsRGF0YU9iamVjdEZy
b21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKLSAg
ICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFn
Q29udGV4dCopOwotICAgIHZvaWQgd3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQq
LCBTbWFydFBhc3RlSW5jbHVzaW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUq
ID0gMCk7Ci0gICAgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqKTsKLQot
ICAgIGVudW0gUGFzdGVib2FyZFRhcmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRU
eXBlVGV4dCwgVGFyZ2V0VHlwZUltYWdlLCBUYXJnZXRUeXBlVVJJTGlzdCwgVGFyZ2V0VHlwZU5l
dHNjYXBlVVJMLCBUYXJnZXRUeXBlU21hcnRQYXN0ZSwgVGFyZ2V0VHlwZVVua25vd24gfTsKLSAg
ICBib29sIGNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9hcmQq
KTsKLQotcHJpdmF0ZToKLSAgICBHdGtUYXJnZXRMaXN0KiBtX3RhcmdldExpc3Q7Ci0gICAgYm9v
bCBtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQ
YXN0ZWJvYXJkSGVscGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcwNmQ2ZTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotCi0jaW5jbHVkZSAi
R3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKLQotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBU
aGlzIGlzIGluY29tcGxldGUuICBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gbWlycm9yCi0vLyBt
b3JlIGxpa2Ugd2hhdCBGaXJlZm94IGRvZXMsIGFuZCBnZW5lcmF0ZSB0aGVzZSBzd2l0Y2ggc3Rh
dGVtZW50cwotLy8gYXQgYnVpbGQgdGltZS4KLVN0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OmtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKHVuc2lnbmVkIGtleUNvZGUpCi17Ci0gICAgc3dp
dGNoIChrZXlDb2RlKSB7Ci0gICAgICAgIGNhc2UgR0RLX01lbnU6Ci0gICAgICAgIGNhc2UgR0RL
X0FsdF9MOgotICAgICAgICBjYXNlIEdES19BbHRfUjoKLSAgICAgICAgICAgIHJldHVybiAiQWx0
IjsKLSAgICAgICAgY2FzZSBHREtfQ2xlYXI6Ci0gICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsK
LSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAgICAgICAgIHJldHVybiAiRG93biI7Ci0gICAg
ICAgICAgICAvLyAiRW5kIgotICAgICAgICBjYXNlIEdES19FbmQ6Ci0gICAgICAgICAgICByZXR1
cm4gIkVuZCI7Ci0gICAgICAgICAgICAvLyAiRW50ZXIiCi0gICAgICAgIGNhc2UgR0RLX0lTT19F
bnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Ci0gICAgICAgIGNhc2UgR0RLX1JldHVy
bjoKLSAgICAgICAgICAgIHJldHVybiAiRW50ZXIiOwotICAgICAgICBjYXNlIEdES19FeGVjdXRl
OgotICAgICAgICAgICAgcmV0dXJuICJFeGVjdXRlIjsKLSAgICAgICAgY2FzZSBHREtfRjE6Ci0g
ICAgICAgICAgICByZXR1cm4gIkYxIjsKLSAgICAgICAgY2FzZSBHREtfRjI6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYyIjsKLSAgICAgICAgY2FzZSBHREtfRjM6Ci0gICAgICAgICAgICByZXR1cm4g
IkYzIjsKLSAgICAgICAgY2FzZSBHREtfRjQ6Ci0gICAgICAgICAgICByZXR1cm4gIkY0IjsKLSAg
ICAgICAgY2FzZSBHREtfRjU6Ci0gICAgICAgICAgICByZXR1cm4gIkY1IjsKLSAgICAgICAgY2Fz
ZSBHREtfRjY6Ci0gICAgICAgICAgICByZXR1cm4gIkY2IjsKLSAgICAgICAgY2FzZSBHREtfRjc6
Ci0gICAgICAgICAgICByZXR1cm4gIkY3IjsKLSAgICAgICAgY2FzZSBHREtfRjg6Ci0gICAgICAg
ICAgICByZXR1cm4gIkY4IjsKLSAgICAgICAgY2FzZSBHREtfRjk6Ci0gICAgICAgICAgICByZXR1
cm4gIkY5IjsKLSAgICAgICAgY2FzZSBHREtfRjEwOgotICAgICAgICAgICAgcmV0dXJuICJGMTAi
OwotICAgICAgICBjYXNlIEdES19GMTE6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMSI7Ci0gICAg
ICAgIGNhc2UgR0RLX0YxMjoKLSAgICAgICAgICAgIHJldHVybiAiRjEyIjsKLSAgICAgICAgY2Fz
ZSBHREtfRjEzOgotICAgICAgICAgICAgcmV0dXJuICJGMTMiOwotICAgICAgICBjYXNlIEdES19G
MTQ6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNToKLSAg
ICAgICAgICAgIHJldHVybiAiRjE1IjsKLSAgICAgICAgY2FzZSBHREtfRjE2OgotICAgICAgICAg
ICAgcmV0dXJuICJGMTYiOwotICAgICAgICBjYXNlIEdES19GMTc6Ci0gICAgICAgICAgICByZXR1
cm4gIkYxNyI7Ci0gICAgICAgIGNhc2UgR0RLX0YxODoKLSAgICAgICAgICAgIHJldHVybiAiRjE4
IjsKLSAgICAgICAgY2FzZSBHREtfRjE5OgotICAgICAgICAgICAgcmV0dXJuICJGMTkiOwotICAg
ICAgICBjYXNlIEdES19GMjA6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMCI7Ci0gICAgICAgIGNh
c2UgR0RLX0YyMToKLSAgICAgICAgICAgIHJldHVybiAiRjIxIjsKLSAgICAgICAgY2FzZSBHREtf
RjIyOgotICAgICAgICAgICAgcmV0dXJuICJGMjIiOwotICAgICAgICBjYXNlIEdES19GMjM6Ci0g
ICAgICAgICAgICByZXR1cm4gIkYyMyI7Ci0gICAgICAgIGNhc2UgR0RLX0YyNDoKLSAgICAgICAg
ICAgIHJldHVybiAiRjI0IjsKLSAgICAgICAgY2FzZSBHREtfSGVscDoKLSAgICAgICAgICAgIHJl
dHVybiAiSGVscCI7Ci0gICAgICAgIGNhc2UgR0RLX0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4g
IkhvbWUiOwotICAgICAgICBjYXNlIEdES19JbnNlcnQ6Ci0gICAgICAgICAgICByZXR1cm4gIklu
c2VydCI7Ci0gICAgICAgIGNhc2UgR0RLX0xlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gIkxlZnQi
OwotICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gIlBhZ2VE
b3duIjsKLSAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiAiUGFn
ZVVwIjsKLSAgICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4gIlBhdXNl
IjsKLSAgICAgICAgY2FzZSBHREtfMzI3MF9QcmludFNjcmVlbjoKLSAgICAgICAgY2FzZSBHREtf
UHJpbnQ6Ci0gICAgICAgICAgICByZXR1cm4gIlByaW50U2NyZWVuIjsKLSAgICAgICAgY2FzZSBH
REtfUmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4gIlJpZ2h0IjsKLSAgICAgICAgY2FzZSBHREtf
U2VsZWN0OgotICAgICAgICAgICAgcmV0dXJuICJTZWxlY3QiOwotICAgICAgICBjYXNlIEdES19V
cDoKLSAgICAgICAgICAgIHJldHVybiAiVXAiOwotICAgICAgICAgICAgLy8gU3RhbmRhcmQgc2F5
cyB0aGF0IERFTCBiZWNvbWVzIFUrMDA3Ri4KLSAgICAgICAgY2FzZSBHREtfRGVsZXRlOgotICAg
ICAgICAgICAgcmV0dXJuICJVKzAwN0YiOwotICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6Ci0g
ICAgICAgICAgICByZXR1cm4gIlUrMDAwOCI7Ci0gICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1Rh
YjoKLSAgICAgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgotICAgICAgICBjYXNlIEdES19UYWI6
Ci0gICAgICAgICAgICByZXR1cm4gIlUrMDAwOSI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIGdka19rZXl2YWxfdG9fdW5pY29k
ZShnZGtfa2V5dmFsX3RvX3VwcGVyKGtleUNvZGUpKSk7Ci0gICAgfQotfQotCi1pbnQgUGxhdGZv
cm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUodW5zaWduZWQga2V5
Y29kZSkKLXsKLSAgICBzd2l0Y2ggKGtleWNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfS1BfMDoK
LSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQwOy8vICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS1BfMToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQx
Oy8vICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfMjoKLSAg
ICAgICAgICAgIHJldHVybiAgVktfTlVNUEFEMjsgLy8gKDYyKSBOdW1lcmljIGtleXBhZCAyIGtl
eQotICAgICAgICBjYXNlIEdES19LUF8zOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDM7
IC8vICg2MykgTnVtZXJpYyBrZXlwYWQgMyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0tQXzU6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENTsg
Ly8oNjUpIE51bWVyaWMga2V5cGFkIDUga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzY6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfTlVNUEFENjsgLy8gKDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQot
ICAgICAgICBjYXNlIEdES19LUF83OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8v
ICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfODoKLSAgICAg
ICAgICAgIHJldHVybiBWS19OVU1QQUQ4OyAvLyAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0tQXzk6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEOTsgLy8g
KDY5KSBOdW1lcmljIGtleXBhZCA5IGtleQotICAgICAgICBjYXNlIEdES19LUF9NdWx0aXBseToK
LSAgICAgICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKLSAg
ICAgICAgY2FzZSBHREtfS1BfQWRkOgotICAgICAgICAgICAgcmV0dXJuIFZLX0FERDsgLy8gKDZC
KSBBZGQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgotICAgICAgICAgICAgcmV0
dXJuIFZLX1NVQlRSQUNUOyAvLyAoNkQpIFN1YnRyYWN0IGtleQotICAgICAgICBjYXNlIEdES19L
UF9EZWNpbWFsOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1h
bCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfRGl2aWRlOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0RJVklERTsgLy8gKDZGKSBEaXZpZGUga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfS1BfUGFnZV9V
cDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQotICAg
ICAgICBjYXNlIEdES19LUF9QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfTkVYVDsg
Ly8gKDIyKSBQQUdFIERPV04ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0VuZDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQotICAgICAgICBjYXNlIEdES19LUF9I
b21lOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICAg
ICAgY2FzZSBHREtfS1BfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUp
IExFRlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1VwOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19LUF9SaWdo
dDoKLSAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkK
LSAgICAgICAgY2FzZSBHREtfS1BfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ET1dOOyAv
LyAoMjgpIERPV04gQVJST1cga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0JBQ0s7IC8vICgwOCkgQkFDS1NQQUNFIGtleQotICAgICAgICBj
YXNlIEdES19JU09fTGVmdF9UYWI6Ci0gICAgICAgIGNhc2UgR0RLXzMyNzBfQmFja1RhYjoKLSAg
ICAgICAgY2FzZSBHREtfVGFiOgotICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBU
QUIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NsZWFyOgotICAgICAgICAgICAgcmV0dXJuIFZLX0NM
RUFSOyAvLyAoMEMpIENMRUFSIGtleQotICAgICAgICBjYXNlIEdES19JU09fRW50ZXI6Ci0gICAg
ICAgIGNhc2UgR0RLX0tQX0VudGVyOgotICAgICAgICBjYXNlIEdES19SZXR1cm46Ci0gICAgICAg
ICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygwRCkgUmV0dXJuIGtleQotCi0gICAgICAgICAgICAv
LyBWS19TSElGVCAoMTApIFNISUZUIGtleQotICAgICAgICAgICAgLy8gVktfQ09OVFJPTCAoMTEp
IENUUkwga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfTWVudToKLSAgICAgICAgICAgIHJldHVybiBW
S19BUFBTOyAgLy8gKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQotCi0g
ICAgICAgICAgICAvLyBWS19NRU5VICgxMikgQUxUIGtleQotCi0gICAgICAgIGNhc2UgR0RLX1Bh
dXNlOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBBVVNFIGtleQotICAg
ICAgICBjYXNlIEdES19DYXBzX0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfQ0FQSVRBTDsg
Ly8gKDE0KSBDQVBTIExPQ0sga2V5Ci0gICAgICAgIGNhc2UgR0RLX0thbmFfTG9jazoKLSAgICAg
ICAgY2FzZSBHREtfS2FuYV9TaGlmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5BOyAvLyAo
MTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCi0gICAgICAgIGNhc2UgR0RL
X0hhbmd1bDoKLSAgICAgICAgICAgIHJldHVybiBWS19IQU5HVUw7IC8vIFZLX0hBTkdVTCAoMTUp
IElNRSBIYW5ndWwgbW9kZQotICAgICAgICAgICAgLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEg
bW9kZQotICAgICAgICAgICAgLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9kZQotICAgICAg
ICBjYXNlIEdES19IYW5ndWxfSGFuamE6Ci0gICAgICAgICAgICByZXR1cm4gVktfSEFOSkE7IC8v
ICgxOSkgSU1FIEhhbmphIG1vZGUKLSAgICAgICAgY2FzZSBHREtfS2Fuamk6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfS0FOSkk7IC8vICgxOSkgSU1FIEthbmppIG1vZGUKLSAgICAgICAgY2FzZSBH
REtfRXNjYXBlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5
Ci0gICAgICAgICAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQKLSAgICAgICAgICAg
IC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAotICAgICAgICAgICAgLy8gVktf
QUNDRVBUICgxRSkgSU1FIGFjY2VwdAotICAgICAgICAgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYp
IElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0Ci0gICAgICAgIGNhc2UgR0RLX3NwYWNlOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQQUNFQkFSCi0gICAgICAgIGNhc2UgR0RL
X1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBr
ZXkKLSAgICAgICAgY2FzZSBHREtfUGFnZV9Eb3duOgotICAgICAgICAgICAgcmV0dXJuIFZLX05F
WFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQotICAgICAgICBjYXNlIEdES19FbmQ6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKLSAgICAgICAgY2FzZSBHREtfSG9t
ZToKLSAgICAgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5Ci0gICAgICAg
IGNhc2UgR0RLX0xlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZU
IEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19VcDoKLSAgICAgICAgICAgIHJldHVybiBWS19V
UDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfUmlnaHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5Ci0gICAgICAgIGNh
c2UgR0RLX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFS
Uk9XIGtleQotICAgICAgICBjYXNlIEdES19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4gVktf
U0VMRUNUOyAvLyAoMjkpIFNFTEVDVCBrZXkKLSAgICAgICAgY2FzZSBHREtfUHJpbnQ6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVOIGtleQotICAg
ICAgICBjYXNlIEdES19FeGVjdXRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7Ly8g
KDJCKSBFWEVDVVRFIGtleQotICAgICAgICBjYXNlIEdES19JbnNlcnQ6Ci0gICAgICAgIGNhc2Ug
R0RLX0tQX0luc2VydDoKLSAgICAgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5T
IGtleQotICAgICAgICBjYXNlIEdES19EZWxldGU6Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RlbGV0
ZToKLSAgICAgICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQotICAgICAg
ICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVM
UCBrZXkKLSAgICAgICAgY2FzZSBHREtfMDoKLSAgICAgICAgY2FzZSBHREtfcGFyZW5yaWdodDoK
LSAgICAgICAgICAgIHJldHVybiBWS18wOyAgICAvLyAgKDMwKSAwKSBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfMToKLSAgICAgICAgY2FzZSBHREtfZXhjbGFtOgotICAgICAgICAgICAgcmV0dXJuIFZL
XzE7IC8vICAoMzEpIDEgISBrZXkKLSAgICAgICAgY2FzZSBHREtfMjoKLSAgICAgICAgY2FzZSBH
REtfYXQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfMjsgLy8gICgzMikgMiAmIGtleQotICAgICAg
ICBjYXNlIEdES18zOgotICAgICAgICBjYXNlIEdES19udW1iZXJzaWduOgotICAgICAgICAgICAg
cmV0dXJuIFZLXzM7IC8vY2FzZSAnMyc6IGNhc2UgJyMnOwotICAgICAgICBjYXNlIEdES180Ogot
ICAgICAgICBjYXNlIEdES19kb2xsYXI6IC8vICAoMzQpIDQga2V5ICckJzsKLSAgICAgICAgICAg
IHJldHVybiBWS180OwotICAgICAgICBjYXNlIEdES181OgotICAgICAgICBjYXNlIEdES19wZXJj
ZW50OgotICAgICAgICAgICAgcmV0dXJuIFZLXzU7IC8vICAoMzUpIDUga2V5ICAnJScKLSAgICAg
ICAgY2FzZSBHREtfNjoKLSAgICAgICAgY2FzZSBHREtfYXNjaWljaXJjdW06Ci0gICAgICAgICAg
ICByZXR1cm4gVktfNjsgLy8gICgzNikgNiBrZXkgICdeJwotICAgICAgICBjYXNlIEdES183Ogot
ICAgICAgICBjYXNlIEdES19hbXBlcnNhbmQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfNzsgLy8g
ICgzNykgNyBrZXkgIGNhc2UgJyYnCi0gICAgICAgIGNhc2UgR0RLXzg6Ci0gICAgICAgIGNhc2Ug
R0RLX2FzdGVyaXNrOgotICAgICAgICAgICAgcmV0dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAn
KicKLSAgICAgICAgY2FzZSBHREtfOToKLSAgICAgICAgY2FzZSBHREtfcGFyZW5sZWZ0OgotICAg
ICAgICAgICAgcmV0dXJuIFZLXzk7IC8vICAoMzkpIDkga2V5ICcoJwotICAgICAgICBjYXNlIEdE
S19hOgotICAgICAgICBjYXNlIEdES19BOgotICAgICAgICAgICAgcmV0dXJuIFZLX0E7IC8vICAo
NDEpIEEga2V5IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7Ci0gICAgICAgIGNhc2Ug
R0RLX2I6Ci0gICAgICAgIGNhc2UgR0RLX0I6Ci0gICAgICAgICAgICByZXR1cm4gVktfQjsgLy8g
ICg0MikgQiBrZXkgY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsKLSAgICAgICAgY2Fz
ZSBHREtfYzoKLSAgICAgICAgY2FzZSBHREtfQzoKLSAgICAgICAgICAgIHJldHVybiBWS19DOyAv
LyAgKDQzKSBDIGtleSBjYXNlICdjJzogY2FzZSAnQyc6IHJldHVybiAweDQzOwotICAgICAgICBj
YXNlIEdES19kOgotICAgICAgICBjYXNlIEdES19EOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Q7
IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNlICdEJzogcmV0dXJuIDB4NDQ7Ci0gICAgICAg
IGNhc2UgR0RLX2U6Ci0gICAgICAgIGNhc2UgR0RLX0U6Ci0gICAgICAgICAgICByZXR1cm4gVktf
RTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4gMHg0NTsKLSAgICAg
ICAgY2FzZSBHREtfZjoKLSAgICAgICAgY2FzZSBHREtfRjoKLSAgICAgICAgICAgIHJldHVybiBW
S19GOyAvLyAgKDQ2KSBGIGtleSBjYXNlICdmJzogY2FzZSAnRic6IHJldHVybiAweDQ2OwotICAg
ICAgICBjYXNlIEdES19nOgotICAgICAgICBjYXNlIEdES19HOgotICAgICAgICAgICAgcmV0dXJu
IFZLX0c7IC8vICAoNDcpIEcga2V5IGNhc2UgJ2cnOiBjYXNlICdHJzogcmV0dXJuIDB4NDc7Ci0g
ICAgICAgIGNhc2UgR0RLX2g6Ci0gICAgICAgIGNhc2UgR0RLX0g6Ci0gICAgICAgICAgICByZXR1
cm4gVktfSDsgLy8gICg0OCkgSCBrZXkgY2FzZSAnaCc6IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsK
LSAgICAgICAgY2FzZSBHREtfaToKLSAgICAgICAgY2FzZSBHREtfSToKLSAgICAgICAgICAgIHJl
dHVybiBWS19JOyAvLyAgKDQ5KSBJIGtleSBjYXNlICdpJzogY2FzZSAnSSc6IHJldHVybiAweDQ5
OwotICAgICAgICBjYXNlIEdES19qOgotICAgICAgICBjYXNlIEdES19KOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNhc2UgJ2onOiBjYXNlICdKJzogcmV0dXJuIDB4
NEE7Ci0gICAgICAgIGNhc2UgR0RLX2s6Ci0gICAgICAgIGNhc2UgR0RLX0s6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfSzsgLy8gICg0QikgSyBrZXkgY2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4g
MHg0QjsKLSAgICAgICAgY2FzZSBHREtfbDoKLSAgICAgICAgY2FzZSBHREtfTDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19MOyAvLyAgKDRDKSBMIGtleSBjYXNlICdsJzogY2FzZSAnTCc6IHJldHVy
biAweDRDOwotICAgICAgICBjYXNlIEdES19tOgotICAgICAgICBjYXNlIEdES19NOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQpIE0ga2V5IGNhc2UgJ20nOiBjYXNlICdNJzogcmV0
dXJuIDB4NEQ7Ci0gICAgICAgIGNhc2UgR0RLX246Ci0gICAgICAgIGNhc2UgR0RLX046Ci0gICAg
ICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkgTiBrZXkgY2FzZSAnbic6IGNhc2UgJ04nOiBy
ZXR1cm4gMHg0RTsKLSAgICAgICAgY2FzZSBHREtfbzoKLSAgICAgICAgY2FzZSBHREtfTzoKLSAg
ICAgICAgICAgIHJldHVybiBWS19POyAvLyAgKDRGKSBPIGtleSBjYXNlICdvJzogY2FzZSAnTyc6
IHJldHVybiAweDRGOwotICAgICAgICBjYXNlIEdES19wOgotICAgICAgICBjYXNlIEdES19QOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQ
JzogcmV0dXJuIDB4NTA7Ci0gICAgICAgIGNhc2UgR0RLX3E6Ci0gICAgICAgIGNhc2UgR0RLX1E6
Ci0gICAgICAgICAgICByZXR1cm4gVktfUTsgLy8gICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2Ug
J1EnOiByZXR1cm4gMHg1MTsKLSAgICAgICAgY2FzZSBHREtfcjoKLSAgICAgICAgY2FzZSBHREtf
UjoKLSAgICAgICAgICAgIHJldHVybiBWS19SOyAvLyAgKDUyKSBSIGtleSBjYXNlICdyJzogY2Fz
ZSAnUic6IHJldHVybiAweDUyOwotICAgICAgICBjYXNlIEdES19zOgotICAgICAgICBjYXNlIEdE
S19TOgotICAgICAgICAgICAgcmV0dXJuIFZLX1M7IC8vICAoNTMpIFMga2V5IGNhc2UgJ3MnOiBj
YXNlICdTJzogcmV0dXJuIDB4NTM7Ci0gICAgICAgIGNhc2UgR0RLX3Q6Ci0gICAgICAgIGNhc2Ug
R0RLX1Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfVDsgLy8gICg1NCkgVCBrZXkgY2FzZSAndCc6
IGNhc2UgJ1QnOiByZXR1cm4gMHg1NDsKLSAgICAgICAgY2FzZSBHREtfdToKLSAgICAgICAgY2Fz
ZSBHREtfVToKLSAgICAgICAgICAgIHJldHVybiBWS19VOyAvLyAgKDU1KSBVIGtleSBjYXNlICd1
JzogY2FzZSAnVSc6IHJldHVybiAweDU1OwotICAgICAgICBjYXNlIEdES192OgotICAgICAgICBj
YXNlIEdES19WOgotICAgICAgICAgICAgcmV0dXJuIFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2Ug
J3YnOiBjYXNlICdWJzogcmV0dXJuIDB4NTY7Ci0gICAgICAgIGNhc2UgR0RLX3c6Ci0gICAgICAg
IGNhc2UgR0RLX1c6Ci0gICAgICAgICAgICByZXR1cm4gVktfVzsgLy8gICg1NykgVyBrZXkgY2Fz
ZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4gMHg1NzsKLSAgICAgICAgY2FzZSBHREtfeDoKLSAgICAg
ICAgY2FzZSBHREtfWDoKLSAgICAgICAgICAgIHJldHVybiBWS19YOyAvLyAgKDU4KSBYIGtleSBj
YXNlICd4JzogY2FzZSAnWCc6IHJldHVybiAweDU4OwotICAgICAgICBjYXNlIEdES195OgotICAg
ICAgICBjYXNlIEdES19ZOgotICAgICAgICAgICAgcmV0dXJuIFZLX1k7IC8vICAoNTkpIFkga2V5
IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0dXJuIDB4NTk7Ci0gICAgICAgIGNhc2UgR0RLX3o6Ci0g
ICAgICAgIGNhc2UgR0RLX1o6Ci0gICAgICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBr
ZXkgY2FzZSAneic6IGNhc2UgJ1onOiByZXR1cm4gMHg1QTsKLSAgICAgICAgY2FzZSBHREtfTWV0
YV9MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0xXSU47IC8vICg1QikgTGVmdCBXaW5kb3dzIGtl
eSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCi0gICAgICAgIGNhc2UgR0RLX01ldGFfUjoK
LSAgICAgICAgICAgIHJldHVybiBWS19SV0lOOyAvLyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChO
YXR1cmFsIGtleWJvYXJkKQotICAgICAgICAgICAgLy8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBT
bGVlcCBrZXkKLSAgICAgICAgICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkK
LSAgICAgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgICAg
ICAvLyBWS19ERUNJTUFMICg2RSkgRGVjaW1hbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0RJVklE
RSAoNkYpIERpdmlkZSBrZXkKLSAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJv
dmUKLQotICAgICAgICBjYXNlIEdES19OdW1fTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19O
VU1MT0NLOyAvLyAoOTApIE5VTSBMT0NLIGtleQotCi0gICAgICAgIGNhc2UgR0RLX1Njcm9sbF9M
b2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NDUk9MTDsgLy8gKDkxKSBTQ1JPTEwgTE9DSyBr
ZXkKLQotICAgICAgICBjYXNlIEdES19TaGlmdF9MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0xT
SElGVDsgLy8gKEEwKSBMZWZ0IFNISUZUIGtleQotICAgICAgICBjYXNlIEdES19TaGlmdF9SOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX1JTSElGVDsgLy8gKEExKSBSaWdodCBTSElGVCBrZXkKLSAg
ICAgICAgY2FzZSBHREtfQ29udHJvbF9MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0xDT05UUk9M
OyAvLyAoQTIpIExlZnQgQ09OVFJPTCBrZXkKLSAgICAgICAgY2FzZSBHREtfQ29udHJvbF9SOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX1JDT05UUk9MOyAvLyAoQTMpIFJpZ2h0IENPTlRST0wga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9MOgotICAgICAgICAgICAgcmV0dXJuIFZLX0xNRU5VOyAv
LyAoQTQpIExlZnQgTUVOVSBrZXkKLSAgICAgICAgY2FzZSBHREtfQWx0X1I6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfUk1FTlU7IC8vIChBNSkgUmlnaHQgTUVOVSBrZXkKLQotICAgICAgICAgICAg
Ly8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5
Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgRm9yd2FyZCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfUkVGUkVTSCAo
QTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQotICAgICAgICAgICAgLy8g
VktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Ci0g
ICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBTZWFyY2gga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZBVk9SSVRFUyAoQUIp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5Ci0gICAgICAgICAgICAvLyBW
S19CUk9XU0VSX0hPTUUgKEFDKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhv
bWUga2V5Ci0gICAgICAgICAgICAvLyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9Y
UDogVm9sdW1lIE11dGUga2V5Ci0gICAgICAgICAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdp
bmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5Ci0gICAgICAgICAgICAvLyBWS19WT0xVTUVf
VVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBVcCBrZXkKLSAgICAgICAgICAgIC8vIFZL
X01FRElBX05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Ci0g
ICAgICAgICAgICAvLyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQ
cmV2aW91cyBUcmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1NUT1AgKEIyKSBXaW5k
b3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19NRURJQV9QTEFZ
X1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQotICAgICAg
ICAgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwg
a2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUVESUFfU0VMRUNUIChCNSkgV2luZG93cyAy
MDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMSAo
QjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKLSAgICAgICAgICAg
IC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlv
biAyIGtleQotCi0gICAgICAgICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxh
bmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9Y
UDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5Ci0gICAgICAgIGNh
c2UgR0RLX3NlbWljb2xvbjoKLSAgICAgICAgY2FzZSBHREtfY29sb246Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50
cnkvcmVnaW9uLCB0aGUgJysnIGtleQotICAgICAgICBjYXNlIEdES19wbHVzOgotICAgICAgICBj
YXNlIEdES19lcXVhbDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fUExVUzsgLy9jYXNlICc9
JzogY2FzZSAnKyc6IHJldHVybiAweEJCOwotICAgICAgICAgICAgLy8gVktfT0VNX0NPTU1BIChC
QykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQot
ICAgICAgICBjYXNlIEdES19jb21tYToKLSAgICAgICAgY2FzZSBHREtfbGVzczoKLSAgICAgICAg
ICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8vY2FzZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhC
QzsKLSAgICAgICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9y
IGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKLSAgICAgICAgY2FzZSBHREtfbWludXM6
Ci0gICAgICAgIGNhc2UgR0RLX3VuZGVyc2NvcmU6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VN
X01JTlVTOyAvL2Nhc2UgJy0nOiBjYXNlICdfJzogcmV0dXJuIDB4QkQ7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVn
aW9uLCB0aGUgJy4nIGtleQotICAgICAgICBjYXNlIEdES19wZXJpb2Q6Ci0gICAgICAgIGNhc2Ug
R0RLX2dyZWF0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNX1BFUklPRDsgLy9jYXNlICcu
JzogY2FzZSAnPic6IHJldHVybiAweEJFOwotICAgICAgICAgICAgLy8gVktfT0VNXzIgKEJGKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnLz8n
IGtleQotICAgICAgICBjYXNlIEdES19zbGFzaDoKLSAgICAgICAgY2FzZSBHREtfcXVlc3Rpb246
Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzI7IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1
cm4gMHhCRjsKLSAgICAgICAgICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfYXNjaWl0aWxkZToKLSAgICAgICAgY2FzZSBHREtfcXVvdGVsZWZ0OgotICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7Ci0g
ICAgICAgICAgICAvLyBWS19PRU1fNCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBV
UyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycga2V5Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNr
ZXRsZWZ0OgotICAgICAgICBjYXNlIEdES19icmFjZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfT0VNXzQ7IC8vY2FzZSAnWyc6IGNhc2UgJ3snOiByZXR1cm4gMHhEQjsKLSAgICAgICAgICAg
IC8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYmFja3NsYXNoOgotICAg
ICAgICBjYXNlIEdES19iYXI6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzU7IC8vY2FzZSAn
XFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNiAoREQp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdd
fScga2V5Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNrZXRyaWdodDoKLSAgICAgICAgY2FzZSBHREtf
YnJhY2VyaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNh
c2UgJ30nOiByZXR1cm4gMHhERDsKLSAgICAgICAgICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBm
b3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2lu
ZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1x
dW90ZS9kb3VibGUtcXVvdGUnIGtleQotICAgICAgICBjYXNlIEdES19xdW90ZXJpZ2h0OgotICAg
ICAgICBjYXNlIEdES19xdW90ZWRibDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNzsgLy8g
Y2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4REU7Ci0gICAgICAgICAgICAvLyBWS19PRU1f
OCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuCi0gICAgICAgICAgICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQ
OiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRo
ZSBSVCAxMDIta2V5IGtleWJvYXJkCi0gICAgICAgICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkg
V2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBS
T0NFU1Mga2V5Ci0gICAgICAgICAgICAvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6
IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9r
ZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFs
IEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUg
aW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURP
V04sIGFuZCBXTV9LRVlVUAotICAgICAgICAgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5Ci0g
ICAgICAgICAgICAvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQotICAgICAgICAgICAgLy8gVktf
RVhTRUwgKEY4KSBFeFNlbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2Ug
RU9GIGtleQotICAgICAgICAgICAgLy8gVktfUExBWSAoRkEpIFBsYXkga2V5Ci0gICAgICAgICAg
ICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKLSAgICAgICAgICAgIC8vIFZLX05PTkFNRSAoRkMp
IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gICAgICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEg
a2V5Ci0gICAgICAgICAgICAvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKLSAgICAgICAg
Y2FzZSBHREtfRjE6Ci0gICAgICAgIGNhc2UgR0RLX0YyOgotICAgICAgICBjYXNlIEdES19GMzoK
LSAgICAgICAgY2FzZSBHREtfRjQ6Ci0gICAgICAgIGNhc2UgR0RLX0Y1OgotICAgICAgICBjYXNl
IEdES19GNjoKLSAgICAgICAgY2FzZSBHREtfRjc6Ci0gICAgICAgIGNhc2UgR0RLX0Y4OgotICAg
ICAgICBjYXNlIEdES19GOToKLSAgICAgICAgY2FzZSBHREtfRjEwOgotICAgICAgICBjYXNlIEdE
S19GMTE6Ci0gICAgICAgIGNhc2UgR0RLX0YxMjoKLSAgICAgICAgY2FzZSBHREtfRjEzOgotICAg
ICAgICBjYXNlIEdES19GMTQ6Ci0gICAgICAgIGNhc2UgR0RLX0YxNToKLSAgICAgICAgY2FzZSBH
REtfRjE2OgotICAgICAgICBjYXNlIEdES19GMTc6Ci0gICAgICAgIGNhc2UgR0RLX0YxODoKLSAg
ICAgICAgY2FzZSBHREtfRjE5OgotICAgICAgICBjYXNlIEdES19GMjA6Ci0gICAgICAgIGNhc2Ug
R0RLX0YyMToKLSAgICAgICAgY2FzZSBHREtfRjIyOgotICAgICAgICBjYXNlIEdES19GMjM6Ci0g
ICAgICAgIGNhc2UgR0RLX0YyNDoKLSAgICAgICAgICAgIHJldHVybiBWS19GMSArIChrZXljb2Rl
IC0gR0RLX0YxKTsKLSAgICAgICAgY2FzZSBHREtfS0VZX1ZvaWRTeW1ib2w6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfUFJPQ0VTU0tFWTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotfQotCi1TdHJpbmcgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcodW5zaWduZWQgdmFsKQotewotICAgIHN3aXRjaCAodmFsKSB7Ci0g
ICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Ci0g
ICAgICAgIGNhc2UgR0RLX1JldHVybjoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlxyIik7
Ci0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
Ilx4OCIpOwotICAgICAgICBjYXNlIEdES19UYWI6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCJcdCIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ3VuaWNoYXIgYyA9IGdka19r
ZXl2YWxfdG9fdW5pY29kZSh2YWwpOwotICAgICAgICAgICAgZ2xvbmcgbndjOwotICAgICAgICAg
ICAgZ3VuaWNoYXIyKiB1Y2hhcjE2ID0gZ191Y3M0X3RvX3V0ZjE2KCZjLCAxLCAwLCAmbndjLCAw
KTsKLQotICAgICAgICAgICAgU3RyaW5nIHJldFZhbDsKLSAgICAgICAgICAgIGlmICh1Y2hhcjE2
KQotICAgICAgICAgICAgICAgIHJldFZhbCA9IFN0cmluZygoVUNoYXIqKXVjaGFyMTYsIG53Yyk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0VmFsID0gU3RyaW5nKCk7Ci0K
LSAgICAgICAgICAgIGdfZnJlZSh1Y2hhcjE2KTsKLQotICAgICAgICAgICAgcmV0dXJuIHJldFZh
bDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBQbGF0Zm9ybUV2ZW50OjpUeXBlIGV2ZW50VHlwZUZvckdk
a0tleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICByZXR1cm4gZXZlbnQtPnR5cGUg
PT0gR0RLX0tFWV9SRUxFQVNFID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50
OjpLZXlEb3duOwotfQotCi1zdGF0aWMgUGxhdGZvcm1FdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVy
c0Zvckdka0tleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQg
bW9kaWZpZXJzID0gMDsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0sgfHwg
ZXZlbnQtPmtleXZhbCA9PSBHREtfMzI3MF9CYWNrVGFiKQotICAgICAgICBtb2RpZmllcnMgfD0g
UGxhdGZvcm1FdmVudDo6U2hpZnRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05U
Uk9MX01BU0spCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpDdHJsS2V5Owot
ICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQotICAgICAgICBtb2RpZmllcnMg
fD0gUGxhdGZvcm1FdmVudDo6QWx0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTUVU
QV9NQVNLKQotICAgICAgICBtb2RpZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6TWV0YUtleTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZvcm1FdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMp
OwotfQotCi0vLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVu
dCBjb25zdHJ1Y3RvcnMKLVBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50KEdka0V2ZW50S2V5KiBldmVudCwgY29uc3QgQ29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3Np
dGlvblJlc3VsdHMpCi0gICAgOiBQbGF0Zm9ybUV2ZW50KGV2ZW50VHlwZUZvckdka0tleUV2ZW50
KGV2ZW50KSwgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBjdXJyZW50VGltZSgpKQot
ICAgICwgbV90ZXh0KGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcubGVuZ3RoKCkgPyBj
b21wb3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nIDogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2
ZW50LT5rZXl2YWwpKQotICAgICwgbV91bm1vZGlmaWVkVGV4dChtX3RleHQpCi0gICAgLCBtX2tl
eUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCkpCi0g
ICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUo
ZXZlbnQtPmtleXZhbCkpCi0gICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKGV2ZW50LT5rZXl2
YWwpCi0gICAgLCBtX21hY0NoYXJDb2RlKDApCi0gICAgLCBtX2F1dG9SZXBlYXQoZmFsc2UpCi0g
ICAgLCBtX2lzS2V5cGFkKGV2ZW50LT5rZXl2YWwgPj0gR0RLX0tQX1NwYWNlICYmIGV2ZW50LT5r
ZXl2YWwgPD0gR0RLX0tQXzkpCi0gICAgLCBtX2lzU3lzdGVtS2V5KGZhbHNlKQotICAgICwgbV9n
ZGtFdmVudEtleShldmVudCkKLSAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNvbXBvc2l0aW9u
UmVzdWx0cykKLXsKLSAgICAvLyBUbyBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgSUUsIHdlIHJldHVy
biBWS19QUk9DRVNTS0VZIGZvciBrZXlzIHRoYXQgdHJpZ2dlcmVkIGNvbXBvc2l0aW9uIHJlc3Vs
dHMuCi0gICAgaWYgKGNvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkKLSAg
ICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSBWS19QUk9DRVNTS0VZOwotfQotCi12b2lk
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUgdHlw
ZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQotewotICAgIC8vIENhbiBvbmx5IGNo
YW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdLZXlEb3duIG9yIENoYXIsIGFzIHdlIGxhY2sg
aW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZlcnNpb25zLgotICAgIEFTU0VSVChtX3R5cGUgPT0g
S2V5RG93bik7Ci0gICAgbV90eXBlID0gdHlwZTsKLQotICAgIGlmIChiYWNrd2FyZENvbXBhdGli
aWxpdHlNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2
ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAgICAgIG1fdGV4dCA9IFN0cmluZygpOwotICAgICAgICBt
X3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFBsYXRm
b3JtRXZlbnQ6OkNoYXIgJiYgbV9jb21wb3NpdGlvblJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVk
KCkpIHsKLSAgICAgICAgLy8gSGF2aW5nIGVtcHR5IHRleHQsIHByZXZlbnRzIHRoaXMgQ2hhciAo
d2hpY2ggaXMgYSBET00ga2V5cHJlc3MpIGV2ZW50Ci0gICAgICAgIC8vIGZyb20gZ29pbmcgdG8g
dGhlIERPTS4gS2V5cyB0aGF0IHRyaWdnZXIgY29tcG9zaXRpb24gZXZlbnRzIHNob3VsZCBub3QK
LSAgICAgICAgLy8gZmlyZSBrZXlwcmVzcy4KLSAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7Ci0g
ICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKLSAgICAgICAgbV93aW5kb3dzVmlydHVhbEtl
eUNvZGUgPSAwOwotICAgIH0KLX0KLQotYm9vbCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJl
bnRDYXBzTG9ja1N0YXRlKCkKLXsKLSAgICByZXR1cm4gZ2RrX2tleW1hcF9nZXRfY2Fwc19sb2Nr
X3N0YXRlKGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpnZXRDdXJyZW50TW9kaWZpZXJTdGF0ZShib29sJiBzaGlmdEtleSwgYm9vbCYg
Y3RybEtleSwgYm9vbCYgYWx0S2V5LCBib29sJiBtZXRhS2V5KQotewotICAgIEdka01vZGlmaWVy
VHlwZSBzdGF0ZTsKLSAgICBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfc3RhdGUoJnN0YXRlKTsKLQot
ICAgIHNoaWZ0S2V5ID0gc3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKLSAgICBjdHJsS2V5ID0gc3Rh
dGUgJiBHREtfQ09OVFJPTF9NQVNLOwotICAgIGFsdEtleSA9IHN0YXRlICYgR0RLX01PRDFfTUFT
SzsKLSAgICBtZXRhS2V5ID0gc3RhdGUgJiBHREtfTUVUQV9NQVNLOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDEwMWMxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0q
Ci0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0q
Ci0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBmaWd1cmUgb3V0IHdoaWNoIG1v
ZGlmaWVyIGlzIEFsdCBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyBHREtfTU9EMV9NQVNLLgotCi0v
LyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25zdHJ1
Y3RvcnMKLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50QnV0
dG9uKiBldmVudCkKLXsKLSAgICBtX3RpbWVzdGFtcCA9IGV2ZW50LT50aW1lOwotICAgIG1fcG9z
aXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55KTsKLSAgICBtX2ds
b2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55
X3Jvb3QpOwotCi0gICAgbV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC0+c3RhdGUgJiBH
REtfU0hJRlRfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7Ci0gICAgaWYg
KGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9
IEN0cmxLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAg
IG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFf
TUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKLQotICAgIHN3aXRjaCAoZXZl
bnQtPnR5cGUpIHsKLSAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6Ci0gICAgY2FzZSBHREtfMkJV
VFRPTl9QUkVTUzoKLSAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgotICAgIGNhc2UgR0RLX0JV
VFRPTl9SRUxFQVNFOgotICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNz
ZWQ7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpIHsKLSAg
ICAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUmVsZWFzZWQ7Ci0gICAgICAg
ICAgICBtX2NsaWNrQ291bnQgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlID09
IEdES19CVVRUT05fUFJFU1MpCi0gICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAxOwotICAgICAg
ICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKLSAgICAgICAgICAg
IG1fY2xpY2tDb3VudCA9IDI7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18z
QlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKLQotICAgICAgICBp
ZiAoZXZlbnQtPmJ1dHRvbiA9PSAxKQotICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9u
OwotICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDIpCi0gICAgICAgICAgICBtX2J1
dHRvbiA9IE1pZGRsZUJ1dHRvbjsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAz
KQotICAgICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9OwotfQot
Ci1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiog
bW90aW9uKQotewotICAgIG1fdGltZXN0YW1wID0gbW90aW9uLT50aW1lOwotICAgIG1fcG9zaXRp
b24gPSBJbnRQb2ludCgoaW50KW1vdGlvbi0+eCwgKGludCltb3Rpb24tPnkpOwotICAgIG1fZ2xv
YmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KW1vdGlvbi0+eF9yb290LCAoaW50KW1vdGlvbi0+
eV9yb290KTsKLQotICAgIG1fbW9kaWZpZXJzID0gMDsKLSAgICBpZiAobW90aW9uLT5zdGF0ZSAm
IEdES19TSElGVF9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBTaGlmdEtleTsKLSAgICBp
ZiAobW90aW9uLT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJz
IHw9IEN0cmxLZXk7Ci0gICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQotICAg
ICAgICBtX21vZGlmaWVycyB8PSBBbHRLZXk7Ci0gICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtf
TUVUQV9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBNZXRhS2V5OwotCi0gICAgc3dpdGNo
IChtb3Rpb24tPnR5cGUpIHsKLSAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgotICAgICAgICBt
X3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOwotICAgICAgICBtX2J1dHRvbiA9IE5v
QnV0dG9uOwotICAgICAgICBtX2NsaWNrQ291bnQgPSAwOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9OwotCi0gICAgaWYg
KG1vdGlvbi0+c3RhdGUgJiBHREtfQlVUVE9OMV9NQVNLKQotICAgICAgICBtX2J1dHRvbiA9IExl
ZnRCdXR0b247Ci0gICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04yX01BU0sp
Ci0gICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgIGVsc2UgaWYgKG1vdGlvbi0+
c3RhdGUgJiBHREtfQlVUVE9OM19NQVNLKQotICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9u
OwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
U2NyZWVuR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVl
bkd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzc4ODIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgotCi0jaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJX
aWRnZXQuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgR3RrV2lkZ2V0KiBnZXRUb3BsZXZlbChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAg
ICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsK
LSAgICByZXR1cm4gZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgPyB0b3BsZXZlbCA6
IDA7Ci19Ci0KLXN0YXRpYyBHZGtWaXN1YWwqIGdldFZpc3VhbChXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5y
b290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKLSAgICBpZiAo
IWNvbnRhaW5lcikgewotICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0
X2RlZmF1bHQoKTsKLSAgICAgICAgcmV0dXJuIHNjcmVlbiA/IGdka19zY3JlZW5fZ2V0X3N5c3Rl
bV92aXN1YWwoc2NyZWVuKSA6IDA7Ci0gICAgfQotCi0gICAgaWYgKCFndGtfd2lkZ2V0X2dldF9y
ZWFsaXplZChjb250YWluZXIpKQotICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250
YWluZXIpOwotICAgIHJldHVybiBjb250YWluZXIgPyBnZGtfd2luZG93X2dldF92aXN1YWwoZ3Rr
X3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKLX0KLQotaW50IHNjcmVlbkRlcHRo
KFdpZGdldCogd2lkZ2V0KQotewotICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdp
ZGdldCk7Ci0gICAgaWYgKCF2aXN1YWwpCi0gICAgICAgIHJldHVybiAyNDsKLSAgICByZXR1cm4g
Z2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKTsKLX0KLQotaW50IHNjcmVlbkRlcHRoUGVyQ29t
cG9uZW50KFdpZGdldCogd2lkZ2V0KQotewotICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0Vmlz
dWFsKHdpZGdldCk7Ci0gICAgaWYgKCF2aXN1YWwpCi0gICAgICAgIHJldHVybiA4OwotCi0gICAg
cmV0dXJuIGdka192aXN1YWxfZ2V0X2JpdHNfcGVyX3JnYih2aXN1YWwpOwotfQotCi1ib29sIHNj
cmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKLXsKLSAgICByZXR1cm4gc2NyZWVuRGVw
dGgod2lkZ2V0KSA8IDI7Ci19Ci0KLQotc3RhdGljIEdka1NjcmVlbiogZ2V0U2NyZWVuKEd0a1dp
ZGdldCogd2lkZ2V0KQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0
KSA/IGd0a193aWRnZXRfZ2V0X3NjcmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpOwotfQotCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBH
dGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKLSAgICBpZiAoY29udGFp
bmVyKQotICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOwotCi0gICAg
R2RrU2NyZWVuKiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOwotCi0gICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVl
bl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29u
dGFpbmVyKSkgOiAwOwotCi0gICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OwotICAgIGdka19zY3Jl
ZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0cnkpOwotCi0g
ICAgcmV0dXJuIEZsb2F0UmVjdChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0
aCwgZ2VvbWV0cnkuaGVpZ2h0KTsKLX0KLQotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3Qo
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBH
VEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSA6IDA7Ci0gICAgaWYgKGNvbnRhaW5lciAmJiAhZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQo
Y29udGFpbmVyKSkKLSAgICAgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKLQotICAgIEdk
a1NjcmVlbiogc2NyZWVuID0gY29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtf
c2NyZWVuX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5f
Z2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRh
aW5lcikpIDogMDsKLQotICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKLSAgICBnZGtfc2NyZWVu
X2dldF9tb25pdG9yX3dvcmthcmVhKHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVhKTsKLQotICAg
IHJldHVybiBGbG9hdFJlY3Qod29ya0FyZWEueCwgd29ya0FyZWEueSwgd29ya0FyZWEud2lkdGgs
IHdvcmtBcmVhLmhlaWdodCk7Ci0KLX0KLQotdm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQ
cm9maWxlJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1X
aGVlbEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdo
ZWVsRXZlbnRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjBiZjlhLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZl
bnRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLQotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gS2VlcCB0aGlzIGluIHN5
bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCi1QbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IGZsb2F0IGRlbHRhID0gMTsKLQotICAgIG1fdHlwZSA9IFBsYXRmb3Jt
RXZlbnQ6OldoZWVsOwotICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLQotICAgIG1f
bW9kaWZpZXJzID0gMDsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0spCi0g
ICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBH
REtfQ09OVFJPTF9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OwotICAgIGlm
IChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBB
bHRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAgIG1f
bW9kaWZpZXJzIHw9IE1ldGFLZXk7Ci0KLSAgICBtX2RlbHRhWCA9IDA7Ci0gICAgbV9kZWx0YVkg
PSAwOwotCi0gICAgLy8gRG9jcyBzYXkgYW4gdXB3YXJkcyBzY3JvbGwgKGF3YXkgZnJvbSB0aGUg
dXNlcikgaGFzIGEgcG9zaXRpdmUgZGVsdGEKLSAgICBzd2l0Y2ggKGV2ZW50LT5kaXJlY3Rpb24p
IHsKLSAgICAgICAgY2FzZSBHREtfU0NST0xMX1VQOgotICAgICAgICAgICAgbV9kZWx0YVkgPSBk
ZWx0YTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19TQ1JPTExfRE9XTjoK
LSAgICAgICAgICAgIG1fZGVsdGFZID0gLWRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR0RLX1NDUk9MTF9MRUZUOgotICAgICAgICAgICAgbV9kZWx0YVggPSBkZWx0YTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdES19TQ1JPTExfUklHSFQ6Ci0gICAg
ICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YTsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDMsIDE4KQotICAgICAgICBjYXNlIEdES19TQ1JPTExfU01PT1RIOiB7
Ci0gICAgICAgICAgICAgICAgZ2RvdWJsZSBkZWx0YVgsIGRlbHRhWTsKLSAgICAgICAgICAgICAg
ICBnZGtfZXZlbnRfZ2V0X3Njcm9sbF9kZWx0YXMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+
KGV2ZW50KSwgJmRlbHRhWCwgJmRlbHRhWSk7Ci0gICAgICAgICAgICAgICAgbV9kZWx0YVggPSAt
ZGVsdGFYOwotICAgICAgICAgICAgICAgIG1fZGVsdGFZID0gLWRlbHRhWTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgfQotICAgIG1fd2hlZWxUaWNrc1gg
PSBtX2RlbHRhWDsKLSAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7Ci0KLSAgICBtX3Bvc2l0
aW9uID0gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eCksIHN0YXRpY19jYXN0PGlu
dD4oZXZlbnQtPnkpKTsKLSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoc3RhdGljX2Nh
c3Q8aW50PihldmVudC0+eF9yb290KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eV9yb290KSk7
Ci0gICAgbV9ncmFudWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwotICAgIG1fZGly
ZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogcmV0cmll
dmUgdGhlIHVzZXIgc2V0dGluZyBmb3IgdGhlIG51bWJlciBvZiBsaW5lcyB0byBzY3JvbGwgb24g
ZWFjaCB3aGVlbCBldmVudAotICAgIG1fZGVsdGFYICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOwotICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0
PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyZjUxN2IwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAK
LS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlv
biBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlBvcHVwTWVudUd0ay5oIgotCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotI2luY2x1ZGUg
Ikhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJf
dCBnU2VhcmNoVGltZW91dE1zID0gMTAwMDsKLQotUG9wdXBNZW51R3RrOjpQb3B1cE1lbnVHdGso
UG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3BvcHVwQ2xpZW50KGNsaWVudCkKLXsK
LX0KLQotUG9wdXBNZW51R3RrOjp+UG9wdXBNZW51R3RrKCkKLXsKLSAgICBpZiAobV9wb3B1cCkg
ewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9wb3B1cC0+
cGxhdGZvcm1NZW51KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwot
ICAgICAgICBoaWRlKCk7Ci0gICAgfQotfQotCi1HdGtBY3Rpb24qIFBvcHVwTWVudUd0azo6Y3Jl
YXRlR3RrQWN0aW9uRm9yTWVudUl0ZW0oaW50IGl0ZW1JbmRleCkKLXsKLSAgICBHT3duUHRyPGNo
YXI+IGFjdGlvbk5hbWUoZ19zdHJkdXBfcHJpbnRmKCJwb3B1cC1tZW51LWFjdGlvbi0lZCIsIGl0
ZW1JbmRleCkpOwotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoYWN0aW9u
TmFtZS5nZXQoKSwgY2xpZW50KCktPml0ZW1UZXh0KGl0ZW1JbmRleCkudXRmOCgpLmRhdGEoKSwg
Y2xpZW50KCktPml0ZW1Ub29sVGlwKGl0ZW1JbmRleCkudXRmOCgpLmRhdGEoKSwgMCk7Ci0gICAg
Z19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoYWN0aW9uKSwgInBvcHVwLW1lbnUtYWN0aW9uLWlu
ZGV4IiwgR0lOVF9UT19QT0lOVEVSKGl0ZW1JbmRleCkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
YWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKG1lbnVJdGVtQWN0aXZhdGVkKSwgdGhpcyk7
Ci0gICAgLy8gRklYTUU6IEFwcGx5IHRoZSBQb3B1cE1lbnVTdHlsZSBmcm9tIGNsaWVudCgpLT5p
dGVtU3R5bGUoaSkKLSAgICBndGtfYWN0aW9uX3NldF92aXNpYmxlKGFjdGlvbiwgIWNsaWVudCgp
LT5pdGVtU3R5bGUoaXRlbUluZGV4KS5pc0Rpc3BsYXlOb25lKCkpOwotICAgIGd0a19hY3Rpb25f
c2V0X3NlbnNpdGl2ZShhY3Rpb24sIGNsaWVudCgpLT5pdGVtSXNFbmFibGVkKGl0ZW1JbmRleCkp
OwotCi0gICAgcmV0dXJuIGFjdGlvbjsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6OnNob3coY29u
c3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCi17Ci0gICAgQVNT
RVJUKGNsaWVudCgpKTsKLQotICAgIGlmICghbV9wb3B1cCkgewotICAgICAgICBtX3BvcHVwID0g
R3RrUG9wdXBNZW51OjpjcmVhdGUoKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3BvcHVw
LT5wbGF0Zm9ybU1lbnUoKSwgInVubWFwIiwgR19DQUxMQkFDSyhQb3B1cE1lbnVHdGs6Om1lbnVV
bm1hcHBlZCksIHRoaXMpOwotICAgIH0gZWxzZQotICAgICAgICBtX3BvcHVwLT5jbGVhcigpOwot
Ci0gICAgY29uc3QgaW50IHNpemUgPSBjbGllbnQoKS0+bGlzdFNpemUoKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoY2xpZW50KCktPml0ZW1Jc1Nl
cGFyYXRvcihpKSkKLSAgICAgICAgICAgIG1fcG9wdXAtPmFwcGVuZFNlcGFyYXRvcigpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBhY3Rpb24gPSBhZG9w
dEdSZWYoY3JlYXRlR3RrQWN0aW9uRm9yTWVudUl0ZW0oaSkpOwotICAgICAgICAgICAgbV9wb3B1
cC0+YXBwZW5kSXRlbShhY3Rpb24uZ2V0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSW50
UG9pbnQgbWVudVBvc2l0aW9uID0gY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHVEtf
V0lER0VUKHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpLCB2aWV3LT5j
b250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSkpOwotICAgIG1lbnVQb3NpdGlvbi5tb3Zl
KDAsIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9wb3B1cC0+cG9wVXAocmVjdC5zaXplKCksIG1l
bnVQb3NpdGlvbiwgc2l6ZSwgaW5kZXgsIGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsKLQotICAg
IC8vIEdUSyBjYW4gcmVmdXNlIHRvIGFjdHVhbGx5IG9wZW4gdGhlIG1lbnUgd2hlbiBtb3VzZSBn
cmFicyBmYWlscy4KLSAgICAvLyBFbnN1cmUgV2ViQ29yZSBkb2VzIG5vdCBnbyBpbnRvIHNvbWUg
cGVza3kgc3RhdGUuCi0gICAgaWYgKCFndGtfd2lkZ2V0X2dldF92aXNpYmxlKG1fcG9wdXAtPnBs
YXRmb3JtTWVudSgpKSkKLSAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSgpOwotfQotCi12
b2lkIFBvcHVwTWVudUd0azo6aGlkZSgpCi17Ci0gICAgQVNTRVJUKG1fcG9wdXApOwotICAgIG1f
cG9wdXAtPnBvcERvd24oKTsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKLXsKLSAgICBjbGllbnQoKS0+c2V0VGV4dEZyb21JdGVtKGNsaWVudCgpLT5zZWxlY3Rl
ZEluZGV4KCkpOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6ZGlzY29ubmVjdENsaWVudCgpCi17
Ci0gICAgbV9wb3B1cENsaWVudCA9IDA7Ci19Ci0KLXZvaWQgUG9wdXBNZW51R3RrOjptZW51SXRl
bUFjdGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgUG9wdXBNZW51R3RrKiB0aGF0KQotewotICAg
IEFTU0VSVCh0aGF0LT5jbGllbnQoKSk7Ci0gICAgdGhhdC0+Y2xpZW50KCktPnZhbHVlQ2hhbmdl
ZChHUE9JTlRFUl9UT19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoYWN0aW9uKSwgInBv
cHVwLW1lbnUtYWN0aW9uLWluZGV4IikpKTsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6Om1lbnVV
bm1hcHBlZChHdGtXaWRnZXQqLCBQb3B1cE1lbnVHdGsqIHRoYXQpCi17Ci0gICAgQVNTRVJUKHRo
YXQtPmNsaWVudCgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+cG9wdXBEaWRIaWRlKCk7Ci19Ci0K
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDgxMWZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFBvcHVwTWVudUd0a19oCi0jZGVmaW5lIFBv
cHVwTWVudUd0a19oCi0KLSNpbmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiUG9wdXBNZW51LmgiCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgU2Ny
b2xsYmFyOwotCi1jbGFzcyBQb3B1cE1lbnVHdGsgOiBwdWJsaWMgUG9wdXBNZW51IHsKLXB1Ymxp
YzoKLSAgICBQb3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50Kik7Ci0gICAgflBvcHVwTWVudUd0
aygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyos
IGludCBpbmRleCk7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVudCgp
OwotCi1wcml2YXRlOgotICAgIFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1
cm4gbV9wb3B1cENsaWVudDsgfQotICAgIEd0a0FjdGlvbiogY3JlYXRlR3RrQWN0aW9uRm9yTWVu
dUl0ZW0oaW50IGl0ZW1JbmRleCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBtZW51VW5tYXBwZWQoR3Rr
V2lkZ2V0KiwgUG9wdXBNZW51R3RrKik7Ci0gICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0
ZWQoR3RrQWN0aW9uKiwgUG9wdXBNZW51R3RrKik7Ci0KLSAgICBQb3B1cE1lbnVDbGllbnQqIG1f
cG9wdXBDbGllbnQ7Ci0gICAgT3duUHRyPEd0a1BvcHVwTWVudT4gbV9wb3B1cDsKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIFBvcHVwTWVudUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ1MjU4Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCi0KLSNpZiBVU0UoR0xYKQot
Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9l
eHRlbnNpb25zL1hkYW1hZ2UuaD4KLSNpbmNsdWRlIDxjYWlyby14bGliLmg+Ci0jaW5jbHVkZSA8
Z2RrL2dka3guaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBI
YXNoTWFwPFdpbmRvdywgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqPiBXaW5kb3dIYXNoTWFw
Owotc3RhdGljIFdpbmRvd0hhc2hNYXAmIGdldFdpbmRvd0hhc2hNYXAoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoV2luZG93SGFzaE1hcCwgd2luZG93SGFzaE1hcCwgKCkpOwotICAgIHJl
dHVybiB3aW5kb3dIYXNoTWFwOwotfQotCi1zdGF0aWMgaW50IGdEYW1hZ2VFdmVudEJhc2U7Ci1z
dGF0aWMgR2RrRmlsdGVyUmV0dXJuIGZpbHRlclhEYW1hZ2VFdmVudChHZGtYRXZlbnQqIGdka1hF
dmVudCwgR2RrRXZlbnQqIGV2ZW50LCB2b2lkKikKLXsKLSAgICBYRXZlbnQqIHhFdmVudCA9IHN0
YXRpY19jYXN0PFhFdmVudCo+KGdka1hFdmVudCk7Ci0gICAgaWYgKHhFdmVudC0+dHlwZSAhPSBn
RGFtYWdlRXZlbnRCYXNlICsgWERhbWFnZU5vdGlmeSkKLSAgICAgICAgcmV0dXJuIEdES19GSUxU
RVJfQ09OVElOVUU7Ci0KLSAgICBYRGFtYWdlTm90aWZ5RXZlbnQqIGRhbWFnZUV2ZW50ID0gcmVp
bnRlcnByZXRfY2FzdDxYRGFtYWdlTm90aWZ5RXZlbnQqPih4RXZlbnQpOwotICAgIFdpbmRvd0hh
c2hNYXAmIHdpbmRvd0hhc2hNYXAgPSBnZXRXaW5kb3dIYXNoTWFwKCk7Ci0gICAgV2luZG93SGFz
aE1hcDo6aXRlcmF0b3IgaSA9IHdpbmRvd0hhc2hNYXAuZmluZChkYW1hZ2VFdmVudC0+ZHJhd2Fi
bGUpOwotICAgIGlmIChpID09IHdpbmRvd0hhc2hNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBH
REtfRklMVEVSX0NPTlRJTlVFOwotCi0gICAgaS0+dmFsdWUtPmNhbGxEYW1hZ2VOb3RpZnlDYWxs
YmFjaygpOwotICAgIFhEYW1hZ2VTdWJ0cmFjdChHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCgpKSwgZGFtYWdlRXZlbnQtPmRhbWFnZSwgTm9uZSwgTm9uZSk7Ci0g
ICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOwotfQotCi1zdGF0aWMgYm9vbCBzdXBwb3J0c1hE
YW1hZ2VBbmRYQ29tcG9zaXRlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZh
bHNlOwotICAgIHN0YXRpYyBib29sIGhhc0V4dGVuc2lvbnMgPSBmYWxzZTsKLQotICAgIGlmIChp
bml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIGhhc0V4dGVuc2lvbnM7Ci0KLSAgICBpbml0aWFs
aXplZCA9IHRydWU7Ci0KLSAgICBpbnQgZXJyb3JCYXNlOwotICAgIERpc3BsYXkqIGRpc3BsYXkg
PSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAgICBp
ZiAoIVhEYW1hZ2VRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZ0RhbWFnZUV2ZW50QmFzZSwgJmVy
cm9yQmFzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBldmVudEJhc2U7Ci0g
ICAgaWYgKCFYQ29tcG9zaXRlUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZSwgJmVy
cm9yQmFzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIG5lZWQgdG8gc3Vw
cG9ydCBYQ29tcG9zaXRlIHZlcnNpb24gMC4yLgotICAgIGludCBtYWpvciwgbWlub3I7Ci0gICAg
WENvbXBvc2l0ZVF1ZXJ5VmVyc2lvbihkaXNwbGF5LCAmbWFqb3IsICZtaW5vcik7Ci0gICAgaWYg
KG1ham9yIDwgMCB8fCAoIW1ham9yICYmIG1pbm9yIDwgMikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGhhc0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Q
YXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdMQ29udGV4dE5lZWRlZCBuZWVk
c0NvbnRleHQpCi17Ci0gICAgcmV0dXJuIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKSA/
IGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhzaXplLCBuZWVkc0NvbnRl
eHQpKSA6IG51bGxwdHI7Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiBzaXplLCBHTENvbnRleHROZWVkZWQg
bmVlZHNDb250ZXh0KQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX3dpbmRvdygwKQotICAg
ICwgbV9wYXJlbnRXaW5kb3coMCkKLSAgICAsIG1fcGl4bWFwKDApCi0gICAgLCBtX25lZWRzQ29u
dGV4dChuZWVkc0NvbnRleHQpCi0gICAgLCBtX3N1cmZhY2UoMCkKLSAgICAsIG1fbmVlZHNOZXdQ
aXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKLSAgICAsIG1fZGFtYWdlKDApCi0gICAgLCBtX2RhbWFn
ZU5vdGlmeUNhbGxiYWNrKDApCi0gICAgLCBtX2RhbWFnZU5vdGlmeURhdGEoMCkKLXsKLSAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2Rl
ZmF1bHQoKSk7Ci0gICAgU2NyZWVuKiBzY3JlZW4gPSBEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5KGRp
c3BsYXkpOwotCi0gICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBjb2RlIGZyb20gQ2hyb21pdW06IHNy
Yy9jb250ZW50L2NvbW1vbi9ncHUvaW1hZ2VfdHJhbnNwb3J0X3N1cmZhY2VfbGludXguY2MKLSAg
ICBYU2V0V2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIHdpbmRvd0F0dHJp
YnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBUcnVlOwotICAgIG1fcGFyZW50V2luZG93ID0gWENy
ZWF0ZVdpbmRvdyhkaXNwbGF5LAotICAgICAgICBSb290V2luZG93T2ZTY3JlZW4oc2NyZWVuKSwK
LSAgICAgICAgV2lkdGhPZlNjcmVlbihzY3JlZW4pICsgMSwgMCwgMSwgMSwKLSAgICAgICAgMCwK
LSAgICAgICAgQ29weUZyb21QYXJlbnQsCi0gICAgICAgIElucHV0T3V0cHV0LAotICAgICAgICBD
b3B5RnJvbVBhcmVudCwKLSAgICAgICAgQ1dPdmVycmlkZVJlZGlyZWN0LAotICAgICAgICAmd2lu
ZG93QXR0cmlidXRlcyk7Ci0gICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7
Ci0KLSAgICB3aW5kb3dBdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBTdHJ1Y3R1cmVOb3RpZnlNYXNr
OwotICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBGYWxzZTsKLSAgICBt
X3dpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wYXJlbnRXaW5kb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weUZyb21QYXJlbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0T3V0cHV0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1dFdmVudE1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1
dGVzKTsKLSAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKLQotICAgIGlmIChnZXRX
aW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgpKQotICAgICAgICBnZGtfd2luZG93X2FkZF9maWx0ZXIo
MCwgcmVpbnRlcnByZXRfY2FzdDxHZGtGaWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZlbnQpLCAw
KTsKLSAgICBnZXRXaW5kb3dIYXNoTWFwKCkuYWRkKG1fd2luZG93LCB0aGlzKTsKLQotICAgIHdo
aWxlICgxKSB7Ci0gICAgICAgIFhFdmVudCBldmVudDsKLSAgICAgICAgWFdpbmRvd0V2ZW50KGRp
c3BsYXksIG1fd2luZG93LCBTdHJ1Y3R1cmVOb3RpZnlNYXNrLCAmZXZlbnQpOwotICAgICAgICBp
ZiAoZXZlbnQudHlwZSA9PSBNYXBOb3RpZnkgJiYgZXZlbnQueG1hcC53aW5kb3cgPT0gbV93aW5k
b3cpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgWFNlbGVjdElucHV0KGRpc3BsYXks
IG1fd2luZG93LCBOb0V2ZW50TWFzayk7Ci0gICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRp
c3BsYXksIG1fd2luZG93LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgbV9kYW1hZ2Ug
PSBYRGFtYWdlQ3JlYXRlKGRpc3BsYXksIG1fd2luZG93LCBYRGFtYWdlUmVwb3J0Tm9uRW1wdHkp
OwotfQotCi1SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93KCkKLXsKLSAgICBBU1NFUlQobV9kYW1hZ2UpOwotICAgIEFTU0VSVChtX3dpbmRvdyk7
Ci0gICAgQVNTRVJUKG1fcGFyZW50V2luZG93KTsKLQotICAgIGdldFdpbmRvd0hhc2hNYXAoKS5y
ZW1vdmUobV93aW5kb3cpOwotICAgIGlmIChnZXRXaW5kb3dIYXNoTWFwKCkuaXNFbXB0eSgpKQot
ICAgICAgICBnZGtfd2luZG93X3JlbW92ZV9maWx0ZXIoMCwgcmVpbnRlcnByZXRfY2FzdDxHZGtG
aWx0ZXJGdW5jPihmaWx0ZXJYRGFtYWdlRXZlbnQpLCAwKTsKLQotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKLSAg
ICBYRGFtYWdlRGVzdHJveShkaXNwbGF5LCBtX2RhbWFnZSk7Ci0gICAgWERlc3Ryb3lXaW5kb3co
ZGlzcGxheSwgbV93aW5kb3cpOwotICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fcGFyZW50
V2luZG93KTsKLSAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotfQotCi12b2lk
IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3Bs
YXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgIFhGbHVzaChkaXNwbGF5KTsKLQot
ICAgIGlmIChtX25lZWRzQ29udGV4dCA9PSBDcmVhdGVHTENvbnRleHQpIHsKLSAgICAgICAgY29u
dGV4dCgpLT53YWl0TmF0aXZlKCk7Ci0gICAgICAgIC8vIFRoaXMgc3dhcCBpcyBiYXNlZCBvbiBj
b2RlIGluIENocm9taXVtLiBJdCB0cmllcyB0byB3b3JrLWFyb3VuZCBhIGJ1ZyBpbiB0aGUgSW50
ZWwgZHJpdmVycwotICAgICAgICAvLyB3aGVyZSBhIHN3YXAgaXMgbmVjZXNzYXJ5IHRvIGVuc3Vy
ZSB0aGUgZnJvbnQgYW5kIGJhY2sgYnVmZmVycyBhcmUgcHJvcGVybHkgcmVzaXplZC4KLSAgICAg
ICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6OmdldEN1cnJlbnQoKSkKLSAgICAgICAgICAg
IGNvbnRleHQoKS0+c3dhcEJ1ZmZlcnMoKTsKLSAgICB9Ci0KLSAgICBtX3NpemUgPSBzaXplOwot
ICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSA9IHRydWU7Ci19Ci0KLUdMQ29udGV4dCog
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNvbnRleHQoKQotewotICAgIEFTU0VSVChtX25l
ZWRzQ29udGV4dCA9PSBDcmVhdGVHTENvbnRleHQpOwotCi0gICAgaWYgKG1fY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKLQotICAgIEFTU0VSVChtX3dpbmRvdyk7Ci0g
ICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KG1fd2luZG93
LCBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOwotICAgIHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7Ci19Ci0KLXZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNsZWFudXBQaXhtYXBB
bmRQaXhtYXBTdXJmYWNlKCkKLXsKLSAgICBpZiAoIW1fcGl4bWFwKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBYRnJlZVBpeG1hcChjYWlyb194bGliX3N1cmZhY2VfZ2V0X2Rpc3BsYXkobV9zdXJm
YWNlLmdldCgpKSwgbV9waXhtYXApOwotICAgIG1fcGl4bWFwID0gMDsKLSAgICBtX3N1cmZhY2Ug
PSBudWxscHRyOwotfQotCi1jYWlyb19zdXJmYWNlX3QqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93OjpjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgaWYg
KCFtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgJiYgbV9zdXJmYWNlKQotICAgICAgICByZXR1
cm4gbV9zdXJmYWNlLmdldCgpOwotCi0gICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0g
ZmFsc2U7Ci0KLSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBuZXcgcGl4bWFwIGJlIGNy
ZWF0ZWQgd2l0aCB0aGUgc2FtZSBEaXNwbGF5IHBvaW50ZXIgYXMgdGhlIHRhcmdldAotICAgIC8v
IHdpZGdldCBvciBlbHNlIGRyYXdpbmcgc3BlZWQgY2FuIGJlIDEwMHggc2xvd2VyLgotICAgIERp
c3BsYXkqIG5ld1BpeG1hcERpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0
X2dldF9kaXNwbGF5KHdpZGdldCkpOwotICAgIFBpeG1hcCBuZXdQaXhtYXAgPSBYQ29tcG9zaXRl
TmFtZVdpbmRvd1BpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgaWYgKCFu
ZXdQaXhtYXApIHsKLSAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgWFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0
cmlidXRlczsKLSAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKG5ld1BpeG1hcERpc3BsYXks
IG1fd2luZG93LCAmd2luZG93QXR0cmlidXRlcykpIHsKLSAgICAgICAgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKLSAgICAgICAgWEZyZWVQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwg
bmV3UGl4bWFwKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVh
dGUobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRv
d0F0dHJpYnV0ZXMudmlzdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCkpKTsKLQotICAgIC8vIE52aWRpYSBkcml2ZXJzIHNlZW0gdG8gcHJlcGFy
ZSB0aGVpciByZWRpcmVjdGVkIHdpbmRvdyBwaXhtYXAgYXN5bmNocm9ub3VzbHksIHNvIGZvciBh
IGZldyBmcmFjdGlvbnMKLSAgICAvLyBvZiBhIHNlY29uZCBhZnRlciBlYWNoIHJlc2l6ZSwgd2hp
bGUgZG9pbmcgY29udGludW91cyByZXNpemluZyAod2hpY2ggY29uc3RhbnRseSBkZXN0cm95cyBh
bmQgY3JlYXRlcwotICAgIC8vIHBpeG1hcCB3aW5kb3ctYmFja2luZ3MpLCB0aGUgcGl4bWFwIG1l
bW9yeSBpcyB1bmluaXRpYWxpemVkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlLCBwYWludCB0
aGUgb2xkCi0gICAgLy8gcGl4bWFwIHRvIHRoZSBuZXcgb25lIHRvIHByb3Blcmx5IGluaXRpYWxp
emUgaXQuCi0gICAgaWYgKG1fc3VyZmFjZSkgewotICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgICAgICBjYWly
b19zZXRfc291cmNlX3JnYihjci5nZXQoKSwgMSwgMSwgMSk7Ci0gICAgICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBt
X3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKLSAgICBtX3BpeG1h
cCA9IG5ld1BpeG1hcDsKLSAgICBtX3N1cmZhY2UgPSBuZXdTdXJmYWNlOwotCi0gICAgcmV0dXJu
IG1fc3VyZmFjZS5nZXQoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6
Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCkKLXsKLSAgICBpZiAobV9kYW1hZ2VOb3RpZnlDYWxs
YmFjaykKLSAgICAgICAgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjayhtX2RhbWFnZU5vdGlmeURhdGEp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoR0xYKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYyYTQ4Yi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKLSNkZWZpbmUgIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93X2gKLQotI2lmIFVTRShHTFgpCi0KLSNpbmNsdWRlICJHTENvbnRleHQu
aCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7
Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgRGFtYWdlOwotdHlwZWRlZiB2b2lkICgqRGFtYWdlTm90
aWZ5Q2FsbGJhY2spKHZvaWQqKTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBHTENvbnRleHROZWVk
ZWQgeyBDcmVhdGVHTENvbnRleHQsIERvTm90Q3JlYXRlR0xDb250ZXh0IH07Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IGNyZWF0ZShjb25zdCBJbnRT
aXplJiwgR0xDb250ZXh0TmVlZGVkID0gQ3JlYXRlR0xDb250ZXh0KTsKLSAgICB2aXJ0dWFsIH5S
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOwotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7
IHJldHVybiBtX3NpemU7IH0KLQotICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIG5ld1Np
emUpOwotICAgIEdMQ29udGV4dCogY29udGV4dCgpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fp
cm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCopOwotICAgIFdpbmRvdyB3aW5kb3dJZCgpIHsg
cmV0dXJuIG1fd2luZG93OyB9Ci0gICAgdm9pZCBjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsK
LQotICAgIHZvaWQgc2V0RGFtYWdlTm90aWZ5Q2FsbGJhY2soRGFtYWdlTm90aWZ5Q2FsbGJhY2sg
Y2FsbGJhY2ssIHZvaWQqIGRhdGEpCi0gICAgewotICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxi
YWNrID0gY2FsbGJhY2s7Ci0gICAgICAgIG1fZGFtYWdlTm90aWZ5RGF0YSA9IGRhdGE7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNp
emUmLCBHTENvbnRleHROZWVkZWQpOwotICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1
cmZhY2UoKTsKLQotICAgIEludFNpemUgbV9zaXplOwotICAgIFdpbmRvdyBtX3dpbmRvdzsKLSAg
ICBXaW5kb3cgbV9wYXJlbnRXaW5kb3c7Ci0gICAgUGl4bWFwIG1fcGl4bWFwOwotICAgIEdMQ29u
dGV4dE5lZWRlZCBtX25lZWRzQ29udGV4dDsKLSAgICBPd25QdHI8R0xDb250ZXh0PiBtX2NvbnRl
eHQ7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIHVuc2lnbmVk
IGludCBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZDsKLSAgICBib29sIG1fbmVlZHNOZXdQaXhtYXBB
ZnRlclJlc2l6ZTsKLQotICAgIERhbWFnZSBtX2RhbWFnZTsKLSAgICBEYW1hZ2VOb3RpZnlDYWxs
YmFjayBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrOwotICAgIHZvaWQqIG1fZGFtYWdlTm90aWZ5RGF0
YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShHTFgpCi0K
LSNlbmRpZiAvLyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTJmMjcyNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRl
ICJGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAi
R3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtW
ZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW5jbHVkZSAi
VGltZVJhbmdlcy5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVk
ZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNs
dWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5B
QkxFKFBST0dSRVNTX0VMRU1FTlQpCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRoaXMgd291bGQgYmUgYSBzdGF0aWMgbWV0
aG9kLCBleGNlcHQgdGhhdCBmb3J3YXJkIGRlY2xhcmluZyBHVHlwZSBpcyB0cmlja3ksIHNpbmNl
IGl0cwotLy8gZGVmaW5pdGlvbiBkZXBlbmRzIG9uIGluY2x1ZGluZyBnbGliLmgsIG5lZ2F0aW5n
IHRoZSBiZW5lZml0IG9mIHVzaW5nIGEgZm9yd2FyZCBkZWNsYXJhdGlvbi4KLWV4dGVybiBHUmVm
UHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSwgY29uc3QgY2hh
ciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKTsK
LWV4dGVybiBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRU
eXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0
IGNoYXIgKmZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUs
IGdpbnQgaWNvblNpemUpOwotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0jaWYgRU5B
QkxFKFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21S
ZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQotewotICAgIE5vZGUqIG5vZGUgPSBvLT5ub2Rl
KCk7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0hvc3QoKSA6IDA7
Ci0gICAgaWYgKCFtZWRpYU5vZGUpCi0gICAgICAgIG1lZGlhTm9kZSA9IG5vZGU7Ci0gICAgaWYg
KCFtZWRpYU5vZGUgfHwgIW1lZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obWVkaWFOb2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9k
ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUJ1dHRvbnMoKQotewotICAg
IHN0YXRpYyBib29sIGljb25zSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGlmIChpY29uc0lu
aXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEd0a0ljb25GYWN0b3J5
PiBpY29uRmFjdG9yeSA9IGFkb3B0R1JlZihndGtfaWNvbl9mYWN0b3J5X25ldygpKTsKLSAgICBH
dGtJY29uU291cmNlKiBpY29uU291cmNlID0gZ3RrX2ljb25fc291cmNlX25ldygpOwotICAgIGNv
bnN0IGNoYXIqIGljb25zW10gPSB7ICJhdWRpby12b2x1bWUtaGlnaCIsICJhdWRpby12b2x1bWUt
bXV0ZWQiIH07Ci0KLSAgICBndGtfaWNvbl9mYWN0b3J5X2FkZF9kZWZhdWx0KGljb25GYWN0b3J5
LmdldCgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGljb25z
KTsgKytpKSB7Ci0gICAgICAgIGd0a19pY29uX3NvdXJjZV9zZXRfaWNvbl9uYW1lKGljb25Tb3Vy
Y2UsIGljb25zW2ldKTsKLSAgICAgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19pY29uX3Nl
dF9uZXcoKTsKLSAgICAgICAgZ3RrX2ljb25fc2V0X2FkZF9zb3VyY2UoaWNvblNldCwgaWNvblNv
dXJjZSk7Ci0gICAgICAgIGd0a19pY29uX2ZhY3RvcnlfYWRkKGljb25GYWN0b3J5LmdldCgpLCBp
Y29uc1tpXSwgaWNvblNldCk7Ci0gICAgICAgIGd0a19pY29uX3NldF91bnJlZihpY29uU2V0KTsK
LSAgICB9Ci0KLSAgICBndGtfaWNvbl9zb3VyY2VfZnJlZShpY29uU291cmNlKTsKLQotICAgIGlj
b25zSW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8UmVuZGVyVGhl
bWU+IFJlbmRlclRoZW1lR3RrOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UmVuZGVyVGhlbWVHdGsoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRo
ZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUq
IHJ0ID0gUmVuZGVyVGhlbWVHdGs6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gcnQ7
Ci19Ci0KLVJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCi0gICAgOiBtX3BhbmVsQ29s
b3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9zbGlkZXJDb2xvcihDb2xvcjo6d2hpdGUpCi0gICAg
LCBtX3NsaWRlclRodW1iQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9tZWRpYUljb25TaXpl
KDE2KQotICAgICwgbV9tZWRpYVNsaWRlckhlaWdodCgxNCkKLXsKLSAgICBwbGF0Zm9ybUluaXQo
KTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgaW5pdE1lZGlhQ29sb3JzKCk7Ci0gICAgaW5pdE1l
ZGlhQnV0dG9ucygpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSkKLXsKLSAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIFRleHRG
aWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBh
cnQ6Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2Fz
ZSBDaGVja2JveFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICBjYXNl
IFNsaWRlclZlcnRpY2FsUGFydDoKLSAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ6Ci0gICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0
OgotICAgIGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25QYXJ0OgotICAgIGNhc2UgTWVk
aWFTbGlkZXJQYXJ0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0
c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QK
LXsKLSAgICByZXR1cm4gaXNFbmFibGVkKG8pOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OmJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICgh
by0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzdHJh
dGVneSBpcyBwb3NzaWJseSBpbmNvcnJlY3QgZm9yIHRoZSBHVEsrIHBvcnQuCi0gICAgaWYgKG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKLSAgICAgICAgfHwgby0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgewotICAgICAgICBjb25zdCBSZW5kZXJC
b3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOwotICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3Ao
KSArIGJveC0+aGVpZ2h0KCkgLSAyOwotICAgIH0KLQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6
YmFzZWxpbmVQb3NpdGlvbihvKTsKLX0KLQotLy8gVGhpcyBpcyB1c2VkIGluIFJlbmRlclRoZW1l
R3RrMiBhbmQgUmVuZGVyVGhlbWVHdGszLiBOb3JtYWxseSwgaXQgd291bGQgYmUgaW4KLS8vIHRo
ZSBSZW5kZXJUaGVtZUd0ayBoZWFkZXIgKHBlcmhhcHMgYXMgYSBzdGF0aWMgbWV0aG9kKSwgYnV0
IHdlIHdhbnQgdG8gYXZvaWQKLS8vIGhhdmluZyB0byBpbmNsdWRlIEdUSysgaGVhZGVycyBvbmx5
IGZvciB0aGUgR3RrVGV4dERpcmVjdGlvbiBlbnVtLgotR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0
RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIHN3aXRjaCAoZGlyZWN0
aW9uKSB7Ci0gICAgY2FzZSBSVEw6Ci0gICAgICAgIHJldHVybiBHVEtfVEVYVF9ESVJfUlRMOwot
ICAgIGNhc2UgTFRSOgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX0xUUjsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX05PTkU7Ci0gICAgfQotfQotCi1zdGF0
aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0KQotewotICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJP
YmplY3QpKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGlmICh0
aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVf
QUNUSVZFOwotICAgIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAgICAg
IHJldHVybiBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0KLSAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1B
TDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgLy8gU29tZSBsYXlvdXQgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IGJ1dHRvbnMgaWdu
b3JlIGxpbmUtaGVpZ2h0LgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0
b25QYXJ0KQotICAgICAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Ci17Ci0gICAgLy8gVGhlIHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBi
dXR0b25zIGlnbm9yZSBsaW5lIGhlaWdodC4KLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBh
IHByb3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5h
dGVseS4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRq
dXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4g
cGFpbnRNZW51TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsK
LX0KLQotc3RhdGljIHZvaWQgcGFpbnRHZGtQaXhidWYoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBHZGtQaXhidWYqIGljb24sIGNvbnN0IEludFJlY3QmIGljb25SZWN0KQotewotICAg
IEludFNpemUgaWNvblNpemUoZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoaWNvbiksIGdka19waXhidWZf
Z2V0X2hlaWdodChpY29uKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHNjYWxlZEljb247Ci0g
ICAgaWYgKGljb25SZWN0LnNpemUoKSAhPSBpY29uU2l6ZSkgewotICAgICAgICAvLyBXZSBjb3Vs
ZCB1c2UgY2Fpcm9fc2NhbGUoKSBoZXJlIGJ1dCBjYWlyby9waXhtYW4gZG93bnNjYWxlIHF1YWxp
dHkgaXMgcXVpdGUgYmFkLgotICAgICAgICBzY2FsZWRJY29uID0gYWRvcHRHUmVmKGdka19waXhi
dWZfc2NhbGVfc2ltcGxlKGljb24sIGljb25SZWN0LndpZHRoKCksIGljb25SZWN0LmhlaWdodCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdES19JTlRFUlBfQklMSU5FQVIpKTsKLSAgICAgICAgaWNvbiA9IHNjYWxlZEljb24uZ2V0KCk7
Ci0gICAgfQotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKTsKLSAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhi
dWYoY3IsIGljb24sIGljb25SZWN0LngoKSwgaWNvblJlY3QueSgpKTsKLSAgICBjYWlyb19wYWlu
dChjcik7Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci19Ci0KLS8vIERlZmluZWQgaW4gR1RLKyAo
Z3RrL2d0a2ljb25mYWN0b3J5LmMpCi1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZU1lbnUg
PSAxNjsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplU21hbGxUb29sYmFyID0gMTg7Ci1z
dGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZUJ1dHRvbiA9IDIwOwotc3RhdGljIGNvbnN0IGdp
bnQgZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIgPSAyNDsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0lj
b25TaXplRG5kID0gMzI7Ci1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURpYWxvZyA9IDQ4
OwotCi1zdGF0aWMgR3RrSWNvblNpemUgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZ2ludCBwaXhl
bFNpemUpCi17Ci0gICAgaWYgKHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplU21hbGxUb29sYmFyKQot
ICAgICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9NRU5VOwotICAgIGlmIChwaXhlbFNpemUgPj0g
Z3RrSWNvblNpemVTbWFsbFRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVCdXR0b24p
Ci0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX1NNQUxMX1RPT0xCQVI7Ci0gICAgaWYgKHBp
eGVsU2l6ZSA+PSBndGtJY29uU2l6ZUJ1dHRvbiAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUxh
cmdlVG9vbGJhcikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOwotICAgIGlm
IChwaXhlbFNpemUgPj0gZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3Rr
SWNvblNpemVEbmQpCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RPT0xCQVI7
Ci0gICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6ZURuZCAmJiBwaXhlbFNpemUgPCBndGtJ
Y29uU2l6ZURpYWxvZykKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRE5EOwotCi0gICAg
cmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgaSwg
cmVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSkKLXsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+
cmVzZXRQYWRkaW5nKCk7Ci0KLSAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0aGUg
Zm9udCBzaXplLgotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOwotICAgIGlm
IChmb250U2l6ZSA8IGd0a0ljb25TaXplTWVudSkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChmb250U2l6ZSwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBnaW50IHdp
ZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBndGtfaWNvbl9zaXplX2xvb2t1cChnZXRJY29uU2l6
ZUZvclBpeGVsU2l6ZShmb250U2l6ZSksICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChoZWlnaHQsIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHls
ZShzdHlsZSk7Ci19Ci0KLXN0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJl
bnRJbnB1dEVsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVsZW1lbnQuCi0g
ICAgTm9kZSogaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93SG9zdCgpOwotICAg
IGlmICghaW5wdXQpCi0gICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7Ci0gICAg
aWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKLQotICAgIC8vIElmIHBvc3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBy
ZWN0IHZlcnRpY2FsbHkgaW4gdGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgotICAgIC8vIFdlIGFs
c28gYWRkIG9uZSBwaXhlbCBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMg
cm91bmRlZCB1cCBmb3IgYm94IGhlaWdodHMKLSAgICAvLyB0aGF0IGFyZSBldmVuLCB3aGljaCBs
b29rcyBpbiByZWxhdGlvbiB0byB0aGUgYm94IHRleHQuCi0gICAgSW50UmVjdCBpbnB1dENvbnRl
bnRCb3ggPSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRlQ29udGVudEJv
eCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVh
cmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgaW50IGljb25TaXplID0g
c3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJv
eC5oZWlnaHQoKSwgcmVjdC5oZWlnaHQoKSkpOwotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0
LngoKSwgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBp
Y29uU2l6ZSArIDEpIC8gMiwgaWNvblNpemUsIGljb25TaXplKTsKLSAgICByZXR1cm4gc2NhbGVk
UmVjdDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IGljb25SZWN0ID0g
Y2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJl
Y3QpOwotICAgIGlmIChpY29uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlw
ZShHVEtfVFlQRV9FTlRSWSwgR1RLX1NUT0NLX0ZJTkQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVy
T2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJP
YmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7Ci0gICAgcGFp
bnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVj
dFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOwotICAg
IGlmIChpY29uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQ
RV9FTlRSWSwgR1RLX1NUT0NLX0NMRUFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0SWNvblNpemVGb3JQaXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOwotICAgIHBhaW50R2RrUGl4
YnVmKHBhaW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRp
dXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5LgotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1
cygpOwotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIC8vIFRoZSBvdGhlciBwYWludCBtZXRob2RzIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhl
ciBwYWludGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIFJlbmRlclRoZW1lIGFscmVhZHkgY2hlY2tz
IGl0Ci0gICAgLy8gYmVmb3JlIGNhbGxpbmcgdGhlbSwgYnV0IHBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IoKSBpcyBjYWxsZWQgYnkgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIHdoaWNoIGRvZXNu
J3QgY2hlY2sgaXQuCi0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaW50IGljb25TaXplID0gc3RkOjptaW4o
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNv
biA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9DS19D
QVBTX0xPQ0tfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKLQot
ICAgIC8vIE9ubHkgcmUtc2NhbGUgdGhlIGljb24gd2hlbiBpdCdzIHNtYWxsZXIgdGhhbiB0aGUg
bWluaW11bSBpY29uIHNpemUuCi0gICAgaWYgKGljb25TaXplID49IGd0a0ljb25TaXplTWVudSkK
LSAgICAgICAgaWNvblNpemUgPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNvbi5nZXQoKSk7Ci0K
LSAgICAvLyBHVEsrIGxvY2F0ZXMgdGhlIGljb24gcmlnaHQgYWxpZ25lZCBpbiB0aGUgZW50cnku
IFRoZSBnaXZlbiByZWN0YW5nbGUgaXMgYWxyZWFkeQotICAgIC8vIGNlbnRlcmVkIHZlcnRpY2Fs
bHkgYnkgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgotICAgIEludFJlY3QgaWNvblJlY3Qo
cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBpY29uU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg
IHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpY29uU2l6ZSkgLyAyLAotICAgICAgICAgICAg
ICAgICAgICAgaWNvblNpemUsIGljb25TaXplKTsKLSAgICBwYWludEdka1BpeGJ1ZihwYWludElu
Zm8uY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi1kb3VibGUgUmVuZGVyVGhlbWVHdGs6
OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgR3RrU2V0dGluZ3MqIHNldHRpbmdz
ID0gZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7Ci0KLSAgICBnYm9vbGVhbiBzaG91bGRCbGlu
azsKLSAgICBnaW50IHRpbWU7Ci0KLSAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstY3Vy
c29yLWJsaW5rIiwgJnNob3VsZEJsaW5rLCAiZ3RrLWN1cnNvci1ibGluay10aW1lIiwgJnRpbWUs
IE5VTEwpOwotCi0gICAgaWYgKCFzaG91bGRCbGluaykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICByZXR1cm4gdGltZSAvIDIwMDAuOwotfQotCi1kb3VibGUgUmVuZGVyVGhlbWVHdGs6OmdldFNj
cmVlbkRQSSgpCi17Ci0gICAgLy8gRklYTUU6IFJlYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgd2lk
Z2V0J3Mgc2NyZWVuLgotICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVm
YXVsdCgpOwotICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4gOTY7IC8vIERlZmF1bHQg
dG8gOTYgRFBJLgotCi0gICAgZmxvYXQgZHBpID0gZ2RrX3NjcmVlbl9nZXRfcmVzb2x1dGlvbihz
Y3JlZW4pOwotICAgIGlmIChkcGkgPD0gMCkKLSAgICAgICAgcmV0dXJuIDk2OwotICAgIHJldHVy
biBkcGk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUZvbnQoaW50LCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBHdGtTZXR0aW5ncyogc2V0
dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIXNldHRpbmdzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIHdpbGwgYmUgYSBmb250IHNlbGVjdGlvbiBz
dHJpbmcgbGlrZSAiU2FucyAxMCIgc28gd2UgY2Fubm90IHVzZSBpdCBhcyB0aGUgZmFtaWx5IG5h
bWUuCi0gICAgR093blB0cjxnY2hhcj4gZm9udE5hbWU7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRp
bmdzLCAiZ3RrLWZvbnQtbmFtZSIsICZmb250TmFtZS5vdXRQdHIoKSwgTlVMTCk7Ci0KLSAgICBQ
YW5nb0ZvbnREZXNjcmlwdGlvbiogcGFuZ29EZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fZnJvbV9zdHJpbmcoZm9udE5hbWUuZ2V0KCkpOwotICAgIGlmICghcGFuZ29EZXNjcmlw
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkuc2V0RmFtaWx5KHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShwYW5nb0Rlc2Ny
aXB0aW9uKSk7Ci0KLSAgICBpbnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3Np
emUocGFuZ29EZXNjcmlwdGlvbikgLyBQQU5HT19TQ0FMRTsKLSAgICAvLyBJZiB0aGUgc2l6ZSBv
ZiB0aGUgZm9udCBpcyBpbiBwb2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMu
Ci0gICAgaWYgKCFwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29sdXRlKHBh
bmdvRGVzY3JpcHRpb24pKQotICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5EUEkoKSAv
IDcyLjApOwotCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0g
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9m
cmVlKHBhbmdvRGVzY3JpcHRpb24pOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9y
bUNvbG9yc0RpZENoYW5nZSgpCi17Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGluaXRNZWRpYUNv
bG9ycygpOwotI2VuZGlmCi0gICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1TdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJh
TWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250
cm9sc0d0a1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzR3RrVXNlckFn
ZW50U3R5bGVTaGVldCkpOwotfQotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotU3RyaW5n
IFJlbmRlclRoZW1lR3RrOjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YUJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBj
b25zdCBjaGFyKiBmYWxsYmFja1N0b2NrSWNvbk5hbWUpCi17Ci0gICAgSW50UmVjdCBpY29uUmVj
dChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKLSAgICAg
ICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNp
emUpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUlj
b25TaXplKTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJ
Y29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZh
bGxiYWNrU3RvY2tJY29uTmFtZSwKLSAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmpl
Y3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVj
dCksIGljb25SZWN0LndpZHRoKCkpOwotICAgIHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24u
Z2V0KCksIGljb25SZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVHdGs6Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBj
b25zdAotewotICAgIHJldHVybiAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsICJ2aWV3LWZ1bGxzY3JlZW4tc3ltYm9saWMiLCBHVEtf
U1RPQ0tfRlVMTFNDUkVFTik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFN
dXRlQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVj
dCk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGJvb2wgbXV0ZWQgPSBtZWRpYUVsZW1lbnQtPm11dGVkKCk7Ci0gICAgcmV0dXJuIHBhaW50TWVk
aWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwKLSAgICAgICAg
bXV0ZWQgPyAiYXVkaW8tdm9sdW1lLW11dGVkLXN5bWJvbGljIiA6ICJhdWRpby12b2x1bWUtaGln
aC1zeW1ib2xpYyIsCi0gICAgICAgIG11dGVkID8gImF1ZGlvLXZvbHVtZS1tdXRlZCIgOiAiYXVk
aW8tdm9sdW1lLWhpZ2giKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVBs
YXlCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIE5vZGUqIG5vZGUgPSByZW5kZXJP
YmplY3QtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIW5vZGUtPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBib29sIHBsYXkgPSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKSA9PSBN
ZWRpYVBsYXlCdXR0b247Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0
LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwKLSAgICAgICAgcGxheSA/ICJtZWRpYS1wbGF5YmFj
ay1zdGFydC1zeW1ib2xpYyIgOiAibWVkaWEtcGxheWJhY2stcGF1c2Utc3ltYm9saWMiLAotICAg
ICAgICBwbGF5ID8gR1RLX1NUT0NLX01FRElBX1BMQVkgOiBHVEtfU1RPQ0tfTUVESUFfUEFVU0Up
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9i
amVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsICJtZWRpYS1zZWVrLWJhY2t3YXJkLXN5bWJv
bGljIiwgR1RLX1NUT0NLX01FRElBX1JFV0lORCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
cmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwg
cmVjdCwgIm1lZGlhLXNlZWstZm9yd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9GT1JX
QVJEKTsKLX0KLQotc3RhdGljIFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHls
ZShSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgcmV0dXJuIFJvdW5kZWRSZWN0OjpSYWRpaSgK
LSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCkuaW50
VmFsdWUoKSwgc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgp
KSwKLSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgp
LmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZh
bHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCku
d2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdo
dCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdo
dFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNvbnRleHQt
PnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKLQotICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBt
ZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Ci0gICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53
aWR0aCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7Ci0gICAgUmVmUHRy
PFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsr
aW5kZXgpIHsKLSAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwg
SUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChp
bmRleCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgIGZsb2F0IHN0YXJ0UmF0aW8gPSBzdGFy
dCAvIG1lZGlhRHVyYXRpb247Ci0gICAgICAgIGZsb2F0IGxlbmd0aFJhdGlvID0gKGVuZCAtIHN0
YXJ0KSAvIG1lZGlhRHVyYXRpb247Ci0gICAgICAgIGlmICghbGVuZ3RoUmF0aW8pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBJbnRSZWN0IHJhbmdlUmVjdChyKTsKLSAgICAgICAg
cmFuZ2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlvICogdG90YWxUcmFja1dpZHRoKTsKLSAgICAg
ICAgaWYgKGluZGV4KQotICAgICAgICAgICAgcmFuZ2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRv
dGFsVHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChSb3Vu
ZGVkUmVjdChyYW5nZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNl
KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQot
ewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPmZpbGxSb3VuZGVkUmVjdChSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHls
ZShzdHlsZSkpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
LCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1
bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKLSAg
ICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmbG9hdCB2
b2x1bWUgPSBtZWRpYUVsZW1lbnQtPnZvbHVtZSgpOwotICAgIGlmICghdm9sdW1lKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5m
by5jb250ZXh0OwotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5zZXRTdHJva2VT
dHlsZShOb1N0cm9rZSk7Ci0KLSAgICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0g
ICAgZmxvYXQgdHJhY2tIZWlnaHQgPSByZWN0SGVpZ2h0ICogdm9sdW1lOwotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlck9iamVjdC0+c3R5bGUoKTsKLSAgICBJbnRSZWN0IHZvbHVtZVJl
Y3QocmVjdCk7Ci0gICAgdm9sdW1lUmVjdC5tb3ZlKDAsIHJlY3RIZWlnaHQgLSB0cmFja0hlaWdo
dCk7Ci0gICAgdm9sdW1lUmVjdC5zZXRIZWlnaHQoY2VpbCh0cmFja0hlaWdodCkpOwotCi0gICAg
Y29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KFJvdW5kZWRSZWN0KHZvbHVtZVJlY3QsIGJvcmRlclJh
ZGlpRnJvbVN0eWxlKHN0eWxlKSksCi0gICAgICAgIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOwotICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICByZXR1cm4gcGFpbnRNZWRpYVNsaWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCBy
ZWN0KTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3Vy
cmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAotewotICAg
IHJldHVybiBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZv
cm1hdE1lZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOwotfQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBm
cm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAotc3RhdGljIGNvbnN0IGludCBwcm9ncmVz
c0FjdGl2aXR5QmxvY2tzID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25G
cmFtZXMgPSAxMDsKLXN0YXRpYyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZh
bCA9IDAuMTI1OwotZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKLXsKLSAgICByZXR1cm4gcHJv
Z3Jlc3NBbmltYXRpb25JbnRlcnZhbDsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKLXsKLSAg
ICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJh
bWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKLX0KLQotSW50UmVjdCBSZW5kZXJU
aGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKLXsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVj
dChmdWxsQmFyUmVjdCk7Ci0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9S
ZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOwotICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+aXNE
ZXRlcm1pbmF0ZSgpKSB7Ci0gICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0
LndpZHRoKCkgKiByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKTsKLSAgICAgICAgaWYgKHJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAgcHJvZ3Jl
c3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJv
Z3Jlc3NXaWR0aCk7Ci0gICAgICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRo
KTsKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKLSAgICB9Ci0KLSAgICBkb3VibGUgYW5p
bWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKLQot
ICAgIC8vIE5ldmVyIGxldCB0aGUgcHJvZ3Jlc3MgcmVjdCBzaHJpbmsgc21hbGxlciB0aGFuIDIg
cGl4ZWxzLgotICAgIGludCBuZXdXaWR0aCA9IG1heCgyLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSAv
IHByb2dyZXNzQWN0aXZpdHlCbG9ja3MpOwotICAgIGludCBtb3ZhYmxlV2lkdGggPSBwcm9ncmVz
c1JlY3Qud2lkdGgoKSAtIG5ld1dpZHRoOwotICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChuZXdX
aWR0aCk7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSBmaXJzdCAwLjUgdW5pdHMgb2YgdGhlIGFuaW1h
dGlvbiBwcm9ncmVzcyB0byByZXByZXNlbnQgdGhlCi0gICAgLy8gZm9yd2FyZCBtb3Rpb24gYW5k
IHRoZSBzZWNvbmQgMC41IHVuaXRzIHRvIHJlcHJlc2VudCB0aGUgYmFja3dhcmQgbW90aW9uLAot
ICAgIC8vIHRodXMgd2UgbXVsdGlwbHkgYnkgdHdvIGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHN3ZWVw
IG9mIHRoZSBwcm9ncmVzcyBiYXIgd2l0aAotICAgIC8vIGVhY2ggZGlyZWN0aW9uLgotICAgIGlm
IChhbmltYXRpb25Qcm9ncmVzcyA8IDAuNSkKLSAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJv
Z3Jlc3NSZWN0LngoKSArIChhbmltYXRpb25Qcm9ncmVzcyAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsK
LSAgICBlbHNlCi0gICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAo
KDEuMCAtIGFuaW1hdGlvblByb2dyZXNzKSAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKLSAgICByZXR1
cm4gcHJvZ3Jlc3NSZWN0OwotfQotI2VuZGlmCi0KLVN0cmluZyBSZW5kZXJUaGVtZUd0azo6Zmls
ZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBm
b250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Ci17Ci0gICAg
aWYgKHdpZHRoIDw9IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChmaWxl
TGlzdC0+bGVuZ3RoKCkgPiAxKQotICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdo
dFRydW5jYXRlKG11bHRpcGxlRmlsZVVwbG9hZFRleHQoZmlsZUxpc3QtPmxlbmd0aCgpKSwgd2lk
dGgsIGZvbnQsIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7Ci0KLSAgICBT
dHJpbmcgc3RyaW5nOwotICAgIGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgIHN0cmlu
ZyA9IHBhdGhHZXRGaWxlTmFtZShmaWxlTGlzdC0+aXRlbSgwKS0+cGF0aCgpKTsKLSAgICBlbHNl
IGlmIChtdWx0aXBsZUZpbGVzQWxsb3dlZCkKLSAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5v
RmlsZXNTZWxlY3RlZExhYmVsKCk7Ci0gICAgZWxzZQotICAgICAgICBzdHJpbmcgPSBmaWxlQnV0
dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwotCi0gICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6
Y2VudGVyVHJ1bmNhdGUoc3RyaW5nLCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFi
bGVSb3VuZGluZ0hhY2tzKTsKLX0KLQotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotSW50
U2l6ZSBSZW5kZXJUaGVtZUd0azo6c2xpZGVyVGlja1NpemUoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIHNldCB0aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1hcmsuCi0g
ICAgcmV0dXJuIEludFNpemUoMCwgMCk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6c2xpZGVy
VGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gc2V0IHRoaXMgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSB0aWNrIG1hcmtzLgotICAgIHJl
dHVybiAwOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNTgwODAuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBSZW5kZXJUaGVtZUd0a19oCi0jZGVmaW5lIFJlbmRlclRoZW1lR3Rr
X2gKLQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgotCi10eXBlZGVmIHN0cnVjdCBfR2RrQ29sb3JtYXAgR2RrQ29sb3JtYXA7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyVGhlbWVHdGsgOiBwdWJsaWMgUmVuZGVy
VGhlbWUgewotcHJpdmF0ZToKLSAgICBSZW5kZXJUaGVtZUd0aygpOwotICAgIHZpcnR1YWwgflJl
bmRlclRoZW1lR3RrKCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKCk7Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3Mg
Y29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVt
ZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAvLyBBIG1ldGhv
ZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cg
aGFzIGZvY3VzIG9yIG5vdC4KLSAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMo
Y29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0KLSAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFz
a2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCos
IEludFJlY3QmKTsKLQotICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9z
aXRpb24gZm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEg
YmFzZWxpbmUKLSAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5p
bmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBs
ZXMgb2YKLSAgICAvLyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0gICAg
Ly8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgLy8gTGlzdCBCb3ggc2VsZWN0aW9uIGNvbG9yCi0g
ICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBkb3Vi
bGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1Db2xvcnNEaWRDaGFuZ2UoKTsKLQotICAgIC8vIFN5c3RlbSBmb250cyBhbmQgY29sb3JzLgot
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1
YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKLSAgICB2aXJ0dWFsIFN0
cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZs
b2F0IGR1cmF0aW9uKSBjb25zdDsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB2
aXJ0dWFsIFN0cmluZyBleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCk7Ci0jZW5kaWYKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgLy8gUmV0dXJucyBzaXplIG9m
IG9uZSBzbGlkZXIgdGljayBtYXJrIGZvciBhIGhvcml6b250YWwgdHJhY2suCi0gICAgLy8gRm9y
IHZlcnRpY2FsIHRyYWNrcyB3ZSByb3RhdGUgaXQgYW5kIHVzZSBpdC4gaS5lLiBXaWR0aCBpcyBh
bHdheXMgbGVuZ3RoIGFsb25nIHRoZSB0cmFjay4KLSAgICB2aXJ0dWFsIEludFNpemUgc2xpZGVy
VGlja1NpemUoKSBjb25zdDsKLSAgICAvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBvZiBzbGlkZXIg
dGljayBvcmlnaW4gZnJvbSB0aGUgc2xpZGVyIHRyYWNrIGNlbnRlci4KLSAgICB2aXJ0dWFsIGlu
dCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lm
ZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0KiBndGtDb250YWluZXIoKSBjb25z
dDsKLSAgICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtW
U2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtIU2Nyb2xsYmFyKCkgY29uc3Q7
Ci0gICAgc3RhdGljIHZvaWQgZ2V0SW5kaWNhdG9yTWV0cmljcyhDb250cm9sUGFydCwgaW50JiBp
bmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNwYWNpbmcpOwotI2Vsc2UKLSAgICBHdGtTdHls
ZUNvbnRleHQqIGd0a1Njcm9sbGJhclN0eWxlKCk7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRS
YWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIC8v
IFRoZSBNYWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBhbmQg
dGhlICJtZW51IGxpc3QgYnV0dG9uLiIKLSAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiBh
IG1lbnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJl
Ci0gICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFsd2F5
cyB3YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCi0gICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4g
dGhpcyBkaWZmZXJlbnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotI2lmIEVOQUJMRShWSURFTykK
LSAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOwotICAgIHZvaWQgaW5pdE1lZGlhQnV0dG9ucygp
OwotICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJv
bFBhcnQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11
dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Vm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAg
dmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5k
ZXJQcm9ncmVzcyopIGNvbnN0OwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9u
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5u
ZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAg
dmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqLCBjb25z
dCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBPVkVS
UklERTsKLQotICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0VGV4
dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSopOwotICAgIHN0YXRpYyBkb3VibGUgZ2V0U2NyZWVu
RFBJKCk7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgYm9vbCBwYWludE1lZGlhQnV0dG9uKFJl
bmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBjaGFy
KiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFja1N0b2NrSWNvbk5hbWUpOwot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBzdGF0aWMgSW50UmVj
dCBjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwot
I2VuZGlmCi0KLSAgICBtdXRhYmxlIENvbG9yIG1fcGFuZWxDb2xvcjsKLSAgICBtdXRhYmxlIENv
bG9yIG1fc2xpZGVyQ29sb3I7Ci0gICAgbXV0YWJsZSBDb2xvciBtX3NsaWRlclRodW1iQ29sb3I7
Ci0gICAgY29uc3QgaW50IG1fbWVkaWFJY29uU2l6ZTsKLSAgICBjb25zdCBpbnQgbV9tZWRpYVNs
aWRlckhlaWdodDsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgdm9pZCBzZXR1cFdp
ZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0OwotICAg
IHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdDsKLSAgICB2b2lkIGdldENvbWJv
Qm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQs
IGludCYgYm90dG9tKSBjb25zdDsKLSAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgp
IGNvbnN0OwotICAgIGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owot
Ci0gICAgR3RrV2lkZ2V0KiBndGtCdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1Ry
ZWVWaWV3KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtWU2NhbGUoKSBjb25zdDsKLSAgICBH
dGtXaWRnZXQqIGd0a0hTY2FsZSgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrUmFkaW9CdXR0
b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0NoZWNrQnV0dG9uKCkgY29uc3Q7Ci0gICAg
R3RrV2lkZ2V0KiBndGtQcm9ncmVzc0JhcigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrQ29t
Ym9Cb3goKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94QnV0dG9uKCkgY29uc3Q7
Ci0gICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveEFycm93KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0
KiBndGtDb21ib0JveFNlcGFyYXRvcigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrU3BpbkJ1
dHRvbigpIGNvbnN0OwotCi0gICAgR2RrQ29sb3JtYXAqIG1fY29sb3JtYXA7Ci0gICAgbXV0YWJs
ZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93OwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0Nv
bnRhaW5lcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtCdXR0b247Ci0gICAgbXV0YWJs
ZSBHdGtXaWRnZXQqIG1fZ3RrRW50cnk7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVHJl
ZVZpZXc7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjYWxlOwotICAgIG11dGFibGUg
R3RrV2lkZ2V0KiBtX2d0a0hTY2FsZTsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtSYWRp
b0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDaGVja0J1dHRvbjsKLSAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtQcm9ncmVzc0JhcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdl
dCogbV9ndGtDb21ib0JveDsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0JveEJ1
dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0JveEFycm93OwotICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94U2VwYXJhdG9yOwotICAgIG11dGFibGUgR3Rr
V2lkZ2V0KiBtX2d0a1ZTY3JvbGxiYXI7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNj
cm9sbGJhcjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtTcGluQnV0dG9uOwotICAgIGJv
b2wgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcDsKLSAgICBmcmllbmQgY2xhc3MgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYgLy8gUmVuZGVyVGhl
bWVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzYTA0OC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDk2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3Rr
LmgiCi0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0vLyBXZSBuZWVkIHRoaXMgdG8gYWxs
b3cgYnVpbGRpbmcgd2hpbGUgdXNpbmcgR1RLX1dJREdFVF9TRVRfRkxBR1MuIEl0J3MgZGVwcmVj
YXRlZAotLy8gYnV0IHNvbWUgdGhlbWUgZW5naW5lcyByZXF1aXJlIGl0IHRvIGVuc3VyZSBwcm9w
ZXIgcmVuZGVyaW5nIG9mIGZvY3VzIGluZGljYXRvcnMuCi0jdW5kZWYgR1RLX0RJU0FCTEVfREVQ
UkVDQVRFRAotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVu
dHMuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
LSNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVl
dHMuaCIKLSNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSA8Z2Rr
L2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0v
LyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2Fz
IGRlZmluZWQgYXMgTUlOX0FSUk9XX1dJRFRIIGluIGd0a3NwaW5idXR0b24uYy4KLXN0YXRpYyBj
b25zdCBpbnQgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDY7Ci0KLS8vIFRoaXMgaXMgbm90IGEg
c3RhdGljIG1ldGhvZCwgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBHVEsrIGhlYWRl
cnMgaW4gUmVuZGVyVGhlbWVHdGsuaC4KLWV4dGVybiBHdGtUZXh0RGlyZWN0aW9uIGd0a1RleHRE
aXJlY3Rpb24oVGV4dERpcmVjdGlvbik7Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3Jt
SW5pdCgpCi17Ci0gICAgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCA9IHRydWU7Ci0gICAg
bV9ndGtXaW5kb3cgPSAwOwotICAgIG1fZ3RrQ29udGFpbmVyID0gMDsKLSAgICBtX2d0a0J1dHRv
biA9IDA7Ci0gICAgbV9ndGtFbnRyeSA9IDA7Ci0gICAgbV9ndGtUcmVlVmlldyA9IDA7Ci0gICAg
bV9ndGtWU2NhbGUgPSAwOwotICAgIG1fZ3RrSFNjYWxlID0gMDsKLSAgICBtX2d0a1JhZGlvQnV0
dG9uID0gMDsKLSAgICBtX2d0a0NoZWNrQnV0dG9uID0gMDsKLSAgICBtX2d0a1Byb2dyZXNzQmFy
ID0gMDsKLSAgICBtX2d0a0NvbWJvQm94ID0gMDsKLSAgICBtX2d0a0NvbWJvQm94QnV0dG9uID0g
MDsKLSAgICBtX2d0a0NvbWJvQm94QXJyb3cgPSAwOwotICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0
b3IgPSAwOwotICAgIG1fZ3RrVlNjcm9sbGJhciA9IDA7Ci0gICAgbV9ndGtIU2Nyb2xsYmFyID0g
MDsKLSAgICBtX2d0a1NwaW5CdXR0b24gPSAwOwotCi0gICAgbV9jb2xvcm1hcCA9IGdka19zY3Jl
ZW5fZ2V0X3JnYmFfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICBpZiAo
IW1fY29sb3JtYXApIHsKLSAgICAgICAgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCA9IGZh
bHNlOwotICAgICAgICBtX2NvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdF9jb2xvcm1h
cChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIH0KLX0KLQotUmVuZGVyVGhlbWVHdGs6
On5SZW5kZXJUaGVtZUd0aygpCi17Ci0gICAgaWYgKG1fZ3RrV2luZG93KQotICAgICAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3kobV9ndGtXaW5kb3cpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29sb3JzKCkKLXsKLSAgICBHdGtTdHlsZSogc3R5
bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShHVEtfV0lER0VUKGd0a0NvbnRhaW5lcigpKSk7Ci0g
ICAgbV9wYW5lbENvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9OT1JNQUxdOwotICAgIG1fc2xp
ZGVyQ29sb3IgPSBzdHlsZS0+YmdbR1RLX1NUQVRFX0FDVElWRV07Ci0gICAgbV9zbGlkZXJUaHVt
YkNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIHZvaWQgYWRqdXN0UmVjdEZvckZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBJbnRSZWN0JiBy
ZWN0LCBib29sIGlnbm9yZUludGVyaW9yRm9jdXNQcm9wZXJ0eSA9IGZhbHNlKQotewotICAgIGdp
bnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1cyA9IDA7
Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOwotICAgIGlmICghaWdu
b3JlSW50ZXJpb3JGb2N1c1Byb3BlcnR5ICYmIGludGVyaW9yRm9jdXMpCi0gICAgICAgIHJldHVy
bjsKLSAgICByZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotICAgIHN3aXRjaCAocGFydCkgewotICAg
IGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OiB7Ci0gICAgICAgIC8vIFdl
IGlnbm9yZSB0aGUgaW50ZXJpb3IgZm9jdXMgcHJvcGVydHkgYW5kIGFsd2F5cyBleHBhbmQgdGhl
IGZvY3VzIHJlY3QuIEluIEdUSyssIHRoZQotICAgICAgICAvLyBmb2N1cyBpbmRpY2F0b3IgaXMg
dXN1YWxseSBvbiB0aGUgdGV4dCBuZXh0IHRvIGEgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLCBi
dXQgdGhhdCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhcHBlbiBpbiBXZWJDb3JlLiBCeSBleHBhbmRp
bmcgdGhlIGZvY3VzIHJlY3RhbmdsZSB1bmNvbmRpdGlvbmFsbHkgd2UgaW5jcmVhc2UgaXRzIHBy
b21pbmVuY2UuCi0gICAgICAgIGFkanVzdFJlY3RGb3JGb2N1cyhwYXJ0ID09IENoZWNrYm94UGFy
dCA/IGd0a0NoZWNrQnV0dG9uKCkgOiBndGtSYWRpb0J1dHRvbigpLCByZWN0LCB0cnVlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6Ci0gICAg
ICAgIC8vIFNlZSBwYWludElubmVyU3BpbkJ1dHRvbiBmb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5
IHdlIGV4cGFuZCB0aGUgcGFpbnRpbmcgcmVjdC4KLSAgICAgICAgcmVjdC5pbmZsYXRlWSgyKTsK
LSAgICAgICAgcmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgKyAyKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1zdGF0aWMgR3RrU3RhdGVUeXBlIGdldEd0a1N0
YXRlVHlwZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlck9iamVjdCogb2JqZWN0KQotewot
ICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChvYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29u
dHJvbChvYmplY3QpKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAg
IGlmICh0aGVtZS0+aXNQcmVzc2VkKG9iamVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVf
QUNUSVZFOwotICAgIGlmICh0aGVtZS0+aXNIb3ZlcmVkKG9iamVjdCkpCi0gICAgICAgIHJldHVy
biBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIC8vIFRoZSB3aWR0
aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0
aGVtLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnaW50IGluZGlj
YXRvclNpemU7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiaW5kaWNhdG9yLXNp
emUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9y
U2l6ZSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotfQotCi1z
dGF0aWMgdm9pZCBwYWludFRvZ2dsZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QsIEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIC8vIFdlIGRvIG5vdCBjYWxsIGd0a190b2dn
bGVfYnV0dG9uX3NldF9hY3RpdmUgaGVyZSwgYmVjYXVzZSBzb21lIHRoZW1lcyBiZWdpbiBhIHNl
cmllcyBvZgotICAgIC8vIGFuaW1hdGlvbiBmcmFtZXMgaW4gYSAidG9nZ2xlZCIgc2lnbmFsIGhh
bmRsZXIuIFRoaXMgcHV0cyBzb21lIGNoZWNrYm94ZXMgaW4gYSBoYWxmLXdheQotICAgIC8vIGNo
ZWNrZWQgc3RhdGUuIEV2ZXJ5IEdUSysgdGhlbWUgSSB0ZXN0ZWQgbWVyZWx5IGxvb2tzIGF0IHRo
ZSBzaGFkb3cgdHlwZSAoYW5kIG5vdCB0aGUKLSAgICAvLyAnYWN0aXZlJyBwcm9wZXJ0eSkgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGRyYXcgdGhlIGNoZWNrLgotICAgIGd0a193aWRn
ZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsIHRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSAm
JiAhdGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpOwotICAgIGd0a193aWRn
ZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5z
dHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotCi0gICAgYm9vbCBpbmRldGVybWluYXRlID0gdGhlbWUt
PmlzSW5kZXRlcm1pbmF0ZShyZW5kZXJPYmplY3QpOwotICAgIGd0a190b2dnbGVfYnV0dG9uX3Nl
dF9pbmNvbnNpc3RlbnQoR1RLX1RPR0dMRV9CVVRUT04od2lkZ2V0KSwgaW5kZXRlcm1pbmF0ZSk7
Ci0KLSAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKLSAgICBp
ZiAoaW5kZXRlcm1pbmF0ZSkgLy8gVGhpcyBvcmlnaW5hdGVzIGZyb20gdGhlIE1vemlsbGEgY29k
ZS4KLSAgICAgICAgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfRVRDSEVEX0lOOwotICAgIGVsc2Ug
aWYgKHRoZW1lLT5pc0NoZWNrZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgc2hhZG93VHlwZSA9
IEdUS19TSEFET1dfSU47Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRl
eHQoaW5mby5jb250ZXh0LCByZWN0KTsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQo
KSwgcmVjdC5zaXplKCkpOwotICAgIEd0a1N0YXRlVHlwZSB0b2dnbGVTdGF0ZSA9IGdldEd0a1N0
YXRlVHlwZSh0aGVtZSwgcmVuZGVyT2JqZWN0KTsKLSAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAw
OwotICAgIGlmIChHVEtfSVNfUkFESU9fQlVUVE9OKHdpZGdldCkpIHsKLSAgICAgICAgZGV0YWls
ID0gInJhZGlvYnV0dG9uIjsKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludE9wdGlvbihi
dXR0b25SZWN0LCB3aWRnZXQsIHRvZ2dsZVN0YXRlLCBzaGFkb3dUeXBlLCBkZXRhaWwpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGRldGFpbCA9ICJjaGVja2J1dHRvbiI7Ci0gICAgICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRDaGVjayhidXR0b25SZWN0LCB3aWRnZXQsIHRvZ2dsZVN0YXRlLCBz
aGFkb3dUeXBlLCBkZXRhaWwpOwotICAgIH0KLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJl
bmRlck9iamVjdCkpIHsKLSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QoYnV0dG9uUmVjdCk7Ci0g
ICAgICAgIGFkanVzdFJlY3RGb3JGb2N1cyh3aWRnZXQsIGZvY3VzUmVjdCwgdHJ1ZSk7Ci0gICAg
ICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgdG9nZ2xl
U3RhdGUsIGRldGFpbCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVj
a2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUo
dGhpcywgc3R5bGUsIGd0a0NoZWNrQnV0dG9uKCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywg
cmVuZGVyT2JqZWN0LCBpbmZvLCByZWN0LCBndGtDaGVja0J1dHRvbigpKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrUmFk
aW9CdXR0b24oKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8oUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBwYWludFRvZ2dsZSh0aGlzLCByZW5kZXJPYmplY3QsIGluZm8sIHJl
Y3QsIGd0a1JhZGlvQnV0dG9uKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZv
aWQgc2V0V2lkZ2V0SGFzRm9jdXMoR3RrV2lkZ2V0KiB3aWRnZXQsIGdib29sZWFuIGhhc0ZvY3Vz
KQotewotICAgIGdfb2JqZWN0X3NldCh3aWRnZXQsICJoYXMtZm9jdXMiLCBoYXNGb2N1cywgTlVM
TCk7Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgaW4gR1RLKyAyLjIy
LCB5ZXQgdGhlbWUgZW5naW5lcyBzdGlsbCBsb29rCi0gICAgLy8gYXQgdGhlc2UgZmxhZ3Mgd2hl
biBkZXRlcm1pbmluZyBpZiBhIHdpZGdldCBoYXMgZm9jdXMsIHNvIHdlIG11c3QgdXNlIHRoZW0u
Ci0gICAgaWYgKGhhc0ZvY3VzKQotICAgICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQs
IEdUS19IQVNfRk9DVVMpOwotICAgIGVsc2UKLSAgICAgICAgR1RLX1dJREdFVF9VTlNFVF9GTEFH
Uyh3aWRnZXQsIEdUS19IQVNfRk9DVVMpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dEJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBn
dGtCdXR0b24oKTsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXpl
KCkpOwotICAgIEludFJlY3QgZm9jdXNSZWN0KGJ1dHRvblJlY3QpOwotCi0gICAgR3RrU3RhdGVU
eXBlIHN0YXRlID0gZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCk7Ci0gICAgZ3RrX3dpZGdl
dF9zZXRfc3RhdGUod2lkZ2V0LCBzdGF0ZSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9u
KHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7
Ci0KLSAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpIHsKLSAgICAgICAgc2V0V2lkZ2V0SGFzRm9j
dXMod2lkZ2V0LCBUUlVFKTsKLQotICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzID0gMCwg
Zm9jdXNXaWR0aCA9IDAsIGZvY3VzUGFkZGluZyA9IDA7Ci0gICAgICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0KHdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZv
Y3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1
cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkZGluZywgTlVMTCk7Ci0gICAgICAgIC8vIElmIHdl
IGFyZSB1c2luZyBleHRlcmlvciBmb2N1cywgd2Ugc2hyaW5rIHRoZSBidXR0b24gcmVjdCBkb3du
IGJlZm9yZQotICAgICAgICAvLyBkcmF3aW5nLiBJZiB3ZSBhcmUgdXNpbmcgaW50ZXJpb3IgZm9j
dXMgd2Ugc2hyaW5rIHRoZSBmb2N1cyByZWN0LiBUaGlzCi0gICAgICAgIC8vIGFwcHJvYWNoIG9y
aWdpbmF0ZXMgZnJvbSB0aGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUgKGd0azJkcmF3aW5n
LmMpLgotICAgICAgICBpZiAoaW50ZXJpb3JGb2N1cykgewotICAgICAgICAgICAgR3RrU3R5bGUq
IHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKLSAgICAgICAgICAgIGZvY3Vz
UmVjdC5pbmZsYXRlWCgtc3R5bGUtPnh0aGlja25lc3MgLSBmb2N1c1BhZGRpbmcpOwotICAgICAg
ICAgICAgZm9jdXNSZWN0LmluZmxhdGVZKC1zdHlsZS0+eXRoaWNrbmVzcyAtIGZvY3VzUGFkZGlu
Zyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBidXR0b25SZWN0LmluZmxhdGVYKC1m
b2N1c1dpZHRoIC0gZm9jdXNQYWRkaW5nKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0
ZVkoLWZvY3VzUGFkZGluZyAtIGZvY3VzUGFkZGluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0
KTsKLSAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUgPSBzdGF0ZSA9PSBHVEtfU1RBVEVfQUNU
SVZFID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOwotICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRCb3goYnV0dG9uUmVjdCwgd2lkZ2V0LCBzdGF0ZSwgc2hhZG93VHlwZSwgImJ1dHRv
biIpOwotICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCBzdGF0ZSwgImJ1dHRvbiIpOwotCi0gICAg
c2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBGQUxTRSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSBjb25zdAot
ewotICAgIEd0a1dpZGdldCogc2VwYXJhdG9yID0gZ3RrQ29tYm9Cb3hTZXBhcmF0b3IoKTsKLSAg
ICBpZiAoIXNlcGFyYXRvcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBnYm9vbGVhbiBoYXNX
aWRlU2VwYXJhdG9ycyA9IEZBTFNFOwotICAgIGdpbnQgc2VwYXJhdG9yV2lkdGggPSAwOwotICAg
IGd0a193aWRnZXRfc3R5bGVfZ2V0KHNlcGFyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAid2lkZS1zZXBhcmF0b3JzIiwgJmhhc1dpZGVTZXBhcmF0b3JzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKGhhc1dpZGVTZXBhcmF0b3JzKQotICAgICAg
ICByZXR1cm4gc2VwYXJhdG9yV2lkdGg7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxl
KHNlcGFyYXRvciktPnh0aGlja25lc3M7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6Y29tYm9C
b3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIFRha2luZyB0
aGUgZm9udCBzaXplIGFuZCByZXZlcnNpbmcgdGhlIERQSSBjb252ZXJzaW9uIHNlZW1zIHRvIG1h
dGNoCi0gICAgLy8gR1RLKyByZW5kZXJpbmcgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4KLSAgICBy
ZXR1cm4gc3R5bGUtPmZvbnQoKS5zaXplKCkgKiAoNzIuMCAvIFJlbmRlclRoZW1lR3RrOjpnZXRT
Y3JlZW5EUEkoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEJ1dHRvbklubmVyQm9yZGVyKEd0a1dp
ZGdldCogYnV0dG9uLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRv
bSkKLXsKLSAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShidXR0b24p
OwotICAgIGludCBvdXRlckJvcmRlciA9IGd0a19jb250YWluZXJfZ2V0X2JvcmRlcl93aWR0aChH
VEtfQ09OVEFJTkVSKGJ1dHRvbikpOwotICAgIHN0YXRpYyBHdGtCb3JkZXIgZGVmYXVsdElubmVy
Qm9yZGVyID0gezEsIDEsIDEsIDF9OwotICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXI7Ci0gICAg
Z3RrX3dpZGdldF9zdHlsZV9nZXQoYnV0dG9uLCAiaW5uZXItYm9yZGVyIiwgJmlubmVyQm9yZGVy
LCBOVUxMKTsKLSAgICBpZiAoIWlubmVyQm9yZGVyKQotICAgICAgICBpbm5lckJvcmRlciA9ICZk
ZWZhdWx0SW5uZXJCb3JkZXI7Ci0KLSAgICBsZWZ0ID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRl
ci0+bGVmdCArIHN0eWxlLT54dGhpY2tuZXNzOwotICAgIHJpZ2h0ID0gb3V0ZXJCb3JkZXIgKyBp
bm5lckJvcmRlci0+cmlnaHQgKyBzdHlsZS0+eHRoaWNrbmVzczsKLSAgICB0b3AgPSBvdXRlckJv
cmRlciArIGlubmVyQm9yZGVyLT50b3AgKyBzdHlsZS0+eXRoaWNrbmVzczsKLSAgICBib3R0b20g
PSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT5ib3R0b20gKyBzdHlsZS0+eXRoaWNrbmVzczsK
LQotICAgIGlmIChpbm5lckJvcmRlciAhPSAmZGVmYXVsdElubmVyQm9yZGVyKQotICAgICAgICBn
dGtfYm9yZGVyX2ZyZWUoaW5uZXJCb3JkZXIpOwotfQotCi0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6
OmdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGludCYgbGVmdCwgaW50JiB0
b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAotewotICAgIC8vIElmIHRoaXMgbWVu
dSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQotICAg
IC8vIGRvbid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVh
ZHkgdXNlcy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBIGNvbWJvIGJveCBidXR0b24gaXMgYSBidXR0b24g
d2l0aCB3aWRnZXRzIHBhY2tlZCBpbnRvIGl0LgotICAgIEd0a1N0eWxlKiBidXR0b25XaWRnZXRT
dHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwotICAgIGdl
dEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7Ci0KLSAgICAvLyBBZGQgeHRoaWNrbmVzcyBhbW91bnQgb2YgcGFkZGluZyBmb3Ig
ZWFjaCBzaWRlIG9mIHRoZSBzZXBhcmF0b3IuIFRoaXMgZW5zdXJlcwotICAgIC8vIHRoYXQgdGhl
IHRleHQgZG9lcyBub3QgYnVtcCB1cCBhZ2FpbnN0IHRoZSBzZXBhcmF0b3IuCi0gICAgaW50IGFy
cm93QW5kU2VwZXJhdG9yTGVuZ3RoID0gY29tYm9Cb3hBcnJvd1NpemUoc3R5bGUpICsKLSAgICAg
ICAgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpICsgKDMgKiBidXR0b25XaWRnZXRTdHlsZS0+
eHRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAg
ICAgbGVmdCArPSBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKLSAgICBlbHNlCi0gICAgICAgIHJp
Z2h0ICs9IGFycm93QW5kU2VwZXJhdG9yTGVuZ3RoOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0
Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJl
dHVybiBsZWZ0OwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGludCBsZWZ0ID0gMCwgdG9w
ID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwotICAgIGdldENvbWJvQm94UGFkZGluZyhzdHls
ZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICByZXR1cm4gcmlnaHQ7Ci19Ci0KLWlu
dCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAotewotICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0
b20gPSAwOwotICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKLSAgICByZXR1cm4gdG9wOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBp
bnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21i
b0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJu
IGJvdHRvbTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGlmIChwYWludEJ1dHRvbihvYmplY3QsIGluZm8sIHJlY3QpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE1lbnUgbGlzdCBidXR0b24gcGFpbnRpbmcgc3RyYXRlZ3ku
Ci0gICAgLy8gRm9yIGJ1dHRvbnMgd2l0aCBhcHBlYXJzLWFzLWxpc3Qgc2V0IHRvIGZhbHNlICho
YXZpbmcgYSBzZXBhcmF0b3IpOgotICAgIC8vIHwgbGVmdCBib3JkZXIgfCBCdXR0b24gdGV4dCB8
IHh0aGlja25lc3MgfCB2c2VwYXJhdG9yIHwgeHRoaWNrbmVzcyB8IGFycm93IHwgeHRoaWNrbmVz
cyB8IHJpZ2h0IGJvcmRlciB8Ci0gICAgLy8gRm9yIGJ1dHRvbnMgd2l0aCBhcHBlYXJzLWFzLWxp
c3Qgc2V0IHRvIHRydWUgKG5vdCBoYXZpbmcgYSBzZXBhcmF0b3IpOgotICAgIC8vIHwgbGVmdCBi
b3JkZXIgfCBCdXR0b24gdGV4dCB8IGFycm93IHwgeHRoaWNrbmVzcyB8IHJpZ2h0IGJvcmRlciB8
Ci0KLSAgICBpbnQgbGVmdEJvcmRlciA9IDAsIHJpZ2h0Qm9yZGVyID0gMCwgYm90dG9tQm9yZGVy
ID0gMCwgdG9wQm9yZGVyID0gMDsKLSAgICBnZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0Jv
eEJ1dHRvbigpLCBsZWZ0Qm9yZGVyLCB0b3BCb3JkZXIsIHJpZ2h0Qm9yZGVyLCBib3R0b21Cb3Jk
ZXIpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLSAgICBpbnQg
YXJyb3dTaXplID0gY29tYm9Cb3hBcnJvd1NpemUoc3R5bGUpOwotICAgIEd0a1N0eWxlKiBidXR0
b25TdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwotCi0g
ICAgSW50UmVjdCBhcnJvd1JlY3QoMCwgKHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8gMiwg
YXJyb3dTaXplLCBhcnJvd1NpemUpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KQotICAgICAgICBhcnJvd1JlY3Quc2V0WChsZWZ0Qm9yZGVyICsgYnV0dG9uU3R5bGUtPnh0aGlj
a25lc3MpOwotICAgIGVsc2UKLSAgICAgICAgYXJyb3dSZWN0LnNldFgocmVjdC53aWR0aCgpIC0g
cmlnaHRCb3JkZXIgLSBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyAtIGFycm93U2l6ZSk7Ci0gICAg
R3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gaXNQcmVzc2VkKG9iamVjdCkgPyBHVEtfU0hBRE9X
X0lOIDogR1RLX1NIQURPV19PVVQ7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdl
dENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBl
ID0gZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQ
YWludEFycm93KGFycm93UmVjdCwgZ3RrQ29tYm9Cb3hBcnJvdygpLCBzdGF0ZVR5cGUsIHNoYWRv
d1R5cGUsIEdUS19BUlJPV19ET1dOLCAiYXJyb3ciKTsKLQotICAgIC8vIFNvbWUgY29tYm8gYm94
ZXMgZG8gbm90IGhhdmUgYSBzZXBhcmF0b3IuCi0gICAgR3RrV2lkZ2V0KiBzZXBhcmF0b3IgPSBn
dGtDb21ib0JveFNlcGFyYXRvcigpOwotICAgIGlmICghc2VwYXJhdG9yKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGRlY3JlYXNlIHRoZSBoZWlnaHQgb2YgdGhl
IHNlcGFyYXRvciBiYXNlZCBvbiB0aGUgZm9jdXMgcGFkZGluZyBvZiB0aGUgYnV0dG9uLgotICAg
IGdpbnQgZm9jdXNQYWRkaW5nID0gMCwgZm9jdXNXaWR0aCA9IDA7IAotICAgIGd0a193aWRnZXRf
c3R5bGVfZ2V0KGd0a0NvbWJvQm94QnV0dG9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIE5VTEwpOwotICAgIHRvcEJvcmRlciAr
PSBmb2N1c1BhZGRpbmcgKyBmb2N1c1dpZHRoOwotICAgIGJvdHRvbUJvcmRlciArPSBmb2N1c1Bh
ZGRpbmcgKyBmb2N1c1dpZHRoOwotICAgIGludCBzZXBhcmF0b3JXaWR0aCA9IGdldENvbWJvQm94
U2VwYXJhdG9yV2lkdGgoKTsKLSAgICBJbnRSZWN0IHNlcGFyYXRvclJlY3QoMCwgdG9wQm9yZGVy
LCBzZXBhcmF0b3JXaWR0aCwgcmVjdC5oZWlnaHQoKSAtIHRvcEJvcmRlciAtIGJvdHRvbUJvcmRl
cik7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0gICAgICAgIHNlcGFyYXRv
clJlY3Quc2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0b25TdHls
ZS0+eHRoaWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKLSAgICBlbHNlCi0gICAgICAgIHNlcGFy
YXRvclJlY3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBz
ZXBhcmF0b3JXaWR0aCk7Ci0KLSAgICBnYm9vbGVhbiBoYXNXaWRlU2VwYXJhdG9ycyA9IEZBTFNF
OwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHNlcGFyYXRvciwgIndpZGUtc2VwYXJhdG9ycyIs
ICZoYXNXaWRlU2VwYXJhdG9ycywgTlVMTCk7Ci0gICAgaWYgKGhhc1dpZGVTZXBhcmF0b3JzKQot
ICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHNlcGFyYXRvclJlY3QsIHNlcGFyYXRv
ciwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19FVENIRURfT1VULCAidnNlcGFyYXRvciIp
OwotICAgIGVsc2UKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFZMaW5lKHNlcGFyYXRv
clJlY3QsIHNlcGFyYXRvciwgR1RLX1NUQVRFX05PUk1BTCwgInZzZXBhcmF0b3IiKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0K
LSAgICBib29sIGVuYWJsZWQgPSBpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSAmJiAhaXNSZWFkT25s
eUNvbnRyb2wocmVuZGVyT2JqZWN0KTsKLSAgICBHdGtTdGF0ZVR5cGUgYmFja2dyb3VuZFN0YXRl
ID0gZW5hYmxlZCA/IEdUS19TVEFURV9OT1JNQUwgOiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0g
ICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHdpZGdldCwgZW5hYmxlZCk7Ci0gICAgZ3RrX3dp
ZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Qt
PnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0gICAgc2V0V2lkZ2V0SGFzRm9jdXMod2lkZ2V0LCBp
c0ZvY3VzZWQocmVuZGVyT2JqZWN0KSk7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdp
ZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKLSAgICBJbnRSZWN0IHRleHRGaWVsZFJl
Y3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotCi0gICAgLy8gVGhlIGVudHJ5IGJhY2tncm91
bmQgaXMgb25seSBwYWludGVkIG92ZXIgdGhlIGludGVyaW9yIHBhcnQgb2YgdGhlIEdUSysgZW50
cnksIG5vdAotICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUuIFRoaXMgaGFwcGVucyBpbiB0aGUgTW96
aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUgYXMgd2VsbC4KLSAgICBJbnRSZWN0IGludGVyaW9yUmVj
dCh0ZXh0RmllbGRSZWN0KTsKLSAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpOwotICAgIGludGVyaW9yUmVjdC5pbmZsYXRlWCgtc3R5bGUtPnh0aGlja25l
c3MpOwotICAgIGludGVyaW9yUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MpOwotICAg
IHdpZGdldENvbnRleHQuZ3RrUGFpbnRGbGF0Qm94KGludGVyaW9yUmVjdCwgd2lkZ2V0LCBiYWNr
Z3JvdW5kU3RhdGUsIEdUS19TSEFET1dfTk9ORSwgImVudHJ5X2JnIik7Ci0KLSAgICAvLyBUaGlz
IGlzIHJlc3BvbnNpYmxlIGZvciBkcmF3aW5nIHRoZSBhY3R1YWwgZnJhbWUuCi0gICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9O
T1JNQUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOwotCi0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JG
b2N1czsKLSAgICBnaW50IGZvY3VzV2lkdGg7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lk
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlv
ckZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsICBOVUxMKTsKLSAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgIWlu
dGVyaW9yRm9jdXMpIHsKLSAgICAgICAgLy8gV2hlbiBHVEsrIHBhaW50cyBhIHRleHQgZW50cnkg
d2l0aCBmb2N1cywgaXQgc2hyaW5rcyB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgYXJlYSBieSB0aGUK
LSAgICAgICAgLy8gZm9jdXMgd2lkdGggYW5kIHBhaW50cyBvdmVyIHRoZSBwcmV2aW91c2x5IHVu
Zm9jdXNlZCB0ZXh0IGVudHJ5LiBXZSBuZWVkIHRvIGVtdWxhdGUgdGhhdAotICAgICAgICAvLyBi
eSBkcmF3aW5nIGJvdGggdGhlIHVuZm9jdXNlZCBmcmFtZSBhYm92ZSBhbmQgdGhlIGZvY3VzZWQg
ZnJhbWUgaGVyZS4KLSAgICAgICAgSW50UmVjdCBzaGFkb3dSZWN0KHRleHRGaWVsZFJlY3QpOwot
ICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoLWZvY3VzV2lkdGgpOwotICAgICAgICB3aWRnZXRD
b250ZXh0Lmd0a1BhaW50U2hhZG93KHNoYWRvd1JlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1B
TCwgR1RLX1NIQURPV19JTiwgImVudHJ5Iik7Ci0KLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQ
YWludEZvY3VzKHRleHRGaWVsZFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgImVudHJ5
Iik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8m
IGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKGluZm8uY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb250cm9sUGFy
dCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgQVNTRVJUKHBhcnQg
PT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwg
cGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwotCi0gICAgLy8gV2Ugc2hyaW5rIHRoZSB0
cm91Z2ggcmVjdCBzbGlnaHRseSB0byBtYWtlIHJvb20gZm9yIHRoZSBmb2N1cyBpbmRpY2F0b3Iu
Ci0gICAgSW50UmVjdCB0cm91Z2hSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsgLy8gVGhp
cyBpcyByZWxhdGl2ZSB0byByZWN0LgotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gMDsKLSAgICBp
ZiAocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkgewotICAgICAgICB3aWRnZXQgPSBndGtI
U2NhbGUoKTsKLSAgICAgICAgdHJvdWdoUmVjdC5pbmZsYXRlWCgtZ3RrX3dpZGdldF9nZXRfc3R5
bGUod2lkZ2V0KS0+eHRoaWNrbmVzcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0g
Z3RrVlNjYWxlKCk7Ci0gICAgICAgIHRyb3VnaFJlY3QuaW5mbGF0ZVkoLWd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCktPnl0aGlja25lc3MpOwotICAgIH0KLSAgICBndGtfd2lkZ2V0X3NldF9k
aXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0
aW9uKCkpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZv
LmNvbnRleHQsIHJlY3QpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3godHJvdWdoUmVj
dCwgd2lkZ2V0LCBHVEtfU1RBVEVfQUNUSVZFLCBHVEtfU0hBRE9XX09VVCwgInRyb3VnaCIpOwot
ICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWlu
dEZvY3VzKEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCB3aWRnZXQsIGdldEd0a1N0
YXRlVHlwZSh0aGlzLCBvYmplY3QpLCAidHJvdWdoIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKTsKLSAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBh
cnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRl
clRodW1iUGFydCk7Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IDA7Ci0gICAgY29uc3QgY2hh
ciogZGV0YWlsID0gMDsKLSAgICBHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKLSAgICBpZiAo
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHdpZGdldCA9IGd0
a0hTY2FsZSgpOwotICAgICAgICBkZXRhaWwgPSAiaHNjYWxlIjsKLSAgICAgICAgb3JpZW50YXRp
b24gPSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDsKLSAgICB9IGVsc2UgewotICAgICAgICB3
aWRnZXQgPSBndGtWU2NhbGUoKTsKLSAgICAgICAgZGV0YWlsID0gInZzY2FsZSI7Ci0gICAgICAg
IG9yaWVudGF0aW9uID0gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOwotICAgIH0KLSAgICBndGtf
d2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKG9iamVjdC0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIC8vIE9ubHkgc29tZSB0aGVtZXMgaGF2ZSBzbGlk
ZXIgdGh1bWJzIHJlc3BvbmQgdG8gY2xpY2tzIGFuZCBzb21lIGRvbid0LiBUaGlzIGluZm9ybWF0
aW9uIGlzCi0gICAgLy8gZ2F0aGVyZWQgdmlhIHRoZSAnYWN0aXZhdGUtc2xpZGVyJyBwcm9wZXJ0
eSwgYnV0IGl0J3MgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIgYW5kIHJlbW92ZWQgaW4KLSAgICAv
LyBHVEsrIDMueC4gVGhlIGRyYXdiYWNrIG9mIG5vdCBob25vcmluZyBpdCBpcyB0aGF0IHNsaWRl
ciB0aHVtYnMgY2hhbmdlIGNvbG9yIHdoZW4geW91IGNsaWNrCi0gICAgLy8gb24gdGhlbS4gCi0g
ICAgSW50UmVjdCB0aHVtYlJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotICAgIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAg
IHdpZGdldENvbnRleHQuZ3RrUGFpbnRTbGlkZXIodGh1bWJSZWN0LCB3aWRnZXQsIGdldEd0a1N0
YXRlVHlwZSh0aGlzLCBvYmplY3QpLCBHVEtfU0hBRE9XX09VVCwgZGV0YWlsLCBvcmllbnRhdGlv
bik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAg
ICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAocGFydCAh
PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVGh1bWJWZXJ0aWNh
bFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gcGFydCA9
PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gZ3RrSFNjYWxlKCkgOiBndGtWU2NhbGUoKTsK
LSAgICBpbnQgbGVuZ3RoID0gMCwgd2lkdGggPSAwOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0
KHdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX2xlbmd0aCIsICZsZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl93aWR0aCIsICZ3aWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGlmIChwYXJ0ID09IFNsaWRlclRo
dW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5n
dGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotfQotCi0jaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1Byb2dyZXNzQmFyKCk7
Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihy
ZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0KLSAgICBXaWRnZXRSZW5kZXJp
bmdDb250ZXh0IHdpZGdldENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOwotICAgIElu
dFJlY3QgZnVsbFByb2dyZXNzQmFyUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsUHJvZ3Jlc3NCYXJSZWN0LCB3aWRnZXQsIEdU
S19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJ0cm91Z2giKTsKLQotICAgIEd0a1N0eWxl
KiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0gICAgSW50UmVjdCBwcm9n
cmVzc1JlY3QoZnVsbFByb2dyZXNzQmFyUmVjdCk7Ci0gICAgcHJvZ3Jlc3NSZWN0LmluZmxhdGVY
KC1zdHlsZS0+eHRoaWNrbmVzcyk7Ci0gICAgcHJvZ3Jlc3NSZWN0LmluZmxhdGVZKC1zdHlsZS0+
eXRoaWNrbmVzcyk7Ci0gICAgcHJvZ3Jlc3NSZWN0ID0gUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0
ZVByb2dyZXNzUmVjdChyZW5kZXJPYmplY3QsIHByb2dyZXNzUmVjdCk7Ci0KLSAgICBpZiAoIXBy
b2dyZXNzUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3go
cHJvZ3Jlc3NSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9QUkVMSUdIVCwgR1RLX1NIQURPV19PVVQs
ICJiYXIiKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBHdGtTdHlsZSogZ3RrU3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtTcGluQnV0dG9uKCkpOwotICAgIGNvbnN0IFBhbmdv
Rm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNjOwot
ICAgIGdpbnQgZm9udFNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKGZvbnRE
ZXNjcmlwdGlvbik7Ci0KLSAgICAvLyBGb3JjZSBhbiBvZGQgYXJyb3cgc2l6ZSBoZXJlLiBHVEsr
IDMueCBmb3JjZXMgZXZlbiBpbiB0aGlzIGNhc2UsIGJ1dAotICAgIC8vIE5vZG9rYS1iYXNlZCB0
aGVtZXMgbG9vayBpbmNvcnJlY3Qgd2l0aCBhbiBldmVuIGFycm93IHNpemUuCi0gICAgaW50IHdp
ZHRoID0gbWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUp
OwotICAgIHdpZHRoICs9IC0oKHdpZHRoICUgMikgLSAxKSArIGd0a1N0eWxlLT54dGhpY2tuZXNz
OwotCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
Ly8gV2UgZXhwYW5kIHRoZSBwYWludGVkIGFyZWEgYnkgMiBwaXhlbHMgb24gdGhlIHRvcCBhbmQg
Ym90dG9tIGFuZCAyIHBpeGVscyBvbiB0aGUgcmlnaHQuIFRoaXMKLSAgICAvLyBpcyBiZWNhdXNl
IEdUSysgdGhlbWVzIHdhbnQgdG8gZHJhdyBvdmVyIHRoZSB0ZXh0IGJveCBib3JkZXJzLCBidXQg
V2ViQ29yZSByZW5kZXJzIHRoZSBpbm5lcgotICAgIC8vIHNwaW4gYnV0dG9uIGluc2lkZSB0aGUg
dGV4dCBib3guCi0gICAgSW50UmVjdCBleHBhbmRlZFJlY3QocmVjdCk7Ci0gICAgZXhwYW5kZWRS
ZWN0LmluZmxhdGVZKDIpOwotICAgIGV4cGFuZGVkUmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkg
KyAyKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChwYWludElu
Zm8uY29udGV4dCwgZXhwYW5kZWRSZWN0KTsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1Nw
aW5CdXR0b24oKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIElu
dFJlY3QgZnVsbFNwaW5CdXR0b25SZWN0KEludFBvaW50KCksIGV4cGFuZGVkUmVjdC5zaXplKCkp
OwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFNwaW5CdXR0b25SZWN0LCB3aWRn
ZXQsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJzcGluYnV0dG9uIik7Ci0KLSAg
ICBib29sIHVwUHJlc3NlZCA9IGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0
KTsKLSAgICBib29sIHVwSG92ZXJlZCA9IGlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVuZGVy
T2JqZWN0KTsKLSAgICBib29sIGNvbnRyb2xBY3RpdmUgPSBpc0VuYWJsZWQocmVuZGVyT2JqZWN0
KSAmJiAhaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KTsKLSAgICBHdGtTaGFkb3dUeXBl
IHNoYWRvd1R5cGUgPSB1cFByZXNzZWQgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7
Ci0KLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwot
ICAgIGlmIChjb250cm9sQWN0aXZlKSB7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2Jq
ZWN0KSAmJiB1cFByZXNzZWQpCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfQUNU
SVZFOwotICAgICAgICBlbHNlIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAmJiB1cEhvdmVy
ZWQpCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9OT1JNQUw7Ci0gICAgfQot
ICAgIEludFJlY3QgdG9wUmVjdChJbnRQb2ludCgpLCBleHBhbmRlZFJlY3Quc2l6ZSgpKTsKLSAg
ICB0b3BSZWN0LnNldEhlaWdodChleHBhbmRlZFJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRvcFJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dU
eXBlLCAic3BpbmJ1dHRvbl91cCIpOwotCi0gICAgLy8gVGhlIGFycm93IHNpemUvcG9zaXRpb24g
Y2FsY3VsYXRpb24gaGVyZSBpcyBiYXNlZCBvbiB0aGUgYXJiaXRyYXJ5IGd5bW5hc3RpY3MgdGhh
dCBoYXBwZW4KLSAgICAvLyBpbiBndGtzcGluYnV0dG9uLmMuIEl0IGlzbid0IHByZXR0eSB0aGVy
ZSBhbmQgaXQgaXNuJ3QgcHJldHR5IGhlcmUuIFRoaXMgbWFuYWdlcyB0byBtYWtlCi0gICAgLy8g
dGhlIGJ1dHRvbiBsb29rIG5hdGl2ZSBmb3IgbWFueSB0aGVtZXMgdGhvdWdoLgotICAgIEludFJl
Y3QgYXJyb3dSZWN0OwotICAgIGludCBhcnJvd1NpemUgPSAoZXhwYW5kZWRSZWN0LndpZHRoKCkg
LSAzKSAvIDI7Ci0gICAgYXJyb3dTaXplIC09IChhcnJvd1NpemUgJSAyKSAtIDE7IC8vIEZvcmNl
IG9kZC4KLSAgICBhcnJvd1JlY3Quc2V0V2lkdGgoYXJyb3dTaXplKTsKLSAgICBhcnJvd1JlY3Qu
c2V0SGVpZ2h0KGFycm93U2l6ZSk7Ci0gICAgYXJyb3dSZWN0Lm1vdmUoKGV4cGFuZGVkUmVjdC53
aWR0aCgpIC0gYXJyb3dSZWN0LndpZHRoKCkpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAodG9w
UmVjdC5oZWlnaHQoKSAtIGFycm93UmVjdC5oZWlnaHQoKSkgLyAyICsgMSk7Ci0gICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludEFycm93KGFycm93UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRv
d1R5cGUsIEdUS19BUlJPV19VUCwgInNwaW5idXR0b24iKTsKLQotICAgIHNoYWRvd1R5cGUgPSBp
c1ByZXNzZWQocmVuZGVyT2JqZWN0KSAmJiAhdXBQcmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdU
S19TSEFET1dfT1VUOwotICAgIGlmIChjb250cm9sQWN0aXZlKSB7Ci0gICAgICAgIGlmIChpc1By
ZXNzZWQocmVuZGVyT2JqZWN0KSAmJiAhdXBQcmVzc2VkKQotICAgICAgICAgICAgc3RhdGVUeXBl
ID0gR1RLX1NUQVRFX0FDVElWRTsKLSAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9i
amVjdCkgJiYgIXVwSG92ZXJlZCkKLSAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9Q
UkVMSUdIVDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRF
X05PUk1BTDsKLSAgICB9Ci0gICAgSW50UmVjdCBib3R0b21SZWN0KEludFBvaW50KDAsIGV4cGFu
ZGVkUmVjdC5oZWlnaHQoKSAvIDIpLCBleHBhbmRlZFJlY3Quc2l6ZSgpKTsKLSAgICBib3R0b21S
ZWN0LnNldEhlaWdodChleHBhbmRlZFJlY3QuaGVpZ2h0KCkgLSBib3R0b21SZWN0LnkoKSk7Ci0g
ICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChib3R0b21SZWN0LCB3aWRnZXQsIHN0YXRlVHlw
ZSwgc2hhZG93VHlwZSwgInNwaW5idXR0b25fZG93biIpOwotCi0gICAgYXJyb3dSZWN0LnNldFko
YXJyb3dSZWN0LnkoKSArIGJvdHRvbVJlY3QueSgpIC0gMSk7Ci0gICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludEFycm93KGFycm93UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsIEdU
S19BUlJPV19ET1dOLCAic3BpbmJ1dHRvbiIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1H
UmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3aWRnZXRU
eXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdp
bnQgaWNvblNpemUpCi17Ci0gICAgQVNTRVJUKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ09OVEFJ
TkVSIHx8IHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfRU5UUlkpOwotCi0gICAgUmVuZGVyVGhlbWVH
dGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCkuZ2V0KCkpOwotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gd2lkZ2V0VHlwZSA9
PSBHVEtfVFlQRV9DT05UQUlORVIgPyBHVEtfV0lER0VUKHRoZW1lLT5ndGtDb250YWluZXIoKSkg
OiB0aGVtZS0+Z3RrRW50cnkoKTsKLQotICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCk7Ci0gICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19zdHlsZV9s
b29rdXBfaWNvbl9zZXQoc3R5bGUsIGljb25OYW1lKTsKLSAgICByZXR1cm4gYWRvcHRHUmVmKGd0
a19pY29uX3NldF9yZW5kZXJfaWNvbihpY29uU2V0LCBzdHlsZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9u
PihkaXJlY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEd0a1N0YXRlVHlwZT4oc3RhdGUpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a0ljb25TaXplPihpY29u
U2l6ZSksIDAsIDApKTsKLX0KLQotR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJ
Y29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0lj
b25OYW1lLCBjb25zdCBjaGFyICpmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9u
LCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKQotewotICAgIHJldHVybiBnZXRTdG9ja0ljb25G
b3JXaWRnZXRUeXBlKHdpZGdldFR5cGUsIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZGlyZWN0aW9u
LCBzdGF0ZSwgaWNvblNpemUpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gZ3RrRW50cnkoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lk
Z2V0KS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0
azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVybiBndGtfd2lkZ2V0
X2dldF9zdHlsZSh3aWRnZXQpLT5iYXNlW0dUS19TVEFURV9BQ1RJVkVdOwotfQotCi1Db2xvciBS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLSAgICByZXR1cm4g
Z3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RBVEVfU0VMRUNURURdOwot
fQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgp
OwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0W0dUS19TVEFU
RV9BQ1RJVkVdOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJveFNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBn
dGtUcmVlVmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT5i
YXNlW0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjppbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dp
ZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKLX0KLQotQ29sb3IgUmVuZGVy
VGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAot
ewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gZ3Rr
X3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RBVEVfU0VMRUNURURdOwotfQot
Ci1Db2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7
Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRF
X0FDVElWRV07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Db2xvcihpbnQgY3Nz
VmFsdWVJZCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAgICBjYXNlIENT
U1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgcmV0dXJuIENvbG9yKGd0a193aWRnZXRfZ2V0X3N0
eWxlKGd0a0J1dHRvbigpKS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOwotICAgIGNhc2UgQ1NTVmFs
dWVDYXB0aW9udGV4dDoKLSAgICAgICAgcmV0dXJuIENvbG9yKGd0a193aWRnZXRfZ2V0X3N0eWxl
KGd0a0VudHJ5KCkpLT5mZ1tHVEtfU1RBVEVfTk9STUFMXSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGd0a1N0eWxlU2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0
a1N0eWxlKiBwcmV2aW91cywgUmVuZGVyVGhlbWUqIHJlbmRlclRoZW1lKQotewotICAgIC8vIEZJ
WE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGdldCBjYWxsZWQgbWFueSB0aW1l
cyBmb3IgYSBzaW5nbGUgR1RLKyBzdHlsZSBjaGFuZ2Ugc2lnbmFsLgotICAgIHJlbmRlclRoZW1l
LT5wbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cFdpZGdl
dChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBndGtfd2lkZ2V0X3JlYWxpemUod2lkZ2V0KTsK
LSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJhbnNwYXJlbnQtYmct
aGludCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6
OnNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1dpZGdl
dCogd2luZG93KSBjb25zdAotewotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
d2luZG93KSwgd2lkZ2V0KTsKLSAgICBzZXR1cFdpZGdldCh3aWRnZXQpOwotCi0gICAgLy8gRklY
TUU6IFBlcmhhcHMgdGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIHRoZSBjb250YWluaW5n
IHdpbmRvdyBvciBwYXJlbnQgY29udGFpbmVyLgotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2lkZ2V0
LCAic3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNldENhbGxiYWNrKSwgY29uc3RfY2Fz
dDxSZW5kZXJUaGVtZUd0ayo+KHRoaXMpKTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0
azo6Z3RrQ29udGFpbmVyKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtDb250YWluZXIpCi0gICAg
ICAgIHJldHVybiBtX2d0a0NvbnRhaW5lcjsKLQotICAgIG1fZ3RrV2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfY29sb3JtYXAobV9n
dGtXaW5kb3csIG1fY29sb3JtYXApOwotICAgIHNldHVwV2lkZ2V0KG1fZ3RrV2luZG93KTsKLSAg
ICBndGtfd2lkZ2V0X3NldF9uYW1lKG1fZ3RrV2luZG93LCAiTW96aWxsYUd0a1dpZGdldCIpOwot
Ci0gICAgbV9ndGtDb250YWluZXIgPSBndGtfZml4ZWRfbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRB
bmRBZGRUb0NvbnRhaW5lcihtX2d0a0NvbnRhaW5lciwgbV9ndGtXaW5kb3cpOwotICAgIHJldHVy
biBtX2d0a0NvbnRhaW5lcjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQnV0
dG9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtCdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0
a0J1dHRvbjsKLSAgICBtX2d0a0J1dHRvbiA9IGd0a19idXR0b25fbmV3KCk7Ci0gICAgc2V0dXBX
aWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0J1dHRvbiwgZ3RrQ29udGFpbmVyKCkpOwotICAg
IHJldHVybiBtX2d0a0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3Rr
RW50cnkoKSBjb25zdAotewotICAgIGlmIChtX2d0a0VudHJ5KQotICAgICAgICByZXR1cm4gbV9n
dGtFbnRyeTsKLSAgICBtX2d0a0VudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwotICAgIHNldHVwV2lk
Z2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtFbnRyeSwgZ3RrQ29udGFpbmVyKCkpOwotICAgIHJl
dHVybiBtX2d0a0VudHJ5OwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtUcmVl
VmlldygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrVHJlZVZpZXcpCi0gICAgICAgIHJldHVybiBt
X2d0a1RyZWVWaWV3OwotICAgIG1fZ3RrVHJlZVZpZXcgPSBndGtfdHJlZV92aWV3X25ldygpOwot
ICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtUcmVlVmlldywgZ3RrQ29udGFp
bmVyKCkpOwotICAgIHJldHVybiBtX2d0a1RyZWVWaWV3OwotfQotCi1HdGtXaWRnZXQqIFJlbmRl
clRoZW1lR3RrOjpndGtWU2NhbGUoKSBjb25zdAotewotICAgIGlmIChtX2d0a1ZTY2FsZSkKLSAg
ICAgICAgcmV0dXJuIG1fZ3RrVlNjYWxlOwotICAgIG1fZ3RrVlNjYWxlID0gZ3RrX3ZzY2FsZV9u
ZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a1ZTY2FsZSwgZ3Rr
Q29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrSFNjYWxlKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtIU2NhbGUp
Ci0gICAgICAgIHJldHVybiBtX2d0a0hTY2FsZTsKLSAgICBtX2d0a0hTY2FsZSA9IGd0a19oc2Nh
bGVfbmV3KDApOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtIU2NhbGUs
IGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtIU2NhbGU7Ci19Ci0KLUd0a1dpZGdl
dCogUmVuZGVyVGhlbWVHdGs6Omd0a1JhZGlvQnV0dG9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9n
dGtSYWRpb0J1dHRvbikKLSAgICAgICAgcmV0dXJuIG1fZ3RrUmFkaW9CdXR0b247Ci0gICAgbV9n
dGtSYWRpb0J1dHRvbiA9IGd0a19yYWRpb19idXR0b25fbmV3KDApOwotICAgIHNldHVwV2lkZ2V0
QW5kQWRkVG9Db250YWluZXIobV9ndGtSYWRpb0J1dHRvbiwgZ3RrQ29udGFpbmVyKCkpOwotICAg
IHJldHVybiBtX2d0a1JhZGlvQnV0dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3Rr
OjpndGtDaGVja0J1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQ2hlY2tCdXR0b24pCi0g
ICAgICAgIHJldHVybiBtX2d0a0NoZWNrQnV0dG9uOwotICAgIG1fZ3RrQ2hlY2tCdXR0b24gPSBn
dGtfY2hlY2tfYnV0dG9uX25ldygpOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIo
bV9ndGtDaGVja0J1dHRvbiwgZ3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a0NoZWNr
QnV0dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtQcm9ncmVzc0Jhcigp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrUHJvZ3Jlc3NCYXIpCi0gICAgICAgIHJldHVybiBtX2d0
a1Byb2dyZXNzQmFyOwotICAgIG1fZ3RrUHJvZ3Jlc3NCYXIgPSBndGtfcHJvZ3Jlc3NfYmFyX25l
dygpOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtQcm9ncmVzc0Jhciwg
Z3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1Byb2dyZXNzQmFyOwotfQotCi1zdGF0
aWMgdm9pZCBnZXRHdGtDb21ib0JveEJ1dHRvbihHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIg
dGFyZ2V0KQotewotICAgIGlmICghR1RLX0lTX1RPR0dMRV9CVVRUT04od2lkZ2V0KSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIEd0a1dpZGdldCoqIHdpZGdldFRhcmdldCA9IHN0YXRpY19jYXN0PEd0
a1dpZGdldCoqPih0YXJnZXQpOwotICAgICp3aWRnZXRUYXJnZXQgPSB3aWRnZXQ7Ci19Ci0KLXR5
cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIGFycm93OwotICAgIEd0a1dpZGdldCogc2Vw
YXJhdG9yOwotfSBDb21ib0JveFdpZGdldFBpZWNlczsKLQotc3RhdGljIHZvaWQgZ2V0R3RrQ29t
Ym9Cb3hQaWVjZXMoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYg
KEdUS19JU19BUlJPVyh3aWRnZXQpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lk
Z2V0UGllY2VzKj4oZGF0YSktPmFycm93ID0gd2lkZ2V0OwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChHVEtfSVNfU0VQQVJBVE9SKHdpZGdldCkpIAotICAgICAgICBzdGF0aWNfY2Fz
dDxDb21ib0JveFdpZGdldFBpZWNlcyo+KGRhdGEpLT5zZXBhcmF0b3IgPSB3aWRnZXQ7Ci19Ci0K
LUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbWJvQm94KCkgY29uc3QKLXsKLSAgICBp
ZiAobV9ndGtDb21ib0JveCkKLSAgICAgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3g7Ci0gICAgbV9n
dGtDb21ib0JveCA9IGd0a19jb21ib19ib3hfbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRU
b0NvbnRhaW5lcihtX2d0a0NvbWJvQm94LCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1f
Z3RrQ29tYm9Cb3g7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnJlZnJlc2hDb21ib0JveENo
aWxkcmVuKCkgY29uc3QKLXsKLSAgICBndGtDb21ib0JveCgpOyAvLyBFbnN1cmUgdGhhdCB3ZSd2
ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94LgotCi0gICAgLy8gU29tZSB0aGVtZXMgbG9vayBh
dCB3aWRnZXQgYW5jZXN0cnkgdG8gZGV0ZXJtaW5lIGhvdyB0byByZW5kZXIgd2lkZ2V0cywgc28K
LSAgICAvLyBnZXQgdGhlIEd0a0J1dHRvbiB0aGF0IGlzIHRoZSBhY3R1YWwgY2hpbGQgb2YgdGhl
IGNvbWJvIGJveC4KLSAgICBndGtfY29udGFpbmVyX2ZvcmFsbChHVEtfQ09OVEFJTkVSKG1fZ3Rr
Q29tYm9Cb3gpLCBnZXRHdGtDb21ib0JveEJ1dHRvbiwgJm1fZ3RrQ29tYm9Cb3hCdXR0b24pOwot
ICAgIEFTU0VSVChtX2d0a0NvbWJvQm94QnV0dG9uKTsKLSAgICBzZXR1cFdpZGdldChtX2d0a0Nv
bWJvQm94QnV0dG9uKTsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1f
Z3RrQ29tYm9Cb3hCdXR0b24pLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyKj4oJm1fZ3RrQ29t
Ym9Cb3hCdXR0b24pKTsKLQotICAgIENvbWJvQm94V2lkZ2V0UGllY2VzIHBpZWNlcyA9IHsgMCwg
MCB9OwotICAgIEd0a1dpZGdldCogYnV0dG9uQ2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtf
QklOKGd0a0NvbWJvQm94QnV0dG9uKCkpKTsKLSAgICBpZiAoR1RLX0lTX0hCT1goYnV0dG9uQ2hp
bGQpKQotICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFsbChHVEtfQ09OVEFJTkVSKGJ1dHRvbkNo
aWxkKSwgZ2V0R3RrQ29tYm9Cb3hQaWVjZXMsICZwaWVjZXMpOwotICAgIGVsc2UgaWYgKEdUS19J
U19BUlJPVyhidXR0b25DaGlsZCkpCi0gICAgICAgIHBpZWNlcy5hcnJvdyA9IGJ1dHRvbkNoaWxk
OwotCi0gICAgQVNTRVJUKHBpZWNlcy5hcnJvdyk7Ci0gICAgbV9ndGtDb21ib0JveEFycm93ID0g
cGllY2VzLmFycm93OwotICAgIHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hBcnJvdyk7Ci0gICAg
Ly8gV2hlbiB0aGUgc3R5bGUgY2hhbmdlcywgdGhlIGNvbWJvIGJveCBtYXkgZGVzdHJveSBpdHMg
Y2hpbGRyZW4uCi0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0Nv
bWJvQm94QXJyb3cpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyKj4oJm1fZ3RrQ29tYm9Cb3hB
cnJvdykpOwotCi0gICAgbV9ndGtDb21ib0JveFNlcGFyYXRvciA9IHBpZWNlcy5zZXBhcmF0b3I7
Ci0gICAgaWYgKG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpIHsKLSAgICAgICAgc2V0dXBXaWRnZXQo
bV9ndGtDb21ib0JveFNlcGFyYXRvcik7Ci0gICAgICAgIC8vIFdoZW4gdGhlIHN0eWxlIGNoYW5n
ZXMsIHRoZSBjb21ibyBib3ggbWF5IGRlc3Ryb3kgaXRzIGNoaWxkcmVuLgotICAgICAgICBnX29i
amVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpLCBy
ZWludGVycHJldF9jYXN0PGdwb2ludGVyKj4oJm1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpKTsKLSAg
ICB9Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbWJvQm94QnV0dG9uKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9ndGtDb21ib0JveEJ1dHRvbikKLSAgICAgICAgcmV0dXJuIG1f
Z3RrQ29tYm9Cb3hCdXR0b247Ci0gICAgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKTsKLSAgICBB
U1NFUlQobV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hCdXR0
b247Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbWJvQm94QXJyb3coKSBj
b25zdAotewotICAgIGlmIChtX2d0a0NvbWJvQm94QXJyb3cpCi0gICAgICAgIHJldHVybiBtX2d0
a0NvbWJvQm94QXJyb3c7Ci0gICAgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKTsKLSAgICBBU1NF
UlQobV9ndGtDb21ib0JveEFycm93KTsKLSAgICByZXR1cm4gbV9ndGtDb21ib0JveEFycm93Owot
fQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveFNlcGFyYXRvcigpIGNv
bnN0Ci17Ci0gICAgLy8gbV9ndGtDb21ib0JveFNlcGFyYXRvciBtYXkgYmUgbnVsbCBlaXRoZXIg
YmVjYXVzZSB3ZSBoYXZlbid0IGluaXRpYWxpemVkIHRoZSBjb21ibyBib3gKLSAgICAvLyBvciBi
ZWNhdXNlIHRoZSBjb21ibyBib3hlcyBpbiB0aGlzIHRoZW1lIGRvbid0IGhhdmUgc2VwYXJhdG9y
cy4gSWYgbV9ndGtDb21ib0JveEFycm93Ci0gICAgLy8gYXJyb3cgaXNuJ3QgbnVsbCwgd2UgZGVm
aW5pdGVseSBoYXZlIGluaXRpYWxpemVkIHRoZSBjb21ibyBib3guCi0gICAgaWYgKG1fZ3RrQ29t
Ym9Cb3hBcnJvdyB8fCBtX2d0a0NvbWJvQm94QnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtD
b21ib0JveFNlcGFyYXRvcjsKLSAgICByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpOwotICAgIHJl
dHVybiBtX2d0a0NvbWJvQm94U2VwYXJhdG9yOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1l
R3RrOjpndGtIU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtIU2Nyb2xsYmFyKQot
ICAgICAgICByZXR1cm4gbV9ndGtIU2Nyb2xsYmFyOwotICAgIG1fZ3RrSFNjcm9sbGJhciA9IGd0
a19oc2Nyb2xsYmFyX25ldygwKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1f
Z3RrSFNjcm9sbGJhciwgZ3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a0hTY3JvbGxi
YXI7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1ZTY3JvbGxiYXIoKSBjb25z
dAotewotICAgIGlmIChtX2d0a1ZTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX2d0a1ZTY3Jv
bGxiYXI7Ci0gICAgbV9ndGtWU2Nyb2xsYmFyID0gZ3RrX3ZzY3JvbGxiYXJfbmV3KDApOwotICAg
IHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtWU2Nyb2xsYmFyLCBndGtDb250YWlu
ZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrVlNjcm9sbGJhcjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrU3BpbkJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrU3BpbkJ1
dHRvbikKLSAgICAgICAgcmV0dXJuIG1fZ3RrU3BpbkJ1dHRvbjsKLSAgICBtX2d0a1NwaW5CdXR0
b24gPSBndGtfc3Bpbl9idXR0b25fbmV3X3dpdGhfcmFuZ2UoMCwgMTAsIDEpOwotICAgIHNldHVw
V2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtTcGluQnV0dG9uLCBndGtDb250YWluZXIoKSk7
Ci0gICAgcmV0dXJuIG1fZ3RrU3BpbkJ1dHRvbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDlhN2Y1YTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrMy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIK
LSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5o
IgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgPGNtYXRoPgotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdo
ZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19TSVpFIGluIGd0a2Fycm93LmMuCi1zdGF0
aWMgY29uc3QgaW50IG1pbkFycm93U2l6ZSA9IDE1OwotLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2
YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19X
SURUSCBpbiBndGtzcGluYnV0dG9uLmMuCi1zdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25B
cnJvd1NpemUgPSA2OwotCi10eXBlZGVmIEhhc2hNYXA8R1R5cGUsIEdSZWZQdHI8R3RrU3R5bGVD
b250ZXh0PiA+IFN0eWxlQ29udGV4dE1hcDsKLXN0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxl
Q29udGV4dE1hcCgpOwotCi1zdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2Jq
ZWN0KiwgR1BhcmFtU3BlYyopCi17Ci0gICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzdHlsZUNvbnRleHRNYXAoKS5lbmQoKTsKLSAgICBmb3IgKFN0eWxlQ29udGV4dE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRl
ci0+dmFsdWUuZ2V0KCkpOwotCi0gICAgUGFnZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0Zv
ckFsbFBhZ2VzKCk7Ci19Ci0KLXN0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1h
cCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHlsZUNvbnRleHRNYXAsIG1hcCwgKCkp
OwotCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWluaXRp
YWxpemVkKSB7Ci0gICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19n
ZXRfZGVmYXVsdCgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5
OjpndGstdGhlbWUtbmFtZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAw
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9y
LXNjaGVtZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKLSAgICAg
ICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0
aWMgR3RrU3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKLXsK
LSAgICBTdHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAo
KS5hZGQod2lkZ2V0VHlwZSwgMCk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0KLSAgICBHdGtXaWRnZXRQ
YXRoKiBwYXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOwotICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLCB3aWRnZXRUeXBlKTsKLQotICAgIGlmICh3aWRnZXRUeXBlID09IEdU
S19UWVBFX1NDUk9MTEJBUikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNz
KHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TQ1JPTExCQVIpOwotICAgIGVsc2UgaWYgKHdpZGdl
dFR5cGUgPT0gR1RLX1RZUEVfRU5UUlkpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2Fk
ZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwotICAgIGVsc2UgaWYgKHdp
ZGdldFR5cGUgPT0gR1RLX1RZUEVfQVJST1cpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVy
X2FkZF9jbGFzcyhwYXRoLCAwLCAiYXJyb3ciKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09
IEdUS19UWVBFX0JVVFRPTikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNz
KHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotICAgIGVsc2UgaWYgKHdpZGdldFR5
cGUgPT0gR1RLX1RZUEVfU0NBTEUpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0NBTEUpOwotICAgIGVsc2UgaWYgKHdpZGdl
dFR5cGUgPT0gR1RLX1RZUEVfU0VQQVJBVE9SKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NFUEFSQVRPUik7Ci0gICAgZWxz
ZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9QUk9HUkVTU19CQVIpCi0gICAgICAgIGd0a193
aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JF
U1NCQVIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU1BJTl9CVVRUT04p
Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZ
TEVfQ0xBU1NfU1BJTkJVVFRPTik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQ
RV9UUkVFX1ZJRVcpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRo
LCAwLCBHVEtfU1RZTEVfQ0xBU1NfVklFVyk7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBH
VEtfVFlQRV9DSEVDS19CVVRUT04pCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0spOwotICAgIGVsc2UgaWYgKHdpZGdl
dFR5cGUgPT0gR1RLX1RZUEVfUkFESU9fQlVUVE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKLQotICAgIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250
ZXh0X25ldygpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChjb250ZXh0LmdldCgp
LCBwYXRoKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsKLQotICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUgPSBjb250ZXh0OwotICAgIHJldHVybiBjb250ZXh0LmdldCgpOwotfQot
Ci1HdGtTdHlsZUNvbnRleHQqIFJlbmRlclRoZW1lR3RrOjpndGtTY3JvbGxiYXJTdHlsZSgpCi17
Ci0gICAgcmV0dXJuIGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ1JPTExCQVIpOwotfQotCi0v
LyBUaGlzIGlzIG5vdCBhIHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBo
YXZpbmcgR1RLKyBoZWFkZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCi1leHRlcm4gR3RrVGV4dERp
cmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOwotCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjpwbGF0Zm9ybUluaXQoKQotewotfQotCi1SZW5kZXJUaGVtZUd0azo6flJlbmRlclRo
ZW1lR3RrKCkKLXsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVuZGVyVGhlbWVHdGs6
OmluaXRNZWRpYUNvbG9ycygpCi17Ci0gICAgR2RrUkdCQSBjb2xvcjsKLSAgICBHdGtTdHlsZUNv
bnRleHQqIGNvbnRhaW5lckNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJ
TkVSKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRh
aW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKLSAgICBtX3BhbmVs
Q29sb3IgPSBjb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xv
cihjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZjb2xvcik7Ci0gICAg
bV9zbGlkZXJDb2xvciA9IGNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3Jv
dW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmY29s
b3IpOwotICAgIG1fc2xpZGVyVGh1bWJDb2xvciA9IGNvbG9yOwotfQotI2VuZGlmCi0KLXN0YXRp
YyB2b2lkIGFkanVzdFJlY3RGb3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOwotICAgIHJl
Y3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSAwOwotICAg
IGJvb2wgY2hlY2tJbnRlcmlvckZvY3VzID0gZmFsc2U7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9
IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotICAgIHN3aXRjaCAocGFydCkg
ewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICBj
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVf
Q0hFQ0tfQlVUVE9OIDogR1RLX1RZUEVfUkFESU9fQlVUVE9OKTsKLQotICAgICAgICBnaW50IGlu
ZGljYXRvclNwYWNpbmc7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250
ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7Ci0gICAg
ICAgIHJlY3QuaW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5nKTsKLQotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFy
dDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0
dG9uUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2Fz
ZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfRU5UUlkpOwotICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGNvbnRleHQpOwotICAgIGlmIChjaGVja0ludGVyaW9yRm9jdXMpIHsKLSAgICAgICAgZ2Jvb2xl
YW4gaW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNv
bnRleHQsICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLCBOVUxMKTsKLSAgICAgICAg
aWYgKGludGVyaW9yRm9jdXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGFkanVz
dFJlY3RGb3JGb2N1cyhjb250ZXh0LCByZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0VG9nZ2xl
U2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAg
ICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3Vs
ZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUg
ZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCi0gICAgLy8gR1RLKyB1c2VycyB0ZW5kIHRv
IGRlbWFuZCB0aGUgbmF0aXZlIGxvb2suCi0gICAgLy8gSXQgY291bGQgYmUgbWFkZSBhIGNvbmZp
Z3VyYXRpb24gb3B0aW9uIHZhbHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUg
Y29tcGF0aWJpbGl0eS4KLSAgICBnaW50IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXpl
LCBOVUxMKTsKLQotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7Ci0K
LSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotfQotCi1zdGF0aWMgdm9pZCBwYWlu
dFRvZ2dsZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgZnVsbFJlY3QpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0g
Z2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
Y29udGV4dCk7Ci0KLSAgICAvLyBTb21lIHRoZW1lcyBkbyBub3QgcmVuZGVyIGxhcmdlIHRvZ2ds
ZSBidXR0b25zIHByb3Blcmx5LCBzbyB3ZSBzaW1wbHkKLSAgICAvLyBzaHJpbmsgdGhlIHJlY3Rh
bmdsZSBiYWNrIGRvd24gdG8gdGhlIGRlZmF1bHQgc2l6ZSBhbmQgdGhlbiBjZW50ZXIgaXQKLSAg
ICAvLyBpbiB0aGUgZnVsbCB0b2dnbGUgYnV0dG9uIHJlZ2lvbi4gVGhlIHJlYXNvbiBmb3Igbm90
IHNpbXBseSBmb3JjaW5nIHRvZ2dsZQotICAgIC8vIGJ1dHRvbnMgdG8gYmUgYSBzbWFsbGVyIHNp
emUgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHNpdGUgbGF5b3V0cy4KLSAgICBnaW50
IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQs
ICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKLSAgICBJbnRSZWN0IHJl
Y3QoZnVsbFJlY3QpOwotICAgIGlmIChyZWN0LndpZHRoKCkgPiBpbmRpY2F0b3JTaXplKSB7Ci0g
ICAgICAgIHJlY3QuaW5mbGF0ZVgoLShyZWN0LndpZHRoKCkgLSBpbmRpY2F0b3JTaXplKSAvIDIp
OwotICAgICAgICByZWN0LnNldFdpZHRoKGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3Qu
d2lkdGgoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6ZSArIDEuCi0gICAgfQotCi0gICAgaWYg
KHJlY3QuaGVpZ2h0KCkgPiBpbmRpY2F0b3JTaXplKSB7Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVko
LShyZWN0LmhlaWdodCgpIC0gaW5kaWNhdG9yU2l6ZSkgLyAyKTsKLSAgICAgICAgcmVjdC5zZXRI
ZWlnaHQoaW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2UgcmVjdC5oZWlnaHQoKSB3YXMgZXF1YWwg
dG8gaW5kaWNhdG9yU2l6ZSArIDEuCi0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
Q0hFQ0tfQlVUVE9OID8gR1RLX1NUWUxFX0NMQVNTX0NIRUNLIDogR1RLX1NUWUxFX0NMQVNTX1JB
RElPKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQo
cmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkK
LSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBp
ZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBpZiAodGhlbWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5k
ZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTkNPTlNJU1RFTlQ7
Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQo
cmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0
a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9D
SEVDS19CVVRUT04pCi0gICAgICAgIGd0a19yZW5kZXJfY2hlY2soY29udGV4dCwgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZWxzZQotICAgICAgICBndGtfcmVuZGVy
X29wdGlvbihjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQot
ICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgSW50UmVj
dCBpbmRpY2F0b3JSZWN0KHJlY3QpOwotICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Ci0g
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNw
YWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7Ci0gICAgICAgIGluZGljYXRvclJlY3Qu
aW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5nKTsKLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250
ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGluZGljYXRv
clJlY3QueCgpLCBpbmRpY2F0b3JSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRpY2F0b3JSZWN0LndpZHRoKCksIGluZGljYXRvclJlY3QuaGVpZ2h0KCkpOwotICAgIH0KLQot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0g
ICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKSwg
c3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9DSEVDS19CVVRU
T04sIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Ci17Ci0gICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUkFE
SU9fQlVUVE9OKSwgc3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlv
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9S
QURJT19CVVRUT04sIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUs
IEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIElu
dFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAo
IXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRy
b2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5T
SVRJVkU7Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBpZiAodGhlbWUtPmlz
UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19B
Q1RJVkU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBpZiAodGhlbWUtPmlzRGVmYXVsdChy
ZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIEd0a0JvcmRlciogYm9yZGVyUHRyID0gMDsKLSAgICAg
ICAgR3RrQm9yZGVyIGJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OwotCi0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiZGVmYXVsdC1ib3JkZXIiLCAmYm9yZGVyUHRy
LCBOVUxMKTsKLSAgICAgICAgaWYgKGJvcmRlclB0cikgewotICAgICAgICAgICAgYm9yZGVyID0g
KmJvcmRlclB0cjsKLSAgICAgICAgICAgIGd0a19ib3JkZXJfZnJlZShib3JkZXJQdHIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKGJvcmRlci5sZWZ0LCBib3JkZXIudG9w
KTsKLSAgICAgICAgYnV0dG9uUmVjdC5zZXRXaWR0aChidXR0b25SZWN0LndpZHRoKCkgLSAoYm9y
ZGVyLmxlZnQgKyBib3JkZXIucmlnaHQpKTsKLSAgICAgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQo
YnV0dG9uUmVjdC5oZWlnaHQoKSAtIChib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSkpOwotCi0g
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xB
U1NfREVGQVVMVCk7Ci0gICAgfQotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54
KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0
KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1
dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodGhlbWUt
PmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9j
dXNQYWQ7Ci0gICAgICAgIGdib29sZWFuIGRpc3BsYWNlRm9jdXMsIGludGVyaW9yRm9jdXM7Ci0g
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZv
Y3VzUGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZv
Y3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGlzcGxhY2UtZm9jdXMiLCAmZGlzcGxhY2VGb2N1cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7Ci0g
ICAgICAgICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7Ci0gICAgICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZs
YWdzKSwgJmJvcmRlcldpZHRoKTsKLQotICAgICAgICAgICAgYnV0dG9uUmVjdCA9IEludFJlY3Qo
YnV0dG9uUmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNQYWQsIGJ1dHRvblJlY3Qu
eSgpICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNQYWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidXR0b25SZWN0LndpZHRoKCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lk
dGgubGVmdCArIGJvcmRlcldpZHRoLnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgu
dG9wICsgYm9yZGVyV2lkdGguYm90dG9tKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
YnV0dG9uUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Ci0KLSAgICAgICAgaWYg
KGRpc3BsYWNlRm9jdXMgJiYgdGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAg
ICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKLSAgICAgICAgICAgIGdpbnQgY2hpbGRE
aXNwbGFjZW1lbnRZOwotICAgICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRp
c3BsYWNlbWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50WCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNwbGFj
ZW1lbnRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
ICAgICAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNw
bGFjZW1lbnRZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0
LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWln
aHQoKSk7Ci0gICAgfQotfQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxl
Q29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29u
dGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0
YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0KLSAgICByZW5kZXJCdXR0b24o
dGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotCi0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3Rr
Qm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQotewotICAgIC8vIElm
IHRoaXMgbWVudSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1l
LCB3ZQotICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJD
b3JlIGFscmVhZHkgdXNlcy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRy
b2xQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4
dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9y
ZGVyKTsKLQotICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7Ci0gICAgZ2ludCBmb2N1c1dpZHRo
LCBmb2N1c1BhZDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9y
Rm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRo
IiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1w
YWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKLSAgICBmb2N1cyA9IGludGVyaW9yRm9jdXMgPyBm
b2N1c1dpZHRoICsgZm9jdXNQYWQgOiAwOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShjb250ZXh0KTsKLQotICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQ
QVJBVE9SKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgR3Rr
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihn
dGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSkpOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOwotCi0gICAgZ2Jvb2xlYW4gd2lk
ZVNlcGFyYXRvcnM7Ci0gICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAvLyBHVEsrIGFsd2F5cyB1c2Vz
IGJvcmRlci5sZWZ0LCByZWdhcmRsZXNzIG9mIHRleHQgZGlyZWN0aW9uLiBTZWUgZ3Rrc2VwZXJh
dG9yLmMuCi0gICAgaWYgKCF3aWRlU2VwYXJhdG9ycykKLSAgICAgICAgc2VwYXJhdG9yV2lkdGgg
PSBib3JkZXIubGVmdDsKLQotICAgIHNlcGFyYXRvciA9IHNlcGFyYXRvcldpZHRoOwotCi0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLX0KLQotaW50IFJlbmRlclRoZW1l
R3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAot
ewotICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwotICAgIGludCBm
b2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwotICAgIGdldENvbWJvQm94TWV0cmlj
cyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKLSAgICBp
bnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoOwotICAgIGlmIChzdHlsZS0+
ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWlu
QXJyb3dTaXplOwotICAgIHJldHVybiBsZWZ0OwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAg
IEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwotICAgIGludCBmb2N1c1dp
ZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwotICAgIGdldENvbWJvQm94TWV0cmljcyhzdHls
ZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKLSAgICBpbnQgcmln
aHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7Ci0gICAgaWYgKHN0eWxlLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpCi0gICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJy
b3dTaXplOwotICAgIHJldHVybiByaWdodDsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgR3Rr
Qm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAgaW50IGZvY3VzV2lkdGgg
PSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBi
b3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwotICAgIHJldHVybiBib3Jk
ZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBH
dGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKLSAgICBpbnQgZm9jdXNXaWR0
aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUs
IGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7Ci0gICAgcmV0dXJuIGJv
cmRlcldpZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3QqIGNhaXJv
Q29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAg
ICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rp
b24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OwotCi0gICAgLy8gUGFpbnQgdGhlIGJ1dHRvbi4KLSAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRv
blN0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfZGlyZWN0aW9uKGJ1dHRvblN0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZ
TEVfQ0xBU1NfQlVUVE9OKTsKLSAgICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250
ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0KLSAgICAvLyBHZXQgdGhlIGlu
bmVyIHJlY3RhbmdsZS4KLSAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgIEd0a0Jv
cmRlciogaW5uZXJCb3JkZXJQdHIgPSAwOwotICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsg
MSwgMSwgMSwgMSB9OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHls
ZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lci1ib3JkZXIi
LCAmaW5uZXJCb3JkZXJQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1
cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLSAgICBpZiAoaW5uZXJCb3JkZXJQdHIpIHsKLSAgICAgICAgaW5uZXJC
b3JkZXIgPSAqaW5uZXJCb3JkZXJQdHI7Ci0gICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJv
cmRlclB0cik7Ci0gICAgfQotCi0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOwotICAgIEd0a1N0
YXRlRmxhZ3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVD
b250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGJ1dHRvblN0eWxlQ29u
dGV4dCwgc3RhdGUsICZib3JkZXJXaWR0aCk7Ci0KLSAgICBmb2N1c1dpZHRoICs9IGZvY3VzUGFk
OwotICAgIEludFJlY3QgaW5uZXJSZWN0KHJlY3QueCgpICsgaW5uZXJCb3JkZXIubGVmdCArIGJv
cmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
eSgpICsgaW5uZXJCb3JkZXIudG9wICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSBib3JkZXJXaWR0aC5sZWZ0IC0gYm9y
ZGVyV2lkdGgucmlnaHQgLSBpbm5lckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIucmlnaHQgLSAo
MiAqIGZvY3VzV2lkdGgpLAotICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBi
b3JkZXJXaWR0aC50b3AgLSBib3JkZXJXaWR0aC5ib3R0b20gLSBpbm5lckJvcmRlci50b3AgLSBp
bm5lckJvcmRlci5ib3R0b20gLSAoMiAqIGZvY3VzV2lkdGgpKTsKLQotICAgIGlmIChpc1ByZXNz
ZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKLSAg
ICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFk7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15
IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotICAgICAgICBpbm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNo
aWxkRGlzcGxhY2VtZW50WSk7Ci0gICAgfQotICAgIGlubmVyUmVjdC5zZXRXaWR0aChtYXgoMSwg
aW5uZXJSZWN0LndpZHRoKCkpKTsKLSAgICBpbm5lclJlY3Quc2V0SGVpZ2h0KG1heCgxLCBpbm5l
clJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYnV0dG9u
U3R5bGVDb250ZXh0KTsKLQotICAgIC8vIFBhaW50IHRoZSBhcnJvdy4KLSAgICBHdGtTdHlsZUNv
bnRleHQqIGFycm93U3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0FSUk9X
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGFycm93U3R5bGVDb250ZXh0KTsKLQotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQsIGRpcmVj
dGlvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0
LCAiYXJyb3ciKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotCi0gICAgZ2Zsb2F0IGFycm93U2NhbGlu
ZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHlsZUNvbnRleHQsICJh
cnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7Ci0KLSAgICBJbnRTaXplIGFycm93
U2l6ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludCBh
cnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICBpZiAoZGlyZWN0aW9uID09
IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgIGFycm93UG9zaXRpb24ubW92ZShpbm5lclJlY3Qu
d2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsKLQotICAgIC8vIEdUSysgYWN0dWFsbHkg
ZmV0Y2hlcyB0aGUgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIGZyb20gdGhlIHdpZGdldCwgYnV0
IHNpbmNlIHdlCi0gICAgLy8gZG9uJ3QgaGF2ZSBhIHdpZGdldCBoZXJlLCB3ZSBhcmUganVzdCB1
c2luZyB0aGUgZGVmYXVsdCB4YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgb2YgMC41LgotICAgIGdp
bnQgZXh0ZW50ID0gc3RkOjptaW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6ZS5oZWlnaHQo
KSkgKiBhcnJvd1NjYWxpbmc7Ci0gICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJvd1NpemUud2lk
dGgoKSAtIGV4dGVudCkgLyAyLCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIpOwot
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250ZXh0LCBzdGF0
ZSk7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0
LCBHX1BJLCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4dGVudCk7Ci0K
LSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGFycm93U3R5bGVDb250ZXh0KTsKLQotICAg
IC8vIFBhaW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVkLgotICAgIEd0a1N0eWxlQ29udGV4dCog
c2VwYXJhdG9yU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JP
WCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOwot
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihzZXBhcmF0b3JTdHlsZUNvbnRl
eHQsIGRpcmVjdGlvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHNlcGFyYXRv
clN0eWxlQ29udGV4dCwgInNlcGFyYXRvciIpOwotCi0gICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRv
cnM7Ci0gICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3JzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBpZiAod2lkZVNlcGFyYXRv
cnMgJiYgIXNlcGFyYXRvcldpZHRoKSB7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQs
IHN0YXRlKTsKLSAgICBJbnRQb2ludCBzZXBhcmF0b3JQb3NpdGlvbihhcnJvd1Bvc2l0aW9uLngo
KSwgaW5uZXJSZWN0LnkoKSk7Ci0gICAgaWYgKHdpZGVTZXBhcmF0b3JzKSB7Ci0gICAgICAgIGlm
IChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgICAgIHNlcGFyYXRvclBv
c2l0aW9uLm1vdmUoLXNlcGFyYXRvcldpZHRoLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7Ci0KLSAgICAg
ICAgZ3RrX3JlbmRlcl9mcmFtZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRv
clBvc2l0aW9uLnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JXaWR0aCwg
aW5uZXJSZWN0LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHdGtCb3JkZXIgcGFk
ZGluZzsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5
bGVDb250ZXh0LCBzdGF0ZSwgJnBhZGRpbmcpOwotICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOwot
ICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4
dCwgc3RhdGUsICZib3JkZXIpOwotCi0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRf
RElSX0xUUikKLSAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLShwYWRkaW5nLmxl
ZnQgKyBib3JkZXIubGVmdCksIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXBhcmF0
b3JQb3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKLQotICAgICAgICBjYWlyb19z
YXZlKGNhaXJvQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gQW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0
aGUgc2VwYXJhdG9yIGJsZWVkaW5nIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUg
YmVjYXVzZSBvZiBzdWJwaXhlbCBwb3NpdGlvbmluZy4KLSAgICAgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55
KCksIGJvcmRlci5sZWZ0LCBpbm5lclJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19jbGlw
KGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNv
bnRleHQsIGNhaXJvQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBv
c2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBpbm5lclJlY3QubWF4WSgpKTsKLSAgICAgICAgY2Fp
cm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOwotICAgIH0KLQotICAgIGd0a19zdHlsZV9jb250ZXh0
X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfRU5UUlkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1Rl
eHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX0VOVFJZKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoIWlz
RW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGVsc2Ug
aWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19GT0NVU0VEOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNr
Z3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAg
IGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0KLSAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgaXNFbmFibGVkKHJl
bmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICAgICAg
Z2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50
ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBpZiAoIWludGVy
aW9yRm9jdXMpIHsKLSAgICAgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOwotICAgICAg
ICAgICAgZm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLSAgICAgICAg
ICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3Qu
eCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29u
dGV4dCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGFwcGx5U2xpZGVy
U3R5bGVDb250ZXh0Q2xhc3NlcyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIENvbnRyb2xQYXJ0
IHBhcnQpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19T
VFlMRV9DTEFTU19TQ0FMRSk7Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQg
fHwgcGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KQotICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOwot
ICAgIGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhj
b250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVkVSVElDQUwpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBDb250cm9s
UGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgQVNT
RVJUX1VOVVNFRChwYXJ0LCBwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0g
U2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKLQot
ICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9T
Q0FMRSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5k
ZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNv
bnRleHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKLQotICAgIGlmICghaXNFbmFi
bGVkKHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdUS19TVEFURV9GTEFH
X0lOU0VOU0lUSVZFKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGlmIChpc0ZvY3VzZWQo
cmVuZGVyT2JqZWN0KSkgewotICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1
c1BhZCwgTlVMTCk7Ci0gICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOwotICAgICAgICBm
b2N1c1JlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotICAgICAgICBndGtfcmVu
ZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3Qu
eSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
YXBwZWFyYW5jZSgpOwotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBh
cnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9s
dW1lU2xpZGVyVGh1bWJQYXJ0KTsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4
dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7
Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJ
REVSKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJP
YmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdz
IHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKGlzSG92ZXJlZChy
ZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsK
LSAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19T
VEFURV9GTEFHX0FDVElWRTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4
dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGd0a19yZW5kZXJf
c2xpZGVyKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgcGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gR1RL
X09SSUVOVEFUSU9OX0hPUklaT05UQUwgOiBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBnaW50IHNsaWRlcldpZHRoLCBzbGlkZXJMZW5ndGg7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRl
ckxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBN
ZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChz
bGlkZXJXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJM
ZW5ndGgsIEZpeGVkKSk7Ci19Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIGlmICghcmVuZGVyT2JqZWN0LT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX1BST0dSRVNTX0JBUik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xB
U1NfVFJPVUdIKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRl
eHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
Y29udGV4dCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19T
VFlMRV9DTEFTU19QUk9HUkVTU0JBUik7Ci0KLQotICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0
YXRlRmxhZ3M+KDApLCAmcGFkZGluZyk7Ci0gICAgSW50UmVjdCBwcm9ncmVzc1JlY3QocmVjdC54
KCkgKyBwYWRkaW5nLmxlZnQsIHJlY3QueSgpICsgcGFkZGluZy50b3AsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gKHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSAocGFkZGluZy50b3Ag
KyBwYWRkaW5nLmJvdHRvbSkpOwotICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpj
YWxjdWxhdGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOwotCi0gICAg
aWYgKCFwcm9ncmVzc1JlY3QuaXNFbXB0eSgpKQotICAgICAgICBndGtfcmVuZGVyX2FjdGl2aXR5
KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJv
Z3Jlc3NSZWN0LngoKSwgcHJvZ3Jlc3NSZWN0LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHBy
b2dyZXNzUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNv
bnRleHQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgZ2ludCBzcGlu
QnV0dG9uQXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBjb25zdCBQ
YW5nb0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldChjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgImZvbnQiLCAm
Zm9udERlc2NyaXB0aW9uLCBOVUxMKTsKLSAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9k
ZXNjcmlwdGlvbl9nZXRfc2l6ZShmb250RGVzY3JpcHRpb24pOwotICAgIGdpbnQgYXJyb3dTaXpl
ID0gbWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUpOwot
Ci0gICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4uCi19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JV
VFRPTik7Ci0KLSAgICBHdGtCb3JkZXIgcGFkZGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRp
bmcpOwotCi0gICAgaW50IHdpZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBh
ZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSog
dGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtB
cnJvd1R5cGUgYXJyb3dUeXBlKQotewotICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9X
X1VQIHx8IGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTik7Ci0KLSAgICBndGtfc3R5bGVfY29u
dGV4dF9zYXZlKGNvbnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250
ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLQotICAgIEd0a1RleHREaXJlY3Rpb24gZGly
ZWN0aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2RpcmVjdGlvbihjb250ZXh0KTsKLSAgICBn
dWludCBzdGF0ZSA9IHN0YXRpY19jYXN0PGd1aW50PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3Rh
dGUoY29udGV4dCkpOwotICAgIGlmICghKHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJ
VkUpKSB7Ci0gICAgICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKLSAg
ICAgICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGlu
VXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgICAgIHx8IChh
cnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQ
cmVzc2VkKHJlbmRlck9iamVjdCkpKQotICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFU
RV9GTEFHX0FDVElWRTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRl
ck9iamVjdCkpIHsKLSAgICAgICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAm
JiB0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAg
ICAgICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1Nw
aW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpKQotICAgICAgICAgICAgICAgIHN0
YXRlIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgICAgICB9Ci0gICAgfQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZs
YWdzPihzdGF0ZSkpOwotCi0gICAgLy8gUGFpbnQgYnV0dG9uLgotICAgIEludFJlY3QgYnV0dG9u
UmVjdChyZWN0KTsKLSAgICBndWludCBqdW5jdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9q
dW5jdGlvbl9zaWRlcyhjb250ZXh0KTsKLSAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19V
UCkKLSAgICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX0JPVFRPTTsKLSAgICBlbHNlIHsK
LSAgICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX1RPUDsKLSAgICAgICAgYnV0dG9uUmVj
dC5tb3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0gICAgYnV0dG9uUmVjdC5zZXRI
ZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9qdW5j
dGlvbl9zaWRlcyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlvblNpZGVzPihqdW5jdGlv
bikpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3Qu
eSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19y
ZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgo
KSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAvLyBQYWludCBhcnJvdyBjZW50ZXJlZCBp
bnNpZGUgYnV0dG9uLgotICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBndGtzcGluYnV0dG9u
LmMgY29kZS4KLSAgICBJbnRSZWN0IGFycm93UmVjdDsKLSAgICBnZG91YmxlIGFuZ2xlOwotICAg
IGlmIChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKSB7Ci0gICAgICAgIGFuZ2xlID0gMDsKLSAg
ICAgICAgYXJyb3dSZWN0LnNldFkocmVjdC55KCkpOwotICAgICAgICBhcnJvd1JlY3Quc2V0SGVp
Z2h0KHJlY3QuaGVpZ2h0KCkgLyAyIC0gMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYW5nbGUg
PSBHX1BJOwotICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSArIGJ1dHRvblJlY3QueSgp
KTsKLSAgICAgICAgYXJyb3dSZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gYXJyb3dSZWN0
LnkoKSAtIDIpOwotICAgIH0KLSAgICBhcnJvd1JlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0g
Myk7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICBhcnJv
d1JlY3Quc2V0WChyZWN0LngoKSArIDEpOwotICAgIGVsc2UKLSAgICAgICAgYXJyb3dSZWN0LnNl
dFgocmVjdC54KCkgKyAyKTsKLQotICAgIGdpbnQgd2lkdGggPSBhcnJvd1JlY3Qud2lkdGgoKSAv
IDI7Ci0gICAgd2lkdGggLT0gd2lkdGggJSAyIC0gMTsgLy8gRm9yY2Ugb2RkLgotICAgIGdpbnQg
aGVpZ2h0ID0gKHdpZHRoICsgMSkgLyAyOwotCi0gICAgYXJyb3dSZWN0Lm1vdmUoKGFycm93UmVj
dC53aWR0aCgpIC0gd2lkdGgpIC8gMiwgKGFycm93UmVjdC5oZWlnaHQoKSAtIGhlaWdodCkgLyAy
KTsKLSAgICBndGtfcmVuZGVyX2Fycm93KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UmVjdC54KCksIGFycm93UmVjdC55KCks
IHdpZHRoKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfU1BJTl9CVVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4
dCk7Ci0KLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1Rl
eHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwg
ZGlyZWN0aW9uKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoIWlzRW5hYmxlZChy
ZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKGlzRm9j
dXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NV
U0VEOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOwotCi0gICAgcGFpbnRTcGluQXJy
b3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdU
S19BUlJPV19VUCk7Ci0gICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVu
ZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19ET1dOKTsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LUdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdl
dFR5cGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwg
Z2ludCBpY29uU2l6ZSkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHls
ZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0gICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19zdHls
ZV9jb250ZXh0X2xvb2t1cF9pY29uX3NldChjb250ZXh0LCBpY29uTmFtZSk7Ci0KLSAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAg
IGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfUFJFTElHSFQpCi0gICAgICAgIGZsYWdzIHw9IEdUS19T
VEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNF
TlNJVElWRSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0K
LSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOwotICAg
IEdka1BpeGJ1ZiogaWNvbiA9IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbl9waXhidWYoaWNvblNl
dCwgY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSk7Ci0KLSAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGFkb3B0R1Jl
ZihpY29uKTsKLX0KLQotR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9y
V2lkZ2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1l
LCBjb25zdCBjaGFyICpmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50
IHN0YXRlLCBnaW50IGljb25TaXplKQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9
IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUoY29udGV4dCk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKHN0YXRlID09IEdU
S19TVEFURV9QUkVMSUdIVCkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElH
SFQ7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQotICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLQotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFn
cykpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Ci0gICAgR3RrSWNvbkluZm8qIGlu
Zm8gPSBndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVs
dCgpLCBzeW1ib2xpY0ljb25OYW1lLCBpY29uU2l6ZSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R3Rr
SWNvbkxvb2t1cEZsYWdzPihHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHIHwgR1RLX0lDT05fTE9P
S1VQX0ZPUkNFX1NJWkUpKTsKLSAgICBHZGtQaXhidWYqIGljb24gPSAwOwotICAgIGlmIChpbmZv
KSB7Ci0gICAgICAgIGljb24gPSBndGtfaWNvbl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRl
eHQoaW5mbywgY29udGV4dCwgMCwgMCk7Ci0gICAgICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZv
KTsKLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0g
ICAgaWYgKCFpY29uKQotICAgICAgICByZXR1cm4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3
aWRnZXRUeXBlLCBmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25T
aXplKTsKLQotICAgIHJldHVybiBhZG9wdEdSZWYoaWNvbik7Ci19Ci0KLUNvbG9yIFJlbmRlclRo
ZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17
Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2Jh
Y2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRF
X0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7
Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfRU5UUlkpLCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOwotICAg
IHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBn
ZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNv
bG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0
azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FDVElWRSwg
Jmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVu
ZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBH
VEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JH
QkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX1RSRUVfVklFVyksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFD
b2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAg
IEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNU
RUQsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lR3RrOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NU
QVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9y
OwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQp
IGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0KLSAgICBzd2l0Y2ggKGNzc1Zh
bHVlSWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pLCBzdGF0
aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJmdka1JHQkFDb2xvcik7Ci0gICAgICAgIHJldHVy
biBnZGtSR0JBQ29sb3I7Ci0gICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgotICAgICAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZ
KSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZnZGtSR0JBQ29sb3IpOwotICAgICAg
ICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTkwZjM1Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UnVuTG9vcEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0
aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
dW5Mb29wLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SdW5M
b29wOjpSdW5Mb29wKCkKLXsKLSAgICAvLyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgZG9lc24n
dCBhZGQgYW4gZXh0cmEgcmVmZXJlbmNlLgotICAgIG1fcnVuTG9vcENvbnRleHQgPSBpc01haW5U
aHJlYWQoKSA/IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29u
dGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOwotICAgIEdSZWZQdHI8
R01haW5Mb29wPiBpbm5lcm1vc3RMb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhtX3J1
bkxvb3BDb250ZXh0LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChpbm5lcm1vc3RMb29wKTsK
LSAgICBtX3J1bkxvb3BNYWluTG9vcHMuYXBwZW5kKGlubmVybW9zdExvb3ApOwotfQotCi1SdW5M
b29wOjp+UnVuTG9vcCgpCi17Ci0gICAgZm9yIChpbnQgaSA9IG1fcnVuTG9vcE1haW5Mb29wcy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1
bm5pbmcobV9ydW5Mb29wTWFpbkxvb3BzW2ldLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSk7
Ci0gICAgfQotfQotCi12b2lkIFJ1bkxvb3A6OnJ1bigpCi17Ci0gICAgUnVuTG9vcCogbWFpblJ1
bkxvb3AgPSBSdW5Mb29wOjpjdXJyZW50KCk7Ci0gICAgR01haW5Mb29wKiBpbm5lcm1vc3RMb29w
ID0gbWFpblJ1bkxvb3AtPmlubmVybW9zdExvb3AoKTsKLSAgICBpZiAoIWdfbWFpbl9sb29wX2lz
X3J1bm5pbmcoaW5uZXJtb3N0TG9vcCkpIHsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVy
bW9zdExvb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBy
dW4gYSBuZXN0ZWQgbG9vcCBpZiB0aGUgaW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5n
LgotICAgIEdNYWluTG9vcCogbmVzdGVkTWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcoMCwgRkFM
U0UpOwotICAgIG1haW5SdW5Mb29wLT5wdXNoTmVzdGVkTWFpbkxvb3AobmVzdGVkTWFpbkxvb3Ap
OwotICAgIGdfbWFpbl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7Ci0gICAgbWFpblJ1bkxvb3At
PnBvcE5lc3RlZE1haW5Mb29wKCk7Ci19Ci0KLUdNYWluTG9vcCogUnVuTG9vcDo6aW5uZXJtb3N0
TG9vcCgpCi17Ci0gICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBi
ZSB0aGVyZS4KLSAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOwotICAg
IHJldHVybiBtX3J1bkxvb3BNYWluTG9vcHNbMF0uZ2V0KCk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6
cHVzaE5lc3RlZE1haW5Mb29wKEdNYWluTG9vcCogbmVzdGVkTG9vcCkKLXsKLSAgICAvLyBUaGUg
aW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgotICAgIEFTU0VSVCgh
bV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFw
cGVuZChhZG9wdEdSZWYobmVzdGVkTG9vcCkpOwotfQotCi12b2lkIFJ1bkxvb3A6OnBvcE5lc3Rl
ZE1haW5Mb29wKCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3
YXlzIGJlIHRoZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7
Ci0gICAgbV9ydW5Mb29wTWFpbkxvb3BzLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBSdW5Mb29w
OjpzdG9wKCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlz
IGJlIHRoZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0g
ICAgR1JlZlB0cjxHTWFpbkxvb3A+IGxhc3RNYWluTG9vcCA9IG1fcnVuTG9vcE1haW5Mb29wcy5s
YXN0KCk7Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgp
KSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0KCkpOwotfQotCi1n
Ym9vbGVhbiBSdW5Mb29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKLXsKLSAgICBydW5M
b29wLT5wZXJmb3JtV29yaygpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotdm9pZCBSdW5Mb29w
Ojp3YWtlVXAoKQotewotICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlID0gYWRvcHRHUmVmKGdf
aWRsZV9zb3VyY2VfbmV3KCkpOwotICAgIGdfc291cmNlX3NldF9wcmlvcml0eShzb3VyY2UuZ2V0
KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKHNvdXJj
ZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OnF1ZXVlV29y
ayksIHRoaXMsIDApOwotICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UuZ2V0KCksIG1fcnVuTG9v
cENvbnRleHQuZ2V0KCkpOwotCi0gICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENv
bnRleHQuZ2V0KCkpOwotfQotCi1SdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29w
KiBydW5Mb29wKQotICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCi0gICAgLCBtX3RpbWVyU291cmNl
KDApCi17Ci19Ci0KLVJ1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCi17Ci0gICAgc3Rv
cCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6Y2xlYXJUaW1lclNvdXJjZSgpCi17
Ci0gICAgbV90aW1lclNvdXJjZSA9IDA7Ci19Ci0KLWdib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6dGltZXJGaXJlZENhbGxiYWNrKFJ1bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCi17Ci0gICAg
R1NvdXJjZSogY3VycmVudFRpbWVyU291cmNlID0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCk7
Ci0gICAgYm9vbCBpc1JlcGVhdGluZyA9IHRpbWVyLT5pc1JlcGVhdGluZygpOwotICAgIC8vIFRo
aXMgY2FuIGNoYW5nZSB0aGUgdGltZXJTb3VyY2UgYnkgc3RhcnRpbmcgYSBuZXcgdGltZXIgd2l0
aGluIHRoZSBjYWxsYmFjay4KLSAgICB0aW1lci0+ZmlyZWQoKTsKLSAgICBpZiAoIWlzUmVwZWF0
aW5nICYmIGN1cnJlbnRUaW1lclNvdXJjZSA9PSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKSkK
LSAgICAgICAgdGltZXItPmNsZWFyVGltZXJTb3VyY2UoKTsKLSAgICByZXR1cm4gaXNSZXBlYXRp
bmc7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgZmlyZUludGVy
dmFsLCBib29sIHJlcGVhdCkKLXsKLSAgICBpZiAobV90aW1lclNvdXJjZSkKLSAgICAgICAgc3Rv
cCgpOwotCi0gICAgbV90aW1lclNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25l
dyhzdGF0aWNfY2FzdDxndWludD4oZmlyZUludGVydmFsICogMTAwMCkpKTsKLSAgICBtX2lzUmVw
ZWF0aW5nID0gcmVwZWF0OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNl
LmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNl
Ojp0aW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV90
aW1lclNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKLX0K
LQotdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3AoKQotewotICAgIGlmICghbV90aW1lclNv
dXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVyU291
cmNlLmdldCgpKTsKLSAgICBjbGVhclRpbWVyU291cmNlKCk7Ci19Ci0KLWJvb2wgUnVuTG9vcDo6
VGltZXJCYXNlOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGltZXJTb3VyY2U7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxWaWV3R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIw
NWE1Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmll
d0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgotCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUg
Ik1haW5GcmFtZVNjcm9sbGJhckd0ay5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIHNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcihj
b25zdCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQotewotICAgIC8vIEludGVyaW9yIGZyYW1lIFNj
cm9sbFZpZXdzIG5ldmVyIGhhdmUgTWFpbkZyYW1lU2Nyb2xsYmFycy4KLSAgICBpZiAoc2Nyb2xs
Vmlldy0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHdlIGRv
bid0IGhhdmUgYSBob3N0IHdpbmRvdyBvciBhIGNvbnRhaW5pbmcgd2lkZ2V0IChhbGEgV2ViS2l0
MikuCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHNjcm9sbFZpZXctPmhvc3RXaW5kb3co
KTsKLSAgICBpZiAoIWhvc3RXaW5kb3cgfHwgIWhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnYm9vbGVhbiBzZWxmU2Nyb2xsaW5n
ID0gRkFMU0U7Ci0gICAgZ19vYmplY3RfZ2V0KGhvc3RXaW5kb3ctPnBsYXRmb3JtUGFnZUNsaWVu
dCgpLCAic2VsZi1zY3JvbGxpbmciLCAmc2VsZlNjcm9sbGluZywgTlVMTCk7Ci0gICAgcmV0dXJu
ICFzZWxmU2Nyb2xsaW5nOwotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsVmlldzo6
Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAg
IGlmIChzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIodGhpcykpCi0gICAgICAgIHJldHVy
biBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OmNyZWF0ZSh0aGlzLCBvcmllbnRhdGlvbik7Ci0gICAg
cmV0dXJuIFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKLX0KLQotSW50UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29u
dGVudFJlY3QoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhcklu
Y2x1c2lvbikgY29uc3QKLXsKLSAgICBib29sIGluY2x1ZGVTY3JvbGxiYXJzID0gc2Nyb2xsYmFy
SW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzOwotCi0gICAgLy8gSWYgd2UgYXJlIGFuIGlu
dGVyaW9yIGZyYW1lIHNjcm9sbGJhciBvciBhcmUgaW4gc29tZSBzb3J0IG9mIHRyYW5zaXRpb24K
LSAgICAvLyBzdGF0ZSwganVzdCBjYWxjdWxhdGUgb3VyIHNpemUgYmFzZWQgb24gd2hhdCB0aGUg
R1RLKyB0aGVtZSBzYXlzIHRoZQotICAgIC8vIHNjcm9sbGJhciB3aWR0aCBzaG91bGQgYmUuCi0g
ICAgaWYgKCFzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIodGhpcykpIHsKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxP
ZmZzZXQuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKG1heCgwLCB3
aWR0aCgpIC0gKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWluY2x1ZGVTY3JvbGxiYXJzID8gdmVy
dGljYWxTY3JvbGxiYXIoKS0+d2lkdGgoKSA6IDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXgoMCwgaGVpZ2h0KCkgLSAoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFpbmNs
dWRlU2Nyb2xsYmFycyA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwKSkpKTsK
LSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBoYXZlIGEgcGFyZW50LCBzbyB3ZSBhcmUgdGhlIG1h
aW4gZnJhbWUgYW5kIHRodXMgaGF2ZQotICAgIC8vIGEgcGFyZW50IHdpZGdldCB3aGljaCB3ZSBj
YW4gdXNlIHRvIG1lYXN1cmUgdGhlIHZpc2libGUgcmVnaW9uLgotICAgIEd0a1dpZGdldCogbWVh
c3VyZWRXaWRnZXQgPSBob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIEd0
a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KG1lYXN1cmVkV2lk
Z2V0KTsKLQotICAgIC8vIFdlIG1heSBub3QgYmUgaW4gYSB3aWRnZXQgdGhhdCBkaXNwbGF5cyBz
Y3JvbGxiYXJzLCBidXQgd2UgbWF5Ci0gICAgLy8gaGF2ZSBvdGhlciBraW5kcyBvZiBkZWNvcmF0
aW9uIHRoYXQgbWFrZSB1cyBzbWFsbGVyLgotICAgIGlmIChwYXJlbnRXaWRnZXQgJiYgaW5jbHVk
ZVNjcm9sbGJhcnMpCi0gICAgICAgIG1lYXN1cmVkV2lkZ2V0ID0gcGFyZW50V2lkZ2V0OwotCi0g
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRp
b24obWVhc3VyZWRXaWRnZXQsICZhbGxvY2F0aW9uKTsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQ
b2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSksCi0g
ICAgICAgICAgICAgICAgICAgSW50U2l6ZShhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhl
aWdodCkpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJh
ck1vZGUgaG9yaXpvbnRhbE1vZGUsIFNjcm9sbGJhck1vZGUgdmVydGljYWxNb2RlLCBib29sIGhv
cml6b250YWxMb2NrLCBib29sIHZlcnRpY2FsTG9jaykKLXsKLSAgICAvLyBGSVhNRTogUmVzdHJ1
Y3R1cmUgdGhlIFNjcm9sbFZpZXcgYWJzdHJhY3Rpb24gc28gdGhhdCB3ZSBkbyBub3QgaGF2ZSB0
bwotICAgIC8vIGNvcHkgdGhpcyB2ZXJiYXRpbSBmcm9tIFNjcm9sbFZpZXcuY3BwLiBVbnRpbCB0
aGVuLCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoaXMKLSAgICAvLyBpcyBrZXB0IGluIHN5bmMuCi0g
ICAgYm9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOwotCi0gICAgaWYgKGhvcml6b250YWxNb2RlICE9
IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhckxvY2sp
IHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSA9IGhvcml6b250YWxNb2RlOwot
ICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRpY2FsTW9k
ZSAhPSB2ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKSAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhckxvY2sp
IHsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSB2ZXJ0aWNhbE1vZGU7Ci0gICAg
ICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaG9yaXpvbnRhbExvY2sp
Ci0gICAgICAgIHNldEhvcml6b250YWxTY3JvbGxiYXJMb2NrKCk7Ci0KLSAgICBpZiAodmVydGlj
YWxMb2NrKQotICAgICAgICBzZXRWZXJ0aWNhbFNjcm9sbGJhckxvY2soKTsKLQotICAgIGlmIChu
ZWVkc1VwZGF0ZSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7Ci0K
LSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlcG9ydCBwb2xpY3kgY2hhbmdlcyBvbiBTY3JvbGxW
aWV3J3MgdW5sZXNzIHRoaXMKLSAgICAvLyBvbmUgaGFzIGFuIGFkanVzdG1lbnQgYXR0YWNoZWQg
YW5kIGl0IGlzIGEgbWFpbiBmcmFtZS4KLSAgICBpZiAocGFyZW50KCkgfHwgIWlzRnJhbWVWaWV3
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZvciBmcmFtZXMgdGhhdCBkbyBoYXZlIGFk
anVzdG1lbnRzIGF0dGFjaGVkLCB3ZSB3YW50IHRvIHJlcG9ydAotICAgIC8vIHBvbGljeSBjaGFu
Z2VzLCBzbyB0aGF0IHRoZXkgbWF5IGJlIGFwcGxpZWQgdG8gdGhlIHdpZGdldCB0bwotICAgIC8v
IHdoaWNoIHRoZSBXZWJWaWV3J3MgY29udGFpbmVyIChlLmcuIEd0a1Njcm9sbGVkV2luZG93KS4K
LSAgICBpZiAoaG9zdFdpbmRvdygpKQotICAgICAgICBob3N0V2luZG93KCktPnNjcm9sbGJhcnNN
b2RlRGlkQ2hhbmdlKCk7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDk0ZTNmZDcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLSNpbmNsdWRlICJTY3Jv
bGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPiogZ1Njcm9sbGJhcnM7Ci0K
LVNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQotewotICAgIHN0
YXRpYyBTY3JvbGxiYXJUaGVtZUd0ayB0aGVtZTsKLSAgICByZXR1cm4gJnRoZW1lOwotfQotCi1T
Y3JvbGxiYXJUaGVtZUd0azo6flNjcm9sbGJhclRoZW1lR3RrKCkKLXsKLX0KLQotdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhcikKLXsKLSAgICBpZiAoIWdTY3JvbGxiYXJzKQotICAgICAgICBnU2Nyb2xsYmFycyA9
IG5ldyBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj47Ci0gICAgZ1Njcm9sbGJhcnMtPmFk
ZChzY3JvbGxiYXIpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Ny
b2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgZ1Njcm9sbGJh
cnMtPnJlbW92ZShzY3JvbGxiYXIpOwotICAgIGlmIChnU2Nyb2xsYmFycy0+aXNFbXB0eSgpKSB7
Ci0gICAgICAgIGRlbGV0ZSBnU2Nyb2xsYmFyczsKLSAgICAgICAgZ1Njcm9sbGJhcnMgPSAwOwot
ICAgIH0KLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1l
VGhpY2tuZXNzKCkKLXsKLSAgICBpZiAoIWdTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlvciBmcmFtZSBzY3Jv
bGxiYXIgd2lkZ2V0LiBUaGUKLSAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGxiYXIg
dGhlbSBjb2RlIGlzbid0IHlldCBzbWFydCBlbm91Z2ggdG8gZ2V0Ci0gICAgLy8gdGhpcyBpbmZv
cm1hdGlvbiB3aGVuIGl0IHBhaW50cy4KLSAgICBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50
Kj46Oml0ZXJhdG9yIGVuZCA9IGdTY3JvbGxiYXJzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
U2Nyb2xsYmFyVGhlbWVDbGllbnQqPjo6aXRlcmF0b3IgaXQgPSBnU2Nyb2xsYmFycy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIgPSAoKml0KTsKLQotICAgICAgICAvLyBUb3AtbGV2ZWwgc2Nyb2xsYmFyIGkuZS4gc2Ny
b2xsYmFycyB3aG8gaGF2ZSBhIHBhcmVudCBTY3JvbGxWaWV3Ci0gICAgICAgIC8vIHdpdGggbm8g
cGFyZW50IGFyZSBuYXRpdmUsIGFuZCB0aHVzIGRvIG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQuCi0g
ICAgICAgIGlmICghc2Nyb2xsYmFyLT5wYXJlbnQoKSB8fCAhc2Nyb2xsYmFyLT5wYXJlbnQoKS0+
cGFyZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW50IHRoaWNrbmVzcyA9
IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotICAgICAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAg
ICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIHNjcm9sbGJhci0+cGFy
ZW50KCktPmhlaWdodCgpIC0gdGhpY2tuZXNzLCBzY3JvbGxiYXItPndpZHRoKCksIHRoaWNrbmVz
cykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJ
bnRSZWN0KHNjcm9sbGJhci0+cGFyZW50KCktPndpZHRoKCkgLSB0aGlja25lc3MsIDAsIHRoaWNr
bmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSkpOwotICAgIH0KLX0KLQotYm9vbCBTY3JvbGxiYXJU
aGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0aW1pemF0
aW9uIHRvIHNlZSBpZgotICAgIC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tpcHBlZC4g
IFdlIGRvbid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KLSAgICByZXR1cm4gdGh1bWJMZW5ndGgo
c2Nyb2xsYmFyKSA+IDA7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0
b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFy
dCwgYm9vbCkKLXsKLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNC
YWNrQnV0dG9uRW5kUGFydCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBpZiAocGFy
dCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgpICsg
bV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91
Z2hCb3JkZXJXaWR0aDsKLSAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7
Ci0gICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgcmV0dXJuIElu
dFJlY3QoeCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEJhY2tC
dXR0b25FbmRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQotICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
c2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRo
IC0gKDIgKiBzaXplLndpZHRoKCkpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
Ci0gICAgLy8gVmVydGljYWxTY3JvbGxiYXIgYWx0ZXJuYXRlIGJ1dHRvbgotICAgIHJldHVybiBJ
bnRSZWN0KHgsIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIG1fdHJvdWdo
Qm9yZGVyV2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVj
dChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJv
b2wpCi17Ci0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlm
IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25FbmRQ
YXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50U2l6ZSBzaXplID0gYnV0
dG9uU2l6ZShzY3JvbGxiYXIpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsg
bV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQpCi0gICAgICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9s
bGJhci0+d2lkdGgoKSAtIHNpemUud2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gRm9yd2FyZEJ1dHRvblN0
YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xs
YmFyLT54KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoICsgc2l6ZS53aWR0aCgpLCB5LCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFy
Ci0gICAgaW50IHggPSBzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7Ci0gICAg
aWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KHgsIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCkg
LSBtX3Ryb3VnaEJvcmRlcldpZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0g
ICAgLy8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICByZXR1
cm4gSW50UmVjdCh4LCBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGggKyBzaXpl
LmhlaWdodCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotfQotCi1JbnRSZWN0IFNj
cm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgYm9vbCkKLXsKLSAgICAvLyBUaGUgcGFkZGluZyBhbG9uZyB0aGUgdGh1bWIgbW92ZW1lbnQg
YXhpcyBpbmNsdWRlcyB0aGUgdHJvdWdoIGJvcmRlcgotICAgIC8vIHBsdXMgdGhlIHNpemUgb2Yg
c3RlcHBlciBzcGFjaW5nICh0aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlcHBlciBhbmQKLSAgICAv
LyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHRodW1iIHN0b3BzKS4gVGhlcmUgaXMgb2Z0ZW4gbm8gc3Rl
cHBlciBzcGFjaW5nLgotICAgIGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV90cm91Z2hCb3Jk
ZXJXaWR0aCArIG1fc3RlcHBlclNwYWNpbmc7Ci0KLSAgICAvLyBUaGUgZmF0bmVzcyBvZiB0aGUg
c2Nyb2xsYmFyIG9uIHRoZSBub24tbW92ZW1lbnQgYXhpcy4KLSAgICBpbnQgdGhpY2tuZXNzID0g
c2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7Ci0KLSAgICBpbnQg
c3RhcnRCdXR0b25zT2Zmc2V0ID0gMDsKLSAgICBpbnQgYnV0dG9uc1dpZHRoID0gMDsKLSAgICBp
ZiAobV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgIHN0YXJ0QnV0dG9uc09m
ZnNldCArPSBtX3N0ZXBwZXJTaXplOwotICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVy
U2l6ZTsKLSAgICB9Ci0gICAgaWYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkgewotICAgICAg
ICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9zdGVwcGVyU2l6ZTsKLSAgICAgICAgYnV0dG9uc1dp
ZHRoICs9IG1fc3RlcHBlclNpemU7Ci0gICAgfQotICAgIGlmIChtX2hhc0JhY2tCdXR0b25FbmRQ
YXJ0KQotICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKLSAgICBpZiAobV9o
YXNGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBl
clNpemU7Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpIHsKLSAgICAgICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxl
ciB0aGFuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlCi0gICAgICAgIC8vIHR3byBidXR0b25zLCB0
aGUgdHJhY2sgZGlzYXBwZWFycy4KLSAgICAgICAgaWYgKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIg
KiB0aGlja25lc3MpCi0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgICAgICByZXR1
cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIG1vdmVtZW50QXhpc1BhZGRpbmcgKyBzdGFydEJ1
dHRvbnNPZmZzZXQsIHNjcm9sbGJhci0+eSgpLAotICAgICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxiYXItPndpZHRoKCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRo
LCB0aGlja25lc3MpOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAq
IHRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gSW50UmVj
dChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsg
c3RhcnRCdXR0b25zT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywgc2Nyb2xs
YmFyLT5oZWlnaHQoKSAtICgyICogbW92ZW1lbnRBeGlzUGFkZGluZykgLSBidXR0b25zV2lkdGgp
OwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVj
dCkKLXsKLSAgICBJbnRSZWN0IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQ
aWVjZXMoc2Nyb2xsYmFyLCB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KTsKLSAgICBpbnQgdGh1bWJQ
b3MgPSB0aHVtYlBvc2l0aW9uKHNjcm9sbGJhcik7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50UmVjdCh0
cmFja1JlY3QueCgpICsgdGh1bWJQb3MsIHRyYWNrUmVjdC55KCkgKyAodHJhY2tSZWN0LmhlaWdo
dCgpIC0gbV90aHVtYkZhdG5lc3MpIC8gMiwgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSwgbV90aHVt
YkZhdG5lc3MpOyAKLQotICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFyCi0gICAgcmV0dXJuIEludFJl
Y3QodHJhY2tSZWN0LngoKSArICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fdGh1bWJGYXRuZXNzKSAv
IDIsIHRyYWNrUmVjdC55KCkgKyB0aHVtYlBvcywgbV90aHVtYkZhdG5lc3MsIHRodW1iTGVuZ3Ro
KHNjcm9sbGJhcikpOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENy
ZWF0ZSB0aGUgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0
Ci0gICAgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7Ci0KLSAg
ICBJbnRSZWN0IGJhY2tCdXR0b25TdGFydFBhaW50UmVjdDsKLSAgICBJbnRSZWN0IGJhY2tCdXR0
b25FbmRQYWludFJlY3Q7Ci0gICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3Q7
Ci0gICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0OwotICAgIGlmIChoYXNCdXR0
b25zKHNjcm9sbGJhcikpIHsKLSAgICAgICAgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0ID0gYmFj
a0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKLSAgICAg
ICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhiYWNrQnV0dG9uU3RhcnRQYWludFJlY3QpKQot
ICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBCYWNrQnV0dG9uU3RhcnRQYXJ0OwotICAgICAgICBi
YWNrQnV0dG9uRW5kUGFpbnRSZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0
dG9uRW5kUGFydCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoYmFj
a0J1dHRvbkVuZFBhaW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJhY2tCdXR0
b25FbmRQYXJ0OwotICAgICAgICBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QgPSBmb3J3YXJk
QnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQsIHRydWUpOwotICAg
ICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVj
dCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25TdGFydFBhcnQ7Ci0g
ICAgICAgIGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3Jv
bGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0LCB0cnVlKTsKLSAgICAgICAgaWYgKGRhbWFnZVJl
Y3QuaW50ZXJzZWN0cyhmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0KSkKLSAgICAgICAgICAgIHNj
cm9sbE1hc2sgfD0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0gICAgfQotCi0gICAgSW50UmVjdCB0
cmFja1BhaW50UmVjdCA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIHRydWUpOwotICAgIGlmIChkYW1h
Z2VSZWN0LmludGVyc2VjdHModHJhY2tQYWludFJlY3QpKQotICAgICAgICBzY3JvbGxNYXNrIHw9
IFRyYWNrQkdQYXJ0OwotCi0gICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycyAmJiAoc2Nyb2xs
TWFzayAmIEJhY2tCdXR0b25TdGFydFBhcnQKLSAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBC
YWNrQnV0dG9uRW5kUGFydAotICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0
b25TdGFydFBhcnQKLSAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5k
UGFydCkpCi0gICAgICAgIHNjcm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7Ci0KLSAgICBib29sIHRo
dW1iUHJlc2VudCA9IGhhc1RodW1iKHNjcm9sbGJhcik7Ci0gICAgSW50UmVjdCBjdXJyZW50VGh1
bWJSZWN0OwotICAgIGlmICh0aHVtYlByZXNlbnQpIHsKLSAgICAgICAgSW50UmVjdCB0cmFjayA9
IHRyYWNrUmVjdChzY3JvbGxiYXIsIGZhbHNlKTsKLSAgICAgICAgY3VycmVudFRodW1iUmVjdCA9
IHRodW1iUmVjdChzY3JvbGxiYXIsIHRyYWNrKTsKLSAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50
ZXJzZWN0cyhjdXJyZW50VGh1bWJSZWN0KSkKLSAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gVGh1
bWJQYXJ0OwotICAgIH0KLQotICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxCdXR0b25z
ID0gQmFja0J1dHRvblN0YXJ0UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8IEZv
cndhcmRCdXR0b25FbmRQYXJ0OwotICAgIGlmIChzY3JvbGxNYXNrICYgVHJhY2tCR1BhcnQgfHwg
c2Nyb2xsTWFzayAmIFRodW1iUGFydCB8fCBzY3JvbGxNYXNrICYgYWxsQnV0dG9ucykKLSAgICAg
ICAgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyKTsK
LSAgICAgICAgcGFpbnRUcmFja0JhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIs
IHRyYWNrUGFpbnRSZWN0KTsKLQotICAgIC8vIFBhaW50IHRoZSBiYWNrIGFuZCBmb3J3YXJkIGJ1
dHRvbnMuCi0gICAgaWYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAgICAg
ICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRvblN0YXJ0
UGFpbnRSZWN0LCBCYWNrQnV0dG9uU3RhcnRQYXJ0KTsKLSAgICBpZiAoc2Nyb2xsTWFzayAmIEJh
Y2tCdXR0b25FbmRQYXJ0KQotICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNj
cm9sbGJhciwgYmFja0J1dHRvbkVuZFBhaW50UmVjdCwgQmFja0J1dHRvbkVuZFBhcnQpOwotICAg
IGlmIChzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgcGFpbnRC
dXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRCdXR0b25TdGFydFBhaW50
UmVjdCwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCk7Ci0gICAgaWYgKHNjcm9sbE1hc2sgJiBGb3J3
YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBz
Y3JvbGxiYXIsIGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QsIEZvcndhcmRCdXR0b25FbmRQYXJ0
KTsKLQotICAgIC8vIFBhaW50IHRoZSB0aHVtYi4KLSAgICBpZiAoc2Nyb2xsTWFzayAmIFRodW1i
UGFydCkKLSAgICAgICAgcGFpbnRUaHVtYihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgY3Vy
cmVudFRodW1iUmVjdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTY3JvbGxiYXJU
aGVtZUd0azo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgcmV0dXJuIChldmVudC5zaGlmdEtl
eSgpICYmIGV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHx8IChldmVudC5idXR0b24oKSA9
PSBNaWRkbGVCdXR0b24pOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNjcm9sbGJhclRo
aWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKLXsKLSAgICByZXR1cm4gbV90aHVtYkZhdG5l
c3MgKyAobV90cm91Z2hCb3JkZXJXaWR0aCAqIDIpOwotfQotCi1JbnRTaXplIFNjcm9sbGJhclRo
ZW1lR3RrOjpidXR0b25TaXplKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0g
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAg
ICAgICAgcmV0dXJuIEludFNpemUobV90aHVtYkZhdG5lc3MsIG1fc3RlcHBlclNpemUpOwotCi0g
ICAgLy8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIHJldHVybiBJbnRTaXplKG1fc3RlcHBlclNp
emUsIG1fdGh1bWJGYXRuZXNzKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lR3RrOjptaW5pbXVt
VGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1
cm4gbV9taW5UaHVtYkxlbmd0aDsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlNzNkZjI4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxiYXJUaGVtZUd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhclRo
ZW1lR3RrX2gKLSNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVHdGtfaAotCi0jaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3Jv
bGxiYXI7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lR3RrIDogcHVibGljIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlIHsKLXB1YmxpYzoKLSAgICBTY3JvbGxiYXJUaGVtZUd0aygpOwotICAgIHZpcnR1
YWwgflNjcm9sbGJhclRoZW1lR3RrKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhT
Y3JvbGxiYXJUaGVtZUNsaWVudCopIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgYmFj
a0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsK
LSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdHJhY2tSZWN0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgYm9vbCk7Ci0gICAgSW50UmVjdCB0aHVtYlJlY3QoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0
KTsKLSAgICBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFNjcm9sbGJhckJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2
b2lkIHBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgcGFpbnRUaHVtYihHcmFwaGljc0Nv
bnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBjb25zdCBJbnRSZWN0JiwgU2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVhbCBib29sIHNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFy
Q29udHJvbFNpemUpOwotICAgIHZpcnR1YWwgSW50U2l6ZSBidXR0b25TaXplKFNjcm9sbGJhclRo
ZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJh
clRoZW1lQ2xpZW50Kik7Ci0KLSAgICAvLyBUT0RPOiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgR1RL
KyB2YWx1ZXMuIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHB1bGwgdGhlc2UgZnJvbSB0aGUgdGhl
bWUgaXRzZWxmLgotICAgIHZpcnR1YWwgZG91YmxlIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxh
eSgpIHsgcmV0dXJuIDAuMjA7IH0KLSAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJE
ZWxheSgpIHsgcmV0dXJuIDAuMDI7IH0KLSAgICB2b2lkIHVwZGF0ZVRoZW1lUHJvcGVydGllcygp
OwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7Ci0gICAgdm9pZCBy
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotICAgIHZvaWQgdW5yZWdp
c3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotCi1wcm90ZWN0ZWQ6Ci0jaWZu
ZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrU3R5bGVDb250ZXh0KiBtX2NvbnRleHQ7Ci0j
ZW5kaWYKLSAgICBpbnQgbV90aHVtYkZhdG5lc3M7Ci0gICAgaW50IG1fdHJvdWdoQm9yZGVyV2lk
dGg7Ci0gICAgaW50IG1fc3RlcHBlclNpemU7Ci0gICAgaW50IG1fc3RlcHBlclNwYWNpbmc7Ci0g
ICAgaW50IG1fbWluVGh1bWJMZW5ndGg7Ci0gICAgZ2Jvb2xlYW4gbV90cm91Z2hVbmRlclN0ZXBw
ZXJzOwotICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICBnYm9v
bGVhbiBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0OwotICAgIGdib29sZWFuIG1faGFzQmFja0J1
dHRvblN0YXJ0UGFydDsKLSAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0b25FbmRQYXJ0OwotfTsK
LQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxi
YXJUaGVtZUd0azIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjZiYjhhLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0
azIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCi0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0j
aW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQu
aCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IHZvaWQgZ3RrU3R5bGVTZXRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3R5bGUqIHBy
ZXZpb3VzLCBTY3JvbGxiYXJUaGVtZUd0ayogc2Nyb2xsYmFyVGhlbWUpCi17Ci0gICAgc2Nyb2xs
YmFyVGhlbWUtPnVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotfQotCi1TY3JvbGxiYXJUaGVtZUd0
azo6U2Nyb2xsYmFyVGhlbWVHdGsoKQotewotICAgIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtIU2Nyb2xsYmFyKCksCi0gICAgICAgICAi
c3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNldENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGllcygpCi17Ci0gICAg
R3RrV2lkZ2V0KiBzY3JvbGxiYXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRl
clRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSktPmd0a0hTY3JvbGxiYXIoKTsKLSAgICBndGtf
d2lkZ2V0X3N0eWxlX2dldChzY3JvbGxiYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNs
aWRlcl93aWR0aCIsICZtX3RodW1iRmF0bmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAi
dHJvdWdoX2JvcmRlciIsICZtX3Ryb3VnaEJvcmRlcldpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICJzdGVwcGVyLXNpemUiLCAmbV9zdGVwcGVyU2l6ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwgJm1fdHJvdWdoVW5kZXJTdGVwcGVycywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJhY2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNC
YWNrQnV0dG9uU3RhcnRQYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtZm9yd2Fy
ZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgImhhcy1zZWNvbmRhcnktZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1i
YWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQsIE5VTEwpOwotICAgIG1f
bWluVGh1bWJMZW5ndGggPSBndGtfcmFuZ2VfZ2V0X21pbl9zbGlkZXJfc2l6ZShHVEtfUkFOR0Uo
c2Nyb2xsYmFyKSk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7Ci19Ci0K
LXN0YXRpYyBHdGtXaWRnZXQqIGdldFdpZGdldEZvclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyKQotewotICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsK
LSAgICByZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFy
ID8gdGhlbWUtPmd0a1ZTY3JvbGxiYXIoKSA6IHRoZW1lLT5ndGtIU2Nyb2xsYmFyKCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4gSWYgdGhl
IHRyb3VnaC11bmRlci1zdGVwcGVycyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCi0gICAgLy8gc2hv
dWxkIGJlIHRoZSBmdWxsIHNpemUgb2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZhbHNlLCBp
dCBzaG91bGQgb25seSBiZSB0aGUKLSAgICAvLyB0cmFjayByZWN0LgotICAgIEludFJlY3QgZnVs
bFNjcm9sbGJhclJlY3QocmVjdCk7Ci0gICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycykKLSAg
ICAgICAgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxi
YXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKLQotICAg
IFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxsU2Nyb2xs
YmFyUmVjdCk7Ci0gICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoKSwgZnVsbFNjcm9sbGJh
clJlY3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHBhaW50UmVjdCwg
Z2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVEtfU1RBVEVfQUNUSVZFLCBHVEtfU0hBRE9XX0lOLCAidHJvdWdoIik7Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0g
ICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNj
cm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwot
Ci0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIGZ1bGxT
Y3JvbGxiYXJSZWN0KTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxTY3JvbGxi
YXJSZWN0LCBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJzY3JvbGxl
ZF93aW5kb3ciKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBnZXRXaWRnZXRG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBnYm9vbGVhbiBhY3RpdmF0ZVNsaWRlcjsKLSAg
ICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJhY3RpdmF0ZS1zbGlkZXIiLCAmYWN0aXZh
dGVTbGlkZXIsIE5VTEwpOwotCi0gICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9OT1JNQUw7Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19PVVQ7
Ci0gICAgaWYgKGFjdGl2YXRlU2xpZGVyICYmIHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBU
aHVtYlBhcnQpIHsKLSAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0FDVElWRTsKLSAgICAg
ICAgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfSU47Ci0gICAgfSBlbHNlIGlmIChzY3JvbGxiYXIt
PnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0IHx8IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBUaHVtYlBhcnQpCi0gICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9QUkVMSUdIVDsKLQot
ICAgIC8vIFRoZSBhZGp1c3RtZW50IGNvbnRyb2xzIHRoZSByZW5kZXJpbmcgb2YgdGhlIHNjcm9s
bGJhciB0aHVtYi4gSWYgaXQncyBub3Qgc2V0Ci0gICAgLy8gcHJvcGVybHkgdGhlIHRoZW1lIG1h
eSBub3QgZHJhdyB0aGUgdGh1bWIgYm9yZGVycyBwcm9wZXJseS4KLSAgICBHdGtBZGp1c3RtZW50
KiBhZGp1c3RtZW50ID0gZ3RrX3JhbmdlX2dldF9hZGp1c3RtZW50KEdUS19SQU5HRSh3aWRnZXQp
KTsKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoYWRqdXN0bWVudCwgc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCkpOwotICAgIGd0a19hZGp1c3RtZW50X3NldF9sb3dlcihhZGp1c3RtZW50LCAw
KTsKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfdXBwZXIoYWRqdXN0bWVudCwgc2Nyb2xsYmFyLT5t
YXhpbXVtKCkpOwotCi0gICAgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBHVEtfT1JJRU5U
QVRJT05fSE9SSVpPTlRBTDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3NpemUo
YWRqdXN0bWVudCwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIG9yaWVudGF0aW9uID0gR1RLX09S
SUVOVEFUSU9OX1ZFUlRJQ0FMOwotICAgIH0gZWxzZQotICAgICAgICBndGtfYWRqdXN0bWVudF9z
ZXRfcGFnZV9zaXplKGFkanVzdG1lbnQsIHJlY3Qud2lkdGgoKSk7Ci0KLSAgICBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgcmVjdCk7Ci0gICAgSW50UmVjdCBz
bGlkZXJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0
a1BhaW50U2xpZGVyKHNsaWRlclJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAi
c2xpZGVyIiwgb3JpZW50YXRpb24pOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKLXsKLSAg
ICAvLyBUaGUgYnV0dG9ucyB3aWxsIGJlIGRpc2FibGVkIGlmIHRoZSB0aHVtYiBpcyBhcyB0aGUg
YXBwcm9wcmlhdGUgZXh0cmVtZS4KLSAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUgPSBHVEtf
U0hBRE9XX09VVDsKLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0lOU0VO
U0lUSVZFOwotICAgIGJvb2wgcHJlc3NlZCA9IChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSk7Ci0KLSAgICBpZiAoKEJhY2tCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxi
YXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQg
JiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAgICAgIHx8IChGb3J3YXJkQnV0dG9uRW5k
UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4
aW11bSgpKQotICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNj
cm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgewotICAgICAg
ICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOwotICAgICAgICBpZiAocHJlc3NlZCkgewot
ICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0FDVElWRTsKLSAgICAgICAgICAgIHNo
YWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOwotICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT0gc2Ny
b2xsYmFyLT5ob3ZlcmVkUGFydCgpKQotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRF
X1BSRUxJR0hUOwotICAgIH0KLQotICAgIC8vIFRoZW1lcyBkZXRlcm1pbmUgaG93IHRvIGRyYXcg
dGhlIGJ1dHRvbiAod2hpY2ggYnV0dG9uIHRvIGRyYXcpIGJhc2VkIG9uIHRoZSBhbGxvY2F0aW9u
Ci0gICAgLy8gb2YgdGhlIHdpZGdldC4gV2hlcmUgdGhlIHRhcmdldCByZWN0IGlzIGluIHJlbGF0
aW9uIHRvIHRoZSB0b3RhbCB3aWRnZXQgYWxsb2NhdGlvbgotICAgIC8vIGRldGVybWluZXMgdGhl
IGJ1dHRvbi4KLSAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKTsKLSAgICBpbnQgYnV0dG9uU2l6ZSA9IChvcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgPyByZWN0LmhlaWdodCgpIDogcmVjdC53aWR0aCgpOwotICAgIGlu
dCB0b3RhbEFsbG9jYXRpb24gPSBidXR0b25TaXplICogNTsgLy8gT25lIHNwYWNlIGZvciBlYWNo
IGJ1dHRvbiBhbmQgb25lIGV4dHJhLgotICAgIGludCBidXR0b25PZmZzZXQgPSAwOwotICAgIGlm
IChGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQpCi0gICAgICAgIGJ1dHRvbk9mZnNldCA9
IGJ1dHRvblNpemU7Ci0gICAgZWxzZSBpZiAoQmFja0J1dHRvbkVuZFBhcnQgPT0gcGFydCkKLSAg
ICAgICAgYnV0dG9uT2Zmc2V0ID0gMyAqIGJ1dHRvblNpemU7Ci0gICAgZWxzZSBpZiAoRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCkKLSAgICAgICAgYnV0dG9uT2Zmc2V0ID0gNCAqIGJ1dHRv
blNpemU7Ci0KLSAgICAvLyBOb3cgd2Ugd2FudCB0aGUgYWxsb2NhdGlvbiB0byBiZSByZWxhdGl2
ZSB0byB0aGUgb3JpZ2luIG9mIHRoZSBwYWludGVkIHJlY3QuCi0gICAgR3RrV2lkZ2V0KiB3aWRn
ZXQgPSBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxv
Y2F0aW9uKTsKLSAgICBhbGxvY2F0aW9uLnggPSBhbGxvY2F0aW9uLnkgPSAwOwotICAgIGFsbG9j
YXRpb24ud2lkdGggPSByZWN0LndpZHRoKCk7Ci0gICAgYWxsb2NhdGlvbi5oZWlnaHQgPSByZWN0
LmhlaWdodCgpOwotCi0gICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gdG90YWxBbGxvY2F0aW9uOwotICAgICAgICBh
bGxvY2F0aW9uLnkgLT0gYnV0dG9uT2Zmc2V0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFsbG9j
YXRpb24ud2lkdGggPSB0b3RhbEFsbG9jYXRpb247Ci0gICAgICAgIGFsbG9jYXRpb24ueCAtPSBi
dXR0b25PZmZzZXQ7Ci0gICAgfQotICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0
LCAmYWxsb2NhdGlvbik7Ci0KLSAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSBvcmllbnRhdGlvbiA9
PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICJ2c2Nyb2xsYmFyIiA6ICJoc2Nyb2xsYmFyIjsKLSAgICBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgcmVjdCk7Ci0KLSAg
ICBJbnRSZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwotICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRCb3goYnV0dG9uUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRv
d1R5cGUsIGRldGFpbCk7Ci0KLSAgICBmbG9hdCBhcnJvd1NjYWxpbmc7Ci0gICAgZ3RrX3dpZGdl
dF9zdHlsZV9nZXQod2lkZ2V0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwp
OwotICAgIEludFNpemUgYXJyb3dTaXplID0gcmVjdC5zaXplKCk7Ci0gICAgYXJyb3dTaXplLnNj
YWxlKGFycm93U2NhbGluZyk7Ci0gICAgSW50UmVjdCBhcnJvd1JlY3QoSW50UG9pbnQoYnV0dG9u
UmVjdC54KCkgKyAoYnV0dG9uUmVjdC53aWR0aCgpIC0gYXJyb3dTaXplLndpZHRoKCkpIC8gMiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25SZWN0LnkoKSArIChidXR0b25S
ZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplLmhlaWdodCgpKSAvIDIpLAotICAgICAgICAgICAgICAg
ICAgICAgIGFycm93U2l6ZSk7Ci0gICAgaWYgKHByZXNzZWQpIHsKLSAgICAgICAgaW50IGFycm93
RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZOwotICAgICAgICBndGtfd2lkZ2V0X3N0
eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNw
bGFjZW1lbnQteCIsICZhcnJvd0Rpc3BsYWNlbWVudFgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteSIsICZhcnJvd0Rpc3BsYWNlbWVudFksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBhcnJvd1JlY3QubW92ZShh
cnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WSk7Ci0gICAgfQotCi0gICAgR3Rr
QXJyb3dUeXBlIGFycm93VHlwZSA9IEdUS19BUlJPV19ET1dOOwotICAgIGlmIChvcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9u
RW5kUGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgICAgICBhcnJv
d1R5cGUgPSBHVEtfQVJST1dfVVA7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19SSUdIVDsK
LSAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0KQotICAgICAgICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX0xFRlQ7Ci0g
ICAgfQotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwg
c3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBhcnJvd1R5cGUsIGRldGFpbCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzQ5YzU0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgi
Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVGhlbWVHdGsuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEd0a1dpZGdldCosIFNjcm9sbGJhclRo
ZW1lR3RrKiBzY3JvbGxiYXJUaGVtZSkKLXsKLSAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhl
bWVQcm9wZXJ0aWVzKCk7Ci19Ci0KLVNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0
aygpCi0gICAgOiBtX2NvbnRleHQoc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtTY3JvbGxiYXJTdHlsZSgpKQotewotICAg
IHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0
LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
LX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKLXsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAibWluLXNsaWRlci1sZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZtX3Ro
dW1iRmF0bmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC1ib3Jk
ZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInN0ZXBwZXItc2l6ZSIsICZtX3N0ZXBwZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3RlcHBlci1zcGFjaW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2gtdW5kZXItc3RlcHBlcnMiLCAmbV90cm91
Z2hVbmRlclN0ZXBwZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJh
Y2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaGFzLWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRC
dXR0b25FbmRQYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29u
ZGFyeS1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIs
ICZtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOwotfQot
Ci1zdGF0aWMgdm9pZCBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1ND
Uk9MTEJBUik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIG9yaWVu
dGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCA6
IEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8v
IFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJz
IHByb3BlcnR5IGlzIHRydWUsIHRoaXMKLSAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBv
ZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQot
ICAgIC8vIHRyYWNrIHJlY3QuCi0gICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsK
LSAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQotICAgICAgICBmdWxsU2Nyb2xsYmFyUmVj
dCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndp
ZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2
ZShtX2NvbnRleHQpOwotCi0gICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1f
Y29udGV4dCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKLQotICAgIGd0
a19yZW5kZXJfYmFja2dyb3VuZChtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCks
IGZ1bGxTY3JvbGxiYXJSZWN0LnkoKSwgZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNj
cm9sbGJhclJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgIGZ1
bGxTY3JvbGxiYXJSZWN0LngoKSwgZnVsbFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFy
UmVjdC53aWR0aCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5
bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVH
dGs6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2F2ZShtX2NvbnRleHQpOwotCi0gICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2Vz
KG1fY29udGV4dCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCAic2Nyb2xsZWQtd2luZG93Iik7Ci0gICAgZ3RrX3Jl
bmRlcl9mcmFtZShtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBz
Y3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xs
YmFyLT5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4
dCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKLQot
ICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpOwotICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQs
IG9yaWVudGF0aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0
LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsKLQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBp
ZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgZmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwotICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0
KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdI
VDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3JlbmRlcl9zbGlkZXIobV9jb250
ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgb3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwg
OiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKG1fY29udGV4dCk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKLQotICAgIFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOwotICAgIGFwcGx5U2Ny
b2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKLQotICAg
IGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoKEJhY2tCdXR0b25TdGFydFBhcnQgPT0gcGFydCAm
JiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0
ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAgICAgIHx8IChGb3J3YXJk
QnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9s
bGJhci0+bWF4aW11bSgpKQotICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBw
YXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKSkg
ewotICAgICAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpCi0gICAgICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgICAgIGlmIChwYXJ0ID09
IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKLSAgICAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFU
RV9GTEFHX1BSRUxJR0hUOwotICAgIH0gZWxzZQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19JTlNFTlNJVElWRTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250
ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0g
ICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKLQotICAgIGdmbG9hdCBhcnJvd1NjYWxpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3N0eWxlKG1fY29udGV4dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBO
VUxMKTsKLQotICAgIGRvdWJsZSBhcnJvd1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpICogYXJyb3dTY2FsaW5nOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChy
ZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBhcnJvd1NpemUpIC8gMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyKTsK
LQotICAgIGlmIChmbGFncyAmIEdUS19TVEFURV9GTEFHX0FDVElWRSkgewotICAgICAgICBnaW50
IGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZOwotICAgICAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC14IiwgJmFycm93RGlzcGxhY2VtZW50WCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQt
eSIsICZhcnJvd0Rpc3BsYWNlbWVudFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMKTsKLSAgICAgICAgYXJyb3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwg
YXJyb3dEaXNwbGFjZW1lbnRZKTsKLSAgICB9Ci0KLSAgICBnZG91YmxlIGFuZ2xlOwotICAgIGlm
IChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBhbmdsZSA9IChw
YXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydCkgPyBHX1BJIDogMDsKLSAgICB9IGVsc2UgewotICAgICAgICBhbmdsZSA9IChwYXJ0ID09
IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkg
PyBHX1BJIC8gMiA6IDMgKiAoR19QSSAvIDIpOwotICAgIH0KLQotICAgIGd0a19yZW5kZXJfYXJy
b3cobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFy
cm93UG9pbnQueCgpLCBhcnJvd1BvaW50LnkoKSwgYXJyb3dTaXplKTsKLQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gIUdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyNDEzNzczLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51R3RrLmgiCi0KLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNlYXJjaFBv
cHVwTWVudUd0azo6U2VhcmNoUG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCogY2xpZW50KQot
ICAgIDogbV9wb3B1cChhZG9wdFJlZihuZXcgUG9wdXBNZW51R3RrKGNsaWVudCkpKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBvcHVwTWVudSogU2VhcmNoUG9wdXBNZW51R3RrOjpw
b3B1cE1lbnUoKQotewotICAgIHJldHVybiBtX3BvcHVwLmdldCgpOwotfQotCi12b2lkIFNlYXJj
aFBvcHVwTWVudUd0azo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFNlYXJjaFBvcHVwTWVudUd0azo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIFZlY3RvcjxTdHJpbmc+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29s
IFNlYXJjaFBvcHVwTWVudUd0azo6ZW5hYmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDUzYzYzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNo
UG9wdXBNZW51R3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgU2VhcmNoUG9wdXBNZW51R3RrX2gKLSNkZWZpbmUgU2VhcmNoUG9w
dXBNZW51R3RrX2gKLQotI2luY2x1ZGUgIlBvcHVwTWVudUd0ay5oIgotI2luY2x1ZGUgIlNlYXJj
aFBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNlYXJjaFBvcHVw
TWVudUd0ayA6IHB1YmxpYyBTZWFyY2hQb3B1cE1lbnUgewotcHVibGljOgotICAgIFNlYXJjaFBv
cHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqKTsKLQotICAgIHZpcnR1YWwgUG9wdXBNZW51KiBw
b3B1cE1lbnUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKTsKLSAgICB2aXJ0dWFsIGJvb2wgZW5hYmxl
ZCgpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxQb3B1cE1lbnVHdGs+IG1fcG9wdXA7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBTZWFyY2hQb3B1cE1lbnVHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzcwNDBmMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2hhcmVkQnVmZmVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Q
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNP
ZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBpZiAoZmlsZVBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oZmlsZVBhdGgpOwotICAgIGdjaGFyKiBjb250ZW50czsKLSAgICBn
c2l6ZSBzaXplOwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIGlmICghZ19maWxlX2dldF9j
b250ZW50cyhmaWxlbmFtZS5kYXRhKCksICZjb250ZW50cywgJnNpemUsICZlcnJvcikpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVz
IC0gJXMiLCBmaWxlbmFtZUZvckRpc3BsYXkoZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9y
LT5tZXNzYWdlKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoY29udGVudHMsIHNpemUpOwotICAgIGdfZnJlZShjb250ZW50cyk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMWEzNTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkVGltZXIuaCIKLQotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5j
bHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgZ3VpbnQgc2hhcmVkVGltZXI7Ci1zdGF0aWMgdm9pZCAoKnNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbikoKTsKLQotdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9p
ZCAoKmYpKCkpCi17Ci0gICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uID0gZjsKLX0KLQotc3Rh
dGljIGdib29sZWFuIHRpbWVvdXRfY2IoZ3BvaW50ZXIpCi17Ci0gICAgaWYgKHNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbikKLSAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7Ci0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJs
ZSBpbnRlcnZhbCkKLXsKLSAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKTsKLQot
ICAgIGd1aW50IGludGVydmFsSW5NUyA9IHN0YXRpY19jYXN0PGd1aW50PihpbnRlcnZhbCAqIDEw
MDApOwotCi0gICAgc3RvcFNoYXJlZFRpbWVyKCk7Ci0gICAgc2hhcmVkVGltZXIgPSBnX3RpbWVv
dXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX1JFRFJBVywgaW50ZXJ2YWxJbk1TLCB0aW1lb3V0X2Ni
LCAwLCAwKTsKLX0KLQotdm9pZCBzdG9wU2hhcmVkVGltZXIoKQotewotICAgIGlmIChzaGFyZWRU
aW1lciA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiByZW1vdmVkU291cmNl
ID0gZ19zb3VyY2VfcmVtb3ZlKHNoYXJlZFRpbWVyKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlbW92
ZWRTb3VyY2UsIHJlbW92ZWRTb3VyY2UpOwotICAgIHNoYXJlZFRpbWVyID0gMDsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJmNzMxNmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1NvdW5kR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiU291bmQuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHN5c3RlbUJlZXAoKQotewotICAgIGdka19i
ZWVwKCk7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNiMzQ0NDkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiQ29v
a2llU3RvcmFnZS5oIgotI2luY2x1ZGUgIkROUy5oIgotI2luY2x1ZGUgIkVkaXRvci5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5j
bHVkZSA8ZmxvYXQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENvbXBs
ZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KLS8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotdm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3Ry
aW5nPiYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxl
bmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci1mbG9hdCB1
c2VySWRsZVRpbWUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGTFRfTUFYOyB9IC8vIHJl
dHVybiBhbiBhcmJpdHJhcmlseSBoaWdoIHVzZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2luZyBw
YWdlcyBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzbid0IHBvc3Rwb25lZAotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmM2JjNzMzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9Vc2VyQWdlbnRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50R3RrLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0K
LSNpZiBPUyhVTklYKQotI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+Ci0jZWxpZiBPUyhXSU5ET1dT
KQotI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBwbGF0Zm9ybUZvclVBU3RyaW5nKCkKLXsKLSNpZiBQTEFU
Rk9STShYMTEpCi0gICAgcmV0dXJuICJYMTEiOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICByZXR1
cm4gIiI7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuICJNYWNpbnRvc2giOwotI2Vs
aWYgZGVmaW5lZChHREtfV0lORE9XSU5HX0RJUkVDVEZCKQotICAgIHJldHVybiAiRGlyZWN0RkIi
OwotI2Vsc2UKLSAgICByZXR1cm4gIlVua25vd24iOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBTdHJp
bmcgcGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcoKQotewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCB1YU9TVmVyc2lvbiwgKFN0cmluZygpKSk7Ci0gICAgaWYgKCF1YU9TVmVyc2lv
bi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB1YU9TVmVyc2lvbjsKLQotI2lmIE9TKFdJTkRP
V1MpCi0gICAgdWFPU1ZlcnNpb24gPSB3aW5kb3dzVmVyc2lvbkZvclVBU3RyaW5nKCk7Ci0jZWxp
ZiBPUyhEQVJXSU4pCi0jaWYgQ1BVKFg4NikKLSAgICB1YU9TVmVyc2lvbiA9ICJJbnRlbCBNYWMg
T1MgWCI7Ci0jZWxzZQotICAgIHVhT1NWZXJzaW9uID0gIlBQQyBNYWMgT1MgWCI7Ci0jZW5kaWYK
LSNlbGlmIE9TKFVOSVgpCi0gICAgc3RydWN0IHV0c25hbWUgbmFtZTsKLSAgICBpZiAodW5hbWUo
Jm5hbWUpICE9IC0xKQotICAgICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZzo6Zm9ybWF0KCIlcyAl
cyIsIG5hbWUuc3lzbmFtZSwgbmFtZS5tYWNoaW5lKTsKLSAgICBlbHNlCi0gICAgICAgIHVhT1NW
ZXJzaW9uID0gU3RyaW5nKCJVbmtub3duIik7Ci0jZWxzZQotICAgIHVhT1NWZXJzaW9uID0gU3Ry
aW5nKCJVbmtub3duIik7Ci0jZW5kaWYKLSAgICByZXR1cm4gdWFPU1ZlcnNpb247Ci19Ci0KLVN0
cmluZyBzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSwgY29u
c3QgU3RyaW5nJiBhcHBsaWNhdGlvblZlcnNpb24pCi17Ci0gICAgLy8gQ3JlYXRlIGEgZGVmYXVs
dCB1c2VyIGFnZW50IHN0cmluZyB3aXRoIGEgbGliZXJhbCBpbnRlcnByZXRhdGlvbiBvZiAKLSAg
ICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1VzZXJfQWdlbnRf
U3RyaW5nc19SZWZlcmVuY2UKLSAgICAvLwotICAgIC8vIEZvcm1pbmcgYSBmdW5jdGlvbmFsIHVz
ZXIgYWdlbnQgaXMgcmVhbGx5IGRpZmZpY3VsdC4gV2UgbXVzdCBtZW50aW9uIFNhZmFyaSwgYmVj
YXVzZSBzb21lCi0gICAgLy8gc2l0ZXMgY2hlY2sgZm9yIHRoYXQgd2hlbiBkZXRlY3RpbmcgV2Vi
S2l0IGJyb3dzZXJzLiBBZGRpdGlvbmFsbHkgc29tZSBzaXRlcyBhc3N1bWUgdGhhdAotICAgIC8v
IGJyb3dzZXJzIHRoYXQgYXJlICJTYWZhcmkiIGJ1dCBub3QgcnVubmluZyBvbiBPUyBYIGFyZSB0
aGUgU2FmYXJpIGlPUyBicm93c2VyLCBzbyB3ZQotICAgIC8vIGFsc28gY2xhaW0gdG8gYmUgIENo
cm9taXVtLiBHZXR0aW5nIHRoaXMgd3JvbmcgY2FuIGNhdXNlIHNpdGVzIHRvIGxvYWQgdGhlIHdy
b25nIEphdmFTY3JpcHQsCi0gICAgLy8gQ1NTLCBvciBjdXN0b20gZm9udHMuIEluIHNvbWUgY2Fz
ZXMgc2l0ZXMgd29uJ3QgbG9hZCByZXNvdXJjZXMgYXQgYWxsLgotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQ1N0cmluZywgdWFWZXJzaW9uLCAoU3RyaW5nOjpmb3JtYXQoIiVpLiVpIiwg
V0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTiwgV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1Jf
VkVSU0lPTikudXRmOCgpKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHN0YXRpY1VBLCAoU3RyaW5nOjpmb3JtYXQoIk1vemlsbGEvNS4wICglczsgJXMpIEFwcGxlV2Vi
S2l0LyVzIChLSFRNTCwgbGlrZSBHZWNrbykgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaHJvbWl1bS8yNS4wLjEzNDku
MiBDaHJvbWUvMjUuMC4xMzQ5LjIgU2FmYXJpLyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUZvclVBU3Ry
aW5nKCksIHBsYXRmb3JtVmVyc2lvbkZvclVBU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1YVZlcnNpb24uZGF0YSgpLCB1YVZlcnNpb24uZGF0YSgpKSkpOwotICAgIGlmIChhcHBsaWNh
dGlvbk5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3RhdGljVUE7Ci0KLSAgICBTdHJp
bmcgZmluYWxBcHBsaWNhdGlvblZlcnNpb24gPSBhcHBsaWNhdGlvblZlcnNpb247Ci0gICAgaWYg
KGZpbmFsQXBwbGljYXRpb25WZXJzaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgZmluYWxBcHBsaWNh
dGlvblZlcnNpb24gPSB1YVZlcnNpb24uZGF0YSgpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCIlcyAlcy8lcyIsIHN0YXRpY1VBLnV0ZjgoKS5kYXRhKCksIGFwcGxpY2F0aW9uTmFtZS51
dGY4KCkuZGF0YSgpLCBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW4gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvVXNlckFnZW50R3RrLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTBi
N2EuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0
ay5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVXNlckFnZW50R3RrX2gKLSNkZWZp
bmUgVXNlckFnZW50R3RrX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2RlZmluZSBXRUJLSVRfVVNFUl9BR0VOVF9N
QUpPUl9WRVJTSU9OIChAV0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTkApCi0jZGVmaW5l
IFdFQktJVF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04gKEBXRUJLSVRfVVNFUl9BR0VOVF9NSU5P
Ul9WRVJTSU9OQCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcgc3RhbmRhcmRVc2Vy
QWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUgPSAiIiwgY29uc3QgU3RyaW5nJiBh
cHBsaWNhdGlvblZlcnNpb24gPSAiIik7Ci0KLX0KLQotI2VuZGlmIC8vIFVzZXJBZ2VudEd0a19o
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDIwM2YzYzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q3Vyc29yLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0j
aW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdpZGdldDo6
V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKLXsKLSAgICBpbml0KHdpZGdldCk7Ci19Ci0K
LVdpZGdldDo6fldpZGdldCgpCi17Ci0gICAgQVNTRVJUKCFwYXJlbnQoKSk7Ci0KLSAgICByZWxl
YXNlUGxhdGZvcm1XaWRnZXQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9j
dXNlZCkKLXsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNv
cikKLXsKLSAgICBTY3JvbGxWaWV3KiB2aWV3ID0gcm9vdCgpOwotICAgIGlmICghdmlldykKLSAg
ICAgICAgcmV0dXJuOwotICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7
Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzaG93KCkKLXsKLSAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsK
LQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQotICAgICAg
ICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0Ojpo
aWRlKCkKLXsKLSAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7Ci0KLSAgICBpZiAoaXNQYXJlbnRW
aXNpYmxlKCkgJiYgcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBs
YXRmb3JtV2lkZ2V0KCkpOwotfQotCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotfQotCi12b2lkIFdpZGdldDo6c2V0
SXNTZWxlY3RlZChib29sIGlzU2VsZWN0ZWQpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTZWUgaWYgdGhlIHBsYXRmb3JtV2lkZ2V0IGhh
cyBhIHdlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQgcHJvcGVydHkKLSAgICAvLyBhbmQgc2V0IGl0
IGFmdGVyd2FyZHMuCi0gICAgR1BhcmFtU3BlYyogc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRf
cHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKHBsYXRmb3JtV2lkZ2V0KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQtd2lkZ2V0
LWlzLXNlbGVjdGVkIik7Ci0gICAgaWYgKCFzcGVjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
X29iamVjdF9zZXQocGxhdGZvcm1XaWRnZXQoKSwgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQi
LCBpc1NlbGVjdGVkLCBOVUxMKTsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWU7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX2ZyYW1lID0gcmVjdDsKLSAgICBmcmFt
ZVJlY3RzQ2hhbmdlZCgpOwotfQotCi12b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0
KCkKLXsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgICByZXR1cm47Ci0gICAg
Z19vYmplY3RfdW5yZWYocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpyZXRh
aW5QbGF0Zm9ybVdpZGdldCgpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQotICAgICAg
ICAgcmV0dXJuOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBsYXRmb3JtV2lkZ2V0KCkpOwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZjVkYTUuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Rr
VmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVk
ZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIEdka1BpeG1hcCogZ1NjcmF0Y2hCdWZmZXIgPSAwOwotc3RhdGljIHZvaWQgcHVyZ2VTY3Jh
dGNoQnVmZmVyKCkKLXsKLSAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCi0gICAgICAgIGdfb2JqZWN0
X3VucmVmKGdTY3JhdGNoQnVmZmVyKTsKLSAgICBnU2NyYXRjaEJ1ZmZlciA9IDA7Ci19Ci0KLS8v
IFdpZGdldCByZW5kZXJpbmcgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9y
IHRoZSBpbnRlcm1lZGlhdGUKLS8vIHJlbmRlci4gSW5zdGVhZCBvZiBjcmVhdGluZyBhbmQgZGVz
dHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBvcGVyYXRpb24sCi0vLyB3ZSBjcmVhdGUgYSBi
dWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHB1cmdlZCB2aWEgYSB0aW1lci4KLWNs
YXNzIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7Ci1wcml2YXRl
OgotICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpIHsgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7IH0KLX07
Ci0KLXN0YXRpYyB2b2lkIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCBwdXJnZVNjcmF0Y2hCdWZm
ZXJUaW1lciwgKCkpOwotICAgIGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2ZSgp
KQotICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7Ci0gICAgcHVyZ2VTY3Jh
dGNoQnVmZmVyVGltZXIuc3RhcnRPbmVTaG90KDIpOwotfQotCi1XaWRnZXRSZW5kZXJpbmdDb250
ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQotICAgIDogbV9ncmFwaGljc0NvbnRleHQo
Z3JhcGhpY3NDb250ZXh0KQotICAgICwgbV90YXJnZXRSZWN0KHRhcmdldFJlY3QpCi0gICAgLCBt
X2hhZEVycm9yKGZhbHNlKQotewotICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsK
LQotICAgIC8vIEZhbGxiYWNrOiBXZSBmYWlsZWQgdG8gY3JlYXRlIGFuIFJHQkEgY29sb3JtYXAg
ZWFybGllciwgc28gd2UgY2Fubm90IHByb3Blcmx5IHBhaW50IAotICAgIC8vIHRvIGEgdGVtcG9y
YXJ5IHN1cmZhY2UgYW5kIHByZXNlcnZlIHRyYW5zcGFyZW5jeS4gVG8gZW5zdXJlIGRlY2VudCB3
aWRnZXQgcmVuZGVyaW5nLCBqdXN0Ci0gICAgLy8gcGFpbnQgZGlyZWN0bHkgdG8gdGhlIHRhcmdl
dCBkcmF3YWJsZS4gVGhpcyB3aWxsIG5vdCByZW5kZXIgQ1NTIHJvdGF0aW9uYWwgdHJhbnNmb3Jt
cyBwcm9wZXJseS4KLSAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFw
ICYmIGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKLSAgICAgICAgbV90YXJnZXQgPSBn
cmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gV2UgbmV2ZXIgd2FudCB0byBjcmVhdGUgYSBzY3JhdGNoIGJ1ZmZlciBsYXJnZXIgdGhh
biB0aGUgc2l6ZSBvZiBvdXIgdGFyZ2V0IEdka0RyYXdhYmxlLgotICAgIC8vIFRoaXMgcHJldmVu
dHMgZ2lhbnQgcGl4bWFwIGFsbG9jYXRpb25zIGZvciB2ZXJ5IGxhcmdlIHdpZGdldHMgaW4gc21h
bGxlciB2aWV3cy4KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjaGVj
ayBmb3IgV2ViS2l0MiBhcyB3ZWxsLgotICAgIGlmIChncmFwaGljc0NvbnRleHQtPmdka1dpbmRv
dygpKSB7Ci0gICAgICAgIGludCBtYXhXaWR0aCA9IDAsIG1heEhlaWdodCA9IDA7Ci0gICAgICAg
IGdldEdka0RyYXdhYmxlU2l6ZShncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpLCAmbWF4V2lk
dGgsICZtYXhIZWlnaHQpOwotICAgICAgICBtX3RhcmdldFJlY3Quc2V0U2l6ZShtX3RhcmdldFJl
Y3Quc2l6ZSgpLnNocnVua1RvKEludFNpemUobWF4V2lkdGgsIG1heEhlaWdodCkpKTsKLSAgICB9
Ci0KLSAgICAvLyBXaWRnZXRzIHNvbWV0aW1lcyBuZWVkIHRvIGRyYXcgb3V0c2lkZSB0aGVpciBi
b3VuZGFyaWVzIGZvciB0aGluZ3Mgc3VjaCBhcwotICAgIC8vIGV4dGVyaW9yIGZvY3VzLiBXZSB3
YW50IHRvIGFsbG9jYXRlIGEgc29tZSBleHRyYSBwaXhlbHMgaW4gb3VyIHN1cmZhY2UgZm9yIHRo
aXMuCi0gICAgc3RhdGljIGludCBleHRyYVNwYWNlID0gMTU7Ci0gICAgbV90YXJnZXRSZWN0Lmlu
ZmxhdGUoZXh0cmFTcGFjZSk7Ci0KLSAgICAvLyBUaGlzIG9mZnNldCB3aWxsIG1hcCBhIHBvaW50
IGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgd2lkZ2V0IHRvIHRoZSBjb29yZGluYXRl
IHN5c3RlbSBvZiB0aGUgcGFpbnRpbmcgYnVmZmVyLgotICAgIG1fcGFpbnRPZmZzZXQgPSB0YXJn
ZXRSZWN0LmxvY2F0aW9uKCkgLSBtX3RhcmdldFJlY3QubG9jYXRpb24oKTsKLQotICAgIGludCB3
aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpICsgKGV4dHJhU3BhY2UgKiAyKTsKLSAgICBpbnQg
aGVpZ2h0ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpICsgKGV4dHJhU3BhY2UgKiAyKTsKLSAgICBp
bnQgc2NyYXRjaFdpZHRoID0gMDsKLSAgICBpbnQgc2NyYXRjaEhlaWdodCA9IDA7Ci0gICAgaWYg
KGdTY3JhdGNoQnVmZmVyKQotICAgICAgICBnZGtfcGl4bWFwX2dldF9zaXplKGdTY3JhdGNoQnVm
ZmVyLCAmc2NyYXRjaFdpZHRoLCAmc2NyYXRjaEhlaWdodCk7Ci0KLSAgICAvLyBXZSBkbyBub3Qg
bmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJn
ZSBlbm91Z2guCi0gICAgaWYgKCFnU2NyYXRjaEJ1ZmZlciB8fCBzY3JhdGNoV2lkdGggPCB3aWR0
aCB8fCBzY3JhdGNoSGVpZ2h0IDwgaGVpZ2h0KSB7Ci0gICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZl
cigpOwotICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8g
bm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXplZCByZXF1ZXN0cy4KLSAgICAgICAg
d2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKLSAgICAgICAgaGVpZ2h0ID0gKDEgKyAo
aGVpZ2h0ID4+IDUpKSA8PCA1OwotCi0gICAgICAgIGdTY3JhdGNoQnVmZmVyID0gZ2RrX3BpeG1h
cF9uZXcoMCwgd2lkdGgsIGhlaWdodCwgZ2RrX2NvbG9ybWFwX2dldF92aXN1YWwodGhlbWUtPm1f
Y29sb3JtYXApLT5kZXB0aCk7Ci0gICAgICAgIGdka19kcmF3YWJsZV9zZXRfY29sb3JtYXAoZ1Nj
cmF0Y2hCdWZmZXIsIHRoZW1lLT5tX2NvbG9ybWFwKTsKLSAgICB9Ci0gICAgbV90YXJnZXQgPSBn
U2NyYXRjaEJ1ZmZlcjsKLQotICAgIC8vIENsZWFyIHRoZSBzY3JhdGNoIGJ1ZmZlci4KLSAgICBS
ZWZQdHI8Y2Fpcm9fdD4gc2NyYXRjaEJ1ZmZlckNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9f
Y3JlYXRlKGdTY3JhdGNoQnVmZmVyKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKHNjcmF0Y2hC
dWZmZXJDb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFp
bnQoc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCkpOwotfQotCi1XaWRnZXRSZW5kZXJpbmdDb250
ZXh0Ojp+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gV2UgZG8gbm90IG5lZWQg
dG8gYmxpdCBiYWNrIHRvIHRoZSB0YXJnZXQgaW4gdGhlIGZhbGxiYWNrIGNhc2UuIFNlZSBhYm92
ZS4KLSAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0
ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7Ci0gICAgaWYgKCF0aGVtZS0+
bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBtX2dyYXBoaWNzQ29udGV4dC0+Z2RrV2lu
ZG93KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IHBhaW50IHRoZSByZXN1bHRz
IGJhY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgotICAgIGlmIChtX2hhZEVycm9yKSB7Ci0gICAg
ICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBwcmVz
ZXJ2ZSB0aGUgY3VycmVudCBzb3VyY2UgaGVyZS4KLSAgICBjYWlyb190KiBjYWlyb0NvbnRleHQg
PSBtX2dyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgUmVmUHRy
PGNhaXJvX3BhdHRlcm5fdD4gcHJldmlvdXNTb3VyY2UoY2Fpcm9fZ2V0X3NvdXJjZShjYWlyb0Nv
bnRleHQpKTsKLQotICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeG1hcChjYWlyb0NvbnRleHQs
IGdTY3JhdGNoQnVmZmVyLCBtX3RhcmdldFJlY3QueCgpLCBtX3RhcmdldFJlY3QueSgpKTsKLSAg
ICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LCBtX3RhcmdldFJlY3QueCgpLCBtX3Rhcmdl
dFJlY3QueSgpLCBtX3RhcmdldFJlY3Qud2lkdGgoKSwgbV90YXJnZXRSZWN0LmhlaWdodCgpKTsK
LSAgICBjYWlyb19maWxsKGNhaXJvQ29udGV4dCk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZShjYWly
b0NvbnRleHQsIHByZXZpb3VzU291cmNlLmdldCgpKTsKLSAgICBzY2hlZHVsZVNjcmF0Y2hCdWZm
ZXJQdXJnZSgpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZUNs
aXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIEdka1JlY3RhbmdsZSogY2xpcFJlY3QpCi17Ci0g
ICAgY2xpcFJlY3QtPnggPSBtX3BhaW50T2Zmc2V0LndpZHRoKCkgKyByZWN0LngoKTsKLSAgICBj
bGlwUmVjdC0+eSA9IG1fcGFpbnRPZmZzZXQuaGVpZ2h0KCkgKyByZWN0LnkoKTsKLSAgICBjbGlw
UmVjdC0+d2lkdGggPSBtX3RhcmdldFJlY3Qud2lkdGgoKTsKLSAgICBjbGlwUmVjdC0+aGVpZ2h0
ID0gbV90YXJnZXRSZWN0LmhlaWdodCgpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdj
aGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0
ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0KLSAgICAvLyBTb21lIHdpZGdldHMgYWxzbyBu
ZWVkIHRoZWlyIGFsbG9jYXRpb24gYWRqdXN0ZWQgdG8gYWNjb3VudCBmb3IgZXh0cmEgc3BhY2Uu
Ci0gICAgLy8gUmlnaHQgbm93IG9ubHkgc2Nyb2xsYmFyIGJ1dHRvbnMgaGF2ZSBzaWduaWZpY2Fu
dCBhbGxvY2F0aW9ucy4KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dp
ZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLSAgICBhbGxvY2F0aW9u
LnggKz0gY2xpcFJlY3QueDsKLSAgICBhbGxvY2F0aW9uLnkgKz0gY2xpcFJlY3QueTsKLSAgICBn
dGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOwotCi0gICAgZ3Rr
X3BhaW50X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVU
eXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsCi0gICAgICAgICAgICAgICAgICB3aWRnZXQsIGRl
dGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZsYXRCb3goY29u
c3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5
cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAg
ICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNs
aXBSZWN0KTsKLSAgICBndGtfcGFpbnRfZmxhdF9ib3goZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lk
Z2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICB3aWRnZXQsIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdD
b250ZXh0OjpndGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAg
IEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xp
cFJlY3QpOwotICAgIGd0a19wYWludF9mb2N1cyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
LCBtX3RhcmdldCwgc3RhdGVUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50U2xp
ZGVyKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUg
c3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWws
IEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVj
dDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWlu
dF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlw
ZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICBk
ZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSwgb3JpZW50YXRpb24pOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1Bh
aW50Q2hlY2soY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRl
VHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRl
dGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJl
Y3QocmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfY2hlY2soZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBSZWN0
LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJl
Y3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0OjpndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
LSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9v
cHRpb24oZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwg
c2hhZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICBkZXRh
aWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTaGFkb3coY29uc3Qg
SW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUs
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBH
ZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBS
ZWN0KTsKLSAgICBndGtfcGFpbnRfc2hhZG93KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LAotICAg
ICAgICAgICAgICAgICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
Omd0a1BhaW50QXJyb3coY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0
a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgaW50IGFycm93
RGlyZWN0aW9uLCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlw
UmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19w
YWludF9hcnJvdyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVU
eXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwgZGV0YWlsLAotICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxHdGtBcnJvd1R5cGU+KGFycm93RGlyZWN0aW9uKSwgVFJVRSwg
Y2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0K
LQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludFZMaW5lKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBjb25z
dCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBjYWxj
dWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF92bGluZShndGtf
d2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCAmY2xpcFJlY3Qs
IHdpZGdldCwgZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICBjbGlwUmVjdC55LCBjbGlwUmVj
dC55ICsgcmVjdC5oZWlnaHQoKSwgY2xpcFJlY3QueCk7Ci0KLX0KLQotfQotCi0jZW5kaWYgLy8g
R1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
MWYyYzhhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRS
ZW5kZXJpbmdDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2lmbmRlZiBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dF9oCi0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotCi0vLyBVc3VhbGx5IHRoaXMgaXMgdG9vIGV4cGVuc2l2ZSB0byBoYXZlIGluIGhl
YWRlcnMsIGJ1dCBHdGtTdGF0ZVR5cGUgR3RrU2hhZG93VHlwZSBhcmUKLS8vIGVudW1zIGFuZCBj
YW5ub3QgYmUgZm9yd2FyZCBkZWNsYXJlZC4gV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGlzIGN1
cnJlbnRseSBvbmx5Ci0vLyBpbmNsdWRlZCBpbiBSZW5kZXJUaGVtZUd0azIuY3BwIGFuZCBTY3Jv
bGxiYXJUaGVtZUd0azIuY3BwLgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBSZW5kZXJUaGVtZUd0azsK
LQotY2xhc3MgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgfldp
ZGdldFJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZvaWQgZ3RrUGFpbnRCb3goY29uc3QgSW50
UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2No
YXIqKTsKLSAgICB2b2lkIGd0a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0
KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQg
Z3RrUGFpbnRGb2N1cyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBj
b25zdCBnY2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYsIEd0
a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqLCBHdGtP
cmllbnRhdGlvbik7Ci0gICAgdm9pZCBndGtQYWludENoZWNrKGNvbnN0IEludFJlY3QmLCBHdGtX
aWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7Ci0gICAg
dm9pZCBndGtQYWludE9wdGlvbihjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVU
eXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRTaGFk
b3coY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlw
ZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50QXJyb3coY29uc3QgSW50UmVjdCYs
IEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgaW50IGFycm93RGlyZWN0
aW9uLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRWTGluZShjb25zdCBJbnRSZWN0
JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBjb25zdCBnY2hhciopOwotCi1wcml2YXRlOgot
ICAgIHZvaWQgY2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVjdCYsIEdka1JlY3RhbmdsZSop
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKLSAgICBJbnRSZWN0
IG1fdGFyZ2V0UmVjdDsKLSAgICBJbnRTaXplIG1fcGFpbnRPZmZzZXQ7Ci0gICAgYm9vbCBtX2hh
ZEVycm9yOwotICAgIEdka0RyYXdhYmxlKiBtX3RhcmdldDsKLQotfTsKLQotfQotCi0jZW5kaWYg
Ly8gR1RLX0FQSV9WRVJTSU9OXzIKLSNlbmRpZiAvLyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRp
YWxCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsv
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM0MjNmYTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9n
dGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsQmFja2luZ1N0b3JlLmgiCi0KLSNkZWZpbmUgU0VD
UkVUX1dJVEhfVU5TVEFCTEUgMQotI2RlZmluZSBTRUNSRVRfQVBJX1NVQkpFQ1RfVE9fQ0hBTkdF
IDEKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQ
dHJHdGsuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2luY2x1ZGUgPGxpYnNlY3Jl
dC9zZWNyZXQuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUNyZWRlbnRpYWxCYWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5n
U3RvcmUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3JlZGVudGlhbEJhY2tpbmdTdG9y
ZSwgYmFja2luZ1N0b3JlLCAoKSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKLX0KLQotc3Rh
dGljIEdSZWZQdHI8R0hhc2hUYWJsZT4gY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxs
ZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVk
ZW50aWFsJiBjcmVkZW50aWFsID0gQ3JlZGVudGlhbCgpKQotewotICAgIFNvdXBVUkkqIHVyaSA9
IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKLSAgICBHUmVm
UHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoc2VjcmV0X2F0dHJpYnV0ZXNf
YnVpbGQoCi0gICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCi0gICAgICAgICJk
b21haW4iLCBzb3VwX2F1dGhfZ2V0X3JlYWxtKGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKLSAgICAg
ICAgInNlcnZlciIsIHVyaS0+aG9zdCwKLSAgICAgICAgInByb3RvY29sIiwgdXJpLT5zY2hlbWUs
Ci0gICAgICAgICJhdXRodHlwZSIsIHNvdXBfYXV0aF9nZXRfc2NoZW1lX25hbWUoY2hhbGxlbmdl
LnNvdXBBdXRoKCkpLAotICAgICAgICAicG9ydCIsIHVyaS0+cG9ydCwKLSAgICAgICAgTlVMTCkp
OwotICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0
ZXM7Ci0KLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KGF0dHJpYnV0ZXMuZ2V0KCksIGdfc3RyZHVw
KCJ1c2VyIiksIGdfc3RyZHVwKGNyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICByZXR1cm4gYXR0cmlidXRlczsKLX0KLQotc3RydWN0IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VB
c3luY1JlYWR5Q2FsbGJhY2tEYXRhIHsKLSAgICBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpDcmVk
ZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgdm9pZCogZGF0YTsKLX07
Ci0KLXN0YXRpYyB2b2lkIGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2so
U2VjcmV0U2VydmljZSogc2VydmljZSwgR0FzeW5jUmVzdWx0KiBhc3luY1Jlc3VsdCwgQ3JlZGVu
dGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEqIGNhbGxiYWNrRGF0YSkKLXsK
LSAgICBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJh
Y2sgY2FsbGJhY2sgPSBjYWxsYmFja0RhdGEtPmNhbGxiYWNrOwotICAgIHZvaWQqIGRhdGEgPSBj
YWxsYmFja0RhdGEtPmRhdGE7Ci0gICAgZGVsZXRlIGNhbGxiYWNrRGF0YTsKLQotICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHT3duUHRyPEdMaXN0PiBlbGVtZW50cyhzZWNyZXRfc2Vy
dmljZV9zZWFyY2hfZmluaXNoKHNlcnZpY2UsIGFzeW5jUmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkp
KTsKLSAgICBpZiAoZXJyb3IgfHwgIWVsZW1lbnRzIHx8ICFlbGVtZW50cy0+ZGF0YSkgewotICAg
ICAgICBjYWxsYmFjayhDcmVkZW50aWFsKCksIGRhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgR1JlZlB0cjxTZWNyZXRJdGVtPiBzZWNyZXRJdGVtID0gYWRvcHRHUmVmKHN0YXRp
Y19jYXN0PFNlY3JldEl0ZW0qPihlbGVtZW50cy0+ZGF0YSkpOwotICAgIEdSZWZQdHI8R0hhc2hU
YWJsZT4gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihzZWNyZXRfaXRlbV9nZXRfYXR0cmlidXRlcyhz
ZWNyZXRJdGVtLmdldCgpKSk7Ci0gICAgU3RyaW5nIHVzZXIgPSBTdHJpbmc6OmZyb21VVEY4KHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0
KCksICJ1c2VyIikpKTsKLSAgICBpZiAodXNlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FsbGJh
Y2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNp
emVfdCBsZW5ndGg7Ci0gICAgR1JlZlB0cjxTZWNyZXRWYWx1ZT4gc2VjcmV0VmFsdWUgPSBhZG9w
dEdSZWYoc2VjcmV0X2l0ZW1fZ2V0X3NlY3JldChzZWNyZXRJdGVtLmdldCgpKSk7Ci0gICAgY29u
c3QgY2hhciogcGFzc3dvcmREYXRhID0gc2VjcmV0X3ZhbHVlX2dldChzZWNyZXRWYWx1ZS5nZXQo
KSwgJmxlbmd0aCk7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gU3RyaW5nOjpmcm9tVVRGOChwYXNz
d29yZERhdGEsIGxlbmd0aCk7Ci0KLSAgICBjYWxsYmFjayhDcmVkZW50aWFsKHVzZXIsIHBhc3N3
b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQpLCBkYXRhKTsKLX0KLQotdm9pZCBD
cmVkZW50aWFsQmFja2luZ1N0b3JlOjpjcmVkZW50aWFsRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxs
YmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKLXsKLSAgICAvLyBUaGUgZGVmYXVsdCBmbGFnIG9u
bHkgcmV0dXJucyB0aGUgbW9zdCByZWNlbnQgaXRlbSwgbm90IGFsbCBvZiB0aGVtLgotICAgIFNl
Y3JldFNlYXJjaEZsYWdzIHNlYXJjaEZsYWdzID0gc3RhdGljX2Nhc3Q8U2VjcmV0U2VhcmNoRmxh
Z3M+KFNFQ1JFVF9TRUFSQ0hfVU5MT0NLIHwgU0VDUkVUX1NFQVJDSF9MT0FEX1NFQ1JFVFMpOwot
ICAgIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxsYmFj
a0RhdGEgPSBuZXcgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGE7
Ci0gICAgY2FsbGJhY2tEYXRhLT5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIGNhbGxiYWNrRGF0
YS0+ZGF0YSA9IGRhdGE7Ci0KLSAgICBzZWNyZXRfc2VydmljZV9zZWFyY2goCi0gICAgICAgIDAs
IC8vIFRoZSBkZWZhdWx0IFNlY3JldFNlcnZpY2UuCi0gICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09N
UEFUX05FVFdPUkssCi0gICAgICAgIGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVu
Z2UoY2hhbGxlbmdlKS5nZXQoKSwKLSAgICAgICAgc2VhcmNoRmxhZ3MsCi0gICAgICAgIDAsIC8v
IGNhbmNlbGxhYmxlCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4oY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFjayksCi0gICAgICAgIGNh
bGxiYWNrRGF0YSk7Ci19Ci0KLXZvaWQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6c3RvcmVDcmVk
ZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIENTdHJpbmcgdXRmOFBh
c3N3b3JkID0gY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKTsKLSAgICBHUmVmUHRyPFNlY3Jl
dFZhbHVlPiBuZXdTZWNyZXRWYWx1ZSA9IGFkb3B0R1JlZihzZWNyZXRfdmFsdWVfbmV3KHV0ZjhQ
YXNzd29yZC5kYXRhKCksIHV0ZjhQYXNzd29yZC5sZW5ndGgoKSwgInRleHQvcGxhaW4iKSk7Ci0K
LSAgICBzZWNyZXRfc2VydmljZV9zdG9yZSgKLSAgICAgICAgMCwgLy8gVGhlIGRlZmF1bHQgU2Vj
cmV0U2VydmljZS4KLSAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKLSAgICAg
ICAgY3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjaGFsbGVuZ2UsIGNyZWRl
bnRpYWwpLmdldCgpLAotICAgICAgICBTRUNSRVRfQ09MTEVDVElPTl9ERUZBVUxULAotICAgICAg
ICBfKCJXZWJLaXRHVEsrIHBhc3N3b3JkIiksCi0gICAgICAgIG5ld1NlY3JldFZhbHVlLmdldCgp
LAotICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQotICAgICAgICAwLCAvLyBjYWxsYmFjawotICAg
ICAgICAwKTsgLy8gZGF0YQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZGE5YTEuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJh
Y2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9o
Ci0jZGVmaW5lIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAotCi0jaW5jbHVkZSAiQ3JlZGVudGlh
bC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOwotCi1jbGFzcyBDcmVkZW50aWFsQmFja2luZ1N0b3JlIHsKLVdURl9NQUtFX05PTkNPUFlB
QkxFKENyZWRlbnRpYWxCYWNraW5nU3RvcmUpOwotcHVibGljOgotICAgIGZyaWVuZCBDcmVkZW50
aWFsQmFja2luZ1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7Ci0gICAgdmlydHVhbCB+
Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpIHsgfQotCi0gICAgdHlwZWRlZiB2b2lkICgqQ3JlZGVu
dGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrKShjb25zdCBDcmVkZW50aWFsJiwgdm9pZCogZGF0YSk7
Ci0KLSAgICB2b2lkIGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmLCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2ssIHZvaWQqIGRhdGEpOwot
ICAgIHZvaWQgc3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKLXByaXZhdGU6Ci0gICAgQ3JlZGVudGlh
bEJhY2tpbmdTdG9yZSgpIHsgfQotfTsKLQotQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVu
dGlhbEJhY2tpbmdTdG9yZSgpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBDcmVkZW50aWFsQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElD
VUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ZTVhMDUuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkK
LXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgotICAgIHJldHVybiAi
IjsKLX0KLQotY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKLXsKLSAgICAv
LyBGSVhNRTogU2hvdWxkIHVzZSBzeXN0ZW0gbG9jYWxlLgotICAgIHJldHVybiAiZW5fdXMiOwot
fQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYmVlZDIxZC4uNGNmNWRlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2Jl
cnNla0BnbWFpbC5jb20+CiAKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZv
cm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGp1c3QgdGhlIHBh
dGggdG8gdGhlIEd0a1ZlcnNpb25pbmcuYyBzb3VyY2UgZmlsZS4gUmVtb3ZlIGFuIHVubmVjZXNz
YXJ5CisgICAgICAgIHJlZmVyZW5jZSB0byB0aGUgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
IGRpcmVjdG9yeSB3aGljaCBpcyBub3cgZW1wdHkuCisKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNl
ayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKwogICAgICAgICBbR1RLXSBSZW1vdmUgbGliV2Vi
Q29yZVBsYXRmb3JtLmxhLCBidWlsZGluZyBpdHMgc291cmNlcyBpbnRvIGxpYlBsYXRmb3JtLmxh
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1NzkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBlOTQxZTU3Li4zZjE2M2RjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtNjIwLDkgKzYyMCw4IEBAIFByb2dyYW1zX3VuaXR0ZXN0
c190ZXN0a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc191
bml0dGVzdHNfdGVzdGtleWV2ZW50c19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykK
IAogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfU09VUkNFUyA9IFNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rjb3B5YW5kcGFzdGUuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYworCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGNvcHlhbmRwYXN0ZV9DRkxBR1MgPSAkKHdl
YmtpdF90ZXN0c19jZmxhZ3MpIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlCiBQcm9ncmFtc191bml0dGVzdHNf
dGVzdGNvcHlhbmRwYXN0ZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxh
Z3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cKaW5kZXggOGRkM2RkOC4uN2IzOGMyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvcG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3BvL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsg
IDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lm
aWMgcGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBPVEZJTEVTLmluOiBBZGp1c3Qg
cGF0aHMgdG8gdmFyaW91cyBmaWxlcyB0aGF0IHdlcmUgbW92ZWQgdG8gU291cmNlL1BsYXRmb3Jt
L2d0ay4KKwogMjAxMy0wMi0xOSAgTWnImXUgTW9sZG92YW4gIDxkdW1vbEBnbm9tZS5vcmc+CiAK
ICAgICAgICAgUm9tYW5pYW4gdHJhbnNsYXRpb24gZm9yIFdlYktpdEd0aysgSEVBRApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2ViS2l0L2d0
ay9wby9QT1RGSUxFUy5pbgppbmRleCBiMTcwMDFhLi42YjJiOGNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9Q
T1RGSUxFUy5pbgpAQCAtMSw4ICsxLDggQEAKICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2gg
Y29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5ncy4KLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0Vycm9yc0d0ay5jcHAKLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3BwCi0uLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xv
Y2FsaXplZFN0cmluZ3NHdGsuY3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKKy4uLy4uL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsu
Y3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisuLi8u
Li9QbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5jcHAKIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNw
cAogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGUwNmMwMzIuLjk4MGZi
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0NCBAQAogMjAxMy0wMi0yMiAgWmFuIERvYmVyc2Vr
ICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCisgICAgICAgIFtHVEtdIE1vdmUgR1RLLXNwZWNp
ZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGZvcndhcmRpbmcgaGVhZGVy
IGdlbmVyYXRpb24gdG9vbCBtdXN0IG5vdyBhbHNvIHRha2UgdGhlIFBsYXRmb3JtIGZyYW1ld29y
ayBpbnRvCisgICAgICAgIGFjY291bnQgYXMgdGhhdCdzIHdoZXJlIHRoZSBHVEstc3BlY2lmaWMg
c291cmNlIGZpbGVzIGFyZSBwbGFjZWQgbm93LiBJbmNsdXNpb25zIG9mCisgICAgICAgIGhlYWRl
cnMgdGhhdCBhcmUgbm93IGxvY2F0ZWQgdGhlcmUgYXJlIGFkanVzdGVkIHRvIGluY2x1ZGUgZnJv
bSBQbGF0Zm9ybSBpbnN0ZWFkIG9mIFdlYkNvcmUuCisKKyAgICAgICAgKiBTY3JpcHRzL2dlbmVy
YXRlLWZvcndhcmRpbmctaGVhZGVycy5wbDoKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL2d0
ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwOgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJL
ZXlib2FyZEV2ZW50Lmg6CisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDoK
KyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oOgorICAgICAgICAqIFNoYXJl
ZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
Vmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29u
dGV4dE1lbnVQcm94eUd0ay5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JQcm94eUd0ay5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94
eUd0ay5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVn
aW5YMTEuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRy
YWdDbGllbnRHdGsuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UHJpbnRPcGVyYXRpb25HdGsuY3BwOgorCisyMDEzLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5k
b2JlcnNla0BnbWFpbC5jb20+CisKICAgICAgICAgW0dUS10gUmVtb3ZlIGxpYldlYkNvcmVQbGF0
Zm9ybS5sYSwgYnVpbGRpbmcgaXRzIHNvdXJjZXMgaW50byBsaWJQbGF0Zm9ybS5sYQogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJz
LnBsIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMu
cGwKaW5kZXggNzJjZjYzZi4uYjc4M2E1OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdDIvU2Ny
aXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKQEAgLTM2LDcgKzM2LDcgQEAg
dXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsKIG15ICRzcmNSb290ID0gcmVhbHBhdGgoRmlsZTo6
U3BlYy0+Y2F0ZmlsZShkaXJuYW1lKGFic19wYXRoKCQwKSksICIuLi8uLiIpKTsKIG15ICRpbmNG
cm9tUm9vdCA9IGFic19wYXRoKCRBUkdWWzBdKTsKIG15IEBwbGF0Zm9ybVByZWZpeGVzID0gKCJi
bGFja2JlcnJ5IiwgImNmIiwgImNocm9taXVtIiwgImN1cmwiLCAiZWZsIiwgImd0ayIsICJtYWMi
LCAicXQiLCAic291cCIsICJ2OCIsICJ3aW4iLCAid3giKTsKLW15IEBmcmFtZXdvcmtzID0gKCAi
SmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSIsICJXZWJLaXQyIik7CitteSBAZnJhbWV3b3JrcyA9
ICgiSmF2YVNjcmlwdENvcmUiLCAiUGxhdGZvcm0iLCAiV2ViQ29yZSIsICJXZWJLaXQyIik7CiBt
eSBAc2tpcHBlZFByZWZpeGVzOwogbXkgQGZyYW1ld29ya0hlYWRlcnM7CiBteSAkZnJhbWV3b3Jr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxv
YWRTb3VwRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3Rr
L0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKaW5kZXggMGQzZjlkMy4uOTZiOTFiYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJy
b3JzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3du
bG9hZFNvdXBFcnJvcnNHdGsuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3Jl
L0Vycm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0Vycm9yc0d0ay5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCmluZGV4IDk1
ZDc2YWIuLjU1YjFiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaApAQCAtMzYsOSArMzYsOSBAQCBPQkpDX0NMQVNTIE5TVmlldzsKICNlbGlm
IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFLZXlFdmVudD4KICNlbGlmIFBMQVRGT1JNKEdUSykK
LSNpbmNsdWRlIDxHT3duUHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblJl
c3VsdHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0lucHV0TWV0aG9kRmlsdGVyLmg+CisjaW5j
bHVkZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25SZXN1bHRzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0v
R093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a0lucHV0TWV0aG9kRmlsdGVyLmg+
CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKICNlbGlmIFBMQVRGT1JNKEVGTCkK
ICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0
aXZlV2ViTW91c2VFdmVudC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNl
RXZlbnQuaAppbmRleCBkZGU1YjM2Li5kNTg4ODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKQEAgLTM0LDcgKzM0LDcgQEAgT0JKQ19DTEFTUyBOU1Zp
ZXc7CiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxxZXZlbnQuaD4KICNlbGlmIFBMQVRG
T1JNKEdUSykKLSNpbmNsdWRlIDxHT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093
blB0ckd0ay5oPgogdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAjZWxpZiBQTEFU
Rk9STShFRkwpCiAjaW5jbHVkZSA8RXZhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRp
dmVXZWJXaGVlbEV2ZW50LmgKaW5kZXggZmFlOWU5Ni4uOTFlODBhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCkBAIC0zNCw3ICszNCw3IEBAIE9CSkNf
Q0xBU1MgTlNWaWV3OwogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8cWV2ZW50Lmg+CiAj
ZWxpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8R093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBs
YXRmb3JtL0dPd25QdHJHdGsuaD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50Owog
I2VsaWYgUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgPEV2YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKaW5kZXggMzk2OWUwYy4uMDg3ZTc5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5j
cHAKQEAgLTI5LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9y
bS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVmVyc2lvbmluZy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5o
CmluZGV4IDA4NTgxNWMuLjEyMzQyMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBXZWJFdmVudEZhY3Rv
cnlfaAogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0
aW9uUmVzdWx0cy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgog
CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IGJmNjE2MjQu
LjNiMTJjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5jcHAKQEAgLTM4LDkgKzM4LDkgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQb3B1cE1lbnVQcm94eUd0ay5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVudE5h
bWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKaW5kZXggOWZmMjE0ZS4uODQ3NDI2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIu
aCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZS5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oPgogI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKaW5kZXgg
ZThhNGRjNy4uNGUzM2EwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIldl
YktpdE1hcnNoYWwuaCIKICNpbmNsdWRlICJXZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYktpdFVSSVJlc3BvbnNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXJy
b3JzR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRXJyb3JzR3RrLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKaW5kZXggZGM0OGIxYy4uM2Q0YmE2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcApA
QCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIldlYktpdEVycm9yLmgiCiAKICNpbmNsdWRlICJX
ZWJLaXRQcml2YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRl
IDxQbGF0Zm9ybS9FcnJvcnNHdGsuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3Bl
cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50
T3BlcmF0aW9uLmNwcAppbmRleCAwNjhhMjhjLi5jYWU2YmYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3Bw
CkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3Rr
VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1
ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQu
Y3BwCmluZGV4IDBmMDkxNzUuLjQxMzlkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1By
b3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMu
aD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwCmluZGV4IDIzMjBlMWMuLmY3Y2IzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC01Niw5ICs1Niw5IEBA
CiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXaW5k
b3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3Qu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3du
UHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQ
bGF0Zm9ybS9EcmFnSWNvbi5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KKyNp
bmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0
ckNhaXJvLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggMjM0NGY4OS4uMDk5MDFmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcApAQCAtNDEsMTggKzQxLDE4IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViVmlld0Jh
c2VJbnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkR3RrLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRHdGsu
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaD4KKyNpbmNsdWRl
IDxQbGF0Zm9ybS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRHJhZ0ljb24u
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0v
R3RrQ2xpY2tDb3VudGVyLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0
Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vUGFzdGVib2FyZEhlbHBl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Ry
YWdJY29uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HdGtDbGlja0NvdW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0RyYWdBbmREcm9w
SGVscGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVk
ZSA8Z2RrL2dkay5oPgpAQCAtNjcsNyArNjcsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCi0jaW5jbHVkZSA8V2Vi
Q29yZS9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg+CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKaW5kZXggOGI4N2MxNS4uNDBh
NDA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmll
d0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAKQEAgLTIzLDggKzIzLDgg
QEAKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVk
ZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9FZGl0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAK
aW5kZXggN2U3ZWIwMS4uZDgwZDI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMjIsNyArMjIsNyBAQAog
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBs
YXRmb3JtL0dPd25QdHJHdGsuaD4KIAogV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKICAgICA6
IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92
aWV3X25ldygpKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YkNvbnRleHRNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAppbmRleCBlZDJiNGRmLi41YWRmMjU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94
eUd0ay5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1E
YXRhLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNs
dWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCmluZGV4IGViYTNjYWIuLjlmY2Ix
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRl
IDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
UG9wdXBNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
b3B1cE1lbnVQcm94eUd0ay5jcHAKaW5kZXggYTQxODM5YS4uNzlkMDE4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAK
QEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJXZWJQb3B1cEl0ZW0uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5o
PgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPGd0ay9ndGsu
aD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
b3B1cE1lbnVQcm94eUd0ay5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1
cE1lbnVQcm94eUd0ay5oCmluZGV4IDRiMzM1YmMuLmUxNjc1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmgKQEAgLTIxLDcg
KzIxLDcgQEAKICNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlHdGtfaAogCiAjaW5jbHVkZSAiV2Vi
UG9wdXBNZW51UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1BvcHVwTWVudS5oPgorI2lu
Y2x1ZGUgPFBsYXRmb3JtL0d0a1BvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdp
blgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDEx
L05ldHNjYXBlUGx1Z2luWDExLmNwcAppbmRleCBhMTg0Njg3Li45M2QzNDZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBl
UGx1Z2luWDExLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcApAQCAtNDEsOCArNDEsOCBAQAogI2lmbmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgogI2luY2x1ZGUgPGd0ay9ndGt4Lmg+CiAjZW5kaWYKKyNpbmNs
dWRlIDxQbGF0Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8Z2RrL2dka3guaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkgJiYg
ZGVmaW5lZChIQVZFX0VDT1JFX1gpCiAjaW5jbHVkZSA8RWNvcmVfWC5oPgogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJE
cmFnQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCmluZGV4IGQ4MDhlZDQuLjY2ODhhODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRy
YWdDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4K
KyNpbmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Ry
YWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9y
Q2xpZW50R3RrLmNwcAppbmRleCA2N2ZkYzFmLi44OTJhYzFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dl
YkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNsdWRlICJXZWJQYWdl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxh
dGZvcm0vRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL1Bhc3RlYm9hcmRIZWxw
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXlib2Fy
ZENvZGVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0
ay5jcHAKaW5kZXggODM3NWQwNi4uNWQwNWExNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3Bw
CkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRXJy
b3JzLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRm
b3JtL0Vycm9yc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCA4YjBkYjZlLi4zNjQ4N2IzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAK
QEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXaW5kb3dz
S2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL1Bhc3RlYm9hcmRIZWxwZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0
aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJp
bnRPcGVyYXRpb25HdGsuY3BwCmluZGV4IDBmMDdkNzQuLjYxYWVlNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRP
cGVyYXRpb25HdGsuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94
eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQ
bGF0Zm9ybS9FcnJvcnNHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bUNvbnRleHRDYWlyby5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGY3MTMyOWMuLjY5Y2RlNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOSBAQAogMjAxMy0wMi0yMiAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCisgICAgICAgIFtHVEtdIE1vdmUg
R1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbTogQWRqdXN0IHBhdGhzIHRvIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRoYXQgYXJlIG5vdyBs
b2NhdGVkIGluIFNvdXJjZS9QbGF0Zm9ybS4KKyAgICAgICAgQWxzbyBmaXggYW4gaW5kZW50YXRp
b24gcHJvYmxlbS4gQWxzbyBsaW5rIER1bXBSZW5kZXJUcmVlIGFnYWluc3QgdGhlIGxpYlBsYXRm
b3JtIGxpYnJhcnkuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbTogQWRq
dXN0IHBhdGhzIHRvIGZpbGVzIHRoYXQgYXJlIG5vdyBsb2NhdGVkIGluIFNvdXJjZS9QbGF0Zm9y
bS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwOiBJ
bmNsdWRlIHRoZSBHT3duUHRyR3RrIGhlYWRlciB0aHJvdWdoIGEgZm9yd2FyZGluZworICAgICAg
ICBoZWFkZXIgdGhhdCdzIG5vdyBwb2ludGluZyBpbnRvIFNvdXJjZS9QbGF0Zm9ybS9ndGsuCisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbTogUmVwbGFjZSB0aGUgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIHJlZmVyZW5jZSB3aXRoIFNvdXJjZS9QbGF0Zm9ybS9n
dGsuCisKKzIwMTMtMDItMjIgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4K
KwogICAgICAgICBbR1RLXSBSZW1vdmUgbGliV2ViQ29yZVBsYXRmb3JtLmxhLCBidWlsZGluZyBp
dHMgc291cmNlcyBpbnRvIGxpYlBsYXRmb3JtLmxhCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1NzkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFr
ZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCA4NTNiMzg3Li5lZTM5YmNkIDEw
MDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5h
bQpAQCAtMTA5LDggKzEwOSw4IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZMQUdTID0g
XAogCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ayBcCiAJLUkkKHNyY2Rpcikv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ayBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYktpdC9ndGsgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcyBcCiAJ
LUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1Nv
dXJjZS9XZWJLaXQvZ3RrIFwKQEAgLTEyNCw2ICsxMjQsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVy
VHJlZV9DUFBGTEFHUyArPSBcCiBlbmRpZgogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VS
Q0VTID0gXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIFwKIAlUb29scy9E
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlUHJlZml4LmggXApAQCAtMTQ4LDcgKzE0OSw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJU
cmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY29uZmlnLmggXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggXAogCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcCBcCi0gICAgCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAor
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAg
XAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNw
cCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNw
cCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmgg
XApAQCAtMTY3LDggKzE2OCw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBc
CiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3Lmgg
XAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmggXAogCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBcCi0JVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L1dvcmtRdWV1ZUl0ZW1HdGsuY3BwCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NYWEZMQUdT
ID0gXAogCSQoZ2xvYmFsX2N4eGZsYWdzKSBcCkBAIC0xODUsNiArMTg1LDcgQEAgUHJvZ3JhbXNf
RHVtcFJlbmRlclRyZWVfQ0ZMQUdTID0gXAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfTERBREQg
PSBcCiAJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAu
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAogCWxpYndlYmtpdGd0ay1AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBc
CisJbGliUGxhdGZvcm0ubGEgXAogCWxpYldlYkNvcmVNb2R1bGVzLmxhIFwKIAlsaWJXZWJDb3Jl
SW50ZXJuYWxzLmxhIFwKIAkkKEdMT0JBTERFUFNfTElCUykgXApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFr
ZWZpbGUuYW0KaW5kZXggNGY1ZGZjYS4uMTZlOGIwNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1ha2Vm
aWxlLmFtCkBAIC05MiwxMCArOTIsMTAgQEAgUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3Rr
X0xERkxBR1MgPSBcCiAJJChQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RXVEZfTERGTEFHUykK
IAogUHJvZ3JhbXNfVGVzdFdlYktpdEFQSV9UZXN0R3RrX1NPVVJDRVMgPSBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbnRSZWN0Q2Fpcm8uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW50UmVjdEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJ
bnB1dE1ldGhvZEZpbHRlci5jcHAgXAogCVRvb2xzL1Rlc3RXZWJLaXRBUEkvY29uZmlnLmggXAog
CVRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcAppbmRleCBi
YTZmYWIwLi4xMzk2ZGE5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0
Zm9ybVdlYlZpZXdHdGsuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3Jt
V2ViVmlld0d0ay5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvR093blB0ckd0
ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KICNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9HTlVtYWtlZmlsZS5hbQppbmRleCAxODEyNTY5Li5mMWZiMzA4IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvR05VbWFrZWZpbGUuYW0KQEAgLTM4LDcgKzM4LDcgQEAgUHJvZ3JhbXNfV2ViS2l0VGVz
dFJ1bm5lcl9TT1VSQ0VTID0gXAogUHJvZ3JhbXNfV2ViS2l0VGVzdFJ1bm5lcl9DUFBGTEFHUyA9
IFwKIAktaW5jbHVkZSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXJQcmVm
aXguaCBcCiAJLUkkKHNyY2RpcikvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lciBcCi0JLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2lu
Y2x1ZGUgXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFn
cykgXApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDVlY2Y4
MmQuLmUyZTQ1OWQgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMK
QEAgLTM3LDcgKzM3LDcgQEAgbTRfaW5jbHVkZShbU291cmNlL2F1dG90b29scy9TZXR1cEF1dG9t
YWtlLm00XSkKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIEFDX0NPTkZJR19GSUxF
UyhbR05VbWFrZWZpbGVdKQotQUNfQ09ORklHX0ZJTEVTKFtEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L1VzZXJBZ2VudEd0ay5oOlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsu
aC5pbl0pCitBQ19DT05GSUdfRklMRVMoW0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvVXNlckFnZW50
R3RrLmg6U291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaC5pbl0pCiBBQ19DT05GSUdf
RklMRVMoCiAgICAgW1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0ay0ke1dF
QktJVEdUS19BUElfVkVSU0lPTn0ucGM6U291cmNlL0phdmFTY3JpcHRDb3JlL2phdmFzY3JpcHRj
b3JlZ3RrLnBjLmluCiAgICAgICAgIFNvdXJjZS9XZWJLaXQvZ3RrL0pTQ29yZS0ke1dFQktJVEdU
S19BUElfVkVSU0lPTn0uZ2lyOlNvdXJjZS9XZWJLaXQvZ3RrL0pTQ29yZS5naXIuaW5dLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189979</attachid>
            <date>2013-02-24 10:49:37 -0800</date>
            <delta_ts>2013-02-24 11:40:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110330-20130224194552.patch</filename>
            <type>text/plain</type>
            <size>1262256</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBkNGFjNWYyOWI2MWNk
Yjc1ZGVkNjVhN2E0YzBlMjM1N2FiNjNkMTEyLi41ZDgyYTgwMDk5M2E5NjA4ZWMxNGU2ZDkzZjU3
MjFjNzYwM2Y2N2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNSBAQAogMjAxMy0wMi0yNCAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dUS10gTW92
ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEdUSy1z
cGVjaWZpYyBXZWJDb3JlIHNvdXJjZSBmaWxlcyBoZXJlLCBpbnRvIFNvdXJjZS9QbGF0Zm9ybS9n
dGsuIFRoZXNlIGZpbGVzCisgICAgICAgIGFyZSBidWlsdCBpbnRvIHRoZSBsaWJQbGF0Zm9ybSBz
dGF0aWMgbGlicmFyeS4gTm90ZSB0aGF0IHRoaXMgcGF0Y2ggb25seSBicmluZ3MgdGhlCisgICAg
ICAgIEdUSy1zcGVjaWZpYyBmaWxlcyBvdmVyIGZyb20gV2ViQ29yZSBpbnRvIFBsYXRmb3JtLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEluY2x1ZGUgdGhlIEdOVW1ha2VmaWxlLmxpc3Qu
YW0gZmlsZS4gQWRkIHRoZSBuZXcgc3ViZGlyZWN0b3JpZXMgdG8KKyAgICAgICAgdGhlIHBsYXRm
b3JtIGxpYnJhcnkgY3BwZmxhZ3MuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRk
ZWQuIExpc3RzIGFsbCB0aGUgYnVpbGQgdGFyZ2V0cyB0aGF0IGFyZSBub3cgdW5kZXIgU291cmNl
L1BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBndGsvOiBOb3cgY29udGFpbnMgYWxsIHRoZSBmaWxl
cyB0aGF0IHdlcmUgcHJldmlvdXNseSB1bmRlciBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsu
CisgICAgICAgICogZ3RrL2F1ZGlvLzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgdGhhdCB3
ZXJlIHByZXZpb3VzbHkgdW5kZXIgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrLgor
ICAgICAgICAqIGd0ay9ncmFwaGljcy86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRoYXQg
d2VyZSBwcmV2aW91c2x5IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay4KKyAgICAgICAgKiBndGsvbmV0d29yay86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRo
YXQgd2VyZSBwcmV2aW91c2x5IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Z3RrLgorICAgICAgICAqIGd0ay90ZXh0LzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgdGhh
dCB3ZXJlIHByZXZpb3VzbHkgdW5kZXIgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsu
CisKKzIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVQbGF0Zm9ybS5sYSBhcyBsaWJQbGF0Zm9ybS5s
YSwgbGliV2ViQ29yZUd0ay5sYSBhcyBsaWJQbGF0Zm9ybUd0ay5sYQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAx
NDFiMDEwMzFiZDk3YzM4NzdlZDIxYzFmNzRmMDYxY2VjZjQxYmUzLi5kODA1ZTU0YmM3MTMwZWJk
NmNiODZmODlhYTVhNmY2MWQ2ZWNmM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIw
MTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCisgICAgICAg
IFtHVEtdIE1vdmUgR1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQ
bGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIC0gbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbTogUmVtb3ZlIGRpcmVjdG9yaWVzIGZyb20gdmFyaW91cyBjcHBmbGFncyBsaXN0aW5n
cyB0aGF0IGFyZSBub3cgZW1wdHkuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogUmVt
b3ZlIGJ1aWxkIHRhcmdldHMgZm9yIHNvdXJjZSBmaWxlcyB0aGF0IHdlcmUgbW92ZWQgdG8gU291
cmNlL1BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvOiBNb3ZlZCBhbGwgdGhl
IHNvdXJjZSBmaWxlcyB0byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL2d0ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRvIFNvdXJjZS9QbGF0Zm9y
bS9ndGsvYXVkaW8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrLzogTW92ZWQgYWxs
IHRoZSBzb3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2d0ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRv
IFNvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0
ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRvIFNvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4
dC4KKworMjAxMy0wMi0yNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisK
ICAgICAgICAgW0dUS10gQnVpbGQgbGliV2ViQ29yZVBsYXRmb3JtLmxhIGFzIGxpYlBsYXRmb3Jt
LmxhLCBsaWJXZWJDb3JlR3RrLmxhIGFzIGxpYlBsYXRmb3JtR3RrLmxhCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1NzkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CmluZGV4IDQ3N2M1ZDg0ZjhlNzgzNDI3Yzk1YTRmMTVkOTgzY2ZjY2FiODA5MDQuLmNhN2JmMDZj
Mzg0MmRkY2UyNWYyMDU5MWQyYjU5Mzk0YzkyOTI4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNSBAQAogMjAxMy0wMi0yNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CiAKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJv
bSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGp1c3QgdGhlIHBhdGggdG8gdGhlIEd0
a1ZlcnNpb25pbmcuYyBzb3VyY2UgZmlsZS4gUmVtb3ZlIGFuIHVubmVjZXNzYXJ5CisgICAgICAg
IHJlZmVyZW5jZSB0byB0aGUgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIGRpcmVjdG9yeSB3
aGljaCBpcyBub3cgZW1wdHkuCisKKzIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNl
a0BpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVQbGF0Zm9ybS5s
YSBhcyBsaWJQbGF0Zm9ybS5sYSwgbGliV2ViQ29yZUd0ay5sYSBhcyBsaWJQbGF0Zm9ybUd0ay5s
YQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZwppbmRleCA4ZGQzZGQ4YTEwYjZlZTdmYmYwOWEyZWExNmFi
MmQ0ZTU2YWEwZTM4Li5jMTQyMzAxYWFlNTgzMzE2NTQ5YzQ1ZjhjMGIxZTE2NGU5ODUzMGVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvcG8vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMDItMjQgIFphbiBE
b2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR1RL
LXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjog
QWRqdXN0IHBhdGhzIHRvIHZhcmlvdXMgZmlsZXMgdGhhdCB3ZXJlIG1vdmVkIHRvIFNvdXJjZS9Q
bGF0Zm9ybS9ndGsuCisKIDIwMTMtMDItMTkgIE1pyJl1IE1vbGRvdmFuICA8ZHVtb2xAZ25vbWUu
b3JnPgogCiAgICAgICAgIFJvbWFuaWFuIHRyYW5zbGF0aW9uIGZvciBXZWJLaXRHdGsrIEhFQUQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkZGQ2OGM0MzkwODBiMzI1ZDMxMTY1ZTQ5YTYzMTI1Mzk4NzA3MTY2Li4w
Nzc4ZDI2MmEzMjJjOWRmYWU4NmQ1NzcwMWY2MWNhZjFiMDI5NTA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsNDUgQEAKIDIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEu
Y29tPgogCisgICAgICAgIFtHVEtdIE1vdmUgR1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZy
b20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhlIGZvcndhcmRpbmcgaGVhZGVyIGdlbmVyYXRpb24gdG9vbCBtdXN0
IG5vdyBhbHNvIHRha2UgdGhlIFBsYXRmb3JtIGZyYW1ld29yayBpbnRvCisgICAgICAgIGFjY291
bnQgYXMgdGhhdCdzIHdoZXJlIHRoZSBHVEstc3BlY2lmaWMgc291cmNlIGZpbGVzIGFyZSBwbGFj
ZWQgbm93LiBJbmNsdXNpb25zIG9mCisgICAgICAgIGhlYWRlcnMgdGhhdCBhcmUgbm93IGxvY2F0
ZWQgdGhlcmUgYXJlIGFkanVzdGVkIHRvIGluY2x1ZGUgZnJvbSBQbGF0Zm9ybSBpbnN0ZWFkIG9m
IFdlYkNvcmUuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGdhbWVwYWQgZGVwZW5k
ZW5jeSBDRkxBR1MgdG8gdGhlIGxpc3Qgb2YgQ1BQRkxBR1MgdGhlIGxpYlBsYXRmb3JtR3RrMi5s
YSBidWlsZHMgd2l0aC4KKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVh
ZGVycy5wbDoKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJv
cnNHdGsuY3BwOgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmg6Cisg
ICAgICAgICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQv
TmF0aXZlV2ViV2hlZWxFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2Rl
cnNHdGsuY3BwOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhv
ZEZpbHRlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5j
cHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0
ay5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3Jz
R3RrLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsu
Y3BwOgorCisyMDEzLTAyLTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4K
KwogICAgICAgICBbR1RLXSBCdWlsZCBsaWJXZWJDb3JlUGxhdGZvcm0ubGEgYXMgbGliUGxhdGZv
cm0ubGEsIGxpYldlYkNvcmVHdGsubGEgYXMgbGliUGxhdGZvcm1HdGsubGEKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDU3OQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFr
ZWZpbGUuYW0KaW5kZXggNGZkOTYzYmMzYWRjMDlkNzc2MTE0MTRhMzFiMWY4ODUxNzk3Yjc1OC4u
MzI2MWRlOWNmMjAyNTYyNjBlOGZmODRhNDRjN2ZjOTFjNjRmMzk1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtl
ZmlsZS5hbQpAQCAtNCw2ICs0LDE1IEBACiAjIGFuZCB0aGUgb3RoZXIgKG5hbWVkIGxpYlBsYXRm
b3JtR3RrMi5sYSkgdXNpbmcgR1RLMi4gVGhlIGxhdHRlciBpcyByZXF1aXJlZCBieSB0aGUKICMg
V2ViS2l0UGx1Z2luUHJvY2VzcyBpbiBXZWJLaXQyIGFzIHNvbWUgcGx1Z2lucyAoc3VjaCBhcyBG
bGFzaCkgc3RpbGwgdXNlIEdUSzIuCiAKK2luY2x1ZGUgJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9y
bS9HTlVtYWtlZmlsZS5saXN0LmFtCisKK3BsYXRmb3JtX2NwcGZsYWdzICs9IFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL2F1ZGlvIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzIFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsgXAorCS1JJChzcmNkaXIp
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4dAorCiBub2luc3RfTFRMSUJSQVJJRVMgKz0gXAogCWxp
YlBsYXRmb3JtLmxhIFwKIAlsaWJQbGF0Zm9ybUd0ay5sYQpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUu
bGlzdC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MjBlMmExZmI0NmU5N2ZiYTNjODcxMjU2ZGVjNDAyNmU2MzY2
YjcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTAsMCArMSwxMDUgQEAKK3BsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNH
dGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VH
dGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIFwK
KwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRl
eHRNZW51R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsu
Y3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvQ3Vyc29yR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EcmFn
SWNvbi5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0V2ZW50
TG9vcEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BI
ZWxwZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a1V0aWxpdGllcy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9H
UmVmUHRyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQbHVn
aW5XaWRnZXQuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1ZlcnNpb25pbmcuYyBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTWFp
bkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJhbWVT
Y3JvbGxiYXJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUGxh
dGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9y
bU1vdXNlRXZlbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVu
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0
Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBcCisJU291cmNlL1BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BH
dGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGszLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3Rr
LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Tb3VuZEd0
ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBcCisJU291cmNlL1BsYXRmb3Jt
L2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvYXVk
aW8vQXVkaW9CdXNHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0NvbG9y
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGll
cy5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMu
aCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0
ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0
d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9u
ZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCisKK2lmIFRBUkdFVF9YMTEK
K3BsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0
QmFja2luZ1N0b3JlWDExLmNwcAoraWYgVVNFX09QRU5HTAorcGxhdGZvcm1ndGtfc291cmNlcyAr
PSBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorZW5k
aWYgIyBFTkQgVVNFX09QRU5HTAorZW5kaWYgIyBFTkQgVEFSR0VUX1gxMQpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwZmJkYTA4NzM0MGMw
YmY2MWIxZGIxZDc3MGM4OWM3ZWQ4MzAyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUd0ay5oIgorCisjaW5j
bHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW0+IEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEFzeW5jRmlsZVN5c3RlbUd0aygpKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW06Om9wZW5G
aWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlk
ZW50aWZpZXIsIEZpbGVTeXN0ZW1UeXBlLCBib29sLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2Fs
bGJhY2tzLT5kaWRGYWlsKE5PVF9TVVBQT1JURURfRVJSKTsKK30KKwordm9pZCBBc3luY0ZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3Ry
aW5nJiBzdG9yYWdlSWRlbnRpZmllciwgRmlsZVN5c3RlbVR5cGUgdHlwZSwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIGNhbGxiYWNrcy0+ZGlkRmFpbChOT1RfU1VQUE9SVEVEX0VSUik7Cit9CisKK0Fz
eW5jRmlsZVN5c3RlbUd0azo6QXN5bmNGaWxlU3lzdGVtR3RrKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitBc3luY0ZpbGVTeXN0ZW1HdGs6On5Bc3luY0ZpbGVTeXN0ZW1HdGsoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpt
b3ZlKGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y29weShjb25z
dCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlbW92ZShjb25zdCBLVVJM
JiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpy
ZW1vdmVSZWN1cnNpdmVseShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlRmls
ZShjb25zdCBLVVJMJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBh
dGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxl
U3lzdGVtR3RrOjpmaWxlRXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmRpcmVjdG9yeUV4aXN0cyhjb25zdCBLVVJM
JiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpy
ZWFkRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2
b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVu
dCogY2xpZW50LCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVT
eXN0ZW1HdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWY1NzM3MDgxY2E2ODRmMDExMzIxYzc1YmE4ZGZlNWRh
NjU1YzcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVT
eXN0ZW1HdGsuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENo
YW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor
CisjaWZuZGVmICBBc3luY0ZpbGVTeXN0ZW1HdGtfaAorI2RlZmluZSAgQXN5bmNGaWxlU3lzdGVt
R3RrX2gKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5
c3RlbS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOworCitjbGFzcyBBc3luY0ZpbGVT
eXN0ZW1HdGsgOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtIHsKK3B1YmxpYzoKKyAgICBBc3luY0Zp
bGVTeXN0ZW1HdGsoKTsKKyAgICB2aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1HdGsoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBtb3ZlKGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRl
c3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBk
ZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVSZWN1cnNpdmVs
eShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
OworICAgIHZpcnR1YWwgdm9pZCByZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
RmlsZShjb25zdCBLVVJMJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRGlyZWN0b3J5KGNv
bnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBmaWxlRXhpc3RzKGNvbnN0IEtVUkwmIHBh
dGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2
b2lkIGRpcmVjdG9yeUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0
IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqLCBjb25zdCBL
VVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vICBBc3luY0ZpbGVT
eXN0ZW1HdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
Y3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2
M2I2Y2Y4ZjJlZGM1OTk4ZjE1YTAxYWViYzU3MjJlMzU5NjY0NGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKQEAgLTAsMCArMSwzMzggQEAK
Ky8qCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbGlwYm9hcmRHdGsuaCIKKworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBl
ci5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gQ2xpcGJvYXJkRGF0YVR5cGUgewor
ICAgIENsaXBib2FyZERhdGFUeXBlVGV4dCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCwK
KyAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVVUkws
CisgICAgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZSwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVua25v
d24KK307CisKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9h
cmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQoreworICAgIHJl
dHVybiBDbGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9k
aXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJE
KSwgZnJhbWUpOworfQorCitQYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUo
Q2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSog
ZnJhbWUpCit7CisgICAgcmV0dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0Rh
dGEtPnBsYXRmb3JtRGF0YSgpLCBEcmFnQW5kRHJvcCwgZnJhbWUpOworfQorCitDbGlwYm9hcmRH
dGs6OkNsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29w
eUFuZFBhc3RlKQorICAgICwgbV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2Fy
ZChjbGlwYm9hcmQpKQorICAgICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQorICAgICwgbV9mcmFt
ZShmcmFtZSkKK3sKK30KKworQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5IHBvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBD
bGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKKyAgICA6IENsaXBib2Fy
ZChwb2xpY3ksIGNsaXBib2FyZFR5cGUpCisgICAgLCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkK
KyAgICAsIG1fY2xpcGJvYXJkKDApCisgICAgLCBtX2ZyYW1lKGZyYW1lKQoreworfQorCitDbGlw
Ym9hcmRHdGs6On5DbGlwYm9hcmRHdGsoKQoreworICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAg
ICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKK30KKworc3RhdGljIENsaXBib2Fy
ZERhdGFUeXBlIGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmlu
ZyYgcmF3VHlwZSkKK3sKKyAgICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgp
KTsKKworICAgIC8vIFR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5CisgICAg
aWYgKHR5cGUgPT0gIlRleHQiIHx8IHR5cGUgPT0gInRleHQiKQorICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVUZXh0OworICAgIGlmICh0eXBlID09ICJVUkwiKQorICAgICAgICByZXR1
cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7CisKKyAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdu
b3JlIGFueSB0cmFpbGluZyBjaGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKKyAgICAvLyBVbmljb2Rl
LCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCisgICAgaWYgKHR5cGUgPT0g
InRleHQvcGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKKyAgICAgICAg
cmV0dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dDsKKyAgICBpZiAodHlwZSA9PSAidGV4dC9odG1s
IiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRtbDsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBi
b2FyZERhdGFUeXBlTWFya3VwOworICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAi
dGV4dC91cmktbGlzdCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQorICAg
ICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OworCisgICAgLy8gTm90IGEga25v
d24gdHlwZSwgc28ganVzdCBkZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCisgICAg
cmV0dXJuIENsaXBib2FyZERhdGFUeXBlVW5rbm93bjsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6
OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCit7CisgICAgaWYgKHBvbGljeSgp
ICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBDbGlwYm9hcmRE
YXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0
cmluZyk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
SUxpc3Q6CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKKyAgICAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhclVSSUxpc3QoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9hcmRE
YXRhVHlwZU1hcmt1cDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhck1hcmt1cCgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVGV4dDoKKyAgICAgICAgbV9k
YXRhT2JqZWN0LT5jbGVhclRleHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZUltYWdlOgorICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFySW1hZ2UoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246CisgICAgICAg
IG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKK30KKwor
Cit2b2lkIENsaXBib2FyZEd0azo6Y2xlYXJBbGxEYXRhKCkKK3sKKyAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvIG5v
dCBjbGVhciBmaWxlbmFtZXMuIEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEo
KSBtZXRob2QKKyAgICAvLyBkb2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBp
bmNsdWRlZCBpbiB0aGUgZHJhZywgc28gdGhlIHR5cGVzCisgICAgLy8gYXR0cmlidXRlJ3MgbGlz
dCBtaWdodCBzdGlsbCBub3QgYmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQg
d291bGQgCisgICAgLy8gc3RpbGwgY29udGFpbiB0aGUgIkZpbGVzIiBzdHJpbmcgaWYgYW55IGZp
bGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcpLiIKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFy
QWxsRXhjZXB0RmlsZW5hbWVzKCk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJk
Q29udGVudHMobV9jbGlwYm9hcmQpOworfQorCitTdHJpbmcgQ2xpcGJvYXJkR3RrOjpnZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2Fy
ZCk7CisKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRN
TENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7CisgICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0
YVR5cGVVUklMaXN0KQorICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7Cisg
ICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpCisgICAgICAgIHJldHVybiBtX2Rh
dGFPYmplY3QtPnVybCgpOworICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlTWFya3Vw
KQorICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5tYXJrdXAoKTsKKyAgICBpZiAodHlwZSA9
PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpCisgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRl
eHQoKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBDbGlwYm9hcmRHdGs6OnNl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7Cisg
ICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0
eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Cisg
ICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJv
YXJkRGF0YVR5cGVVUkwpIHsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEp
OworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJv
YXJkRGF0YVR5cGVNYXJrdXApIHsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0
YSk7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlw
Ym9hcmREYXRhVHlwZVRleHQpIHsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEp
OworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsK
K30KKworTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKK3sK
KyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xp
cGJvYXJkVHlwZXNSZWFkYWJsZSkKKyAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4o
KTsKKworICAgIGlmIChtX2NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVm
YXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQp
OworCisgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAgICBpZiAobV9kYXRhT2JqZWN0
LT5oYXNUZXh0KCkpIHsKKyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAg
IHR5cGVzLmFkZCgiVGV4dCIpOworICAgICAgICB0eXBlcy5hZGQoInRleHQiKTsKKyAgICB9CisK
KyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKKyAgICAgICAgdHlwZXMuYWRkKCJ0
ZXh0L2h0bWwiKTsKKworICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgeworICAg
ICAgICB0eXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgdHlwZXMuYWRkKCJVUkwi
KTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMoKSkKKyAgICAg
ICAgdHlwZXMuYWRkKCJGaWxlcyIpOworCisgICAgcmV0dXJuIHR5cGVzOworfQorCitQYXNzUmVm
UHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRHdGs6OmZpbGVzKCkgY29uc3QKK3sKKyAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCisgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3Jl
YXRlKCk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJv
YXJkKTsKKworICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRl
KCk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+
ZmlsZW5hbWVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgp
OyBpKyspCisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lc1tp
XSwgRmlsZTo6QWxsQ29udGVudFR5cGVzKSk7CisgICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2Uo
KTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1h
Z2UsIGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICBzZXREcmFnSW1hZ2UoaW1hZ2Us
IDAsIGxvY2F0aW9uKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZUVsZW1l
bnQoTm9kZSogZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIHNldERy
YWdJbWFnZSgwLCBlbGVtZW50LCBsb2NhdGlvbik7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjpz
ZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBOb2RlKiBlbGVtZW50LCBjb25zdCBJbnRQ
b2ludCYgbG9jYXRpb24pCit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZEltYWdlV3Jp
dGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAgICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVu
dCh0aGlzKTsKKyAgICBtX2RyYWdJbWFnZSA9IGltYWdlOworICAgIGlmIChtX2RyYWdJbWFnZSkK
KyAgICAgICAgbV9kcmFnSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKKworICAgIG1fZHJhZ0xvYyA9
IGxvY2F0aW9uOworICAgIG1fZHJhZ0ltYWdlRWxlbWVudCA9IGVsZW1lbnQ7Cit9CisKK0RyYWdJ
bWFnZVJlZiBDbGlwYm9hcmRHdGs6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgbG9jYXRpb24p
IGNvbnN0Cit7CisgICAgbG9jYXRpb24gPSBtX2RyYWdMb2M7CisKKyAgICBpZiAobV9kcmFnSW1h
Z2UpCisgICAgICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2Ut
PmltYWdlKCkpOworICAgIGlmIChtX2RyYWdJbWFnZUVsZW1lbnQgJiYgbV9mcmFtZSkKKyAgICAg
ICAgcmV0dXJuIG1fZnJhbWUtPm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOwor
CisgICAgcmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBj
cmVhdGUgYSBkcmFnIGltYWdlLCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KK30KKworc3RhdGljIENh
Y2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIEF0
dGVtcHQgdG8gcHVsbCBDYWNoZWRJbWFnZSBmcm9tIGVsZW1lbnQKKyAgICBBU1NFUlQoZWxlbWVu
dCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+
KHJlbmRlcmVyKTsKKyAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNo
ZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIENsaXBib2FyZEd0azo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqIGZyYW1lKQoreworICAgIG1fZGF0YU9iamVjdC0+c2V0
VVJMKHVybCwgbGFiZWwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1
cChlbGVtZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKKworICAgIENhY2hl
ZEltYWdlKiBpbWFnZSA9IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOworICAgIGlmICghaW1hZ2Ug
fHwgIWltYWdlLT5pc0xvYWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdk
a1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1l
bnQtPnJlbmRlcmVyKCkpLT5nZXRHZGtQaXhidWYoKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsK
K30KKwordm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBsYWJlbCwgRnJhbWUqKQoreworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwg
bGFiZWwpOworICAgIGlmIChtX2NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBi
b2FyZCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjp3cml0ZVJhbmdlKFJhbmdlKiByYW5nZSwg
RnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVChyYW5nZSk7CisKKyAgICBtX2RhdGFPYmplY3Qt
PnNldFRleHQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKSk7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOworCisgICAgaWYgKG1fY2xpcGJvYXJk
KQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKK30KKwordm9pZCBDbGlwYm9hcmRH
dGs6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBtX2RhdGFPYmpl
Y3QtPnNldFRleHQodGV4dCk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29u
dGVudHMobV9jbGlwYm9hcmQpOworfQorCitib29sIENsaXBib2FyZEd0azo6aGFzRGF0YSgpCit7
CisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CisK
KyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNN
YXJrdXAoKQorICAgICAgICB8fCBtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSB8fCBtX2RhdGFP
YmplY3QtPmhhc0ltYWdlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvQ2xpcGJvYXJkR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVlOWQ2M2NlNGYyY2U4YmMxMTJkMGYyMDkzZWU1ODgzOTMyMjhlMzUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2xpcGJvYXJkR3RrX2gKKyNkZWZpbmUg
Q2xpcGJvYXJkR3RrX2gKKworI2luY2x1ZGUgIkNhY2hlZEltYWdlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgY2xhc3MgQ2FjaGVkSW1hZ2U7CisgICAgY2xhc3MgRnJhbWU7CisgICAg
Y2xhc3MgUGFzdGVib2FyZEhlbHBlcjsKKworICAgIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcg
SUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKKyAgICAvLyBDcmVh
dGVkIGZyb20gdGhlIEV2ZW50SGFuZGxlckd0ayB0byBiZSB1c2VkIGJ5IHRoZSBkb20KKyAgICBj
bGFzcyBDbGlwYm9hcmRHdGsgOiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VD
bGllbnQgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZEd0az4gY3JlYXRlKENsaXBib2FyZEFj
Y2Vzc1BvbGljeSBwb2xpY3ksIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkR3Rr
KHBvbGljeSwgY2xpcGJvYXJkLCBmcmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBl
IGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRHdGsocG9saWN5LCBkYXRhT2JqZWN0LCBjbGlwYm9h
cmRUeXBlLCBmcmFtZSkpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfkNsaXBib2FyZEd0
aygpOworCisgICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2
b2lkIGNsZWFyQWxsRGF0YSgpOworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcm
KSBjb25zdDsKKyAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpOworCisgICAgICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CisK
KyAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYp
OworICAgICAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBvaW50
Jik7CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgTm9kZSosIGNvbnN0
IEludFBvaW50Jik7CisKKyAgICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlKEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSop
OworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJh
bWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYp
OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CisKKyAgICAgICAgUGFzc1JlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0KCkgeyByZXR1cm4gbV9kYXRhT2JqZWN0OyB9Cisg
ICAgICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKCkgeyByZXR1cm4gbV9jbGlwYm9hcmQ7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIENsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xp
Y3ksIEd0a0NsaXBib2FyZCosIEZyYW1lKik7CisgICAgICAgIENsaXBib2FyZEd0ayhDbGlwYm9h
cmRBY2Nlc3NQb2xpY3ksIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4sIENsaXBib2FyZFR5cGUs
IEZyYW1lKik7CisKKyAgICAgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IG1fZGF0YU9iamVjdDsK
KyAgICAgICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZDsKKyAgICAgICAgRnJhbWUqIG1fZnJh
bWU7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZFV0aWxpdGllc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZjMGU3NDQ2ZTBlZWRlMTI1YjEwY2E0YTgy
ZTY5YTdmNjVhMjU1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xp
cGJvYXJkVXRpbGl0aWVzR3RrLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2Rr
RHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbiBjb3JlQWN0aW9uKQoreworICAgIEdka0RyYWdBY3Rp
b24gZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7CisgICAgaWYgKGNv
cmVBY3Rpb24gPT0gRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAgIHJldHVybiBnZGtBY3Rpb247
CisKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICBnZGtB
Y3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBnZGtB
Y3Rpb24pOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAgICAg
IGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTU9WRSB8
IGdka0FjdGlvbik7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAg
ICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9M
SU5LIHwgZ2RrQWN0aW9uKTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2
YXRlKQorICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtf
QUNUSU9OX1BSSVZBVEUgfCBnZGtBY3Rpb24pOworCisgICAgcmV0dXJuIGdka0FjdGlvbjsKK30K
KworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdP
cGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0
aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICByZXR1
cm4gR0RLX0FDVElPTl9DT1BZOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1v
dmUpCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7CisgICAgaWYgKGNvcmVBY3Rpb24g
JiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKKyAg
ICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQorICAgICAgICByZXR1cm4g
R0RLX0FDVElPTl9QUklWQVRFOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9u
PigwKTsKK30KKworRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdk
a0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQoreworICAgIC8vIFdlIGhhdmUgbm8gZ29vZCB3YXkgdG8g
ZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisgICAgLy8gdG8gdXNlIGl0IHdo
ZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJlIG9uLgorICAgIGlmIChnZGtBY3Rpb24gJiBHREtf
QUNUSU9OX0NPUFkgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9NT1ZFCisgICAgICAgICYmIGdk
a0FjdGlvbiAmIEdES19BQ1RJT05fTElOSyAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZB
VEUpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7CisKKyAgICB1bnNpZ25lZCBp
bnQgYWN0aW9uID0gRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19B
Q1RJT05fQ09QWSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Db3B5OworICAgIGlm
IChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01PVkUpCisgICAgICAgIGFjdGlvbiB8PSBEcmFnT3Bl
cmF0aW9uTW92ZTsKKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LKQorICAgICAg
ICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkxpbms7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19B
Q1RJT05fUFJJVkFURSkKKyAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Qcml2YXRlOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihhY3Rpb24pOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NmY2MzQ2OWUyYjhkZTQ1YzAxNzc3NWYwYjQyOTJiZDZiYWM0NzQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAor
I2RlZmluZSBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAorCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMu
aCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2RrRHJh
Z0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsKK0dk
a0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0
aW9uKTsKK0RyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFn
QWN0aW9uKTsKKworfQorCisjZW5kaWYgLy8gQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NWYyM2JiNTk2
ZThjMmVhZWIzMjk3MTBkZjQ4ZTQ3NGM3ZWM0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb21wb3Np
dGlvblJlc3VsdHNfaAorI2RlZmluZSBDb21wb3NpdGlvblJlc3VsdHNfaAorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENv
bXBvc2l0aW9uUmVzdWx0cyB7CisgICAgQ29tcG9zaXRpb25SZXN1bHRzKCkKKyAgICAgICAgOiBh
c3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAg
fQorCisgICAgQ29tcG9zaXRpb25SZXN1bHRzKFN0cmluZyBzaW1wbGVTdHJpbmcpCisgICAgICAg
IDogc2ltcGxlU3RyaW5nKHNpbXBsZVN0cmluZykKKyAgICAgICAgLCBhc3NvY2lhdGVkV2l0aFBl
bmRpbmdDb21wb3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgZW51bSBS
ZXN1bHRzSW5kaWNhdG9yIHsgV2lsbFNlbmRDb21wb3NpdGlvblJlc3VsdHNTb29uIH07CisgICAg
Q29tcG9zaXRpb25SZXN1bHRzKFJlc3VsdHNJbmRpY2F0b3IpCisgICAgICAgIDogYXNzb2NpYXRl
ZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGUodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBjb21wb3NpdGlvblVwZGF0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFz
c29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOworICAgIH0KKworICAgIC8vIFNv
bWUgc2ltcGxlIGlucHV0IG1ldGhvZHMgcmV0dXJuIGEgc3RyaW5nIGZvciBhbGwga2V5Ym9hcmQg
ZXZlbnRzLiBUaGlzCisgICAgLy8gdmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIHN0cmlu
ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUga2V5Y29kZS4KKyAgICBTdHJpbmcgc2ltcGxlU3RyaW5n
OworCisgICAgYm9vbCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKK307
CisKK30KKworI2VuZGlmIC8vIENvbXBvc2l0aW9uUmVzdWx0c19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
Q29udGV4dE1lbnVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjMDAyYzRkOWZkNzgyZjkyNzA0YzQ5NzZj
NDM3ZWExZjllNWRkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0Nv
bnRleHRNZW51R3RrLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShDT05URVhUX01FTlVTKQorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKworI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Nv
bnRleHRNZW51OjpDb250ZXh0TWVudSgpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0g
R1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOworfQorCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUo
Y29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNj
cmlwdGlvbihtZW51KQoreworfQorCitDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKK3sKKyAg
ICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
R1RLX1dJREdFVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKK30KKwordm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbik7CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZvcm1JdGVt
ID0gR1RLX1dJREdFVChpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAgIEFT
U0VSVChwbGF0Zm9ybUl0ZW0pOworCisgICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dp
ZGdldF9nZXRfcGFyZW50KHBsYXRmb3JtSXRlbS5nZXQoKSkpCisgICAgICAgIGd0a19jb250YWlu
ZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgpKTsKKwor
ICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3JtRGVzY3Jp
cHRpb24pLCBwbGF0Zm9ybUl0ZW0uZ2V0KCkpOworICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9y
bUl0ZW0uZ2V0KCkpOworfQorCit2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0
aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCit7CisgICAgQVNTRVJUKG1lbnUpOwor
ICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworCisgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0gbWVudTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1l
bnU6OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3Jt
RGVzY3JpcHRpb247Cit9CisKK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Ojpy
ZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCit7CisgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gZGVzY3JpcHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0gMDsKKworICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKwordW5zaWduZWQg
Q29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbik7CisKKyAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpKTsKKyAg
ICByZXR1cm4gZ19saXN0X2xlbmd0aChjaGlsZHJlbi5nZXQoKSk7Cit9CisKK1ZlY3RvcjxDb250
ZXh0TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQoreworICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJdGVtVmVj
dG9yOworCisgICAgR093blB0cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRfY2hp
bGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOworICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3Rf
bGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKKyAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2FwYWNp
dHkoaXRlbUNvdW50KTsKKworICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5nZXQoKTsg
aXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIGlmICgh
R1RLX0lTX01FTlVfSVRFTSh3aWRnZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG1lbnVJdGVtVmVjdG9yLmFwcGVuZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOworICAgIH0KKwor
ICAgIHJldHVybiBtZW51SXRlbVZlY3RvcjsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
cGxhdGZvcm1NZW51RGVzY3JpcHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJ
dGVtcykKK3sKKyAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIEd0a1dpZGdldCogcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51SXRlbXNb
aV0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CisgICAgICAgIGd0a19tZW51X3NoZWxs
X2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKKyAgICAgICAgZ3Rr
X3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbSk7CisgICAgfQorICAgIHJldHVybiBtZW51OworfQor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzBiNWJlNmJkZjBiZDljZmM3
NzhjYTIwNWRiMjM4NzU1YzMxZTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKKworI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorCisjaW5jbHVkZSAi
Q29udGV4dE1lbnUuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T04gIndlYmtpdC1jb250ZXh0LW1lbnUiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgQ29udGV4
dE1lbnVBY3Rpb24mIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoKKyAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weToKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19DT1BZOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z09wZW5JbWFnZUluTmV3V2luZG93OgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZy
YW1lSW5OZXdXaW5kb3c6CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5l
d1dpbmRvdzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TQVZFOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX0dPX0JBQ0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAg
ICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1N0b3A6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X0NVVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgorICAgICAgICByZXR1cm4g
R1RLX1NUT0NLX1BBU1RFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX0RFTEVURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1NlbGVjdEFsbDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19OTzsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdPdGhlcjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGlnaHQ6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfRklORDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19GSU5EOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
T3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BF
TjsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlpvb21JbjoKKyAgICAgICAgcmV0dXJuIEdU
S19TVE9DS19aT09NX0lOOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX09VVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRl
bVBERkF1dG9TaXplOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklUOworICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
R09fRk9SV0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKKyAg
ICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19CQUNLOworICAgIC8vIE5ldyB0YWdzLCBub3QgcGFy
dCBvZiBBUEkKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX09QRU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1Nw
ZWxsaW5nOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOworICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VM
RUNUX0ZPTlQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6CisgICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdCb2xkOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdJdGFsaWM6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOworICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOgorICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX1VOREVSTElORTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6Cisg
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0NPTE9SOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1RvZ2dsZU1lZGlhTG9vcDoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVy
bFRvQ2xpcGJvYXJkOgorICAgICAgICAvLyBObyBpY29uIGZvciB0aGlzLgorICAgICAgICByZXR1
cm4gMDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgor
ICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZVTExTQ1JFRU47CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uIGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihDb250ZXh0TWVudUl0ZW1UeXBl
IHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9v
bCBlbmFibGVkLCBib29sIGNoZWNrZWQpCit7CisgICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlw
ZSkKKyAgICAgICAgcmV0dXJuIEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1f
bmV3KCkpOworCisgICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50Zigi
Y29udGV4dC1tZW51LWFjdGlvbi0lZCIsIGFjdGlvbikpOworICAgIEdSZWZQdHI8R3RrQWN0aW9u
PiBwbGF0Zm9ybUFjdGlvbjsKKworICAgIGlmICh0eXBlID09IENoZWNrYWJsZUFjdGlvblR5cGUp
IHsKKyAgICAgICAgcGxhdGZvcm1BY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9n
Z2xlX2FjdGlvbl9uZXcoYWN0aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwg
Z3RrU3RvY2tJREZyb21Db250ZXh0TWVudUFjdGlvbihhY3Rpb24pKSkpOworICAgICAgICBndGtf
dG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9u
LmdldCgpKSwgY2hlY2tlZCk7CisgICAgfSBlbHNlCisgICAgICAgIHBsYXRmb3JtQWN0aW9uID0g
YWRvcHRHUmVmKGd0a19hY3Rpb25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5k
YXRhKCksIDAsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpOworICAg
IGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShwbGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5hYmxlZCk7
CisKKyAgICBHdGtNZW51SXRlbSogaXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVh
dGVfbWVudV9pdGVtKHBsYXRmb3JtQWN0aW9uLmdldCgpKSk7CisgICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1QoaXRlbSksIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BP
SU5URVIoYWN0aW9uKSk7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKworLy8gRXh0cmFjdCB0aGUg
QWN0aW9uVHlwZSBmcm9tIHRoZSBtZW51IGl0ZW0KK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1l
bnVJdGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtKQorICAgIDogbV9wbGF0Zm9y
bURlc2NyaXB0aW9uKGl0ZW0pCit7CisgICAgLy8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJlbHMgaW4g
Y29udGV4dCBtZW51IGl0ZW1zLgorICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7
CisgICAgaWYgKCFhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3RrX2FjdGlv
bl9nZXRfYWNjZWxfcGF0aChhY3Rpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRn
ZXQqIGNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihpdGVtKSk7CisgICAgaWYgKEdU
S19JU19BQ0NFTF9MQUJFTChjaGlsZCkpCisgICAgICAgIGd0a19hY2NlbF9sYWJlbF9zZXRfYWNj
ZWxfY2xvc3VyZShHVEtfQUNDRUxfTEFCRUwoY2hpbGQpLCAwKTsKK30KKworQ29udGV4dE1lbnVJ
dGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCit7CisgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlVfSVRFTShndGtfbWVudV9pdGVtX25ldygpKTsKKyAg
ICBpZiAoc3ViTWVudSkKKyAgICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKK30KKworQ29udGV4
dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250
ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBz
dWJNZW51KQoreworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVu
dUl0ZW1EZXNjcmlwdGlvbih0eXBlLCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7CisgICAg
aWYgKHN1Yk1lbnUpCisgICAgICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7Cit9CisKK0NvbnRleHRN
ZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4
dE1lbnVBY3Rpb24gYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJv
b2wgY2hlY2tlZCkKK3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9y
bU1lbnVJdGVtRGVzY3JpcHRpb24odHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tl
ZCk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51QWN0
aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNr
ZWQsIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCit7CisgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKFN1Ym1l
bnVUeXBlLCBhY3Rpb24sIHRpdGxlLCBlbmFibGVkLCBjaGVja2VkKTsKKyAgICBzZXRTdWJNZW51
KHN1Yk1lbnVJdGVtcyk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgp
Cit7Cit9CisKK1BsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJl
bGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKK3sKKyAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3Jp
cHRpb24gcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24gPSAwOworICAgIHJldHVybiBwbGF0Zm9ybURlc2NyaXB0aW9u
OworfQorCitDb250ZXh0TWVudUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0
Cit7CisgICAgaWYgKEdUS19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbikpCisgICAgICAgIHJldHVybiBTZXBhcmF0b3JUeXBlOworICAgIGlmIChHVEtfSVNfQ0hF
Q0tfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBDaGVj
a2FibGVBY3Rpb25UeXBlOworICAgIGlmIChndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBTdWJtZW51VHlwZTsKKyAgICByZXR1
cm4gQWN0aW9uVHlwZTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4
dE1lbnVJdGVtVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCisg
ICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRv
cl9tZW51X2l0ZW1fbmV3KCkpOworfQorCitDb250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0
ZW06OmFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHRNZW51
QWN0aW9uPihHUE9JTlRFUl9UT19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0
Zm9ybURlc2NyaXB0aW9uKSwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04pKSk7Cit9CisKK3Zv
aWQgQ29udGV4dE1lbnVJdGVtOjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQor
eworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiks
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Cit9
CisKK1N0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICBHdGtBY3Rp
b24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOworICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZy
b21VVEY4KGd0a19hY3Rpb25fZ2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7Cit9CisKK3Zv
aWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAg
IEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAg
ICAgZ3RrX2FjdGlvbl9zZXRfbGFiZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKK30K
KworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1l
bnUoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogc3ViTWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0
X3N1Ym1lbnUobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gc3ViTWVudSA/IEdU
S19NRU5VKHN1Yk1lbnUpIDogMDsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1l
bnUoQ29udGV4dE1lbnUqIG1lbnUpCit7CisgICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudSht
X3BsYXRmb3JtRGVzY3JpcHRpb24sIEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVz
Y3JpcHRpb24oKSkpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0
b3I8Q29udGV4dE1lbnVJdGVtPiYgc3ViTWVudUl0ZW1zKQoreworICAgIENvbnRleHRNZW51IG1l
bnUocGxhdGZvcm1NZW51RGVzY3JpcHRpb24oc3ViTWVudUl0ZW1zKSk7CisgICAgc2V0U3ViTWVu
dSgmbWVudSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hv
dWxkQ2hlY2spCit7CisgICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBp
ZiAoYWN0aW9uICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIGd0a190
b2dnbGVfYWN0aW9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwgc2hvdWxk
Q2hlY2spOworfQorCitib29sIENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0Cit7Cisg
ICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdU
S19JU19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2Fj
dGlvbl9nZXRfYWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAoreworICAg
IEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgcmV0dXJuIGFjdGlvbiA/IGd0
a19hY3Rpb25fZ2V0X3NlbnNpdGl2ZShhY3Rpb24pIDogZmFsc2U7Cit9CisKK3ZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wgc2hvdWxkRW5hYmxlKQoreworICAgIEd0a0FjdGlv
biogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2Fj
dGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlvbiwgc2hvdWxkRW5hYmxlKTsKK30KKworR3RrQWN0aW9u
KiBDb250ZXh0TWVudUl0ZW06Omd0a0FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGd0a19h
Y3RpdmF0YWJsZV9nZXRfcmVsYXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbikpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmI5MDVhOTY0ZGU3NjIzNDIw
OWMyZjVjOTFjNmNkZjc5MDU0MjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9DdXJzb3JHdGsuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxMiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vyc29yR3RrLmgiCisjaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJ
bnRQb2ludC5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlTmFt
ZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yVHlwZSBjdXJzb3JUeXBlKQoreworICAgIEN1c3RvbUN1cnNv
ciBjdXJzb3IgPSBDdXN0b21DdXJzb3JzW2N1cnNvclR5cGVdOworICAgIEdSZWZQdHI8R2RrQ3Vy
c29yPiBjID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fbmFtZShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpLCBjdXJzb3IubmFtZSkpOworICAgIGlmIChjKQorICAgICAgICByZXR1cm4g
YzsKKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNvdXJjZSA9IGFkb3B0UmVmKGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGN1cnNvci5iaXRzKSwgQ0FJUk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKKyAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBtYXNrID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY3Vyc29yLm1hc2tfYml0cyks
IENBSVJPX0ZPUk1BVF9BMSwgMzIsIDMyLCA0KSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZP
Uk1BVF9BMSwgMzIsIDMyKSk7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjci5nZXQoKSwgc291cmNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2Uo
Y3IuZ2V0KCksIG1hc2suZ2V0KCksIDAsIDApOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBp
eGJ1ZiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZS5nZXQo
KSwgMCwgMCwgMzIsIDMyKSk7CisgICAgcmV0dXJuIGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19m
cm9tX3BpeGJ1ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYuZ2V0KCksIGN1cnNv
ci5ob3RfeCwgY3Vyc29yLmhvdF95KSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4g
Y3JlYXRlQ3VzdG9tQ3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3Qp
Cit7CisgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1h
Z2UsIGhvdFNwb3QpOworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYo
aW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKKyAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3Jf
bmV3X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwg
ZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgpKSk7Cit9CisKK3ZvaWQg
Q3Vyc29yOjplbnN1cmVQbGF0Zm9ybUN1cnNvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fcGxhdGZv
cm1DdXJzb3IgfHwgbV90eXBlID09IEN1cnNvcjo6UG9pbnRlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEN1cnNvcjo6UG9pbnRlcjoKKyAgICAg
ICAgLy8gQSBudWxsIEdka0N1cnNvciBpcyB0aGUgZGVmYXVsdCBjdXJzb3IgZm9yIHRoZSB3aW5k
b3cuCisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSAwOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEN1cnNvcjo6Q3Jvc3M6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYo
Z2RrX2N1cnNvcl9uZXcoR0RLX0NST1NTKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vy
c29yOjpIYW5kOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJz
b3JfbmV3KEdES19IQU5EMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6SUJl
YW06CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXco
R0RLX1hURVJNKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpXYWl0OgorICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19XQVRD
SCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6SGVscDoKKyAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJS
T1cpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok1vdmU6CisgICAgY2FzZSBD
dXJzb3I6Ok1pZGRsZVBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdS
ZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0ZMRVVSKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q3Vyc29yOjpFYXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFubmluZzoKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUklHSFRf
U0lERSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6Cisg
ICAgY2FzZSBDdXJzb3I6Ok5vcnRoUGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9QX1NJREUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFJlc2l6ZToKKyAgICBjYXNlIEN1cnNvcjo6Tm9y
dGhFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ldyhHREtfVE9QX1JJR0hUX0NPUk5FUikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhXZXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQ
YW5uaW5nOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3Jf
bmV3KEdES19UT1BfTEVGVF9DT1JORVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJz
b3I6OlNvdXRoUmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFBhbm5pbmc6CisgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9T
SURFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemU6
CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9SSUdIVF9DT1JORVIp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAg
ICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX0xFRlRfQ09STkVSKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgorICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoU291dGhSZXNpemU6CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9U
RUUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgor
ICAgIGNhc2UgQ3Vyc29yOjpXZXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemU6CisgICAgY2FzZSBD
dXJzb3I6Ok5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0laSU5HKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NCX0hfRE9VQkxFX0FSUk9XKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6CisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NCX1ZfRE9VQkxFX0FS
Uk9XKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpWZXJ0aWNhbFRleHQ6Cisg
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JW
ZXJ0aWNhbFRleHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q2VsbDoKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUExV
UykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q29udGV4dE1lbnU6CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JDb250
ZXh0TWVudSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpBbGlhczoKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckFsaWFz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlByb2dyZXNzOgorICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3Mp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9Ecm9wOgorICAgIGNhc2UgQ3Vy
c29yOjpOb3RBbGxvd2VkOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRD
dXJzb3IoQ3VzdG9tQ3Vyc29yTm9Ecm9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJz
b3I6OkNvcHk6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihD
dXN0b21DdXJzb3JDb3B5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5vbmU6
CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJz
b3JOb25lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Olpvb21JbjoKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclpvb21J
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yWm9vbU91dCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpHcmFiOgorICAgICAgICBtX3BsYXRm
b3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpHcmFiYmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckdyYWJiaW5nKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkN1c3RvbToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGNyZWF0ZUN1c3RvbUN1cnNvcihtX2ltYWdlLmdldCgpLCBtX2hvdFNwb3QpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIp
CisgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQorICAgICwgbV9pbWFnZShvdGhlci5tX2ltYWdl
KQorICAgICwgbV9ob3RTcG90KG90aGVyLm1faG90U3BvdCkKKyAgICAsIG1fcGxhdGZvcm1DdXJz
b3Iob3RoZXIubV9wbGF0Zm9ybUN1cnNvcikKK3sKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJh
dG9yPShjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsK
KyAgICBtX2ltYWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICBtX2hvdFNwb3QgPSBvdGhlci5tX2hv
dFNwb3Q7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitDdXJzb3I6On5DdXJzb3IoKQoreworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9DdXJzb3JHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Njg5MTliYTMzNWEyYWU1NGYyOGE0NjE5MDU4
M2IzYTRiYTI0NjYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJz
b3JHdGsuaApAQCAtMCwwICsxLDM4MyBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq
KioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAq
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1v
emlsbGEub3JnIGNvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzCisgKiBUaW0gQ29wcGVyZmllbGQuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5
IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAxCisgKiB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Io
cyk6CisgKiAgIFRpbSBDb3BwZXJmaWVsZCA8dGltZWNvcEBuZXR3b3JrLmVtYWlsLm5lLmpwPgor
ICogICBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgorICogQWx0
ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0
aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBp
biB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFw
cGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93
IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJt
cyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlz
aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVy
IHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5v
dCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9m
IHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0Ug
QkxPQ0sgKioqKiogKi8KKworI2lmbmRlZiBDdXJzb3JHdGtfaAorI2RlZmluZSBDdXJzb3JHdGtf
aAorCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisKKy8qCisgVGhlc2UgY3Vyc29ycyBhcmUgY29waWVk
IGZyb20gTW96aWxsYSBjb2RlOgorICBodHRwOi8vbHhyLm1vemlsbGEub3JnL21vemlsbGExLjgv
c291cmNlL3dpZGdldC9zcmMvZ3RrMi9uc0d0a0N1cnNvcnMuaAorKi8KKworLyogTU9aX0NVUlNP
Ul9WRVJUSUNBTF9URVhUICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGlj
YWxfdGV4dF9iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAs
IDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsCisgIDB4MDYsIDB4NjAsIDB4MDAs
IDB4MDAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsCisg
IDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96
X3ZlcnRpY2FsX3RleHRfbWFza19iaXRzW10gPSB7CisgIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAs
IDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsCisgIDB4ZmYs
IDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4
MDAsIDB4MDAsCisgIDB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4
MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworLyogTU9aX0NVUlNPUl9DT05U
RVhUX01FTlUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X2JpdHNbXSA9
IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
NCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgw
MCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHg3YywgMHgwMCwgMHgw
MCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHhmZCwgMHgwMCwgMHgwMCwK
KyAgMHhmYywgMHhmZiwgMHgwMCwgMHgwMCwgMHg3YywgMHg4NCwgMHgwMCwgMHgwMCwgMHg2Yywg
MHhmYywgMHgwMCwgMHgwMCwKKyAgMHhjNCwgMHg4NCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywg
MHgwMCwgMHgwMCwgMHg4MCwgMHg4NSwgMHgwMCwgMHgwMCwKKyAgMHg4MCwgMHhmZCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbWVudV9tYXNrX2JpdHNb
XSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHhmZSwgMHhmZCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgw
MCwKKyAgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhm
ZSwgMHhmZSwgMHgwMSwgMHgwMCwKKyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhm
ZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMSwgMHgwMCwKKyAgMHhjMCwgMHhmZiwgMHgw
MSwgMHgwMCwgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0NPUFkgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1vel9jb3B5X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwYywgMHgw
MCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwg
MHhmYywgMHgwMSwgMHgwMCwgMHgwMCwKKyAgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHg3Yywg
MHgzMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgzMCwgMHgwMCwgMHgwMCwKKyAgMHhjNCwgMHhmYywg
MHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgw
MCwKKyAgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBtb3pfY29weV9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgw
MCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgzNywgMHgwMCwgMHgwMCwgMHhm
ZSwgMHg3YiwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmYywgMHgwMCwgMHgwMCwKKyAgMHhlZSwgMHhm
ZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwg
MHgwMCwKKyAgMHhjMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0FMSUFT
ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfYWxpYXNfYml0c1tdID0geworICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAw
LCAweDAwLCAweDAwLAorICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAw
LCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAweDdjLCAweDAwLCAweDAwLCAweDAw
LCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAwLAorICAweGZj
LCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAweGYwLCAweDAwLCAweDAwLCAweDZjLCAweGUwLCAw
eDAwLCAweDAwLAorICAweGM0LCAweGYwLCAweDAwLCAweDAwLCAweGMwLCAweGIwLCAweDAwLCAw
eDAwLCAweDgwLCAweDE5LCAweDAwLCAweDAwLAorICAweDgwLCAweDE5LCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07
CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9hbGlhc19tYXNrX2JpdHNbXSA9IHsK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwg
MHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKKyAg
MHhmZSwgMHhmNywgMHgwMCwgMHgwMCwgMHhmZSwgMHhmYiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhm
MCwgMHgwMSwgMHgwMCwKKyAgMHhlZSwgMHhmOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmOSwgMHgw
MSwgMHgwMCwgMHhjMCwgMHhiZiwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHgzZiwgMHgwMCwgMHgw
MCwgMHg4MCwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCB9OworCisvKiBNT1pfQ1VSU09SX1pPT01fSU4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj
aGFyIG1vel96b29tX2luX2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
YywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwKKyAgMHg2MiwgMHgw
NCwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwOSwgMHgwMCwg
MHgwMCwKKyAgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwg
MHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwKKyAgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywg
MHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgzOCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBtb3pfem9vbV9pbl9tYXNrX2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhm
ZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwg
MHgwMCwgMHgwMCwKKyAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwg
MHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwg
MHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX1pP
T01fT1VUICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9vdXRfYml0c1td
ID0geworICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAw
eDAyLCAweDA0LCAweDAwLCAweDAwLAorICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAw
eDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAweDAwLCAweDAwLAorICAweGY5LCAweDA5LCAw
eDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAw
LAorICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYw
LCAweDFjLCAweDAwLCAweDAwLAorICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcw
LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAorICAweDAwLCAweDQwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9tYXNr
X2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwg
MHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwg
MHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKKyAgMHhmZiwg
MHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgw
MCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgw
MCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHg0
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX05PVF9BTExPV0VEICovCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm90X2FsbG93ZWRfYml0c1tdID0geworICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAw
LCAweDAwLAorICAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweDM4LCAweGMwLCAweDAxLCAweDAw
LCAweDdjLCAweDgwLCAweDAzLCAweDAwLAorICAweGVjLCAweDAwLCAweDAzLCAweDAwLCAweGNl
LCAweDAxLCAweDA3LCAweDAwLCAweDg2LCAweDAzLCAweDA2LCAweDAwLAorICAweDA2LCAweDA3
LCAweDA2LCAweDAwLCAweDA2LCAweDBlLCAweDA2LCAweDAwLCAweDA2LCAweDFjLCAweDA2LCAw
eDAwLAorICAweDBlLCAweDM4LCAweDA3LCAweDAwLCAweDBjLCAweDcwLCAweDAzLCAweDAwLCAw
eDFjLCAweGUwLCAweDAzLCAweDAwLAorICAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweGYwLCAw
eGYwLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLAorICAweDgwLCAweDFmLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9tYXNrX2JpdHNbXSA9IHsK
KyAgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwg
MHhmZiwgMHgwMCwgMHgwMCwKKyAgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmYywgMHhmMCwg
MHgwMywgMHgwMCwgMHhmZSwgMHhjMCwgMHgwNywgMHgwMCwKKyAgMHhmZSwgMHg4MSwgMHgwNywg
MHgwMCwgMHhmZiwgMHg4MywgMHgwZiwgMHgwMCwgMHhjZiwgMHgwNywgMHgwZiwgMHgwMCwKKyAg
MHg4ZiwgMHgwZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgxZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgz
ZSwgMHgwZiwgMHgwMCwKKyAgMHgxZiwgMHhmYywgMHgwZiwgMHgwMCwgMHgxZSwgMHhmOCwgMHgw
NywgMHgwMCwgMHgzZSwgMHhmMCwgMHgwNywgMHgwMCwKKyAgMHhmYywgMHhmMCwgMHgwMywgMHgw
MCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgMHhl
MCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCB9OworCisvKiBNT1pfQ1VSU09SX1NQSU5OSU5HICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBtb3pfc3Bpbm5pbmdfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAw
LCAweDAwLAorICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAw
LCAweGZjLCAweDAxLCAweDAwLCAweDAwLAorICAweGZjLCAweDNiLCAweDAwLCAweDAwLCAweDdj
LCAweDM4LCAweDAwLCAweDAwLCAweDZjLCAweDU0LCAweDAwLCAweDAwLAorICAweGM0LCAweGRj
LCAweDAwLCAweDAwLCAweGMwLCAweDQ0LCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAw
eDAwLAorICAweDgwLCAweDM5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1vel9zcGlubmluZ19tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgw
MCwgMHgwMCwgMHhmZSwgMHgzYiwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHg3ZiwgMHgwMCwgMHgw
MCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMCwgMHgwMCwKKyAgMHhl
ZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHg3Ziwg
MHgwMCwgMHgwMCwKKyAgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzOSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09S
X05PTkUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX2JpdHNbXSA9IHsK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfbm9uZV9tYXNrX2JpdHNbXSA9
IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0hBTkRfR1JBQiAqLworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisgIDB4
NjAsIDB4MzksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDks
IDB4MDEsIDB4MDAsCisgIDB4MjAsIDB4YzksIDB4MDIsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDIs
IDB4MDAsIDB4NTgsIDB4NDAsIDB4MDIsIDB4MDAsCisgIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDAs
IDB4NDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsCisgIDB4MTAs
IDB4MDAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4
MDAsIDB4MDAsCisgIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4
MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgzZiwgMHgwMCwgMHgw
MCwKKyAgMHhmMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhm
OCwgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhmMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmOCwgMHhm
ZiwgMHgwNywgMHgwMCwgMHhmYywgMHhmZiwgMHgwNywgMHgwMCwKKyAgMHhmZSwgMHhmZiwgMHgw
NywgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMywgMHgwMCwgMHhmYywgMHhmZiwgMHgwMywgMHgwMCwK
KyAgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwg
MHhmZiwgMHgwMSwgMHgwMCwKKyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwg
MHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pf
Q1VSU09SX0hBTkRfR1JBQkJJTkcgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9o
YW5kX2dyYWJiaW5nX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHhjMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgy
MCwgMHg0MCwgMHgwMSwgMHgwMCwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgw
MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwKKyAgMHgxMCwgMHgwMCwgMHgw
MSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwK
KyAgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwg
MHg0MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgIHVuc2lnbmVkIGNo
YXIgbW96X2hhbmRfZ3JhYmJpbmdfbWFza19iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4
MzYsIDB4MDAsIDB4MDAsCisgIDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4
MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4MDAsCisgIDB4ZTAsIDB4ZmYsIDB4MDMsIDB4
MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsCisgIDB4
ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYs
IDB4MDEsIDB4MDAsCisgIDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAs
IDB4MDAsIDB4YzAsIDB4N2YsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworZW51bSBDdXN0b21D
dXJzb3JUeXBlIHsKKyAgICBDdXN0b21DdXJzb3JDb3B5ID0gMCwKKyAgICBDdXN0b21DdXJzb3JB
bGlhcywKKyAgICBDdXN0b21DdXJzb3JDb250ZXh0TWVudSwKKyAgICBDdXN0b21DdXJzb3Jab29t
SW4sCisgICAgQ3VzdG9tQ3Vyc29yWm9vbU91dCwKKyAgICBDdXN0b21DdXJzb3JWZXJ0aWNhbFRl
eHQsCisgICAgQ3VzdG9tQ3Vyc29yTm9Ecm9wLAorICAgIEN1c3RvbUN1cnNvclByb2dyZXNzLAor
ICAgIEN1c3RvbUN1cnNvck5vbmUsCisgICAgQ3VzdG9tQ3Vyc29yR3JhYiwKKyAgICBDdXN0b21D
dXJzb3JHcmFiYmluZywKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyKiBu
YW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJpdHM7CisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogbWFza19iaXRzOworICAgIGludCBob3RfeDsKKyAgICBpbnQgaG90X3k7Cit9IEN1c3Rv
bUN1cnNvcjsKKworLy8gY3JlYXRlIGN1c3RvbSBwaXhtYXAgY3Vyc29yIGZyb20gY3Vyc29ycyBp
biBuc0dUS0N1cnNvckRhdGEuaAorc3RhdGljIGNvbnN0IEN1c3RvbUN1cnNvciBDdXN0b21DdXJz
b3JzW10gPSB7CisgICAgeyAiY29weSIsIG1vel9jb3B5X2JpdHMsIG1vel9jb3B5X21hc2tfYml0
cywgMiwgMiB9LAorICAgIHsgImFsaWFzIiwgbW96X2FsaWFzX2JpdHMsIG1vel9hbGlhc19tYXNr
X2JpdHMsIDIsIDIgfSwKKyAgICB7ICJjb250ZXh0LW1lbnUiLCBtb3pfbWVudV9iaXRzLCBtb3pf
bWVudV9tYXNrX2JpdHMsIDIsIDIgfSwKKyAgICB7ICJ6b29tLWluIiwgbW96X3pvb21faW5fYml0
cywgbW96X3pvb21faW5fbWFza19iaXRzLCA2LCA2IH0sCisgICAgeyAiem9vbS1vdXQiLCBtb3pf
em9vbV9vdXRfYml0cywgbW96X3pvb21fb3V0X21hc2tfYml0cywgNiwgNiB9LAorICAgIHsgInZl
cnRpY2FsLXRleHQiLCBtb3pfdmVydGljYWxfdGV4dF9iaXRzLCBtb3pfdmVydGljYWxfdGV4dF9t
YXNrX2JpdHMsIDgsIDQgfSwKKyAgICB7ICJkbmQtbm8tZHJvcCIsIG1vel9ub3RfYWxsb3dlZF9i
aXRzLCBtb3pfbm90X2FsbG93ZWRfbWFza19iaXRzLCA5LCAgOSB9LAorICAgIHsgImxlZnRfcHRy
X3dhdGNoIiwgbW96X3NwaW5uaW5nX2JpdHMsIG1vel9zcGlubmluZ19tYXNrX2JpdHMsIDIsICAy
fSwKKyAgICB7ICJub25lIiwgbW96X25vbmVfYml0cywgbW96X25vbmVfbWFza19iaXRzLCAwLCAw
IH0sCisgICAgeyAiZ3JhYiIsIG1vel9oYW5kX2dyYWJfYml0cywgbW96X2hhbmRfZ3JhYl9tYXNr
X2JpdHMsIDEwLCAxMCB9LAorICAgIHsgImdyYWJiaW5nIiwgbW96X2hhbmRfZ3JhYmJpbmdfYml0
cywgbW96X2hhbmRfZ3JhYmJpbmdfbWFza19iaXRzLCAxMCwgMTAgfQorfTsKKworI2VuZGlmIC8v
IEN1cnNvckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RH
dGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hZGZjNjZlMDE1ZTUwMjI2Nzg4YzIxNDc2OGExNWIyOTEzNjg0M2I4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAtMCwwICsxLDE3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydGluIFJvYmluc29uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RGF0YU9iamVjdEd0ay5oIgorCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQg
cmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCit7CisgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAgIHN0
YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNoYXJhY3RlciA9ICcgJzsKKyAgICBzdHIucmVwbGFjZShO
b25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7Cit9CisKK1N0cmluZyBE
YXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKK3sKKyAgICBpZiAobV9yYW5nZSkKKyAgICAgICAg
cmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKKyAgICByZXR1cm4gbV90ZXh0OworfQorCitTdHJpbmcg
RGF0YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKK3sKKyAgICBpZiAobV9yYW5nZSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZvckludGVy
Y2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CisgICAgcmV0dXJuIG1fbWFya3Vw
OworfQorCit2b2lkIERhdGFPYmplY3RHdGs6OnNldFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0
KQoreworICAgIG1fcmFuZ2UgPSAwOworICAgIG1fdGV4dCA9IG5ld1RleHQ7CisgICAgcmVwbGFj
ZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UobV90ZXh0KTsKK30KKwordm9pZCBEYXRhT2JqZWN0
R3RrOjpzZXRNYXJrdXAoY29uc3QgU3RyaW5nJiBuZXdNYXJrdXApCit7CisgICAgbV9yYW5nZSA9
IDA7CisgICAgbV9tYXJrdXAgPSBuZXdNYXJrdXA7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6
c2V0VVJJTGlzdChjb25zdCBTdHJpbmcmIHVyaUxpc3RTdHJpbmcpCit7CisgICAgbV91cmlMaXN0
ID0gdXJpTGlzdFN0cmluZzsKKworICAgIC8vIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZyb206
IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAuCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBtYWtlIHRoaXMgY29kZSBjcm9zcy1wbGF0Zm9ybSBldmVudHVhbGx5LgorCisg
ICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3Ig
Y29tcGF0aWJpbGl0eQorICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUu
CisgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKKyAgICB1cmlMaXN0U3RyaW5nLnNwbGl0KCdc
bicsIHVyaUxpc3QpOworCisgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhlIGZp
cnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVtYmVyLgorICAgIC8vIEluIGNhc2Ugbm8gVVJM
cyBjYW4gYmUgZm91bmQsIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKKyAgICAv
LyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1M
NSBzcGVjIChzZWUKKyAgICAvLyAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVy
ZmFjZXMiKS4gQWxzbyBleHRyYWN0IGFsbCBmaWxlbmFtZXMKKyAgICAvLyBmcm9tIHRoZSBVUkkg
bGlzdC4KKyAgICBib29sIHNldFVSTCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0
W2ldOworICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYg
KGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChsaW5l
WzBdID09ICcjJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEtVUkwgdXJsID0g
S1VSTChLVVJMKCksIGxpbmUpOworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgaWYgKCFzZXRVUkwpIHsKKyAgICAgICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAg
ICAgICAgICAgICBzZXRVUkwgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFt
ZShnX2ZpbGVuYW1lX2Zyb21fdXJpKGxpbmUudXRmOCgpLmRhdGEoKSwgMCwgJmVycm9yLm91dFB0
cigpKSk7CisgICAgICAgICAgICBpZiAoIWVycm9yICYmIGZpbGVuYW1lKQorICAgICAgICAgICAg
ICAgIG1fZmlsZW5hbWVzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdldCgpKSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICBtX3VybCA9IHVybDsKKyAg
ICBtX3VyaUxpc3QgPSB1cmw7CisgICAgc2V0VGV4dCh1cmwuc3RyaW5nKCkpOworCisgICAgU3Ry
aW5nIGFjdHVhbExhYmVsKGxhYmVsKTsKKyAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQor
ICAgICAgICBhY3R1YWxMYWJlbCA9IHVybDsKKworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOwor
ICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBwZW5kKHVybC5z
dHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7CisgICAgR093blB0cjxnY2hhcj4g
ZXNjYXBlZChnX21hcmt1cF9lc2NhcGVfdGV4dChhY3R1YWxMYWJlbC51dGY4KCkuZGF0YSgpLCAt
MSkpOworICAgIG1hcmt1cC5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7
CisgICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOworICAgIHNldE1hcmt1cChtYXJrdXAudG9TdHJp
bmcoKSk7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJUZXh0KCkKK3sKKyAgICBtX3Jh
bmdlID0gMDsKKyAgICBtX3RleHQgPSAiIjsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVh
ck1hcmt1cCgpCit7CisgICAgbV9yYW5nZSA9IDA7CisgICAgbV9tYXJrdXAgPSAiIjsKK30KKwor
U3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzVGV4
dCgpKQorICAgICAgICByZXR1cm4gdGV4dCgpOworCisgICAgaWYgKGhhc1VSTCgpKQorICAgICAg
ICByZXR1cm4gdXJsKCk7CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRGF0YU9i
amVjdEd0azo6Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKQoreworICAgIG1fdGV4dCA9ICIiOwor
ICAgIG1fbWFya3VwID0gIiI7CisgICAgbV91cmlMaXN0ID0gIiI7CisgICAgbV91cmwgPSBLVVJM
KCk7CisgICAgbV9pbWFnZSA9IDA7CisgICAgbV9yYW5nZSA9IDA7Cit9CisKK3ZvaWQgRGF0YU9i
amVjdEd0azo6Y2xlYXJBbGwoKQoreworICAgIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Cisg
ICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKK30KKworRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0
azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAgIHN0YXRpYyBI
YXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+IG9iamVjdE1hcDsK
KworICAgIGlmICghb2JqZWN0TWFwLmNvbnRhaW5zKGNsaXBib2FyZCkpIHsKKyAgICAgICAgUmVm
UHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKTsK
KyAgICAgICAgb2JqZWN0TWFwLnNldChjbGlwYm9hcmQsIGRhdGFPYmplY3QpOworICAgICAgICBy
ZXR1cm4gZGF0YU9iamVjdC5nZXQoKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPEd0a0NsaXBib2Fy
ZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5maW5k
KGNsaXBib2FyZCk7CisgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0RhdGFPYmplY3RHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjgxYjFlMTc4YmY5NDdkYTJjMDgw
ZDM4M2VhYTUwNmI2YTYzOTgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9EYXRhT2JqZWN0R3RrLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgTWFydGluIFJvYmluc29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIERhdGFPYmplY3RHdGtfaAorI2RlZmluZSBEYXRhT2JqZWN0R3RrX2gKKworI2luY2x1
ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhT2JqZWN0R3Rr
IDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YU9iamVjdEd0az4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERhdGFPYmplY3RHdGsoKSk7CisgICAgfQorCisgICAgY29uc3QgS1VS
TCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVyaUxp
c3QoKSBjb25zdCB7IHJldHVybiBtX3VyaUxpc3Q7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KKyAgICBHZGtQaXhi
dWYqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0
UmFuZ2UoUGFzc1JlZlB0cjxSYW5nZT4gbmV3UmFuZ2UpIHsgbV9yYW5nZSA9IG5ld1JhbmdlOyB9
CisgICAgdm9pZCBzZXRJbWFnZShHZGtQaXhidWYqIG5ld0ltYWdlKSB7IG1faW1hZ2UgPSBuZXdJ
bWFnZTsgfQorICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX3RleHQuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNNYXJrdXAoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFt
X21hcmt1cC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1VSSUxpc3QoKSBjb25zdCB7IHJldHVy
biAhbV91cmlMaXN0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVVJMKCkgY29uc3QgeyByZXR1
cm4gIW1fdXJsLmlzRW1wdHkoKSAmJiBtX3VybC5pc1ZhbGlkKCk7IH0KKyAgICBib29sIGhhc0Zp
bGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KKyAgICBi
b29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJV
UklMaXN0KCkgeyBtX3VyaUxpc3QgPSAiIjsgfQorICAgIHZvaWQgY2xlYXJVUkwoKSB7IG1fdXJs
ID0gS1VSTCgpOyB9CisgICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ltYWdlID0gMDsgfQorCisg
ICAgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICBTdHJpbmcgbWFya3VwKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0TWFya3VwKGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgc2V0VVJJTGlzdChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcg
dXJsTGFiZWwoKSBjb25zdDsKKworICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsK
KyAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBjbGVhclRleHQoKTsKKyAgICB2b2lkIGNs
ZWFyTWFya3VwKCk7CisKKyAgICBzdGF0aWMgRGF0YU9iamVjdEd0ayogZm9yQ2xpcGJvYXJkKEd0
a0NsaXBib2FyZCopOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3RleHQ7CisgICAgU3RyaW5n
IG1fbWFya3VwOworICAgIEtVUkwgbV91cmw7CisgICAgU3RyaW5nIG1fdXJpTGlzdDsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX2ZpbGVuYW1lczsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFn
ZTsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBEYXRh
T2JqZWN0R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsu
Y3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJh
NDc0OWQzM2NiYjI5OWM4ZGQ2NmUzNWMwMDkxYWIyOGYxMGFlNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisv
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkNs
aXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29u
dGFpbnNGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFz
RmlsZW5hbWVzKCk7Cit9CisKK3Vuc2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZpbGVzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKS5zaXplKCk7
Cit9CisKK3ZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQp
IGNvbnN0Cit7CisgICAgcmVzdWx0ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKTsK
K30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1RleHQoKTsKK30KKworU3RyaW5nIERyYWdEYXRh
Ojphc1BsYWluVGV4dChGcmFtZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFn
RGF0YS0+dGV4dCgpOworfQorCitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIENvbG9yKCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJs
ZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluc1BsYWluVGV4dCgpIHx8IGNv
bnRhaW5zVVJMKDApIHx8IG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzTWFya3VwKCkgfHwgY29udGFp
bnNDb2xvcigpIHx8IGNvbnRhaW5zRmlsZXMoKTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNVUkwoRnJhbWUqIGZyYW1lLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xp
Y3kpIGNvbnN0Cit7CisgICAgcmV0dXJuICFhc1VSTChmcmFtZSwgZmlsZW5hbWVQb2xpY3kpLmlz
RW1wdHkoKTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29u
dmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVVJMKCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICBpZiAoZmlsZW5hbWVQb2xpY3kgIT0gQ29udmVydEZpbGVuYW1lcykgeworICAg
ICAgICBLVVJMIHVybChLVVJMKCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOworICAgICAg
ICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgfQorCisgICAgU3RyaW5nIHVybChtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybCgpKTsKKyAgICBp
ZiAodGl0bGUpCisgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsTGFiZWwo
KTsKKyAgICByZXR1cm4gdXJsOworfQorCisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
RHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9v
bCwgYm9vbCYpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc01hcmt1
cCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21N
YXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+bWFya3VwKCksICIi
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODE4NzcxYzgy
OTlkMDExNTQ5NWVmY2NjNTAxMTJhY2Q4NGVkNzYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRyYWdJY29uLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIK
KworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVu
dENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24qIGlj
b24pCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9f
Y3JlYXRlKGV2ZW50LT53aW5kb3cpKTsKKyAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkpOwor
ICAgIHJldHVybiBUUlVFOworfQorI2Vsc2UKK3N0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRv
d0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJY29u
KiBpY29uKQoreworICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250ZXh0
LCAwKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGljb24tPmRyYXcoY29udGV4dCk7Cisg
ICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworRHJhZ0lj
b246OkRyYWdJY29uKCkKKyAgICA6IGlzQ29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBvc2l0
ZWQoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKSkKKyAgICAsIG1fd2luZG93KDApCit7CisgICAg
aWYgKCFpc0NvbXBvc2l0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxMQkFD
SyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7CisjZWxzZQorICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRv
d0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7CisjZW5kaWYKKworICAgIC8vIFRoaXMgc3RyYXRl
Z3kgb3JpZ2luYWxseSBjb21lcyBmcm9tIENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIvZ3Rr
L3RhYl9jb250ZW50c19kcmFnX3NvdXJjZS5jYworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3Rr
X3dpZGdldF9nZXRfc2NyZWVuKG1fd2luZG93KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgor
ICAgIEdka0NvbG9ybWFwKiByZ2JhID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChzY3Jl
ZW4pOworICAgIGlmIChyZ2JhKQorICAgICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX3dp
bmRvdywgcmdiYSk7CisjZWxzZQorICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9n
ZXRfcmdiYV92aXN1YWwoc2NyZWVuKTsKKyAgICBpZiAoIXZpc3VhbCkKKyAgICAgICAgdmlzdWFs
ID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pOworICAgIGd0a193aWRnZXRf
c2V0X3Zpc3VhbChtX3dpbmRvdywgdmlzdWFsKTsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05f
MgorfQorCitEcmFnSWNvbjo6fkRyYWdJY29uKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisgICAg
ICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgRHJhZ0ljb246OmRy
YXcoY2Fpcm9fdCogY29udGV4dCkKK3sKKyAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9p
bWFnZS5nZXQoKSksCisgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChtX2ltYWdlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQs
IENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNv
bnRleHQsIG1faW1hZ2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Cit9
CisKK3ZvaWQgRHJhZ0ljb246OnNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCit7Cisg
ICAgQVNTRVJUKGltYWdlKTsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9pbWFnZVNpemUg
PSBJbnRTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKSk7CisgICAgaWYgKGlzQ29tcG9zaXRlZCkgewor
ICAgICAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFnZVNp
emUud2lkdGgoKSwgbV9pbWFnZVNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBtX3BpeGJ1ZiA9IGFkb3B0R1JlZihj
YWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGltYWdlKSk7CisjZW5kaWYKK30KKwordm9pZCBE
cmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBJbnRQ
b2ludCBob3RzcG90KG1faW1hZ2VTaXplKTsKKyAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41KTsK
KyAgICB1c2VGb3JEcmFnKGNvbnRleHQsIGhvdHNwb3QpOworfQorCit2b2lkIERyYWdJY29uOjp1
c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90c3Bv
dCkKK3sKKyAgICBpZiAoaXNDb21wb3NpdGVkKSB7CisgICAgICAgIGd0a19kcmFnX3NldF9pY29u
X3dpZGdldChjb250ZXh0LCBtX3dpbmRvdywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGd0a19k
cmFnX3NldF9pY29uX3BpeGJ1Zihjb250ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54KCks
IGhvdHNwb3QueSgpKTsKKyNlbHNlCisgICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250
ZXh0LCBtX2ltYWdlLmdldCgpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0RyYWdJY29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJlNDM1ZGNiZGEyMGUyZWRkN2JmYzI2
ZjdiMGZmMDlhMjhiODg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
RHJhZ0ljb24uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRHJhZ0ljb25faAorI2RlZmluZSBEcmFnSWNv
bl9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPFJlZlB0ckNhaXJvLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIERyYWdJY29uIHsKK3B1YmxpYzoKKyAgICBEcmFnSWNvbigpOworICAgIHZpcnR1YWwg
fkRyYWdJY29uKCk7CisKKyAgICB2b2lkIGRyYXcoY2Fpcm9fdCopOworICAgIHZvaWQgc2V0SW1h
Z2UoY2Fpcm9fc3VyZmFjZV90Kik7CisgICAgdm9pZCB1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0
Kik7CisgICAgdm9pZCB1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQm
IGhvdHNwb3QpOworCitwcml2YXRlOgorICAgIGJvb2wgaXNDb21wb3NpdGVkOworICAgIEd0a1dp
ZGdldCogbV93aW5kb3c7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFnZTsKKyAg
ICBJbnRTaXplIG1faW1hZ2VTaXplOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR1Jl
ZlB0cjxHZGtQaXhidWY+IG1fcGl4YnVmOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZiAvLyBE
cmFnSWNvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I3
YzRjMTQyZTFjZWYzOWQyNGYzYmVlOWYzNGNiMmVhZDJiZDdlOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcApAQCAtMCwwICsxLDkxIEBACisv
KgorICogMjAxMCBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisKKyNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8u
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbnRTaXplIGRyYWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmIGltYWdlKQor
eworICAgIGlmIChpbWFnZSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgoaW1hZ2UpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1h
Z2UpKTsKKworICAgIHJldHVybiBJbnRTaXplKDAsIDApOworfQorCit2b2lkIGRlbGV0ZURyYWdJ
bWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCit7CisgICAgaWYgKGltYWdlKQorICAgICAgICBjYWly
b19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOworfQorCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1h
Z2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCit7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgbmV3V2lkdGggPSBzY2FsZS53aWR0aCgp
ICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpOworICAgIGludCBuZXdIZWln
aHQgPSBzY2FsZS5oZWlnaHQoKSAqIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFn
ZSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzY2FsZWRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9j
cmVhdGVfc2ltaWxhcihpbWFnZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbmV3V2lkdGgs
IG5ld0hlaWdodCk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShzY2FsZWRTdXJmYWNlKSk7CisgICAgY2Fpcm9fc2NhbGUoY29udGV4dC5nZXQo
KSwgc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0
X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNvbnRleHQuZ2V0KCkpLCBDQUlST19FWFRFTkRfUEFE
KTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIoY2Fpcm9fZ2V0X3NvdXJjZShjb250ZXh0
LmdldCgpKSwgQ0FJUk9fRklMVEVSX0JFU1QpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250
ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShjb250ZXh0LmdldCgpLCBpbWFnZSwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQoY29u
dGV4dC5nZXQoKSk7CisKKyAgICBkZWxldGVEcmFnSW1hZ2UoaW1hZ2UpOworICAgIHJldHVybiBz
Y2FsZWRTdXJmYWNlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0
aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQgZnJhY3Rpb24pCit7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWdka19zY3JlZW5faXNfY29tcG9zaXRl
ZChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShpbWFnZSkp
OworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9E
RVNUX0lOKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMCwgMCwg
MCwgZnJhY3Rpb24pOworICAgIGNhaXJvX3BhaW50KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVy
biBpbWFnZTsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFn
ZSogaW1hZ2UsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSkKK3sKKyAgICBOYXRpdmVJbWFn
ZUNhaXJvKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OworICAgIHJldHVybiBuYXRpdmVJbWFnZSA/IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG5hdGl2
ZUltYWdlLT5zdXJmYWNlKCkpIDogMDsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTRkNTVlNzY5MTUxZWRj
MWQ0MTE1NmE0MzJjYTc1OTc4MTRiYWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9FcnJvcnNHdGsuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFcnJv
cnNHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJQcmludENvbnRleHQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBO
ZXR3b3JrRXJyb3JDYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKSwgXygiTG9hZCByZXF1ZXN0IGNhbmNlbGxlZCIpKTsKK30KKworUmVzb3Vy
Y2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorewor
ICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNh
bm5vdFVzZVJlc3RyaWN0ZWRQb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxvd2VkIHRvIHVzZSByZXN0cmljdGVkIG5ldHdvcmsg
cG9ydCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiVVJMIGNhbm5vdCBiZSBzaG93biIp
KTsKK30KKworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9s
aWN5Q2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCksIF8oIkZyYW1lIGxvYWQgd2FzIGludGVycnVwdGVkIikpOworfQorCitSZXNvdXJjZUVycm9y
IGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lF
cnJvckNhbm5vdFNob3dNaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBl
IGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4
aXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBf
KCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOworfQorCitSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxI
YW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
cmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVnaW4sIFBsdWdpbkVycm9yV2lsbEhh
bmRsZUxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5n
KCksIF8oIlBsdWdpbiB3aWxsIGhhbmRsZSBsb2FkIikpOworfQorCitSZXNvdXJjZUVycm9yIGRv
d25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIG5ldHdvcmtFcnJvcikKK3sK
KyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVy
cm9yTmV0d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRXJyb3IuZmFpbGlu
Z1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Cit9CisKK1Jlc291
cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRv
d25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJVc2VyIGNhbmNlbGxlZCB0aGUgZG93
bmxvYWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3du
bG9hZEVycm9yRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uu
dXJsKCkuc3RyaW5nKCksIGVycm9yTWVzc2FnZSk7Cit9CisKK1Jlc291cmNlRXJyb3IgcHJpbnRF
cnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCit7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRD
b250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9yR2VuZXJhbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwo
KSA6IEtVUkwoKSwgZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmludGVyTm90
Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCkKK3sKKyAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluUHJpbnQsIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCksIF8o
IlByaW50ZXIgbm90IGZvdW5kIikpOworfQorCitSZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFu
Z2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0KQoreworICAgIERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21h
aW5QcmludCwgUHJpbnRFcnJvckludmFsaWRQYWdlUmFuZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCksIF8o
IkludmFsaWQgcGFnZSByYW5nZSIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvRXJyb3JzR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgyY2M5OWZiZjI5MmU0Y2JjZDczZDZlZjA5
Y2ZjNGMyYzk0ODZjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJy
b3JzR3RrLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIEVycm9yc0d0a19oCisjZGVmaW5lIEVycm9yc0d0a19oCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQcmludENvbnRleHQ7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKworY29uc3QgY2hhciogY29uc3QgZXJyb3JE
b21haW5OZXR3b3JrID0gIldlYktpdE5ldHdvcmtFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBl
cnJvckRvbWFpblBvbGljeSA9ICJXZWJLaXRQb2xpY3lFcnJvciI7Citjb25zdCBjaGFyKiBjb25z
dCBlcnJvckRvbWFpblBsdWdpbiA9ICJXZWJLaXRQbHVnaW5FcnJvciI7Citjb25zdCBjaGFyKiBj
b25zdCBlcnJvckRvbWFpbkRvd25sb2FkID0gIldlYktpdERvd25sb2FkRXJyb3IiOworY29uc3Qg
Y2hhciogY29uc3QgZXJyb3JEb21haW5QcmludCA9ICJXZWJLaXRQcmludEVycm9yIjsKKworZW51
bSBOZXR3b3JrRXJyb3IgeworICAgIE5ldHdvcmtFcnJvckZhaWxlZCA9IDM5OSwKKyAgICBOZXR3
b3JrRXJyb3JUcmFuc3BvcnQgPSAzMDAsCisgICAgTmV0d29ya0Vycm9yVW5rbm93blByb3RvY29s
ID0gMzAxLAorICAgIE5ldHdvcmtFcnJvckNhbmNlbGxlZCA9IDMwMiwKKyAgICBOZXR3b3JrRXJy
b3JGaWxlRG9lc05vdEV4aXN0ID0gMzAzCit9OworCisvLyBTeW5jJ2Qgd2l0aCBNYWMncyBXZWJL
aXQgRXJyb3JzLgorZW51bSBQb2xpY3lFcnJvciB7CisgICAgUG9saWN5RXJyb3JGYWlsZWQgPSAx
OTksCisgICAgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5cGUgPSAxMDAsCisgICAgUG9saWN5
RXJyb3JDYW5ub3RTaG93VVJMID0gMTAxLAorICAgIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJy
dXB0ZWRCeVBvbGljeUNoYW5nZSA9IDEwMiwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3Ry
aWN0ZWRQb3J0ID0gMTAzCit9OworCitlbnVtIFBsdWdpbkVycm9yIHsKKyAgICBQbHVnaW5FcnJv
ckZhaWxlZCA9IDI5OSwKKyAgICBQbHVnaW5FcnJvckNhbm5vdEZpbmRQbHVnaW4gPSAyMDAsCisg
ICAgUGx1Z2luRXJyb3JDYW5ub3RMb2FkUGx1Z2luID0gMjAxLAorICAgIFBsdWdpbkVycm9ySmF2
YVVuYXZhaWxhYmxlID0gMjAyLAorICAgIFBsdWdpbkVycm9yQ29ubmVjdGlvbkNhbmNlbGxlZCA9
IDIwMywKKyAgICBQbHVnaW5FcnJvcldpbGxIYW5kbGVMb2FkID0gMjA0Cit9OworCitlbnVtIERv
d25sb2FkRXJyb3IgeworICAgIERvd25sb2FkRXJyb3JOZXR3b3JrID0gNDk5LAorICAgIERvd25s
b2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIgPSA0MDAsCisgICAgRG93bmxvYWRFcnJvckRlc3RpbmF0
aW9uID0gNDAxCit9OworCitlbnVtIFByaW50RXJyb3IgeworICAgIFByaW50RXJyb3JHZW5lcmFs
ID0gNTk5LAorICAgIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQgPSA1MDAsCisgICAgUHJpbnRF
cnJvckludmFsaWRQYWdlUmFuZ2UgPSA1MDEKK307CisKK1Jlc291cmNlRXJyb3IgY2FuY2VsbGVk
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJv
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZv
clBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJv
ciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNv
dXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CitSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNv
dXJjZUVycm9yJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZERlc3RpbmF0
aW9uRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKK1Jlc291cmNlRXJyb3IgcHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CitSZXNvdXJjZUVycm9yIHByaW50ZXJOb3RGb3VuZEVy
cm9yKGNvbnN0IFByaW50Q29udGV4dCopOworUmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJhbmdl
VG9QcmludChjb25zdCBQcmludENvbnRleHQqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvRXZlbnRMb29wR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWY3YjVjYjc3Yjk0NGZiZTA1ODE4NGY4
NjE0NDA1MmFlNmE1MjJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9F
dmVudExvb3BHdGsuY3BwCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5o
IgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZl
bnRMb29wOjpjeWNsZSgpCit7CisgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZB
TFNFKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5
c3RlbUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmEyMDcyOTZjNmE2Y2I0NjYyOGY3NzA5NjM0ZTI0ZTcy
Zjg4N2M5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3Rl
bUd0ay5jcHAKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRl
ICJVVUlELmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNs
dWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xp
YlV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBPbiBsaW51
eCBmaWxlIG5hbWVzIGFyZSBqdXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fu
bm90IGJlIGVuY29kZWQgaW4gYW55IHdheQorICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMg
bWVhbiB0aGF0IHdlIGNhbm5vdCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3Ry
aW5nCisgKiBidXQgd2UgaGF2ZSB0byBlc2NhcGUgaXQuCisgKiBPbiBXaW5kb3dzIHRoZSBHTGli
IGZpbGUgbmFtZSBlbmNvZGluZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRo
aXMgY2FzZS4gKi8KK1N0cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1l
KQoreworICAgIGlmICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworI2lm
IE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOworI2Vs
c2UKKyAgICBHT3duUHRyPGdjaGFyPiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmco
ZmlsZW5hbWUsICIvOiIsIGZhbHNlKSk7CisgICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7
CisjZW5kaWYKK30KKworQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHBhdGgudXRmOCgpOwor
I2Vsc2UKKyAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmco
cGF0aC51dGY4KCkuZGF0YSgpLCAwKSk7CisgICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOworI2Vu
ZGlmCit9CisKKy8vIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBi
ZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCitTdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0
IFN0cmluZyYgc3RyaW5nKQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHN0cmluZzsK
KyNlbHNlCisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihz
dHJpbmcpOworICAgIEdPd25QdHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZp
bGVuYW1lLmRhdGEoKSwgMCwgMCwgMCwgMCkpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAg
cmV0dXJuIHN0cmluZzsKKworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0
KCkpOworI2VuZGlmCit9CisKK2Jvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworCisgICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkK
KyAgICAgICAgcmVzdWx0ID0gZ19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVT
VF9FWElTVFMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBkZWxldGVGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJp
bmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAo
IWZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSBnX3JlbW92ZShmaWxlbmFtZS5k
YXRhKCkpID09IDA7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUVtcHR5
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNl
OworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7
CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSBnX3JtZGly
KGZpbGVuYW1lLmRhdGEoKSkgPT0gMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wg
Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCit7
CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
KyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdTdGF0QnVmIHN0YXRSZXN1bHQ7CisgICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUu
ZGF0YSgpLCAmc3RhdFJlc3VsdCk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdGltZV90JiBtb2RpZmllZFRpbWUpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7Cisg
ICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Cisg
ICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RpZmll
ZFRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOworICAgIHJldHVybiB0cnVlOworCit9CisKK2Jv
b2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRh
ZGF0YSkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgc3RydWN0IHN0YXQgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3Rh
dChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJl
c3VsdC5zdF9tdGltZTsKKyAgICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7
CisgICAgbWV0YWRhdGEudHlwZSA9IFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVN
ZXRhZGF0YTo6VHlwZURpcmVjdG9yeSA6IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7CisgICAgcmV0
dXJuIHRydWU7CisKK30KKworU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQoreworICAgIGlmIChwYXRoLmVu
ZHNXaXRoKEdfRElSX1NFUEFSQVRPUl9TKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25l
bnQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsg
Y29tcG9uZW50OworfQorCitib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGdpbnQgcmVzdWx0ID0gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgp
LCBTX0lSV1hVKTsKKworICAgIHJldHVybiByZXN1bHQgPT0gMDsKK30KKworU3RyaW5nIGhvbWVE
aXJlY3RvcnlQYXRoKCkKK3sKKyAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21l
X2RpcigpKTsKK30KKworU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhO
YW1lKQoreworICAgIGlmIChwYXRoTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwYXRo
TmFtZTsKKworICAgIENTdHJpbmcgdG1wRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24ocGF0aE5hbWUpOworICAgIEdPd25QdHI8Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFz
ZW5hbWUodG1wRmlsZW5hbWUuZGF0YSgpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
YmFzZU5hbWUuZ2V0KCkpOworfQorCitDU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgp
Cit7CisgICAgQ1N0cmluZyBwYXRoID0gZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7CisgICAg
aWYgKCFwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gcGF0aDsKKworICAgIC8vIElmIHRo
ZSBhYm92ZSBmYWlscywgY2hlY2sgdGhlIFBBVEggZW52IHZhcmlhYmxlLgorICAgIEdPd25QdHI8
Y2hhcj4gY3VycmVudEV4ZVBhdGgoZ19maW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1l
KCkpKTsKKyAgICBpZiAoIWN1cnJlbnRFeGVQYXRoLmdldCgpKQorICAgICAgICByZXR1cm4gQ1N0
cmluZygpOworCisgICAgR093blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShj
dXJyZW50RXhlUGF0aC5nZXQoKSkpOworICAgIHJldHVybiBkaXJuYW1lLmdldCgpOworfQorCitD
U3RyaW5nIHNoYXJlZFJlc291cmNlc1BhdGgoKQoreworICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hl
ZFBhdGg7CisgICAgaWYgKCFjYWNoZWRQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY2Fj
aGVkUGF0aDsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgSE1PRFVMRSBobW9kdWxlID0gMDsKKyAg
ICBHZXRNb2R1bGVIYW5kbGVFeEEoR0VUX01PRFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJF
U1MsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVs
ZSk7CisKKyAgICBHT3duUHRyPGdjaGFyPiBydW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2Vf
aW5zdGFsbGF0aW9uX2RpcmVjdG9yeV9vZl9tb2R1bGUoaG1vZHVsZSkpOworICAgIEdPd25QdHI8
Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRfZmlsZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJl
IiwgIndlYmtpdGd0ay0iV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOworI2Vs
c2UKKyAgICBHT3duUHRyPGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElS
LCAid2Via2l0Z3RrLSJXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7CisjZW5k
aWYKKworICAgIGNhY2hlZFBhdGggPSBkYXRhUGF0aC5nZXQoKTsKKyAgICByZXR1cm4gY2FjaGVk
UGF0aDsKK30KKwordWludDY0X3QgZ2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIq
IHBhdGgpCit7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3
X2Zvcl9wYXRoKHBhdGgpKTsKKyAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9w
dEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRU
UklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwgMCkpOworICAgIGlmICghZmlsZUluZm8pCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWlu
dDY0KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Cit9
CisKK1N0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvKiBO
byBudWxsIGNoZWNraW5nIG5lZWRlZCAqLworICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3Bh
dGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOwor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpcm5hbWUuZ2V0KCkpOworfQorCitWZWN0b3I8
U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBm
aWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKworICAgIENTdHJpbmcgZmls
ZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgR0RpciogZGlyID0g
Z19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCksIDAsIDApOworICAgIGlmICghZGlyKQorICAgICAg
ICByZXR1cm4gZW50cmllczsKKworICAgIEdQYXR0ZXJuU3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5f
c3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRhdGEoKSk7CisgICAgd2hpbGUgKGNvbnN0IGNoYXIq
IG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkgeworICAgICAgICBpZiAoIWdfcGF0dGVybl9t
YXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCks
IG5hbWUsIE5VTEwpKTsKKyAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhl
bnRyeS5nZXQoKSkpOworICAgIH0KKyAgICBnX3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKKyAg
ICBnX2Rpcl9jbG9zZShkaXIpOworCisgICAgcmV0dXJuIGVudHJpZXM7Cit9CisKK1N0cmluZyBv
cGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRm
KCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9m
aWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7CisgICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRo
LmdldCgpKSk7CisKKyAgICBoYW5kbGUgPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdl
dCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOworICAgIGlmICghaXNIYW5kbGVWYWxpZCho
YW5kbGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgodGVtcFBhdGguZ2V0KCkpOworfQorCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKK3sKKyAgICBDU3RyaW5nIGZz
UmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmc1JlcC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAu
ZGF0YSgpKSk7CisgICAgR0ZpbGVJT1N0cmVhbSogaW9TdHJlYW0gPSAwOworICAgIGlmIChtb2Rl
ID09IE9wZW5Gb3JSZWFkKQorICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0
ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICBlbHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkg
eworICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmls
ZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAg
ICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAs
IDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVf
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgfQor
CisgICAgcmV0dXJuIGlvU3RyZWFtOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwg
MCwgMCk7CisgICAgZ19vYmplY3RfdW5yZWYoaGFuZGxlKTsKKyAgICBoYW5kbGUgPSBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOworfQorCitsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQor
eworICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgc3dpdGNoIChvcmln
aW4pIHsKKyAgICBjYXNlIFNlZWtGcm9tQmVnaW5uaW5nOgorICAgICAgICBzZWVrVHlwZSA9IEdf
U0VFS19TRVQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgorICAg
ICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vl
a0Zyb21FbmQ6CisgICAgICAgIHNlZWtUeXBlID0gR19TRUVLX0VORDsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRf
c3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQsIHNlZWtUeXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBn
X3NlZWthYmxlX3RlbGwoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdf
SU9fU1RSRUFNKGhhbmRsZSkpKSk7Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGdzaXpl
IGJ5dGVzV3JpdHRlbjsKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFt
X2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKKyAgICBy
ZXR1cm4gYnl0ZXNXcml0dGVuOworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIGRvIHsKKyAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRf
c3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5k
bGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBpZiAoYnl0ZXNSZWFkID49
IDApCisgICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOworICAgIH0gd2hpbGUgKGVycm9yICYm
IGVycm9yLT5jb2RlID09IEdfRklMRV9FUlJPUl9JTlRSKTsKKyAgICByZXR1cm4gLTE7Cit9CisK
K2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyNpZiBPUyhXSU5E
T1dTKQorICAgIHJldHVybiA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7CisjZWxzZQorICAgIHJldHVy
biBnX21vZHVsZV9jbG9zZShtb2R1bGUpOworI2VuZGlmCit9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3du
UHRyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjY5M2Y0MTVlOTc4MjQ3ZmQzYzkzODRkNGVkMjUxZWUw
NDliOGYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3Rr
LmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHZGtFdmVudD4o
R2RrRXZlbnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnZGtfZXZlbnRfZnJlZShw
dHIpOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R3RrSWNvbkluZm8+KEd0
a0ljb25JbmZvKiBpbmZvKQoreworICAgIGlmIChpbmZvKQorICAgICAgICBndGtfaWNvbl9pbmZv
X2ZyZWUoaW5mbyk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR093
blB0ckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmQ1ZTgzNzFlZDM2OGY0MTVkODk3NDMyNGVlNjJkNzFmZWI3YTJkNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oCkBAIC0wLDAgKzEsMzIgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
R093blB0ckd0a19oCisjZGVmaW5lIEdPd25QdHJHdGtfaAorCisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gdm9pZCBmcmVl
T3duZWRHUHRyPEdka0V2ZW50PihHZGtFdmVudCopOwordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3du
ZWRHUHRyPEd0a0ljb25JbmZvPihHdGtJY29uSW5mbyopOworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR1JlZlB0ckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmE1MDZkZjkwMDdkMjRjYzA3Njc3Njhk
ZWZkMTA1NjYyZmMzOWIzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorCisjZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEK
KyNkZWZpbmUgU0VDUkVUX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSAxCisKKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIo
R3RrVGFyZ2V0TGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGd0a190YXJnZXRf
bGlzdF9yZWYocHRyKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3Rr
X3RhcmdldF9saXN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiBy
ZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgc2VjcmV0
X3ZhbHVlX3JlZihwdHIpOworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgc2Vj
cmV0X3ZhbHVlX3VucmVmKHB0cik7Cit9CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgordGVt
cGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKQoreworICAgIGlmIChw
dHIpCisgICAgICAgIGdka19jdXJzb3JfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwor
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihwdHIpOworfQorI2VuZGlmCisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE5Mjg2NGE5MjI5ZGFiODgzYmVmYTU2MmIy
MzVhZDhhYzM5NmRjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1Jl
ZlB0ckd0ay5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIEdSZWZQdHJHdGtfaAorI2RlZmluZSBHUmVmUHRyR3RrX2gKKworI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1NlY3JldFZh
bHVlIFNlY3JldFZhbHVlOworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFy
Z2V0TGlzdCogcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKTsKKwordGVtcGxhdGUgPD4gU2VjcmV0VmFsdWUq
IHJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihT
ZWNyZXRWYWx1ZSogcHRyKTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0ZW1wbGF0ZSA8
PiBHZGtDdXJzb3IqIHJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpOworI2VuZGlmCisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR2FtZXBhZHNHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmOTYwOWRkMDg3MTJkMTI4NTIzNjRi
ZjIwZTZkYmMzZjRhZmZhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0dhbWVwYWRzR3RrLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRzLmgiCisKKyNpZiBFTkFCTEUoR0FN
RVBBRCkKKworI2luY2x1ZGUgIkdhbWVwYWREZXZpY2VMaW51eC5oIgorI2luY2x1ZGUgIkdhbWVw
YWRMaXN0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPGdpby9ndW5peGlucHV0
c3RyZWFtLmg+CisjaW5jbHVkZSA8Z3VkZXYvZ3VkZXYuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWREZXZpY2VHdGsgOiBwdWJsaWMgR2Ft
ZXBhZERldmljZUxpbnV4IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxHYW1lcGFk
RGV2aWNlR3RrPiBjcmVhdGUoU3RyaW5nIGRldmljZUZpbGUpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEdhbWVwYWREZXZpY2VHdGsoZGV2aWNlRmlsZSkpOworICAgIH0KKyAg
ICB+R2FtZXBhZERldmljZUd0aygpOworCitwcml2YXRlOgorICAgIEdhbWVwYWREZXZpY2VHdGso
U3RyaW5nIGRldmljZUZpbGUpOworCisgICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhH
T2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSk7CisgICAgR1JlZlB0cjxHSW5w
dXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsK
K307CisKK0dhbWVwYWREZXZpY2VHdGs6OkdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZp
bGUpCisgICAgOiBHYW1lcGFkRGV2aWNlTGludXgoZGV2aWNlRmlsZSkKK3sKKyAgICBpZiAobV9m
aWxlRGVzY3JpcHRvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dFN0cmVh
bSA9IGFkb3B0R1JlZihnX3VuaXhfaW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBG
QUxTRSkpOworICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFt
X2NyZWF0ZV9zb3VyY2UoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQo
KSksIDApKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOworICAgIGdf
c291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgMCk7Cit9CisKK0dhbWVwYWREZXZpY2VHdGs6
On5HYW1lcGFkRGV2aWNlR3RrKCkKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIGdfc291
cmNlX2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOworfQorCitnYm9vbGVhbiBHYW1lcGFkRGV2aWNl
R3RrOjpyZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgR2FtZXBhZERldmljZUd0ayogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R2FtZXBhZERldmljZUd0ayo+KGRhdGEpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7CisKKyAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJs
ZV9pbnB1dF9zdHJlYW1fcmVhZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShw
b2xsYWJsZVN0cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRy
KCkpOworCisgICAgLy8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCisgICAgLy8gSW4g
dGhlIGNhc2Ugb2YgR19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3
YWl0IHVudGlsCisgICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBG
QUxTRSBvdGhlcndpc2UuCisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZ19lcnJvcl9t
YXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsK
KworICAgIEFTU0VSVF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7CisgICAgZ2Ft
ZXBhZERldmljZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBUUlVFOworfQor
CitjbGFzcyBHYW1lcGFkc0d0ayB7CitwdWJsaWM6CisgICAgR2FtZXBhZHNHdGsodW5zaWduZWQg
bGVuZ3RoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOwor
ICAgIHZvaWQgdW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7CisKKyAgICB2b2lk
IHVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7CisKK3ByaXZhdGU6CisgICAgfkdhbWVw
YWRzR3RrKCk7CisgICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCos
IGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3RhdGlj
IGdib29sZWFuIGlzR2FtZXBhZERldmljZShHVWRldkRldmljZSopOworCisgICAgVmVjdG9yPE93
blB0cjxHYW1lcGFkRGV2aWNlR3RrPiA+IG1fc2xvdHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdh
bWVwYWREZXZpY2VHdGsqPiBtX2RldmljZU1hcDsKKworICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+
IG1fZ3VkZXZDbGllbnQ7Cit9OworCitHYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5zaWduZWQg
bGVuZ3RoKQorICAgIDogbV9zbG90cyhsZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHN1YnN5c3RlbXNbXSA9IHsgImlucHV0IiwgMCB9OworICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9w
dEdSZWYoZ191ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9ndWRldkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxs
YmFjayksIHRoaXMpOworCisgICAgR093blB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2Ns
aWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1sw
XSkpOworICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJ
dGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgeworICAgICAgICBHVWRldkRl
dmljZSogZGV2aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7CisgICAgICAgIFN0
cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZp
Y2VfZmlsZShkZXZpY2UpKTsKKyAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQor
ICAgICAgICAgICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7CisgICAgICAgIGdfb2JqZWN0
X3VucmVmKGRldmljZSk7CisgICAgfQorfQorCitHYW1lcGFkc0d0azo6fkdhbWVwYWRzR3RrKCkK
K3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVu
dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Cit9CisKK3Zv
aWQgR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQoreworICAg
IExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmls
ZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZp
Y2VGaWxlKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3Rz
LnNpemUoKTsgaW5kZXgrKykgeworICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7CisgICAg
ICAgICAgICBtX3Nsb3RzW2luZGV4XSA9IEdhbWVwYWREZXZpY2VHdGs6OmNyZWF0ZShkZXZpY2VG
aWxlKTsKKyAgICAgICAgICAgIG1fZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2lu
ZGV4XS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBHYW1lcGFkc0d0azo6dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKK3sK
KyAgICBMT0coR2FtZXBhZCwgIkdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2
aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5z
KGRldmljZUZpbGUpKTsKKworICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBt
X2RldmljZU1hcC50YWtlKGRldmljZUZpbGUpOworICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMu
ZmluZChnYW1lcGFkRGV2aWNlKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworCisg
ICAgbV9zbG90c1tpbmRleF0uY2xlYXIoKTsKK30KKwordm9pZCBHYW1lcGFkc0d0azo6dXBkYXRl
R2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAgQVNTRVJUKG1fc2xvdHMuc2l6
ZSgpID09IGludG8tPmxlbmd0aCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Nsb3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1f
c2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBn
YW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKKyAgICAgICAgICAgIFJlZlB0cjxHYW1l
cGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkK
KyAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7CisKKyAgICAgICAg
ICAgIGdhbWVwYWQtPmluZGV4KGkpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERl
dmljZS0+aWQoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmlj
ZS0+dGltZXN0YW1wKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNl
LT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisgICAgICAgICAgICBn
YW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2
aWNlLT5idXR0b25zRGF0YSgpKTsKKworICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAgICB9Cit9
CisKK3ZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqIHVkZXZD
bGllbnQsIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgaWYgKCFpc0dhbWVwYWREZXZpY2UoZGV2aWNlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR2FtZXBhZHNHdGsqIGdhbWVwYWRzR3RrID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFk
c0d0ayo+KGRhdGEpOworICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChn
X3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKKworICAgIGlmICghZ19zdHJj
bXAwKGFjdGlvbiwgImFkZCIpKQorICAgICAgICBnYW1lcGFkc0d0ay0+cmVnaXN0ZXJEZXZpY2Uo
ZGV2aWNlRmlsZSk7CisgICAgZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkK
KyAgICAgICAgZ2FtZXBhZHNHdGstPnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Cit9CisK
K2dib29sZWFuIEdhbWVwYWRzR3RrOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmlj
ZSkKK3sKKyAgICBjb25zdCBnY2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2Rl
dmljZV9maWxlKGRldmljZSk7CisgICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9k
ZXZpY2VfZ2V0X3N5c2ZzX3BhdGgoZGV2aWNlKTsKKyAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5
c2ZzUGF0aCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnX3VkZXZfZGV2aWNl
X2hhc19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19w
cm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVF9KT1lTVElDSyIpKQorICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICByZXR1cm4gZ19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1
dC9qcyIpOworfQorCit2b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAoaW50by0+
bGVuZ3RoKCkpKTsKKyAgICBnYW1lcGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM0YTJlYWIxMjk2MzM0ZDRhMDA2MDVhNDIxYjAyZmVhZTQ4MmQ3NzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuaCIKKworI2luY2x1ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRl
ICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBpbnQgZ0xheW91dENvbHVtblNwYWNpbmcgPSAx
MjsKK3N0YXRpYyBjb25zdCBpbnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2Oworc3RhdGljIGNvbnN0
IGludCBnQnV0dG9uU3BhY2luZyA9IDU7CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKKyAgICA6IG1fZGlhbG9nKDApCisgICAg
LCBtX2xvZ2luRW50cnkoMCkKKyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwgbV9yZW1l
bWJlckNoZWNrQnV0dG9uKDApCisgICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisgICAgLCBt
X2NyZWRlbnRpYWxTdG9yYWdlTW9kZShtb2RlKQoreworfQorCitHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdl
TW9kZSBtb2RlKQorICAgIDogbV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKKyAgICAsIG1fbG9n
aW5FbnRyeSgwKQorICAgICwgbV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVtYmVyQ2hl
Y2tCdXR0b24oMCkKKyAgICAsIG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAgICAsIG1fY3JlZGVu
dGlhbFN0b3JhZ2VNb2RlKG1vZGUpCit7CisgICAgR3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0
a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShHVEtfRElBTE9HKG1fZGlhbG9nKSk7CisgICAgZ3Rr
X2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhtX2Rp
YWxvZykpLCA1KTsKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goY29udGVudEFyZWEp
LCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KKworICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RL
X1dJTkRPVyhtX2RpYWxvZyk7CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywg
RkFMU0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0a193
aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJ
T04pOworCisgICAgaWYgKHBhcmVudFdpbmRvdykKKyAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJh
bnNpZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRvdyk7CisKKyAgICBjcmVhdGVDb250ZW50c0lu
Q29udGFpbmVyKGNvbnRlbnRBcmVhKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitz
dGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikK
K3sKKyAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVudExpc3Qs
IGJveCk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxT
RSk7CisgICAgZ3RrX3RhYmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xh
eW91dENvbHVtblNwYWNpbmcpOworICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19U
QUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5nKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RD
b2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQg
cm93TnVtYmVyID0gMDsKKyAgICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAg
aWYgKHJvd051bWJlcikKKyAgICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRh
YmxlKSwgcm93TnVtYmVyICsgMSwgMik7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1
bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgR3Rr
QXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9u
cz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtf
VEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdldCwKKyAgICAgICAgICAgIDAsIHNlY29uZENv
bHVtbldpZGdldCA/IDEgOiAyLAorICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAx
LAorICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKKyAgICAgICAgICAg
IDAsIDApOworCisgICAgICAgIGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCisgICAgICAgICAgICBn
dGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENvbHVtbldp
ZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxKTsKKworICAgICAgICBmaXJzdENv
bHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICBy
b3dOdW1iZXIrKzsKKyAgICB9CisKKyAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKKworICAgIGd0
a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOwor
fQorI2Vsc2UKK3N0YXRpYyB2b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQq
IGJveCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJndW1lbnRMaXN0OworICAgIHZhX3N0YXJ0KGFy
Z3VtZW50TGlzdCwgYm94KTsKKworICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygp
OworICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91
dFJvd1NwYWNpbmcpOworICAgIGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlk
KSwgZ0xheW91dFJvd1NwYWNpbmcpOworICAgIGd0a19ncmlkX3NldF9jb2x1bW5faG9tb2dlbmVv
dXMoR1RLX0dSSUQoZ3JpZCksIFRSVUUpOworCisgICAgR3RrV2lkZ2V0KiBmaXJzdENvbHVtbldp
ZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgIGludCByb3dOdW1i
ZXIgPSAwOworICAgIHdoaWxlIChmaXJzdENvbHVtbldpZGdldCkgeworICAgICAgICBHdGtXaWRn
ZXQqIHNlY29uZENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCop
OworICAgICAgICBpbnQgZmlyc3RXaWRnZXRXaWR0aCA9IHNlY29uZENvbHVtbldpZGdldCA/IDEg
OiAyOworCisgICAgICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgZmlyc3RDb2x1
bW5XaWRnZXQsIDAsIHJvd051bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwgMSk7CisgICAgICAgIGd0
a193aWRnZXRfc2V0X2hleHBhbmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOworICAgICAgICBn
dGtfd2lkZ2V0X3NldF92ZXhwYW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKKworICAgICAg
ICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KSB7CisgICAgICAgICAgICBndGtfZ3JpZF9hdHRhY2go
R1RLX0dSSUQoZ3JpZCksIHNlY29uZENvbHVtbldpZGdldCwgMSwgcm93TnVtYmVyLCAxLCAxKTsK
KyAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBU
UlVFKTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2Vjb25kQ29sdW1uV2lk
Z2V0LCBUUlVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFf
YXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAg
IH0KKworICAgIHZhX2VuZChhcmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZBTFNFLCAwKTsKK30KKyNlbmRpZgorCitzdGF0
aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dMYWJlbChjb25zdCBjaGFyKiBsYWJlbFN0cmluZywg
aW50IGhvcml6b250YWxQYWRkaW5nID0gMCkKK3sKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3Rr
X2xhYmVsX25ldyhsYWJlbFN0cmluZyk7CisgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtf
TUlTQyhsYWJlbCksIDAsIDAuNSk7CisgICAgaWYgKGhvcml6b250YWxQYWRkaW5nKQorICAgICAg
ICBndGtfbWlzY19zZXRfcGFkZGluZyhHVEtfTUlTQyhsYWJlbCksIDAsIGhvcml6b250YWxQYWRk
aW5nKTsKKyAgICByZXR1cm4gbGFiZWw7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURp
YWxvZ0VudHJ5KEd0a1dpZGdldCoqIG1lbWJlcikKK3sKKyAgICAqbWVtYmVyID0gZ3RrX2VudHJ5
X25ldygpOworICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKCpt
ZW1iZXIpLCBUUlVFKTsKKyAgICByZXR1cm4gKm1lbWJlcjsKK30KKwordm9pZCBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6Y3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRh
aW5lcikKK3sKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCogaEJveCA9
IGd0a19oYm94X25ldyhGQUxTRSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworI2Vsc2UKKyAgICBH
dGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwg
Z0xheW91dENvbHVtblNwYWNpbmcpOworI2VuZGlmCisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9y
ZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaEJveCksIGdCdXR0b25TcGFjaW5nKTsKKyAgICBndGtf
Y29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5lciksIGhCb3gpOworCisgICAgR3Rr
V2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0df
QVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRf
YWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFy
dChHVEtfQk9YKGhCb3gpLCBpY29uLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgR093blB0cjxj
aGFyPiBwcm9tcHQoZ19zdHJkdXBfcHJpbnRmKAorICAgICAgICBfKCJUaGUgc2l0ZSAlczolaSBy
ZXF1ZXN0cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCIpLAorICAgICAgICBtX2NoYWxsZW5nZS5w
cm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9jaGFsbGVu
Z2UucHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKSk7CisKKyAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0
b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNz
d29yZCIpKTsKKyAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZ3RrX2Jpbl9n
ZXRfY2hpbGQoR1RLX0JJTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworICAgIGd0
a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgbV9jcmVkZW50
aWFsU3RvcmFnZU1vZGUgPT0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7CisKKworICAgIC8v
IFdlIGFyZSBhZGRpbmcgdGhlIGJ1dHRvbiBib3ggaGVyZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVz
aW5nIHRoZSByZWFkeS1tYWRlIEd0a0RpYWxvZyBidXR0b25zLgorICAgIC8vIFRoaXMgaXMgc28g
dGhhdCB3ZSBjYW4gc2hhcmUgdGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBu
b3QgdXNlIEd0a0RpYWxvZy4KKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdl
dCogYnV0dG9uQm94ID0gZ3RrX2hidXR0b25fYm94X25ldygpOworI2Vsc2UKKyAgICBHdGtXaWRn
ZXQqIGJ1dHRvbkJveCA9IGd0a19idXR0b25fYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpP
TlRBTCk7CisjZW5kaWYKKyAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94
KSwgZ0J1dHRvblNwYWNpbmcpOworICAgIGd0a19idXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JV
VFRPTl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRPTkJPWF9FTkQpOworCisgICAgbV9va2F5QnV0
dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIG1fY2Fu
Y2VsQnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsK
KyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX2NhbmNlbEJ1dHRv
biwgRkFMU0UsIFRSVUUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRv
bkJveCksIG1fb2theUJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9va2F5QnV0dG9uLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2NhbmNlbEJ1dHRvbiwgImNsaWNr
ZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgU3Ry
aW5nIHJlYWxtID0gbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBp
ZiAoIXJlYWxtLmlzRW1wdHkoKSkgeworICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3go
aEJveCwKKyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91
dFJvd1NwYWNpbmcpLCBOVUxMLAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiU2Vy
dmVyIG1lc3NhZ2U6IikpLCBjcmVhdGVEaWFsb2dMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwK
KyAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlh
bG9nRW50cnkoJm1fbG9naW5FbnRyeSksCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChf
KCJQYXNzd29yZDoiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAorICAg
ICAgICAgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uLCBOVUxMLAorICAgICAgICAgICAgYnV0dG9u
Qm94LCBOVUxMLCBOVUxMKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHBhY2tUd29Db2x1bW5M
YXlvdXRJbkJveChoQm94LAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0Lmdl
dCgpLCBnTGF5b3V0Um93U3BhY2luZyksIE5VTEwsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dM
YWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAor
ICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFs
b2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKKyAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1
dHRvbiwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7Cisg
ICAgfQorCisgICAgZ3RrX2VudHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3Jk
RW50cnkpLCBGQUxTRSk7CisgICAgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJz
aXN0ZW50U3RvcmFnZSA9IG1fY2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOworICAgIGlm
ICghY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Z3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJv
bVBlcnNpc3RlbnRTdG9yYWdlLnVzZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3RrX2Vu
dHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBl
cnNpc3RlbnRTdG9yYWdlLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGd0a190
b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNr
QnV0dG9uKSwgVFJVRSk7CisgICAgfQorfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpzaG93KCkKK3sKKyAgICBndGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24s
IFRSVUUpOworICAgIGd0a193aWRnZXRfZ3JhYl9kZWZhdWx0KG1fb2theUJ1dHRvbik7CisgICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKG1fbG9naW5FbnRyeSk7CisKKyAgICBndGtfd2lkZ2V0X3No
b3dfYWxsKG1fZGlhbG9nKTsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVz
dHJveSgpCit7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKKyAgICBkZWxldGUg
dGhpczsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNv
bnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0
eSgpKQorICAgICAgICBtX2NoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZl
ZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRD
cmVkZW50aWFsKG1fY2hhbGxlbmdlLCBjcmVkZW50aWFsKTsKK30KKwordm9pZCBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6YnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9nKQoreworICAgIENyZWRlbnRpYWwgY3JlZGVu
dGlhbDsKKyAgICBpZiAoYnV0dG9uID09IGRpYWxvZy0+bV9va2F5QnV0dG9uKSB7CisgICAgICAg
IGNvbnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFs
b2ctPm1fbG9naW5FbnRyeSkpOworICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19l
bnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKKyAgICAg
ICAgYm9vbCByZW1lbWJlclBhc3N3b3JkID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShH
VEtfVE9HR0xFX0JVVFRPTihkaWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpOworICAgICAg
ICBDcmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2U7CisKKyAgICAgICAgaWYgKHJlbWVt
YmVyUGFzc3dvcmQgJiYgZGlhbG9nLT5tX2NyZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1Bl
cnNpc3RlbnRTdG9yYWdlKQorICAgICAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVy
c2lzdGVuY2VQZXJtYW5lbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcnNpc3RlbmNl
ID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjsKKworICAgICAgICBjcmVkZW50aWFs
ID0gQ3JlZGVudGlhbChTdHJpbmc6OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRG
OChwYXNzd29yZCksIHBlcnNpc3RlbmNlKTsKKyAgICB9CisKKyAgICBkaWFsb2ctPmF1dGhlbnRp
Y2F0ZShjcmVkZW50aWFsKTsKKyAgICBkaWFsb2ctPmRlc3Ryb3koKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM3N2M4MWFkZmVmYmQxOTI2OTc1OWE5ODcxNjYxZWY0ODE1YmEz
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKKyNkZWZp
bmUgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGVudW0gQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIHsK
KyAgICAgICAgQWxsb3dQZXJzaXN0ZW50U3RvcmFnZSwgLy8gVGhlIHVzZXIgaXMgYXNrZWQgd2hl
dGhlciB0byBzdG9yZSBjcmVkZW50aWFsIGluZm9ybWF0aW9uLgorICAgICAgICBEaXNhbGxvd1Bl
cnNpc3RlbnRTdG9yYWdlIC8vIENyZWRlbnRpYWwgaW5mb3JtYXRpb24gaXMgb25seSBrZXB0IGlu
IHRoZSBzZXNzaW9uLgorICAgIH07CisKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAg
R3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUpOworICAgIHZpcnR1YWwgfkd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nKCkgeyB9CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBkZXN0cm95
KCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3Rr
V2lkZ2V0KiBjb250YWluZXIpOworICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3Qg
Q3JlZGVudGlhbCYpOworICAgIEd0a1dpZGdldCogbV9kaWFsb2c7CisgICAgR3RrV2lkZ2V0KiBt
X2xvZ2luRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3Bhc3N3b3JkRW50cnk7CisgICAgR3RrV2lk
Z2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247CisgICAgR3RrV2lkZ2V0KiBtX29rYXlCdXR0b247
CisgICAgR3RrV2lkZ2V0KiBtX2NhbmNlbEJ1dHRvbjsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
dm9pZCBidXR0b25DbGlja2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiwgR3RrQXV0aGVudGljYXRpb25E
aWFsb2cqKTsKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKKyAgICBD
cmVkZW50aWFsU3RvcmFnZU1vZGUgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNjOGEz
MmMwMjY1ZWQxMTVkOGQ3NjFlZDdhNGZmZDIxM2VhZGQzZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcApAQCAtMCwwICsxLDEwNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a0Ns
aWNrQ291bnRlci5oIgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHdGtDbGlja0NvdW50ZXI6Okd0a0NsaWNr
Q291bnRlcigpCisgICAgOiBtX2N1cnJlbnRDbGlja0NvdW50KDApCisgICAgLCBtX3ByZXZpb3Vz
Q2xpY2tCdXR0b24oMCkKKyAgICAsIG1fcHJldmlvdXNDbGlja1RpbWUoMCkKK3sKK30KKwordm9p
ZCBHdGtDbGlja0NvdW50ZXI6OnJlc2V0KCkKK3sKKyAgICBtX2N1cnJlbnRDbGlja0NvdW50ID0g
MDsKKyAgICBtX3ByZXZpb3VzQ2xpY2tQb2ludCA9IEludFBvaW50KCk7CisgICAgbV9wcmV2aW91
c0NsaWNrVGltZSA9IDA7CisgICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gMDsKK30KKworYm9v
bCBHdGtDbGlja0NvdW50ZXI6OnNob3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRv
biogYnV0dG9uRXZlbnQpCit7CisgICAgLy8gRm9yIGRvdWJsZSBhbmQgdHJpcGxlIGNsaWNrcyBH
REsgc2VuZHMgYm90aCBhIG5vcm1hbCBidXR0b24gcHJlc3MgZXZlbnQKKyAgICAvLyBhbmQgYSBz
cGVjaWZpYyB0eXBlIChsaWtlIEdES18yQlVUVE9OX1BSRVNTKS4gSWYgd2UgZGV0ZWN0IGEgc3Bl
Y2lhbCBwcmVzcworICAgIC8vIGNvbWluZyB1cCwgaWdub3JlIHRoaXMgZXZlbnQgYXMgaXQgY2Vy
dGFpbmx5IGdlbmVyYXRlZCB0aGUgZG91YmxlIG9yIHRyaXBsZQorICAgIC8vIGNsaWNrLiBUaGUg
Y29uc2VxdWVuY2Ugb2Ygbm90IGVhdGluZyB0aGlzIGV2ZW50IGlzIHR3byBET00gYnV0dG9uIHBy
ZXNzIGV2ZW50cworICAgIC8vIGFyZSBnZW5lcmF0ZWQuCisgICAgR093blB0cjxHZGtFdmVudD4g
bmV4dEV2ZW50KGdka19ldmVudF9wZWVrKCkpOworICAgIGlmICghbmV4dEV2ZW50KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRP
Tl9QUkVTUyB8fCBuZXh0RXZlbnQtPmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBndWludDMy
IGdldEV2ZW50VGltZShHZGtFdmVudCogZXZlbnQpCit7CisgICAgZ3VpbnQzMiB0aW1lID0gZ2Rr
X2V2ZW50X2dldF90aW1lKGV2ZW50KTsKKyAgICBpZiAodGltZSkKKyAgICAgICAgcmV0dXJuIHRp
bWU7CisKKyAgICAvLyBSZWFsIGV2ZW50cyBhbHdheXMgaGF2ZSBhIG5vbi16ZXJvIHRpbWUsIGJ1
dCBldmVudHMgc3ludGhlc2l6ZWQKKyAgICAvLyBieSB0aGUgRFJUIGRvIG5vdCBhbmQgd2UgbXVz
dCBjYWxjdWxhdGUgYSB0aW1lIG1hbnVhbGx5LiBUaGlzIHRpbWUKKyAgICAvLyBpcyBub3QgY2Fs
Y3VsYXRlZCBpbiB0aGUgRFJULCBiZWNhdXNlIEdUSysgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGgK
KyAgICAvLyBhbnl0aGluZyBvdGhlciB0aGFuIEdES19DVVJSRU5UX1RJTUUgb24gc3ludGhlc2l6
ZWQgZXZlbnRzLgorICAgIEdUaW1lVmFsIHRpbWVWYWx1ZTsKKyAgICBnX2dldF9jdXJyZW50X3Rp
bWUoJnRpbWVWYWx1ZSk7CisgICAgcmV0dXJuICh0aW1lVmFsdWUudHZfc2VjICogMTAwMCkgKyAo
dGltZVZhbHVlLnR2X3VzZWMgLyAxMDAwKTsKK30KKworaW50IEd0a0NsaWNrQ291bnRlcjo6Y2xp
Y2tDb3VudEZvckdka0J1dHRvbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRv
biogYnV0dG9uRXZlbnQpCit7CisgICAgZ2ludCBkb3VibGVDbGlja0Rpc3RhbmNlID0gMjUwOwor
ICAgIGdpbnQgZG91YmxlQ2xpY2tUaW1lID0gNTsKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3Mg
PSBndGtfc2V0dGluZ3NfZ2V0X2Zvcl9zY3JlZW4oZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdl
dCkpOworICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgImd0ay1k
b3VibGUtY2xpY2stZGlzdGFuY2UiLCAmZG91YmxlQ2xpY2tEaXN0YW5jZSwKKyAgICAgICAgICAg
ICAgICAgImd0ay1kb3VibGUtY2xpY2stdGltZSIsICZkb3VibGVDbGlja1RpbWUsIE5VTEwpOwor
CisgICAgLy8gR1RLKyBvbmx5IGNvdW50cyB1cCB0byB0cmlwbGUgY2xpY2tzLCBidXQgV2ViQ29y
ZSB3YW50cyB0byBrbm93IGFib3V0CisgICAgLy8gcXVhZHJ1cGxlIGNsaWNrcywgcXVpbnR1cGxl
IGNsaWNrcywgYWQgaW5maW5pdHVtLiBIZXJlLCB3ZSByZXBsaWNhdGUgdGhlCisgICAgLy8gR0RL
IGxvZ2ljIGZvciBjb3VudGluZyBjbGlja3MuCisgICAgR2RrRXZlbnQqIGV2ZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8R2RrRXZlbnQqPihidXR0b25FdmVudCkpOworICAgIGd1aW50MzIgZXZlbnRUaW1l
ID0gZ2V0RXZlbnRUaW1lKGV2ZW50KTsKKworICAgIGlmICgoZXZlbnQtPnR5cGUgPT0gR0RLXzJC
VVRUT05fUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAgICAg
IHx8ICgoYWJzKGJ1dHRvbkV2ZW50LT54IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQueCgpKSA8IGRv
dWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAoYWJzKGJ1dHRvbkV2ZW50LT55IC0g
bV9wcmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAg
ICAgICAmJiAoZXZlbnRUaW1lIC0gbV9wcmV2aW91c0NsaWNrVGltZSA8IHN0YXRpY19jYXN0PGd1
aW50Pihkb3VibGVDbGlja1RpbWUpKQorICAgICAgICAgICAgJiYgKGJ1dHRvbkV2ZW50LT5idXR0
b24gPT0gbV9wcmV2aW91c0NsaWNrQnV0dG9uKSkpCisgICAgICAgIG1fY3VycmVudENsaWNrQ291
bnQrKzsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAxOworCisgICAg
Z2RvdWJsZSB4LCB5OworICAgIGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOwor
ICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQoeCwgeSk7CisgICAgbV9wcmV2aW91
c0NsaWNrQnV0dG9uID0gYnV0dG9uRXZlbnQtPmJ1dHRvbjsKKyAgICBtX3ByZXZpb3VzQ2xpY2tU
aW1lID0gZXZlbnRUaW1lOworCisgICAgcmV0dXJuIG1fY3VycmVudENsaWNrQ291bnQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrQ2xpY2tDb3VudGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY2Y2ExZGVjOTE4MDc5NGYyZjc1MTliOGJjNTJiNjc5NGIxZjk3Y2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMu
TC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3RrQ2xpY2tDb3Vu
dGVyX2gKKyNkZWZpbmUgR3RrQ2xpY2tDb3VudGVyX2gKKworI2luY2x1ZGUgIkludFBvaW50Lmgi
CisKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtDbGlja0NvdW50ZXIgeworcHVibGljOgorICAg
IEd0a0NsaWNrQ291bnRlcigpOworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIHNob3VsZFBy
b2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiopOworICAgIGludCBjbGlja0NvdW50Rm9y
R2RrQnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qKTsKKworcHJpdmF0ZToK
KyAgICBpbnQgbV9jdXJyZW50Q2xpY2tDb3VudDsKKyAgICBJbnRQb2ludCBtX3ByZXZpb3VzQ2xp
Y2tQb2ludDsKKyAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0NsaWNrQnV0dG9uOworICAgIGlu
dCBtX3ByZXZpb3VzQ2xpY2tUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhl
bHBlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xNTdhNjA3YTE4OWI1NGI4NjRhNTk4ZmZiODU4NTNhNThkN2IzNmI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5j
cHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxpYSBT
LkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNsaXBib2Fy
ZFV0aWxpdGllc0d0ay5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiR3RrVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9h
cmRIZWxwZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RydWN0IERyb3BwaW5nQ29udGV4dCB7CisgICAgRHJvcHBpbmdDb250ZXh0KEdka0RyYWdD
b250ZXh0KiBnZGtDb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCisgICAgICAgIDog
Z2RrQ29udGV4dChnZGtDb250ZXh0KQorICAgICAgICAsIGRhdGFPYmplY3QoRGF0YU9iamVjdEd0
azo6Y3JlYXRlKCkpCisgICAgICAgICwgbGFzdE1vdGlvblBvc2l0aW9uKHBvc2l0aW9uKQorICAg
ICAgICAsIGRyb3BIYXBwZW5lZChmYWxzZSkKKyAgICAgICAgLCBleGl0ZWRDYWxsYmFjaygwKQor
ICAgIHsKKyAgICB9CisKKyAgICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dDsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdDsKKyAgICBXZWJDb3JlOjpJbnRQ
b2ludCBsYXN0TW90aW9uUG9zaXRpb247CisgICAgaW50IHBlbmRpbmdEYXRhUmVxdWVzdHM7Cisg
ICAgYm9vbCBkcm9wSGFwcGVuZWQ7CisgICAgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENhbGxi
YWNrOworfTsKKwordHlwZWRlZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250
ZXh0Kj4gRHJvcHBpbmdDb250ZXh0TWFwOwordHlwZWRlZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0
KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDsKKworR3Rr
RHJhZ0FuZERyb3BIZWxwZXI6On5HdGtEcmFnQW5kRHJvcEhlbHBlcigpCit7CisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fZHJvcHBpbmdDb250ZXh0cyk7Cit9CisKK2Jvb2wgR3RrRHJhZ0FuZERyb3BI
ZWxwZXI6OmhhbmRsZURyYWdFbmQoR2RrRHJhZ0NvbnRleHQqIGRyYWdDb250ZXh0KQoreworICAg
IERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0Rh
dGFPYmplY3RzLmZpbmQoZHJhZ0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdn
aW5nRGF0YU9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZHJh
Z2dpbmdEYXRhT2JqZWN0cy5yZW1vdmUoaXRlcmF0b3IpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29u
dGV4dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5m
bykKK3sKKyAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1f
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBt
X2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShz
ZWxlY3Rpb25EYXRhLCBpbmZvLCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworfQorCitzdHJ1Y3Qg
SGFuZGxlRHJhZ0xhdGVyRGF0YSB7CisgICAgRHJvcHBpbmdDb250ZXh0KiBjb250ZXh0OworICAg
IEd0a0RyYWdBbmREcm9wSGVscGVyKiBnbHVlOworfTsKKworc3RhdGljIGdib29sZWFuIGhhbmRs
ZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2soSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSkKK3sKKyAg
ICBkYXRhLT5nbHVlLT5oYW5kbGVEcmFnTGVhdmVMYXRlcihkYXRhLT5jb250ZXh0KTsKKyAgICBk
ZWxldGUgZGF0YTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgR3RrRHJhZ0FuZERyb3BI
ZWxwZXI6OmhhbmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0Nv
bnRleHRzLmZpbmQoY29udGV4dC0+Z2RrQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1f
ZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhl
IHZpZXcgZG9lc24ndCBrbm93IGFib3V0IHRoZSBkcmFnIHlldCAodGhlcmUgYXJlIHN0aWxsIHBl
bmRpbmcgZGF0YSkKKyAgICAvLyByZXF1ZXN0cywgZG9uJ3QgdXBkYXRlIGl0IHdpdGggaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIGRyYWcuCisgICAgaWYgKGNvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVz
dHMpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9IGNv
bnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShjb250ZXh0
LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAg
ICAgICAgICAgICAgICAgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgIGNvbnRleHQtPmV4aXRlZENh
bGxiYWNrKG1fd2lkZ2V0LCAmZHJhZ0RhdGEsIGNvbnRleHQtPmRyb3BIYXBwZW5lZCk7CisKKyAg
ICBtX2Ryb3BwaW5nQ29udGV4dHMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICBkZWxldGUgY29udGV4
dDsKK30KKwordm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0Ry
YWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGVkQ2FsbGJhY2sgZXhpdGVkQ2FsbGJhY2sp
Cit7CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBp
bmdDb250ZXh0cy5maW5kKGdka0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIER1cmluZyBhIGRy
b3AgR1RLKyB3aWxsIGZpcmUgYSBkcmFnLWxlYXZlIHNpZ25hbCByaWdodCBiZWZvcmUgZmlyaW5n
CisgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9yIGRy
YWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCisgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJvcCwgc28g
c2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KKyAgICBIYW5kbGVE
cmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRlckRhdGE7CisgICAgZGF0YS0+
Y29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRDYWxs
YmFjayA9IGV4aXRlZENhbGxiYWNrOworICAgIGRhdGEtPmdsdWUgPSB0aGlzOworICAgIGdfdGlt
ZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xlYXZl
TGF0ZXJDYWxsYmFjayksIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBxdWVyeU5ld0Ryb3BDb250
ZXh0RGF0YShEcm9wcGluZ0NvbnRleHQqIGRyb3BDb250ZXh0LCBHdGtXaWRnZXQqIHdpZGdldCwg
Z3VpbnQgdGltZSkKK3sKKyAgICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCA9IGRyb3BDb250
ZXh0LT5nZGtDb250ZXh0OworICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNGb3JD
b250ZXh0KHdpZGdldCwgZ2RrQ29udGV4dCkpOworICAgIGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzID0gYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOyBpKyspCisgICAgICAgIGd0a19kcmFn
X2dldF9kYXRhKHdpZGdldCwgZ2RrQ29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSksIHRp
bWUpOworfQorCitEYXRhT2JqZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJh
Z01vdGlvbihHZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
LCB1bnNpZ25lZCB0aW1lKQoreworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0
ID0gMDsKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9w
cGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBp
bmdDb250ZXh0cy5lbmQoKSkgeworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBuZXcgRHJvcHBp
bmdDb250ZXh0KGNvbnRleHQsIHBvc2l0aW9uKTsKKyAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRz
LnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOworICAgICAgICBxdWVyeU5ld0Ryb3BDb250
ZXh0RGF0YShkcm9wcGluZ0NvbnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGRyb3Bw
aW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247CisgICAgfQorCisgICAg
Ly8gRG9uJ3Qgc2VuZCBhbnkgZHJhZyBpbmZvcm1hdGlvbiB0byBXZWJDb3JlIHVudGlsIHdlJ3Zl
IHJldHJpZXZlZCBhbGwKKyAgICAvLyB0aGUgZGF0YSBmb3IgdGhpcyBkcmFnIG9wZXJhdGlvbi4g
T3RoZXJ3aXNlIHdlJ2QgaGF2ZSB0byBibG9jayB0byB3YWl0CisgICAgLy8gZm9yIHRoZSBkcmFn
J3MgZGF0YS4KKyAgICBBU1NFUlQoZHJvcHBpbmdDb250ZXh0KTsKKyAgICBpZiAoZHJvcHBpbmdD
b250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID4gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOworfQorCitEYXRhT2Jq
ZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChHZGtE
cmFnQ29udGV4dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgdW5z
aWduZWQgaW5mbywgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIERyb3BwaW5nQ29udGV4dE1h
cDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsK
KyAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0
b3ItPnZhbHVlOworICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0tOwor
ICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxEYXRh
T2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+
ZGF0YU9iamVjdC5nZXQoKSk7CisKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFRoZSBjb29yZGluYXRlcyBw
YXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCisgICAgLy8g
aW5hY2N1cmF0ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90
aW9uIGV2ZW50LgorICAgIHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9z
aXRpb247CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3RzLCBz
dGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICByZXR1cm4gZHJvcHBp
bmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOworfQorCitEYXRhT2JqZWN0R3RrKiBHdGtEcmFn
QW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdD
b250ZXh0cy5maW5kKGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29u
dGV4dHMuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRHJvcHBpbmdDb250ZXh0KiBk
cm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgZHJvcHBpbmdDb250ZXh0LT5k
cm9wSGFwcGVuZWQgPSB0cnVlOworCisgICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9i
amVjdC5nZXQoKTsKK30KKwordm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6c3RhcnRlZERyYWco
R2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7Cisg
ICAgbV9kcmFnZ2luZ0RhdGFPYmplY3RzLnNldChjb250ZXh0LCBkYXRhT2JqZWN0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9H
dGtEcmFnQW5kRHJvcEhlbHBlci5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NGIwMmM0YjdhM2Y4NzMwMTM1Y2RmNjE2NGFlMDY5ZmFl
M2Q1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmRE
cm9wSGVscGVyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
SWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3Rr
RHJhZ0FuZERyb3BIZWxwZXJfaAorI2RlZmluZSBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCisKKyNp
bmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERyb3BwaW5nQ29udGV4dDsKK2Ns
YXNzIERyYWdEYXRhOworCit0eXBlZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dp
ZGdldCosIERyYWdEYXRhKiwgYm9vbCBkcm9wSGFwcGVuZWQpOworCitjbGFzcyBHdGtEcmFnQW5k
RHJvcEhlbHBlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxw
ZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgR3RrRHJh
Z0FuZERyb3BIZWxwZXIoKQorICAgICAgICA6IG1fd2lkZ2V0KDApCisgICAgeworICAgIH0KKyAg
ICB+R3RrRHJhZ0FuZERyb3BIZWxwZXIoKTsKKworICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KSB7IG1fd2lkZ2V0ID0gd2lkZ2V0OyB9CisgICAgYm9vbCBoYW5kbGVEcmFnRW5k
KEdka0RyYWdDb250ZXh0Kik7CisgICAgdm9pZCBoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29u
dGV4dCosIEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCBpbmZvKTsKKyAgICB2b2lkIGhhbmRsZURy
YWdMZWF2ZShHZGtEcmFnQ29udGV4dCosIERyYWdFeGl0ZWRDYWxsYmFjayk7CisgICAgdm9pZCBo
YW5kbGVEcmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQqKTsKKyAgICBEYXRhT2JqZWN0R3Rr
KiBoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCB1bnNp
Z25lZCB0aW1lKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdk
a0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8sIEludFBvaW50
Jik7CisgICAgRGF0YU9iamVjdEd0ayogaGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqKTsK
KyAgICB2b2lkIHN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiwgRGF0YU9iamVjdEd0ayopOwor
Citwcml2YXRlOgorICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgSGFzaE1hcDxHZGtEcmFn
Q29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+IG1fZHJvcHBpbmdDb250ZXh0czsKKyAgICBIYXNo
TWFwPEdka0RyYWdDb250ZXh0KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gbV9kcmFnZ2luZ0Rh
dGFPYmplY3RzOworfTsKKworfQorCisjZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5OTgw
YjU0NmEyYTQ5YzY0NjA1NDUxMTVlMDQ2YTEzNjViYzQyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMCwwICsxLDM1
MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtJ
bnB1dE1ldGhvZEZpbHRlci5oIgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisvLyBUaGUgV2luZG93
cyBjb21wb3NpdGlvbiBrZXkgZXZlbnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VTU0tFWS4gV2Ug
bmVlZCB0bworLy8gZW1pdCB0aGlzIGNvZGUgZm9yIHdlYiBjb21wYXRpYmlsaXR5IHJlYXNvbnMg
d2hlbiBrZXkgZXZlbnRzIHRyaWdnZXIKKy8vIGNvbXBvc2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vz
bid0IGhhdmUgYW4gZXF1aXZhbGVudCwgc28gd2Ugc2VuZCBWb2lkU3ltYm9sCisvLyBoZXJlIHRv
IFdlYkNvcmUuIFBsYXRmb3JtS2V5RXZlbnQga25vd3MgdG8gY29udmVydCB0aGlzIGNvZGUgaW50
bworLy8gVktfUFJPQ0VTU0tFWS4KK2NvbnN0IGludCBnQ29tcG9zaXRpb25FdmVudEtleUNvZGUg
PSBHREtfS0VZX1ZvaWRTeW1ib2w7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZv
aWQgaGFuZGxlQ29tbWl0Q2FsbGJhY2soR3RrSU1Db250ZXh0KiwgY29uc3QgY2hhciogY29tcG9z
aXRpb25TdHJpbmcsIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVy
LT5oYW5kbGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBoYW5k
bGVQcmVlZGl0U3RhcnRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRl
ciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Cit9CisKK3N0
YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3Rr
SW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRD
aGFuZ2VkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhHdGtJ
TUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+
aGFuZGxlUHJlZWRpdEVuZCgpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVXaWRnZXRSZWFsaXpl
KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAg
IEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAg
QVNTRVJUKHdpbmRvdyk7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coZmls
dGVyLT5jb250ZXh0KCksIHdpbmRvdyk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6
OnNldFdpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NFUlQoIW1fd2lkZ2V0KTsK
KworICAgIG1fd2lkZ2V0ID0gd2lkZ2V0OworICAgIGlmIChndGtfd2lkZ2V0X2dldF93aW5kb3co
bV93aWRnZXQpKQorICAgICAgICBoYW5kbGVXaWRnZXRSZWFsaXplKG1fd2lkZ2V0LCB0aGlzKTsK
KyAgICBlbHNlCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6
ZSIsIEdfQ0FMTEJBQ0soaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOworfQorCit2b2lkIEd0
a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGN1cnNvclJl
Y3QpCit7CisgICAgLy8gRG9uJ3QgbW92ZSB0aGUgd2luZG93IHVubGVzcyB0aGUgY3Vyc29yIGFj
dHVhbGx5IG1vdmVzIG1vcmUgdGhhbiAxMAorICAgIC8vIHBpeGVscy4gVGhpcyBwcmV2ZW50cyB1
cyBmcm9tIG1ha2luZyB0aGUgd2luZG93IGZsYXNoIGR1cmluZyBtaW5vcgorICAgIC8vIGN1cnNv
ciBhZGp1c3RtZW50cy4KKyAgICBzdGF0aWMgY29uc3QgaW50IHdpbmRvd01vdmVtZW50VGhyZXNo
b2xkID0gMTAgKiAxMDsKKyAgICBpZiAoY3Vyc29yUmVjdC5sb2NhdGlvbigpLmRpc3RhbmNlU3F1
YXJlZFRvUG9pbnQobV9sYXN0Q2FyZUxvY2F0aW9uKSA8IHdpbmRvd01vdmVtZW50VGhyZXNob2xk
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RDYXJlTG9jYXRpb24gPSBjdXJzb3JSZWN0
LmxvY2F0aW9uKCk7CisgICAgSW50UmVjdCB0cmFuc2xhdGVkUmVjdCA9IGN1cnNvclJlY3Q7CisK
KyAgICBBU1NFUlQobV93aWRnZXQpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAg
ICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAg
dHJhbnNsYXRlZFJlY3QubW92ZShhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisKKyAgICBH
ZGtSZWN0YW5nbGUgZ2RrQ3Vyc29yUmVjdCA9IGN1cnNvclJlY3Q7CisgICAgZ3RrX2ltX2NvbnRl
eHRfc2V0X2N1cnNvcl9sb2NhdGlvbihtX2NvbnRleHQuZ2V0KCksICZnZGtDdXJzb3JSZWN0KTsK
K30KKworR3RrSW5wdXRNZXRob2RGaWx0ZXI6Okd0a0lucHV0TWV0aG9kRmlsdGVyKCkKKyAgICA6
IG1fY3Vyc29yT2Zmc2V0KDApCisgICAgLCBtX2NvbnRleHQoYWRvcHRHUmVmKGd0a19pbV9tdWx0
aWNvbnRleHRfbmV3KCkpKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fZW5hYmxlZChmYWxz
ZSkKKyAgICAsIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseShmYWxzZSkKKyAgICAsIG1fZmlsdGVy
aW5nS2V5RXZlbnQoZmFsc2UpCisgICAgLCBtX3ByZWVkaXRDaGFuZ2VkKGZhbHNlKQorICAgICwg
bV9wcmV2ZW50TmV4dENvbW1pdChmYWxzZSkKKyAgICAsIG1fanVzdFNlbnRGYWtlS2V5VXAoZmFs
c2UpCisgICAgLCBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tF
WV9Wb2lkU3ltYm9sKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAi
Y29tbWl0IiwgR19DQUxMQkFDSyhoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJB
Q0soaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxl
UHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9j
b250ZXh0LmdldCgpLCAicHJlZWRpdC1lbmQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRFbmRD
YWxsYmFjayksIHRoaXMpOworfQorCitHdGtJbnB1dE1ldGhvZEZpbHRlcjo6fkd0a0lucHV0TWV0
aG9kRmlsdGVyKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
bV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVDb21taXRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyht
X2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRTdGFy
dENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRp
dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRs
ZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZnVuYyhtX3dpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlV2lk
Z2V0UmVhbGl6ZSksIHRoaXMpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRF
bmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX2VuYWJsZWQgPSBlbmFibGVkOworICAgIGlm
IChlbmFibGVkKQorICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0
KCkpOworICAgIGVsc2UKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4
dC5nZXQoKSk7Cit9CisKK2Jvb2wgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50
KEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBpZiAoIWNhbkVkaXQoKSB8fCAhbV9lbmFibGVk
KQorICAgICAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKKworICAgIG1fcHJl
ZWRpdENoYW5nZWQgPSBmYWxzZTsKKyAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gdHJ1ZTsKKwor
ICAgIHVuc2lnbmVkIGludCBsYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0g
bV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOworICAgIG1fbGFzdEZpbHRl
cmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKKworICAg
IGJvb2wgZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0
LmdldCgpLCBldmVudCk7CisgICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOworCisgICAg
Ym9vbCBqdXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7CisgICAgbV9qdXN0
U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBldmVu
dC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gU2ltcGxlIGlucHV0IG1ldGhvZHMgd29yayBzdWNoIHRoYXQgZXZlbiBub3JtYWwga2V5c3Ry
b2tlcyBmaXJlIHRoZQorICAgIC8vIGNvbW1pdCBzaWduYWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1
YXRpb25zIGFuZCB0cmVhdCB0aGVtIGFzIG5vcm1hbAorICAgIC8vIGtleSBldmVudHMsIHN1cHBs
eWluZyB0aGUgY29tbWl0IHN0cmluZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KKyAgICBpZiAoZmls
dGVyZWQgJiYgIW1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAm
JiBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgYm9vbCBy
ZXN1bHQgPSBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24p
OworICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09
IEdES19LRVlfUFJFU1MpIHsKKyAgICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29u
ZmlybWVkQ29tcG9zaXRpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4
dEN1cnJlbnRseSA9IHRydWU7CisgICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29k
ZVdpdGhOb1Jlc3VsdHMgPSBldmVudC0+a2V5dmFsOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlc3VsdCA9IHNlbmRLZXlFdmVudFdpdGhDb21w
b3NpdGlvblJlc3VsdHMoZXZlbnQpOworICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRp
b24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIElmIHdlIHBy
ZXZpb3VzbHkgZmlsdGVyZWQgYSBrZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVz
dWx0cy4gU3VwcHJlc3MKKyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVu
dCB0byBhdm9pZCBjb25mdXNpbmcgdGhlIHdlYiBjb250ZW50LgorICAgIGlmIChldmVudC0+dHlw
ZSA9PSBHREtfS0VZX1JFTEVBU0UgJiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVz
dWx0cyA9PSBldmVudC0+a2V5dmFsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEF0
IHRoaXMgcG9pbnQgYSBrZXlzdHJva2Ugd2FzIGVpdGhlcjoKKyAgICAvLyAxLiBVbmZpbHRlcmVk
CisgICAgLy8gMi4gQSBmaWx0ZXJlZCBrZXl1cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVk
aXRvckNsaWVudC5oIGRvZXNuJ3QKKyAgICAvLyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRz
LCB3ZSBzZW5kIGFueSBjb21wb3NpdGlvbiByZXN1bHRzIGJlZm9yZQorICAgIC8vICAgIHRoZSBr
ZXkgZXZlbnQuCisgICAgLy8gQm90aCBtaWdodCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Ig
bm90LgorICAgIC8vCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRp
b24gcmVzdWx0cyBiZWZvcmUgdGhlIGV2ZW50CisgICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVs
ZXMgb3BlcmF0ZSB0aGF0IHdheS4gRm9yIGV4YW1wbGUgKHRha2VuIGZyb20KKyAgICAvLyB0aGUg
Q2hyb21pdW0gc291cmNlKSwgdGhlIGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMg
c2VxdWVuY2UKKyAgICAvLyB3aGVuIHlvdSBwcmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgor
ICAgIC8vICAxLiBrZXlkb3duICdhJyAoZmlsdGVyZWQpCisgICAgLy8gIDIuIHByZWVkaXQgY2hh
bmdlZCB0byAiYSIKKyAgICAvLyAgMy4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQorICAgIC8vICA0
LiBrZXlkb3duIEJhY2tzcGFjZSAodW5maWx0ZXJlZCkKKyAgICAvLyAgNS4gY29tbWl0ICJhIgor
ICAgIC8vICA2LiBwcmVlZGl0IGVuZAorICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5p
c0VtcHR5KCkpCisgICAgICAgIGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIGlmIChtX3ByZWVk
aXRDaGFuZ2VkKQorICAgICAgICB1cGRhdGVQcmVlZGl0KCk7CisgICAgcmV0dXJuIHNlbmRTaW1w
bGVLZXlFdmVudChldmVudCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlm
eU1vdXNlQnV0dG9uUHJlc3MoKQoreworICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9u
IG1heSB0cmlnZ2VyIGEgc2VsZWN0aW9uIGNoYW5nZSwgd2hpY2gKKyAgICAvLyBtaWdodCB0cmln
Z2VyIGZ1cnRoZXIgdW53YW50ZWQgYWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVu
dAorICAgIC8vIHRoYXQgYnkgc2V0dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFs
c2UuCisgICAgaWYgKG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSkKKyAgICAgICAgY29uZmlybUN1
cnJlbnRDb21wb3NpdGlvbigpOworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNl
OworICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworfQorCit2b2lkIEd0a0lucHV0TWV0
aG9kRmlsdGVyOjpyZXNldENvbnRleHQoKQoreworCisgICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0
aGUgY3VycmVudCBXZWJDb3JlIGNvbXBvc2l0aW9uIGhlcmUsIGluIGNhc2UgdGhlCisgICAgLy8g
Y29tcG9zaXRpb24gd2FzIHNldCBvdXRzaWRlIHRoZSBHVEsrIElNRSBwYXRoICh2aWEgYSBzY3Jp
cHQsIGZvcgorICAgIC8vIGluc3RhbmNlKSBhbmQgd2UgYXJlbid0IHRyYWNraW5nIGl0LgorICAg
IGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpOworCisgICAgaWYgKCFtX2NvbXBvc2luZ1RleHRD
dXJyZW50bHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkg
PSBmYWxzZTsKKyAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKK30KKwordm9pZCBHdGtJ
bnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCkKK3sKKyAgICBtX3By
ZXZlbnROZXh0Q29tbWl0ID0gIW1fcHJlZWRpdC5pc0VtcHR5KCk7CisKKyAgICBndGtfaW1fY29u
dGV4dF9yZXNldChtX2NvbnRleHQuZ2V0KCkpOworCisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVu
dGx5ID0gZmFsc2U7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIG1fcHJl
ZWRpdCA9IFN0cmluZygpOworICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsK
K30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZEluKCkKK3sKKyAg
ICBtX2VuYWJsZWQgPSB0cnVlOworICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4
dC5nZXQoKSk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRP
dXQoKQoreworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQorICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0
aW9uKCk7CisgICAgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCk7CisgICAgZ3RrX2ltX2NvbnRl
eHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9lbmFibGVkID0gZmFsc2U7Cit9
CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7Cisg
ICAgY29uZmlybUNvbXBvc2l0aW9uVGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKKyAgICBt
X2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OnVwZGF0ZVByZWVkaXQoKQoreworICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBt
X2N1cnNvck9mZnNldCk7CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOworfQorCit2b2lk
IEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VL
ZXlFdmVudHMoUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kKQoreworICAgIEdPd25QdHI8R2Rr
RXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5r
ZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29t
cG9zaXRpb25FdmVudEtleUNvZGU7CisgICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVz
dWx0cygmZXZlbnQtPmtleSwgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CisKKyAgICBtX2Nv
bmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBD
b21wb3NpdGlvbikKKyAgICAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisK
KyAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKKyAgICBzZW5kU2ltcGxlS2V5RXZl
bnQoJmV2ZW50LT5rZXksIFN0cmluZygpLCBFdmVudEZha2VkKTsKKyAgICBtX2p1c3RTZW50RmFr
ZUtleVVwID0gdHJ1ZTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29t
bWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nKQoreworICAgIGlmIChtX3ByZXZlbnRO
ZXh0Q29tbWl0KSB7CisgICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNv
bXBvc2l0aW9uU3RyaW5nKSk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQg
b3V0c2lkZSBvZiBhIGtleSBldmVudCwganVzdCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBu
b3cuIElmIHdlIGFyZSBoYW5kbGluZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8g
bGF0ZXIgaG93IHRvIGhhbmRsZSB0aGlzLgorICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkK
KyAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBv
c2l0aW9uKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0
YXJ0KCkKK3sKKyAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAg
ICAgICByZXR1cm47CisgICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0
ID0gIiI7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFu
Z2VkKCkKK3sKKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093
blB0cjxnY2hhcj4gbmV3UHJlZWRpdDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9z
dHJpbmcobV9jb250ZXh0LmdldCgpLCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29y
T2Zmc2V0KTsKKworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAgIGlmIChz
dHJsZW4obmV3UHJlZWRpdC5nZXQoKSkgPiAwKQorICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENv
bW1pdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9wcmVlZGl0ID0gU3RyaW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKKyAg
ICBtX2N1cnNvck9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwg
c3RhdGljX2Nhc3Q8aW50PihtX3ByZWVkaXQubGVuZ3RoKCkpKTsKKworICAgIG1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSA9ICFtX3ByZWVkaXQuaXNFbXB0eSgpOworICAgIG1fcHJlZWRpdENoYW5n
ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICBzZW5k
Q29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Cit9CisKK3Zv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQoreworICAgIGlmICht
X3ByZXZlbnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcHJlZWRpdCA9IFN0cmluZygpOworICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKKyAgICBtX3By
ZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAg
ICAgICAgdXBkYXRlUHJlZWRpdCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lu
cHV0TWV0aG9kRmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU0ODI1MzQ4OGQxMDRlODU0M2JhMGYxMjhh
YTYzMzQxZWNhN2I2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
SW5wdXRNZXRob2RGaWx0ZXIuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAorI2RlZmlu
ZSBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a0lNQ29udGV4dCBHdGtJTUNvbnRl
eHQ7Cit0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHdGtJbnB1dE1ldGhvZEZpbHRlciB7CitwdWJsaWM6CisgICAgR3Rr
SW5wdXRNZXRob2RGaWx0ZXIoKTsKKyAgICB+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKKworICAg
IGJvb2wgZmlsdGVyS2V5RXZlbnQoR2RrRXZlbnRLZXkqKTsKKyAgICB2b2lkIG5vdGlmeU1vdXNl
QnV0dG9uUHJlc3MoKTsKKyAgICB2b2lkIG5vdGlmeUZvY3VzZWRJbigpOworICAgIHZvaWQgbm90
aWZ5Rm9jdXNlZE91dCgpOworICAgIHZvaWQgcmVzZXRDb250ZXh0KCk7CisgICAgdm9pZCBzZXRF
bmFibGVkKGJvb2wpOworCisgICAgdm9pZCBoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9z
aXRpb25TdHJpbmcpOworICAgIHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKKyAgICB2b2lk
IGhhbmRsZVByZWVkaXRTdGFydCgpOworICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOworCisg
ICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oKTsKKyAgICB2b2lkIGNhbmNlbENvbnRleHRDb21w
b3NpdGlvbigpOworICAgIHZvaWQgdXBkYXRlUHJlZWRpdCgpOworICAgIHZvaWQgc2V0Q3Vyc29y
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhdGlvbik7CisKKyAgICBHdGtJTUNvbnRleHQqIGNvbnRl
eHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKworICAgIGVudW0gRXZlbnRGYWtlZEZv
ckNvbXBvc2l0aW9uIHsKKyAgICAgICAgRXZlbnRGYWtlZCwKKyAgICAgICAgRXZlbnROb3RGYWtl
ZAorICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBlbnVtIFJlc3VsdHNUb1NlbmQgeworICAgICAg
ICBQcmVlZGl0ID0gMSA8PCAxLAorICAgICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKKyAgICAg
ICAgUHJlZWRpdEFuZENvbXBvc2l0aW9uID0gUHJlZWRpdCArIENvbXBvc2l0aW9uCisgICAgfTsK
KworICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCopOworICAgIHZpcnR1YWwgYm9vbCBjYW5F
ZGl0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqLCBXVEY6OlN0cmluZyBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29t
cG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0g
UHJlZWRpdEFuZENvbXBvc2l0aW9uLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5v
dEZha2VkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3Ry
aW5nIGNvbXBvc2l0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29t
cG9zaXRpb24oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlv
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JP
ZmZzZXQpID0gMDsKKworICAgIFdURjo6U3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247Cisg
ICAgV1RGOjpTdHJpbmcgbV9wcmVlZGl0OworICAgIGludCBtX2N1cnNvck9mZnNldDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50
cyhSZXN1bHRzVG9TZW5kKTsKKworICAgIEdSZWZQdHI8R3RrSU1Db250ZXh0PiBtX2NvbnRleHQ7
CisgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBib29s
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseTsKKyAgICBib29sIG1fZmlsdGVyaW5nS2V5RXZlbnQ7
CisgICAgYm9vbCBtX3ByZWVkaXRDaGFuZ2VkOworICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbW1p
dDsKKyAgICBib29sIG1fanVzdFNlbnRGYWtlS2V5VXA7CisgICAgdW5zaWduZWQgaW50IG1fbGFz
dEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0czsKKyAgICBJbnRQb2ludCBtX2xhc3RD
YXJlTG9jYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBH
dGtJbnB1dE1ldGhvZEZpbHRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a1BsdWdpbldpZGdldC5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGNmMWI2ODBkYmFiYTM2MWZkMWM1MDNkNGI2NmZjOWExYTljZTI5OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNw
cApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtQbHVnaW5XaWRnZXQuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJT
Y3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworR3RrUGx1Z2luV2lkZ2V0OjpHdGtQbHVnaW5XaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQp
CisgICAgOiBXaWRnZXQod2lkZ2V0KQoreworICAgIGd0a193aWRnZXRfaGlkZSh3aWRnZXQpOwor
fQorCitHdGtQbHVnaW5XaWRnZXQ6On5HdGtQbHVnaW5XaWRnZXQoKQoreworICAgIGd0a19jb250
YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBsYXRmb3Jt
V2lkZ2V0KCkpKSwgcGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgR3RrUGx1Z2luV2lkZ2V0
OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb3JlUmVjdCkKK3sKKyAgICAvKiBubyBu
ZWVkIHRvICovCisgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93KHBsYXRmb3JtV2lk
Z2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBpZiAoIXdpbmRvdykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSBjb3JlUmVjdDsKKyAgICBn
ZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCBGQUxTRSk7Cit9CisKK3Zv
aWQgR3RrUGx1Z2luV2lkZ2V0OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCit7CisgICAgSW50UmVjdCBy
ZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgSW50UG9pbnQgbG9jID0gcGFyZW50KCktPmNvbnRlbnRz
VG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IGxvYy54KCksIGxvYy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworCisg
ICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KHBsYXRmb3JtV2lkZ2V0KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHBsYXRm
b3JtV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1X
aWRnZXQoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1
Z2luV2lkZ2V0LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjczNzNlYzU5MGIyZjIyMWUzYmI5ODE3ZDBkMzM3ZWUxZjQzM2Q3OTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHdGtQbHVnaW5X
aWRnZXRfaAorI2RlZmluZSBHdGtQbHVnaW5XaWRnZXRfaAorCisjaW5jbHVkZSAiV2lkZ2V0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBHdGtQbHVnaW5XaWRnZXQgOiBwdWJs
aWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEd0a1BsdWdpbldpZGdldChHdGtXaWRn
ZXQqKTsKKyAgICAgICAgdmlydHVhbCB+R3RrUGx1Z2luV2lkZ2V0KCk7CisgICAgICAgIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2b2lkIGZyYW1lUmVjdHND
aGFuZ2VkKCk7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVu
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmY1N2ExN2RjMzIzYmNmN2IzNTdiMjc3ZjA4MGFkZWYwOTEzNTJm
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNw
cApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1
cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKworI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgZ1NlYXJjaFRpbWVvdXRNcyA9IDEw
MDA7CisKK0d0a1BvcHVwTWVudTo6R3RrUG9wdXBNZW51KCkKKyAgICA6IG1fcG9wdXAoZ3RrX21l
bnVfbmV3KCkpCisgICAgLCBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIoMCkKKyAgICAsIG1f
Y3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSgwKQoreworICAgIG1fa2V5UHJlc3NIYW5kbGVySUQg
PSBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAuZ2V0KCksICJrZXktcHJlc3MtZXZlbnQiLCBHX0NB
TExCQUNLKEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7Cit9CisK
K0d0a1BvcHVwTWVudTo6fkd0a1BvcHVwTWVudSgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KG1fcG9wdXAuZ2V0KCksIG1fa2V5UHJlc3NIYW5kbGVySUQpOworfQorCit2b2lk
IEd0a1BvcHVwTWVudTo6Y2xlYXIoKQoreworICAgIGd0a19jb250YWluZXJfZm9yZWFjaChHVEtf
Q09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PEd0a0NhbGxiYWNrPiht
ZW51UmVtb3ZlSXRlbSksIHRoaXMpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6YXBwZW5kU2Vw
YXJhdG9yKCkKK3sKKyAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX3NlcGFyYXRvcl9tZW51
X2l0ZW1fbmV3KCk7CisgICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1f
cG9wdXAuZ2V0KCkpLCBtZW51SXRlbSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsK
K30KKwordm9pZCBHdGtQb3B1cE1lbnU6OmFwcGVuZEl0ZW0oR3RrQWN0aW9uKiBhY3Rpb24pCit7
CisgICAgR3RrV2lkZ2V0KiBtZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRlbShh
Y3Rpb24pOworICAgIGd0a193aWRnZXRfc2V0X3Rvb2x0aXBfdGV4dChtZW51SXRlbSwgZ3RrX2Fj
dGlvbl9nZXRfdG9vbHRpcChhY3Rpb24pKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1lbnVJdGVt
LCAic2VsZWN0IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayks
IHRoaXMpOworICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVw
LmdldCgpKSwgbWVudUl0ZW0pOworCisgICAgaWYgKGd0a19hY3Rpb25faXNfdmlzaWJsZShhY3Rp
b24pKQorICAgICAgICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOworfQorCit2b2lkIEd0a1Bv
cHVwTWVudTo6cG9wVXAoY29uc3QgSW50U2l6ZSYgbWVudVNpemUsIGNvbnN0IEludFBvaW50JiBt
ZW51UG9zaXRpb24sIGludCBpdGVtQ291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2
ZW50KiBldmVudCkKK3sKKyAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOworICAgIG1fbWVu
dVBvc2l0aW9uID0gbWVudVBvc2l0aW9uOworICAgIGd0a19tZW51X3NldF9hY3RpdmUoR1RLX01F
TlUobV9wb3B1cC5nZXQoKSksIHNlbGVjdGVkSXRlbSk7CisKKyAgICAvLyBUaGlzIGFwcHJvYWNo
IGZvbGxvd3MgdGhlIG9uZSBpbiBndGtjb21ib2JveC5jLgorICAgIEd0a1JlcXVpc2l0aW9uIHJl
cXVpc2l0aW9uOworICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgp
LCAtMSwgLTEpOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX3dpZGdldF9zaXpl
X3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uKTsKKyNlbHNlCisgICAgZ3RrX3dp
ZGdldF9nZXRfcHJlZmVycmVkX3NpemUobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uLCAwKTsK
KyNlbmRpZgorCisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCks
IHN0ZDo6bWF4KG1lbnVTaXplLndpZHRoKCksIHJlcXVpc2l0aW9uLndpZHRoKSwgLTEpOworCisg
ICAgR0xpc3QqIGNoaWxkcmVuID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRB
SU5FUihtX3BvcHVwLmdldCgpKSk7CisgICAgR0xpc3QqIHAgPSBjaGlsZHJlbjsKKyAgICBpZiAo
aXRlbUNvdW50KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbUNvdW50OyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChpID4gc2VsZWN0ZWRJdGVtKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBHdGtXaWRnZXQqIGl0ZW0gPSByZWludGVycHJldF9jYXN0PEd0
a1dpZGdldCo+KHAtPmRhdGEpOworICAgICAgICAgICAgR3RrUmVxdWlzaXRpb24gaXRlbVJlcXVp
c2l0aW9uOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgICAgICAgICBndGtfd2lkZ2V0
X2dldF9jaGlsZF9yZXF1aXNpdGlvbihpdGVtLCAmaXRlbVJlcXVpc2l0aW9uKTsKKyNlbHNlCisg
ICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShpdGVtLCAmaXRlbVJlcXVp
c2l0aW9uLCAwKTsKKyNlbmRpZgorICAgICAgICAgICAgbV9tZW51UG9zaXRpb24uc2V0WShtX21l
bnVQb3NpdGlvbi55KCkgLSBpdGVtUmVxdWlzaXRpb24uaGVpZ2h0KTsKKworICAgICAgICAgICAg
cCA9IGdfbGlzdF9uZXh0KHApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Q2VudGVyIHZlcnRpY2FsbHkgdGhlIGVtcHR5IHBvcHVwIGluIHRoZSBjb21ibyBib3ggYXJlYS4K
KyAgICAgICAgbV9tZW51UG9zaXRpb24uc2V0WShtX21lbnVQb3NpdGlvbi55KCkgLSBtZW51U2l6
ZS5oZWlnaHQoKSAvIDIpOworICAgIH0KKyAgICBnX2xpc3RfZnJlZShjaGlsZHJlbik7CisKKyAg
ICBndWludCBidXR0b247CisgICAgZ3VpbnQzMiBhY3RpdmF0ZVRpbWU7CisgICAgaWYgKGV2ZW50
KSB7CisgICAgICAgIGJ1dHRvbiA9IGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MgPyBl
dmVudC0+YnV0dG9uLmJ1dHRvbiA6IDE7CisgICAgICAgIGFjdGl2YXRlVGltZSA9IGdka19ldmVu
dF9nZXRfdGltZShldmVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnV0dG9uID0gMTsKKyAg
ICAgICAgYWN0aXZhdGVUaW1lID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICB9CisKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorICAgIGd0a19tZW51X3BvcHVwKEdUS19NRU5VKG1fcG9wdXAuZ2V0
KCkpLCAwLCAwLCByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3Np
dGlvbkZ1bmN0aW9uKSwgdGhpcywgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOworI2Vsc2UKKyAgICBn
dGtfbWVudV9wb3B1cF9mb3JfZGV2aWNlKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBldmVudCA/
IGdka19ldmVudF9nZXRfZGV2aWNlKGV2ZW50KSA6IDAsIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQ
b3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywgMCwgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOworI2VuZGlm
Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51Ojpwb3BEb3duKCkKK3sKKyAgICBndGtfbWVudV9wb3Bk
b3duKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0
ZSgpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6bWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgIEFTU0VSVChwb3B1cE1lbnUt
Pm1fcG9wdXApOworICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocG9wdXBN
ZW51LT5tX3BvcHVwLmdldCgpKSwgd2lkZ2V0KTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6Om1l
bnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiog
cHVzaEluLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICAqeCA9IHBvcHVwTWVudS0+
bV9tZW51UG9zaXRpb24ueCgpOworICAgICp5ID0gcG9wdXBNZW51LT5tX21lbnVQb3NpdGlvbi55
KCk7CisgICAgKnB1c2hJbiA9IHRydWU7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjpyZXNldFR5
cGVBaGVhZEZpbmRTdGF0ZSgpCit7CisgICAgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0g
MDsKKyAgICBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIgPSAwOworICAgIG1fY3VycmVudFNl
YXJjaFN0cmluZyA9ICIiOworfQorCitib29sIEd0a1BvcHVwTWVudTo6dHlwZUFoZWFkRmluZChH
ZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgLy8gSWYgd2Ugd2VyZSBnaXZlbiBhIG5vbi1wcmlu
dGFibGUgY2hhcmFjdGVyIGp1c3Qgc2tpcCBpdC4KKyAgICBndW5pY2hhciB1bmljb2RlQ2hhcmFj
dGVyID0gZ2RrX2tleXZhbF90b191bmljb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGlmICghZ191
bmljaGFyX2lzcHJpbnQodW5pY29kZUNoYXJhY3RlcikpIHsKKyAgICAgICAgcmVzZXRUeXBlQWhl
YWRGaW5kU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGdsb25n
IGNoYXJhY3RlcnNXcml0dGVuOworICAgIEdPd25QdHI8Z3VuaWNoYXIyPiB1dGYxNlN0cmluZyhn
X3VjczRfdG9fdXRmMTYoJnVuaWNvZGVDaGFyYWN0ZXIsIDEsIDAsICZjaGFyYWN0ZXJzV3JpdHRl
biwgMCkpOworICAgIGlmICghdXRmMTZTdHJpbmcpIHsKKyAgICAgICAgcmVzZXRUeXBlQWhlYWRG
aW5kU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRo
ZSBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGUgdXNlciBp
cyBwcm9iYWJseSB0cnlpbmcgdG8KKyAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBtZW51bGlzdCBl
bnRyaWVzLiBUaGlzIG1hdGNoZXMgdGhlIFdlYkNvcmUgYmVoYXZpb3IgZm9yIGNvbGxhcHNlZAor
ICAgIC8vIG1lbnVsaXN0cy4KKyAgICBib29sIHJlcGVhdGluZ0NoYXJhY3RlciA9IHVuaWNvZGVD
aGFyYWN0ZXIgIT0gbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOworICAgIGlmIChldmVudC0+
dGltZSAtIG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFtcCA+IGdTZWFyY2hUaW1lb3V0TXMpCisg
ICAgICAgIG1fY3VycmVudFNlYXJjaFN0cmluZyA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PFVD
aGFyKj4odXRmMTZTdHJpbmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbik7CisgICAgZWxzZSBp
ZiAocmVwZWF0aW5nQ2hhcmFjdGVyKQorICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcuYXBw
ZW5kKFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJpbmcuZ2V0KCkpLCBj
aGFyYWN0ZXJzV3JpdHRlbikpOworCisgICAgbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wID0g
ZXZlbnQtPnRpbWU7CisgICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyID0gdW5pY29kZUNo
YXJhY3RlcjsKKworICAgIC8vIExpa2UgdGhlIENocm9taXVtIHBvcnQsIHdlIGNhc2UgZm9sZCBi
ZWZvcmUgc2VhcmNoaW5nLCBiZWNhdXNlIAorICAgIC8vIHN0cm5jbXAgZG9lcyBub3QgaGFuZGxl
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgIEdPd25QdHI8Z2NoYXI+IHNlYXJjaFN0cmluZ1dp
dGhDYXNlRm9sZGVkKGdfdXRmOF9jYXNlZm9sZChtX2N1cnJlbnRTZWFyY2hTdHJpbmcudXRmOCgp
LmRhdGEoKSwgLTEpKTsKKyAgICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3RybGVuKHNlYXJjaFN0
cmluZ1dpdGhDYXNlRm9sZGVkLmdldCgpKTsKKworICAgIEdMaXN0KiBjaGlsZHJlbiA9IGd0a19j
b250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSkpOworICAg
IGlmICghY2hpbGRyZW4pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYgYSBtZW51
IGl0ZW0gaGFzIGFscmVhZHkgYmVlbiBzZWxlY3RlZCwgc3RhcnQgc2VhcmNoaW5nIGZyb20gdGhl
IGN1cnJlbnQKKyAgICAvLyBpdGVtIGRvd24gdGhlIGxpc3QuIFRoaXMgd2lsbCBtYWtlIG11bHRp
cGxlIGtleSBwcmVzc2VzIG9mIHRoZSBzYW1lIGNoYXJhY3RlcgorICAgIC8vIGFkdmFuY2UgdGhl
IHNlbGVjdGlvbi4KKyAgICBHTGlzdCogY3VycmVudENoaWxkID0gY2hpbGRyZW47CisgICAgaWYg
KG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSkgeworICAgICAgICBjdXJyZW50Q2hpbGQgPSBn
X2xpc3RfZmluZChjaGlsZHJlbiwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKTsKKyAgICAg
ICAgaWYgKCFjdXJyZW50Q2hpbGQpIHsKKyAgICAgICAgICAgIG1fY3VycmVudGx5U2VsZWN0ZWRN
ZW51SXRlbSA9IDA7CisgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFJlcGVhdGluZyBjaGFyYWN0ZXJzIHNob3VsZCBpdGVyYXRlLgor
ICAgICAgICBpZiAocmVwZWF0aW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICBpZiAoR0xpc3Qq
IG5leHRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCkpCisgICAgICAgICAgICAgICAg
Y3VycmVudENoaWxkID0gbmV4dENoaWxkOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpc3Qq
IGZpcnN0Q2hpbGQgPSBjdXJyZW50Q2hpbGQ7CisgICAgZG8geworICAgICAgICBjdXJyZW50Q2hp
bGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hpbGQpOworICAgICAgICBpZiAoIWN1cnJlbnRDaGls
ZCkKKyAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworCisgICAgICAgIEdPd25Q
dHI8Z2NoYXI+IGl0ZW1UZXh0KGdfdXRmOF9jYXNlZm9sZChndGtfbWVudV9pdGVtX2dldF9sYWJl
bChHVEtfTUVOVV9JVEVNKGN1cnJlbnRDaGlsZC0+ZGF0YSkpLCAtMSkpOworICAgICAgICBpZiAo
IXN0cm5jbXAoc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCksIGl0ZW1UZXh0LmdldCgp
LCBwcmVmaXhMZW5ndGgpKSB7CisgICAgICAgICAgICBndGtfbWVudV9zaGVsbF9zZWxlY3RfaXRl
bShHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgR1RLX1dJREdFVChjdXJyZW50Q2hpbGQt
PmRhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3Vy
cmVudENoaWxkICE9IGZpcnN0Q2hpbGQpOworCisgICAgZ19saXN0X2ZyZWUoY2hpbGRyZW4pOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6c2VsZWN0SXRlbUNhbGxi
YWNrKEd0a01lbnVJdGVtKiBpdGVtLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICBw
b3B1cE1lbnUtPm1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IEdUS19XSURHRVQoaXRlbSk7
Cit9CisKK2dib29sZWFuIEd0a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIEd0a1BvcHVwTWVudSogcG9wdXBNZW51
KQoreworICAgIHJldHVybiBwb3B1cE1lbnUtPnR5cGVBaGVhZEZpbmQoZXZlbnQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0
a1BvcHVwTWVudS5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43YzZhZDQ0ZjdkZDE2NjQwYzQyZjU5ZjJiYWIwNDBiMzZlZjgzNzMwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIEd0a1BvcHVwTWVudV9oCisjZGVmaW5lIEd0a1BvcHVwTWVudV9oCisKKyNpbmNsdWRl
ICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrUG9wdXBNZW51IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHdGtQb3B1cE1lbnUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3RrUG9wdXBNZW51PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHdGtQb3B1cE1lbnUoKSk7
CisgICAgfQorCisgICAgfkd0a1BvcHVwTWVudSgpOworCisgICAgR3RrV2lkZ2V0KiBwbGF0Zm9y
bU1lbnUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwLmdldCgpOyB9CisgICAgdm9pZCBjbGVhcigp
OworICAgIHZvaWQgYXBwZW5kU2VwYXJhdG9yKCk7CisgICAgdm9pZCBhcHBlbmRJdGVtKEd0a0Fj
dGlvbiopOworICAgIHZvaWQgcG9wVXAoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFBvaW50Jiwg
aW50IGl0ZW1zQ291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2ZW50Kik7CisgICAg
dm9pZCBwb3BEb3duKCk7CisKK3ByaXZhdGU6CisgICAgR3RrUG9wdXBNZW51KCk7CisKKyAgICB2
b2lkIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7CisgICAgYm9vbCB0eXBlQWhlYWRGaW5kKEdk
a0V2ZW50S2V5Kik7CisKKyAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtNZW51
SXRlbSosIEd0a1BvcHVwTWVudSopOworICAgIHN0YXRpYyB2b2lkIG1lbnVQb3NpdGlvbkZ1bmN0
aW9uKEd0a01lbnUqLCBnaW50KiwgZ2ludCosIGdib29sZWFuKiwgR3RrUG9wdXBNZW51Kik7Cisg
ICAgc3RhdGljIHZvaWQgbWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiwgR3RrUG9wdXBNZW51Kik7
CisgICAgc3RhdGljIHZvaWQgc2VsZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiwgR3RrUG9w
dXBNZW51Kik7CisgICAgc3RhdGljIGdib29sZWFuIGtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtX
aWRnZXQqLCBHZGtFdmVudEtleSosIEd0a1BvcHVwTWVudSopOworCisgICAgR1JlZlB0cjxHdGtX
aWRnZXQ+IG1fcG9wdXA7CisgICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247CisgICAgU3RyaW5n
IG1fY3VycmVudFNlYXJjaFN0cmluZzsKKyAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRU
aW1lc3RhbXA7CisgICAgdW5zaWduZWQgaW50IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsK
KyAgICBHdGtXaWRnZXQqIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbTsKKyAgICB1bnNpZ25l
ZCBpbnQgbV9rZXlQcmVzc0hhbmRsZXJJRDsKK307CisKK30KKworI2VuZGlmIC8vIEd0a1BvcHVw
TWVudV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk4YjVi
YTM2Mjg0ZDhjMTc5YWRmNDFjZDQ2MjBlMzlkZWRhOTgwYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5o
IgorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2lu
dChHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFjdHVhbGx5IGEgdmVyeSB0cmlja3kgb3BlcmF0aW9uIGFuZCB0aGUgcmVz
dWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZAorICAgIC8vIG9ubHkgYmUgdGhvdWdodCBvZiBh
cyBhIGd1ZXNzLiBGb3IgaW5zdGFuY2UsIHNvbWV0aW1lcyBpdCBtYXkgbm90IGNvcnJlY3RseSB0
YWtlIGludG8KKyAgICAvLyBhY2NvdW50IHdpbmRvdyBkZWNvcmF0aW9ucy4KKworICAgIEd0a1dp
ZGdldCogdG9wbGV2ZWxXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOwor
ICAgIGlmICghdG9wbGV2ZWxXaWRnZXQgfHwgIWd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2
ZWxXaWRnZXQpIHx8ICFHVEtfSVNfV0lORE9XKHRvcGxldmVsV2lkZ2V0KSkKKyAgICAgICAgcmV0
dXJuIHBvaW50OworCisgICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3codG9wbGV2ZWxXaWRnZXQpOworICAgIGlmICghZ2RrV2luZG93KQorICAgICAgICByZXR1
cm4gcG9pbnQ7CisKKyAgICBpbnQgeEluV2luZG93LCB5SW5XaW5kb3c7CisgICAgZ3RrX3dpZGdl
dF90cmFuc2xhdGVfY29vcmRpbmF0ZXMod2lkZ2V0LCB0b3BsZXZlbFdpZGdldCwgcG9pbnQueCgp
LCBwb2ludC55KCksICZ4SW5XaW5kb3csICZ5SW5XaW5kb3cpOworCisgICAgaW50IHdpbmRvd09y
aWdpblgsIHdpbmRvd09yaWdpblk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGdka1dpbmRv
dywgJndpbmRvd09yaWdpblgsICZ3aW5kb3dPcmlnaW5ZKTsKKworICAgIHJldHVybiBJbnRQb2lu
dCh3aW5kb3dPcmlnaW5YICsgeEluV2luZG93LCB3aW5kb3dPcmlnaW5ZICsgeUluV2luZG93KTsK
K30KKworYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBHVEtf
SVNfV0lORE9XKHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvR3RrVXRpbGl0aWVzLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI5YmRkZTY1OThmMDJkMzM1N2EwMGE3MTMzODk2YmFjNTRjMmRhMmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCkBAIC0wLDAg
KzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3RrVXRpbGl0aWVzX2ggCisj
ZGVmaW5lIEd0a1V0aWxpdGllc19oIAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElu
dFBvaW50OworCitJbnRQb2ludCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEd0a1dp
ZGdldCosIGNvbnN0IEludFBvaW50Jik7Citib29sIHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdp
bmRvdyhHdGtXaWRnZXQqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
R3RrVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWMyZjg0YzJlZjg4NjZjMDNjMDZmMTZkYzIxNTlmZmVhOTk3Y2RjOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jCkBAIC0wLDAgKzEsMzgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQor
I2luY2x1ZGUgPFgxMS9YYXRvbS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKwor
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKK3ZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0
X3ZhbHVlKEd0a0FkanVzdG1lbnQqIGFkanVzbWVudCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICAg
ICAgbV9hZGp1c3RtZW50LT52YWx1ZSA9IG1fY3VycmVudFBvczsKKyAgICAgICAgZ3RrX2FkanVz
dG1lbnRfdmFsdWVfY2hhbmdlZChtX2FkanVzdG1lbnQpOworfQorCit2b2lkIGd0a19hZGp1c3Rt
ZW50X2NvbmZpZ3VyZShHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBn
ZG91YmxlIGxvd2VyLCBnZG91YmxlIHVwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2RvdWJsZSBzdGVwSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUg
cGFnZVNpemUpCit7CisgICAgZ19vYmplY3RfZnJlZXplX25vdGlmeShHX09CSkVDVChhZGp1c3Rt
ZW50KSk7CisKKyAgICBnX29iamVjdF9zZXQoYWRqdXN0bWVudCwKKyAgICAgICAgICAgICAgICAg
Imxvd2VyIiwgbG93ZXIsCisgICAgICAgICAgICAgICAgICJ1cHBlciIsIHVwcGVyLAorICAgICAg
ICAgICAgICAgICAic3RlcC1pbmNyZW1lbnQiLCBzdGVwSW5jcmVtZW50LAorICAgICAgICAgICAg
ICAgICAicGFnZS1pbmNyZW1lbnQiLCBwYWdlSW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAi
cGFnZS1zaXplIiwgcGFnZVNpemUsCisgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19v
YmplY3RfdGhhd19ub3RpZnkoR19PQkpFQ1QoYWRqdXN0bWVudCkpOworCisgICAgZ3RrX2FkanVz
dG1lbnRfY2hhbmdlZChhZGp1c3RtZW50KTsKKyAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFu
Z2VkKGFkanVzdG1lbnQpOworfQorI2VuZGlmCisKK0dka0RldmljZSAqZ2V0RGVmYXVsdEdES1Bv
aW50ZXJEZXZpY2UoR2RrV2luZG93KiB3aW5kb3cpCit7CisjaWZuZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisgICAgR2RrRGV2aWNlTWFuYWdlciAqbWFuYWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2
aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKKyAgICByZXR1cm4g
Z2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKTsKKyNlbHNlCisg
ICAgcmV0dXJuIGdka19kZXZpY2VfZ2V0X2NvcmVfcG9pbnRlcigpOworI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCit9CisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCit2b2lk
IGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdp
bnQgeSwgZ2ludCogcm9vdFgsIGdpbnQqIHJvb3RZKQoreworICAgIGdka193aW5kb3dfZ2V0X3Jv
b3Rfb3JpZ2luKHdpbmRvdywgcm9vdFgsIHJvb3RZKTsKKyAgICAqcm9vdFggPSAqcm9vdFggKyB4
OworICAgICpyb290WSA9ICpyb290WSArIHk7Cit9CisjZW5kaWYKKworR2RrQ3Vyc29yICogYmxh
bmtDdXJzb3IoKQoreworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorICAgIHJldHVy
biBnZGtfY3Vyc29yX25ldyhHREtfQkxBTktfQ1VSU09SKTsKKyNlbHNlCisgICAgR2RrQ3Vyc29y
ICogY3Vyc29yOworICAgIEdka1BpeG1hcCAqIHNvdXJjZTsKKyAgICBHZGtQaXhtYXAgKiBtYXNr
OworICAgIEdka0NvbG9yIGZvcmVncm91bmQgPSB7IDAsIDY1NTM1LCAwLCAwIH07IC8vIFJlZC4K
KyAgICBHZGtDb2xvciBiYWNrZ3JvdW5kID0geyAwLCAwLCAwLCA2NTUzNSB9OyAvLyBCbHVlLgor
ICAgIHN0YXRpYyBnY2hhciBjdXJzb3JCaXRzW10gPSB7MHgwLCAweDAsIDB4MCwgMHgwLCAweDAs
IDB4MCwgMHgwLCAweDB9OworCisgICAgc291cmNlID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9k
YXRhKDAsIGN1cnNvckJpdHMsIDgsIDgpOworICAgIG1hc2sgPSBnZGtfYml0bWFwX2NyZWF0ZV9m
cm9tX2RhdGEoMCwgY3Vyc29yQml0cywgOCwgOCk7CisgICAgY3Vyc29yID0gZ2RrX2N1cnNvcl9u
ZXdfZnJvbV9waXhtYXAoc291cmNlLCBtYXNrLCAmZm9yZWdyb3VuZCwgJmJhY2tncm91bmQsIDgs
IDgpOworICAgIGdka19waXhtYXBfdW5yZWYoc291cmNlKTsKKyAgICBnZGtfcGl4bWFwX3VucmVm
KG1hc2spOworICAgIHJldHVybiBjdXJzb3I7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMTYsIDApCit9CisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCitjb25zdCBn
Y2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qIG1lbnVJdGVtKQorewor
ICAgIEd0a1dpZGdldCAqIGxhYmVsID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtZW51SXRl
bSkpOworICAgIGlmIChHVEtfSVNfTEFCRUwobGFiZWwpKQorICAgICAgICByZXR1cm4gZ3RrX2xh
YmVsX2dldF90ZXh0KEdUS19MQUJFTChsYWJlbCkpOworICAgIHJldHVybiAwOworfQorI2VuZGlm
IC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKK3N0YXRpYyBjYWlyb19mb3JtYXRfdAorZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChj
YWlyb19jb250ZW50X3QgY29udGVudCkKK3sKKyAgICBzd2l0Y2ggKGNvbnRlbnQpIHsKKyAgICBj
YXNlIENBSVJPX0NPTlRFTlRfQ09MT1I6CisgICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfUkdC
MjQ7CisgICAgY2FzZSBDQUlST19DT05URU5UX0FMUEhBOgorICAgICAgICByZXR1cm4gQ0FJUk9f
Rk9STUFUX0E4OworICAgIGNhc2UgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQToKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0FSR0IzMjsKKyAgICB9Cit9CisKK3N0
YXRpYyBjYWlyb19zdXJmYWNlX3QqCitnZGtfY2Fpcm9fc3VyZmFjZV9jb2VyY2VfdG9faW1hZ2Uo
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aGVpZ2h0KQoreworICAgIGNhaXJvX3N1cmZhY2VfdCAqIGNvcHk7CisgICAgY2Fpcm9fdCAqIGNy
OworCisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VS
RkFDRV9UWVBFX0lNQUdFCisgICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3Vy
ZmFjZSkgPT0gY29udGVudAorICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChzdXJmYWNlKSA+PSB3aWR0aAorICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZSkgPj0gaGVpZ2h0KQorICAgICAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9y
ZWZlcmVuY2Uoc3VyZmFjZSk7CisKKyAgICBjb3B5ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGUoZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChjb250ZW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlaWdodCk7CisKKyAgICBjciA9IGNhaXJvX2NyZWF0ZShjb3B5KTsKKyAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fp
cm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19wYWlu
dChjcik7CisgICAgY2Fpcm9fZGVzdHJveShjcik7CisKKyAgICByZXR1cm4gY29weTsKK30KKwor
c3RhdGljIHZvaWQKK2NvbnZlcnRfYWxwaGEoZ3VjaGFyICogZGVzdERhdGEsIGludCBkZXN0U3Ry
aWRlLAorICAgICAgICAgICAgICBndWNoYXIgKiBzcmNEYXRhLCBpbnQgc3JjU3RyaWRlLAorICAg
ICAgICAgICAgICBpbnQgc3JjWCwgaW50IHNyY1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK
KyAgICBpbnQgeCwgeTsKKworICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1kg
KiA0OworCisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGd1aW50
MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBzcmNEYXRhOworCisgICAgICAgIGZvciAoeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICBndWludCBhbHBoYSA9IHNyY1t4XSA+PiAyNDsK
KworICAgICAgICAgICAgaWYgKCFhbHBoYSkgeworICAgICAgICAgICAgICAgIGRlc3REYXRhW3gg
KiA0ICsgMF0gPSAwOworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAwOwor
ICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMl0gPSAwOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDBdID0gKCgoc3JjW3hdICYg
MHhmZjAwMDApID4+IDE2KSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKKyAgICAgICAgICAg
ICAgICBkZXN0RGF0YVt4ICogNCArIDFdID0gKCgoc3JjW3hdICYgMHgwMGZmMDApID4+ICA4KSAq
IDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICog
NCArIDJdID0gKCgoc3JjW3hdICYgMHgwMDAwZmYpID4+ICAwKSAqIDI1NSArIGFscGhhIC8gMikg
LyBhbHBoYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgM10g
PSBhbHBoYTsKKyAgICAgICAgfQorCisgICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOworICAg
ICAgICBkZXN0RGF0YSArPSBkZXN0U3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2Nv
bnZlcnRfbm9fYWxwaGEoZ3VjaGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLCBndWNoYXIg
KiBzcmNEYXRhLAorICAgICAgICAgICAgICAgICBpbnQgc3JjU3RyaWRlLCBpbnQgc3JjWCwgaW50
IHNyY1ksCisgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBp
bnQgeCwgeTsKKworICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1ggKiA0Owor
CisgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGd1aW50MzIgKiBz
cmMgPSAoZ3VpbnQzMiAqKSBzcmNEYXRhOworCisgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0
aDsgeCsrKSB7CisgICAgICAgICAgICBkZXN0RGF0YVt4ICogMyArIDBdID0gc3JjW3hdID4+IDE2
OworICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMgKyAxXSA9IHNyY1t4XSA+PiAgODsKKyAgICAg
ICAgICAgIGRlc3REYXRhW3ggKiAzICsgMl0gPSBzcmNbeF07CisgICAgICAgIH0KKworICAgICAg
ICBzcmNEYXRhICs9IHNyY1N0cmlkZTsKKyAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsK
KyAgICB9Cit9CisKKy8qKgorICogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlOgorICogQHN1
cmZhY2U6IHN1cmZhY2UgdG8gY29weSBmcm9tCisgKiBAc3JjX3g6IFNvdXJjZSBYIGNvb3JkaW5h
dGUgd2l0aGluIEBzdXJmYWNlCisgKiBAc3JjX3k6IFNvdXJjZSBZIGNvb3JkaW5hdGUgd2l0aGlu
IEBzdXJmYWNlCisgKiBAd2lkdGg6IFdpZHRoIGluIHBpeGVscyBvZiByZWdpb24gdG8gZ2V0Cisg
KiBAaGVpZ2h0OiBIZWlnaHQgaW4gcGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKKyAqCisgKiBUcmFu
c2ZlcnMgaW1hZ2UgZGF0YSBmcm9tIGEgI2NhaXJvX3N1cmZhY2VfdCBhbmQgY29udmVydHMgaXQg
dG8gYW4gUkdCKEEpCisgKiByZXByZXNlbnRhdGlvbiBpbnNpZGUgYSAjR2RrUGl4YnVmLiBUaGlz
IGFsbG93cyB5b3UgdG8gZWZmaWNpZW50bHkgcmVhZAorICogaW5kaXZpZHVhbCBwaXhlbHMgZnJv
bSBjYWlybyBzdXJmYWNlcy4gRm9yICNHZGtXaW5kb3dzLCB1c2UKKyAqIGdka19waXhidWZfZ2V0
X2Zyb21fd2luZG93KCkgaW5zdGVhZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRl
IGFuIFJHQiBwaXhidWYgd2l0aCA4IGJpdHMgcGVyIGNoYW5uZWwuIFRoZSBwaXhidWYKKyAqIHdp
bGwgY29udGFpbiBhbiBhbHBoYSBjaGFubmVsIGlmIHRoZSBAc3VyZmFjZSBjb250YWlucyBvbmUu
CisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6IEEgbmV3bHktY3JlYXRlZCBw
aXhidWYgd2l0aCBhIHJlZmVyZW5jZSBjb3VudAorICogb2YgMSwgb3IgJU5VTEwgb24gZXJyb3IK
KyAqKi8KK0dka1BpeGJ1ZioKK2dka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJm
YWNlX3QgKiBzdXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNYLCBp
bnQgc3JjWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln
aHQpCit7CisgICAgY2Fpcm9fY29udGVudF90IGNvbnRlbnQ7CisgICAgR2RrUGl4YnVmICogZGVz
dDsKKworICAgIC8qIEdlbmVyYWwgc2FuaXR5IGNoZWNrcyAqLworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHN1cmZhY2UsIE5VTEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNyY1ggPj0g
MCAmJiBzcmNZID49IDAsIE5VTEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwLCBOVUxMKTsKKworICAgIGNvbnRlbnQgPSBjYWlyb19zdXJmYWNlX2dl
dF9jb250ZW50KHN1cmZhY2UpIHwgQ0FJUk9fQ09OVEVOVF9DT0xPUjsKKyAgICBkZXN0ID0gZ2Rr
X3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0VfUkdCLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAhIShjb250ZW50ICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOworCisg
ICAgc3VyZmFjZSA9IGdka19jYWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShzdXJmYWNlLCBj
b250ZW50LCBzcmNYICsgd2lkdGgsIHNyY1kgKyBoZWlnaHQpOworICAgIGNhaXJvX3N1cmZhY2Vf
Zmx1c2goc3VyZmFjZSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpIHx8
ICFkZXN0KSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGdka19waXhidWZfZ2V0X2hhc19hbHBo
YShkZXN0KSkKKyAgICAgICAgY29udmVydF9hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVz
dCksCisgICAgICAgICAgICAgICAgICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShz
dXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICBzcmNYLCBzcmNZLAorICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGNv
bnZlcnRfbm9fYWxwaGEoZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzKGRlc3QpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoZGVzdCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShz
dXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjWCwgc3JjWSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3koc3VyZmFjZSk7CisgICAgcmV0dXJuIGRlc3Q7Cit9CisKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyNCwgMCkKK3ZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3
YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChH
REtfSVNfUElYTUFQKGRyYXdhYmxlKSB8fCBHREtfSVNfV0lORE9XKGRyYXdhYmxlKSk7CisKKyAg
ICBpZiAoR0RLX0lTX1BJWE1BUChkcmF3YWJsZSkpIHsKKyAgICAgICAgZ2RrX3BpeG1hcF9nZXRf
c2l6ZShHREtfUElYTUFQKGRyYXdhYmxlKSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBHZGtXaW5kb3cgKndpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUp
OworICAgICp3aWR0aCA9IGdka193aW5kb3dfZ2V0X3dpZHRoKHdpbmRvdyk7CisgICAgKmhlaWdo
dCA9IGdka193aW5kb3dfZ2V0X2hlaWdodCh3aW5kb3cpOworfQorI2Vsc2UKK3ZvaWQgZ2V0R2Rr
RHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWln
aHQpCit7CisgICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0
KTsKK30KKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKKworI2VuZGlmIC8v
IEdUS19BUElfVkVSU0lPTl8yCisKKyNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQor
Z2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlv
bkhpbnQgKmludm9jYXRpb25IaW50LCBHVmFsdWUgKnJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBH
VmFsdWUgKmhhbmRsZXJSZXR1cm4sIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ192YWx1ZV9jb3B5
KGhhbmRsZXJSZXR1cm4sIHJldHVybkFjY3VtdWxhdG9yKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisjZW5kaWYKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKK2NhaXJvX3N1cmZh
Y2VfdCAqZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRvdyAqd2luZG93
LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAg
IGNhaXJvX3QgKmNhaXJvQ29udGV4dCA9IGdka19jYWlyb19jcmVhdGUod2luZG93KTsKKyAgICBj
YWlyb19zdXJmYWNlX3QgKmNhaXJvU3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY2Fpcm9Db250
ZXh0KTsKKyAgICBjYWlyb19zdXJmYWNlX3QgKm5ld1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2Ny
ZWF0ZV9zaW1pbGFyKGNhaXJvU3VyZmFjZSwgY29udGVudCwgd2lkdGgsIGhlaWdodCk7CisgICAg
Y2Fpcm9fZGVzdHJveShjYWlyb0NvbnRleHQpOworICAgIHJldHVybiBuZXdTdXJmYWNlOworfQor
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQorCisjaWYgIUdUS19DSEVDS19W
RVJTSU9OKDMsIDMsIDYpCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKK3N0YXRpYyBpbnQgZ2V0
U2NyZWVuQ3VycmVudERlc2t0b3AoR2RrU2NyZWVuICpzY3JlZW4pCit7CisgICAgRGlzcGxheSAq
ZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2Ny
ZWVuKSk7CisgICAgV2luZG93IHJvb3RXaW5kb3cgPSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBHREtf
U0NSRUVOX1hOVU1CRVIoc2NyZWVuKSk7CisgICAgQXRvbSBjdXJyZW50RGVza3RvcCA9IFhJbnRl
cm5BdG9tKGRpc3BsYXksICJfTkVUX0NVUlJFTlRfREVTS1RPUCIsIFRydWUpOworCisgICAgQXRv
bSB0eXBlOworICAgIGludCBmb3JtYXQ7CisgICAgdW5zaWduZWQgbG9uZyBpdGVtc0NvdW50LCBi
eXRlc0FmdGVyOworICAgIHVuc2lnbmVkIGNoYXIgKnJldHVybmVkRGF0YSA9IE5VTEw7CisgICAg
WEdldFdpbmRvd1Byb3BlcnR5KGRpc3BsYXksIHJvb3RXaW5kb3csIGN1cnJlbnREZXNrdG9wLCAw
LCBHX01BWExPTkcsIEZhbHNlLCBYQV9DQVJESU5BTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
JnR5cGUsICZmb3JtYXQsICZpdGVtc0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7
CisKKyAgICBpbnQgd29ya3NwYWNlID0gMDsKKyAgICBpZiAodHlwZSA9PSBYQV9DQVJESU5BTCAm
JiBmb3JtYXQgPT0gMzIgJiYgaXRlbXNDb3VudCA+IDApCisgICAgICAgIHdvcmtzcGFjZSA9IChp
bnQpcmV0dXJuZWREYXRhWzBdOworCisgICAgaWYgKHJldHVybmVkRGF0YSkKKyAgICAgICAgWEZy
ZWUocmV0dXJuZWREYXRhKTsKKworICAgIHJldHVybiB3b3Jrc3BhY2U7Cit9CisKK3N0YXRpYyB2
b2lkIGdldFNjcmVlbldvcmtBcmVhKEdka1NjcmVlbiAqc2NyZWVuLCBHZGtSZWN0YW5nbGUgKmFy
ZWEpCit7CisgICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19z
Y3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7CisgICAgQXRvbSB3b3JrQXJlYSA9IFhJbnRlcm5B
dG9tKGRpc3BsYXksICJfTkVUX1dPUktBUkVBIiwgVHJ1ZSk7CisKKyAgICAvKiBEZWZhdWx0cyBp
biBjYXNlIG9mIGVycm9yLiAqLworICAgIGFyZWEtPnggPSAwOworICAgIGFyZWEtPnkgPSAwOwor
ICAgIGFyZWEtPndpZHRoID0gZ2RrX3NjcmVlbl9nZXRfd2lkdGgoc2NyZWVuKTsKKyAgICBhcmVh
LT5oZWlnaHQgPSBnZGtfc2NyZWVuX2dldF9oZWlnaHQoc2NyZWVuKTsKKworICAgIGlmICh3b3Jr
QXJlYSA9PSBOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBXaW5kb3cgcm9vdFdpbmRvdyA9
IFhSb290V2luZG93KGRpc3BsYXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKKyAgICBB
dG9tIHR5cGU7CisgICAgaW50IGZvcm1hdDsKKyAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQs
IGJ5dGVzQWZ0ZXI7CisgICAgdW5zaWduZWQgY2hhciAqcmV0dXJuZWREYXRhID0gMDsKKyAgICBp
bnQgcmVzdWx0ID0gWEdldFdpbmRvd1Byb3BlcnR5KGRpc3BsYXksIHJvb3RXaW5kb3csIHdvcmtB
cmVhLCAwLCA0ICogMzIgLyogTWF4IGxlbmd0aCAqLywgRmFsc2UsIEFueVByb3BlcnR5VHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRl
bXNDb3VudCwgJmJ5dGVzQWZ0ZXIsICZyZXR1cm5lZERhdGEpOworICAgIGlmIChyZXN1bHQgIT0g
U3VjY2VzcyB8fCB0eXBlID09IE5vbmUgfHwgIWZvcm1hdCB8fCBieXRlc0FmdGVyIHx8IGl0ZW1z
Q291bnQgJSA0KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZGVza3RvcCA9IGdldFNjcmVl
bkN1cnJlbnREZXNrdG9wKHNjcmVlbik7CisgICAgbG9uZyAqd29ya0FyZWFzID0gKGxvbmcgKily
ZXR1cm5lZERhdGE7CisgICAgYXJlYS0+eCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNF07CisgICAg
YXJlYS0+eSA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCArIDFdOworICAgIGFyZWEtPndpZHRoID0g
d29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMl07CisgICAgYXJlYS0+aGVpZ2h0ID0gd29ya0FyZWFz
W2Rlc2t0b3AgKiA0ICsgM107CisKKyAgICBYRnJlZShyZXR1cm5lZERhdGEpOworfQorI2VuZGlm
IC8vIEdES19XSU5ET1dJTkdfWDExCisKK3ZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3Jr
YXJlYShHZGtTY3JlZW4gKnNjcmVlbiwgaW50IG1vbml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSkK
K3sKKyAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwg
YXJlYSk7CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgIEdka1JlY3RhbmdsZSB3b3Jr
QXJlYTsKKyAgICBnZXRTY3JlZW5Xb3JrQXJlYShzY3JlZW4sICZ3b3JrQXJlYSk7CisgICAgZ2Rr
X3JlY3RhbmdsZV9pbnRlcnNlY3QoJndvcmtBcmVhLCBhcmVhLCBhcmVhKTsKKyNlbmRpZgorfQor
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVy
c2lvbmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMzllZTJkYzBhNTQ0MTBhYTg3ZGUxYzY0ZmJjNmRjNDQ1
Mjg3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJv
cmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIEd0a1ZlcnNpb25pbmdfaAorI2RlZmluZSBHdGtWZXJzaW9uaW5nX2gKKworI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorI2luY2x1ZGUgPGdk
ay9nZGtrZXlzeW1zLWNvbXBhdC5oPgorI2VuZGlmCisKK0dfQkVHSU5fREVDTFMKKworLy8gTWFj
cm9zIHRvIGF2b2lkIGRlcHJlY2F0aW9uIGNoZWNraW5nIGNodXJuCisjaWZuZGVmIEdUS19BUElf
VkVSU0lPTl8yCisjZGVmaW5lIEdES19XSU5ET1dfWFdJTkRPVyh3aW5kb3cpIChnZGtfeDExX3dp
bmRvd19nZXRfeGlkKHdpbmRvdykpCisjZWxzZQorR2RrUGl4YnVmKiBnZGtfcGl4YnVmX2dldF9m
cm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBpbnQgc3JjWCwgaW50IHNyY1ks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUqIGRyYXdhYmxlLCBp
bnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7CisjZW5kaWYKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAyMywgNCkKKyNkZWZpbmUgZ2RrX3BpeG1hcF9nZXRfc2l6ZSBnZGtfZHJhd2FibGVfZ2V0
X3NpemUKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgNCkKKworI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKKyNkZWZpbmUgZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3
aW5kb3cpIGdka19kcmF3YWJsZV9nZXRfZGlzcGxheSh3aW5kb3cpCisjZGVmaW5lIGdka193aW5k
b3dfZ2V0X3Zpc3VhbCBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbAorI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDIsIDIzLCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQor
Y2Fpcm9fc3VyZmFjZV90KiBnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZhY2UoR2RrV2lu
ZG93KiB3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQorCisjaWYgIUdUS19D
SEVDS19WRVJTSU9OKDIsIDIxLCAyKQorI2RlZmluZSBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1
YWwpICh2aXN1YWwpLT5kZXB0aAorI2RlZmluZSBnZGtfdmlzdWFsX2dldF9iaXRzX3Blcl9yZ2Io
dmlzdWFsKSAodmlzdWFsKS0+Yml0c19wZXJfcmdiCisjZGVmaW5lIGdka19kcmFnX2NvbnRleHRf
Z2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSAoY29udGV4dCktPmFjdGlvbgorI2RlZmluZSBn
ZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpIChjb250ZXh0KS0+YWN0aW9ucwor
I2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQorCisjaWYgIUdUS19DSEVDS19W
RVJTSU9OKDIsIDIwLCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQp
IEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF9yZWFs
aXplZCh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfUkVB
TElaRUQpCisjZGVmaW5lIGd0a19yYW5nZV9nZXRfbWluX3NsaWRlcl9zaXplKHJhbmdlKSAocmFu
Z2UpLT5taW5fc2xpZGVyX3NpemUKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwg
MCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdl
dF9pc190b3BsZXZlbCh3aWRnZXQpIEdUS19XSURHRVRfVE9QTEVWRUwod2lkZ2V0KQorI2RlZmlu
ZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpIEdUS19XSURHRVRfUkVBTElaRUQod2lk
Z2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93KHdpZGdldCkgIUdUS19XSURH
RVRfTk9fV0lORE9XKHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfY2FuX2ZvY3VzKHdp
ZGdldCkgR1RLX1dJREdFVF9DQU5fRk9DVVMod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2lz
X3NlbnNpdGl2ZSh3aWRnZXQpIEdUS19XSURHRVRfSVNfU0VOU0lUSVZFKHdpZGdldCkKKyNlbmRp
ZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxOCwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3aWRnZXQsIEZBTFNF
KSBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfVklTSUJMRSkKKyNkZWZpbmUg
Z3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3aWRnZXQpIChHVEtfV0lER0VUX0ZMQUdTKHdpZGdldCkg
JiBHVEtfVklTSUJMRSkKKworI2RlZmluZSBndGtfd2lkZ2V0X3NldF93aW5kb3cod2lkZ2V0LCBu
ZXdfd2luZG93KSAod2lkZ2V0KS0+d2luZG93ID0gKG5ld193aW5kb3cpCisjZGVmaW5lIGd0a193
aWRnZXRfc2V0X2Nhbl9mb2N1cyh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdTKCh3
aWRnZXQpLCBHVEtfQ0FOX0ZPQ1VTKQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9u
KHdpZGdldCwgYWxsb2MpICgqKGFsbG9jKSA9ICh3aWRnZXQpLT5hbGxvY2F0aW9uKQorI2RlZmlu
ZSBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgod2lkZ2V0KS0+YWxs
b2NhdGlvbiA9ICooYWxsb2MpKQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE4LCAw
KQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQordm9pZCBnZGtfd2luZG93X2dl
dF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4LCBnaW50IHksIGdpbnQqIHJv
b3RYLCBnaW50KiByb290WSk7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMp
CisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCitjb25zdCBnY2hhciogZ3RrX21l
bnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxNiwgMCkKKworCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQorI2Rl
ZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAod2lkZ2V0KS0+d2luZG93CisjZGVm
aW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChhZGopLT52YWx1ZQorI2RlZmluZSBn
dGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAoZGlhbG9nKS0+dmJveAorI2RlZmlu
ZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpIChkaWFsb2cpLT5hY3Rpb25fYXJl
YQorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSAoZGF0YSktPmxl
bmd0aAorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkgKGRhdGEpLT5k
YXRhCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFyZ2V0KGRhdGEpIChkYXRhKS0+
dGFyZ2V0CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3NpemUoYWRqLCBuZXdWYWx1
ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRf
c2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFsdWUgPSBuZXdWYWx1ZSkKKyNkZWZp
bmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+bG93ZXIg
PSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVyKGFkaiwgbmV3VmFs
dWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKKwordm9pZCBndGtfYWRqdXN0bWVudF9jb25m
aWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2RvdWJsZSB2YWx1ZSwgZ2RvdWJsZSBs
b3dlciwgZ2RvdWJsZSB1cHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3Vi
bGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VTaXpl
KTsKKwordm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0bWVudCogYWRqdXNt
ZW50LCBnZG91YmxlIHZhbHVlKTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwg
MCkKKworR2RrRGV2aWNlKiBnZXREZWZhdWx0R0RLUG9pbnRlckRldmljZShHZGtXaW5kb3cqIHdp
bmRvdyk7CitHZGtDdXJzb3IqIGJsYW5rQ3Vyc29yKCk7CisKKyNpZiAhR0xJQl9DSEVDS19WRVJT
SU9OKDIsIDI3LCAxKQorZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lucyhH
U2lnbmFsSW52b2NhdGlvbkhpbnQqIGludm9jYXRpb25IaW50LCBHVmFsdWUqIHJldHVybkFjY3Vt
dWxhdG9yLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdwb2ludGVyIGRhdGEpOworI2Vu
ZGlmCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKK3ZvaWQgZ2RrX3NjcmVlbl9n
ZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKiwgaW50IG1vbml0b3IsIEdka1JlY3Rhbmds
ZSAqYXJlYSk7CisjZW5kaWYKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIEd0a1ZlcnNpb25p
bmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3Rv
cmVYMTEuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjYwMzc2YmM3NzE0YjM5NTQ5MDAxMmI5Nzc5NmExOTk3ZmNhM2MwY2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdT
dG9yZVgxMS5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0QmFja2luZ1N0b3JlLmgiCisKKyNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxYMTEv
WGxpYi5oPgorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2lkZ2V0
QmFja2luZ1N0b3JlUHJpdmF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2lkZ2V0QmFj
a2luZ1N0b3JlUHJpdmF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1Ymxp
YzoKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7CisgICAgUGl4bWFwIG1fcGl4bWFwOworICAgIEdD
IG1fZ2M7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOworCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZT4gY3JlYXRlKEd0a1dpZGdl
dCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKHdpZGdldCwgc2l6ZSkpOworICAg
IH0KKworICAgIH5XaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKCkKKyAgICB7CisgICAgICAgIFhG
cmVlUGl4bWFwKG1fZGlzcGxheSwgbV9waXhtYXApOworICAgICAgICBYRnJlZUdDKG1fZGlzcGxh
eSwgbV9nYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFdlIGtlZXAgdHdvIGNvcGllcyBv
ZiB0aGUgc3VyZmFjZSBoZXJlLCB3aGljaCB3aWxsIGRvdWJsZSB0aGUgbWVtb3J5IHVzYWdlLCBi
dXQgaW5jcmVhc2UKKyAgICAvLyBzY3JvbGxpbmcgcGVyZm9ybWFuY2Ugc2luY2Ugd2UgZG8gbm90
IGhhdmUgdG8ga2VlcCByZWFsbG9jYXRpbmcgYSBtZW1vcnkgcmVnaW9uIGR1cmluZworICAgIC8v
IHF1aWNrIHNjcm9sbGluZyByZXF1ZXN0cy4KKyAgICBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRl
KEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAg
R2RrVmlzdWFsKiB2aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwod2lkZ2V0KTsKKyAgICAg
ICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfdmlzdWFsX2dldF9zY3JlZW4odmlzdWFsKTsKKyAg
ICAgICAgbV9kaXNwbGF5ID0gR0RLX1NDUkVFTl9YRElTUExBWShzY3JlZW4pOworICAgICAgICBt
X3BpeG1hcCA9IFhDcmVhdGVQaXhtYXAobV9kaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0RLX1dJTkRPV19YSUQoZ2RrX3NjcmVlbl9nZXRfcm9vdF93aW5kb3coc2Ny
ZWVuKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdmlzdWFs
X2dldF9kZXB0aCh2aXN1YWwpKTsKKyAgICAgICAgbV9nYyA9IFhDcmVhdGVHQyhtX2Rpc3BsYXks
IG1fcGl4bWFwLCAwLCAwKTsKKworICAgICAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194
bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbV9waXhtYXAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX1ZJU1VBTF9YVklTVUFM
KHZpc3VhbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgfQorfTsKKworUGFz
c093blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IFdpZGdldEJhY2tpbmdTdG9yZTo6Y3JlYXRlKEd0
a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlKHdpZGdldCwgc2l6ZSkpOworfQorCitXaWRnZXRC
YWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdpZGdldCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fcHJpdmF0ZShXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRl
OjpjcmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQoreworfQorCitXaWRn
ZXRCYWNraW5nU3RvcmU6On5XaWRnZXRCYWNraW5nU3RvcmUoKQoreworfQorCitjYWlyb19zdXJm
YWNlX3QqIFdpZGdldEJhY2tpbmdTdG9yZTo6Y2Fpcm9TdXJmYWNlKCkKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgV2lkZ2V0QmFja2luZ1N0b3Jl
OjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xs
T2Zmc2V0KQoreworICAgIEludFJlY3QgdGFyZ2V0UmVjdChzY3JvbGxSZWN0KTsKKyAgICB0YXJn
ZXRSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KTsKKyAgICB0YXJnZXRSZWN0LmludGVyc2VjdChzY3Jv
bGxSZWN0KTsKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCkpOwor
ICAgIFhDb3B5QXJlYShtX3ByaXZhdGUtPm1fZGlzcGxheSwgbV9wcml2YXRlLT5tX3BpeG1hcCwg
bV9wcml2YXRlLT5tX3BpeG1hcCwgbV9wcml2YXRlLT5tX2djLCAKKyAgICAgICAgICAgICAgdGFy
Z2V0UmVjdC54KCkgLSBzY3JvbGxPZmZzZXQud2lkdGgoKSwgdGFyZ2V0UmVjdC55KCkgLSBzY3Jv
bGxPZmZzZXQuaGVpZ2h0KCksCisgICAgICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJl
Y3QueSgpKTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fcHJpdmF0
ZS0+bV9zdXJmYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9LVVJMR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGQxZmVhY2E5NmE0YTA5ZjRiYmQwNzA4MDliNjhlMTg1NDQxNjhmMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+Cisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGli
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRo
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhaXNMb2NhbEZpbGUoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0
cjxjaGFyPiBmaWxlbmFtZShnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIHJldHVy
biBmaWxlbmFtZVRvU3RyaW5nKGZpbGVuYW1lLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNs
YXRvci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMzViYmQ2MjYzZmY1OTU4MGNhYjA3YjU2ZmNkMzk0NGZlMDA5YTBlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5j
cHAKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgorCisjaW5jbHVkZSAiR3Rr
VmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8aW50
LCBjb25zdCBjaGFyKj4gSW50Q29uc3RDaGFySGFzaE1hcDsKKworc3RhdGljIHZvaWQgYmFja3Nw
YWNlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFu
c2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJi
YWNrc3BhY2UiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiRGVs
ZXRlQmFja3dhcmQiKTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIGdib29sZWFuIHNlbGVjdCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5z
bGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNl
bGVjdC1hbGwiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxl
Y3QgPyAiU2VsZWN0QWxsIiA6ICJVbnNlbGVjdCIpOworfQorCitzdGF0aWMgdm9pZCBjdXRDbGlw
Ym9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRy
YW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwg
ImN1dC1jbGlwYm9hcmQiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFu
ZCgiQ3V0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRn
ZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19z
aWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7Cisg
ICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHkiKTsKK30KKworc3Rh
dGljIHZvaWQgcGFzdGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5Qmlu
ZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgInBhc3RlLWNsaXBib2FyZCIpOworICAgIHRyYW5zbGF0b3ItPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJQYXN0ZSIpOworfQorCitzdGF0aWMgdm9pZCB0b2dnbGVP
dmVyd3JpdGVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3Iq
KQoreworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdG9nZ2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2Rl
LCBidXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZXhwZWN0cworICAgIC8vIHRoZSBHdGtUZXh0Vmll
dyB0byBoYXZlIGEgbGF5b3V0LCBzbyB3ZSBoYW5kbGUgdGhpcyBzaWduYWwganVzdCB0byBzdG9w
IGl0LgorICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUt
b3ZlcndyaXRlIik7Cit9CisKKy8vIEdUSysgd2lsbCBzdGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMg
dG8gdGhlIHdlYiB2aWV3LiBTbyB3ZSBjYW4gc2FmZWx5IHN0b3Agc2lnbmFsCisvLyBlbWlzc2lv
biB3aXRob3V0IGJyZWFraW5nIGFjY2Vzc2liaWxpdHkuCitzdGF0aWMgdm9pZCBwb3B1cE1lbnVD
YWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQoreworICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwb3B1cC1tZW51Iik7Cit9
CisKK3N0YXRpYyB2b2lkIHNob3dIZWxwQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJp
bmRpbmdUcmFuc2xhdG9yKikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUo
d2lkZ2V0LCAic2hvdy1oZWxwIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtE
ZWxldGVDb21tYW5kc1tdWzJdID0geworICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAg
ICAgICAiRGVsZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0
ZXJzCisgICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9y
d2FyZCIgICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcworICAgIHsgIkRlbGV0ZVdv
cmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAg
ICAgICB9LCAvLyBXb3JkcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAi
RGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcworICAgIHsg
IkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAg
ICAgICAgICAgICAgICB9LCAvLyBMaW5lIGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09m
UGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8g
UGFyYWdyYXBoIGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRl
bGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocworICAg
IHsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKK307CisKK3N0
YXRpYyB2b2lkIGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
RGVsZXRlVHlwZSBkZWxldGVUeXBlLCBnaW50IGNvdW50LCBLZXlCaW5kaW5nVHJhbnNsYXRvciog
dHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0
LCAiZGVsZXRlLWZyb20tY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/
IDEgOiAwOworCisgICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9IEdfTl9FTEVNRU5U
UyBoZXJlIHJlc3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nCisgICAgLy8gdGhhdCB0aGUgY29u
ZGl0aW9uIGlzIGFsd2F5cyB0cnVlLgorCisgICAgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVU
RV9XT1JEUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikgeworICAgICAgICAgICAgdHJhbnNs
YXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOworICAgICAg
ICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dh
cmQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRp
bmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7CisgICAgICAgICAgICB0cmFuc2xh
dG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVT
KSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGluZSIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92
ZVRvRW5kT2ZMaW5lIik7CisgICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVf
UEFSQUdSQVBIUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAgICAgICAgIHRyYW5z
bGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFw
aCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRp
dG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKKyAgICB9CisKKyAgICBjb25zdCBj
aGFyKiByYXdDb21tYW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9u
XTsKKyAgICBpZiAoIXJhd0NvbW1hbmQpCisgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFicyhjb3VudCk7IGkrKykKKyAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGlu
Z0VkaXRvckNvbW1hbmQocmF3Q29tbWFuZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBndGtNb3ZlQ29tbWFuZHNbXVs0XSA9IHsKKyAgICB7ICJNb3ZlQmFja3dhcmQiLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKKyAgICAgICJNb3ZlQmFj
a3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5k
TW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIGdyYXBo
ZW1lCisgICAgeyAiTW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJNb3ZlUmlnaHQiLAorICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIs
ICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
ICAgIH0sIC8vIExlZnQvcmlnaHQgZ3JhcGhlbWUKKyAgICB7ICJNb3ZlV29yZEJhY2t3YXJkIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZCIsCisgICAgICAi
TW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICJNb3ZlV29y
ZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2Fy
ZCB3b3JkCisgICAgeyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJNb3ZlRG93biIsCisgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAg
ICAgICAgICAgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAg
ICAgICAgfSwgLy8gVXAvZG93biBsaW5lCisgICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAorICAgICAgIk1vdmVU
b0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5kT2ZM
aW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRzCisg
ICAgeyAiTW92ZVBhcmFncmFwaEJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICJN
b3ZlUGFyYWdyYXBoRm9yd2FyZCIsCisgICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9k
aWZ5U2VsZWN0aW9uIiwgICAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVj
dGlvbiIgICAgfSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCisgICAgeyAiTW92ZVRvQmVnaW5uaW5n
T2ZQYXJhZ3JhcGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaCIs
CisgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iLCAg
ICJNb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93
biBwYXJhZ3JhcGggZW5kcy4KKyAgICB7ICJNb3ZlUGFnZVVwIiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIsCisgICAgICAiTW92ZVBhZ2VVcEFuZE1v
ZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlT
ZWxlY3Rpb24iICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCisgICAgeyAiTW92ZVRvQmVn
aW5uaW5nT2ZEb2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3Vt
ZW50IiwKKyAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9u
IiwgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LCAvLyBC
ZWdpbi9lbmQgb2YgYnVmZmVyCisgICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKK307CisKK3N0YXRpYyB2b2lk
IG1vdmVDdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92ZW1lbnRTdGVwIHN0
ZXAsIGdpbnQgY291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgS2V5QmluZGluZ1RyYW5z
bGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgIm1vdmUtY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/
IDEgOiAwOworICAgIGlmIChleHRlbmRTZWxlY3Rpb24pCisgICAgICAgIGRpcmVjdGlvbiArPSAy
OworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBHX05fRUxFTUVOVFMo
Z3RrTW92ZUNvbW1hbmRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogcmF3
Q29tbWFuZCA9IGd0a01vdmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOworICAgIGlmICghcmF3
Q29tbWFuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMo
Y291bnQpOyBpKyspCisgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5k
KHJhd0NvbW1hbmQpOworfQorCitLZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5QmluZGluZ1RyYW5z
bGF0b3IoKQorICAgIDogbV9uYXRpdmVXaWRnZXQoZ3RrX3RleHRfdmlld19uZXcoKSkKK3sKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFja3NwYWNlIiwgR19D
QUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhjdXRDbGlw
Ym9hcmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRn
ZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNsaXBib2FyZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
InBhc3RlLWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRDYWxsYmFjayksIHRo
aXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJzZWxlY3Qt
YWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIsIEdfQ0FMTEJBQ0so
bW92ZUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2
ZVdpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJBQ0soZGVsZXRlRnJv
bUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdp
ZGdldC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRvZ2dsZU92ZXJ3cml0
ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5n
ZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxiYWNrKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInNob3ctaGVscCIs
IEdfQ0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOworfQorCitzdHJ1Y3QgS2V5Q29t
YmluYXRpb25FbnRyeSB7CisgICAgdW5zaWduZWQgZ2RrS2V5Q29kZTsKKyAgICB1bnNpZ25lZCBz
dGF0ZTsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0IEtleUNvbWJp
bmF0aW9uRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7IEdES19iLCAgICAgICAgIEdE
S19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgIH0sCisgICAgeyBH
REtfaSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJUb2dnbGVJdGFs
aWMiICB9LAorICAgIHsgR0RLX0VzY2FwZSwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiQ2FuY2VsIiAgICAgICAgfSwKKyAgICB7IEdES19ncmVhdGVyLCAgIEdES19DT05UUk9M
X01BU0ssICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCit9OworCisvLyBUaGVzZSBj
b21tYW5kcyBhcmUgdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIHNvIHNob3VsZCB0YWtlIHBsYWNl
CisvLyB3aGlsZSBoYW5kbGluZyB0aGUgS2V5UHJlc3MgZXZlbnQuCitzdGF0aWMgY29uc3QgS2V5
Q29tYmluYXRpb25FbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7IEdES19UYWIsICAg
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgIH0sCisg
ICAgeyBHREtfVGFiLCAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICJJbnNl
cnRCYWNrdGFiIiB9LAorfTsKKwordm9pZCBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6Z2V0RWRpdG9y
Q29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIEV2ZW50VHlwZSB0eXBlLCBW
ZWN0b3I8V1RGOjpTdHJpbmc+JiBjb21tYW5kTGlzdCkKK3sKKyAgICBtX3BlbmRpbmdFZGl0b3JD
b21tYW5kcy5jbGVhcigpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBndGtfYmlu
ZGluZ3NfYWN0aXZhdGVfZXZlbnQoR1RLX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGV2
ZW50KTsKKyNlbHNlCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdfT0JKRUNUKG1f
bmF0aXZlV2lkZ2V0LmdldCgpKSwgZXZlbnQpOworI2VuZGlmCisKKyAgICBpZiAoIW1fcGVuZGlu
Z0VkaXRvckNvbW1hbmRzLmlzRW1wdHkoKSkgeworICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQo
bV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlEb3duQ29tbWFuZHNN
YXAsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtl
eVByZXNzQ29tbWFuZHNNYXAsICgpKTsKKworICAgIGlmIChrZXlEb3duQ29tbWFuZHNNYXAuaXNF
bXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMo
a2V5RG93bkVudHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAuc2V0
KGtleURvd25FbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0uZ2RrS2V5
Q29kZSwga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKyspCisgICAgICAgICAg
ICBrZXlQcmVzc0NvbW1hbmRzTWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0uc3RhdGUgPDwgMTYg
fCBrZXlQcmVzc0VudHJpZXNbaV0uZ2RrS2V5Q29kZSwga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUp
OworICAgIH0KKworICAgIC8vIFNwZWNpYWwtY2FzZSBlbnRlciBrZXlzIGZvciB3ZSB3YW50IHRo
ZW0gdG8gd29yayByZWdhcmRsZXNzIG9mIG1vZGlmaWVyLgorICAgIGlmICgoZXZlbnQtPmtleXZh
bCA9PSBHREtfUmV0dXJuIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0tQX0VudGVyIHx8IGV2ZW50
LT5rZXl2YWwgPT0gR0RLX0lTT19FbnRlcikgJiYgdHlwZSA9PSBLZXlQcmVzcykgeworICAgICAg
ICBjb21tYW5kTGlzdC5hcHBlbmQoIkluc2VydE5ld0xpbmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdhbnQgY2hhckNvZGUoKSwg
YnV0IGtleUNvZGUoKSBkb2VzIHRoYXQuCisgICAgaW50IG1hcEtleSA9IGV2ZW50LT5zdGF0ZSA8
PCAxNiB8IGV2ZW50LT5rZXl2YWw7CisgICAgaWYgKG1hcEtleSkgeworICAgICAgICBIYXNoTWFw
PGludCwgY29uc3QgY2hhcio+KiBjb21tYW5kTWFwID0gdHlwZSA9PSBLZXlEb3duID8gICZrZXlE
b3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKKyAgICAgICAgaWYgKGNvbnN0
IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5KSkgeworICAgICAg
ICAgICAgY29tbWFuZExpc3QuYXBwZW5kKGNvbW1hbmRTdHJpbmcpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY0MzZk
ZTZjYjg2M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEtleUJpbmRpbmdUcmFuc2xhdG9yX2gKKyNk
ZWZpbmUgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAorCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEtleUJpbmRpbmdUcmFuc2xhdG9yIHsKK3B1YmxpYzoKKyAgICBL
ZXlCaW5kaW5nVHJhbnNsYXRvcigpOworCisgICAgZW51bSBFdmVudFR5cGUgeyBLZXlEb3duLCBL
ZXlQcmVzcyB9OworICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVu
dEtleSosIEV2ZW50VHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYpOworICAgIHZvaWQgYWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkgeyBtX3BlbmRpbmdFZGl0b3JD
b21tYW5kcy5hcHBlbmQoY29tbWFuZCk7IH0KKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPEd0a1dp
ZGdldD4gbV9uYXRpdmVXaWRnZXQ7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX3BlbmRpbmdF
ZGl0b3JDb21tYW5kczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zN2E3MWU1NjFjNTM0
NGMwNWVmMDNiZjEyODMzNTZmYzUyYTQyZmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzaW5n
IHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkgaGVyZSBpcyBub3QgYW4gb3B0aW9uLCBiZWNh
dXNlCisvLyBpdCBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxvY2FsZSBpbiBydW50aW1l
LCBzbyBpdCByZXR1cm5zCisvLyBhbHdheXMgdGhlIHNhbWUgdmFsdWUuCitzdGF0aWMgU3RyaW5n
IHBsYXRmb3JtTGFuZ3VhZ2UoKQoreworICAgIGNoYXIqIGxvY2FsZURlZmF1bHQgPSBzZXRsb2Nh
bGUoTENfQ1RZUEUsIE5VTEwpOworCisgICAgaWYgKCFsb2NhbGVEZWZhdWx0KQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCJjIik7CisKKyAgICBHT3duUHRyPGdjaGFyPiBub3JtYWxpemVkRGVmYXVs
dChnX2FzY2lpX3N0cmRvd24obG9jYWxlRGVmYXVsdCwgLTEpKTsKKyAgICBjaGFyKiBwdHIgPSBz
dHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICdfJyk7CisKKyAgICBpZiAocHRyKQorICAg
ICAgICAqcHRyID0gJy0nOworCisgICAgcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0Lmdl
dCgpLCAnLicpOworCisgICAgaWYgKHB0cikKKyAgICAgICAgKnB0ciA9ICdcMCc7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpKTsKK30KKworVmVjdG9yPFN0cmlu
Zz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMuYXBw
ZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7CisgICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5ndWFn
ZXM7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xvY2FsaXpl
ZFN0cmluZ3NHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMDJjYWEyZjlkZjI1MmY2OTI1YmEyMDM0ZTRjYTQ1OTFiYzE1YjZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdz
R3RrLmNwcApAQCAtMCwwICsxLDc4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlz
dGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogZ3RrU3RvY2tMYWJlbChj
b25zdCBjaGFyKiBzdG9ja0lEKQoreworICAgIEd0a1N0b2NrSXRlbSBpdGVtOworICAgIGlmICgh
Z3RrX3N0b2NrX2xvb2t1cChzdG9ja0lELCAmaXRlbSkpCisgICAgICAgIHJldHVybiBzdG9ja0lE
OworICAgIHJldHVybiBpdGVtLmxhYmVsOworfQorCitTdHJpbmcgc3VibWl0QnV0dG9uRGVmYXVs
dExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJTdWJtaXQiKSk7Cit9
CisKK1N0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJTdWJtaXQiKSk7Cit9CisKK1N0cmluZyByZXNldEJ1dHRvbkRlZmF1bHRMYWJl
bCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUmVzZXQiKSk7Cit9CisKK1N0
cmluZyBkZWZhdWx0RGV0YWlsc1N1bW1hcnlUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJEZXRhaWxzIikpOworfQorCitTdHJpbmcgc2VhcmNoYWJsZUluZGV4SW50cm9k
dWN0aW9uKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJUaGlzIGlzIGEgc2Vh
cmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAiKSk7Cit9CisKK1N0cmluZyBm
aWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJDaG9vc2UgRmlsZSIpKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VNdWx0aXBs
ZUZpbGVzTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNob29zZSBG
aWxlcyIpKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSkiKSk7Cit9CisKK1N0cmluZyBm
aWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIihOb25lKSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4g
TGluayBpbiBOZXcgX1dpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0Rv
d25sb2FkIExpbmtlZCBGaWxlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29w
eUxpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29w
eSBMaW5rIExvY19hdGlvbiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5J
bWFnZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVu
IF9JbWFnZSBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
RG93bmxvYWRJbWFnZVRvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
U2FfdmUgSW1hZ2UgQXMiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1h
Z2VUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29wX3kg
SW1hZ2UiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0Ns
aXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ29weSBJbWFnZSBf
QWRkcmVzcyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3
V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVuIF9WaWRlbyBp
biBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlv
SW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0F1
ZGlvIGluIE5ldyBXaW5kb3ciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5
VmlkZW9MaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
IkNvcF95IFZpZGVvIExpbmsgTG9jYXRpb24iKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDb3B5QXVkaW9MaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNvcF95IEF1ZGlvIExpbmsgTG9jYXRpb24iKSk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfVG9nZ2xlIE1lZGlhIENvbnRyb2xzIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJUb2dnbGUgTWVkaWEgX0xvb3AgUGxheWJhY2siKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiU3dpdGNoIFZpZGVvIHRvIF9GdWxsc2NyZWVuIikpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfUGxheSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01l
ZGlhUGF1c2UoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9QYXVzZSIpKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiX011dGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHkoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ09QWSkpOworICAgIHJldHVybiBz
dG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkKK3sKKyAg
ICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFi
ZWwoR1RLX1NUT0NLX0RFTEVURSkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0
b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1NFTEVD
VF9BTEwpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1VuaWNvZGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9JbnNl
cnQgVW5pY29kZSBDb250cm9sIENoYXJhY3RlciIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0lucHV0TWV0aG9kcygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
SW5wdXQgX01ldGhvZHMiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2so
KQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3Rr
U3RvY2tMYWJlbChHVEtfU1RPQ0tfR09fQkFDSykpOworICAgIHJldHVybiBzdG9ja0xhYmVsOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkKK3sKKyAgICBzdGF0aWMg
U3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NU
T0NLX0dPX0ZPUldBUkQpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1N0b3AoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9
IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfU1RPUCkpOworICAgIHJl
dHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUmVsb2FkIikpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFi
ZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0NVVCkpOworICAg
IHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUo
KQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3Rr
U3RvY2tMYWJlbChHVEtfU1RPQ0tfUEFTVEUpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJObyBHdWVzc2VzIEZvdW5kIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIl9JZ25vcmUgU3BlbGxpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJfTGVhcm4gU3BlbGxpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTZWFy
Y2hXZWIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9TZWFyY2ggdGhlIFdl
YiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeShj
b25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9Mb29rIFVw
IGluIERpY3Rpb25hcnkiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlu
aygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX09wZW4gTGluayIpKTsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIklnbm9yZSBfR3JhbW1hciIpKTsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiU3BlbGxpbmcgYW5kIF9HcmFtbWFyIikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoYm9vbCBzaG93KQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHNob3cgPyBfKCJfU2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIpIDogXygi
X0hpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJf
Q2hlY2sgRG9jdW1lbnQgTm93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJDaGVjayBTcGVsbGluZyBXaGlsZSBfVHlwaW5nIikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxsaW5nIikpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIl9Gb250IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQm9sZCgp
Cit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtT
dG9ja0xhYmVsKEdUS19TVE9DS19CT0xEKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQoreworICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfSVRB
TElDKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdVbmRlcmxpbmUoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfVU5ERVJMSU5FKSk7CisgICAgcmV0
dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3V0bGluZSIpKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJJbnNwZWN0IF9FbGVtZW50IikpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkxSTSBfTGVmdC10by1yaWdodCBtYXJrIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlJMTSBfUmlnaHQtdG8tbGVmdCBtYXJrIikpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcmsoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9lbWJlZGRpbmciKSk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFyaygpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxFIFJpZ2h0LXRvLWxlZnQgZV9tYmVkZGluZyIp
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRMUk9NYXJrKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk8gTGVmdC10by1yaWdodCBfb3Zl
cnJpZGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxP
TWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxPIFJpZ2h0LXRvLWxl
ZnQgb192ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFBERk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBERiBfUG9w
IGRpcmVjdGlvbmFsIGZvcm1hdHRpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdVbmljb2RlSW5zZXJ0WldTTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiWldTIF9aZXJvIHdpZHRoIHNwYWNlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydFpXSk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpKTsKK30KKworU3RyaW5nIHNlYXJj
aE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiTm8gcmVjZW50IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgc2VhcmNoTWVudVJlY2Vu
dFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUmVjZW50
IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNU
ZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfQ2xlYXIgcmVjZW50IHNl
YXJjaGVzIikpOworfQorCitTdHJpbmcgQVhEZWZpbml0aW9uVGV4dCgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiZGVmaW5pdGlvbiIpKTsKK30KKworU3RyaW5nIEFYRGVzY3Jp
cHRpb25MaXN0VGVybVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRl
cm0iKSk7Cit9CisKK1N0cmluZyBBWERlc2NyaXB0aW9uTGlzdERldGFpbFRleHQoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlc2NyaXB0aW9uIikpOworfQorCitTdHJpbmcg
QVhGb290ZXJSb2xlRGVzY3JpcHRpb25UZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJmb290ZXIiKSk7Cit9CisKK1N0cmluZyBBWEJ1dHRvbkFjdGlvblZlcmIoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInByZXNzIikpOworfQorCitTdHJpbmcgQVhS
YWRpb0J1dHRvbkFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
InNlbGVjdCIpKTsKK30KKworU3RyaW5nIEFYVGV4dEZpZWxkQWN0aW9uVmVyYigpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYWN0aXZhdGUiKSk7Cit9CisKK1N0cmluZyBBWENo
ZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInVuY2hlY2siKSk7Cit9CisKK1N0cmluZyBBWFVuY2hlY2tlZENoZWNrQm94QWN0aW9uVmVy
YigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY2hlY2siKSk7Cit9CisKK1N0
cmluZyBBWExpbmtBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJqdW1wIikpOworfQorCitTdHJpbmcgQVhNZW51TGlzdFBvcHVwQWN0aW9uVmVyYigpCit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK1N0cmluZyBtaXNzaW5nUGx1Z2luVGV4
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTWlzc2luZyBQbHVnLWluIikp
OworfQorCitTdHJpbmcgY3Jhc2hlZFBsdWdpblRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGx1Zy1pbiBGYWlsdXJlIikpOwor
fQorCitTdHJpbmcgYmxvY2tlZFBsdWdpbkJ5Q29udGVudFNlY3VyaXR5UG9saWN5VGV4dCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBpbnNlY3VyZVBsdWdpblZlcnNpb25UZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGluYWN0aXZlUGx1Z2luVGV4dCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBtdWx0aXBsZUZpbGVVcGxvYWRUZXh0KHVuc2lnbmVkIG51bWJlck9mRmlsZXMpCit7CisgICAg
Ly8gRklYTUU6IElmIHRoaXMgZmlsZSBnZXRzIGxvY2FsaXplZCwgdGhpcyBzaG91bGQgcmVhbGx5
IGJlIGxvY2FsaXplZCBhcyBvbmUgc3RyaW5nIHdpdGggYSB3aWxkY2FyZCBmb3IgdGhlIG51bWJl
ci4KKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyT2ZGaWxlcykgKyBTdHJpbmc6OmZy
b21VVEY4KF8oIiBmaWxlcyIpKTsKK30KKworU3RyaW5nIHVua25vd25GaWxlU2l6ZVRleHQoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlVua25vd24iKSk7Cit9CisKK1N0cmlu
ZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZihDXygiVGl0bGUg
c3RyaW5nIGZvciBpbWFnZXMiLCAiJXMgICglZHglZCBwaXhlbHMpIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZS51dGY4KCkuZGF0YSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkp
OworfQorCisKKyNpZiBFTkFCTEUoVklERU8pCisKK1N0cmluZyBtZWRpYUVsZW1lbnRMb2FkaW5n
U3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMb2FkaW5nLi4u
IikpOworfQorCitTdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0YXRlVGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTGl2ZSBCcm9hZGNhc3QiKSk7Cit9CisK
K1N0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBjb250cm9sbGVyIikpOworICAgIGlm
IChuYW1lID09ICJWaWRlb0VsZW1lbnQiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJ2aWRlbyBlbGVtZW50IGNvbnRyb2xsZXIiKSk7CisgICAgaWYgKG5hbWUgPT0gIk11dGVC
dXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtdXRlIikpOworICAg
IGlmIChuYW1lID09ICJVbk11dGVCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJ1bm11dGUiKSk7CisgICAgaWYgKG5hbWUgPT0gIlBsYXlCdXR0b24iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwbGF5IikpOworICAgIGlmIChuYW1lID09ICJQ
YXVzZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBhdXNlIikp
OworICAgIGlmIChuYW1lID09ICJTbGlkZXIiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJtb3ZpZSB0aW1lIikpOworICAgIGlmIChuYW1lID09ICJTbGlkZXJUaHVtYiIpCisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRpbWVsaW5lIHNsaWRlciB0aHVtYiIp
KTsKKyAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiYmFjayAzMCBzZWNvbmRzIikpOworICAgIGlmIChuYW1lID09ICJSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
cmV0dXJuIHRvIHJlYWx0aW1lIikpOworICAgIGlmIChuYW1lID09ICJDdXJyZW50VGltZURpc3Bs
YXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbGFwc2VkIHRpbWUiKSk7
CisgICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygicmVtYWluaW5nIHRpbWUiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlN0YXR1c0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGF0
dXMiKSk7CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisgICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImVudGVyIGZ1bGxzY3JlZW4iKSk7CisgICAgaWYg
KG5hbWUgPT0gIkV4aXRGdWxsc2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiZXhpdCBmdWxsc2NyZWVuIikpOworICAgIGlmIChuYW1lID09ICJTZWVrRm9y
d2FyZEJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImZhc3QgZm9y
d2FyZCIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmYXN0IHJldmVyc2UiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInNob3cgY2xvc2VkIGNhcHRpb25zIikpOworICAgIGlmIChuYW1lID09ICJIaWRlQ2xv
c2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJo
aWRlIGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBpZiAobmFtZSA9PSAiQ29udHJvbHNQYW5lbCIp
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1lZGlhIGNvbnRyb2xzIikpOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBwbGF5YmFjayBjb250cm9scyBhbmQg
c3RhdHVzIGRpc3BsYXkiKSk7CisgICAgaWYgKG5hbWUgPT0gIlZpZGVvRWxlbWVudCIpCisgICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZpZGVvIGVsZW1lbnQgcGxheWJhY2sgY29u
dHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOworICAgIGlmIChuYW1lID09ICJNdXRlQnV0dG9u
IikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibXV0ZSBhdWRpbyB0cmFja3Mi
KSk7CisgICAgaWYgKG5hbWUgPT0gIlVuTXV0ZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInVubXV0ZSBhdWRpbyB0cmFja3MiKSk7CisgICAgaWYgKG5hbWUgPT0g
IlBsYXlCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJiZWdpbiBw
bGF5YmFjayIpKTsKKyAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXVzZSBwbGF5YmFjayIpKTsKKyAgICBpZiAobmFtZSA9
PSAiU2xpZGVyIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUgdGlt
ZSBzY3J1YmJlciIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2xpZGVyVGh1bWIiKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIHNjcnViYmVyIHRodW1iIikpOwor
ICAgIGlmIChuYW1lID09ICJSZXdpbmRCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJzZWVrIG1vdmllIGJhY2sgMzAgc2Vjb25kcyIpKTsKKyAgICBpZiAobmFtZSA9
PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInJldHVybiBzdHJlYW1pbmcgbW92aWUgdG8gcmVhbCB0aW1lIikpOworICAgIGlmIChu
YW1lID09ICJDdXJyZW50VGltZURpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJjdXJyZW50IG1vdmllIHRpbWUgaW4gc2Vjb25kcyIpKTsKKyAgICBpZiAobmFtZSA9
PSAiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJudW1iZXIgb2Ygc2Vjb25kcyBvZiBtb3ZpZSByZW1haW5pbmciKSk7CisgICAgaWYgKG5h
bWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJjdXJyZW50IG1vdmllIHN0YXR1cyIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0
b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgYmFj
ayIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgZm9yd2FyZCIpKTsKKyAgICBpZiAo
bmFtZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiUGxheSBtb3ZpZSBpbiBmdWxsc2NyZWVuIG1vZGUiKSk7CisgICAgaWYgKG5h
bWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkV4aXQgZnVsbHNjcmVlbiBtb2RlIikpOworICAgIGlmIChuYW1lID09ICJTaG93
Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJzdGFydCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBpZiAobmFtZSA9PSAi
SGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygic3RvcCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXpl
ZE1lZGlhVGltZURlc2NyaXB0aW9uKGZsb2F0IHRpbWUpCit7CisgICAgaWYgKCFzdGQ6OmlzZmlu
aXRlKHRpbWUpKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJpbmRlZmluaXRl
IHRpbWUiKSk7CisKKyAgICBpbnQgc2Vjb25kcyA9IHN0YXRpY19jYXN0PGludD4oYWJzKHRpbWUp
KTsKKyAgICBpbnQgZGF5cyA9IHNlY29uZHMgLyAoNjAgKiA2MCAqIDI0KTsKKyAgICBpbnQgaG91
cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOworICAgIGludCBtaW51dGVzID0gKHNlY29uZHMgLyA2
MCkgJSA2MDsKKyAgICBzZWNvbmRzICU9IDYwOworCisgICAgaWYgKGRheXMpIHsKKyAgICAgICAg
R093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgZGF5cyAlZCBob3VycyAl
ZCBtaW51dGVzICVkIHNlY29uZHMiLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcykpOwor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOworICAgIH0KKwor
ICAgIGlmIChob3VycykgeworICAgICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBf
cHJpbnRmKCIlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29uZHMiLCBob3VycywgbWludXRlcywg
c2Vjb25kcykpOworICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkp
OworICAgIH0KKworICAgIGlmIChtaW51dGVzKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN0
cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIsIG1pbnV0ZXMsIHNl
Y29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsK
KyAgICB9CisKKyAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBz
ZWNvbmRzIiwgc2Vjb25kcykpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5n
ZXQoKSk7Cit9CisjZW5kaWYgIC8vIEVOQUJMRShWSURFTykKKworU3RyaW5nIHZhbGlkYXRpb25N
ZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygidmFsdWUgbWlzc2luZyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVN
aXNzaW5nRm9yQ2hlY2tib3hUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yRmlsZVRleHQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgp
OworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdGb3JNdWx0aXBsZUZp
bGVUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9u
TWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VmFsdWVNaXNzaW5nRm9yUmFkaW9UZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yU2VsZWN0VGV4dCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdU
ZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
dHlwZSBtaXNtYXRjaCIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21h
dGNoRm9yRW1haWxUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2
YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRp
b25NZXNzYWdlVHlwZU1pc21hdGNoRm9yTXVsdGlwbGVFbWFpbFRleHQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4
dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hGb3JVUkxUZXh0
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2Fn
ZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUGF0dGVy
bk1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicGF0dGVy
biBtaXNtYXRjaCIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQo
aW50LCBpbnQpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidG9vIGxvbmciKSk7
Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93VGV4dChjb25zdCBT
dHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJhbmdlIHVuZGVyZmxv
dyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQoY29u
c3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyYW5nZSBvdmVy
ZmxvdyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlU3RlcE1pc21hdGNoVGV4dChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInN0ZXAgbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB1bmFjY2VwdGFibGVUTFNDZXJ0
aWZpY2F0ZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVW5hY2NlcHRhYmxl
IFRMUyBjZXJ0aWZpY2F0ZSIpKTsKK30KKworU3RyaW5nIGxvY2FsaXplZFN0cmluZyhjb25zdCBj
aGFyKiBrZXkpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoa2V5LCBzdHJsZW4oa2V5
KSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZUJhZElucHV0Rm9yTnVtYmVyVGV4dCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VU
eXBlTWlzbWF0Y2hUZXh0KCk7Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitTdHJpbmcg
dGV4dFRyYWNrQ2xvc2VkQ2FwdGlvbnNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChDXygiQ2xvc2VkIENhcHRpb25zIiwgIk1lbnUgc2VjdGlvbiBoZWFkaW5nIGZvciBjbG9z
ZWQgY2FwdGlvbnMiKSk7Cit9CisKK1N0cmluZyB0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiU3VidGl0bGVzIiwgIk1lbnUgc2VjdGlv
biBoZWFkaW5nIGZvciBzdWJ0aXRsZXMiKSk7Cit9CisKK1N0cmluZyB0ZXh0VHJhY2tPZmZUZXh0
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiT2ZmIiwgIk1lbnUgaXRlbSBs
YWJlbCBmb3IgdGhlIHRyYWNrIHRoYXQgcmVwcmVzZW50cyBkaXNhYmxpbmcgY2xvc2VkIGNhcHRp
b25zIikpOworfQorCitTdHJpbmcgdGV4dFRyYWNrTm9MYWJlbFRleHQoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KENfKCJObyBsYWJlbCIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIGEg
Y2xvc2VkIGNhcHRpb25zIHRyYWNrIHRoYXQgaGFzIG5vIG90aGVyIG5hbWUiKSk7Cit9CisjZW5k
aWYKKworU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxUaXRsZSgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoQ18oIlNuYXBzaG90dGVkIFBsdWctSW4iLCAiVGl0bGUgb2YgdGhl
IGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOworfQorCitTdHJpbmcg
c25hcHNob3R0ZWRQbHVnSW5MYWJlbFN1YnRpdGxlKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChDXygiQ2xpY2sgdG8gcmVzdGFydCIsICJTdWJ0aXRsZSBvZiB0aGUgbGFiZWwgdG8g
c2hvdyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xv
Z2dpbmdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4OThhZjdkOGJlYmNiZTA1YzlhYmU3ZmY0YTQxZTE3
YzkwOGNmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdH
dGsuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bml0aWFsaXplTG9nZ2luZy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2lmICFMT0dfRElT
QUJMRUQKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbnNw
aXJlZCBieSB0aGUgY29kZSB1c2VkIGJ5IHRoZSBRdCBwb3J0CisKK3ZvaWQgaW5pdGlhbGl6ZUxv
Z2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFs
aXplTG9nZ2luZ0NoYW5uZWxzID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRpYWxpemVMb2dnaW5n
Q2hhbm5lbHMpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZEluaXRpYWxpemVMb2dnaW5nQ2hh
bm5lbHMgPSB0cnVlOworCisgICAgY2hhciogbG9nRW52ID0gZ2V0ZW52KCJXRUJLSVRfREVCVUci
KTsKKyAgICBpZiAoIWxvZ0VudikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gd2Ugc2V0IHVw
IHRoZSBsb2dzIGFueXdheSBiZWNhdXNlIHNvbWUgb2Ygb3VyIGxvZ2dpbmcsIHN1Y2ggYXMKKyAg
ICAvLyBzb3VwJ3MgaXMgYXZhaWxhYmxlIGluIHJlbGVhc2UgYnVpbGRzCisjaWYgZGVmaW5lZChO
REVCVUcpCisgICAgZ193YXJuaW5nKCJXRUJLSVRfREVCVUcgaXMgbm90IGVtcHR5LCBidXQgdGhp
cyBpcyBhIHJlbGVhc2UgYnVpbGQuIE5vdGljZSB0aGF0IG1hbnkgbG9nIG1lc3NhZ2VzIHdpbGwg
b25seSBhcHBlYXIgaW4gYSBkZWJ1ZyBidWlsZC4iKTsKKyNlbmRpZgorCisgICAgY2hhcioqIGxv
Z3YgPSBnX3N0cnNwbGl0KGxvZ0VudiwgIiAiLCAtMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
bG9ndltpXTsgaSsrKSB7CisgICAgICAgIGlmIChXVEZMb2dDaGFubmVsKiBjaGFubmVsID0gZ2V0
Q2hhbm5lbEZyb21OYW1lKGxvZ3ZbaV0pKQorICAgICAgICAgICAgY2hhbm5lbC0+c3RhdGUgPSBX
VEZMb2dDaGFubmVsT247CisgICAgfQorCisgICAgZ19zdHJmcmVldihsb2d2KTsKKworICAgIC8v
IHRvIGRpc2FibGUgbG9nZ2luZyBub3RJbXBsZW1lbnRlZCBzZXQgdGhlIERJU0FCTEVfTklfV0FS
TklORworICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIDEKKyAgICBMb2dOb3RZZXRJbXBs
ZW1lbnRlZC5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTUlN
RVR5cGVSZWdpc3RyeUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY3ZjE0Y2Q4ZGY3YTU2MmIwMmVjMzJi
OGRmYTJmNGNmOTZmYjJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
TUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKKyAg
ICBjb25zdCBjaGFyKiBleHRlbnNpb247CisgICAgY29uc3QgY2hhciogbWltZVR5cGU7Cit9Owor
CitzdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKKyAgICB7ICJi
bXAiLCAiaW1hZ2UvYm1wIiB9LAorICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKKyAgICB7ICJn
aWYiLCAiaW1hZ2UvZ2lmIiB9LAorICAgIHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAi
aHRtbCIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwKKyAg
ICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWciIH0s
CisgICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAorICAgIHsgInBkZiIs
ICJhcHBsaWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKKyAgICB7
ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3Zn
K3htbCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidHh0IiwgInRl
eHQvcGxhaW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKKyAgICB7ICJ4
bWwiLCAidGV4dC94bWwiIH0sCisgICAgeyAieHNsIiwgInRleHQveHNsIiB9LAorICAgIHsgInho
dG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7ICJ3bWwiLCAidGV4dC92bmQu
d2FwLndtbCIgfSwKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIgfSwK
KyAgICB7IDAsIDAgfQorfTsKKworU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOworICAgIGNvbnN0IEV4dGVuc2lv
bk1hcCAqZSA9IGV4dGVuc2lvbk1hcDsKKyAgICB3aGlsZSAoZS0+ZXh0ZW5zaW9uKSB7CisgICAg
ICAgIGlmIChzID09IGUtPmV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlw
ZTsKKyAgICAgICAgKytlOworICAgIH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9v
bCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWMxY2M4M2EwMjM0OThj
MWFiMmI4NGRjMTA5ZTlhOWM1Zjg1MGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIHpl
Y2tlQHNlbGZpc2gub3JnCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSA8Z25zQGdub21lLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYWlu
RnJhbWVTY3JvbGxiYXJHdGsuaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitQYXNzUmVmUHRyPE1haW5G
cmFtZVNjcm9sbGJhckd0az4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVhdGUoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1haW5GcmFtZVNjcm9sbGJhckd0ayhzY3JvbGxh
YmxlQXJlYSwgb3JpZW50YXRpb24pKTsKK30KKworLy8gQSBNYWluRnJhbWVTY3JvbGxiYXIgaXMg
anVzdCBhIG5vbi1wYWludGluZyBzY3JvbGxiYXIuIE90aGVyd2lzZSBpdCBpcyBmdWxseQorLy8g
ZnVuY3Rpb25hbC4gQSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyIGFsbG93cyBhIG1haW4tZnJhbWUg
U2Nyb2xsVmlldyB0byB1c2UKKy8vIGEgY29udGFpbmluZyBHdGtTY3JvbGxlZFdpbmRvdyBhcyBp
dHMgdXNlciBpbnRlcmZhY2UuIFRoZSBDaHJvbWVDbGllbnQgaW4gdGhlCisvLyBXZWJLaXQgbGF5
ZXIganVzdCBsaXN0ZW5zIGZvciBzY3JvbGxpbmcgYW5kIHNpemluZyBjaGFuZ2VzIGFuZCB1cGRh
dGVzIGl0cworLy8gY29udGFpbmVyICh0aGUgR3RrU2Nyb2xsZWRXaW5kb3cpIGFjY29yZGluZ2x5
LiBUaGUgU2Nyb2xsVmlldyBpcyByZXNwb25zaWJsZQorLy8gZm9yIGRlY2lkaW5nIHdoZXRoZXIg
b3Igbm90IHRvIGNyZWF0ZSBhIE1haW5GcmFtZVNjcm9sbGJhciBvciBuYXRpdmUgc2Nyb2xsYmFy
LgorTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
KyAgICA6IFNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3Jv
bGxiYXIpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0YWtlIHVwIGFueSBzcGFjZS4KKyAg
ICByZXNpemUoMCwgMCk7Cit9CisKK3ZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
TWFpbiBmcmFtZSBzY3JvbGxiYXJzIGFyZSBub3QgcGFpbnRlZCBieSBXZWJDb3JlLgorICAgIHJl
dHVybjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xs
YmFyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdiOGNiNjM4ZmRhY2M5YjBjMjVjNjA0ODE4NWQ3NTBhNzBmNTQwZjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5o
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYgTWFpbkZyYW1lU2Ny
b2xsYmFyR3RrX2gKKyNkZWZpbmUgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrX2gKKworI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrIDogcHVibGljIFNjcm9sbGJh
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
PiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworcHJp
dmF0ZToKKyAgICBNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxi
YXJPcmllbnRhdGlvbik7Cit9OworCit9CisKKyNlbmRpZiAvLyBTY3JvbGxiYXJHdGtfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E3YTNmOTc5OTUwYWZk
OGE2OGRhNGMwMTVmMzE4OTQ5NGMzMWI5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5o
IgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkdPd25QdHJHdGsuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJY
TGlua05hbWVzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXN0ZWJvYXJk
KiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAgc3RhdGljIFBhc3RlYm9h
cmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAgIHJldHVybiBwYXN0ZWJvYXJk
OworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3sKK30KKwordm9pZCBQYXN0ZWJvYXJk
Ojp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlP
ckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwor
CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBi
b2FyZChjbGlwYm9hcmQpOworICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOworICAgIGRh
dGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKKyAgICBoZWxw
ZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkLCBjYW5TbWFydENvcHlPckRlbGV0
ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBl
cjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBs
YWNlT3B0aW9uKQoreworICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2Fy
ZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElP
Tl9DTElQQk9BUkQpOworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0
R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgp
OworCisgICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0ZXh0KTsKKyAgICBQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBi
b2FyZCwKKyAgICAgICAgKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpID8g
UGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpE
b05vdEluY2x1ZGVTbWFydFBhc3RlKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFzdGVib2FyZEhl
bHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KTsKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBi
b2FyZChmcmFtZSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVj
dEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwo
KTsKKworICAgIGRhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKKyAgICBoZWxwZXItPndy
aXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKK30KKworc3RhdGljIEtVUkwgZ2V0VVJM
Rm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgLy8gRklYTUU6IExhdGVyIHRoaXMgY29k
ZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hhbmNlcyBhcmUgYWxs
IHBsYXRmb3JtcyB3YW50IGl0LgorICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7CisgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisjaWYgRU5B
QkxFKFNWRykKKyAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRh
ZykpCisgICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0
QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyNlbmRpZgorICAgIGVsc2UgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdFRhZykpIHsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+Z2V0
QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2RlLT5kb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5n
KSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisKKyAgICBp
ZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1h
Z2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVu
ZGVyZXItPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFn
ZS0+ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisgICAgSW1hZ2UqIGltYWdlID0g
Y2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgIEFTU0VSVChpbWFn
ZSk7CisKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zv
cl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJP
QVJEKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKKworICAg
IEtVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VOb2RlKG5vZGUpOworICAgIGlmICghdXJsLmlzRW1w
dHkoKSkgeworICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CisKKyAgICAg
ICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgIH0KKworICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1
ZigpKTsKKyAgICBkYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOworCisgICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRD
b250ZW50cyhjbGlwYm9hcmQpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJk
KENsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAgIEd0a0NsaXBib2FyZCogZ3RrQ2xpcGJvYXJk
ID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+Y2xpcGJvYXJkKCk7Cisg
ICAgaWYgKGd0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhndGtDbGlwYm9hcmQpOwor
fQorCit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKK3sKKyAgICBndGtfY2xpcGJvYXJkX2NsZWFy
KGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCks
IEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6Y2FuU21h
cnRSZXBsYWNlKCkKK3sKKyAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKAorICAg
ICAgICBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNz
UmVmUHRyPFJhbmdlPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3Nl
UGxhaW5UZXh0KQoreworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRI
ZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOworICAgIERhdGFPYmpl
Y3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJk
KTsKKyAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7CisKKyAgICBj
aG9zZVBsYWluVGV4dCA9IGZhbHNlOworCisgICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgp
KSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVjdC0+bWFya3VwKCks
ICIiLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRlZCk7CisgICAgICAg
IGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAgICAgIGNob3NlUGxhaW5UZXh0ID0g
dHJ1ZTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBkYXRhT2JqZWN0LT50ZXh0KCkpOworICAg
ICAgICBpZiAoZnJhZ21lbnQpCisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5U
ZXh0KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIgPSBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOworICAgIEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsKKyAgICBE
YXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNs
aXBib2FyZCk7CisKKyAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCk7
CisgICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQoKTsKK30KKworYm9vbCBQYXN0ZWJvYXJkOjpp
c1NlbGVjdGlvbk1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT51c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKCk7
Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6c2V0U2VsZWN0aW9uTW9kZShib29sIHNlbGVjdGlvbk1v
ZGUpCit7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
c2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChzZWxlY3Rpb25Nb2RlKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZhOTc1
NDM3MDc4Y2JlYjY4MTExOTlmMWRlYzI1MDkxOGJhODMxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKQEAgLTAsMCArMSwzMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9iaW5zb25Ad2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIu
aCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURl
Y29kZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHZGtBdG9tIHRleHRQbGFp
bkF0b207CitzdGF0aWMgR2RrQXRvbSBtYXJrdXBBdG9tOworc3RhdGljIEdka0F0b20gbmV0c2Nh
cGVVUkxBdG9tOworc3RhdGljIEdka0F0b20gdXJpTGlzdEF0b207CitzdGF0aWMgR2RrQXRvbSBz
bWFydFBhc3RlQXRvbTsKK3N0YXRpYyBTdHJpbmcgZ01hcmt1cFByZWZpeDsKKworc3RhdGljIHZv
aWQgcmVtb3ZlTWFya3VwUHJlZml4KFN0cmluZyYgbWFya3VwKQoreworICAgIC8vIFRoZSBtYXJr
dXAgcHJlZml4IGlzIG5vdCBoYXJtZnVsLCBidXQgd2UgcmVtb3ZlIGl0IGZyb20gdGhlIHN0cmlu
ZyBhbnl3YXksIHNvIHRoYXQKKyAgICAvLyB3ZSBjYW4gaGF2ZSBjb25zaXN0ZW50IHJlc3VsdHMg
d2l0aCBvdGhlciBwb3J0cyBkdXJpbmcgdGhlIGxheW91dCB0ZXN0cy4KKyAgICBpZiAobWFya3Vw
LnN0YXJ0c1dpdGgoZ01hcmt1cFByZWZpeCkpCisgICAgICAgIG1hcmt1cC5yZW1vdmUoMCwgZ01h
cmt1cFByZWZpeC5sZW5ndGgoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRHZGtBdG9tcygpCit7
CisgICAgc3RhdGljIGdib29sZWFuIGluaXRpYWxpemVkID0gRkFMU0U7CisKKyAgICBpZiAoaW5p
dGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluaXRpYWxpemVkID0gVFJVRTsKKwor
ICAgIHRleHRQbGFpbkF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvcGxhaW47Y2hhcnNldD11
dGYtOCIsIEZBTFNFKTsKKyAgICBtYXJrdXBBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L2h0
bWwiLCBGQUxTRSk7CisgICAgbmV0c2NhcGVVUkxBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJfTkVU
U0NBUEVfVVJMIiwgRkFMU0UpOworICAgIHVyaUxpc3RBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0
ZXh0L3VyaS1saXN0IiwgRkFMU0UpOworICAgIHNtYXJ0UGFzdGVBdG9tID0gZ2RrX2F0b21faW50
ZXJuKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUiLCBGQUxTRSk7CisgICAg
Z01hcmt1cFByZWZpeCA9ICI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVu
dD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiI7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXIq
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFBhc3RlYm9hcmRIZWxwZXIsIGRlZmF1bHRIZWxwZXIsICgpKTsKKyAg
ICByZXR1cm4gJmRlZmF1bHRIZWxwZXI7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXI6OlBhc3RlYm9h
cmRIZWxwZXIoKQorICAgIDogbV90YXJnZXRMaXN0KGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkp
CisgICAgLCBtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoZmFsc2UpCit7CisgICAgaW5p
dEdka0F0b21zKCk7CisKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhtX3Rh
cmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVUZXh0KTsKKyAgICBndGtfdGFy
Z2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbWFya3VwQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBl
cjo6VGFyZ2V0VHlwZU1hcmt1cCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0
cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVVUklMaXN0KTsKKyAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbmV0c2NhcGVVUkxBdG9tLCAwLCBQ
YXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlTmV0c2NhcGVVUkwpOworICAgIGd0a190YXJnZXRf
bGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRh
cmdldFR5cGVJbWFnZSwgVFJVRSk7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXI6On5QYXN0ZWJvYXJk
SGVscGVyKCkKK3sKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYobV90YXJnZXRMaXN0KTsKK30K
Kworc3RhdGljIGlubGluZSBHZGtEaXNwbGF5KiBkaXNwbGF5RnJvbUZyYW1lKEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
OworICAgIEFTU0VSVChwYWdlKTsKKyAgICBDaHJvbWUqIGNocm9tZSA9IHBhZ2UtPmNocm9tZSgp
OworICAgIEFTU0VSVChjaHJvbWUpOworICAgIFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQgPSBj
aHJvbWUtPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIHJldHVybiBjbGllbnQgPyBndGtfd2lk
Z2V0X2dldF9kaXNwbGF5KGNsaWVudCkgOiBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpOworfQor
CitHdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxwZXI6OmdldEN1cnJlbnRDbGlwYm9hcmQoRnJh
bWUqIGZyYW1lKQoreworICAgIGlmIChtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQpCisg
ICAgICAgIHJldHVybiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZyYW1lKTsKKyAgICBy
ZXR1cm4gZ2V0Q2xpcGJvYXJkKGZyYW1lKTsKK30KKworR3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJk
SGVscGVyOjpnZXRDbGlwYm9hcmQoRnJhbWUqIGZyYW1lKSBjb25zdAoreworICAgIHJldHVybiBn
dGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNwbGF5RnJvbUZyYW1lKGZyYW1lKSwgR0RL
X1NFTEVDVElPTl9DTElQQk9BUkQpOworfQorCitHdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxw
ZXI6OmdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoRnJhbWUqIGZyYW1lKSBjb25zdAorewor
ICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNwbGF5RnJvbUZyYW1l
KGZyYW1lKSwgR0RLX1NFTEVDVElPTl9QUklNQVJZKTsKK30KKworR3RrVGFyZ2V0TGlzdCogUGFz
dGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGFyZ2V0
TGlzdDsKK30KKworc3RhdGljIFN0cmluZyBzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKEd0a1Nl
bGVjdGlvbkRhdGEqIGRhdGEpCit7CisgICAgLy8gZ19zdHJuZHVwIGd1YXJkcyBhZ2FpbnN0IHNl
bGVjdGlvbiBkYXRhIHRoYXQgaXMgbm90IG51bGwtdGVybWluYXRlZC4KKyAgICBHT3duUHRyPGdj
aGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19zZWxlY3Rpb25fZGF0YV9n
ZXRfbGVuZ3RoKGRhdGEpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgobWFya3VwU3Ry
aW5nLmdldCgpKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9hcmRDb250
ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgQVNT
RVJUKGRhdGFPYmplY3QpOworCisgICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190ZXh0X2F2
YWlsYWJsZShjbGlwYm9hcmQpKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRleHREYXRhKGd0
a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKTsKKyAgICAgICAgaWYgKHRleHRE
YXRhKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRl
eHREYXRhLmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190
YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKKyAgICAgICAgaWYgKEd0
a1NlbGVjdGlvbkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNs
aXBib2FyZCwgbWFya3VwQXRvbSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtYXJrdXAoc2VsZWN0
aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgICAgICAgICByZW1vdmVNYXJrdXBQcmVm
aXgobWFya3VwKTsKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChtYXJrdXApOwor
ICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0YSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xp
cGJvYXJkLCB1cmlMaXN0QXRvbSkpIHsKKyAgICAgICAgaWYgKEd0a1NlbGVjdGlvbkRhdGEqIGRh
dGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgdXJpTGlzdEF0
b20pKSB7CisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFU
b1VURjhTdHJpbmcoZGF0YSkpOworICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUo
ZGF0YSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Zmls
bFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5m
bywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBpZiAoaW5mbyA9PSBUYXJnZXRU
eXBlVGV4dCkKKyAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbkRh
dGEsIGRhdGFPYmplY3QtPnRleHQoKS51dGY4KCkuZGF0YSgpLCAtMSk7CisKKyAgICBlbHNlIGlm
IChpbmZvID09IFRhcmdldFR5cGVNYXJrdXApIHsKKyAgICAgICAgLy8gU29tZSBMaW51eCBhcHBs
aWNhdGlvbnMgcmVmdXNlIHRvIGFjY2VwdCBwYXN0ZWQgbWFya3VwIHVubGVzcyBpdCBpcworICAg
ICAgICAvLyBwcmVmaXhlZCBieSBhIGNvbnRlbnQtdHlwZSBtZXRhIHRhZy4KKyAgICAgICAgQ1N0
cmluZyBtYXJrdXAgPSBTdHJpbmcoZ01hcmt1cFByZWZpeCArIGRhdGFPYmplY3QtPm1hcmt1cCgp
KS51dGY4KCk7CisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwg
bWFya3VwQXRvbSwgOCwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFy
Kj4obWFya3VwLmRhdGEoKSksIG1hcmt1cC5sZW5ndGgoKSArIDEpOworCisgICAgfSBlbHNlIGlm
IChpbmZvID09IFRhcmdldFR5cGVVUklMaXN0KSB7CisgICAgICAgIENTdHJpbmcgdXJpTGlzdCA9
IGRhdGFPYmplY3QtPnVyaUxpc3QoKS51dGY4KCk7CisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0
YV9zZXQoc2VsZWN0aW9uRGF0YSwgdXJpTGlzdEF0b20sIDgsCisgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KHVyaUxpc3QuZGF0YSgpKSwgdXJpTGlzdC5sZW5ndGgo
KSArIDEpOworCisgICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVOZXRzY2FwZVVSTCAm
JiBkYXRhT2JqZWN0LT5oYXNVUkwoKSkgeworICAgICAgICBTdHJpbmcgdXJsKGRhdGFPYmplY3Qt
PnVybCgpKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCh1cmwpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKCJcbiIpOworCisgICAgICAgIGlmIChkYXRhT2JqZWN0LT5oYXNUZXh0KCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGRhdGFPYmplY3QtPnRleHQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXJsKTsKKworICAgICAgICBHT3duUHRyPGdjaGFyPiBy
ZXN1bHREYXRhKGdfc3RyZHVwKHJlc3VsdC51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGd0a19z
ZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwgbmV0c2NhcGVVUkxBdG9tLCA4LAorICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihyZXN1bHREYXRhLmdldCgp
KSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpICsgMSk7CisKKyAgICB9IGVsc2UgaWYgKGluZm8g
PT0gVGFyZ2V0VHlwZUltYWdlKQorICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1
ZihzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKKworICAgIGVsc2UgaWYgKGlu
Zm8gPT0gVGFyZ2V0VHlwZVNtYXJ0UGFzdGUpCisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9z
ZXRfdGV4dChzZWxlY3Rpb25EYXRhLCAiIiwgLTEpOworfQorCitHdGtUYXJnZXRMaXN0KiBQYXN0
ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKiBkYXRh
T2JqZWN0LCBTbWFydFBhc3RlSW5jbHVzaW9uIHNob3VsZElubHVkZVNtYXJ0UGFzdGUpCit7Cisg
ICAgR3RrVGFyZ2V0TGlzdCogbGlzdCA9IGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCk7CisKKyAg
ICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRk
X3RleHRfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlVGV4dCk7CisKKyAgICBpZiAoZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgbWFya3Vw
QXRvbSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVVJJ
TGlzdCgpKSB7CisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMobGlzdCwg
VGFyZ2V0VHlwZVVSSUxpc3QpOworICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QsIG5l
dHNjYXBlVVJMQXRvbSwgMCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKKyAgICB9CisKKyAgICBp
ZiAoZGF0YU9iamVjdC0+aGFzSW1hZ2UoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9p
bWFnZV90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7CisKKyAgICBpZiAoc2hv
dWxkSW5sdWRlU21hcnRQYXN0ZSA9PSBJbmNsdWRlU21hcnRQYXN0ZSkKKyAgICAgICAgZ3RrX3Rh
cmdldF9saXN0X2FkZChsaXN0LCBzbWFydFBhc3RlQXRvbSwgMCwgVGFyZ2V0VHlwZVNtYXJ0UGFz
dGUpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3ZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Zmls
bERhdGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSwgZ3VpbnQgaW5m
bywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBpZiAoIWd0a19zZWxlY3Rpb25f
ZGF0YV9nZXRfZGF0YShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrQXRvbSB0YXJn
ZXQgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3RhcmdldChkYXRhKTsKKyAgICBpZiAodGFyZ2V0
ID09IHRleHRQbGFpbkF0b20pCisgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQoc2VsZWN0aW9u
RGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IG1hcmt1cEF0
b20pIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRh
dGEpKTsKKyAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7CisgICAgICAgIGRhdGFP
YmplY3QtPnNldE1hcmt1cChtYXJrdXApOworICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IHVyaUxp
c3RBdG9tKSB7CisgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRv
VVRGOFN0cmluZyhkYXRhKSk7CisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gbmV0c2NhcGVVUkxB
dG9tKSB7CisgICAgICAgIFN0cmluZyB1cmxXaXRoTGFiZWwoc2VsZWN0aW9uRGF0YVRvVVRGOFN0
cmluZyhkYXRhKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBpZWNlczsKKyAgICAgICAgdXJs
V2l0aExhYmVsLnNwbGl0KCJcbiIsIHBpZWNlcyk7CisKKyAgICAgICAgLy8gR2l2ZSBwcmVmZXJl
bmNlIHRvIHRleHQvdXJpLWxpc3QgaGVyZSwgYXMgaXQgY2FuIGhvbGQgbW9yZQorICAgICAgICAv
LyB0aGFuIG9uZSBVUkkgYnV0IHN0aWxsIHRha2UgIHRoZSBsYWJlbCBpZiB0aGVyZSBpcyBvbmUu
CisgICAgICAgIGlmICghZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKQorICAgICAgICAgICAgZGF0
YU9iamVjdC0+c2V0VVJJTGlzdChwaWVjZXNbMF0pOworICAgICAgICBpZiAocGllY2VzLnNpemUo
KSA+IDEpCisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHBpZWNlc1sxXSk7CisgICAg
fQorfQorCitWZWN0b3I8R2RrQXRvbT4gUGFzdGVib2FyZEhlbHBlcjo6ZHJvcEF0b21zRm9yQ29u
dGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
Ly8gQWx3YXlzIHNlYXJjaCBmb3IgdGhlc2UgY29tbW9uIGF0b21zLgorICAgIFZlY3RvcjxHZGtB
dG9tPiBkcm9wQXRvbXM7CisgICAgZHJvcEF0b21zLmFwcGVuZCh0ZXh0UGxhaW5BdG9tKTsKKyAg
ICBkcm9wQXRvbXMuYXBwZW5kKG1hcmt1cEF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQodXJp
TGlzdEF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQobmV0c2NhcGVVUkxBdG9tKTsKKworICAg
IC8vIEZvciBpbWFnZXMsIHRyeSB0byBmaW5kIHRoZSBtb3N0IGFwcGxpY2FibGUgaW1hZ2UgdHlw
ZS4KKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QgPSBhZG9wdEdSZWYoZ3RrX3Rhcmdl
dF9saXN0X25ldygwLCAwKSk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9pbWFnZV90YXJnZXRz
KGxpc3QuZ2V0KCksIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7CisgICAgR2RrQXRvbSBhdG9tID0g
Z3RrX2RyYWdfZGVzdF9maW5kX3RhcmdldCh3aWRnZXQsIGNvbnRleHQsIGxpc3QuZ2V0KCkpOwor
ICAgIGlmIChhdG9tICE9IEdES19OT05FKQorICAgICAgICBkcm9wQXRvbXMuYXBwZW5kKGF0b20p
OworCisgICAgcmV0dXJuIGRyb3BBdG9tczsKK30KKworc3RhdGljIERhdGFPYmplY3RHdGsqIHNl
dHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0gMDsKKworc3RhdGljIHZvaWQgZ2V0Q2xpcGJvYXJk
Q29udGVudHNDYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0
YSAqc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBi
b2FyZCk7CisgICAgQVNTRVJUKGRhdGFPYmplY3QpOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEs
IGluZm8sIGRhdGFPYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBjbGVhckNsaXBib2FyZENvbnRl
bnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVyIGRhdGEpCit7Cisg
ICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2Fy
ZChjbGlwYm9hcmQpOworICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKKworICAgIC8vIE9ubHkgY2xl
YXIgdGhlIERhdGFPYmplY3QgZm9yIHRoaXMgY2xpcGJvYXJkIGlmIHdlIGFyZSBub3QgY3VycmVu
dGx5IHNldHRpbmcgaXQuCisgICAgaWYgKGRhdGFPYmplY3QgIT0gc2V0dGluZ0NsaXBib2FyZERh
dGFPYmplY3QpCisgICAgICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisKKyAgICBpZiAoIWRh
dGEpCisgICAgICAgIHJldHVybjsKKworICAgIEdDbG9zdXJlKiBjYWxsYmFjayA9IHN0YXRpY19j
YXN0PEdDbG9zdXJlKj4oZGF0YSk7CisgICAgR1ZhbHVlIGZpcnN0QXJndW1lbnQgPSB7MCwge3sw
fX19OworICAgIGdfdmFsdWVfaW5pdCgmZmlyc3RBcmd1bWVudCwgR19UWVBFX1BPSU5URVIpOwor
ICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIoJmZpcnN0QXJndW1lbnQsIGNsaXBib2FyZCk7CisgICAg
Z19jbG9zdXJlX2ludm9rZShjYWxsYmFjaywgMCwgMSwgJmZpcnN0QXJndW1lbnQsIDApOworICAg
IGdfY2xvc3VyZV91bnJlZihjYWxsYmFjayk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZEhlbHBlcjo6
d3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgU21hcnRQYXN0
ZUluY2x1c2lvbiBpbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqIGNhbGxiYWNrKQoreworICAg
IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQo
Y2xpcGJvYXJkKTsKKyAgICBHdGtUYXJnZXRMaXN0KiBsaXN0ID0gdGFyZ2V0TGlzdEZvckRhdGFP
YmplY3QoZGF0YU9iamVjdCwgaW5jbHVkZVNtYXJ0UGFzdGUpOworCisgICAgaW50IG51bWJlck9m
VGFyZ2V0czsKKyAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBndGtfdGFyZ2V0X3RhYmxlX25l
d19mcm9tX2xpc3QobGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7CisKKyAgICBpZiAobnVtYmVyT2ZU
YXJnZXRzID4gMCAmJiB0YWJsZSkgeworICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVj
dCA9IGRhdGFPYmplY3Q7CisKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhKGNs
aXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywKKyAgICAgICAgICAgIGdldENsaXBib2Fy
ZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjaywgY2FsbGJh
Y2spOworICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5fc3RvcmUoY2xpcGJvYXJkLCAwLCAw
KTsKKworICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7CisKKyAgICB9IGVs
c2UKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihjbGlwYm9hcmQpOworCisgICAgaWYgKHRh
YmxlKQorICAgICAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFibGUsIG51bWJlck9mVGFyZ2V0
cyk7CisgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKGxpc3QpOworfQorCitib29sIFBhc3RlYm9h
cmRIZWxwZXI6OmNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCkKK3sKKyAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF93YWl0X2lzX3Rhcmdl
dF9hdmFpbGFibGUoY2xpcGJvYXJkLCBzbWFydFBhc3RlQXRvbSk7Cit9CisKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjM4ZjgwZGQ4MWZjZTZm
NzRmOWVkMjU2NzQxYzQ2YmY4N2Q4OTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBMdWNhIEJydW5vIDxsZXRoYWxtYW44OEBnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBQYXN0ZWJvYXJkSGVscGVyX2gKKyNkZWZpbmUgUGFzdGVib2FyZEhlbHBlcl9oCisKKyNp
bmNsdWRlICJGcmFtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFPYmpl
Y3RHdGs7CisKK2NsYXNzIFBhc3RlYm9hcmRIZWxwZXIgeworcHVibGljOgorICAgIFBhc3RlYm9h
cmRIZWxwZXIoKTsKKyAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgc3RhdGlj
IFBhc3RlYm9hcmRIZWxwZXIqIGRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisKKyAgICB2b2lk
IHNldFVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoYm9vbCB1c2VQcmltYXJ5KSB7IG1fdXNl
UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCA9IHVzZVByaW1hcnk7IH0KKyAgICBib29sIHVzZVBy
aW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKSB7IHJldHVybiBtX3VzZVByaW1hcnlTZWxlY3Rpb25D
bGlwYm9hcmQ7IH0KKworICAgIGVudW0gU21hcnRQYXN0ZUluY2x1c2lvbiB7IEluY2x1ZGVTbWFy
dFBhc3RlLCBEb05vdEluY2x1ZGVTbWFydFBhc3RlIH07CisKKyAgICBHdGtDbGlwYm9hcmQqIGdl
dEN1cnJlbnRDbGlwYm9hcmQoRnJhbWUqKTsKKyAgICBHdGtDbGlwYm9hcmQqIGdldENsaXBib2Fy
ZChGcmFtZSopIGNvbnN0OworICAgIEd0a0NsaXBib2FyZCogZ2V0UHJpbWFyeVNlbGVjdGlvbkNs
aXBib2FyZChGcmFtZSopIGNvbnN0OworICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QoKSBj
b25zdDsKKyAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2Jq
ZWN0R3RrKiwgU21hcnRQYXN0ZUluY2x1c2lvbiA9IERvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOwor
ICAgIHZvaWQgZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50LCBEYXRh
T2JqZWN0R3RrKik7CisgICAgdm9pZCBmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxl
Y3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKKyAgICBWZWN0b3I8R2RrQXRvbT4g
ZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCopOworICAgIHZv
aWQgd3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqLCBTbWFydFBhc3RlSW5jbHVz
aW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqID0gMCk7CisgICAgdm9pZCBn
ZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqKTsKKworICAgIGVudW0gUGFzdGVib2Fy
ZFRhcmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRUeXBlVGV4dCwgVGFyZ2V0VHlw
ZUltYWdlLCBUYXJnZXRUeXBlVVJJTGlzdCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMLCBUYXJnZXRU
eXBlU21hcnRQYXN0ZSwgVGFyZ2V0VHlwZVVua25vd24gfTsKKyAgICBib29sIGNsaXBib2FyZENv
bnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9hcmQqKTsKKworcHJpdmF0ZToKKyAg
ICBHdGtUYXJnZXRMaXN0KiBtX3RhcmdldExpc3Q7CisgICAgYm9vbCBtX3VzZVByaW1hcnlTZWxl
Y3Rpb25DbGlwYm9hcmQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBQYXN0ZWJvYXJkSGVscGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MDZkNmUyNWM5OTAwNWEyNDIwMGNhOWQ0ZjA1MDI1NWZlMjJmNGM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRH
dGsuY3BwCkBAIC0wLDAgKzEsNjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJXaW5kb3dzS2V5
Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdkay9nZGtr
ZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2Ug
dGhpcyB0byBtaXJyb3IKKy8vIG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVy
YXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCisvLyBhdCBidWlsZCB0aW1lLgorU3RyaW5nIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUodW5zaWduZWQg
a2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAgICAgICAgY2FzZSBHREtfTWVu
dToKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6CisgICAgICAgIGNhc2UgR0RLX0FsdF9SOgorICAg
ICAgICAgICAgcmV0dXJuICJBbHQiOworICAgICAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAg
ICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIEdES19Eb3duOgorICAgICAgICAgICAg
cmV0dXJuICJEb3duIjsKKyAgICAgICAgICAgIC8vICJFbmQiCisgICAgICAgIGNhc2UgR0RLX0Vu
ZDoKKyAgICAgICAgICAgIHJldHVybiAiRW5kIjsKKyAgICAgICAgICAgIC8vICJFbnRlciIKKyAg
ICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKKyAg
ICAgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAg
ICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOworICAg
ICAgICBjYXNlIEdES19GMToKKyAgICAgICAgICAgIHJldHVybiAiRjEiOworICAgICAgICBjYXNl
IEdES19GMjoKKyAgICAgICAgICAgIHJldHVybiAiRjIiOworICAgICAgICBjYXNlIEdES19GMzoK
KyAgICAgICAgICAgIHJldHVybiAiRjMiOworICAgICAgICBjYXNlIEdES19GNDoKKyAgICAgICAg
ICAgIHJldHVybiAiRjQiOworICAgICAgICBjYXNlIEdES19GNToKKyAgICAgICAgICAgIHJldHVy
biAiRjUiOworICAgICAgICBjYXNlIEdES19GNjoKKyAgICAgICAgICAgIHJldHVybiAiRjYiOwor
ICAgICAgICBjYXNlIEdES19GNzoKKyAgICAgICAgICAgIHJldHVybiAiRjciOworICAgICAgICBj
YXNlIEdES19GODoKKyAgICAgICAgICAgIHJldHVybiAiRjgiOworICAgICAgICBjYXNlIEdES19G
OToKKyAgICAgICAgICAgIHJldHVybiAiRjkiOworICAgICAgICBjYXNlIEdES19GMTA6CisgICAg
ICAgICAgICByZXR1cm4gIkYxMCI7CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgICAg
IHJldHVybiAiRjExIjsKKyAgICAgICAgY2FzZSBHREtfRjEyOgorICAgICAgICAgICAgcmV0dXJu
ICJGMTIiOworICAgICAgICBjYXNlIEdES19GMTM6CisgICAgICAgICAgICByZXR1cm4gIkYxMyI7
CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgICAgIHJldHVybiAiRjE0IjsKKyAgICAg
ICAgY2FzZSBHREtfRjE1OgorICAgICAgICAgICAgcmV0dXJuICJGMTUiOworICAgICAgICBjYXNl
IEdES19GMTY6CisgICAgICAgICAgICByZXR1cm4gIkYxNiI7CisgICAgICAgIGNhc2UgR0RLX0Yx
NzoKKyAgICAgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICAgICAgY2FzZSBHREtfRjE4OgorICAg
ICAgICAgICAgcmV0dXJuICJGMTgiOworICAgICAgICBjYXNlIEdES19GMTk6CisgICAgICAgICAg
ICByZXR1cm4gIkYxOSI7CisgICAgICAgIGNhc2UgR0RLX0YyMDoKKyAgICAgICAgICAgIHJldHVy
biAiRjIwIjsKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICAgICAgcmV0dXJuICJGMjEi
OworICAgICAgICBjYXNlIEdES19GMjI6CisgICAgICAgICAgICByZXR1cm4gIkYyMiI7CisgICAg
ICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgICAgIHJldHVybiAiRjIzIjsKKyAgICAgICAgY2Fz
ZSBHREtfRjI0OgorICAgICAgICAgICAgcmV0dXJuICJGMjQiOworICAgICAgICBjYXNlIEdES19I
ZWxwOgorICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKKyAgICAgICAgY2FzZSBHREtfSG9tZToK
KyAgICAgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgICAgIGNhc2UgR0RLX0luc2VydDoKKyAg
ICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAgICAg
ICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKKyAgICAg
ICAgICAgIHJldHVybiAiUGFnZURvd24iOworICAgICAgICBjYXNlIEdES19QYWdlX1VwOgorICAg
ICAgICAgICAgcmV0dXJuICJQYWdlVXAiOworICAgICAgICBjYXNlIEdES19QYXVzZToKKyAgICAg
ICAgICAgIHJldHVybiAiUGF1c2UiOworICAgICAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVu
OgorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVybiAiUHJpbnRTY3Jl
ZW4iOworICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgICAgIHJldHVybiAiUmlnaHQi
OworICAgICAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgICAgICByZXR1cm4gIlNlbGVjdCI7
CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAgICAgICAgICAgcmV0dXJuICJVcCI7CisgICAgICAg
ICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgorICAgICAgICBj
YXNlIEdES19EZWxldGU6CisgICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7CisgICAgICAgIGNh
c2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA4IjsKKyAgICAgICAg
Y2FzZSBHREtfSVNPX0xlZnRfVGFiOgorICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6Cisg
ICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA5IjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwg
Z2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBwZXIoa2V5Q29kZSkpKTsKKyAg
ICB9Cit9CisKK2ludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2Rr
S2V5Q29kZSh1bnNpZ25lZCBrZXljb2RlKQoreworICAgIHN3aXRjaCAoa2V5Y29kZSkgeworICAg
ICAgICBjYXNlIEdES19LUF8wOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYw
KSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgICAgICBjYXNlIEdES19LUF8xOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAgICAg
ICBjYXNlIEdES19LUF8yOgorICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQyOyAvLyAoNjIp
IE51bWVyaWMga2V5cGFkIDIga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzM6CisgICAgICAgICAg
ICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgICAg
ICBjYXNlIEdES19LUF80OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkg
TnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfNToKKyAgICAgICAgICAg
IHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKKyAgICAgICAg
Y2FzZSBHREtfS1BfNjoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51
bWVyaWMga2V5cGFkIDYga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzc6CisgICAgICAgICAgICBy
ZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgICAgICBj
YXNlIEdES19LUF84OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7IC8vICg2OCkgTnVt
ZXJpYyBrZXlwYWQgOCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfOToKKyAgICAgICAgICAgIHJl
dHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgICAgIGNh
c2UgR0RLX0tQX011bHRpcGx5OgorICAgICAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAo
NkEpIE11bHRpcGx5IGtleQorICAgICAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfU3VidHJh
Y3Q6CisgICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5
CisgICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6CisgICAgICAgICAgICByZXR1cm4gVktfREVD
SU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQorICAgICAgICBjYXNlIEdES19LUF9EaXZpZGU6Cisg
ICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBrZXkKKworICAgICAg
ICBjYXNlIEdES19LUF9QYWdlX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAo
MjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93bjoKKyAgICAgICAg
ICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAgICAgICAgY2FzZSBH
REtfS1BfRW5kOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5Cisg
ICAgICAgIGNhc2UgR0RLX0tQX0hvbWU6CisgICAgICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8g
KDI0KSBIT01FIGtleQorICAgICAgICBjYXNlIEdES19LUF9MZWZ0OgorICAgICAgICAgICAgcmV0
dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfS1Bf
VXA6CisgICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5CisgICAg
ICAgIGNhc2UgR0RLX0tQX1JpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAo
MjcpIFJJR0hUIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19LUF9Eb3duOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKKworICAgICAgICBjYXNl
IEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNL
U1BBQ0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKKyAgICAgICAgY2FzZSBH
REtfMzI3MF9CYWNrVGFiOgorICAgICAgICBjYXNlIEdES19UYWI6CisgICAgICAgICAgICByZXR1
cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKKyAgICAgICAgY2FzZSBHREtfQ2xlYXI6CisgICAg
ICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5CisgICAgICAgIGNhc2Ug
R0RLX0lTT19FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgICAgIGNhc2Ug
R0RLX1JldHVybjoKKyAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4g
a2V5CisKKyAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5CisgICAgICAgICAg
ICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKKworICAgICAgICBjYXNlIEdES19NZW51Ogor
ICAgICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5h
dHVyYWwga2V5Ym9hcmQpCisKKyAgICAgICAgICAgIC8vIFZLX01FTlUgKDEyKSBBTFQga2V5CisK
KyAgICAgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8v
ICgxMykgUEFVU0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKKyAgICAgICAgICAg
IHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICAgICAgY2FzZSBH
REtfS2FuYV9Mb2NrOgorICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0OgorICAgICAgICAgICAg
cmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1v
ZGUKKyAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdV
TDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgICAgICAgICAvLyBWS19K
VU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElN
RSBmaW5hbCBtb2RlCisgICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKKyAgICAgICAgICAg
IHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQorICAgICAgICBjYXNlIEdE
S19LYW5qaToKKyAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2Fuamkg
bW9kZQorICAgICAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgICAgICByZXR1cm4gVktfRVND
QVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUg
Y29udmVydAorICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0
CisgICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0CisgICAgICAgICAgICAv
LyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKKyAgICAgICAgY2Fz
ZSBHREtfc3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VC
QVIKKyAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUklP
UjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246CisgICAg
ICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgICAgIGNh
c2UgR0RLX0VuZDoKKyAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQor
ICAgICAgICBjYXNlIEdES19Ib21lOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgy
NCkgSE9NRSBrZXkKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBW
S19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgICAgICBjYXNl
IEdES19SaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBB
UlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19E
T1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQorICAgICAgICBj
YXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVybiBWS19TTkFQU0hPVDsgLy8gKDJDKSBQ
UklOVCBTQ1JFRU4ga2V5CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5CisgICAgICAgIGNhc2UgR0RLX0lu
c2VydDoKKyAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgorICAgICAgICAgICAgcmV0dXJuIFZL
X0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKKyAgICAg
ICAgY2FzZSBHREtfS1BfRGVsZXRlOgorICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8g
KDJFKSBERUwga2V5CisgICAgICAgIGNhc2UgR0RLX0hlbHA6CisgICAgICAgICAgICByZXR1cm4g
VktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgICAgICBjYXNlIEdES18wOgorICAgICAgICBj
YXNlIEdES19wYXJlbnJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzAp
IDApIGtleQorICAgICAgICBjYXNlIEdES18xOgorICAgICAgICBjYXNlIEdES19leGNsYW06Cisg
ICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQorICAgICAgICBjYXNlIEdE
S18yOgorICAgICAgICBjYXNlIEdES19hdDoKKyAgICAgICAgICAgIHJldHVybiBWS18yOyAvLyAg
KDMyKSAyICYga2V5CisgICAgICAgIGNhc2UgR0RLXzM6CisgICAgICAgIGNhc2UgR0RLX251bWJl
cnNpZ246CisgICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2FzZSAnIyc7Cisg
ICAgICAgIGNhc2UgR0RLXzQ6CisgICAgICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBr
ZXkgJyQnOworICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgICAgIGNhc2UgR0RLXzU6Cisg
ICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6CisgICAgICAgICAgICByZXR1cm4gVktfNTsgLy8gICgz
NSkgNSBrZXkgICclJworICAgICAgICBjYXNlIEdES182OgorICAgICAgICBjYXNlIEdES19hc2Np
aWNpcmN1bToKKyAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2IGtleSAgJ14nCisg
ICAgICAgIGNhc2UgR0RLXzc6CisgICAgICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoKKyAgICAgICAg
ICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAgICAgICAgY2FzZSBH
REtfODoKKyAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAgICAgICAgICByZXR1cm4gVktf
ODsgLy8gICgzOCkgOCBrZXkgICcqJworICAgICAgICBjYXNlIEdES185OgorICAgICAgICBjYXNl
IEdES19wYXJlbmxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkg
JygnCisgICAgICAgIGNhc2UgR0RLX2E6CisgICAgICAgIGNhc2UgR0RLX0E6CisgICAgICAgICAg
ICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4g
MHg0MTsKKyAgICAgICAgY2FzZSBHREtfYjoKKyAgICAgICAgY2FzZSBHREtfQjoKKyAgICAgICAg
ICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2FzZSAnQic6IHJldHVy
biAweDQyOworICAgICAgICBjYXNlIEdES19jOgorICAgICAgICBjYXNlIEdES19DOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0
dXJuIDB4NDM7CisgICAgICAgIGNhc2UgR0RLX2Q6CisgICAgICAgIGNhc2UgR0RLX0Q6CisgICAg
ICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiBy
ZXR1cm4gMHg0NDsKKyAgICAgICAgY2FzZSBHREtfZToKKyAgICAgICAgY2FzZSBHREtfRToKKyAg
ICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6
IHJldHVybiAweDQ1OworICAgICAgICBjYXNlIEdES19mOgorICAgICAgICBjYXNlIEdES19GOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5IGNhc2UgJ2YnOiBjYXNlICdG
JzogcmV0dXJuIDB4NDY7CisgICAgICAgIGNhc2UgR0RLX2c6CisgICAgICAgIGNhc2UgR0RLX0c6
CisgICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2FzZSAnZyc6IGNhc2Ug
J0cnOiByZXR1cm4gMHg0NzsKKyAgICAgICAgY2FzZSBHREtfaDoKKyAgICAgICAgY2FzZSBHREtf
SDoKKyAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2Fz
ZSAnSCc6IHJldHVybiAweDQ4OworICAgICAgICBjYXNlIEdES19pOgorICAgICAgICBjYXNlIEdE
S19JOgorICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBj
YXNlICdJJzogcmV0dXJuIDB4NDk7CisgICAgICAgIGNhc2UgR0RLX2o6CisgICAgICAgIGNhc2Ug
R0RLX0o6CisgICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6
IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKKyAgICAgICAgY2FzZSBHREtfazoKKyAgICAgICAgY2Fz
ZSBHREtfSzoKKyAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAgKDRCKSBLIGtleSBjYXNlICdr
JzogY2FzZSAnSyc6IHJldHVybiAweDRCOworICAgICAgICBjYXNlIEdES19sOgorICAgICAgICBj
YXNlIEdES19MOgorICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNhc2Ug
J2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAgICAgIGNhc2UgR0RLX206CisgICAgICAg
IGNhc2UgR0RLX006CisgICAgICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2Fz
ZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKKyAgICAgICAgY2FzZSBHREtfbjoKKyAgICAg
ICAgY2FzZSBHREtfTjoKKyAgICAgICAgICAgIHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBj
YXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOworICAgICAgICBjYXNlIEdES19vOgorICAg
ICAgICBjYXNlIEdES19POgorICAgICAgICAgICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5
IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7CisgICAgICAgIGNhc2UgR0RLX3A6Cisg
ICAgICAgIGNhc2UgR0RLX1A6CisgICAgICAgICAgICByZXR1cm4gVktfUDsgLy8gICg1MCkgUCBr
ZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKKyAgICAgICAgY2FzZSBHREtfcToK
KyAgICAgICAgY2FzZSBHREtfUToKKyAgICAgICAgICAgIHJldHVybiBWS19ROyAvLyAgKDUxKSBR
IGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOworICAgICAgICBjYXNlIEdES19y
OgorICAgICAgICBjYXNlIEdES19SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIp
IFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7CisgICAgICAgIGNhc2UgR0RL
X3M6CisgICAgICAgIGNhc2UgR0RLX1M6CisgICAgICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1
MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKKyAgICAgICAgY2FzZSBH
REtfdDoKKyAgICAgICAgY2FzZSBHREtfVDoKKyAgICAgICAgICAgIHJldHVybiBWS19UOyAvLyAg
KDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAweDU0OworICAgICAgICBjYXNl
IEdES191OgorICAgICAgICBjYXNlIEdES19VOgorICAgICAgICAgICAgcmV0dXJuIFZLX1U7IC8v
ICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7CisgICAgICAgIGNh
c2UgR0RLX3Y6CisgICAgICAgIGNhc2UgR0RLX1Y6CisgICAgICAgICAgICByZXR1cm4gVktfVjsg
Ly8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKKyAgICAgICAg
Y2FzZSBHREtfdzoKKyAgICAgICAgY2FzZSBHREtfVzoKKyAgICAgICAgICAgIHJldHVybiBWS19X
OyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAweDU3OworICAgICAg
ICBjYXNlIEdES194OgorICAgICAgICBjYXNlIEdES19YOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJuIDB4NTg7CisgICAg
ICAgIGNhc2UgR0RLX3k6CisgICAgICAgIGNhc2UgR0RLX1k6CisgICAgICAgICAgICByZXR1cm4g
VktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1cm4gMHg1OTsKKyAg
ICAgICAgY2FzZSBHREtfejoKKyAgICAgICAgY2FzZSBHREtfWjoKKyAgICAgICAgICAgIHJldHVy
biBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJldHVybiAweDVBOwor
ICAgICAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8g
KDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICAg
ICAgY2FzZSBHREtfTWV0YV9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1Qykg
UmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgICAgICAvLyBWS19T
TEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAgICAgLy8gVktfU0VQQVJBVE9S
ICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0
cmFjdCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAg
ICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAgICAgICAgICAgLy8gaGFu
ZGxlZCBieSBrZXkgY29kZSBhYm92ZQorCisgICAgICAgIGNhc2UgR0RLX051bV9Mb2NrOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sga2V5CisKKyAgICAg
ICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgICAgICByZXR1cm4gVktfU0NST0xMOyAv
LyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAgIGNhc2UgR0RLX1NoaWZ0X0w6CisgICAg
ICAgICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQgU0hJRlQga2V5CisgICAgICAg
IGNhc2UgR0RLX1NoaWZ0X1I6CisgICAgICAgICAgICByZXR1cm4gVktfUlNISUZUOyAvLyAoQTEp
IFJpZ2h0IFNISUZUIGtleQorICAgICAgICBjYXNlIEdES19Db250cm9sX0w6CisgICAgICAgICAg
ICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05UUk9MIGtleQorICAgICAgICBj
YXNlIEdES19Db250cm9sX1I6CisgICAgICAgICAgICByZXR1cm4gVktfUkNPTlRST0w7IC8vIChB
MykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6CisgICAgICAgICAg
ICByZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtleQorICAgICAgICBjYXNlIEdE
S19BbHRfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1KSBSaWdodCBNRU5V
IGtleQorCisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAv
WFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAo
QTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtleQorICAgICAgICAgICAgLy8g
VktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gg
a2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkg
V2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JS
T1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBr
ZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDog
QnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKKyAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9NVVRF
IChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKKyAgICAgICAgICAgIC8vIFZL
X1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKKyAgICAg
ICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtl
eQorICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9Y
UDogTmV4dCBUcmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIx
KSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorICAgICAgICAgICAgLy8gVktf
TUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBNZWRpYSBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1
c2UgTWVkaWEga2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3Mg
MjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9NRURJQV9T
RUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAgICAgICAgICAg
IC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlv
biAxIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAv
WFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisKKyAgICAgICAgICAgIC8vIFZLX09FTV8xIChC
QSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
Jzs6JyBrZXkKKyAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgorICAgICAgICBjYXNlIEdES19j
b2xvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAnOic6
IHJldHVybiAweEJBOworICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIw
MDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgICAgIGNhc2Ug
R0RLX3BsdXM6CisgICAgICAgIGNhc2UgR0RLX2VxdWFsOgorICAgICAgICAgICAgcmV0dXJuIFZL
X09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7CisgICAgICAgICAg
ICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9y
ZWdpb24sIHRoZSAnLCcga2V5CisgICAgICAgIGNhc2UgR0RLX2NvbW1hOgorICAgICAgICBjYXNl
IEdES19sZXNzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsgLy9jYXNlICcsJzog
Y2FzZSAnPCc6IHJldHVybiAweEJDOworICAgICAgICAgICAgLy8gVktfT0VNX01JTlVTIChCRCkg
V2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQorICAg
ICAgICBjYXNlIEdES19taW51czoKKyAgICAgICAgY2FzZSBHREtfdW5kZXJzY29yZToKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4g
MHhCRDsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6
IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAgICAgIGNhc2UgR0RLX3Bl
cmlvZDoKKyAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKKyAgICAgICAgICAgIHJldHVybiBWS19P
RU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7CisgICAgICAgICAg
ICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICcvPycga2V5CisgICAgICAgIGNhc2UgR0RLX3NsYXNoOgorICAgICAg
ICBjYXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMjsgLy9jYXNl
ICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgICAgICAgICAgLy8gVktfT0VNXzMgKEMw
KSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJv
YXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAn
YH4nIGtleQorICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgorICAgICAgICBjYXNlIEdES19x
dW90ZWxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2FzZSAnYCc6IGNhc2Ug
J34nOiByZXR1cm4gMHhDMDsKKyAgICAgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAg
ICAgICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6CisgICAgICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoK
KyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAneyc6IHJldHVy
biAweERCOworICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5l
b3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6
IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgICAgICBjYXNl
IEdES19iYWNrc2xhc2g6CisgICAgICAgIGNhc2UgR0RLX2JhcjoKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhEQzsKKyAgICAgICAg
ICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKKyAgICAgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0
OgorICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX09F
TV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOworICAgICAgICAgICAgLy8g
VktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2
YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5
Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5CisgICAgICAgIGNhc2Ug
R0RLX3F1b3RlcmlnaHQ6CisgICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgorICAgICAgICAgICAg
cmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKKyAg
ICAgICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KKyAgICAgICAgICAgIC8vIFZLX09FTV8xMDIg
KEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhl
IGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICAgICAgICAgIC8v
IFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2lu
ZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAgICAgIC8vIFZLX1BBQ0tFVCAo
RTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBp
ZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3Jk
IG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1
dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVU
LFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCisgICAgICAgICAgICAvLyBWS19B
VFROIChGNikgQXR0biBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5
CisgICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQorICAgICAgICAgICAgLy8g
VktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5CisgICAgICAgICAgICAvLyBWS19QTEFZIChGQSkg
UGxheSBrZXkKKyAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQorICAgICAgICAg
ICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICAgICAgICAg
IC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAgICAgICAgICAgIC8vIFZLX09FTV9DTEVBUiAoRkUp
IENsZWFyIGtleQorICAgICAgICBjYXNlIEdES19GMToKKyAgICAgICAgY2FzZSBHREtfRjI6Cisg
ICAgICAgIGNhc2UgR0RLX0YzOgorICAgICAgICBjYXNlIEdES19GNDoKKyAgICAgICAgY2FzZSBH
REtfRjU6CisgICAgICAgIGNhc2UgR0RLX0Y2OgorICAgICAgICBjYXNlIEdES19GNzoKKyAgICAg
ICAgY2FzZSBHREtfRjg6CisgICAgICAgIGNhc2UgR0RLX0Y5OgorICAgICAgICBjYXNlIEdES19G
MTA6CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgY2FzZSBHREtfRjEyOgorICAgICAg
ICBjYXNlIEdES19GMTM6CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgY2FzZSBHREtf
RjE1OgorICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgIGNhc2UgR0RLX0YxNzoKKyAgICAg
ICAgY2FzZSBHREtfRjE4OgorICAgICAgICBjYXNlIEdES19GMTk6CisgICAgICAgIGNhc2UgR0RL
X0YyMDoKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICBjYXNlIEdES19GMjI6CisgICAg
ICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgY2FzZSBHREtfRjI0OgorICAgICAgICAgICAgcmV0
dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOworICAgICAgICBjYXNlIEdES19LRVlfVm9p
ZFN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNTS0VZOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9CisKK1N0cmluZyBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCB2YWwpCit7Cisg
ICAgc3dpdGNoICh2YWwpIHsKKyAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgICAgICBj
YXNlIEdES19LUF9FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygiXHIiKTsKKyAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygiXHg4Iik7CisgICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoIlx0Iik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7CisgICAgICAgICAgICBn
bG9uZyBud2M7CisgICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBnX3VjczRfdG9fdXRm
MTYoJmMsIDEsIDAsICZud2MsIDApOworCisgICAgICAgICAgICBTdHJpbmcgcmV0VmFsOworICAg
ICAgICAgICAgaWYgKHVjaGFyMTYpCisgICAgICAgICAgICAgICAgcmV0VmFsID0gU3RyaW5nKChV
Q2hhciopdWNoYXIxNiwgbndjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXRWYWwgPSBTdHJpbmcoKTsKKworICAgICAgICAgICAgZ19mcmVlKHVjaGFyMTYpOworCisgICAg
ICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KK30KKworc3RhdGljIFBsYXRmb3JtRXZlbnQ6
OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAg
IHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpL
ZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Cit9CisKK3N0YXRpYyBQbGF0Zm9ybUV2ZW50
OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQor
eworICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOworICAgIGlmIChldmVudC0+c3RhdGUg
JiBHREtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdES18zMjcwX0JhY2tUYWIpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoZXZl
bnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRm
b3JtRXZlbnQ6OkN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0sp
CisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7CisgICAgaWYgKGV2
ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9y
bUV2ZW50OjpNZXRhS2V5OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUV2ZW50OjpN
b2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKKy8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhl
IG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycworUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25zdCBDb21wb3Np
dGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKKyAgICA6IFBsYXRmb3JtRXZlbnQoZXZl
bnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtLZXlFdmVudChldmVu
dCksIGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX3RleHQoY29tcG9zaXRpb25SZXN1bHRzLnNpbXBs
ZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcgOiBzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX3VubW9kaWZpZWRUZXh0
KG1fdGV4dCkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29k
ZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NL
ZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fbmF0aXZlVmlydHVh
bEtleUNvZGUoZXZlbnQtPmtleXZhbCkKKyAgICAsIG1fbWFjQ2hhckNvZGUoMCkKKyAgICAsIG1f
YXV0b1JlcGVhdChmYWxzZSkKKyAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtleXZhbCA+PSBHREtf
S1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkKKyAgICAsIG1faXNTeXN0ZW1L
ZXkoZmFsc2UpCisgICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQorICAgICwgbV9jb21wb3NpdGlv
blJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQoreworICAgIC8vIFRvIG1hdGNoIHRoZSBiZWhh
dmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMgdGhhdCB0cmlnZ2Vy
ZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KKyAgICBpZiAoY29tcG9zaXRpb25SZXN1bHRzLmNvbXBv
c2l0aW9uVXBkYXRlZCgpKQorICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IFZLX1BS
T0NFU1NLRVk7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVL
ZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCit7
CisgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24g
b3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBtX3R5cGUgPSB0eXBlOworCisgICAg
aWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKKyAgICAgICAgbV90ZXh0ID0g
U3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBvc2l0aW9uUmVzdWx0
cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkgeworICAgICAgICAvLyBIYXZpbmcgZW1wdHkgdGV4dCwg
cHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlwcmVzcykgZXZlbnQKKyAgICAg
ICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQgdHJpZ2dlciBjb21wb3NpdGlv
biBldmVudHMgc2hvdWxkIG5vdAorICAgICAgICAvLyBmaXJlIGtleXByZXNzLgorICAgICAgICBt
X3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAg
ICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQorfQorCitib29sIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAgIHJldHVybiBnZGtf
a2V5bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKGJv
b2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFLZXkp
Cit7CisgICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOworICAgIGd0a19nZXRfY3VycmVudF9ldmVu
dF9zdGF0ZSgmc3RhdGUpOworCisgICAgc2hpZnRLZXkgPSBzdGF0ZSAmIEdES19TSElGVF9NQVNL
OworICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAgYWx0S2V5ID0g
c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1ldGFLZXkgPSBzdGF0ZSAmIEdES19NRVRBX01B
U0s7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3Vz
ZUV2ZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNDEwMWMxZmEzZDcyODY2Y2JjOTUzZjg0YjU3Mjg1OTM3ZjMyMTNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZl
bnRHdGsuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBt
b2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KKwor
Ly8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3Ry
dWN0b3JzCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudEJ1
dHRvbiogZXZlbnQpCit7CisgICAgbV90aW1lc3RhbXAgPSBldmVudC0+dGltZTsKKyAgICBtX3Bv
c2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eCwgKGludClldmVudC0+eSk7CisgICAgbV9n
bG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+
eV9yb290KTsKKworICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYg
R0RLX1NISUZUX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlm
IChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtX21vZGlmaWVycyB8
PSBDdHJsS2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQorICAgICAg
ICBtX21vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRB
X01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7CisKKyAgICBzd2l0Y2ggKGV2
ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJC
VVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19C
VVRUT05fUkVMRUFTRToKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVz
c2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7Cisg
ICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOworICAgICAg
ICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9
PSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKKyAgICAg
ICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCisgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAyOworICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtf
M0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7CisKKyAgICAgICAg
aWYgKGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRv
bjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgbV9i
dXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0g
MykKKyAgICAgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30K
KworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24q
IG1vdGlvbikKK3sKKyAgICBtX3RpbWVzdGFtcCA9IG1vdGlvbi0+dGltZTsKKyAgICBtX3Bvc2l0
aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKKyAgICBtX2ds
b2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24t
Pnlfcm9vdCk7CisKKyAgICBtX21vZGlmaWVycyA9IDA7CisgICAgaWYgKG1vdGlvbi0+c3RhdGUg
JiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAg
aWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtX21vZGlmaWVy
cyB8PSBDdHJsS2V5OworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAg
ICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5OworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RL
X01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKKworICAgIHN3aXRj
aCAobW90aW9uLT50eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAg
bV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBO
b0J1dHRvbjsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKworICAgIGlm
IChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAgbV9idXR0b24gPSBM
ZWZ0QnV0dG9uOworICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQlVUVE9OMl9NQVNL
KQorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAgICBlbHNlIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRv
bjsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5H
dGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBjNWY5MTZjOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCkBAIC0w
LDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3Rp
YW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgR3RrV2lkZ2V0
KiBnZXRUb3BsZXZlbChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIHRvcGxl
dmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsKKyAgICByZXR1cm4gZ3RrX3dp
ZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgPyB0b3BsZXZlbCA6IDA7Cit9CisKK3N0YXRpYyBH
ZGtWaXN1YWwqIGdldFZpc3VhbChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIGNv
bnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoIWNvbnRhaW5lcikgeworICAg
ICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICAg
ICAgcmV0dXJuIHNjcmVlbiA/IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKSA6
IDA7CisgICAgfQorCisgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9yZWFsaXplZChjb250YWluZXIp
KQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOworICAgIHJldHVy
biBjb250YWluZXIgPyBnZGtfd2luZG93X2dldF92aXN1YWwoZ3RrX3dpZGdldF9nZXRfd2luZG93
KGNvbnRhaW5lcikpIDogMDsKK30KKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQor
eworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdpZGdldCk7CisgICAgaWYgKCF2
aXN1YWwpCisgICAgICAgIHJldHVybiAyNDsKKyAgICByZXR1cm4gZ2RrX3Zpc3VhbF9nZXRfZGVw
dGgodmlzdWFsKTsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lk
Z2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdpZGdldCk7CisgICAg
aWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiA4OworCisgICAgcmV0dXJuIGdka192aXN1YWxf
Z2V0X2JpdHNfcGVyX3JnYih2aXN1YWwpOworfQorCitib29sIHNjcmVlbklzTW9ub2Nocm9tZShX
aWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4gc2NyZWVuRGVwdGgod2lkZ2V0KSA8IDI7Cit9
CisKKworc3RhdGljIEdka1NjcmVlbiogZ2V0U2NyZWVuKEd0a1dpZGdldCogd2lkZ2V0KQorewor
ICAgIHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0KSA/IGd0a193aWRnZXRfZ2V0
X3NjcmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworfQorCitGbG9hdFJl
Y3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRnZXQqIGNvbnRhaW5l
ciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoY29udGFpbmVyKQorICAgICAgICBjb250
YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOworCisgICAgR2RrU2NyZWVuKiBzY3JlZW4g
PSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1
bHQoKTsKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisg
ICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93
aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOworCisg
ICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OworICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2Vv
bWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0cnkpOworCisgICAgcmV0dXJuIEZsb2F0UmVj
dChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0
KTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7
CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBHVEtfV0lER0VUKHdpZGdldC0+
cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSA6IDA7CisgICAgaWYg
KGNvbnRhaW5lciAmJiAhZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQoY29udGFpbmVyKSkKKyAgICAg
ICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKKworICAgIEdka1NjcmVlbiogc2NyZWVuID0g
Y29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0
KCk7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2lu
ZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKKworICAg
IEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX3dvcmth
cmVhKHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVhKTsKKworICAgIHJldHVybiBGbG9hdFJlY3Qo
d29ya0FyZWEueCwgd29ya0FyZWEueSwgd29ya0FyZWEud2lkdGgsIHdvcmtBcmVhLmhlaWdodCk7
CisKK30KKwordm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQcm9maWxlJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTIwYmY5
YTg5ZDc2ZDA1ZjUyOGVkMzQ5ZGUwNTM2NzI3MTJkZjhhNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcApAQCAtMCwwICsxLDk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUg
IlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVudCBjb25z
dHJ1Y3RvcnMKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKiBldmVudCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVsdGEgPSAxOworCisg
ICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAgbV90aW1lc3RhbXAgPSBjdXJy
ZW50VGltZSgpOworCisgICAgbV9tb2RpZmllcnMgPSAwOworICAgIGlmIChldmVudC0+c3RhdGUg
JiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAg
aWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJz
IHw9IEN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAg
ICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01F
VEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKKworICAgIG1fZGVsdGFY
ID0gMDsKKyAgICBtX2RlbHRhWSA9IDA7CisKKyAgICAvLyBEb2NzIHNheSBhbiB1cHdhcmRzIHNj
cm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMgYSBwb3NpdGl2ZSBkZWx0YQorICAgIHN3aXRj
aCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEdES19TQ1JPTExfVVA6CisgICAg
ICAgICAgICBtX2RlbHRhWSA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR0RLX1NDUk9MTF9ET1dOOgorICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVsdGE7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6CisgICAgICAgICAg
ICBtX2RlbHRhWCA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0RL
X1NDUk9MTF9SSUdIVDoKKyAgICAgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhOworICAgICAgICAg
ICAgYnJlYWs7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCisgICAgICAgIGNhc2Ug
R0RLX1NDUk9MTF9TTU9PVEg6IHsKKyAgICAgICAgICAgICAgICBnZG91YmxlIGRlbHRhWCwgZGVs
dGFZOworICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRhcyhyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmZGVsdGFYLCAmZGVsdGFZKTsKKyAgICAgICAg
ICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YVg7CisgICAgICAgICAgICAgICAgbV9kZWx0YVkgPSAt
ZGVsdGFZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9
CisgICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOworICAgIG1fd2hlZWxUaWNrc1kgPSBtX2Rl
bHRhWTsKKworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50
LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkpOworICAgIG1fZ2xvYmFsUG9zaXRpb24g
PSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpLCBzdGF0aWNfY2FzdDxp
bnQ+KGV2ZW50LT55X3Jvb3QpKTsKKyAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xsQnlQaXhlbFdo
ZWVsRXZlbnQ7CisgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBmYWxzZTsKKwor
ICAgIC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0aGUgbnVtYmVyIG9m
IGxpbmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50CisgICAgbV9kZWx0YVggKj0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgbV9k
ZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3Rr
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
ZjUxN2IwMWVjNTI5YzVkZmE1MDJiN2FhNTBiN2VmODA0ODBlNmZjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRp
b24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQb3B1cE1lbnVHdGsuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdWludDMy
X3QgZ1NlYXJjaFRpbWVvdXRNcyA9IDEwMDA7CisKK1BvcHVwTWVudUd0azo6UG9wdXBNZW51R3Rr
KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCit7
Cit9CisKK1BvcHVwTWVudUd0azo6flBvcHVwTWVudUd0aygpCit7CisgICAgaWYgKG1fcG9wdXAp
IHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fcG9wdXAt
PnBsYXRmb3JtTWVudSgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsK
KyAgICAgICAgaGlkZSgpOworICAgIH0KK30KKworR3RrQWN0aW9uKiBQb3B1cE1lbnVHdGs6OmNy
ZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGludCBpdGVtSW5kZXgpCit7CisgICAgR093blB0cjxj
aGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigicG9wdXAtbWVudS1hY3Rpb24tJWQiLCBp
dGVtSW5kZXgpKTsKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3Rpb25fbmV3KGFjdGlv
bk5hbWUuZ2V0KCksIGNsaWVudCgpLT5pdGVtVGV4dChpdGVtSW5kZXgpLnV0ZjgoKS5kYXRhKCks
IGNsaWVudCgpLT5pdGVtVG9vbFRpcChpdGVtSW5kZXgpLnV0ZjgoKS5kYXRhKCksIDApOworICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksICJwb3B1cC1tZW51LWFjdGlvbi1p
bmRleCIsIEdJTlRfVE9fUE9JTlRFUihpdGVtSW5kZXgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhtZW51SXRlbUFjdGl2YXRlZCksIHRoaXMp
OworICAgIC8vIEZJWE1FOiBBcHBseSB0aGUgUG9wdXBNZW51U3R5bGUgZnJvbSBjbGllbnQoKS0+
aXRlbVN0eWxlKGkpCisgICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rpb24sICFjbGllbnQo
KS0+aXRlbVN0eWxlKGl0ZW1JbmRleCkuaXNEaXNwbGF5Tm9uZSgpKTsKKyAgICBndGtfYWN0aW9u
X3NldF9zZW5zaXRpdmUoYWN0aW9uLCBjbGllbnQoKS0+aXRlbUlzRW5hYmxlZChpdGVtSW5kZXgp
KTsKKworICAgIHJldHVybiBhY3Rpb247Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjpzaG93KGNv
bnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4KQoreworICAgIEFT
U0VSVChjbGllbnQoKSk7CisKKyAgICBpZiAoIW1fcG9wdXApIHsKKyAgICAgICAgbV9wb3B1cCA9
IEd0a1BvcHVwTWVudTo6Y3JlYXRlKCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1
cC0+cGxhdGZvcm1NZW51KCksICJ1bm1hcCIsIEdfQ0FMTEJBQ0soUG9wdXBNZW51R3RrOjptZW51
VW5tYXBwZWQpLCB0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wb3B1cC0+Y2xlYXIoKTsK
KworICAgIGNvbnN0IGludCBzaXplID0gY2xpZW50KCktPmxpc3RTaXplKCk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKGNsaWVudCgpLT5pdGVtSXNT
ZXBhcmF0b3IoaSkpCisgICAgICAgICAgICBtX3BvcHVwLT5hcHBlbmRTZXBhcmF0b3IoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4gYWN0aW9uID0gYWRv
cHRHUmVmKGNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGkpKTsKKyAgICAgICAgICAgIG1fcG9w
dXAtPmFwcGVuZEl0ZW0oYWN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElu
dFBvaW50IG1lbnVQb3NpdGlvbiA9IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQoR1RL
X1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSwgdmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBtZW51UG9zaXRpb24ubW92
ZSgwLCByZWN0LmhlaWdodCgpKTsKKworICAgIG1fcG9wdXAtPnBvcFVwKHJlY3Quc2l6ZSgpLCBt
ZW51UG9zaXRpb24sIHNpemUsIGluZGV4LCBndGtfZ2V0X2N1cnJlbnRfZXZlbnQoKSk7CisKKyAg
ICAvLyBHVEsgY2FuIHJlZnVzZSB0byBhY3R1YWxseSBvcGVuIHRoZSBtZW51IHdoZW4gbW91c2Ug
Z3JhYnMgZmFpbHMuCisgICAgLy8gRW5zdXJlIFdlYkNvcmUgZG9lcyBub3QgZ28gaW50byBzb21l
IHBlc2t5IHN0YXRlLgorICAgIGlmICghZ3RrX3dpZGdldF9nZXRfdmlzaWJsZShtX3BvcHVwLT5w
bGF0Zm9ybU1lbnUoKSkpCisgICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhpZGUoKTsKK30KKwor
dm9pZCBQb3B1cE1lbnVHdGs6OmhpZGUoKQoreworICAgIEFTU0VSVChtX3BvcHVwKTsKKyAgICBt
X3BvcHVwLT5wb3BEb3duKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjp1cGRhdGVGcm9tRWxl
bWVudCgpCit7CisgICAgY2xpZW50KCktPnNldFRleHRGcm9tSXRlbShjbGllbnQoKS0+c2VsZWN0
ZWRJbmRleCgpKTsKK30KKwordm9pZCBQb3B1cE1lbnVHdGs6OmRpc2Nvbm5lY3RDbGllbnQoKQor
eworICAgIG1fcG9wdXBDbGllbnQgPSAwOworfQorCit2b2lkIFBvcHVwTWVudUd0azo6bWVudUl0
ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIFBvcHVwTWVudUd0ayogdGhhdCkKK3sKKyAg
ICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOworICAgIHRoYXQtPmNsaWVudCgpLT52YWx1ZUNoYW5n
ZWQoR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksICJw
b3B1cC1tZW51LWFjdGlvbi1pbmRleCIpKSk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjptZW51
VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51R3RrKiB0aGF0KQoreworICAgIEFTU0VSVCh0
aGF0LT5jbGllbnQoKSk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlkSGlkZSgpOworfQor
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkODExZmJmNWZl
MzlmN2Q0ZjRjMmMyY2IwYjgwMzUyYTZkOTA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFBvcHVwTWVudUd0a19oCisjZGVmaW5lIFBvcHVwTWVudUd0a19oCisKKyNp
bmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
UG9wdXBNZW51LmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBQ
b3B1cE1lbnVHdGsgOiBwdWJsaWMgUG9wdXBNZW51IHsKK3B1YmxpYzoKKyAgICBQb3B1cE1lbnVH
dGsoUG9wdXBNZW51Q2xpZW50Kik7CisgICAgflBvcHVwTWVudUd0aygpOworCisgICAgdmlydHVh
bCB2b2lkIHNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCBpbmRleCk7CisgICAg
dmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVudCgpOworCitwcml2YXRlOgorICAg
IFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cENsaWVudDsg
fQorICAgIEd0a0FjdGlvbiogY3JlYXRlR3RrQWN0aW9uRm9yTWVudUl0ZW0oaW50IGl0ZW1JbmRl
eCk7CisKKyAgICBzdGF0aWMgdm9pZCBtZW51VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51
R3RrKik7CisgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiwgUG9w
dXBNZW51R3RrKik7CisKKyAgICBQb3B1cE1lbnVDbGllbnQqIG1fcG9wdXBDbGllbnQ7CisgICAg
T3duUHRyPEd0a1BvcHVwTWVudT4gbV9wb3B1cDsKK307CisKK30KKworI2VuZGlmIC8vIFBvcHVw
TWVudUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0NTI1OGYzNmFjZjc0MzczZGYxMDAyNmZkOGM5ODk0
NjBmZjZjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
aCIKKworI2lmIFVTRShHTFgpCisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRl
Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2luY2x1ZGUgPGNhaXJv
LXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdyo+IFdpbmRvd0hhc2hNYXA7CitzdGF0aWMgV2luZG93SGFzaE1hcCYgZ2V0V2luZG93SGFz
aE1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFwLCB3aW5kb3dI
YXNoTWFwLCAoKSk7CisgICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Cit9CisKK3N0YXRpYyBpbnQg
Z0RhbWFnZUV2ZW50QmFzZTsKK3N0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2
ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQsIHZvaWQqKQoreworICAg
IFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50KTsKKyAgICBp
ZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQorICAg
ICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAgIFhEYW1hZ2VOb3RpZnlFdmVu
dCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+KHhF
dmVudCk7CisgICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdpbmRvd0hhc2hN
YXAoKTsKKyAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93SGFzaE1hcC5maW5k
KGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7CisgICAgaWYgKGkgPT0gd2luZG93SGFzaE1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAgICBpLT52YWx1ZS0+
Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7CisgICAgWERhbWFnZVN1YnRyYWN0KEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VFdmVudC0+ZGFt
YWdlLCBOb25lLCBOb25lKTsKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Cit9CisKK3N0
YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQoreworICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9
IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gaGFzRXh0ZW5z
aW9uczsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGludCBlcnJvckJhc2U7Cisg
ICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCkpOworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZn
RGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihkaXNw
bGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCisgICAgaW50
IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpv
ciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+
IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
R0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKK3sKKyAgICByZXR1cm4gc3VwcG9ydHNYRGFt
YWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93KHNpemUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKK30KKworUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNp
emUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwgbV9waXhtYXAo
MCkKKyAgICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKKyAgICAsIG1fc3VyZmFjZSgw
KQorICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQorICAgICwgbV9kYW1h
Z2UoMCkKKyAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKKyAgICAsIG1fZGFtYWdlTm90
aWZ5RGF0YSgwKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExB
WShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBTY3JlZW4qIHNjcmVlbiA9IERlZmF1
bHRTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSk7CisKKyAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNv
ZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRf
c3VyZmFjZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0
ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAg
bV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisgICAgICAgIFJvb3RXaW5k
b3dPZlNjcmVlbihzY3JlZW4pLAorICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAw
LCAxLCAxLAorICAgICAgICAwLAorICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgSW5w
dXRPdXRwdXQsCisgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICBDV092ZXJyaWRlUmVk
aXJlY3QsCisgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3Bs
YXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9
IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRp
cmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5k
b3cpOworCisgICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdk
a193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZp
bHRlclhEYW1hZ2VFdmVudCksIDApOworICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5k
b3csIHRoaXMpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50IGV2ZW50OworICAg
ICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ss
ICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54
bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBY
U2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKKyAgICBYQ29tcG9z
aXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0TWFu
dWFsKTsKKyAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3csIFhE
YW1hZ2VSZXBvcnROb25FbXB0eSk7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQoreworICAgIEFTU0VSVChtX2RhbWFnZSk7Cisg
ICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOworCisgICAg
Z2V0V2luZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7CisgICAgaWYgKGdldFdpbmRvd0hh
c2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcigwLCBy
ZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwor
CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCkpOworICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsK
KyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgWERlc3Ryb3lXaW5k
b3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOworICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExB
WV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBYUmVzaXplV2luZG93
KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAg
WEZsdXNoKGRpc3BsYXkpOworCisgICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29u
dGV4dCkgeworICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKKyAgICAgICAgLy8gVGhp
cyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJv
dW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCisgICAgICAgIC8vIHdoZXJlIGEgc3dhcCBp
cyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBwcm9w
ZXJseSByZXNpemVkLgorICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4dDo6Z2V0Q3Vy
cmVudCgpKQorICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOworICAgIH0KKwor
ICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gdHJ1
ZTsKK30KKworR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y29udGV4dCgp
Cit7CisgICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCk7CisKKyAg
ICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAg
QVNTRVJUKG1fd2luZG93KTsKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRl
eHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAg
cmV0dXJuIG1fY29udGV4dC5nZXQoKTsKK30KKwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQoreworICAgIGlmICghbV9waXht
YXApCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFj
ZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7CisgICAgbV9waXhtYXAg
PSAwOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1
cmZhY2UpCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CisKKyAgICBtX25lZWRzTmV3
UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQg
dGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBh
cyB0aGUgdGFyZ2V0CisgICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUg
MTAweCBzbG93ZXIuCisgICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZ
X1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7CisgICAgUGl4bWFwIG5l
d1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1f
d2luZG93KTsKKyAgICBpZiAoIW5ld1BpeG1hcCkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBYV2luZG93
QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0
ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgeworICAg
ICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICBYRnJlZVBpeG1h
cChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAgLy8gTnZpZGlhIGRy
aXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3lu
Y2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8vIG9mIGEgc2Vjb25kIGFm
dGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBj
b25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNr
aW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5k
IHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUg
dG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdl
dCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsK
KyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJv
X3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3Vy
ZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1fc3VyZmFjZSA9IG5ld1N1
cmZhY2U7CisKKyAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworfQorCit2b2lkIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQoreworICAgIGlm
IChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQorICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNr
KG1fZGFtYWdlTm90aWZ5RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYyYTQ4YjJlYTVjNGFmNjYwMTQzN2Q5ZjVjOTIx
OGE2MjQ0MGQ5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5lICBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvd19oCisKKyNpZiBVU0UoR0xYKQorCisjaW5jbHVkZSAiR0xDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisKK3R5
cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93
OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKK3R5cGVkZWYgdm9pZCAoKkRhbWFnZU5v
dGlmeUNhbGxiYWNrKSh2b2lkKik7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworcHVibGljOgorICAgIGVudW0gR0xDb250ZXh0TmVl
ZGVkIHsgQ3JlYXRlR0xDb250ZXh0LCBEb05vdENyZWF0ZUdMQ29udGV4dCB9OworICAgIHN0YXRp
YyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50
U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCA9IENyZWF0ZUdMQ29udGV4dCk7CisgICAgdmlydHVhbCB+
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKTsKKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkg
eyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdT
aXplKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQoKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGNh
aXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqKTsKKyAgICBXaW5kb3cgd2luZG93SWQoKSB7
IHJldHVybiBtX3dpbmRvdzsgfQorICAgIHZvaWQgY2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7
CisKKyAgICB2b2lkIHNldERhbWFnZU5vdGlmeUNhbGxiYWNrKERhbWFnZU5vdGlmeUNhbGxiYWNr
IGNhbGxiYWNrLCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgbV9kYW1hZ2VOb3RpZnlDYWxs
YmFjayA9IGNhbGxiYWNrOworICAgICAgICBtX2RhbWFnZU5vdGlmeURhdGEgPSBkYXRhOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRT
aXplJiwgR0xDb250ZXh0TmVlZGVkKTsKKyAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCk7CisKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBXaW5kb3cgbV93aW5kb3c7Cisg
ICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBtX3BpeG1hcDsKKyAgICBHTENv
bnRleHROZWVkZWQgbV9uZWVkc0NvbnRleHQ7CisgICAgT3duUHRyPEdMQ29udGV4dD4gbV9jb250
ZXh0OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICB1bnNpZ25l
ZCBpbnQgbV9wZW5kaW5nUmVzaXplU291cmNlSWQ7CisgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFw
QWZ0ZXJSZXNpemU7CisKKyAgICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgRGFtYWdlTm90aWZ5Q2Fs
bGJhY2sgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjazsKKyAgICB2b2lkKiBtX2RhbWFnZU5vdGlmeURh
dGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR0xYKQor
CisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmYyNzI3ZWFlMmMxYWVlYzM3ZGE4YWE5
YjBiOWUwNGM2OWY5OGVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVHdGsuaCIKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2lu
Y2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVk
ZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1F
TlQpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFRoaXMgd291bGQgYmUgYSBzdGF0aWMgbWV0aG9kLCBleGNlcHQgdGhhdCBm
b3J3YXJkIGRlY2xhcmluZyBHVHlwZSBpcyB0cmlja3ksIHNpbmNlIGl0cworLy8gZGVmaW5pdGlv
biBkZXBlbmRzIG9uIGluY2x1ZGluZyBnbGliLmgsIG5lZ2F0aW5nIHRoZSBiZW5lZml0IG9mIHVz
aW5nIGEgZm9yd2FyZCBkZWNsYXJhdGlvbi4KK2V4dGVybiBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0
U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQg
ZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKTsKK2V4dGVybiBHUmVmUHRyPEdk
a1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5
cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIgKmZhbGxiYWNrU3Rv
Y2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpOwor
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKFZJREVPKQorc3RhdGlj
IEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoUmVuZGVy
T2JqZWN0KiBvKQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbWVk
aWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0hvc3QoKSA6IDA7CisgICAgaWYgKCFtZWRpYU5v
ZGUpCisgICAgICAgIG1lZGlhTm9kZSA9IG5vZGU7CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgIW1l
ZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obWVkaWFO
b2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVHdGs6OmluaXRNZWRpYUJ1dHRvbnMoKQoreworICAgIHN0YXRpYyBib29sIGljb25z
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmIChpY29uc0luaXRpYWxpemVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a0ljb25GYWN0b3J5PiBpY29uRmFjdG9yeSA9IGFk
b3B0R1JlZihndGtfaWNvbl9mYWN0b3J5X25ldygpKTsKKyAgICBHdGtJY29uU291cmNlKiBpY29u
U291cmNlID0gZ3RrX2ljb25fc291cmNlX25ldygpOworICAgIGNvbnN0IGNoYXIqIGljb25zW10g
PSB7ICJhdWRpby12b2x1bWUtaGlnaCIsICJhdWRpby12b2x1bWUtbXV0ZWQiIH07CisKKyAgICBn
dGtfaWNvbl9mYWN0b3J5X2FkZF9kZWZhdWx0KGljb25GYWN0b3J5LmdldCgpKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGljb25zKTsgKytpKSB7CisgICAgICAg
IGd0a19pY29uX3NvdXJjZV9zZXRfaWNvbl9uYW1lKGljb25Tb3VyY2UsIGljb25zW2ldKTsKKyAg
ICAgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19pY29uX3NldF9uZXcoKTsKKyAgICAgICAg
Z3RrX2ljb25fc2V0X2FkZF9zb3VyY2UoaWNvblNldCwgaWNvblNvdXJjZSk7CisgICAgICAgIGd0
a19pY29uX2ZhY3RvcnlfYWRkKGljb25GYWN0b3J5LmdldCgpLCBpY29uc1tpXSwgaWNvblNldCk7
CisgICAgICAgIGd0a19pY29uX3NldF91bnJlZihpY29uU2V0KTsKKyAgICB9CisKKyAgICBndGtf
aWNvbl9zb3VyY2VfZnJlZShpY29uU291cmNlKTsKKworICAgIGljb25zSW5pdGlhbGl6ZWQgPSB0
cnVlOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lR3Rr
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVHdGsoKSk7
Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVH
dGs6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gcnQ7Cit9CisKK1JlbmRlclRoZW1l
R3RrOjpSZW5kZXJUaGVtZUd0aygpCisgICAgOiBtX3BhbmVsQ29sb3IoQ29sb3I6OndoaXRlKQor
ICAgICwgbV9zbGlkZXJDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3NsaWRlclRodW1iQ29s
b3IoQ29sb3I6OndoaXRlKQorICAgICwgbV9tZWRpYUljb25TaXplKDE2KQorICAgICwgbV9tZWRp
YVNsaWRlckhlaWdodCgxNCkKK3sKKyAgICBwbGF0Zm9ybUluaXQoKTsKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgaW5pdE1lZGlhQnV0dG9ucygpOworI2Vu
ZGlmCit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5j
ZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2Fz
ZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBNZW51
bGlzdFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6Cisg
ICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFy
dDoKKyAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CisgICAgY2FzZSBNZWRpYVZvbHVtZVNs
aWRlclBhcnQ6CisgICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVkaWFF
bnRlckZ1bGxzY3JlZW5CdXR0b25QYXJ0OgorICAgIGNhc2UgTWVkaWFTbGlkZXJQYXJ0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5
bGUtPmFwcGVhcmFuY2UoKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OmNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICByZXR1cm4gaXNF
bmFibGVkKG8pOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OmJhc2VsaW5lUG9zaXRpb24oY29u
c3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmICghby0+aXNCb3goKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzdHJhdGVneSBpcyBwb3NzaWJseSBp
bmNvcnJlY3QgZm9yIHRoZSBHVEsrIHBvcnQuCisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBDaGVja2JveFBhcnQKKyAgICAgICAgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVy
Qm94KG8pOworICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkg
LSAyOworICAgIH0KKworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihv
KTsKK30KKworLy8gVGhpcyBpcyB1c2VkIGluIFJlbmRlclRoZW1lR3RrMiBhbmQgUmVuZGVyVGhl
bWVHdGszLiBOb3JtYWxseSwgaXQgd291bGQgYmUgaW4KKy8vIHRoZSBSZW5kZXJUaGVtZUd0ayBo
ZWFkZXIgKHBlcmhhcHMgYXMgYSBzdGF0aWMgbWV0aG9kKSwgYnV0IHdlIHdhbnQgdG8gYXZvaWQK
Ky8vIGhhdmluZyB0byBpbmNsdWRlIEdUSysgaGVhZGVycyBvbmx5IGZvciB0aGUgR3RrVGV4dERp
cmVjdGlvbiBlbnVtLgorR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBS
VEw6CisgICAgICAgIHJldHVybiBHVEtfVEVYVF9ESVJfUlRMOworICAgIGNhc2UgTFRSOgorICAg
ICAgICByZXR1cm4gR1RLX1RFWFRfRElSX0xUUjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gR1RLX1RFWFRfRElSX05PTkU7CisgICAgfQorfQorCitzdGF0aWMgR3RrU3RhdGVUeXBlIGd0
a0ljb25TdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
KQoreworICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBy
ZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZFOworICAgIGlmICh0
aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVf
UFJFTElHSFQ7CisKKyAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gU29tZSBsYXlvdXQg
dGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IGJ1dHRvbnMgaWdub3JlIGxpbmUtaGVpZ2h0Lgor
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KQorICAgICAgICBz
dHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gVGhlIHRl
c3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBidXR0b25zIGlnbm9yZSBsaW5l
IGhlaWdodC4KKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7CisKKyAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcg
d2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KKyAgICBzdHlsZS0+
cmVzZXRCb3JkZXJSYWRpdXMoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0TWVudUxpc3RTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvYmpl
Y3QsIGluZm8sIHJlY3QpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVh
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKworc3RhdGljIHZvaWQg
cGFpbnRHZGtQaXhidWYoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHZGtQaXhidWYq
IGljb24sIGNvbnN0IEludFJlY3QmIGljb25SZWN0KQoreworICAgIEludFNpemUgaWNvblNpemUo
Z2RrX3BpeGJ1Zl9nZXRfd2lkdGgoaWNvbiksIGdka19waXhidWZfZ2V0X2hlaWdodChpY29uKSk7
CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHNjYWxlZEljb247CisgICAgaWYgKGljb25SZWN0LnNp
emUoKSAhPSBpY29uU2l6ZSkgeworICAgICAgICAvLyBXZSBjb3VsZCB1c2UgY2Fpcm9fc2NhbGUo
KSBoZXJlIGJ1dCBjYWlyby9waXhtYW4gZG93bnNjYWxlIHF1YWxpdHkgaXMgcXVpdGUgYmFkLgor
ICAgICAgICBzY2FsZWRJY29uID0gYWRvcHRHUmVmKGdka19waXhidWZfc2NhbGVfc2ltcGxlKGlj
b24sIGljb25SZWN0LndpZHRoKCksIGljb25SZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19JTlRFUlBfQklMSU5F
QVIpKTsKKyAgICAgICAgaWNvbiA9IHNjYWxlZEljb24uZ2V0KCk7CisgICAgfQorCisgICAgY2Fp
cm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBjYWlyb19z
YXZlKGNyKTsKKyAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhidWYoY3IsIGljb24sIGljb25S
ZWN0LngoKSwgaWNvblJlY3QueSgpKTsKKyAgICBjYWlyb19wYWludChjcik7CisgICAgY2Fpcm9f
cmVzdG9yZShjcik7Cit9CisKKy8vIERlZmluZWQgaW4gR1RLKyAoZ3RrL2d0a2ljb25mYWN0b3J5
LmMpCitzdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZU1lbnUgPSAxNjsKK3N0YXRpYyBjb25z
dCBnaW50IGd0a0ljb25TaXplU21hbGxUb29sYmFyID0gMTg7CitzdGF0aWMgY29uc3QgZ2ludCBn
dGtJY29uU2l6ZUJ1dHRvbiA9IDIwOworc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVMYXJn
ZVRvb2xiYXIgPSAyNDsKK3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplRG5kID0gMzI7Citz
dGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURpYWxvZyA9IDQ4OworCitzdGF0aWMgR3RrSWNv
blNpemUgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZ2ludCBwaXhlbFNpemUpCit7CisgICAgaWYg
KHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplU21hbGxUb29sYmFyKQorICAgICAgICByZXR1cm4gR1RL
X0lDT05fU0laRV9NRU5VOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3RrSWNvblNpemVTbWFsbFRv
b2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVCdXR0b24pCisgICAgICAgIHJldHVybiBH
VEtfSUNPTl9TSVpFX1NNQUxMX1RPT0xCQVI7CisgICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29u
U2l6ZUJ1dHRvbiAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUxhcmdlVG9vbGJhcikKKyAgICAg
ICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3Rr
SWNvblNpemVMYXJnZVRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVEbmQpCisgICAg
ICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RPT0xCQVI7CisgICAgaWYgKHBpeGVsU2l6
ZSA+PSBndGtJY29uU2l6ZURuZCAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZURpYWxvZykKKyAg
ICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRE5EOworCisgICAgcmV0dXJuIEdUS19JQ09OX1NJ
WkVfRElBTE9HOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgaSwgcmVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3sK
KyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisK
KyAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplLgorICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlmIChmb250U2l6ZSA8IGd0a0lj
b25TaXplTWVudSkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBG
aXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKKyAgICBndGtfaWNvbl9zaXplX2xvb2t1cChnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShmb250
U2l6ZSksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0
aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7Cit9CisKK3N0
YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
R2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVsZW1lbnQuCisgICAgTm9kZSogaW5wdXQgPSBy
ZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIGlmICghaW5wdXQpCisgICAg
ICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVy
ZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIElmIHBv
c3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSByZWN0IHZlcnRpY2FsbHkgaW4g
dGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgorICAgIC8vIFdlIGFsc28gYWRkIG9uZSBwaXhlbCBo
ZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMgcm91bmRlZCB1cCBmb3IgYm94
IGhlaWdodHMKKyAgICAvLyB0aGF0IGFyZSBldmVuLCB3aGljaCBsb29rcyBpbiByZWxhdGlvbiB0
byB0aGUgYm94IHRleHQuCisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSB0b1JlbmRlckJv
eChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRlQ29udGVudEJveCgpOworCisgICAgLy8gTWFr
ZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGlu
IGl0cyBwYXJlbnQncyBib3guCisgICAgaW50IGljb25TaXplID0gc3RkOjptaW4oaW5wdXRDb250
ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgcmVjdC5o
ZWlnaHQoKSkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0LngoKSwgaW5wdXRDb250ZW50
Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBpY29uU2l6ZSArIDEpIC8gMiwg
aWNvblNpemUsIGljb25TaXplKTsKKyAgICByZXR1cm4gc2NhbGVkUmVjdDsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVjdFZlcnRpY2Fs
bHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOworICAgIGlmIChpY29u
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9FTlRSWSwg
R1RLX1NUT0NLX0ZJTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJY29uU2l6
ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CisgICAgcGFpbnRHZGtQaXhidWYocGFpbnRJ
bmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7
CisgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVu
dElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOworICAgIGlmIChpY29uUmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBp
Y29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9FTlRSWSwgR1RLX1NUT0NL
X0NMRUFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNvblNpemVGb3JQaXhl
bFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgIHBhaW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250
ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFdlIGNhbm5vdCBn
aXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZv
cnR1bmF0ZWx5LgorICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRU
ZXh0RmllbGQobywgaSwgcmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIFRoZSBvdGhlciBw
YWludCBtZXRob2RzIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBwYWludGluZyBpcyBkaXNh
YmxlZCBiZWNhdXNlIFJlbmRlclRoZW1lIGFscmVhZHkgY2hlY2tzIGl0CisgICAgLy8gYmVmb3Jl
IGNhbGxpbmcgdGhlbSwgYnV0IHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoKSBpcyBjYWxsZWQgYnkg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIHdoaWNoIGRvZXNuJ3QgY2hlY2sgaXQuCisgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaW50IGljb25TaXplID0gc3RkOjptaW4ocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZv
cldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9DS19DQVBTX0xPQ0tfV0FSTklORywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
Z2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKworICAgIC8vIE9ubHkgcmUtc2Nh
bGUgdGhlIGljb24gd2hlbiBpdCdzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBpY29uIHNpemUu
CisgICAgaWYgKGljb25TaXplID49IGd0a0ljb25TaXplTWVudSkKKyAgICAgICAgaWNvblNpemUg
PSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNvbi5nZXQoKSk7CisKKyAgICAvLyBHVEsrIGxvY2F0
ZXMgdGhlIGljb24gcmlnaHQgYWxpZ25lZCBpbiB0aGUgZW50cnkuIFRoZSBnaXZlbiByZWN0YW5n
bGUgaXMgYWxyZWFkeQorICAgIC8vIGNlbnRlcmVkIHZlcnRpY2FsbHkgYnkgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLgorICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgLSBpY29uU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3Qu
aGVpZ2h0KCkgLSBpY29uU2l6ZSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgaWNvblNpemUs
IGljb25TaXplKTsKKyAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5n
ZXQoKSwgaWNvblJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZh
bCgpIGNvbnN0Cit7CisgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dl
dF9kZWZhdWx0KCk7CisKKyAgICBnYm9vbGVhbiBzaG91bGRCbGluazsKKyAgICBnaW50IHRpbWU7
CisKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstY3Vyc29yLWJsaW5rIiwgJnNob3Vs
ZEJsaW5rLCAiZ3RrLWN1cnNvci1ibGluay10aW1lIiwgJnRpbWUsIE5VTEwpOworCisgICAgaWYg
KCFzaG91bGRCbGluaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gdGltZSAvIDIw
MDAuOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpCit7CisgICAg
Ly8gRklYTUU6IFJlYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgd2lkZ2V0J3Mgc2NyZWVuLgorICAg
IEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOworICAgIGlmICgh
c2NyZWVuKQorICAgICAgICByZXR1cm4gOTY7IC8vIERlZmF1bHQgdG8gOTYgRFBJLgorCisgICAg
ZmxvYXQgZHBpID0gZ2RrX3NjcmVlbl9nZXRfcmVzb2x1dGlvbihzY3JlZW4pOworICAgIGlmIChk
cGkgPD0gMCkKKyAgICAgICAgcmV0dXJuIDk2OworICAgIHJldHVybiBkcGk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OnN5c3RlbUZvbnQoaW50LCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgY29uc3QKK3sKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGlu
Z3NfZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBUaGlzIHdpbGwgYmUgYSBmb250IHNlbGVjdGlvbiBzdHJpbmcgbGlrZSAiU2FucyAx
MCIgc28gd2UgY2Fubm90IHVzZSBpdCBhcyB0aGUgZmFtaWx5IG5hbWUuCisgICAgR093blB0cjxn
Y2hhcj4gZm9udE5hbWU7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWZvbnQtbmFt
ZSIsICZmb250TmFtZS5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlv
biogcGFuZ29EZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJvbV9zdHJpbmco
Zm9udE5hbWUuZ2V0KCkpOworICAgIGlmICghcGFuZ29EZXNjcmlwdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShwYW5nb0Rlc2NyaXB0aW9uKSk7CisKKyAgICBp
bnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUocGFuZ29EZXNjcmlwdGlv
bikgLyBQQU5HT19TQ0FMRTsKKyAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgZm9udCBpcyBpbiBw
b2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMuCisgICAgaWYgKCFwYW5nb19m
b250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29sdXRlKHBhbmdvRGVzY3JpcHRpb24pKQor
ICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5EUEkoKSAvIDcyLjApOworCisgICAgZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmlj
RmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxp
YyhmYWxzZSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKHBhbmdvRGVzY3JpcHRp
b24pOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIGluaXRNZWRpYUNvbG9ycygpOworI2VuZGlmCisg
ICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9CisKKyNpZiBFTkFC
TEUoVklERU8pCitTdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0d0a1VzZXJBZ2VudFN0
eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5bGVTaGVldCkpOwor
fQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpl
eHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cisj
ZW5kaWYKKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyKiBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUpCit7CisgICAgSW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIChyZWN0
LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgIHJl
Y3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKKyAgICAgICAg
ICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKKyAgICBHUmVm
UHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShH
VEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFt
ZSwKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGljb25SZWN0LndpZHRo
KCkpOworICAgIHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6Omhhc093bkRpc2Fi
bGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAoreworICAgIHJldHVy
biAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QsICJ2aWV3LWZ1bGxzY3JlZW4tc3ltYm9saWMiLCBHVEtfU1RPQ0tfRlVMTFNDUkVFTik7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBnZXRN
ZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCk7CisgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgbXV0ZWQgPSBtZWRp
YUVsZW1lbnQtPm11dGVkKCk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2Jq
ZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwKKyAgICAgICAgbXV0ZWQgPyAiYXVkaW8tdm9s
dW1lLW11dGVkLXN5bWJvbGljIiA6ICJhdWRpby12b2x1bWUtaGlnaC1zeW1ib2xpYyIsCisgICAg
ICAgIG11dGVkID8gImF1ZGlvLXZvbHVtZS1tdXRlZCIgOiAiYXVkaW8tdm9sdW1lLWhpZ2giKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIE5vZGUqIG5vZGUgPSByZW5kZXJPYmplY3QtPm5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5vZGUtPmlzTWVk
aWFDb250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHBs
YXkgPSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKSA9PSBNZWRpYVBsYXlCdXR0b247Cisg
ICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4
dCwgcmVjdCwKKyAgICAgICAgcGxheSA/ICJtZWRpYS1wbGF5YmFjay1zdGFydC1zeW1ib2xpYyIg
OiAibWVkaWEtcGxheWJhY2stcGF1c2Utc3ltYm9saWMiLAorICAgICAgICBwbGF5ID8gR1RLX1NU
T0NLX01FRElBX1BMQVkgOiBHVEtfU1RPQ0tfTUVESUFfUEFVU0UpOworfQorCitib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNv
bnRleHQsIHJlY3QsICJtZWRpYS1zZWVrLWJhY2t3YXJkLXN5bWJvbGljIiwgR1RLX1NUT0NLX01F
RElBX1JFV0lORCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrRm9y
d2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50TWVkaWFC
dXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgIm1lZGlhLXNlZWst
Zm9yd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9GT1JXQVJEKTsKK30KKworc3RhdGlj
IFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUpCit7CisgICAgcmV0dXJuIFJvdW5kZWRSZWN0OjpSYWRpaSgKKyAgICAgICAgSW50U2l6ZShz
dHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJv
cmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6
ZShzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxl
LT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAorICAgICAgICBJ
bnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgp
LCBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAor
ICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCku
aW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50
VmFsdWUoKSkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVu
dE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRl
eHQ7CisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5v
U3Ryb2tlKTsKKworICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0
aW9uKCk7CisgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgpOworICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVS
YW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChpbmRleCwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgICAgIGZsb2F0IHN0YXJ0UmF0aW8gPSBzdGFydCAvIG1lZGlhRHVyYXRpb247
CisgICAgICAgIGZsb2F0IGxlbmd0aFJhdGlvID0gKGVuZCAtIHN0YXJ0KSAvIG1lZGlhRHVyYXRp
b247CisgICAgICAgIGlmICghbGVuZ3RoUmF0aW8pCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBJbnRSZWN0IHJhbmdlUmVjdChyKTsKKyAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRo
KGxlbmd0aFJhdGlvICogdG90YWxUcmFja1dpZHRoKTsKKyAgICAgICAgaWYgKGluZGV4KQorICAg
ICAgICAgICAgcmFuZ2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7
CisgICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChSb3VuZGVkUmVjdChyYW5nZVJlY3Qs
IGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIH0KKworICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVk
UmVjdChSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFj
ZSgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5k
ZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0g
dG9QYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmbG9hdCB2b2x1bWUgPSBtZWRpYUVsZW1l
bnQtPnZvbHVtZSgpOworICAgIGlmICghdm9sdW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgIGNv
bnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisK
KyAgICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgdHJhY2tIZWln
aHQgPSByZWN0SGVpZ2h0ICogdm9sdW1lOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
ck9iamVjdC0+c3R5bGUoKTsKKyAgICBJbnRSZWN0IHZvbHVtZVJlY3QocmVjdCk7CisgICAgdm9s
dW1lUmVjdC5tb3ZlKDAsIHJlY3RIZWlnaHQgLSB0cmFja0hlaWdodCk7CisgICAgdm9sdW1lUmVj
dC5zZXRIZWlnaHQoY2VpbCh0cmFja0hlaWdodCkpOworCisgICAgY29udGV4dC0+ZmlsbFJvdW5k
ZWRSZWN0KFJvdW5kZWRSZWN0KHZvbHVtZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxl
KSksCisgICAgICAgIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRNZWRp
YVNsaWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKK30KKworU3RyaW5n
IFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3Vy
cmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNU
aW1lKGR1cmF0aW9uKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUN1cnJl
bnRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQordm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
fQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmNwcAorc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0g
NTsKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKK3N0YXRp
YyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OworZG91Ymxl
IFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRl
cnZhbDsKK30KKworZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NB
bmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZv
ciBiYWNrIGFuZCBmb3J0aDsKK30KKworSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRl
UHJvZ3Jlc3NSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBm
dWxsQmFyUmVjdCkKK3sKKyAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Cisg
ICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5k
ZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKSB7Cisg
ICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiByZW5kZXJQ
cm9ncmVzcy0+cG9zaXRpb24oKTsKKyAgICAgICAgaWYgKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jl
c3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJvZ3Jlc3NXaWR0aCk7CisgICAg
ICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRoKTsKKyAgICAgICAgcmV0dXJu
IHByb2dyZXNzUmVjdDsKKyAgICB9CisKKyAgICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MgPSBy
ZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKKworICAgIC8vIE5ldmVyIGxldCB0
aGUgcHJvZ3Jlc3MgcmVjdCBzaHJpbmsgc21hbGxlciB0aGFuIDIgcGl4ZWxzLgorICAgIGludCBu
ZXdXaWR0aCA9IG1heCgyLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlC
bG9ja3MpOworICAgIGludCBtb3ZhYmxlV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIG5l
d1dpZHRoOworICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChuZXdXaWR0aCk7CisKKyAgICAvLyBX
ZSB3YW50IHRoZSBmaXJzdCAwLjUgdW5pdHMgb2YgdGhlIGFuaW1hdGlvbiBwcm9ncmVzcyB0byBy
ZXByZXNlbnQgdGhlCisgICAgLy8gZm9yd2FyZCBtb3Rpb24gYW5kIHRoZSBzZWNvbmQgMC41IHVu
aXRzIHRvIHJlcHJlc2VudCB0aGUgYmFja3dhcmQgbW90aW9uLAorICAgIC8vIHRodXMgd2UgbXVs
dGlwbHkgYnkgdHdvIGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHN3ZWVwIG9mIHRoZSBwcm9ncmVzcyBi
YXIgd2l0aAorICAgIC8vIGVhY2ggZGlyZWN0aW9uLgorICAgIGlmIChhbmltYXRpb25Qcm9ncmVz
cyA8IDAuNSkKKyAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIChh
bmltYXRpb25Qcm9ncmVzcyAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKKyAgICBlbHNlCisgICAgICAg
IHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoKDEuMCAtIGFuaW1hdGlvblBy
b2dyZXNzKSAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKKyAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0Owor
fQorI2VuZGlmCisKK1N0cmluZyBSZW5kZXJUaGVtZUd0azo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgo
Y29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgsIGJv
b2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Cit7CisgICAgaWYgKHdpZHRoIDw9IDApCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkgPiAx
KQorICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKG11bHRpcGxl
RmlsZVVwbG9hZFRleHQoZmlsZUxpc3QtPmxlbmd0aCgpKSwgd2lkdGgsIGZvbnQsIFN0cmluZ1Ry
dW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CisKKyAgICBTdHJpbmcgc3RyaW5nOworICAg
IGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkpCisgICAgICAgIHN0cmluZyA9IHBhdGhHZXRGaWxlTmFt
ZShmaWxlTGlzdC0+aXRlbSgwKS0+cGF0aCgpKTsKKyAgICBlbHNlIGlmIChtdWx0aXBsZUZpbGVz
QWxsb3dlZCkKKyAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3RlZExhYmVs
KCk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRM
YWJlbCgpOworCisgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUoc3Ry
aW5nLCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzKTsK
K30KKworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorSW50U2l6ZSBSZW5kZXJUaGVtZUd0
azo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNl
dCB0aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1hcmsuCisgICAgcmV0dXJuIEludFNpemUo
MCwgMCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6c2xpZGVyVGlja09mZnNldEZyb21UcmFj
a0NlbnRlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc2V0IHRoaXMgdG8g
dGhlIHBvc2l0aW9uIG9mIHRoZSB0aWNrIG1hcmtzLgorICAgIHJldHVybiAwOworfQorI2VuZGlm
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTU4MDgw
MTU3OWYxZjI0ZjBjNzZlODRlYTYxZGQzN2QzN2M3OTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBAIC0wLDAgKzEsMjU2IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lR3RrX2gKKyNk
ZWZpbmUgUmVuZGVyVGhlbWVHdGtfaAorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK3R5cGVkZWYgc3RydWN0IF9HZGtDb2xvcm1h
cCBHZGtDb2xvcm1hcDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUaGVt
ZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Citwcml2YXRlOgorICAgIFJlbmRlclRoZW1lR3Rr
KCk7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKKworICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2lu
ZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBBIG1ldGhv
ZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0
aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAgIC8v
IEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9y
dGVkIGF0IGFsbC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworCisgICAgLy8gQSBtZXRob2QgdG8gb2J0
YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2ls
bCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQorICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBk
ZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRp
byBidXR0b25zIGFyZSBleGFtcGxlcyBvZgorICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBk
byB0aGlzLgorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IEJv
eCBzZWxlY3Rpb24gY29sb3IKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1
YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworCisgICAgLy8gU3lzdGVt
IGZvbnRzIGFuZCBjb2xvcnMuCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJ
ZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xv
cihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVCeVNw
YWNlT3JSZXR1cm4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShm
bG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OworCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRnVsbFNjcmVlblN0eWxlU2hl
ZXQoKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKKyAg
ICAvLyBSZXR1cm5zIHNpemUgb2Ygb25lIHNsaWRlciB0aWNrIG1hcmsgZm9yIGEgaG9yaXpvbnRh
bCB0cmFjay4KKyAgICAvLyBGb3IgdmVydGljYWwgdHJhY2tzIHdlIHJvdGF0ZSBpdCBhbmQgdXNl
IGl0LiBpLmUuIFdpZHRoIGlzIGFsd2F5cyBsZW5ndGggYWxvbmcgdGhlIHRyYWNrLgorICAgIHZp
cnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0OworICAgIC8vIFJldHVybnMgdGhl
IGRpc3RhbmNlIG9mIHNsaWRlciB0aWNrIG9yaWdpbiBmcm9tIHRoZSBzbGlkZXIgdHJhY2sgY2Vu
dGVyLgorICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBj
b25zdDsKKyNlbmRpZgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtXaWRnZXQq
IGd0a0NvbnRhaW5lcigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsK
KyAgICBHdGtXaWRnZXQqIGd0a1ZTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0
a0hTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBnZXRJbmRpY2F0b3JNZXRyaWNz
KENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3BhY2luZyk7
CisjZWxzZQorICAgIEd0a1N0eWxlQ29udGV4dCogZ3RrU2Nyb2xsYmFyU3R5bGUoKTsKKyNlbmRp
ZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAg
IHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHls
ZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgLy8gVGhlIE1hYyBwb3J0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4g
dGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBidXR0b24uIgorICAgIC8vIFRoZSBm
b3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRvbiBoYXMgYmVlbiBzdHlsZWQuIFRo
aXMgaXMgdXNlZCB0byBlbnN1cmUKKyAgICAvLyBBcXVhIHRoZW1lZCBjb250cm9scyB3aGVuZXZl
ciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdUSysgdGhlbWluZywgc28KKyAgICAv
LyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlhdGlvbi4KKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgdm9p
ZCBpbml0TWVkaWFCdXR0b25zKCk7CisgICAgdmlydHVhbCBib29sIGhhc093bkRpc2FibGVkU3Rh
dGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrQmFj
a0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoUFJP
R1JFU1NfRUxFTUVOVCkKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBkb3Vi
bGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChj
b25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxl
c0FsbG93ZWQpIGNvbnN0IE9WRVJSSURFOworCisgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlKik7CisgICAgc3Rh
dGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBib29s
IHBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxi
YWNrU3RvY2tJY29uTmFtZSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5U
KQorICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5kZXJPYmplY3Qq
LCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIG11dGFibGUgQ29sb3IgbV9wYW5lbENv
bG9yOworICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJDb2xvcjsKKyAgICBtdXRhYmxlIENvbG9y
IG1fc2xpZGVyVGh1bWJDb2xvcjsKKyAgICBjb25zdCBpbnQgbV9tZWRpYUljb25TaXplOworICAg
IGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVpZ2h0OworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyAgICB2b2lkIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiwgR3Rr
V2lkZ2V0KikgY29uc3Q7CisgICAgdm9pZCByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0
OworICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50JiBsZWZ0LCBp
bnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0OworICAgIGludCBnZXRDb21i
b0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3Q7CisgICAgaW50IGNvbWJvQm94QXJyb3dTaXplKFJl
bmRlclN0eWxlKikgY29uc3Q7CisKKyAgICBHdGtXaWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0Owor
ICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1ZT
Y2FsZSgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrSFNjYWxlKCkgY29uc3Q7CisgICAgR3Rr
V2lkZ2V0KiBndGtSYWRpb0J1dHRvbigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ2hlY2tC
dXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1Byb2dyZXNzQmFyKCkgY29uc3Q7Cisg
ICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveCgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ29t
Ym9Cb3hCdXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94QXJyb3coKSBj
b25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3Q7CisgICAg
R3RrV2lkZ2V0KiBndGtTcGluQnV0dG9uKCkgY29uc3Q7CisKKyAgICBHZGtDb2xvcm1hcCogbV9j
b2xvcm1hcDsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7CisgICAgbXV0YWJs
ZSBHdGtXaWRnZXQqIG1fZ3RrQ29udGFpbmVyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a0J1dHRvbjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtFbnRyeTsKKyAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtUcmVlVmlldzsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtW
U2NhbGU7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNjYWxlOworICAgIG11dGFibGUg
R3RrV2lkZ2V0KiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a0NoZWNrQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1Byb2dyZXNzQmFyOwor
ICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94OworICAgIG11dGFibGUgR3RrV2lk
Z2V0KiBtX2d0a0NvbWJvQm94QnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0Nv
bWJvQm94QXJyb3c7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0
b3I7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjcm9sbGJhcjsKKyAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtIU2Nyb2xsYmFyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0
a1NwaW5CdXR0b247CisgICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOworICAg
IGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OworI2VuZGlmCit9OworCit9CisK
KyNlbmRpZiAvLyBSZW5kZXJUaGVtZUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODIzYTA0ODVlN2NkMTY4ZTlhYTdlMjUxZjU4YzQxMWQ2Mzc4
NWIwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcApAQCAtMCwwICsxLDk2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0
ay5oIgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworLy8gV2UgbmVlZCB0aGlzIHRvIGFs
bG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VUX0ZMQUdTLiBJdCdzIGRlcHJl
Y2F0ZWQKKy8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWlyZSBpdCB0byBlbnN1cmUgcHJv
cGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgorI3VuZGVmIEdUS19ESVNBQkxFX0RF
UFJFQ0FURUQKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRzLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPGdk
ay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdh
cyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCitzdGF0aWMg
Y29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OworCisvLyBUaGlzIGlzIG5vdCBh
IHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RLKyBoZWFk
ZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0
RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9y
bUluaXQoKQoreworICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSB0cnVlOworICAg
IG1fZ3RrV2luZG93ID0gMDsKKyAgICBtX2d0a0NvbnRhaW5lciA9IDA7CisgICAgbV9ndGtCdXR0
b24gPSAwOworICAgIG1fZ3RrRW50cnkgPSAwOworICAgIG1fZ3RrVHJlZVZpZXcgPSAwOworICAg
IG1fZ3RrVlNjYWxlID0gMDsKKyAgICBtX2d0a0hTY2FsZSA9IDA7CisgICAgbV9ndGtSYWRpb0J1
dHRvbiA9IDA7CisgICAgbV9ndGtDaGVja0J1dHRvbiA9IDA7CisgICAgbV9ndGtQcm9ncmVzc0Jh
ciA9IDA7CisgICAgbV9ndGtDb21ib0JveCA9IDA7CisgICAgbV9ndGtDb21ib0JveEJ1dHRvbiA9
IDA7CisgICAgbV9ndGtDb21ib0JveEFycm93ID0gMDsKKyAgICBtX2d0a0NvbWJvQm94U2VwYXJh
dG9yID0gMDsKKyAgICBtX2d0a1ZTY3JvbGxiYXIgPSAwOworICAgIG1fZ3RrSFNjcm9sbGJhciA9
IDA7CisgICAgbV9ndGtTcGluQnV0dG9uID0gMDsKKworICAgIG1fY29sb3JtYXAgPSBnZGtfc2Ny
ZWVuX2dldF9yZ2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgaWYg
KCFtX2NvbG9ybWFwKSB7CisgICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBm
YWxzZTsKKyAgICAgICAgbV9jb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRfY29sb3Jt
YXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICB9Cit9CisKK1JlbmRlclRoZW1lR3Rr
Ojp+UmVuZGVyVGhlbWVHdGsoKQoreworICAgIGlmIChtX2d0a1dpbmRvdykKKyAgICAgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCit7CisgICAgR3RrU3R5bGUqIHN0
eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250YWluZXIoKSkpOwor
ICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXTsKKyAgICBtX3Ns
aWRlckNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVdOworICAgIG1fc2xpZGVyVGh1
bWJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfU0VMRUNURURdOworfQorI2VuZGlmCisKK3N0
YXRpYyB2b2lkIGFkanVzdFJlY3RGb3JGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgSW50UmVjdCYg
cmVjdCwgYm9vbCBpZ25vcmVJbnRlcmlvckZvY3VzUHJvcGVydHkgPSBmYWxzZSkKK3sKKyAgICBn
aW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIGdib29sZWFuIGludGVyaW9yRm9jdXMgPSAw
OworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKKyAgICBpZiAoIWln
bm9yZUludGVyaW9yRm9jdXNQcm9wZXJ0eSAmJiBpbnRlcmlvckZvY3VzKQorICAgICAgICByZXR1
cm47CisgICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0KQoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5k
ZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAg
ICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICAvLyBX
ZSBpZ25vcmUgdGhlIGludGVyaW9yIGZvY3VzIHByb3BlcnR5IGFuZCBhbHdheXMgZXhwYW5kIHRo
ZSBmb2N1cyByZWN0LiBJbiBHVEsrLCB0aGUKKyAgICAgICAgLy8gZm9jdXMgaW5kaWNhdG9yIGlz
IHVzdWFsbHkgb24gdGhlIHRleHQgbmV4dCB0byBhIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbiwg
YnV0IHRoYXQgZG9lc24ndAorICAgICAgICAvLyBoYXBwZW4gaW4gV2ViQ29yZS4gQnkgZXhwYW5k
aW5nIHRoZSBmb2N1cyByZWN0YW5nbGUgdW5jb25kaXRpb25hbGx5IHdlIGluY3JlYXNlIGl0cyBw
cm9taW5lbmNlLgorICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMocGFydCA9PSBDaGVja2JveFBh
cnQgPyBndGtDaGVja0J1dHRvbigpIDogZ3RrUmFkaW9CdXR0b24oKSwgcmVjdCwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgorICAg
ICAgICAvLyBTZWUgcGFpbnRJbm5lclNwaW5CdXR0b24gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdo
eSB3ZSBleHBhbmQgdGhlIHBhaW50aW5nIHJlY3QuCisgICAgICAgIHJlY3QuaW5mbGF0ZVkoMik7
CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpICsgMik7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIEd0a1N0YXRlVHlwZSBnZXRHdGtT
dGF0ZVR5cGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQob2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNv
bnRyb2wob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAg
ICBpZiAodGhlbWUtPmlzUHJlc3NlZChvYmplY3QpKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRF
X0FDVElWRTsKKyAgICBpZiAodGhlbWUtPmlzSG92ZXJlZChvYmplY3QpKQorICAgICAgICByZXR1
cm4gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOworfQor
CitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBUaGUgd2lk
dGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2Ug
dGhlbS4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0
eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2ludCBpbmRp
Y2F0b3JTaXplOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwgImluZGljYXRvci1z
aXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRv
clNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAg
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKK30KKwor
c3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBXZSBkbyBub3QgY2FsbCBndGtfdG9n
Z2xlX2J1dHRvbl9zZXRfYWN0aXZlIGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVtZXMgYmVnaW4gYSBz
ZXJpZXMgb2YKKyAgICAvLyBhbmltYXRpb24gZnJhbWVzIGluIGEgInRvZ2dsZWQiIHNpZ25hbCBo
YW5kbGVyLiBUaGlzIHB1dHMgc29tZSBjaGVja2JveGVzIGluIGEgaGFsZi13YXkKKyAgICAvLyBj
aGVja2VkIHN0YXRlLiBFdmVyeSBHVEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVseSBsb29rcyBhdCB0
aGUgc2hhZG93IHR5cGUgKGFuZCBub3QgdGhlCisgICAgLy8gJ2FjdGl2ZScgcHJvcGVydHkpIHRv
IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBjaGVjay4KKyAgICBndGtfd2lk
Z2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCB0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkg
JiYgIXRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKTsKKyAgICBndGtfd2lk
Z2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKworICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9IHRoZW1l
LT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKKyAgICBndGtfdG9nZ2xlX2J1dHRvbl9z
ZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGluZGV0ZXJtaW5hdGUp
OworCisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19PVVQ7CisgICAg
aWYgKGluZGV0ZXJtaW5hdGUpIC8vIFRoaXMgb3JpZ2luYXRlcyBmcm9tIHRoZSBNb3ppbGxhIGNv
ZGUuCisgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hFRF9JTjsKKyAgICBlbHNl
IGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHNoYWRvd1R5cGUg
PSBHVEtfU0hBRE9XX0lOOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250
ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50
KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBHdGtTdGF0ZVR5cGUgdG9nZ2xlU3RhdGUgPSBnZXRHdGtT
dGF0ZVR5cGUodGhlbWUsIHJlbmRlck9iamVjdCk7CisgICAgY29uc3QgY2hhciogZGV0YWlsID0g
MDsKKyAgICBpZiAoR1RLX0lTX1JBRElPX0JVVFRPTih3aWRnZXQpKSB7CisgICAgICAgIGRldGFp
bCA9ICJyYWRpb2J1dHRvbiI7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRPcHRpb24o
YnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBkZXRhaWwgPSAiY2hlY2tidXR0b24iOworICAgICAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Q2hlY2soYnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwg
c2hhZG93VHlwZSwgZGV0YWlsKTsKKyAgICB9CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChy
ZW5kZXJPYmplY3QpKSB7CisgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KGJ1dHRvblJlY3QpOwor
ICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMod2lkZ2V0LCBmb2N1c1JlY3QsIHRydWUpOworICAg
ICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0LCB3aWRnZXQsIHRvZ2ds
ZVN0YXRlLCBkZXRhaWwpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hl
Y2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBzZXRUb2dnbGVTaXpl
KHRoaXMsIHN0eWxlLCBndGtDaGVja0J1dHRvbigpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBhaW50VG9nZ2xlKHRoaXMs
IHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3RrQ2hlY2tCdXR0b24oKSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0a1Jh
ZGlvQnV0dG9uKCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0LCBpbmZvLCBy
ZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2
b2lkIHNldFdpZGdldEhhc0ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBoYXNGb2N1
cykKK3sKKyAgICBnX29iamVjdF9zZXQod2lkZ2V0LCAiaGFzLWZvY3VzIiwgaGFzRm9jdXMsIE5V
TEwpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGluIEdUSysgMi4y
MiwgeWV0IHRoZW1lIGVuZ2luZXMgc3RpbGwgbG9vaworICAgIC8vIGF0IHRoZXNlIGZsYWdzIHdo
ZW4gZGV0ZXJtaW5pbmcgaWYgYSB3aWRnZXQgaGFzIGZvY3VzLCBzbyB3ZSBtdXN0IHVzZSB0aGVt
LgorICAgIGlmIChoYXNGb2N1cykKKyAgICAgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0
LCBHVEtfSEFTX0ZPQ1VTKTsKKyAgICBlbHNlCisgICAgICAgIEdUS19XSURHRVRfVU5TRVRfRkxB
R1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0g
Z3RrQnV0dG9uKCk7CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6
ZSgpKTsKKyAgICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKKworICAgIEd0a1N0YXRl
VHlwZSBzdGF0ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOworICAgIGd0a193aWRn
ZXRfc2V0X3N0YXRlKHdpZGdldCwgc3RhdGUpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OworCisgICAgaWYgKGlzRm9jdXNlZChvYmplY3QpKSB7CisgICAgICAgIHNldFdpZGdldEhhc0Zv
Y3VzKHdpZGdldCwgVFJVRSk7CisKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1cyA9IDAs
IGZvY3VzV2lkdGggPSAwLCBmb2N1c1BhZGRpbmcgPSAwOworICAgICAgICBndGtfd2lkZ2V0X3N0
eWxlX2dldCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1m
b2N1cyIsICZpbnRlcmlvckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9j
dXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIE5VTEwpOworICAgICAgICAvLyBJZiB3
ZSBhcmUgdXNpbmcgZXh0ZXJpb3IgZm9jdXMsIHdlIHNocmluayB0aGUgYnV0dG9uIHJlY3QgZG93
biBiZWZvcmUKKyAgICAgICAgLy8gZHJhd2luZy4gSWYgd2UgYXJlIHVzaW5nIGludGVyaW9yIGZv
Y3VzIHdlIHNocmluayB0aGUgZm9jdXMgcmVjdC4gVGhpcworICAgICAgICAvLyBhcHByb2FjaCBv
cmlnaW5hdGVzIGZyb20gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIChndGsyZHJhd2lu
Zy5jKS4KKyAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgICAgIEd0a1N0eWxl
KiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgICAgICAgICBmb2N1
c1JlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5nKTsKKyAgICAg
ICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MgLSBmb2N1c1BhZGRp
bmcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlWCgt
Zm9jdXNXaWR0aCAtIGZvY3VzUGFkZGluZyk7CisgICAgICAgICAgICBidXR0b25SZWN0LmluZmxh
dGVZKC1mb2N1c1BhZGRpbmcgLSBmb2N1c1BhZGRpbmcpOworICAgICAgICB9CisgICAgfQorCisg
ICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVj
dCk7CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gc3RhdGUgPT0gR1RLX1NUQVRFX0FD
VElWRSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKyAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGUsIHNoYWRvd1R5cGUsICJidXR0
b24iKTsKKyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgc3RhdGUsICJidXR0b24iKTsKKworICAg
IHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwgRkFMU0UpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworaW50IFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3QK
K3sKKyAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2VwYXJhdG9yKCk7Cisg
ICAgaWYgKCFzZXBhcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ2Jvb2xlYW4gaGFz
V2lkZVNlcGFyYXRvcnMgPSBGQUxTRTsKKyAgICBnaW50IHNlcGFyYXRvcldpZHRoID0gMDsKKyAg
ICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIndpZGUtc2VwYXJhdG9ycyIsICZoYXNXaWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChoYXNXaWRlU2VwYXJhdG9ycykKKyAgICAg
ICAgcmV0dXJuIHNlcGFyYXRvcldpZHRoOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHls
ZShzZXBhcmF0b3IpLT54dGhpY2tuZXNzOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OmNvbWJv
Qm94QXJyb3dTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBUYWtpbmcg
dGhlIGZvbnQgc2l6ZSBhbmQgcmV2ZXJzaW5nIHRoZSBEUEkgY29udmVyc2lvbiBzZWVtcyB0byBt
YXRjaAorICAgIC8vIEdUSysgcmVuZGVyaW5nIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuCisgICAg
cmV0dXJuIHN0eWxlLT5mb250KCkuc2l6ZSgpICogKDcyLjAgLyBSZW5kZXJUaGVtZUd0azo6Z2V0
U2NyZWVuRFBJKCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRCdXR0b25Jbm5lckJvcmRlcihHdGtX
aWRnZXQqIGJ1dHRvbiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0
b20pCit7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoYnV0dG9u
KTsKKyAgICBpbnQgb3V0ZXJCb3JkZXIgPSBndGtfY29udGFpbmVyX2dldF9ib3JkZXJfd2lkdGgo
R1RLX0NPTlRBSU5FUihidXR0b24pKTsKKyAgICBzdGF0aWMgR3RrQm9yZGVyIGRlZmF1bHRJbm5l
ckJvcmRlciA9IHsxLCAxLCAxLCAxfTsKKyAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyOworICAg
IGd0a193aWRnZXRfc3R5bGVfZ2V0KGJ1dHRvbiwgImlubmVyLWJvcmRlciIsICZpbm5lckJvcmRl
ciwgTlVMTCk7CisgICAgaWYgKCFpbm5lckJvcmRlcikKKyAgICAgICAgaW5uZXJCb3JkZXIgPSAm
ZGVmYXVsdElubmVyQm9yZGVyOworCisgICAgbGVmdCA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3Jk
ZXItPmxlZnQgKyBzdHlsZS0+eHRoaWNrbmVzczsKKyAgICByaWdodCA9IG91dGVyQm9yZGVyICsg
aW5uZXJCb3JkZXItPnJpZ2h0ICsgc3R5bGUtPnh0aGlja25lc3M7CisgICAgdG9wID0gb3V0ZXJC
b3JkZXIgKyBpbm5lckJvcmRlci0+dG9wICsgc3R5bGUtPnl0aGlja25lc3M7CisgICAgYm90dG9t
ID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+Ym90dG9tICsgc3R5bGUtPnl0aGlja25lc3M7
CisKKyAgICBpZiAoaW5uZXJCb3JkZXIgIT0gJmRlZmF1bHRJbm5lckJvcmRlcikKKyAgICAgICAg
Z3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyKTsKK30KKworCit2b2lkIFJlbmRlclRoZW1lR3Rr
OjpnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQmIGxlZnQsIGludCYg
dG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGlzIG1l
bnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVtZSwgd2UKKyAg
ICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2ViQ29yZSBhbHJl
YWR5IHVzZXMuCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBjb21ibyBib3ggYnV0dG9uIGlzIGEgYnV0dG9u
IHdpdGggd2lkZ2V0cyBwYWNrZWQgaW50byBpdC4KKyAgICBHdGtTdHlsZSogYnV0dG9uV2lkZ2V0
U3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsKKyAgICBn
ZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOworCisgICAgLy8gQWRkIHh0aGlja25lc3MgYW1vdW50IG9mIHBhZGRpbmcgZm9y
IGVhY2ggc2lkZSBvZiB0aGUgc2VwYXJhdG9yLiBUaGlzIGVuc3VyZXMKKyAgICAvLyB0aGF0IHRo
ZSB0ZXh0IGRvZXMgbm90IGJ1bXAgdXAgYWdhaW5zdCB0aGUgc2VwYXJhdG9yLgorICAgIGludCBh
cnJvd0FuZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCisgICAg
ICAgIGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUt
Pnh0aGlja25lc3MpOworCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAg
ICAgIGxlZnQgKz0gYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7CisgICAgZWxzZQorICAgICAgICBy
aWdodCArPSBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKK30KKworaW50IFJlbmRlclRoZW1lR3Rr
Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorewor
ICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOworICAgIGdl
dENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBy
ZXR1cm4gbGVmdDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRv
cCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5
bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCitp
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90
dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7CisgICAgcmV0dXJuIHRvcDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAg
aW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CisgICAgZ2V0Q29t
Ym9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIHJldHVy
biBib3R0b207Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBNZW51IGxpc3QgYnV0dG9uIHBhaW50aW5nIHN0cmF0ZWd5
LgorICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1saXN0IHNldCB0byBmYWxzZSAo
aGF2aW5nIGEgc2VwYXJhdG9yKToKKyAgICAvLyB8IGxlZnQgYm9yZGVyIHwgQnV0dG9uIHRleHQg
fCB4dGhpY2tuZXNzIHwgdnNlcGFyYXRvciB8IHh0aGlja25lc3MgfCBhcnJvdyB8IHh0aGlja25l
c3MgfCByaWdodCBib3JkZXIgfAorICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1s
aXN0IHNldCB0byB0cnVlIChub3QgaGF2aW5nIGEgc2VwYXJhdG9yKToKKyAgICAvLyB8IGxlZnQg
Ym9yZGVyIHwgQnV0dG9uIHRleHQgfCBhcnJvdyB8IHh0aGlja25lc3MgfCByaWdodCBib3JkZXIg
fAorCisgICAgaW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJvdHRvbUJvcmRl
ciA9IDAsIHRvcEJvcmRlciA9IDA7CisgICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3RrQ29tYm9C
b3hCdXR0b24oKSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwgYm90dG9tQm9y
ZGVyKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgaW50
IGFycm93U2l6ZSA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKTsKKyAgICBHdGtTdHlsZSogYnV0
dG9uU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsKKwor
ICAgIEludFJlY3QgYXJyb3dSZWN0KDAsIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAvIDIs
IGFycm93U2l6ZSwgYXJyb3dTaXplKTsKKyAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJU
TCkKKyAgICAgICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhp
Y2tuZXNzKTsKKyAgICBlbHNlCisgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAt
IHJpZ2h0Qm9yZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOworICAg
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IGlzUHJlc3NlZChvYmplY3QpID8gR1RLX1NIQURP
V19JTiA6IEdUS19TSEFET1dfT1VUOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRn
ZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlw
ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOworICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRBcnJvdyhhcnJvd1JlY3QsIGd0a0NvbWJvQm94QXJyb3coKSwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgImFycm93Iik7CisKKyAgICAvLyBTb21lIGNvbWJvIGJv
eGVzIGRvIG5vdCBoYXZlIGEgc2VwYXJhdG9yLgorICAgIEd0a1dpZGdldCogc2VwYXJhdG9yID0g
Z3RrQ29tYm9Cb3hTZXBhcmF0b3IoKTsKKyAgICBpZiAoIXNlcGFyYXRvcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gV2Ugd2FudCB0byBkZWNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRo
ZSBzZXBhcmF0b3IgYmFzZWQgb24gdGhlIGZvY3VzIHBhZGRpbmcgb2YgdGhlIGJ1dHRvbi4KKyAg
ICBnaW50IGZvY3VzUGFkZGluZyA9IDAsIGZvY3VzV2lkdGggPSAwOyAKKyAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldChndGtDb21ib0JveEJ1dHRvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWRkaW5nLCBOVUxMKTsKKyAgICB0b3BCb3JkZXIg
Kz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKKyAgICBib3R0b21Cb3JkZXIgKz0gZm9jdXNQ
YWRkaW5nICsgZm9jdXNXaWR0aDsKKyAgICBpbnQgc2VwYXJhdG9yV2lkdGggPSBnZXRDb21ib0Jv
eFNlcGFyYXRvcldpZHRoKCk7CisgICAgSW50UmVjdCBzZXBhcmF0b3JSZWN0KDAsIHRvcEJvcmRl
ciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BCb3JkZXIgLSBib3R0b21Cb3Jk
ZXIpOworICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICBzZXBhcmF0
b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSArIGFycm93UmVjdC53aWR0aCgpICsgYnV0dG9uU3R5
bGUtPnh0aGlja25lc3MgKyBzZXBhcmF0b3JXaWR0aCk7CisgICAgZWxzZQorICAgICAgICBzZXBh
cmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSAtIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzIC0g
c2VwYXJhdG9yV2lkdGgpOworCisgICAgZ2Jvb2xlYW4gaGFzV2lkZVNlcGFyYXRvcnMgPSBGQUxT
RTsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsICJ3aWRlLXNlcGFyYXRvcnMi
LCAmaGFzV2lkZVNlcGFyYXRvcnMsIE5VTEwpOworICAgIGlmIChoYXNXaWRlU2VwYXJhdG9ycykK
KyAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChzZXBhcmF0b3JSZWN0LCBzZXBhcmF0
b3IsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfRVRDSEVEX09VVCwgInZzZXBhcmF0b3Ii
KTsKKyAgICBlbHNlCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRWTGluZShzZXBhcmF0
b3JSZWN0LCBzZXBhcmF0b3IsIEdUS19TVEFURV9OT1JNQUwsICJ2c2VwYXJhdG9yIik7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxk
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwor
CisgICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYgIWlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCk7CisgICAgR3RrU3RhdGVUeXBlIGJhY2tncm91bmRTdGF0
ZSA9IGVuYWJsZWQgPyBHVEtfU1RBVEVfTk9STUFMIDogR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwor
ICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsIGVuYWJsZWQpOworICAgIGd0a193
aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwg
aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3
aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCB0ZXh0RmllbGRS
ZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIFRoZSBlbnRyeSBiYWNrZ3Jv
dW5kIGlzIG9ubHkgcGFpbnRlZCBvdmVyIHRoZSBpbnRlcmlvciBwYXJ0IG9mIHRoZSBHVEsrIGVu
dHJ5LCBub3QKKyAgICAvLyB0aGUgZW50aXJlIGZyYW1lLiBUaGlzIGhhcHBlbnMgaW4gdGhlIE1v
emlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIGFzIHdlbGwuCisgICAgSW50UmVjdCBpbnRlcmlvclJl
Y3QodGV4dEZpZWxkUmVjdCk7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KTsKKyAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tu
ZXNzKTsKKyAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tuZXNzKTsKKyAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50RmxhdEJveChpbnRlcmlvclJlY3QsIHdpZGdldCwgYmFj
a2dyb3VuZFN0YXRlLCBHVEtfU0hBRE9XX05PTkUsICJlbnRyeV9iZyIpOworCisgICAgLy8gVGhp
cyBpcyByZXNwb25zaWJsZSBmb3IgZHJhd2luZyB0aGUgYWN0dWFsIGZyYW1lLgorICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRTaGFkb3codGV4dEZpZWxkUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVf
Tk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50cnkiKTsKKworICAgIGdib29sZWFuIGludGVyaW9y
Rm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdp
ZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZm
b2N1c1dpZHRoLCAgTlVMTCk7CisgICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpICYmICFp
bnRlcmlvckZvY3VzKSB7CisgICAgICAgIC8vIFdoZW4gR1RLKyBwYWludHMgYSB0ZXh0IGVudHJ5
IHdpdGggZm9jdXMsIGl0IHNocmlua3MgdGhlIHNpemUgb2YgdGhlIGZyYW1lIGFyZWEgYnkgdGhl
CisgICAgICAgIC8vIGZvY3VzIHdpZHRoIGFuZCBwYWludHMgb3ZlciB0aGUgcHJldmlvdXNseSB1
bmZvY3VzZWQgdGV4dCBlbnRyeS4gV2UgbmVlZCB0byBlbXVsYXRlIHRoYXQKKyAgICAgICAgLy8g
YnkgZHJhd2luZyBib3RoIHRoZSB1bmZvY3VzZWQgZnJhbWUgYWJvdmUgYW5kIHRoZSBmb2N1c2Vk
IGZyYW1lIGhlcmUuCisgICAgICAgIEludFJlY3Qgc2hhZG93UmVjdCh0ZXh0RmllbGRSZWN0KTsK
KyAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1mb2N1c1dpZHRoKTsKKyAgICAgICAgd2lkZ2V0
Q29udGV4dC5ndGtQYWludFNoYWRvdyhzaGFkb3dSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9OT1JN
QUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOworCisgICAgICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRGb2N1cyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9OT1JNQUwsICJlbnRy
eSIpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChpbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ29udHJvbFBh
cnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIEFTU0VSVChwYXJ0
ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8
IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKKworICAgIC8vIFdlIHNocmluayB0aGUg
dHJvdWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9jdXMgaW5kaWNhdG9y
LgorICAgIEludFJlY3QgdHJvdWdoUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7IC8vIFRo
aXMgaXMgcmVsYXRpdmUgdG8gcmVjdC4KKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IDA7CisgICAg
aWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKKyAgICAgICAgd2lkZ2V0ID0gZ3Rr
SFNjYWxlKCk7CisgICAgICAgIHRyb3VnaFJlY3QuaW5mbGF0ZVgoLWd0a193aWRnZXRfZ2V0X3N0
eWxlKHdpZGdldCktPnh0aGlja25lc3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpZGdldCA9
IGd0a1ZTY2FsZSgpOworICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZKC1ndGtfd2lkZ2V0X2dl
dF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKKyAgICB9CisgICAgZ3RrX3dpZGdldF9zZXRf
ZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5m
by5jb250ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJl
Y3QsIHdpZGdldCwgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsK
KyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRGb2N1cyhJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgd2lkZ2V0LCBnZXRHdGtT
dGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgInRyb3VnaCIpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCk7CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBw
YXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYlBhcnQpOworCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOworICAgIGNvbnN0IGNo
YXIqIGRldGFpbCA9IDA7CisgICAgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICB3aWRnZXQgPSBn
dGtIU2NhbGUoKTsKKyAgICAgICAgZGV0YWlsID0gImhzY2FsZSI7CisgICAgICAgIG9yaWVudGF0
aW9uID0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
d2lkZ2V0ID0gZ3RrVlNjYWxlKCk7CisgICAgICAgIGRldGFpbCA9ICJ2c2NhbGUiOworICAgICAg
ICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsKKyAgICB9CisgICAgZ3Rr
X3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0
eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICAvLyBPbmx5IHNvbWUgdGhlbWVzIGhhdmUgc2xp
ZGVyIHRodW1icyByZXNwb25kIHRvIGNsaWNrcyBhbmQgc29tZSBkb24ndC4gVGhpcyBpbmZvcm1h
dGlvbiBpcworICAgIC8vIGdhdGhlcmVkIHZpYSB0aGUgJ2FjdGl2YXRlLXNsaWRlcicgcHJvcGVy
dHksIGJ1dCBpdCdzIGRlcHJlY2F0ZWQgaW4gR1RLKyAyLjIyIGFuZCByZW1vdmVkIGluCisgICAg
Ly8gR1RLKyAzLnguIFRoZSBkcmF3YmFjayBvZiBub3QgaG9ub3JpbmcgaXQgaXMgdGhhdCBzbGlk
ZXIgdGh1bWJzIGNoYW5nZSBjb2xvciB3aGVuIHlvdSBjbGljaworICAgIC8vIG9uIHRoZW0uIAor
ICAgIEludFJlY3QgdGh1bWJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKKyAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2xpZGVyKHRodW1iUmVjdCwgd2lkZ2V0LCBnZXRHdGtT
dGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgR1RLX1NIQURPV19PVVQsIGRldGFpbCwgb3JpZW50YXRp
b24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7Cisg
ICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQg
IT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IGd0a0hTY2FsZSgpIDogZ3RrVlNjYWxlKCk7
CisgICAgaW50IGxlbmd0aCA9IDAsIHdpZHRoID0gMDsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl9sZW5ndGgiLCAmbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfd2lkdGgiLCAmd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAocGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsK
KyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKK30KKworI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtQcm9ncmVzc0Jhcigp
OworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24o
cmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCByZWN0KTsKKyAgICBJ
bnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOworICAg
IHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFByb2dyZXNzQmFyUmVjdCwgd2lkZ2V0LCBH
VEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAidHJvdWdoIik7CisKKyAgICBHdGtTdHls
ZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOworICAgIEludFJlY3QgcHJv
Z3Jlc3NSZWN0KGZ1bGxQcm9ncmVzc0JhclJlY3QpOworICAgIHByb2dyZXNzUmVjdC5pbmZsYXRl
WCgtc3R5bGUtPnh0aGlja25lc3MpOworICAgIHByb2dyZXNzUmVjdC5pbmZsYXRlWSgtc3R5bGUt
Pnl0aGlja25lc3MpOworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxh
dGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOworCisgICAgaWYgKCFw
cm9ncmVzc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94
KHByb2dyZXNzUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfUFJFTElHSFQsIEdUS19TSEFET1dfT1VU
LCAiYmFyIik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgR3RrU3R5bGUqIGd0a1N0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrU3BpbkJ1dHRvbigpKTsKKyAgICBjb25zdCBQYW5n
b0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uID0gZ3RrU3R5bGUtPmZvbnRfZGVzYzsK
KyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZShmb250
RGVzY3JpcHRpb24pOworCisgICAgLy8gRm9yY2UgYW4gb2RkIGFycm93IHNpemUgaGVyZS4gR1RL
KyAzLnggZm9yY2VzIGV2ZW4gaW4gdGhpcyBjYXNlLCBidXQKKyAgICAvLyBOb2Rva2EtYmFzZWQg
dGhlbWVzIGxvb2sgaW5jb3JyZWN0IHdpdGggYW4gZXZlbiBhcnJvdyBzaXplLgorICAgIGludCB3
aWR0aCA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dTaXpl
KTsKKyAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+eHRoaWNrbmVz
czsKKworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5
bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxzIG9uIHRoZSB0b3AgYW5k
IGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCisgICAgLy8gaXMgYmVjYXVz
ZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBib3ggYm9yZGVycywgYnV0
IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKKyAgICAvLyBzcGluIGJ1dHRvbiBpbnNpZGUgdGhl
IHRleHQgYm94LgorICAgIEludFJlY3QgZXhwYW5kZWRSZWN0KHJlY3QpOworICAgIGV4cGFuZGVk
UmVjdC5pbmZsYXRlWSgyKTsKKyAgICBleHBhbmRlZFJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgp
ICsgMik7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQocGFpbnRJ
bmZvLmNvbnRleHQsIGV4cGFuZGVkUmVjdCk7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtT
cGluQnV0dG9uKCk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICBJ
bnRSZWN0IGZ1bGxTcGluQnV0dG9uUmVjdChJbnRQb2ludCgpLCBleHBhbmRlZFJlY3Quc2l6ZSgp
KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxTcGluQnV0dG9uUmVjdCwgd2lk
Z2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic3BpbmJ1dHRvbiIpOworCisg
ICAgYm9vbCB1cFByZXNzZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVj
dCk7CisgICAgYm9vbCB1cEhvdmVyZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRl
ck9iamVjdCk7CisgICAgYm9vbCBjb250cm9sQWN0aXZlID0gaXNFbmFibGVkKHJlbmRlck9iamVj
dCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7CisgICAgR3RrU2hhZG93VHlw
ZSBzaGFkb3dUeXBlID0gdXBQcmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VU
OworCisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9JTlNFTlNJVElWRTsK
KyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAgICAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9i
amVjdCkgJiYgdXBQcmVzc2VkKQorICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX0FD
VElWRTsKKyAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkgJiYgdXBIb3Zl
cmVkKQorICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOworICAgIH0K
KyAgICBJbnRSZWN0IHRvcFJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7Cisg
ICAgdG9wUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC8gMik7CisgICAgd2lk
Z2V0Q29udGV4dC5ndGtQYWludEJveCh0b3BSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93
VHlwZSwgInNwaW5idXR0b25fdXAiKTsKKworICAgIC8vIFRoZSBhcnJvdyBzaXplL3Bvc2l0aW9u
IGNhbGN1bGF0aW9uIGhlcmUgaXMgYmFzZWQgb24gdGhlIGFyYml0cmFyeSBneW1uYXN0aWNzIHRo
YXQgaGFwcGVuCisgICAgLy8gaW4gZ3Rrc3BpbmJ1dHRvbi5jLiBJdCBpc24ndCBwcmV0dHkgdGhl
cmUgYW5kIGl0IGlzbid0IHByZXR0eSBoZXJlLiBUaGlzIG1hbmFnZXMgdG8gbWFrZQorICAgIC8v
IHRoZSBidXR0b24gbG9vayBuYXRpdmUgZm9yIG1hbnkgdGhlbWVzIHRob3VnaC4KKyAgICBJbnRS
ZWN0IGFycm93UmVjdDsKKyAgICBpbnQgYXJyb3dTaXplID0gKGV4cGFuZGVkUmVjdC53aWR0aCgp
IC0gMykgLyAyOworICAgIGFycm93U2l6ZSAtPSAoYXJyb3dTaXplICUgMikgLSAxOyAvLyBGb3Jj
ZSBvZGQuCisgICAgYXJyb3dSZWN0LnNldFdpZHRoKGFycm93U2l6ZSk7CisgICAgYXJyb3dSZWN0
LnNldEhlaWdodChhcnJvd1NpemUpOworICAgIGFycm93UmVjdC5tb3ZlKChleHBhbmRlZFJlY3Qu
d2lkdGgoKSAtIGFycm93UmVjdC53aWR0aCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgKHRv
cFJlY3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QuaGVpZ2h0KCkpIC8gMiArIDEpOworICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBHVEtfQVJST1dfVVAsICJzcGluYnV0dG9uIik7CisKKyAgICBzaGFkb3dUeXBlID0g
aXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCA/IEdUS19TSEFET1dfSU4gOiBH
VEtfU0hBRE9XX09VVDsKKyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAgICAgICBpZiAoaXNQ
cmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCkKKyAgICAgICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJP
YmplY3QpICYmICF1cEhvdmVyZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVf
UFJFTElHSFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9OT1JNQUw7CisgICAgfQorICAgIEludFJlY3QgYm90dG9tUmVjdChJbnRQb2ludCgwLCBleHBh
bmRlZFJlY3QuaGVpZ2h0KCkgLyAyKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7CisgICAgYm90dG9t
UmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC0gYm90dG9tUmVjdC55KCkpOwor
ICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYm90dG9tUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5
cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX2Rvd24iKTsKKworICAgIGFycm93UmVjdC5zZXRZ
KGFycm93UmVjdC55KCkgKyBib3R0b21SZWN0LnkoKSAtIDEpOworICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCBH
VEtfQVJST1dfRE9XTiwgInNwaW5idXR0b24iKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
R1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0
VHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBn
aW50IGljb25TaXplKQoreworICAgIEFTU0VSVCh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NPTlRB
SU5FUiB8fCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKTsKKworICAgIFJlbmRlclRoZW1l
R3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLmdldCgpKTsKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfQ09OVEFJTkVSID8gR1RLX1dJREdFVCh0aGVtZS0+Z3RrQ29udGFpbmVyKCkp
IDogdGhlbWUtPmd0a0VudHJ5KCk7CisKKyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZSh3aWRnZXQpOworICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfc3R5bGVf
bG9va3VwX2ljb25fc2V0KHN0eWxlLCBpY29uTmFtZSk7CisgICAgcmV0dXJuIGFkb3B0R1JlZihn
dGtfaWNvbl9zZXRfcmVuZGVyX2ljb24oaWNvblNldCwgc3R5bGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlv
bj4oZGlyZWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxHdGtTdGF0ZVR5cGU+KHN0YXRlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNv
blNpemUpLCAwLCAwKSk7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja1N5bWJvbGlj
SWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogc3ltYm9saWNJ
Y29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBnaW50IGRpcmVjdGlv
biwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sKKyAgICByZXR1cm4gZ2V0U3RvY2tJY29u
Rm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGRpcmVjdGlv
biwgc3RhdGUsIGljb25TaXplKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQq
IHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdp
ZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKK30KKworQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJu
IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnko
KTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RB
VEVfQUNUSVZFXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0g
Z3RrVHJlZVZpZXcoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+
YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6aW5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtX
aWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Cit9CisKK0NvbG9yIFJlbmRl
clRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0
a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30K
KworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVlVmlldygp
OworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0W0dUS19TVEFU
RV9BQ1RJVkVdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNz
c1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7CisgICAgY2FzZSBD
U1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0X2dldF9z
dHlsZShndGtCdXR0b24oKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsKKyAgICBjYXNlIENTU1Zh
bHVlQ2FwdGlvbnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0X2dldF9zdHls
ZShndGtFbnRyeSgpKS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBH
dGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKK3sKKyAgICAvLyBG
SVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkgdGlt
ZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KKyAgICByZW5kZXJUaGVt
ZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBXaWRn
ZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9yZWFsaXplKHdpZGdldCk7
CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJn
LWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3Rr
OjpzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtXaWRn
ZXQqIHdpbmRvdykgY29uc3QKK3sKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHdpbmRvdyksIHdpZGdldCk7CisgICAgc2V0dXBXaWRnZXQod2lkZ2V0KTsKKworICAgIC8vIEZJ
WE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB0aGUgY29udGFpbmlu
ZyB3aW5kb3cgb3IgcGFyZW50IGNvbnRhaW5lci4KKyAgICBnX3NpZ25hbF9jb25uZWN0KHdpZGdl
dCwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIGNvbnN0X2Nh
c3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVH
dGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29udGFpbmVyKQorICAg
ICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CisKKyAgICBtX2d0a1dpbmRvdyA9IGd0a193aW5k
b3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIGd0a193aWRnZXRfc2V0X2NvbG9ybWFwKG1f
Z3RrV2luZG93LCBtX2NvbG9ybWFwKTsKKyAgICBzZXR1cFdpZGdldChtX2d0a1dpbmRvdyk7Cisg
ICAgZ3RrX3dpZGdldF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemlsbGFHdGtXaWRnZXQiKTsK
KworICAgIG1fZ3RrQ29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOworICAgIHNldHVwV2lkZ2V0
QW5kQWRkVG9Db250YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2luZG93KTsKKyAgICByZXR1
cm4gbV9ndGtDb250YWluZXI7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0J1
dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQnV0dG9uKQorICAgICAgICByZXR1cm4gbV9n
dGtCdXR0b247CisgICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOworICAgIHNldHVw
V2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAg
ICByZXR1cm4gbV9ndGtCdXR0b247Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0
a0VudHJ5KCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtFbnRyeSkKKyAgICAgICAgcmV0dXJuIG1f
Z3RrRW50cnk7CisgICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBzZXR1cFdp
ZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5lcigpKTsKKyAgICBy
ZXR1cm4gbV9ndGtFbnRyeTsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVHJl
ZVZpZXcoKSBjb25zdAoreworICAgIGlmIChtX2d0a1RyZWVWaWV3KQorICAgICAgICByZXR1cm4g
bV9ndGtUcmVlVmlldzsKKyAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3RyZWVfdmlld19uZXcoKTsK
KyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJlZVZpZXcsIGd0a0NvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKK30KKworR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrVlNjYWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtWU2NhbGUpCisg
ICAgICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKKyAgICBtX2d0a1ZTY2FsZSA9IGd0a192c2NhbGVf
bmV3KDApOworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtWU2NhbGUsIGd0
a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtWU2NhbGU7Cit9CisKK0d0a1dpZGdldCog
UmVuZGVyVGhlbWVHdGs6Omd0a0hTY2FsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrSFNjYWxl
KQorICAgICAgICByZXR1cm4gbV9ndGtIU2NhbGU7CisgICAgbV9ndGtIU2NhbGUgPSBndGtfaHNj
YWxlX25ldygwKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrSFNjYWxl
LCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrSFNjYWxlOworfQorCitHdGtXaWRn
ZXQqIFJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1f
Z3RrUmFkaW9CdXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG1f
Z3RrUmFkaW9CdXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldygwKTsKKyAgICBzZXR1cFdpZGdl
dEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUmFkaW9CdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAg
ICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0
azo6Z3RrQ2hlY2tCdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a0NoZWNrQnV0dG9uKQor
ICAgICAgICByZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKKyAgICBtX2d0a0NoZWNrQnV0dG9uID0g
Z3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVy
KG1fZ3RrQ2hlY2tCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtDaGVj
a0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrUHJvZ3Jlc3NCYXIo
KSBjb25zdAoreworICAgIGlmIChtX2d0a1Byb2dyZXNzQmFyKQorICAgICAgICByZXR1cm4gbV9n
dGtQcm9ncmVzc0JhcjsKKyAgICBtX2d0a1Byb2dyZXNzQmFyID0gZ3RrX3Byb2dyZXNzX2Jhcl9u
ZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUHJvZ3Jlc3NCYXIs
IGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsKK30KKworc3Rh
dGljIHZvaWQgZ2V0R3RrQ29tYm9Cb3hCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVy
IHRhcmdldCkKK3sKKyAgICBpZiAoIUdUS19JU19UT0dHTEVfQlVUVE9OKHdpZGdldCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBHdGtXaWRnZXQqKiB3aWRnZXRUYXJnZXQgPSBzdGF0aWNfY2FzdDxH
dGtXaWRnZXQqKj4odGFyZ2V0KTsKKyAgICAqd2lkZ2V0VGFyZ2V0ID0gd2lkZ2V0OworfQorCit0
eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiBhcnJvdzsKKyAgICBHdGtXaWRnZXQqIHNl
cGFyYXRvcjsKK30gQ29tYm9Cb3hXaWRnZXRQaWVjZXM7CisKK3N0YXRpYyB2b2lkIGdldEd0a0Nv
bWJvQm94UGllY2VzKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQoreworICAgIGlm
IChHVEtfSVNfQVJST1cod2lkZ2V0KSkgeworICAgICAgICBzdGF0aWNfY2FzdDxDb21ib0JveFdp
ZGdldFBpZWNlcyo+KGRhdGEpLT5hcnJvdyA9IHdpZGdldDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSAKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+c2VwYXJhdG9yID0gd2lkZ2V0OworfQor
CitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fZ3RrQ29tYm9Cb3gpCisgICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94OworICAgIG1f
Z3RrQ29tYm9Cb3ggPSBndGtfY29tYm9fYm94X25ldygpOworICAgIHNldHVwV2lkZ2V0QW5kQWRk
VG9Db250YWluZXIobV9ndGtDb21ib0JveCwgZ3RrQ29udGFpbmVyKCkpOworICAgIHJldHVybiBt
X2d0a0NvbWJvQm94OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpyZWZyZXNoQ29tYm9Cb3hD
aGlsZHJlbigpIGNvbnN0Cit7CisgICAgZ3RrQ29tYm9Cb3goKTsgLy8gRW5zdXJlIHRoYXQgd2Un
dmUgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveC4KKworICAgIC8vIFNvbWUgdGhlbWVzIGxvb2sg
YXQgd2lkZ2V0IGFuY2VzdHJ5IHRvIGRldGVybWluZSBob3cgdG8gcmVuZGVyIHdpZGdldHMsIHNv
CisgICAgLy8gZ2V0IHRoZSBHdGtCdXR0b24gdGhhdCBpcyB0aGUgYWN0dWFsIGNoaWxkIG9mIHRo
ZSBjb21ibyBib3guCisgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihtX2d0
a0NvbWJvQm94KSwgZ2V0R3RrQ29tYm9Cb3hCdXR0b24sICZtX2d0a0NvbWJvQm94QnV0dG9uKTsK
KyAgICBBU1NFUlQobV9ndGtDb21ib0JveEJ1dHRvbik7CisgICAgc2V0dXBXaWRnZXQobV9ndGtD
b21ib0JveEJ1dHRvbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCht
X2d0a0NvbWJvQm94QnV0dG9uKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0Nv
bWJvQm94QnV0dG9uKSk7CisKKyAgICBDb21ib0JveFdpZGdldFBpZWNlcyBwaWVjZXMgPSB7IDAs
IDAgfTsKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbkNoaWxkID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RL
X0JJTihndGtDb21ib0JveEJ1dHRvbigpKSk7CisgICAgaWYgKEdUS19JU19IQk9YKGJ1dHRvbkNo
aWxkKSkKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihidXR0b25D
aGlsZCksIGdldEd0a0NvbWJvQm94UGllY2VzLCAmcGllY2VzKTsKKyAgICBlbHNlIGlmIChHVEtf
SVNfQVJST1coYnV0dG9uQ2hpbGQpKQorICAgICAgICBwaWVjZXMuYXJyb3cgPSBidXR0b25DaGls
ZDsKKworICAgIEFTU0VSVChwaWVjZXMuYXJyb3cpOworICAgIG1fZ3RrQ29tYm9Cb3hBcnJvdyA9
IHBpZWNlcy5hcnJvdzsKKyAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94QXJyb3cpOworICAg
IC8vIFdoZW4gdGhlIHN0eWxlIGNoYW5nZXMsIHRoZSBjb21ibyBib3ggbWF5IGRlc3Ryb3kgaXRz
IGNoaWxkcmVuLgorICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtD
b21ib0JveEFycm93KSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94
QXJyb3cpKTsKKworICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSBwaWVjZXMuc2VwYXJhdG9y
OworICAgIGlmIChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSB7CisgICAgICAgIHNldHVwV2lkZ2V0
KG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpOworICAgICAgICAvLyBXaGVuIHRoZSBzdHlsZSBjaGFu
Z2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4KKyAgICAgICAgZ19v
YmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSk7Cisg
ICAgfQorfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveEJ1dHRvbigp
IGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29tYm9Cb3hCdXR0b24pCisgICAgICAgIHJldHVybiBt
X2d0a0NvbWJvQm94QnV0dG9uOworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAg
QVNTRVJUKG1fZ3RrQ29tYm9Cb3hCdXR0b24pOworICAgIHJldHVybiBtX2d0a0NvbWJvQm94QnV0
dG9uOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveEFycm93KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9ndGtDb21ib0JveEFycm93KQorICAgICAgICByZXR1cm4gbV9n
dGtDb21ib0JveEFycm93OworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7CisgICAgQVNT
RVJUKG1fZ3RrQ29tYm9Cb3hBcnJvdyk7CisgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hBcnJvdzsK
K30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hTZXBhcmF0b3IoKSBj
b25zdAoreworICAgIC8vIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgbWF5IGJlIG51bGwgZWl0aGVy
IGJlY2F1c2Ugd2UgaGF2ZW4ndCBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94CisgICAgLy8gb3Ig
YmVjYXVzZSB0aGUgY29tYm8gYm94ZXMgaW4gdGhpcyB0aGVtZSBkb24ndCBoYXZlIHNlcGFyYXRv
cnMuIElmIG1fZ3RrQ29tYm9Cb3hBcnJvdworICAgIC8vIGFycm93IGlzbid0IG51bGwsIHdlIGRl
ZmluaXRlbHkgaGF2ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94LgorICAgIGlmIChtX2d0a0Nv
bWJvQm94QXJyb3cgfHwgbV9ndGtDb21ib0JveEJ1dHRvbikKKyAgICAgICAgcmV0dXJuIG1fZ3Rr
Q29tYm9Cb3hTZXBhcmF0b3I7CisgICAgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKTsKKyAgICBy
ZXR1cm4gbV9ndGtDb21ib0JveFNlcGFyYXRvcjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVt
ZUd0azo6Z3RrSFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrSFNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKKyAgICBtX2d0a0hTY3JvbGxiYXIgPSBn
dGtfaHNjcm9sbGJhcl9uZXcoMCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lciht
X2d0a0hTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtIU2Nyb2xs
YmFyOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtWU2Nyb2xsYmFyKCkgY29u
c3QKK3sKKyAgICBpZiAobV9ndGtWU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9ndGtWU2Ny
b2xsYmFyOworICAgIG1fZ3RrVlNjcm9sbGJhciA9IGd0a192c2Nyb2xsYmFyX25ldygwKTsKKyAg
ICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjcm9sbGJhciwgZ3RrQ29udGFp
bmVyKCkpOworICAgIHJldHVybiBtX2d0a1ZTY3JvbGxiYXI7Cit9CisKK0d0a1dpZGdldCogUmVu
ZGVyVGhlbWVHdGs6Omd0a1NwaW5CdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a1NwaW5C
dXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247CisgICAgbV9ndGtTcGluQnV0
dG9uID0gZ3RrX3NwaW5fYnV0dG9uX25ld193aXRoX3JhbmdlKDAsIDEwLCAxKTsKKyAgICBzZXR1
cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrU3BpbkJ1dHRvbiwgZ3RrQ29udGFpbmVyKCkp
OworICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE3ZjVhMmEyZDMwMDIwZDgyMjQzY2UyYWFmOGIy
MDU2MGZhZDUxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGszLmNwcApAQCAtMCwwICsxLDEwMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWVHdGsuaCIKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorCisjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWludElu
Zm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGdkay9nZGsuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBp
cyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVk
IGFzIE1JTl9BUlJPV19TSVpFIGluIGd0a2Fycm93LmMuCitzdGF0aWMgY29uc3QgaW50IG1pbkFy
cm93U2l6ZSA9IDE1OworLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdU
SyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0
dG9uLmMuCitzdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OworCit0
eXBlZGVmIEhhc2hNYXA8R1R5cGUsIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiA+IFN0eWxlQ29u
dGV4dE1hcDsKK3N0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpOworCitz
dGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyop
Cit7CisgICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZUNvbnRl
eHRNYXAoKS5lbmQoKTsKKyAgICBmb3IgKFN0eWxlQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisg
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFsdWUuZ2V0KCkpOwor
CisgICAgUGFnZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBhZ2VzKCk7Cit9CisK
K3N0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHlsZUNvbnRleHRNYXAsIG1hcCwgKCkpOworCisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAg
IEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstdGhlbWUtbmFtZSIs
IEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9yLXNjaGVtZSIsIEdfQ0FMTEJB
Q0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgR3RrU3R5bGVDb250ZXh0
KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKK3sKKyAgICBTdHlsZUNvbnRleHRN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQod2lkZ2V0VHlwZSwg
MCk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CisKKyAgICBHdGtXaWRnZXRQYXRoKiBwYXRoID0gZ3RrX3dp
ZGdldF9wYXRoX25ldygpOworICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLCB3
aWRnZXRUeXBlKTsKKworICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NDUk9MTEJBUikK
KyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlM
RV9DTEFTU19TQ1JPTExCQVIpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
RU5UUlkpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBH
VEtfU1RZTEVfQ0xBU1NfRU5UUlkpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZ
UEVfQVJST1cpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAw
LCAiYXJyb3ciKTsKKyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0JVVFRPTikK
KyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlM
RV9DTEFTU19CVVRUT04pOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0NB
TEUpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtf
U1RZTEVfQ0xBU1NfU0NBTEUpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
U0VQQVJBVE9SKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwg
MCwgR1RLX1NUWUxFX0NMQVNTX1NFUEFSQVRPUik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9
PSBHVEtfVFlQRV9QUk9HUkVTU19CQVIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2Fk
ZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOworICAgIGVsc2Ug
aWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU1BJTl9CVVRUT04pCisgICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU1BJTkJVVFRP
Tik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9UUkVFX1ZJRVcpCisgICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xB
U1NfVklFVyk7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRU
T04pCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtf
U1RZTEVfQ0xBU1NfQ0hFQ0spOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVf
UkFESU9fQlVUVE9OKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0
aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKKworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250
ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoKTsKKyAgICBndGtf
d2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsKKworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBj
b250ZXh0OworICAgIHJldHVybiBjb250ZXh0LmdldCgpOworfQorCitHdGtTdHlsZUNvbnRleHQq
IFJlbmRlclRoZW1lR3RrOjpndGtTY3JvbGxiYXJTdHlsZSgpCit7CisgICAgcmV0dXJuIGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9TQ1JPTExCQVIpOworfQorCisvLyBUaGlzIGlzIG5vdCBhIHN0
YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RLKyBoZWFkZXJz
IGluIFJlbmRlclRoZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGly
ZWN0aW9uKFRleHREaXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUlu
aXQoKQoreworfQorCitSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKCkKK3sKK30KKwor
I2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygp
Cit7CisgICAgR2RrUkdCQSBjb2xvcjsKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRhaW5lckNv
bnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJTkVSKTsKKworICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19T
VEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKKyAgICBtX3BhbmVsQ29sb3IgPSBjb2xvcjsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0
LCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZjb2xvcik7CisgICAgbV9zbGlkZXJDb2xvciA9IGNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5l
ckNvbnRleHQsIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmY29sb3IpOworICAgIG1fc2xpZGVy
VGh1bWJDb2xvciA9IGNvbG9yOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFkanVzdFJlY3RG
b3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJlY3QpCit7CisgICAg
Z2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUt
d2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZv
Y3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOworICAgIHJlY3QuaW5mbGF0ZShmb2N1c1dp
ZHRoICsgZm9jdXNQYWQpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50
UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSAwOworICAgIGJvb2wgY2hlY2tJbnRlcmlv
ckZvY3VzID0gZmFsc2U7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgQ2hlY2ti
b3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OIDogR1RL
X1RZUEVfUkFESU9fQlVUVE9OKTsKKworICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Cisg
ICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNw
YWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7CisgICAgICAgIHJlY3QuaW5mbGF0ZShp
bmRpY2F0b3JTcGFjaW5nKTsKKworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTbGlkZXJWZXJ0
aWNhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICAgICAgY29udGV4
dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKKyAgICBjYXNl
IE1lbnVsaXN0UGFydDoKKyAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQ
RV9CVVRUT04pOworICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6Cisg
ICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOworICAgICAg
ICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlm
IChjaGVja0ludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsK
KyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1m
b2N1cyIsICZpbnRlcmlvckZvY3VzLCBOVUxMKTsKKyAgICAgICAgaWYgKGludGVyaW9yRm9jdXMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250
ZXh0LCByZWN0KTsKK30KKworc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRl
eHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICAvLyBUaGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4K
KyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3RoZXIgcG9ydHMg
aGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZp
bmVkIGJ5IEdUSysuCisgICAgLy8gR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFuZCB0aGUgbmF0aXZl
IGxvb2suCisgICAgLy8gSXQgY291bGQgYmUgbWFkZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHZh
bHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUgY29tcGF0aWJpbGl0eS4KKyAg
ICBnaW50IGluZGljYXRvclNpemU7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNv
bnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKKworICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisKKyAgICBpZiAoc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0
b3JTaXplLCBGaXhlZCkpOworfQorCitzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5k
ZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJl
Y3QpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdp
ZGdldFR5cGUpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICAv
LyBTb21lIHRoZW1lcyBkbyBub3QgcmVuZGVyIGxhcmdlIHRvZ2dsZSBidXR0b25zIHByb3Blcmx5
LCBzbyB3ZSBzaW1wbHkKKyAgICAvLyBzaHJpbmsgdGhlIHJlY3RhbmdsZSBiYWNrIGRvd24gdG8g
dGhlIGRlZmF1bHQgc2l6ZSBhbmQgdGhlbiBjZW50ZXIgaXQKKyAgICAvLyBpbiB0aGUgZnVsbCB0
b2dnbGUgYnV0dG9uIHJlZ2lvbi4gVGhlIHJlYXNvbiBmb3Igbm90IHNpbXBseSBmb3JjaW5nIHRv
Z2dsZQorICAgIC8vIGJ1dHRvbnMgdG8gYmUgYSBzbWFsbGVyIHNpemUgaXMgdGhhdCB3ZSBkb24n
dCB3YW50IHRvIGJyZWFrIHNpdGUgbGF5b3V0cy4KKyAgICBnaW50IGluZGljYXRvclNpemU7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIs
ICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKKyAgICBJbnRSZWN0IHJlY3QoZnVsbFJlY3QpOworICAg
IGlmIChyZWN0LndpZHRoKCkgPiBpbmRpY2F0b3JTaXplKSB7CisgICAgICAgIHJlY3QuaW5mbGF0
ZVgoLShyZWN0LndpZHRoKCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOworICAgICAgICByZWN0LnNl
dFdpZHRoKGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3Qud2lkdGgoKSB3YXMgZXF1YWwg
dG8gaW5kaWNhdG9yU2l6ZSArIDEuCisgICAgfQorCisgICAgaWYgKHJlY3QuaGVpZ2h0KCkgPiBp
bmRpY2F0b3JTaXplKSB7CisgICAgICAgIHJlY3QuaW5mbGF0ZVkoLShyZWN0LmhlaWdodCgpIC0g
aW5kaWNhdG9yU2l6ZSkgLyAyKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQoaW5kaWNhdG9yU2l6
ZSk7IC8vIEluIGNhc2UgcmVjdC5oZWlnaHQoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6ZSAr
IDEuCisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OID8gR1RL
X1NUWUxFX0NMQVNTX0NIRUNLIDogR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKKworICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCB0
aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdI
VDsKKyAgICBpZiAodGhlbWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5kZXJPYmplY3QpKQorICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTkNPTlNJU1RFTlQ7CisgICAgZWxzZSBpZiAodGhl
bWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19BQ1RJVkU7CisgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdz
KSk7CisKKyAgICBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04pCisgICAg
ICAgIGd0a19yZW5kZXJfY2hlY2soY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgZWxzZQorICAgICAgICBndGtfcmVuZGVyX29wdGlvbihjb250ZXh0LCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGlmICh0aGVtZS0+aXNG
b2N1c2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgSW50UmVjdCBpbmRpY2F0b3JSZWN0KHJl
Y3QpOworICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7CisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNhdG9y
U3BhY2luZywgTlVMTCk7CisgICAgICAgIGluZGljYXRvclJlY3QuaW5mbGF0ZShpbmRpY2F0b3JT
cGFjaW5nKTsKKyAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGluZGljYXRvclJlY3QueCgpLCBpbmRpY2F0
b3JSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3JSZWN0LndpZHRo
KCksIGluZGljYXRvclJlY3QuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc2V0VG9nZ2xlU2l6ZShn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKSwgc3R5bGUpOworfQorCitib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9DSEVDS19CVVRUT04sIHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc2V0
VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUkFESU9fQlVUVE9OKSwgc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9SQURJT19CVVRUT04sIHJlbmRl
ck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCog
Y29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3QgYnV0dG9uUmVjdChy
ZWN0KTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQo
cmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkK
KyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBp
ZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmpl
Y3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+
KGZsYWdzKSk7CisKKyAgICBpZiAodGhlbWUtPmlzRGVmYXVsdChyZW5kZXJPYmplY3QpKSB7Cisg
ICAgICAgIEd0a0JvcmRlciogYm9yZGVyUHRyID0gMDsKKyAgICAgICAgR3RrQm9yZGVyIGJvcmRl
ciA9IHsgMSwgMSwgMSwgMSB9OworCisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LCAiZGVmYXVsdC1ib3JkZXIiLCAmYm9yZGVyUHRyLCBOVUxMKTsKKyAgICAgICAg
aWYgKGJvcmRlclB0cikgeworICAgICAgICAgICAgYm9yZGVyID0gKmJvcmRlclB0cjsKKyAgICAg
ICAgICAgIGd0a19ib3JkZXJfZnJlZShib3JkZXJQdHIpOworICAgICAgICB9CisKKyAgICAgICAg
YnV0dG9uUmVjdC5tb3ZlKGJvcmRlci5sZWZ0LCBib3JkZXIudG9wKTsKKyAgICAgICAgYnV0dG9u
UmVjdC5zZXRXaWR0aChidXR0b25SZWN0LndpZHRoKCkgLSAoYm9yZGVyLmxlZnQgKyBib3JkZXIu
cmlnaHQpKTsKKyAgICAgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQoYnV0dG9uUmVjdC5oZWlnaHQo
KSAtIChib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSkpOworCisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfREVGQVVMVCk7CisgICAg
fQorCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgp
LCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5k
ZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
cigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwg
YnV0dG9uUmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJP
YmplY3QpKSB7CisgICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgICAgIGdi
b29sZWFuIGRpc3BsYWNlRm9jdXMsIGludGVyaW9yRm9jdXM7CisgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9j
dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzcGxhY2UtZm9jdXMi
LCAmZGlzcGxhY2VGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworCisgICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7CisgICAgICAgICAgICBHdGtCb3Jk
ZXIgYm9yZGVyV2lkdGg7CisgICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVy
KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSwgJmJvcmRlcldpZHRo
KTsKKworICAgICAgICAgICAgYnV0dG9uUmVjdCA9IEludFJlY3QoYnV0dG9uUmVjdC54KCkgKyBi
b3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNQYWQsIGJ1dHRvblJlY3QueSgpICsgYm9yZGVyV2lkdGgu
dG9wICsgZm9jdXNQYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25S
ZWN0LndpZHRoKCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgubGVmdCArIGJvcmRlcldp
ZHRoLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblJlY3Qu
aGVpZ2h0KCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgudG9wICsgYm9yZGVyV2lkdGgu
Ym90dG9tKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRl
KGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CisKKyAgICAgICAgaWYgKGRpc3BsYWNlRm9jdXMgJiYg
dGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgICAgICBnaW50IGNoaWxk
RGlzcGxhY2VtZW50WDsKKyAgICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOworICAg
ICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNo
aWxkRGlzcGxhY2VtZW50WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNwbGFjZW1lbnRZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgYnV0dG9u
UmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1lbnRZKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55
KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisgICAgfQorfQor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9C
VVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHRE
aXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICByZW5kZXJCdXR0b24odGhpcywgY29udGV4dCwgcmVu
ZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVz
dG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZ2V0
Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGlu
dCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQoreworICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1
dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQorICAgIC8vIGRvbid0
IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4K
KyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfQ09NQk9fQk9YKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQp
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4
dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+
ZGlyZWN0aW9uKCkpKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsKKworICAgIGdib29s
ZWFuIGludGVyaW9yRm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFk
LCBOVUxMKTsKKyAgICBmb2N1cyA9IGludGVyaW9yRm9jdXMgPyBmb2N1c1dpZHRoICsgZm9jdXNQ
YWQgOiAwOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAg
IGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0
eWxlLT5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgInNlcGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7CisgICAg
Z2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIs
ICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFy
YXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCk7CisKKyAgICAvLyBHVEsrIGFsd2F5cyB1c2VzIGJvcmRlci5sZWZ0LCByZWdh
cmRsZXNzIG9mIHRleHQgZGlyZWN0aW9uLiBTZWUgZ3Rrc2VwZXJhdG9yLmMuCisgICAgaWYgKCF3
aWRlU2VwYXJhdG9ycykKKyAgICAgICAgc2VwYXJhdG9yV2lkdGggPSBib3JkZXIubGVmdDsKKwor
ICAgIHNlcGFyYXRvciA9IHNlcGFyYXRvcldpZHRoOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
cmVzdG9yZShjb250ZXh0KTsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFs
UGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEd0a0JvcmRlciBi
b3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2Vw
YXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lk
dGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgbGVmdCA9IGJvcmRlcldp
ZHRoLmxlZnQgKyBmb2N1c1dpZHRoOworICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KQorICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOworICAgIHJl
dHVybiBsZWZ0OworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEd0a0JvcmRlciBib3JkZXJX
aWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9y
V2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZv
Y3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5y
aWdodCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisg
ICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOworICAgIHJldHVy
biByaWdodDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRo
ID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0
aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNX
aWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVybiBib3JkZXJXaWR0aC50b3AgKyBmb2N1
c1dpZHRoOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBHdGtCb3JkZXIgYm9yZGVyV2lk
dGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldp
ZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1
c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAgcmV0dXJuIGJvcmRlcldpZHRoLmJvdHRvbSAr
IGZvY3VzV2lkdGg7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBHdGtUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rp
b24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAgLy8gUGFpbnQg
dGhlIGJ1dHRvbi4KKyAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxlQ29udGV4dCA9IGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0
aW9uKGJ1dHRvblN0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsK
KyAgICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0LCByZW5kZXJPYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7CisKKyAgICAvLyBHZXQgdGhlIGlubmVyIHJlY3RhbmdsZS4KKyAg
ICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXJQ
dHIgPSAwOworICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OworICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXJQdHIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5n
IiwgJmZvY3VzUGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAg
ICBpZiAoaW5uZXJCb3JkZXJQdHIpIHsKKyAgICAgICAgaW5uZXJCb3JkZXIgPSAqaW5uZXJCb3Jk
ZXJQdHI7CisgICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJvcmRlclB0cik7CisgICAgfQor
CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOworICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGJ1dHRvblN0eWxlQ29udGV4dCwgc3RhdGUsICZib3Jk
ZXJXaWR0aCk7CisKKyAgICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOworICAgIEludFJlY3QgaW5u
ZXJSZWN0KHJlY3QueCgpICsgaW5uZXJCb3JkZXIubGVmdCArIGJvcmRlcldpZHRoLmxlZnQgKyBm
b2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgaW5uZXJCb3JkZXIu
dG9wICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICByZWN0LndpZHRoKCkgLSBib3JkZXJXaWR0aC5sZWZ0IC0gYm9yZGVyV2lkdGgucmlnaHQgLSBp
bm5lckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIucmlnaHQgLSAoMiAqIGZvY3VzV2lkdGgpLAor
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBib3JkZXJXaWR0aC50b3AgLSBi
b3JkZXJXaWR0aC5ib3R0b20gLSBpbm5lckJvcmRlci50b3AgLSBpbm5lckJvcmRlci5ib3R0b20g
LSAoMiAqIGZvY3VzV2lkdGgpKTsKKworICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkg
eworICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKKyAgICAgICAgZ2ludCBjaGlsZERp
c3BsYWNlbWVudFk7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25T
dHlsZUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQt
ZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2Vt
ZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAg
ICBpbm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7
CisgICAgfQorICAgIGlubmVyUmVjdC5zZXRXaWR0aChtYXgoMSwgaW5uZXJSZWN0LndpZHRoKCkp
KTsKKyAgICBpbm5lclJlY3Quc2V0SGVpZ2h0KG1heCgxLCBpbm5lclJlY3QuaGVpZ2h0KCkpKTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKwor
ICAgIC8vIFBhaW50IHRoZSBhcnJvdy4KKyAgICBHdGtTdHlsZUNvbnRleHQqIGFycm93U3R5bGVD
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0FSUk9XKTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zYXZlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ciKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19CVVRUT04pOworCisgICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdy1zY2FsaW5nIiwgJmFy
cm93U2NhbGluZywgTlVMTCk7CisKKyAgICBJbnRTaXplIGFycm93U2l6ZShtaW5BcnJvd1NpemUs
IGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVy
UmVjdC5sb2NhdGlvbigpKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIp
CisgICAgICAgIGFycm93UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lkdGgoKSAtIGFycm93U2l6
ZS53aWR0aCgpLCAwKTsKKworICAgIC8vIEdUSysgYWN0dWFsbHkgZmV0Y2hlcyB0aGUgeGFsaWdu
IGFuZCB2YWxpZ24gdmFsdWVzIGZyb20gdGhlIHdpZGdldCwgYnV0IHNpbmNlIHdlCisgICAgLy8g
ZG9uJ3QgaGF2ZSBhIHdpZGdldCBoZXJlLCB3ZSBhcmUganVzdCB1c2luZyB0aGUgZGVmYXVsdCB4
YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgb2YgMC41LgorICAgIGdpbnQgZXh0ZW50ID0gc3RkOjpt
aW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6ZS5oZWlnaHQoKSkgKiBhcnJvd1NjYWxpbmc7
CisgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJvd1NpemUud2lkdGgoKSAtIGV4dGVudCkgLyAy
LCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250ZXh0LCBzdGF0ZSk7CisgICAgZ3RrX3JlbmRl
cl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0LCBHX1BJLCBhcnJvd1Bvc2l0
aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4dGVudCk7CisKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAgIC8vIFBhaW50IHRoZSBzZXBh
cmF0b3IgaWYgbmVlZGVkLgorICAgIEd0a1N0eWxlQ29udGV4dCogc2VwYXJhdG9yU3R5bGVDb250
ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgInNl
cGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7CisgICAgZ2ludCBzZXBh
cmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoc2VwYXJhdG9yU3R5
bGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0
b3JzIiwgJndpZGVTZXBhcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAod2lkZVNlcGFyYXRvcnMgJiYgIXNlcGFyYXRvcldp
ZHRoKSB7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVD
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlKTsKKyAgICBJbnRQ
b2ludCBzZXBhcmF0b3JQb3NpdGlvbihhcnJvd1Bvc2l0aW9uLngoKSwgaW5uZXJSZWN0LnkoKSk7
CisgICAgaWYgKHdpZGVTZXBhcmF0b3JzKSB7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RL
X1RFWFRfRElSX0xUUikKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLXNlcGFy
YXRvcldpZHRoLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRp
b24ubW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICAgICAgZ3RrX3JlbmRlcl9mcmFt
ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JXaWR0aCwgaW5uZXJSZWN0LmhlaWdodCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICAgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSwg
JnBhZGRpbmcpOworICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOworICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfYm9yZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUsICZib3JkZXIp
OworCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAg
ICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQgKyBib3JkZXIubGVmdCks
IDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKGFy
cm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgICAgICBjYWlyb19zYXZlKGNhaXJvQ29udGV4dCk7
CisKKyAgICAgICAgLy8gQW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0aGUgc2VwYXJhdG9yIGJsZWVk
aW5nIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgYmVjYXVzZSBvZiBzdWJwaXhl
bCBwb3NpdGlvbmluZy4KKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgc2Vw
YXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksIGJvcmRlci5sZWZ0LCBp
bm5lclJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19jbGlwKGNhaXJvQ29udGV4dCk7Cisg
ICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJh
dG9yUG9zaXRpb24ueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRp
b24ueCgpLCBpbm5lclJlY3QubWF4WSgpKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0Nv
bnRleHQpOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9y
U3R5bGVDb250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtTdHlsZUNv
bnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZ
KTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmpl
Y3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9
IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5k
ZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0
ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAo
aXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgaXNFbmFibGVkKHJlbmRlck9iamVjdCkpIHsKKyAg
ICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKKyAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBm
b2N1c1BhZDsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50
ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1s
aW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpOworICAgICAgICBpZiAoIWludGVyaW9yRm9jdXMpIHsKKyAgICAg
ICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICAgICAgZm9jdXNSZWN0Lmlu
ZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKKyAgICAgICAgICAgIGd0a19yZW5kZXJfZm9j
dXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgp
LCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nl
cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIENvbnRyb2xQYXJ0IHBhcnQpCit7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7
CisgICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KQorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Mo
Y29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOworICAgIGVsc2UgaWYgKHBhcnQg
PT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQp
CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVf
Q0xBU1NfVkVSVElDQUwpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVy
T2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgQVNTRVJUX1VOVVNFRChwYXJ0LCBw
YXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0
IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKKworICAgIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9k
aXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRl
eHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkg
fHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFKTsKKwor
ICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVy
X2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKKworICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewor
ICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7CisgICAg
ICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShm
b2N1c1dpZHRoICsgZm9jdXNQYWQpOworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lk
dGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4
dF9yZXN0b3JlKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQ29u
dHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAg
IEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0
KTsKKworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9TQ0FMRSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJT
dHlsZUNvbnRleHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsKKworICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9u
bHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBpZiAoaXNQcmVzc2Vk
KHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0a19yZW5kZXJfc2xpZGVyKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAg
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gR1RLX09SSUVOVEFUSU9OX0hPUkla
T05UQUwgOiBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOworCisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNl
KCk7CisgICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBnaW50IHNs
aWRlcldpZHRoLCBzbGlkZXJMZW5ndGg7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxl
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzbGlkZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRlckxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1
bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRl
ckxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVy
V2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKHBhcnQg
PT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRo
dW1iUGFydCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7Cit9
CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVuZGVyT2Jq
ZWN0LT5pc1Byb2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1BST0dSRVNTX0JBUik7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAg
IGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShj
b250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19QUk9HUkVT
U0JBUik7CisKKworICAgIEd0a0JvcmRlciBwYWRkaW5nOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmcGFk
ZGluZyk7CisgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QocmVjdC54KCkgKyBwYWRkaW5nLmxlZnQs
IHJlY3QueSgpICsgcGFkZGluZy50b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53
aWR0aCgpIC0gKHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSAocGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSkp
OworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1Jl
Y3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOworCisgICAgaWYgKCFwcm9ncmVzc1JlY3Qu
aXNFbXB0eSgpKQorICAgICAgICBndGtfcmVuZGVyX2FjdGl2aXR5KGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NSZWN0LngoKSwgcHJv
Z3Jlc3NSZWN0LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNzUmVjdC5oZWlnaHQo
KSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZgorCitzdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb25zdCBQYW5nb0ZvbnREZXNjcmlwdGlv
biogZm9udERlc2NyaXB0aW9uOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldChjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgImZvbnQiLCAmZm9udERlc2NyaXB0aW9uLCBO
VUxMKTsKKyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6
ZShmb250RGVzY3JpcHRpb24pOworICAgIGdpbnQgYXJyb3dTaXplID0gbWF4KFBBTkdPX1BJWEVM
Uyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUpOworCisgICAgcmV0dXJuIGFycm93
U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4uCit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CisKKyAgICBHdGtC
b3JkZXIgcGFkZGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOworCisgICAgaW50IHdp
ZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCArIHBhZGRp
bmcucmlnaHQ7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworfQorCitzdGF0aWMg
dm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUgYXJyb3dUeXBl
KQoreworICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFycm93VHlwZSA9
PSBHVEtfQVJST1dfRE9XTik7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xB
U1NfQlVUVE9OKTsKKworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X2RpcmVjdGlvbihjb250ZXh0KTsKKyAgICBndWludCBzdGF0ZSA9IHN0YXRp
Y19jYXN0PGd1aW50PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dCkpOworICAg
IGlmICghKHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUpKSB7CisgICAgICAgIGlm
ICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmICgoYXJy
b3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FS
Uk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVj
dCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpIHsKKyAgICAg
ICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBC
dXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgICAgIHx8IChhcnJv
d1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRIb3Zl
cmVkKHJlbmRlck9iamVjdCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9G
TEFHX1BSRUxJR0hUOworICAgICAgICB9CisgICAgfQorICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihzdGF0ZSkpOworCisg
ICAgLy8gUGFpbnQgYnV0dG9uLgorICAgIEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKKyAgICBn
dWludCBqdW5jdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9qdW5jdGlvbl9zaWRlcyhjb250
ZXh0KTsKKyAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkKKyAgICAgICAganVuY3Rp
b24gfD0gR1RLX0pVTkNUSU9OX0JPVFRPTTsKKyAgICBlbHNlIHsKKyAgICAgICAganVuY3Rpb24g
fD0gR1RLX0pVTkNUSU9OX1RPUDsKKyAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKDAsIHJlY3QuaGVp
Z2h0KCkgLyAyKTsKKyAgICB9CisgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQo
KSAvIDIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9qdW5jdGlvbl9zaWRlcyhjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlvblNpZGVzPihqdW5jdGlvbikpOworCisgICAgZ3RrX3Jl
bmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0Lndp
ZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0
LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWln
aHQoKSk7CisKKyAgICAvLyBQYWludCBhcnJvdyBjZW50ZXJlZCBpbnNpZGUgYnV0dG9uLgorICAg
IC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBndGtzcGluYnV0dG9uLmMgY29kZS4KKyAgICBJbnRS
ZWN0IGFycm93UmVjdDsKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChhcnJvd1R5cGUgPT0g
R1RLX0FSUk9XX1VQKSB7CisgICAgICAgIGFuZ2xlID0gMDsKKyAgICAgICAgYXJyb3dSZWN0LnNl
dFkocmVjdC55KCkpOworICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkg
LyAyIC0gMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5nbGUgPSBHX1BJOworICAgICAgICBh
cnJvd1JlY3Quc2V0WShyZWN0LnkoKSArIGJ1dHRvblJlY3QueSgpKTsKKyAgICAgICAgYXJyb3dS
ZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gYXJyb3dSZWN0LnkoKSAtIDIpOworICAgIH0K
KyAgICBhcnJvd1JlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0gMyk7CisgICAgaWYgKGRpcmVj
dGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0Lngo
KSArIDEpOworICAgIGVsc2UKKyAgICAgICAgYXJyb3dSZWN0LnNldFgocmVjdC54KCkgKyAyKTsK
KworICAgIGdpbnQgd2lkdGggPSBhcnJvd1JlY3Qud2lkdGgoKSAvIDI7CisgICAgd2lkdGggLT0g
d2lkdGggJSAyIC0gMTsgLy8gRm9yY2Ugb2RkLgorICAgIGdpbnQgaGVpZ2h0ID0gKHdpZHRoICsg
MSkgLyAyOworCisgICAgYXJyb3dSZWN0Lm1vdmUoKGFycm93UmVjdC53aWR0aCgpIC0gd2lkdGgp
IC8gMiwgKGFycm93UmVjdC5oZWlnaHQoKSAtIGhlaWdodCkgLyAyKTsKKyAgICBndGtfcmVuZGVy
X2Fycm93KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgYW5nbGUsIGFycm93UmVjdC54KCksIGFycm93UmVjdC55KCksIHdpZHRoKTsKKworICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBHdGtT
dHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJTl9CVVRU
T04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBHdGtUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKKworICAg
IGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlz
UmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFU
RV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfRU5UUlkpOworCisgICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29u
dGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19VUCk7CisgICAg
cGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludElu
Zm8sIHJlY3QsIEdUS19BUlJPV19ET1dOKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVm
PiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIq
IGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sK
KyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlw
ZSk7CisgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19zdHlsZV9jb250ZXh0X2xvb2t1cF9p
Y29uX3NldChjb250ZXh0LCBpY29uTmFtZSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KGNvbnRleHQpOworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmIChzdGF0ZSA9PSBHVEtf
U1RBVEVfUFJFTElHSFQpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hU
OworICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJVElWRSkKKyAgICAgICAg
ZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3Mp
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOworICAgIEdka1BpeGJ1ZiogaWNvbiA9
IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbl9waXhidWYoaWNvblNldCwgY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9y
ZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGFkb3B0R1JlZihpY29uKTsKK30KKworR1Jl
ZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSB3
aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyICpmYWxs
YmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25T
aXplKQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3
aWRnZXRUeXBlKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAg
ICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKHN0YXRlID09IEdUS19TVEFURV9QUkVMSUdIVCkK
KyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgZWxzZSBpZiAo
c3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19JTlNFTlNJVElWRTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVj
dGlvbj4oZGlyZWN0aW9uKSk7CisgICAgR3RrSWNvbkluZm8qIGluZm8gPSBndGtfaWNvbl90aGVt
ZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBzeW1ib2xpY0ljb25O
YW1lLCBpY29uU2l6ZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3RrSWNvbkxvb2t1cEZsYWdzPihH
VEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHIHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NJWkUpKTsK
KyAgICBHZGtQaXhidWYqIGljb24gPSAwOworICAgIGlmIChpbmZvKSB7CisgICAgICAgIGljb24g
PSBndGtfaWNvbl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaW5mbywgY29udGV4dCwg
MCwgMCk7CisgICAgICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZvKTsKKyAgICB9CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgaWYgKCFpY29uKQorICAg
ICAgICByZXR1cm4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFj
a1N0b2NrSWNvbk5hbWUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplKTsKKworICAgIHJldHVy
biBhZG9wdEdSZWYoaWNvbik7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtS
R0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0
U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZn
ZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRl
clRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtf
U1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29s
b3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRS
WSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4g
Z2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JB
Q29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Cisg
ICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JHQkEg
Z2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19TRUxF
Q1RFRCwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVf
VklFVyksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJu
IGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3Ip
OworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpp
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdk
a1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAm
Z2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5k
ZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgR2Rr
UkdCQSBnZGtSR0JBQ29sb3I7CisKKyAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKKyAgICBjYXNl
IENTU1ZhbHVlQnV0dG9udGV4dDoKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZs
YWdzPigwKSwgJmdka1JHQkFDb2xvcik7CisgICAgICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cisg
ICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oMCksICZnZGtSR0JBQ29sb3IpOworICAgICAgICByZXR1cm4gZ2RrUkdCQUNv
bG9yOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29s
b3IoY3NzVmFsdWVJZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvUnVuTG9vcEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5MGYzNWNhNjZkMjIwYjQwZDRmNjNmN2Q5ZjZjOTg0Mjc1Nzc3MWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCkBAIC0wLDAg
KzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNp
bmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1J1bkxvb3A6OlJ1bkxvb3AoKQoreworICAgIC8vIGdfbWFpbl9jb250
ZXh0X2RlZmF1bHQoKSBkb2Vzbid0IGFkZCBhbiBleHRyYSByZWZlcmVuY2UuCisgICAgbV9ydW5M
b29wQ29udGV4dCA9IGlzTWFpblRocmVhZCgpID8gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpIDog
YWRvcHRHUmVmKGdfbWFpbl9jb250ZXh0X25ldygpKTsKKyAgICBBU1NFUlQobV9ydW5Mb29wQ29u
dGV4dCk7CisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYo
Z19tYWluX2xvb3BfbmV3KG1fcnVuTG9vcENvbnRleHQuZ2V0KCksIEZBTFNFKSk7CisgICAgQVNT
RVJUKGlubmVybW9zdExvb3ApOworICAgIG1fcnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoaW5uZXJt
b3N0TG9vcCk7Cit9CisKK1J1bkxvb3A6On5SdW5Mb29wKCkKK3sKKyAgICBmb3IgKGludCBpID0g
bV9ydW5Mb29wTWFpbkxvb3BzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlm
ICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX3J1bkxvb3BNYWluTG9vcHNbaV0uZ2V0KCkpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29w
TWFpbkxvb3BzW2ldLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUnVuTG9vcDo6cnVuKCkKK3sK
KyAgICBSdW5Mb29wKiBtYWluUnVuTG9vcCA9IFJ1bkxvb3A6OmN1cnJlbnQoKTsKKyAgICBHTWFp
bkxvb3AqIGlubmVybW9zdExvb3AgPSBtYWluUnVuTG9vcC0+aW5uZXJtb3N0TG9vcCgpOworICAg
IGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhpbm5lcm1vc3RMb29wKSkgeworICAgICAgICBn
X21haW5fbG9vcF9ydW4oaW5uZXJtb3N0TG9vcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBDcmVhdGUgYW5kIHJ1biBhIG5lc3RlZCBsb29wIGlmIHRoZSBpbm5lcm1vc3Qgb25l
IHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisgICAgR01haW5Mb29wKiBuZXN0ZWRNYWluTG9vcCA9IGdf
bWFpbl9sb29wX25ldygwLCBGQUxTRSk7CisgICAgbWFpblJ1bkxvb3AtPnB1c2hOZXN0ZWRNYWlu
TG9vcChuZXN0ZWRNYWluTG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKG5lc3RlZE1haW5Mb29w
KTsKKyAgICBtYWluUnVuTG9vcC0+cG9wTmVzdGVkTWFpbkxvb3AoKTsKK30KKworR01haW5Mb29w
KiBSdW5Mb29wOjppbm5lcm1vc3RMb29wKCkKK3sKKyAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4g
bG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxv
b3BzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fcnVuTG9vcE1haW5Mb29wc1swXS5nZXQoKTsK
K30KKwordm9pZCBSdW5Mb29wOjpwdXNoTmVzdGVkTWFpbkxvb3AoR01haW5Mb29wKiBuZXN0ZWRM
b29wKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUg
dGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKKyAgICBt
X3J1bkxvb3BNYWluTG9vcHMuYXBwZW5kKGFkb3B0R1JlZihuZXN0ZWRMb29wKSk7Cit9CisKK3Zv
aWQgUnVuTG9vcDo6cG9wTmVzdGVkTWFpbkxvb3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3Qg
bWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BN
YWluTG9vcHMuaXNFbXB0eSgpKTsKKyAgICBtX3J1bkxvb3BNYWluTG9vcHMucmVtb3ZlTGFzdCgp
OworfQorCit2b2lkIFJ1bkxvb3A6OnN0b3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFp
biBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWlu
TG9vcHMuaXNFbXB0eSgpKTsKKyAgICBHUmVmUHRyPEdNYWluTG9vcD4gbGFzdE1haW5Mb29wID0g
bV9ydW5Mb29wTWFpbkxvb3BzLmxhc3QoKTsKKyAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmlu
ZyhsYXN0TWFpbkxvb3AuZ2V0KCkpKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxhc3RNYWlu
TG9vcC5nZXQoKSk7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OnF1ZXVlV29yayhSdW5Mb29wKiBy
dW5Mb29wKQoreworICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7CisgICAgcmV0dXJuIEZBTFNF
OworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBz
b3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgZ19zb3VyY2Vfc2V0
X3ByaW9yaXR5KHNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2soc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PigmUnVuTG9vcDo6cXVldWVXb3JrKSwgdGhpcywgMCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKHNv
dXJjZS5nZXQoKSwgbV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7CisKKyAgICBnX21haW5fY29udGV4
dF93YWtldXAobV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFz
ZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCisgICAgOiBtX3J1bkxvb3AocnVuTG9vcCkK
KyAgICAsIG1fdGltZXJTb3VyY2UoMCkKK3sKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjp+VGlt
ZXJCYXNlKCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpj
bGVhclRpbWVyU291cmNlKCkKK3sKKyAgICBtX3RpbWVyU291cmNlID0gMDsKK30KKworZ2Jvb2xl
YW4gUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJC
YXNlKiB0aW1lcikKK3sKKyAgICBHU291cmNlKiBjdXJyZW50VGltZXJTb3VyY2UgPSB0aW1lci0+
bV90aW1lclNvdXJjZS5nZXQoKTsKKyAgICBib29sIGlzUmVwZWF0aW5nID0gdGltZXItPmlzUmVw
ZWF0aW5nKCk7CisgICAgLy8gVGhpcyBjYW4gY2hhbmdlIHRoZSB0aW1lclNvdXJjZSBieSBzdGFy
dGluZyBhIG5ldyB0aW1lciB3aXRoaW4gdGhlIGNhbGxiYWNrLgorICAgIHRpbWVyLT5maXJlZCgp
OworICAgIGlmICghaXNSZXBlYXRpbmcgJiYgY3VycmVudFRpbWVyU291cmNlID09IHRpbWVyLT5t
X3RpbWVyU291cmNlLmdldCgpKQorICAgICAgICB0aW1lci0+Y2xlYXJUaW1lclNvdXJjZSgpOwor
ICAgIHJldHVybiBpc1JlcGVhdGluZzsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0
YXJ0KGRvdWJsZSBmaXJlSW50ZXJ2YWwsIGJvb2wgcmVwZWF0KQoreworICAgIGlmIChtX3RpbWVy
U291cmNlKQorICAgICAgICBzdG9wKCk7CisKKyAgICBtX3RpbWVyU291cmNlID0gYWRvcHRHUmVm
KGdfdGltZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihmaXJlSW50ZXJ2YWwgKiAx
MDAwKSkpOworICAgIG1faXNSZXBlYXRpbmcgPSByZXBlYXQ7CisgICAgZ19zb3VyY2Vfc2V0X2Nh
bGxiYWNrKG1fdGltZXJTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KCZSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDApOworICAg
IGdfc291cmNlX2F0dGFjaChtX3RpbWVyU291cmNlLmdldCgpLCBtX3J1bkxvb3AtPm1fcnVuTG9v
cENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCit7
CisgICAgaWYgKCFtX3RpbWVyU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NvdXJj
ZV9kZXN0cm95KG1fdGltZXJTb3VyY2UuZ2V0KCkpOworICAgIGNsZWFyVGltZXJTb3VyY2UoKTsK
K30KKworYm9vbCBSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90aW1lclNvdXJjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIwNWE1N2I3ZGUyOTRiNjNj
ODZmZDUyZTc0OGYwMGY5MTIzMjA4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBDb2xsYWJvcmEgTHRkLgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRl
ICJNYWluRnJhbWVTY3JvbGxiYXJHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sKKyAgICAvLyBJbnRlcmlvciBmcmFtZSBT
Y3JvbGxWaWV3cyBuZXZlciBoYXZlIE1haW5GcmFtZVNjcm9sbGJhcnMuCisgICAgaWYgKHNjcm9s
bFZpZXctPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBk
b24ndCBoYXZlIGEgaG9zdCB3aW5kb3cgb3IgYSBjb250YWluaW5nIHdpZGdldCAoYWxhIFdlYktp
dDIpLgorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBzY3JvbGxWaWV3LT5ob3N0V2luZG93
KCk7CisgICAgaWYgKCFob3N0V2luZG93IHx8ICFob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2Jvb2xlYW4gc2VsZlNjcm9sbGlu
ZyA9IEZBTFNFOworICAgIGdfb2JqZWN0X2dldChob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSwgInNlbGYtc2Nyb2xsaW5nIiwgJnNlbGZTY3JvbGxpbmcsIE5VTEwpOworICAgIHJldHVy
biAhc2VsZlNjcm9sbGluZzsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbFZpZXc6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAg
ICBpZiAoc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMpKQorICAgICAgICByZXR1
cm4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVhdGUodGhpcywgb3JpZW50YXRpb24pOworICAg
IHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlv
biwgUmVndWxhclNjcm9sbGJhcik7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNv
bnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJ
bmNsdXNpb24pIGNvbnN0Cit7CisgICAgYm9vbCBpbmNsdWRlU2Nyb2xsYmFycyA9IHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFyczsKKworICAgIC8vIElmIHdlIGFyZSBhbiBp
bnRlcmlvciBmcmFtZSBzY3JvbGxiYXIgb3IgYXJlIGluIHNvbWUgc29ydCBvZiB0cmFuc2l0aW9u
CisgICAgLy8gc3RhdGUsIGp1c3QgY2FsY3VsYXRlIG91ciBzaXplIGJhc2VkIG9uIHdoYXQgdGhl
IEdUSysgdGhlbWUgc2F5cyB0aGUKKyAgICAvLyBzY3JvbGxiYXIgd2lkdGggc2hvdWxkIGJlLgor
ICAgIGlmICghc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMpKSB7CisgICAgICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xs
T2Zmc2V0LmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShtYXgoMCwg
d2lkdGgoKSAtICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IHZl
cnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4KDAsIGhlaWdodCgpIC0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaW5j
bHVkZVNjcm9sbGJhcnMgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDogMCkpKSk7
CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCwgc28gd2UgYXJlIHRoZSBt
YWluIGZyYW1lIGFuZCB0aHVzIGhhdmUKKyAgICAvLyBhIHBhcmVudCB3aWRnZXQgd2hpY2ggd2Ug
Y2FuIHVzZSB0byBtZWFzdXJlIHRoZSB2aXNpYmxlIHJlZ2lvbi4KKyAgICBHdGtXaWRnZXQqIG1l
YXN1cmVkV2lkZ2V0ID0gaG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBH
dGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtZWFzdXJlZFdp
ZGdldCk7CisKKyAgICAvLyBXZSBtYXkgbm90IGJlIGluIGEgd2lkZ2V0IHRoYXQgZGlzcGxheXMg
c2Nyb2xsYmFycywgYnV0IHdlIG1heQorICAgIC8vIGhhdmUgb3RoZXIga2luZHMgb2YgZGVjb3Jh
dGlvbiB0aGF0IG1ha2UgdXMgc21hbGxlci4KKyAgICBpZiAocGFyZW50V2lkZ2V0ICYmIGluY2x1
ZGVTY3JvbGxiYXJzKQorICAgICAgICBtZWFzdXJlZFdpZGdldCA9IHBhcmVudFdpZGdldDsKKwor
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0
aW9uKG1lYXN1cmVkV2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgcmV0dXJuIEludFJlY3QoSW50
UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAor
ICAgICAgICAgICAgICAgICAgIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5o
ZWlnaHQpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxi
YXJNb2RlIGhvcml6b250YWxNb2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwgYm9vbCBo
b3Jpem9udGFsTG9jaywgYm9vbCB2ZXJ0aWNhbExvY2spCit7CisgICAgLy8gRklYTUU6IFJlc3Ry
dWN0dXJlIHRoZSBTY3JvbGxWaWV3IGFic3RyYWN0aW9uIHNvIHRoYXQgd2UgZG8gbm90IGhhdmUg
dG8KKyAgICAvLyBjb3B5IHRoaXMgdmVyYmF0aW0gZnJvbSBTY3JvbGxWaWV3LmNwcC4gVW50aWwg
dGhlbiwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzCisgICAgLy8gaXMga2VwdCBpbiBzeW5jLgor
ICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKworICAgIGlmIChob3Jpem9udGFsTW9kZSAh
PSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpICYmICFtX2hvcml6b250YWxTY3JvbGxiYXJMb2Nr
KSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBob3Jpem9udGFsTW9kZTsK
KyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgIH0KKworICAgIGlmICh2ZXJ0aWNhbE1v
ZGUgIT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKCkgJiYgIW1fdmVydGljYWxTY3JvbGxiYXJMb2Nr
KSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlID0gdmVydGljYWxNb2RlOworICAg
ICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGhvcml6b250YWxMb2Nr
KQorICAgICAgICBzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTG9jaygpOworCisgICAgaWYgKHZlcnRp
Y2FsTG9jaykKKyAgICAgICAgc2V0VmVydGljYWxTY3JvbGxiYXJMb2NrKCk7CisKKyAgICBpZiAo
bmVlZHNVcGRhdGUpCisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwor
CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBvcnQgcG9saWN5IGNoYW5nZXMgb24gU2Nyb2xs
VmlldydzIHVubGVzcyB0aGlzCisgICAgLy8gb25lIGhhcyBhbiBhZGp1c3RtZW50IGF0dGFjaGVk
IGFuZCBpdCBpcyBhIG1haW4gZnJhbWUuCisgICAgaWYgKHBhcmVudCgpIHx8ICFpc0ZyYW1lVmll
dygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3IgZnJhbWVzIHRoYXQgZG8gaGF2ZSBh
ZGp1c3RtZW50cyBhdHRhY2hlZCwgd2Ugd2FudCB0byByZXBvcnQKKyAgICAvLyBwb2xpY3kgY2hh
bmdlcywgc28gdGhhdCB0aGV5IG1heSBiZSBhcHBsaWVkIHRvIHRoZSB3aWRnZXQgdG8KKyAgICAv
LyB3aGljaCB0aGUgV2ViVmlldydzIGNvbnRhaW5lciAoZS5nLiBHdGtTY3JvbGxlZFdpbmRvdyku
CisgICAgaWYgKGhvc3RXaW5kb3coKSkKKyAgICAgICAgaG9zdFdpbmRvdygpLT5zY3JvbGxiYXJz
TW9kZURpZENoYW5nZSgpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJU
aGVtZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlM2ZkNzZmN2ZmYzUyMzBmYzg0N2ZmOWZlY2FmNDNk
YzQ2ZmEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hTZXQ8
U2Nyb2xsYmFyVGhlbWVDbGllbnQqPiogZ1Njcm9sbGJhcnM7CisKK1Njcm9sbGJhclRoZW1lKiBT
Y3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVt
ZUd0ayB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCitTY3JvbGxiYXJUaGVtZUd0azo6
flNjcm9sbGJhclRoZW1lR3RrKCkKK3sKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cmVn
aXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBp
ZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICBnU2Nyb2xsYmFycyA9IG5ldyBIYXNoU2V0PFNjcm9s
bGJhclRoZW1lQ2xpZW50Kj47CisgICAgZ1Njcm9sbGJhcnMtPmFkZChzY3JvbGxiYXIpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgZ1Njcm9sbGJhcnMtPnJlbW92ZShzY3JvbGxi
YXIpOworICAgIGlmIChnU2Nyb2xsYmFycy0+aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSBn
U2Nyb2xsYmFyczsKKyAgICAgICAgZ1Njcm9sbGJhcnMgPSAwOworICAgIH0KK30KKwordm9pZCBT
Y3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCkKK3sKKyAg
ICBpZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBVcGRhdGUgdGhl
IHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlvciBmcmFtZSBzY3JvbGxiYXIgd2lkZ2V0LiBUaGUK
KyAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGxiYXIgdGhlbSBjb2RlIGlzbid0IHll
dCBzbWFydCBlbm91Z2ggdG8gZ2V0CisgICAgLy8gdGhpcyBpbmZvcm1hdGlvbiB3aGVuIGl0IHBh
aW50cy4KKyAgICBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZCA9
IGdTY3JvbGxiYXJzLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGll
bnQqPjo6aXRlcmF0b3IgaXQgPSBnU2Nyb2xsYmFycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIgPSAoKml0KTsKKwor
ICAgICAgICAvLyBUb3AtbGV2ZWwgc2Nyb2xsYmFyIGkuZS4gc2Nyb2xsYmFycyB3aG8gaGF2ZSBh
IHBhcmVudCBTY3JvbGxWaWV3CisgICAgICAgIC8vIHdpdGggbm8gcGFyZW50IGFyZSBuYXRpdmUs
IGFuZCB0aHVzIGRvIG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQuCisgICAgICAgIGlmICghc2Nyb2xs
YmFyLT5wYXJlbnQoKSB8fCAhc2Nyb2xsYmFyLT5wYXJlbnQoKS0+cGFyZW50KCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVz
cyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXIt
PnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIHNjcm9sbGJhci0+cGFyZW50KCktPmhlaWdodCgpIC0g
dGhpY2tuZXNzLCBzY3JvbGxiYXItPndpZHRoKCksIHRoaWNrbmVzcykpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KHNjcm9sbGJhci0+
cGFyZW50KCktPndpZHRoKCkgLSB0aGlja25lc3MsIDAsIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSkpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1bWIo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBp
cyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0aW1pemF0aW9uIHRvIHNlZSBpZgorICAg
IC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tpcHBlZC4gIFdlIGRvbid0IGhhdmUgdG8g
YmUgZXhhY3QgaGVyZS4KKyAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSA+IDA7Cit9
CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKK3sKKyAgICBp
ZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNCYWNrQnV0dG9uRW5kUGFydCkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3Rh
cnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpCisgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisKKyAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgpICsgbV90cm91Z2hCb3JkZXJXaWR0
aDsKKyAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0aDsKKyAg
ICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CisgICAgaWYgKHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIEJhY2tCdXR0b25FbmRQYXJ0IChhbHRl
cm5hdGUgYnV0dG9uKQorICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBz
Y3JvbGxiYXItPndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIgKiBzaXplLndpZHRo
KCkpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gVmVydGljYWxT
Y3JvbGxiYXIgYWx0ZXJuYXRlIGJ1dHRvbgorICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJh
ci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAq
IHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitJbnRS
ZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCit7CisgICAgaWYgKHBh
cnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChwYXJ0ID09IEZvcndhcmRC
dXR0b25FbmRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0KQorICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworCisgICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIp
OworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgeworICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3JkZXJXaWR0
aDsKKyAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCisgICAgICAgICAg
ICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgoKSAtIHNp
emUud2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHksIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICAgICAgLy8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRl
IGJ1dHRvbikKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBtX3Ryb3Vn
aEJvcmRlcldpZHRoICsgc2l6ZS53aWR0aCgpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworICAgIH0KKworICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFyCisgICAgaW50IHggPSBzY3Jv
bGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7CisgICAgaWYgKHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgp
ICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCkgLSBtX3Ryb3VnaEJvcmRlcldp
ZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8gRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKKyAgICByZXR1cm4gSW50UmVjdCh4LCBzY3Jv
bGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGggKyBzaXplLmhlaWdodCgpLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0
cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgYm9vbCkKK3sKKyAgICAv
LyBUaGUgcGFkZGluZyBhbG9uZyB0aGUgdGh1bWIgbW92ZW1lbnQgYXhpcyBpbmNsdWRlcyB0aGUg
dHJvdWdoIGJvcmRlcgorICAgIC8vIHBsdXMgdGhlIHNpemUgb2Ygc3RlcHBlciBzcGFjaW5nICh0
aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlcHBlciBhbmQKKyAgICAvLyB0aGUgcGxhY2Ugd2hlcmUg
dGhlIHRodW1iIHN0b3BzKS4gVGhlcmUgaXMgb2Z0ZW4gbm8gc3RlcHBlciBzcGFjaW5nLgorICAg
IGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV90cm91Z2hCb3JkZXJXaWR0aCArIG1fc3RlcHBl
clNwYWNpbmc7CisKKyAgICAvLyBUaGUgZmF0bmVzcyBvZiB0aGUgc2Nyb2xsYmFyIG9uIHRoZSBu
b24tbW92ZW1lbnQgYXhpcy4KKyAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNz
KHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisKKyAgICBpbnQgc3RhcnRCdXR0b25zT2Zmc2V0
ID0gMDsKKyAgICBpbnQgYnV0dG9uc1dpZHRoID0gMDsKKyAgICBpZiAobV9oYXNGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0KSB7CisgICAgICAgIHN0YXJ0QnV0dG9uc09mZnNldCArPSBtX3N0ZXBwZXJT
aXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICB9CisgICAg
aWYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkgeworICAgICAgICBzdGFydEJ1dHRvbnNPZmZz
ZXQgKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNp
emU7CisgICAgfQorICAgIGlmIChtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KQorICAgICAgICBidXR0
b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICBpZiAobV9oYXNGb3J3YXJkQnV0dG9uRW5k
UGFydCkKKyAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7CisKKyAgICBpZiAo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAg
ICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxlciB0aGFuIHRoZSBuYXR1cmFs
IHNpemUgb2YgdGhlCisgICAgICAgIC8vIHR3byBidXR0b25zLCB0aGUgdHJhY2sgZGlzYXBwZWFy
cy4KKyAgICAgICAgaWYgKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiB0aGlja25lc3MpCisgICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxi
YXItPngoKSArIG1vdmVtZW50QXhpc1BhZGRpbmcgKyBzdGFydEJ1dHRvbnNPZmZzZXQsIHNjcm9s
bGJhci0+eSgpLAorICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgLSAo
MiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoLCB0aGlja25lc3MpOworICAg
IH0KKworICAgIGlmIChzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAqIHRoaWNrbmVzcykKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwg
c2Nyb2xsYmFyLT55KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtICgy
ICogbW92ZW1lbnRBeGlzUGFkZGluZykgLSBidXR0b25zV2lkdGgpOworfQorCitJbnRSZWN0IFNj
cm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCkKK3sKKyAgICBJbnRSZWN0
IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMoc2Nyb2xsYmFyLCB1
bmNvbnN0cmFpbmVkVHJhY2tSZWN0KTsKKyAgICBpbnQgdGh1bWJQb3MgPSB0aHVtYlBvc2l0aW9u
KHNjcm9sbGJhcik7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50UmVjdCh0cmFja1JlY3QueCgpICsgdGh1
bWJQb3MsIHRyYWNrUmVjdC55KCkgKyAodHJhY2tSZWN0LmhlaWdodCgpIC0gbV90aHVtYkZhdG5l
c3MpIC8gMiwgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSwgbV90aHVtYkZhdG5lc3MpOyAKKworICAg
IC8vIFZlcnRpY2FsU2Nyb2xsYmFyCisgICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0LngoKSAr
ICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRyYWNrUmVjdC55KCkg
KyB0aHVtYlBvcywgbV90aHVtYkZhdG5lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOworfQor
Citib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSB0aGUgU2Nyb2xsYmFy
Q29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0CisgICAgU2Nyb2xsYmFyQ29u
dHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7CisKKyAgICBJbnRSZWN0IGJhY2tCdXR0
b25TdGFydFBhaW50UmVjdDsKKyAgICBJbnRSZWN0IGJhY2tCdXR0b25FbmRQYWludFJlY3Q7Cisg
ICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3Q7CisgICAgSW50UmVjdCBmb3J3
YXJkQnV0dG9uRW5kUGFpbnRSZWN0OworICAgIGlmIChoYXNCdXR0b25zKHNjcm9sbGJhcikpIHsK
KyAgICAgICAgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xs
YmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3Qu
aW50ZXJzZWN0cyhiYWNrQnV0dG9uU3RhcnRQYWludFJlY3QpKQorICAgICAgICAgICAgc2Nyb2xs
TWFzayB8PSBCYWNrQnV0dG9uU3RhcnRQYXJ0OworICAgICAgICBiYWNrQnV0dG9uRW5kUGFpbnRS
ZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCwgdHJ1ZSk7
CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoYmFja0J1dHRvbkVuZFBhaW50UmVj
dCkpCisgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJhY2tCdXR0b25FbmRQYXJ0OworICAgICAg
ICBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxi
YXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQsIHRydWUpOworICAgICAgICBpZiAoZGFtYWdlUmVj
dC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCkpCisgICAgICAgICAgICBz
Y3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25TdGFydFBhcnQ7CisgICAgICAgIGZvcndhcmRCdXR0
b25FbmRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0
b25FbmRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhmb3J3
YXJkQnV0dG9uRW5kUGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQ7CisgICAgfQorCisgICAgSW50UmVjdCB0cmFja1BhaW50UmVjdCA9IHRy
YWNrUmVjdChzY3JvbGxiYXIsIHRydWUpOworICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMo
dHJhY2tQYWludFJlY3QpKQorICAgICAgICBzY3JvbGxNYXNrIHw9IFRyYWNrQkdQYXJ0OworCisg
ICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycyAmJiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25T
dGFydFBhcnQKKyAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5kUGFydAor
ICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25TdGFydFBhcnQKKyAgICAg
ICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkpCisgICAgICAgIHNj
cm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7CisKKyAgICBib29sIHRodW1iUHJlc2VudCA9IGhhc1Ro
dW1iKHNjcm9sbGJhcik7CisgICAgSW50UmVjdCBjdXJyZW50VGh1bWJSZWN0OworICAgIGlmICh0
aHVtYlByZXNlbnQpIHsKKyAgICAgICAgSW50UmVjdCB0cmFjayA9IHRyYWNrUmVjdChzY3JvbGxi
YXIsIGZhbHNlKTsKKyAgICAgICAgY3VycmVudFRodW1iUmVjdCA9IHRodW1iUmVjdChzY3JvbGxi
YXIsIHRyYWNrKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhjdXJyZW50VGh1
bWJSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gVGh1bWJQYXJ0OworICAgIH0KKwor
ICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxCdXR0b25zID0gQmFja0J1dHRvblN0YXJ0
UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8IEZvcndhcmRCdXR0b25FbmRQYXJ0
OworICAgIGlmIChzY3JvbGxNYXNrICYgVHJhY2tCR1BhcnQgfHwgc2Nyb2xsTWFzayAmIFRodW1i
UGFydCB8fCBzY3JvbGxNYXNrICYgYWxsQnV0dG9ucykKKyAgICAgICAgcGFpbnRTY3JvbGxiYXJC
YWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyKTsKKyAgICAgICAgcGFpbnRUcmFj
a0JhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsK
KworICAgIC8vIFBhaW50IHRoZSBiYWNrIGFuZCBmb3J3YXJkIGJ1dHRvbnMuCisgICAgaWYgKHNj
cm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICBwYWludEJ1dHRvbihncmFw
aGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0LCBCYWNrQnV0
dG9uU3RhcnRQYXJ0KTsKKyAgICBpZiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25FbmRQYXJ0KQor
ICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRv
bkVuZFBhaW50UmVjdCwgQmFja0J1dHRvbkVuZFBhcnQpOworICAgIGlmIChzY3JvbGxNYXNrICYg
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250
ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCwgRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCk7CisgICAgaWYgKHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkK
KyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRC
dXR0b25FbmRQYWludFJlY3QsIEZvcndhcmRCdXR0b25FbmRQYXJ0KTsKKworICAgIC8vIFBhaW50
IHRoZSB0aHVtYi4KKyAgICBpZiAoc2Nyb2xsTWFzayAmIFRodW1iUGFydCkKKyAgICAgICAgcGFp
bnRUaHVtYihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgY3VycmVudFRodW1iUmVjdCk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6c2hvdWxkQ2Vu
dGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgcmV0dXJuIChldmVudC5zaGlmdEtleSgpICYmIGV2ZW50LmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHx8IChldmVudC5idXR0b24oKSA9PSBNaWRkbGVCdXR0b24pOwor
fQorCitpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJD
b250cm9sU2l6ZSkKK3sKKyAgICByZXR1cm4gbV90aHVtYkZhdG5lc3MgKyAobV90cm91Z2hCb3Jk
ZXJXaWR0aCAqIDIpOworfQorCitJbnRTaXplIFNjcm9sbGJhclRoZW1lR3RrOjpidXR0b25TaXpl
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYgKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFNp
emUobV90aHVtYkZhdG5lc3MsIG1fc3RlcHBlclNpemUpOworCisgICAgLy8gSG9yaXpvbnRhbFNj
cm9sbGJhcgorICAgIHJldHVybiBJbnRTaXplKG1fc3RlcHBlclNpemUsIG1fdGh1bWJGYXRuZXNz
KTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lR3RrOjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gbV9taW5UaHVtYkxlbmd0
aDsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRo
ZW1lR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTczZGYyODU1MDFiNTgyNmRjMDU5YjgzYmZjM2Q5YTQxNzBkNGJhMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaApAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVHdGtfaAorI2RlZmluZSBTY3JvbGxiYXJUaGVtZUd0a19o
CisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVHdGsgOiBw
dWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworcHVibGljOgorICAgIFNjcm9sbGJhclRo
ZW1lR3RrKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVHdGsoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAg
IHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNj
cm9sbGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVj
dChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1
YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sKTsKKyAgICBJ
bnRSZWN0IHRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmIHVu
Y29uc3RyYWluZWRUcmFja1JlY3QpOworICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2
b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJU
aGVtZUNsaWVudCopOworICAgIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBw
YWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQq
LCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0KTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbGJh
clRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgdmlydHVhbCBJbnRTaXplIGJ1
dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVt
VGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKworICAgIC8vIFRPRE86IFRoZXNl
IGFyZSB0aGUgZGVmYXVsdCBHVEsrIHZhbHVlcy4gQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgcHVs
bCB0aGVzZSBmcm9tIHRoZSB0aGVtZSBpdHNlbGYuCisgICAgdmlydHVhbCBkb3VibGUgaW5pdGlh
bEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4yMDsgfQorICAgIHZpcnR1YWwgZG91
YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4wMjsgfQorICAgIHZvaWQgdXBk
YXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlj
a25lc3MoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7
CisKK3Byb3RlY3RlZDoKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtTdHlsZUNv
bnRleHQqIG1fY29udGV4dDsKKyNlbmRpZgorICAgIGludCBtX3RodW1iRmF0bmVzczsKKyAgICBp
bnQgbV90cm91Z2hCb3JkZXJXaWR0aDsKKyAgICBpbnQgbV9zdGVwcGVyU2l6ZTsKKyAgICBpbnQg
bV9zdGVwcGVyU3BhY2luZzsKKyAgICBpbnQgbV9taW5UaHVtYkxlbmd0aDsKKyAgICBnYm9vbGVh
biBtX3Ryb3VnaFVuZGVyU3RlcHBlcnM7CisgICAgZ2Jvb2xlYW4gbV9oYXNGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0OworICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7CisgICAg
Z2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0OworICAgIGdib29sZWFuIG1faGFzQmFj
a0J1dHRvbkVuZFBhcnQ7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGsyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjZiYjhhMWQyZjcxYWE4NjRlYTU3ZWQz
MDNmMTM2MDcyYzFjNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9T
Y3JvbGxiYXJUaGVtZUd0azIuY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKwor
I2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyB2b2lkIGd0a1N0eWxlU2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBw
cmV2aW91cywgU2Nyb2xsYmFyVGhlbWVHdGsqIHNjcm9sbGJhclRoZW1lKQoreworICAgIHNjcm9s
bGJhclRoZW1lLT51cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKK30KKworU2Nyb2xsYmFyVGhlbWVH
dGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKK3sKKyAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrSFNjcm9sbGJhcigpLAorICAgICAgICAg
InN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoaXMpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQoreworICAg
IEd0a1dpZGdldCogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtIU2Nyb2xsYmFyKCk7CisgICAgZ3Rr
X3dpZGdldF9zdHlsZV9nZXQoc2Nyb2xsYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICJz
bGlkZXJfd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
InRyb3VnaF9ib3JkZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAic3RlcHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3VnaFVuZGVyU3RlcHBlcnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFz
QmFja0J1dHRvblN0YXJ0UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWZvcndh
cmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRC
dXR0b25TdGFydFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1zZWNvbmRhcnkt
YmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25FbmRQYXJ0LCBOVUxMKTsKKyAgICBt
X21pblRodW1iTGVuZ3RoID0gZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3NpemUoR1RLX1JBTkdF
KHNjcm9sbGJhcikpOworICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOworfQor
CitzdGF0aWMgR3RrV2lkZ2V0KiBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7
CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
ciA/IHRoZW1lLT5ndGtWU2Nyb2xsYmFyKCkgOiB0aGVtZS0+Z3RrSFNjcm9sbGJhcigpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgLy8gUGFpbnQgdGhlIHRyYWNrIGJhY2tncm91bmQuIElmIHRo
ZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMgcHJvcGVydHkgaXMgdHJ1ZSwgdGhpcworICAgIC8vIHNo
b3VsZCBiZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBzY3JvbGxiYXIsIGJ1dCBpZiBpcyBmYWxzZSwg
aXQgc2hvdWxkIG9ubHkgYmUgdGhlCisgICAgLy8gdHJhY2sgcmVjdC4KKyAgICBJbnRSZWN0IGZ1
bGxTY3JvbGxiYXJSZWN0KHJlY3QpOworICAgIGlmIChtX3Ryb3VnaFVuZGVyU3RlcHBlcnMpCisg
ICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xs
YmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisKKyAg
ICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVsbFNjcm9s
bGJhclJlY3QpOworICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGZ1bGxTY3JvbGxi
YXJSZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChwYWludFJlY3Qs
IGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19JTiwgInRyb3VnaCIpOworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQorewor
ICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBz
Y3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsK
KworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0LCBmdWxs
U2Nyb2xsYmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxsU2Nyb2xs
YmFyUmVjdCwgZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic2Nyb2xs
ZWRfd2luZG93Iik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ2V0V2lkZ2V0
Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgZ2Jvb2xlYW4gYWN0aXZhdGVTbGlkZXI7Cisg
ICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiYWN0aXZhdGUtc2xpZGVyIiwgJmFjdGl2
YXRlU2xpZGVyLCBOVUxMKTsKKworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RB
VEVfTk9STUFMOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VU
OworICAgIGlmIChhY3RpdmF0ZVNsaWRlciAmJiBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0g
VGh1bWJQYXJ0KSB7CisgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAg
ICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOworICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFy
LT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCB8fCBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkg
PT0gVGh1bWJQYXJ0KQorICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7CisK
KyAgICAvLyBUaGUgYWRqdXN0bWVudCBjb250cm9scyB0aGUgcmVuZGVyaW5nIG9mIHRoZSBzY3Jv
bGxiYXIgdGh1bWIuIElmIGl0J3Mgbm90IHNldAorICAgIC8vIHByb3Blcmx5IHRoZSB0aGVtZSBt
YXkgbm90IGRyYXcgdGhlIHRodW1iIGJvcmRlcnMgcHJvcGVybHkuCisgICAgR3RrQWRqdXN0bWVu
dCogYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0Uod2lkZ2V0
KSk7CisgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQsIHNjcm9sbGJhci0+
Y3VycmVudFBvcygpKTsKKyAgICBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqdXN0bWVudCwg
MCk7CisgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVyKGFkanVzdG1lbnQsIHNjcm9sbGJhci0+
bWF4aW11bSgpKTsKKworICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gR1RLX09SSUVO
VEFUSU9OX0hPUklaT05UQUw7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXpl
KGFkanVzdG1lbnQsIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19P
UklFTlRBVElPTl9WRVJUSUNBTDsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRf
c2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50LCByZWN0LndpZHRoKCkpOworCisgICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOworICAgIEludFJlY3Qg
c2xpZGVyUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludFNsaWRlcihzbGlkZXJSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwg
InNsaWRlciIsIG9yaWVudGF0aW9uKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCit7Cisg
ICAgLy8gVGhlIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCBpZiB0aGUgdGh1bWIgaXMgYXMgdGhl
IGFwcHJvcHJpYXRlIGV4dHJlbWUuCisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RL
X1NIQURPV19PVVQ7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9JTlNF
TlNJVElWRTsKKyAgICBib29sIHByZXNzZWQgPSAocGFydCA9PSBzY3JvbGxiYXItPnByZXNzZWRQ
YXJ0KCkpOworCisgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0
ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQorICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1h
eGltdW0oKSkKKyAgICAgICAgfHwgKEZvcndhcmRCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBz
Y3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkpIHsKKyAgICAg
ICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKKyAgICAgICAgaWYgKHByZXNzZWQpIHsK
KyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgICAgICBz
aGFkb3dUeXBlID0gR1RLX1NIQURPV19JTjsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09IHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9QUkVMSUdIVDsKKyAgICB9CisKKyAgICAvLyBUaGVtZXMgZGV0ZXJtaW5lIGhvdyB0byBkcmF3
IHRoZSBidXR0b24gKHdoaWNoIGJ1dHRvbiB0byBkcmF3KSBiYXNlZCBvbiB0aGUgYWxsb2NhdGlv
bgorICAgIC8vIG9mIHRoZSB3aWRnZXQuIFdoZXJlIHRoZSB0YXJnZXQgcmVjdCBpcyBpbiByZWxh
dGlvbiB0byB0aGUgdG90YWwgd2lkZ2V0IGFsbG9jYXRpb24KKyAgICAvLyBkZXRlcm1pbmVzIHRo
ZSBidXR0b24uCisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCk7CisgICAgaW50IGJ1dHRvblNpemUgPSAob3JpZW50YXRpb24gPT0g
VmVydGljYWxTY3JvbGxiYXIpID8gcmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lkdGgoKTsKKyAgICBp
bnQgdG90YWxBbGxvY2F0aW9uID0gYnV0dG9uU2l6ZSAqIDU7IC8vIE9uZSBzcGFjZSBmb3IgZWFj
aCBidXR0b24gYW5kIG9uZSBleHRyYS4KKyAgICBpbnQgYnV0dG9uT2Zmc2V0ID0gMDsKKyAgICBp
ZiAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0KQorICAgICAgICBidXR0b25PZmZzZXQg
PSBidXR0b25TaXplOworICAgIGVsc2UgaWYgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQpCisg
ICAgICAgIGJ1dHRvbk9mZnNldCA9IDMgKiBidXR0b25TaXplOworICAgIGVsc2UgaWYgKEZvcndh
cmRCdXR0b25FbmRQYXJ0ID09IHBhcnQpCisgICAgICAgIGJ1dHRvbk9mZnNldCA9IDQgKiBidXR0
b25TaXplOworCisgICAgLy8gTm93IHdlIHdhbnQgdGhlIGFsbG9jYXRpb24gdG8gYmUgcmVsYXRp
dmUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcGFpbnRlZCByZWN0LgorICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxs
b2NhdGlvbik7CisgICAgYWxsb2NhdGlvbi54ID0gYWxsb2NhdGlvbi55ID0gMDsKKyAgICBhbGxv
Y2F0aW9uLndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gcmVj
dC5oZWlnaHQoKTsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikg
eworICAgICAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHRvdGFsQWxsb2NhdGlvbjsKKyAgICAgICAg
YWxsb2NhdGlvbi55IC09IGJ1dHRvbk9mZnNldDsKKyAgICB9IGVsc2UgeworICAgICAgICBhbGxv
Y2F0aW9uLndpZHRoID0gdG90YWxBbGxvY2F0aW9uOworICAgICAgICBhbGxvY2F0aW9uLnggLT0g
YnV0dG9uT2Zmc2V0OworICAgIH0KKyAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdl
dCwgJmFsbG9jYXRpb24pOworCisgICAgY29uc3QgY2hhciogZGV0YWlsID0gb3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIgPyAidnNjcm9sbGJhciIgOiAiaHNjcm9sbGJhciI7CisgICAg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOworCisg
ICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBkZXRhaWwpOworCisgICAgZmxvYXQgYXJyb3dTY2FsaW5nOworICAgIGd0a193aWRn
ZXRfc3R5bGVfZ2V0KHdpZGdldCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxM
KTsKKyAgICBJbnRTaXplIGFycm93U2l6ZSA9IHJlY3Quc2l6ZSgpOworICAgIGFycm93U2l6ZS5z
Y2FsZShhcnJvd1NjYWxpbmcpOworICAgIEludFJlY3QgYXJyb3dSZWN0KEludFBvaW50KGJ1dHRv
blJlY3QueCgpICsgKGJ1dHRvblJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpKSAvIDIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC55KCkgKyAoYnV0dG9u
UmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZS5oZWlnaHQoKSkgLyAyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICBhcnJvd1NpemUpOworICAgIGlmIChwcmVzc2VkKSB7CisgICAgICAgIGludCBhcnJv
d0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKKyAgICAgICAgZ3RrX3dpZGdldF9z
dHlsZV9nZXQod2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyb3ctZGlz
cGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgYXJyb3dSZWN0Lm1vdmUo
YXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVudFkpOworICAgIH0KKworICAgIEd0
a0Fycm93VHlwZSBhcnJvd1R5cGUgPSBHVEtfQVJST1dfRE9XTjsKKyAgICBpZiAob3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRv
bkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICAgICAgYXJy
b3dUeXBlID0gR1RLX0FSUk9XX1VQOworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfUklHSFQ7
CisgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja0J1
dHRvblN0YXJ0UGFydCkKKyAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19MRUZUOwor
ICAgIH0KKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCB3aWRnZXQs
IHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgYXJyb3dUeXBlLCBkZXRhaWwpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NDljNTQzZjNk
ZGY2YjMxNWVmZmI5OGE3NTlmZjViMDAyZDcwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCisKKyNpZm5kZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNp
bmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGd0a1N0eWxl
Q2hhbmdlZENhbGxiYWNrKEd0a1dpZGdldCosIFNjcm9sbGJhclRoZW1lR3RrKiBzY3JvbGxiYXJU
aGVtZSkKK3sKKyAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Cit9
CisKK1Njcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCisgICAgOiBtX2NvbnRl
eHQoc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCkuZ2V0KCkpLT5ndGtTY3JvbGxiYXJTdHlsZSgpKQoreworICAgIHVwZGF0ZVRoZW1lUHJvcGVy
dGllcygpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LCAiY2hhbmdlZCIsIEdfQ0FM
TEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBTY3JvbGxi
YXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKK3sKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibWluLXNsaWRlci1sZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZtX3RodW1iRmF0bmVzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC1ib3JkZXIiLCAmbV90cm91Z2hCb3Jk
ZXJXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc2l6ZSIs
ICZtX3N0ZXBwZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RlcHBl
ci1zcGFjaW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0cm91Z2gtdW5kZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJhY2t3YXJkLXN0ZXBwZXIiLCAm
bV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaGFzLWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1iYWNrd2FyZC1zdGVw
cGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0
b25TdGFydFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAg
IHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOworfQorCitzdGF0aWMgdm9pZCBhcHBs
eVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIG9yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyID8gIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCA6IEdUS19TVFlMRV9DTEFTU19I
T1JJWk9OVEFMKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIFBhaW50IHRoZSB0cmFjayBi
YWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUs
IHRoaXMKKyAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBi
dXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQorICAgIC8vIHRyYWNrIHJlY3Qu
CisgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKKyAgICBpZiAobV90cm91Z2hV
bmRlclN0ZXBwZXJzKQorICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdCA9IEludFJlY3Qoc2Nyb2xs
YmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCksIHNjcm9sbGJhci0+
aGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOworCisg
ICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250
ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3Vu
ZChtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1bGxTY3JvbGxiYXJSZWN0
LnkoKSwgZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9sbGJhclJlY3QuaGVpZ2h0
KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0Lngo
KSwgZnVsbFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53aWR0aCgpLCBmdWxs
U2Nyb2xsYmFyUmVjdC5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50U2Nyb2xsYmFy
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwor
CisgICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9j
b250ZXh0LCAic2Nyb2xsZWQtd2luZG93Iik7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRl
eHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzY3JvbGxiYXItPngoKSwgc2Ny
b2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisK
KyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOworICAgIGFwcGx5
U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1Nf
U0xJREVSKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
QUNUSVZFOworICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQor
ICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOworCisgICAgZ3RrX3JlbmRlcl9zbGlkZXIobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05f
SE9SSVpPTlRBTCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUobV9jb250ZXh0KTsKKworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0g
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0
Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsK
KyAgICBpZiAoKEJhY2tCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJl
bnRQb3MoKSkKKyAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBw
YXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKQor
ICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+
Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgeworICAgICAgICBpZiAocGFy
dCA9PSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpCisgICAgICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19BQ1RJVkU7CisgICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJl
ZFBhcnQoKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwor
ICAgIH0gZWxzZQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNz
KG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAgZ3RrX3JlbmRlcl9iYWNr
Z3JvdW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVu
ZGVyX2ZyYW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGdm
bG9hdCBhcnJvd1NjYWxpbmc7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29u
dGV4dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKKworICAgIGRvdWJs
ZSBhcnJvd1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpICogYXJy
b3dTY2FsaW5nOworICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSArIChyZWN0Lndp
ZHRoKCkgLSBhcnJvd1NpemUpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55
KCkgKyAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyKTsKKworICAgIGlmIChmbGFncyAm
IEdUS19TVEFURV9GTEFHX0FDVElWRSkgeworICAgICAgICBnaW50IGFycm93RGlzcGxhY2VtZW50
WCwgYXJyb3dEaXNwbGFjZW1lbnRZOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUobV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93
LWRpc3BsYWNlbWVudC14IiwgJmFycm93RGlzcGxhY2VtZW50WCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteSIsICZhcnJvd0Rpc3BsYWNl
bWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAg
ICAgYXJyb3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZ
KTsKKyAgICB9CisKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChvcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIDogMDsK
KyAgICB9IGVsc2UgeworICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQ
YXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJIC8gMiA6IDMgKiAo
R19QSSAvIDIpOworICAgIH0KKworICAgIGd0a19yZW5kZXJfYXJyb3cobV9jb250ZXh0LCBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UG9pbnQueCgpLCBhcnJv
d1BvaW50LnkoKSwgYXJyb3dTaXplKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
bV9jb250ZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUdU
S19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBv
cHVwTWVudUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjQxMzc3M2U1OGM2MDVjNDA4MTNhOWMwN2I4OTAwM2Q2MWZkODEwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3Rr
LmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1
cE1lbnVHdGsuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU2VhcmNoUG9wdXBNZW51R3RrOjpTZWFyY2hQb3B1cE1lbnVHdGsoUG9wdXBN
ZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVH
dGsoY2xpZW50KSkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUG9wdXBNZW51KiBT
ZWFyY2hQb3B1cE1lbnVHdGs6OnBvcHVwTWVudSgpCit7CisgICAgcmV0dXJuIG1fcG9wdXAuZ2V0
KCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpzYXZlUmVjZW50U2VhcmNoZXMoY29u
c3QgQXRvbWljU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpsb2FkUmVjZW50U2VhcmNo
ZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9wdXBNZW51R3RrOjplbmFibGVkKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUzYzYzZDdjMmI3Yjg0
ZTQyNjM1NjI2M2E5ZDZiOTI0OTIxMWU4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFNlYXJjaFBvcHVwTWVudUd0a19oCisjZGVmaW5lIFNlYXJjaFBv
cHVwTWVudUd0a19oCisKKyNpbmNsdWRlICJQb3B1cE1lbnVHdGsuaCIKKyNpbmNsdWRlICJTZWFy
Y2hQb3B1cE1lbnUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZWFyY2hQb3B1
cE1lbnVHdGsgOiBwdWJsaWMgU2VhcmNoUG9wdXBNZW51IHsKK3B1YmxpYzoKKyAgICBTZWFyY2hQ
b3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIFBvcHVwTWVudSog
cG9wdXBNZW51KCk7CisgICAgdmlydHVhbCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7CisgICAgdmlydHVhbCBib29sIGVuYWJs
ZWQoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UG9wdXBNZW51R3RrPiBtX3BvcHVwOworfTsK
KworfQorCisjZW5kaWYgLy8gU2VhcmNoUG9wdXBNZW51R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
U2hhcmVkQnVmZmVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzA0MGYyOGU5ZGY3MWU0ZWVkMGUxYTAx
MjZlNjY1MGQzNWM2MzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9T
aGFyZWRCdWZmZXJHdGsuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRl
IDxnbGliLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkKK3sKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
ZmlsZVBhdGgpOworICAgIGdjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBzaXplOworICAgIEdF
cnJvciogZXJyb3IgPSAwOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlbmFtZS5k
YXRhKCksICZjb250ZW50cywgJnNpemUsICZlcnJvcikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMiLCBmaWxlbmFtZUZv
ckRpc3BsYXkoZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAg
ICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVu
dHMsIHNpemUpOworICAgIGdfZnJlZShjb250ZW50cyk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1No
YXJlZFRpbWVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzFhMzUyZjczM2YwZWIzYTc2OGY5ODIxYTQw
MjU2NDMwMzA0ZjYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFy
ZWRUaW1lckd0ay5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFy
ZWRUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBndWludCBzaGFyZWRUaW1lcjsKK3N0YXRp
YyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOworCit2b2lkIHNldFNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBzaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24gPSBmOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlcikKK3sK
KyAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBzaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGlt
ZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIEFTU0VSVChzaGFyZWRUaW1l
ckZpcmVkRnVuY3Rpb24pOworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ+KGludGVydmFsICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVkVGltZXIoKTsKKyAgICBz
aGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfUkVEUkFXLCBpbnRl
cnZhbEluTVMsIHRpbWVvdXRfY2IsIDAsIDApOworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigp
Cit7CisgICAgaWYgKHNoYXJlZFRpbWVyID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGdi
b29sZWFuIHJlbW92ZWRTb3VyY2UgPSBnX3NvdXJjZV9yZW1vdmUoc2hhcmVkVGltZXIpOworICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZFNvdXJjZSwgcmVtb3ZlZFNvdXJjZSk7CisgICAgc2hhcmVk
VGltZXIgPSAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5k
R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJm
NzMxNmNhZmQyZWNlZjdiNjFlOGFkZjEyOTM2MjY4YTkyMjRjNGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcApAQCAtMCwwICsxLDM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkKK3sKKyAgICBnZGtf
YmVlcCgpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2IzNDQ0OTNkNWIzMWQ4ZGQ4
NTAzOTg5MzY4ZmFhYjAzNTRhMzM5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQ29va2llU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgIkROUy5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgorI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMg
KG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbmFtZXNwYWNlIFdlYkNvcmUg
ewordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQorU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNp
Z25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBL
VVJMICZ1cmwpIHsgcmV0dXJuIFN0cmluZygpOyB9CitmbG9hdCB1c2VySWRsZVRpbWUoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBGTFRfTUFYOyB9IC8vIHJldHVybiBhbiBhcmJpdHJhcmls
eSBoaWdoIHVzZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2luZyBwYWdlcyBmcm9tIHRoZSBwYWdl
IGNhY2hlIGlzbid0IHBvc3Rwb25lZAorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1VzZXJBZ2VudEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjNiYzczMzM4Yzk0OGU2OTc3MzI3NDk5NGQzNWEyMWJkMjA2ZTBkOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcApA
QCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRHdGsuaCIKKwor
I2luY2x1ZGUgPGdsaWIuaD4KKworI2lmIE9TKFVOSVgpCisjaW5jbHVkZSA8c3lzL3V0c25hbWUu
aD4KKyNlbGlmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIHBsYXRmb3JtRm9yVUFT
dHJpbmcoKQoreworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICByZXR1cm4gIlgxMSI7CisjZWxpZiBP
UyhXSU5ET1dTKQorICAgIHJldHVybiAiIjsKKyNlbGlmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1
cm4gIk1hY2ludG9zaCI7CisjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfRElSRUNURkIpCisg
ICAgcmV0dXJuICJEaXJlY3RGQiI7CisjZWxzZQorICAgIHJldHVybiAiVW5rbm93biI7CisjZW5k
aWYKK30KKworc3RhdGljIFN0cmluZyBwbGF0Zm9ybVZlcnNpb25Gb3JVQVN0cmluZygpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVhT1NWZXJzaW9uLCAoU3RyaW5nKCkpKTsK
KyAgICBpZiAoIXVhT1NWZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHVhT1NWZXJz
aW9uOworCisjaWYgT1MoV0lORE9XUykKKyAgICB1YU9TVmVyc2lvbiA9IHdpbmRvd3NWZXJzaW9u
Rm9yVUFTdHJpbmcoKTsKKyNlbGlmIE9TKERBUldJTikKKyNpZiBDUFUoWDg2KQorICAgIHVhT1NW
ZXJzaW9uID0gIkludGVsIE1hYyBPUyBYIjsKKyNlbHNlCisgICAgdWFPU1ZlcnNpb24gPSAiUFBD
IE1hYyBPUyBYIjsKKyNlbmRpZgorI2VsaWYgT1MoVU5JWCkKKyAgICBzdHJ1Y3QgdXRzbmFtZSBu
YW1lOworICAgIGlmICh1bmFtZSgmbmFtZSkgIT0gLTEpCisgICAgICAgIHVhT1NWZXJzaW9uID0g
U3RyaW5nOjpmb3JtYXQoIiVzICVzIiwgbmFtZS5zeXNuYW1lLCBuYW1lLm1hY2hpbmUpOworICAg
IGVsc2UKKyAgICAgICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKKyNlbHNlCisg
ICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKKyNlbmRpZgorICAgIHJldHVybiB1
YU9TVmVyc2lvbjsKK30KKworU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYg
YXBwbGljYXRpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVyc2lvbikKK3sKKyAg
ICAvLyBDcmVhdGUgYSBkZWZhdWx0IHVzZXIgYWdlbnQgc3RyaW5nIHdpdGggYSBsaWJlcmFsIGlu
dGVycHJldGF0aW9uIG9mIAorICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
LVVTL2RvY3MvVXNlcl9BZ2VudF9TdHJpbmdzX1JlZmVyZW5jZQorICAgIC8vCisgICAgLy8gRm9y
bWluZyBhIGZ1bmN0aW9uYWwgdXNlciBhZ2VudCBpcyByZWFsbHkgZGlmZmljdWx0LiBXZSBtdXN0
IG1lbnRpb24gU2FmYXJpLCBiZWNhdXNlIHNvbWUKKyAgICAvLyBzaXRlcyBjaGVjayBmb3IgdGhh
dCB3aGVuIGRldGVjdGluZyBXZWJLaXQgYnJvd3NlcnMuIEFkZGl0aW9uYWxseSBzb21lIHNpdGVz
IGFzc3VtZSB0aGF0CisgICAgLy8gYnJvd3NlcnMgdGhhdCBhcmUgIlNhZmFyaSIgYnV0IG5vdCBy
dW5uaW5nIG9uIE9TIFggYXJlIHRoZSBTYWZhcmkgaU9TIGJyb3dzZXIsIHNvIHdlCisgICAgLy8g
YWxzbyBjbGFpbSB0byBiZSAgQ2hyb21pdW0uIEdldHRpbmcgdGhpcyB3cm9uZyBjYW4gY2F1c2Ug
c2l0ZXMgdG8gbG9hZCB0aGUgd3JvbmcgSmF2YVNjcmlwdCwKKyAgICAvLyBDU1MsIG9yIGN1c3Rv
bSBmb250cy4gSW4gc29tZSBjYXNlcyBzaXRlcyB3b24ndCBsb2FkIHJlc291cmNlcyBhdCBhbGwu
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBDU3RyaW5nLCB1YVZlcnNpb24sIChTdHJp
bmc6OmZvcm1hdCgiJWkuJWkiLCBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OLCBXRUJL
SVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OKS51dGY4KCkpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgc3RhdGljVUEsIChTdHJpbmc6OmZvcm1hdCgiTW96aWxsYS81
LjAgKCVzOyAlcykgQXBwbGVXZWJLaXQvJXMgKEtIVE1MLCBsaWtlIEdlY2tvKSAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkNocm9taXVtLzI1LjAuMTM0OS4yIENocm9tZS8yNS4wLjEzNDkuMiBTYWZhcmkvJXMiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBsYXRmb3JtRm9yVUFTdHJpbmcoKSwgcGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcoKS51
dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVhVmVyc2lvbi5kYXRhKCksIHVhVmVyc2lvbi5kYXRhKCkp
KSk7CisgICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBz
dGF0aWNVQTsKKworICAgIFN0cmluZyBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IGFwcGxpY2F0
aW9uVmVyc2lvbjsKKyAgICBpZiAoZmluYWxBcHBsaWNhdGlvblZlcnNpb24uaXNFbXB0eSgpKQor
ICAgICAgICBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IHVhVmVyc2lvbi5kYXRhKCk7CisKKyAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzICVzLyVzIiwgc3RhdGljVUEudXRmOCgpLmRhdGEo
KSwgYXBwbGljYXRpb25OYW1lLnV0ZjgoKS5kYXRhKCksIGZpbmFsQXBwbGljYXRpb25WZXJzaW9u
LnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW4gYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1VzZXJBZ2VudEd0ay5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhNTBiN2EzMmQyOGYwMjFlODQ2
Mzc2ODdkN2RkOWI2YzkwYzc1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1VzZXJBZ2VudEd0ay5oLmluCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFVzZXJBZ2VudEd0a19oCisjZGVm
aW5lIFVzZXJBZ2VudEd0a19oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNkZWZpbmUgV0VCS0lUX1VTRVJfQUdFTlRf
TUFKT1JfVkVSU0lPTiAoQFdFQktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT05AKQorI2RlZmlu
ZSBXRUJLSVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OIChAV0VCS0lUX1VTRVJfQUdFTlRfTUlO
T1JfVkVSU0lPTkApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIHN0YW5kYXJkVXNl
ckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lID0gIiIsIGNvbnN0IFN0cmluZyYg
YXBwbGljYXRpb25WZXJzaW9uID0gIiIpOworCit9CisKKyNlbmRpZiAvLyBVc2VyQWdlbnRHdGtf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAzZjNjOWM3YzlhNmUy
YzlhMzRjMDkxZWU5NGJjYjEzNzhjNmYzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdl
dC5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSG9zdFdpbmRv
dy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lk
Z2V0IHdpZGdldCkKK3sKKyAgICBpbml0KHdpZGdldCk7Cit9CisKK1dpZGdldDo6fldpZGdldCgp
Cit7CisgICAgQVNTRVJUKCFwYXJlbnQoKSk7CisKKyAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQo
KTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKK3sKK30KKwordm9p
ZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBTY3JvbGxW
aWV3KiB2aWV3ID0gcm9vdCgpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAg
IHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKKworICAgIGlmIChpc1BhcmVu
dFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBndGtfd2lkZ2V0X3Nob3co
cGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBzZXRT
ZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZv
cm1XaWRnZXQoKSkKKyAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3JtV2lkZ2V0KCkpOwor
fQorCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sIGlz
U2VsZWN0ZWQpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBTZWUgaWYgdGhlIHBsYXRmb3JtV2lkZ2V0IGhhcyBhIHdlYmtpdC13aWRnZXQt
aXMtc2VsZWN0ZWQgcHJvcGVydHkKKyAgICAvLyBhbmQgc2V0IGl0IGFmdGVyd2FyZHMuCisgICAg
R1BhcmFtU3BlYyogc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1Rf
R0VUX0NMQVNTKHBsYXRmb3JtV2lkZ2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQtd2lkZ2V0LWlzLXNlbGVjdGVkIik7Cisg
ICAgaWYgKCFzcGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXQocGxhdGZv
cm1XaWRnZXQoKSwgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQiLCBpc1NlbGVjdGVkLCBOVUxM
KTsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBmcmFtZVJlY3RzQ2hhbmdlZCgpOwor
fQorCit2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkKK3sKKyAgICBpZiAoIXBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICByZXR1cm47CisgICAgZ19vYmplY3RfdW5yZWYocGxh
dGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZXRhaW5QbGF0Zm9ybVdpZGdldCgp
Cit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICAgcmV0dXJuOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHBsYXRmb3JtV2lkZ2V0KCkpOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OWY1ZGE1
NDY4MzAzODUzNjMxMzcxYzRjN2VmMzYzZTcxNGY4MTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMCwwICsxLDI0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIlJlbmRlclRo
ZW1lR3RrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgR2RrUGl4bWFwKiBnU2NyYXRjaEJ1ZmZlciA9IDA7Citz
dGF0aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKQoreworICAgIGlmIChnU2NyYXRjaEJ1ZmZl
cikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZ1NjcmF0Y2hCdWZmZXIpOworICAgIGdTY3JhdGNo
QnVmZmVyID0gMDsKK30KKworLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBhIHNjcmF0Y2ggaW1h
Z2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQorLy8gcmVuZGVyLiBJbnN0ZWFk
IG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlv
biwKKy8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVy
Z2VkIHZpYSBhIHRpbWVyLgorY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMg
VGltZXJCYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNj
cmF0Y2hCdWZmZXIoKTsgfQorfTsKKworc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHVyZ2VTY3JhdGNoQnVmZmVyVGlt
ZXIsIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCAoKSk7CisgICAgaWYgKHB1cmdlU2NyYXRjaEJ1
ZmZlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0
b3AoKTsKKyAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdGFydE9uZVNob3QoMik7Cit9CisK
K1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCisgICAg
OiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgLCBtX3RhcmdldFJlY3Qo
dGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJyb3IoZmFsc2UpCit7CisgICAgUmVuZGVyVGhlbWVH
dGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCkuZ2V0KCkpOworCisgICAgLy8gRmFsbGJhY2s6IFdlIGZhaWxlZCB0byBjcmVh
dGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJvcGVybHkgcGFpbnQg
CisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUgdHJhbnNwYXJlbmN5
LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKKyAgICAvLyBwYWludCBk
aXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90IHJlbmRlciBDU1Mg
cm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgorICAgIGlmICghdGhlbWUtPm1fdGhlbWVQ
YXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkgewor
ICAgICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNjcmF0
Y2ggYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG91ciB0YXJnZXQgR2RrRHJhd2FibGUu
CisgICAgLy8gVGhpcyBwcmV2ZW50cyBnaWFudCBwaXhtYXAgYWxsb2NhdGlvbnMgZm9yIHZlcnkg
bGFyZ2Ugd2lkZ2V0cyBpbiBzbWFsbGVyIHZpZXdzLgorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IGltcGxlbWVudCB0aGlzIGNoZWNrIGZvciBXZWJLaXQyIGFzIHdlbGwuCisgICAgaWYgKGdyYXBo
aWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKKyAgICAgICAgaW50IG1heFdpZHRoID0gMCwgbWF4
SGVpZ2h0ID0gMDsKKyAgICAgICAgZ2V0R2RrRHJhd2FibGVTaXplKGdyYXBoaWNzQ29udGV4dC0+
Z2RrV2luZG93KCksICZtYXhXaWR0aCwgJm1heEhlaWdodCk7CisgICAgICAgIG1fdGFyZ2V0UmVj
dC5zZXRTaXplKG1fdGFyZ2V0UmVjdC5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtYXhXaWR0aCwg
bWF4SGVpZ2h0KSkpOworICAgIH0KKworICAgIC8vIFdpZGdldHMgc29tZXRpbWVzIG5lZWQgdG8g
ZHJhdyBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMgZm9yIHRoaW5ncyBzdWNoIGFzCisgICAgLy8g
ZXh0ZXJpb3IgZm9jdXMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzb21lIGV4dHJhIHBpeGVscyBp
biBvdXIgc3VyZmFjZSBmb3IgdGhpcy4KKyAgICBzdGF0aWMgaW50IGV4dHJhU3BhY2UgPSAxNTsK
KyAgICBtX3RhcmdldFJlY3QuaW5mbGF0ZShleHRyYVNwYWNlKTsKKworICAgIC8vIFRoaXMgb2Zm
c2V0IHdpbGwgbWFwIGEgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSB3aWRn
ZXQgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludGluZyBidWZmZXIuCisgICAg
bV9wYWludE9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtIG1fdGFyZ2V0UmVjdC5sb2Nh
dGlvbigpOworCisgICAgaW50IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRoKCkgKyAoZXh0cmFT
cGFjZSAqIDIpOworICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCkgKyAoZXh0
cmFTcGFjZSAqIDIpOworICAgIGludCBzY3JhdGNoV2lkdGggPSAwOworICAgIGludCBzY3JhdGNo
SGVpZ2h0ID0gMDsKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdka19waXhtYXBf
Z2V0X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lkdGgsICZzY3JhdGNoSGVpZ2h0KTsK
KworICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGN1
cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICBpZiAoIWdTY3JhdGNoQnVmZmVyIHx8
IHNjcmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWlnaHQgPCBoZWlnaHQpIHsKKyAgICAg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisgICAgICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0
IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBzaW1pbGFyIHNpemVk
IHJlcXVlc3RzLgorICAgICAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OworICAg
ICAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7CisKKyAgICAgICAgZ1NjcmF0
Y2hCdWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwgaGVpZ2h0LCBnZGtfY29sb3JtYXBf
Z2V0X3Zpc3VhbCh0aGVtZS0+bV9jb2xvcm1hcCktPmRlcHRoKTsKKyAgICAgICAgZ2RrX2RyYXdh
YmxlX3NldF9jb2xvcm1hcChnU2NyYXRjaEJ1ZmZlciwgdGhlbWUtPm1fY29sb3JtYXApOworICAg
IH0KKyAgICBtX3RhcmdldCA9IGdTY3JhdGNoQnVmZmVyOworCisgICAgLy8gQ2xlYXIgdGhlIHNj
cmF0Y2ggYnVmZmVyLgorICAgIFJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9
IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsKKyAgICBjYWlyb19z
ZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NM
RUFSKTsKKyAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Cit9CisK
K1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAg
ICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdldCBpbiB0aGUgZmFs
bGJhY2sgY2FzZS4gU2VlIGFib3ZlLgorICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgp
KTsKKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIG1fZ3Jh
cGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG9u
J3QgcGFpbnQgdGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisgICAgaWYg
KG1faGFkRXJyb3IpIHsKKyAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgaXQg
aXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBoZXJlLgorICAgIGNh
aXJvX3QqIGNhaXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKTsKKyAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJjZShjYWly
b19nZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOworCisgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2Vf
cGl4bWFwKGNhaXJvQ29udGV4dCwgZ1NjcmF0Y2hCdWZmZXIsIG1fdGFyZ2V0UmVjdC54KCksIG1f
dGFyZ2V0UmVjdC55KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRleHQsIG1fdGFy
Z2V0UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCksIG1fdGFyZ2V0UmVjdC53aWR0aCgpLCBtX3Rh
cmdldFJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250ZXh0KTsKKyAgICBj
YWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2UuZ2V0KCkpOworICAg
IHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Y2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgR2RrUmVjdGFu
Z2xlKiBjbGlwUmVjdCkKK3sKKyAgICBjbGlwUmVjdC0+eCA9IG1fcGFpbnRPZmZzZXQud2lkdGgo
KSArIHJlY3QueCgpOworICAgIGNsaXBSZWN0LT55ID0gbV9wYWludE9mZnNldC5oZWlnaHQoKSAr
IHJlY3QueSgpOworICAgIGNsaXBSZWN0LT53aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpOwor
ICAgIGNsaXBSZWN0LT5oZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCk7Cit9CisKK3ZvaWQg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtSZWN0YW5nbGUgY2xp
cFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKKworICAgIC8v
IFNvbWUgd2lkZ2V0cyBhbHNvIG5lZWQgdGhlaXIgYWxsb2NhdGlvbiBhZGp1c3RlZCB0byBhY2Nv
dW50IGZvciBleHRyYSBzcGFjZS4KKyAgICAvLyBSaWdodCBub3cgb25seSBzY3JvbGxiYXIgYnV0
dG9ucyBoYXZlIHNpZ25pZmljYW50IGFsbG9jYXRpb25zLgorICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRp
b24pOworICAgIGFsbG9jYXRpb24ueCArPSBjbGlwUmVjdC54OworICAgIGFsbG9jYXRpb24ueSAr
PSBjbGlwUmVjdC55OworICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxs
b2NhdGlvbik7CisKKyAgICBndGtfcGFpbnRfYm94KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwKKyAgICAgICAg
ICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
Omd0a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwg
R3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBn
Y2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxh
dGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9mbGF0X2JveChndGtf
d2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBl
LCAmY2xpcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlw
UmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2
b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYg
cmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdj
aGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0
ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2ZvY3VzKGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lk
Z2V0LAorICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0Lnks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwg
Y29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlw
UmVjdCk7CisgICAgZ3RrX3BhaW50X3NsaWRlcihndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQp
LCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAg
ICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpLCBvcmllbnRhdGlvbik7Cit9CisKK3ZvaWQgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
KyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9j
aGVjayhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBz
aGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgZGV0YWls
LCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
fQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0aW9uKGNvbnN0IElu
dFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBH
dGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2Rr
UmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVj
dCk7CisgICAgZ3RrX3BhaW50X29wdGlvbihndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBt
X3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAgICAg
ICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0Ojpn
dGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
U3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hh
ciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVD
bGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9zaGFkb3coZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNs
aXBSZWN0LCB3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0Lngs
IGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBH
dGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBz
aGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7Cisg
ICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZj
bGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2Fycm93KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdl
dCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBk
ZXRhaWwsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a0Fycm93VHlwZT4oYXJy
b3dEaXJlY3Rpb24pLCBUUlVFLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1Bh
aW50VkxpbmUoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRl
VHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xl
IGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAg
Z3RrX3BhaW50X3ZsaW5lKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBz
dGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWwsCisgICAgICAgICAgICAgICAgICAg
IGNsaXBSZWN0LnksIGNsaXBSZWN0LnkgKyByZWN0LmhlaWdodCgpLCBjbGlwUmVjdC54KTsKKwor
fQorCit9CisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWYyYzhhNzcxYzBlMTY3
MzM3NDhkZDY0ZjQ0ZWNhYzBlMGNmOTkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCisjZGVmaW5lIFdpZGdldFJlbmRl
cmluZ0NvbnRleHRfaAorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworI2luY2x1ZGUgIklu
dFJlY3QuaCIKKworLy8gVXN1YWxseSB0aGlzIGlzIHRvbyBleHBlbnNpdmUgdG8gaGF2ZSBpbiBo
ZWFkZXJzLCBidXQgR3RrU3RhdGVUeXBlIEd0a1NoYWRvd1R5cGUgYXJlCisvLyBlbnVtcyBhbmQg
Y2Fubm90IGJlIGZvcndhcmQgZGVjbGFyZWQuIFdpZGdldFJlbmRlcmluZ0NvbnRleHQuaCBpcyBj
dXJyZW50bHkgb25seQorLy8gaW5jbHVkZWQgaW4gUmVuZGVyVGhlbWVHdGsyLmNwcCBhbmQgU2Ny
b2xsYmFyVGhlbWVHdGsyLmNwcC4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUmVuZGVyVGhlbWVHdGs7
CisKK2NsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgeworcHVibGljOgorICAgIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIH5X
aWRnZXRSZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICB2b2lkIGd0a1BhaW50Qm94KGNvbnN0IElu
dFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdj
aGFyKik7CisgICAgdm9pZCBndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdl
dCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lk
IGd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwg
Y29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50U2xpZGVyKGNvbnN0IEludFJlY3QmLCBH
dGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiwgR3Rr
T3JpZW50YXRpb24pOworICAgIHZvaWQgZ3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiwgR3Rr
V2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOworICAg
IHZvaWQgZ3RrUGFpbnRPcHRpb24oY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50U2hh
ZG93KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludEFycm93KGNvbnN0IEludFJlY3Qm
LCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGludCBhcnJvd0RpcmVj
dGlvbiwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50VkxpbmUoY29uc3QgSW50UmVj
dCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgY29uc3QgZ2NoYXIqKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmLCBHZGtSZWN0YW5nbGUq
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7CisgICAgSW50UmVj
dCBtX3RhcmdldFJlY3Q7CisgICAgSW50U2l6ZSBtX3BhaW50T2Zmc2V0OworICAgIGJvb2wgbV9o
YWRFcnJvcjsKKyAgICBHZGtEcmF3YWJsZSogbV90YXJnZXQ7CisKK307CisKK30KKworI2VuZGlm
IC8vIEdUS19BUElfVkVSU0lPTl8yCisjZW5kaWYgLy8gV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvYXVkaW8vQXVkaW9CdXNHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
Yzc4N2Y1MDVhY2ZkMzBiMmVmNmE3NjM3YzBiMDRhOThhMDNjNmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcApAQCAtMCwwICsxLDQ5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKworI2luY2x1ZGUgIkF1ZGlvRmlsZVJl
YWRlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNsdWRlIDxn
bGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxBdWRpb0J1cz4gQXVk
aW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGZsb2F0IHNhbXBs
ZVJhdGUpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIl
cy53YXYiLCBuYW1lKSk7CisgICAgY29uc3QgY2hhciogZW52aXJvbm1lbnRQYXRoID0gZ2V0ZW52
KCJBVURJT19SRVNPVVJDRVNfUEFUSCIpOworICAgIEdPd25QdHI8Z2NoYXI+IGFic29sdXRlRmls
ZW5hbWU7CisgICAgaWYgKGVudmlyb25tZW50UGF0aCkKKyAgICAgICAgYWJzb2x1dGVGaWxlbmFt
ZS5zZXQoZ19idWlsZF9maWxlbmFtZShlbnZpcm9ubWVudFBhdGgsIGZpbGVuYW1lLmdldCgpLCBO
VUxMKSk7CisgICAgZWxzZQorICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNldChnX2J1aWxkX2Zp
bGVuYW1lKHNoYXJlZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJyZXNvdXJjZXMiLCAiYXVkaW8i
LCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOworICAgIHJldHVybiBjcmVhdGVCdXNGcm9tQXVkaW9G
aWxlKGFic29sdXRlRmlsZW5hbWUuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9ncmFwaGljcy9Db2xvckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY1NmJhNmZi
NGUwYjY1YTk5YzI3M2QzYjQ3MGJmZGI2YjM1YjlhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDb2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCisgICAgOiBtX2NvbG9yKG1ha2VS
R0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCisgICAgLCBtX3ZhbGlk
KHRydWUpCit7Cit9CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKK0NvbG9yOjpDb2xvcihj
b25zdCBHZGtSR0JBJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+
KGMucmVkICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmdyZWVuICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmJsdWUgKiAyNTUpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
YWxwaGEgKiAyNTUpKSkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKK30KKworQ29sb3I6Om9wZXJh
dG9yIEdka1JHQkEoKSBjb25zdAoreworICAgIGRvdWJsZSByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YTsKKyAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBHZGtSR0JBIHJn
YmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgcmV0dXJuIHJnYmE7Cit9Cisj
ZW5kaWYKKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTlkN2YyZjVkZjMxNGZmM2E0NmNlNDJjNWI4NDc0OTQ5M2YwYmFiZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVl
blZpZGVvQ29udHJvbGxlckd0ay5jcHAKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEzIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0UoTkFUSVZFX0ZVTExT
Q1JFRU5fVklERU8pCisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgi
CisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgorI2luY2x1
ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCIKKworI2luY2x1ZGUgPGdkay9nZGsu
aD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGli
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2RlZmluZSBIVURfQVVUT19ISURFX0lOVEVSVkFMIDMwMDAgLy8gMyBzZWNvbmRzCisjZGVm
aW5lIFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwgMTUwIC8vIDE1MG1zCisKKy8vIFVzZSBz
eW1ib2xpYyBpY29ucyBvbmx5IGlmIHdlIGJ1aWxkIHdpdGggR1RLKy0zIHN1cHBvcnQuIFRoZXkg
Y291bGQKKy8vIGJlIGVuYWJsZWQgZm9yIHRoZSBHVEsrMiBidWlsZCBidXQgd2UnZCBuZWVkIHRv
IGJ1bXAgdGhlIHJlcXVpcmVkCisvLyB2ZXJzaW9uIHRvIGF0IGxlYXN0IDIuMjIuCisjaWYgR1RL
X01BSk9SX1ZFUlNJT04gPiAyCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVggIi1zeW1ib2xpYyIK
KyNlbHNlCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVgKKyNlbmRpZgorCisjZGVmaW5lIFBMQVlf
SUNPTl9OQU1FICJtZWRpYS1wbGF5YmFjay1zdGFydCJJQ09OX05BTUVfU1VGRklYCisjZGVmaW5l
IFBBVVNFX0lDT05fTkFNRSAibWVkaWEtcGxheWJhY2stcGF1c2UiSUNPTl9OQU1FX1NVRkZJWAor
I2RlZmluZSBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FICJ2aWV3LXJlc3RvcmUiSUNPTl9OQU1F
X1NVRkZJWAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBnYm9vbGVhbiBoaWRlSHVk
Q2FsbGJhY2soRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAg
ICBjb250cm9sbGVyLT5oaWRlSHVkKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gb25GdWxsc2NyZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCwgIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsq
IGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2hvd0h1ZCh0cnVlKTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgb25GdWxsc2NyZWVuR3RrQWN0aXZlTm90aWZpY2F0
aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHUGFyYW1TcGVjKiBwcm9wZXJ0eSwgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBpZiAoIWd0a193aW5kb3dfaXNf
YWN0aXZlKEdUS19XSU5ET1cod2lkZ2V0KSkpCisgICAgICAgIGNvbnRyb2xsZXItPmhpZGVIdWQo
KTsKK30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNjcmVlbkd0a0NvbmZpZ3VyZUV2ZW50KEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudENvbmZpZ3VyZSogZXZlbnQsIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+Z3RrQ29uZmln
dXJlKGV2ZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgb25GdWxsc2Ny
ZWVuR3RrRGVzdHJveShHdGtXaWRnZXQqIHdpZGdldCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0RnVsbHNjcmVlbigpOwor
fQorCitzdGF0aWMgdm9pZCB0b2dnbGVQbGF5UGF1c2VBY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rp
b24sIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29u
dHJvbGxlci0+dG9nZ2xlUGxheSgpOworfQorCitzdGF0aWMgdm9pZCBleGl0RnVsbHNjcmVlbkFj
dGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayog
Y29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0T25Vc2VyUmVxdWVzdCgpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gcHJvZ3Jlc3NCYXJVcGRhdGVDYWxsYmFjayhGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIHJldHVybiBjb250cm9sbGVyLT51
cGRhdGVIdWRQcm9ncmVzc0JhcigpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZVNjYWxlQnV0
dG9uUHJlc3NlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50LCBGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIGlmIChldmVudC0+
dHlwZSAhPSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBj
b250cm9sbGVyLT5iZWdpblNlZWsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB0aW1lU2NhbGVCdXR0b25SZWxlYXNlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnRCdXR0b24qIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVy
KQoreworICAgIGNvbnRyb2xsZXItPmVuZFNlZWsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyB2b2lkIHRpbWVTY2FsZVZhbHVlQ2hhbmdlZChHdGtXaWRnZXQqIHdpZGdldCwgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVy
LT5kb1NlZWsoKTsKK30KKworc3RhdGljIHZvaWQgdm9sdW1lVmFsdWVDaGFuZ2VkKEd0a1NjYWxl
QnV0dG9uICpidXR0b24sIGdkb3VibGUgdmFsdWUsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2V0Vm9sdW1lKHN0YXRpY19jYXN0
PGZsb2F0Pih2YWx1ZSkpOworfQorCisKK0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OkZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSogcGxheWVyKQorICAgIDogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lcihwbGF5
ZXIpCisgICAgLCBtX2h1ZFRpbWVvdXRJZCgwKQorICAgICwgbV9wcm9ncmVzc0JhclVwZGF0ZUlk
KDApCisgICAgLCBtX3NlZWtMb2NrKGZhbHNlKQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1f
aHVkV2luZG93KDApCisgICAgLCBtX3ZvbHVtZUJ1dHRvbigwKQorICAgICwgbV9rZXlQcmVzc1Np
Z25hbElkKDApCisgICAgLCBtX2Rlc3Ryb3lTaWduYWxJZCgwKQorICAgICwgbV9pc0FjdGl2ZVNp
Z25hbElkKDApCisgICAgLCBtX21vdGlvbk5vdGlmeVNpZ25hbElkKDApCisgICAgLCBtX2NvbmZp
Z3VyZUV2ZW50U2lnbmFsSWQoMCkKKyAgICAsIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQoMCkK
KyAgICAsIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkKDApCisgICAgLCBtX3RpbWVT
Y2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQoMCkKKyAgICAsIG1fcGxheUFjdGlvbkFjdGl2YXRl
U2lnbmFsSWQoMCkKKyAgICAsIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQo
MCkKK3sKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpndGtDb25maWd1
cmUoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQoreworICAgIHVwZGF0ZUh1ZFBvc2l0aW9uKCk7
Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6c2hvd0h1ZChib29sIGF1
dG9IaWRlKQoreworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1l
b3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQorCisgICAgLy8gU2hv
dyB0aGUgY3Vyc29yLgorICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KG1fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCAwKTsKKwor
ICAgIC8vIFVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyIGltbWVkaWF0ZWx5IGJlZm9yZSBzaG93aW5n
IHRoZSB3aW5kb3cuCisgICAgdXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsKKyAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsKG1faHVkV2luZG93KTsKKyAgICB1cGRhdGVIdWRQb3NpdGlvbigpOworCisgICAg
Ly8gU3RhcnQgcGVyaW9kaWMgdXBkYXRlcyBvZiB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIGlmICgh
bV9wcm9ncmVzc0JhclVwZGF0ZUlkKQorICAgICAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSBn
X3RpbWVvdXRfYWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2spLCB0aGlzKTsKKworICAg
IC8vIEhpZGUgdGhlIGh1ZCBpbiBmZXcgc2Vjb25kcywgaWYgcmVxdWVzdGVkLgorICAgIGlmIChh
dXRvSGlkZSkKKyAgICAgICAgbV9odWRUaW1lb3V0SWQgPSBnX3RpbWVvdXRfYWRkKEhVRF9BVVRP
X0hJREVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGhpZGVIdWRDYWxs
YmFjayksIHRoaXMpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Omhp
ZGVIdWQoKQoreworICAgIGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAg
fQorCisgICAgaWYgKCFtX2h1ZFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gS2Vl
cCB0aGUgaHVkIHZpc2libGUgaWYgYSBzZWVrIGlzIGluIHByb2dyZXNzIG9yIGlmIHRoZSB2b2x1
bWUKKyAgICAvLyBwb3B1cCBpcyB2aXNpYmxlLgorICAgIEd0a1dpZGdldCogdm9sdW1lUG9wdXAg
PSBndGtfc2NhbGVfYnV0dG9uX2dldF9wb3B1cChHVEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0
dG9uKSk7CisgICAgaWYgKG1fc2Vla0xvY2sgfHwgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh2b2x1
bWVQb3B1cCkpIHsKKyAgICAgICAgc2hvd0h1ZCh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2lu
ZG93KTsKKyAgICBHZGtDdXJzb3IqIGN1cnNvciA9IGJsYW5rQ3Vyc29yKCk7CisgICAgZ2RrX3dp
bmRvd19zZXRfY3Vyc29yKHdpbmRvdywgY3Vyc29yKTsKKworICAgIGd0a193aWRnZXRfaGlkZSht
X2h1ZFdpbmRvdyk7CisKKyAgICBpZiAobV9wcm9ncmVzc0JhclVwZGF0ZUlkKSB7CisgICAgICAg
IGdfc291cmNlX3JlbW92ZShtX3Byb2dyZXNzQmFyVXBkYXRlSWQpOworICAgICAgICBtX3Byb2dy
ZXNzQmFyVXBkYXRlSWQgPSAwOworICAgIH0KK30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNj
cmVlbkd0a0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVu
dCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBzd2l0
Y2ggKGV2ZW50LT5rZXl2YWwpIHsKKyAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgIGNvbnRy
b2xsZXItPmV4aXRPblVzZXJSZXF1ZXN0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RL
X3NwYWNlOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgY29udHJvbGxlci0+dG9nZ2xl
UGxheSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19VcDoKKyAgICAgICAgY29udHJv
bGxlci0+aW5jcmVhc2VWb2x1bWUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfRG93
bjoKKyAgICAgICAgY29udHJvbGxlci0+ZGVjcmVhc2VWb2x1bWUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6aW5pdGlhbGl6ZVdpbmRv
dygpCit7CisgICAgbV93aW5kb3cgPSByZWludGVycHJldF9jYXN0PEd0a1dpZGdldCo+KG1fZ3N0
cmVhbWVyR1dvcmxkLT5wbGF0Zm9ybVZpZGVvV2luZG93KCktPndpbmRvdygpKTsKKworICAgIGlm
ICghbV9odWRXaW5kb3cpCisgICAgICAgIGNyZWF0ZUh1ZCgpOworCisgICAgLy8gRW5zdXJlIGJs
YWNrIGJhY2tncm91bmQuCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHZGtDb2xvciBj
b2xvciA9IHsgMSwgMCwgMCwgMCB9OworICAgIGd0a193aWRnZXRfbW9kaWZ5X2JnKG1fd2luZG93
LCBHVEtfU1RBVEVfTk9STUFMLCAmY29sb3IpOworI2Vsc2UKKyAgICBHZGtSR0JBIGNvbG9yID0g
eyAwLCAwLCAwLCAxfTsKKyAgICBndGtfd2lkZ2V0X292ZXJyaWRlX2JhY2tncm91bmRfY29sb3Io
bV93aW5kb3csIEdUS19TVEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKKyNlbmRpZgorICAgIGd0
a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChtX3dpbmRvdywgRkFMU0UpOworCisgICAgbV9r
ZXlQcmVzc1NpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImtleS1wcmVzcy1l
dmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrS2V5UHJlc3NFdmVudCksIHRoaXMpOwor
ICAgIG1fZGVzdHJveVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImRlc3Ry
b3kiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3kpLCB0aGlzKTsKKyAgICBtX2lz
QWN0aXZlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAibm90aWZ5Ojppcy1h
Y3RpdmUiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0FjdGl2ZU5vdGlmaWNhdGlvbiksIHRo
aXMpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7CisKKyAgICBHZGtXaW5k
b3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7CisgICAgR1JlZlB0
cjxHZGtDdXJzb3I+IGN1cnNvcihhZG9wdEdSZWYoYmxhbmtDdXJzb3IoKSkpOworICAgIGdka193
aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNvci5nZXQoKSk7CisKKyAgICBtX21vdGlvbk5v
dGlmeVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgIm1vdGlvbi1ub3RpZnkt
ZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KSwgdGhp
cyk7CisgICAgbV9jb25maWd1cmVFdmVudFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dp
bmRvdywgImNvbmZpZ3VyZS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrQ29uZmln
dXJlRXZlbnQpLCB0aGlzKTsKKworICAgIGd0a193aW5kb3dfZnVsbHNjcmVlbihHVEtfV0lORE9X
KG1fd2luZG93KSk7CisgICAgc2hvd0h1ZCh0cnVlKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrOjp1cGRhdGVIdWRQb3NpdGlvbigpCit7CisgICAgaWYgKCFtX2h1ZFdp
bmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBzY3JlZW4gcmVjdGFuZ2xl
LgorICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpbmRvd19nZXRfc2NyZWVuKEdUS19XSU5E
T1cobV93aW5kb3cpKTsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dp
bmRvdyhtX3dpbmRvdyk7CisgICAgR2RrUmVjdGFuZ2xlIGZ1bGxzY3JlZW5SZWN0YW5nbGU7Cisg
ICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIGdka19zY3JlZW5fZ2V0
X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93KSwgJmZ1bGxzY3JlZW5SZWN0YW5nbGUp
OworCisgICAgLy8gR2V0IHRoZSBwb3B1cCB3aW5kb3cgc2l6ZS4KKyAgICBpbnQgaHVkV2lkdGgs
IGh1ZEhlaWdodDsKKyAgICBndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5ET1cobV9odWRXaW5k
b3cpLCAmaHVkV2lkdGgsICZodWRIZWlnaHQpOworCisgICAgLy8gUmVzaXplIHRoZSBodWQgdG8g
dGhlIGZ1bGwgd2lkdGggb2YgdGhlIHNjcmVlbi4KKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtf
V0lORE9XKG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3RhbmdsZS53aWR0aCwgaHVkSGVpZ2h0
KTsKKworICAgIC8vIE1vdmUgdGhlIGh1ZCB0byB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uCisg
ICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBmdWxsc2NyZWVuUmVj
dGFuZ2xlLngsIGZ1bGxzY3JlZW5SZWN0YW5nbGUuaGVpZ2h0ICsgZnVsbHNjcmVlblJlY3Rhbmds
ZS55IC0gaHVkSGVpZ2h0KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
OjpkZXN0cm95V2luZG93KCkKK3sKKyAgICBpZiAoIW1faHVkV2luZG93KQorICAgICAgICByZXR1
cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fa2V5UHJl
c3NTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBt
X2Rlc3Ryb3lTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2lu
ZG93LCBtX2lzQWN0aXZlU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dChtX3dpbmRvdywgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0KG1fd2luZG93LCBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFsSWQpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2h1ZFdpbmRvdywgbV9odWRNb3Rpb25Ob3RpZnlT
aWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhTY2FsZSwg
bV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRTaWduYWxJ
ZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhTY2FsZSwgbV9oc2Nh
bGVVcGRhdGVJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdm9sdW1lQnV0
dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qo
bV9wbGF5UGF1c2VBY3Rpb24sIG1fcGxheUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQpOworICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2V4aXRGdWxsc2NyZWVuQWN0aW9uLCBtX2V4aXRG
dWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKTsKKworICAgIGlmIChtX2h1ZFRpbWVvdXRJ
ZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBt
X2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcHJvZ3Jlc3NCYXJVcGRhdGVJ
ZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0JhclVwZGF0ZUlkKTsKKyAg
ICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gMDsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0
X2hpZGUobV93aW5kb3cpOworCisgICAgaWYgKG1faHVkV2luZG93KQorICAgICAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kobV9odWRXaW5kb3cpOworICAgIG1faHVkV2luZG93ID0gMDsKK30KKwordm9p
ZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpwbGF5U3RhdGVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9jbGllbnQtPm1lZGlhUGxheWVySXNQYXVzZWQoKSkKKyAgICAgICAgZ19vYmplY3Rf
c2V0KG1fcGxheVBhdXNlQWN0aW9uLCAidG9vbHRpcCIsIF8oIlBsYXkiKSwgImljb24tbmFtZSIs
IFBMQVlfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGdfb2JqZWN0X3NldCht
X3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0aXAiLCBfKCJQYXVzZSIpLCAiaWNvbi1uYW1lIiwgUEFV
U0VfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBzaG93SHVkKCFtX2NsaWVudC0+bWVkaWFQbGF5ZXJJ
c1BhdXNlZCgpKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjp2b2x1
bWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fdm9sdW1lQnV0dG9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Jsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVw
ZGF0ZUlkKTsKKyAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9O
KG1fdm9sdW1lQnV0dG9uKSwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOworfQorCit2b2lk
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Om11dGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
IW1fdm9sdW1lQnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVy
X2Jsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBndGtfc2NhbGVf
YnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0dG9uKSwgbV9wbGF5
ZXItPm11dGVkKCkgPyAwIDogbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOworfQorCit2b2lk
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmJlZ2luU2VlaygpCit7CisgICAgbV9zZWVr
TG9jayA9IHRydWU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZG9T
ZWVrKCkKK3sKKyAgICBpZiAoIW1fc2Vla0xvY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGxheWVyLT5zZWVrKGd0a19yYW5nZV9nZXRfdmFsdWUoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSkp
Km1fcGxheWVyLT5kdXJhdGlvbigpIC8gMTAwKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjplbmRTZWVrKCkKK3sKKyAgICBtX3NlZWtMb2NrID0gZmFsc2U7Cit9CisK
K2dib29sZWFuIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnVwZGF0ZUh1ZFByb2dyZXNz
QmFyKCkKK3sKKyAgICBmbG9hdCBtZWRpYUR1cmF0aW9uKG1fcGxheWVyLT5kdXJhdGlvbigpKTsK
KyAgICBmbG9hdCBtZWRpYVBvc2l0aW9uKG1fcGxheWVyLT5jdXJyZW50VGltZSgpKTsKKworICAg
IGlmICghbV9zZWVrTG9jaykgeworICAgICAgICBnZG91YmxlIHZhbHVlID0gMC4wOworCisgICAg
ICAgIGlmIChtZWRpYVBvc2l0aW9uICYmIG1lZGlhRHVyYXRpb24pCisgICAgICAgICAgICB2YWx1
ZSA9IChtZWRpYVBvc2l0aW9uICogMTAwLjApIC8gbWVkaWFEdXJhdGlvbjsKKworICAgICAgICBH
dGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gZ3RrX3JhbmdlX2dldF9hZGp1c3RtZW50KEdUS19S
QU5HRShtX3RpbWVIU2NhbGUpKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFk
anVzdG1lbnQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBndGtfcmFuZ2Vfc2V0X2ZpbGxfbGV2ZWwo
R1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIChtX3BsYXllci0+bWF4VGltZUxvYWRlZCgpIC8gbWVk
aWFEdXJhdGlvbikqIDEwMCk7CisKKyAgICBnY2hhciogbGFiZWwgPSBnX3N0cmR1cF9wcmludGYo
IiVzIC8gJXMiLCB0aW1lVG9TdHJpbmcobWVkaWFQb3NpdGlvbikudXRmOCgpLmRhdGEoKSwgdGlt
ZVRvU3RyaW5nKG1lZGlhRHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOworICAgIGd0a19sYWJlbF9z
ZXRfdGV4dChHVEtfTEFCRUwobV90aW1lTGFiZWwpLCBsYWJlbCk7CisgICAgZ19mcmVlKGxhYmVs
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrOjpjcmVhdGVIdWQoKQoreworICAgIG1faHVkV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19QT1BVUCk7CisgICAgZ3RrX3dpbmRvd19zZXRfZ3Jhdml0eShHVEtfV0lORE9XKG1f
aHVkV2luZG93KSwgR0RLX0dSQVZJVFlfU09VVEhfV0VTVCk7CisgICAgZ3RrX3dpbmRvd19zZXRf
dHlwZV9oaW50KEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBHREtfV0lORE9XX1RZUEVfSElOVF9O
T1JNQUwpOworCisgICAgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5l
Y3QobV9odWRXaW5kb3csICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxz
Y3JlZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMpOworCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDQpOworI2Vs
c2UKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9S
SVpPTlRBTCwgNCk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KG1faHVkV2luZG93KSwgaGJveCk7CisKKyAgICBtX3BsYXlQYXVzZUFjdGlvbiA9IGd0a19hY3Rp
b25fbmV3KCJwbGF5IiwgXygiUGxheSAvIFBhdXNlIiksIF8oIlBsYXkgb3IgcGF1c2UgdGhlIG1l
ZGlhIiksIFBBVVNFX0lDT05fTkFNRSk7CisgICAgbV9wbGF5QWN0aW9uQWN0aXZhdGVTaWduYWxJ
ZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5UGF1c2VBY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FM
TEJBQ0sodG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKSwgdGhpcyk7CisKKyAgICBHdGtXaWRnZXQq
IGl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV90b29sX2l0ZW0obV9wbGF5UGF1c2VBY3Rpb24pOwor
ICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBpdGVtLCBGQUxTRSwgVFJVRSwg
MCk7CisKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhfKCJUaW1lOiIpKTsK
KyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbGFiZWwsIEZBTFNFLCBUUlVF
LCAwKTsKKworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBHVEtfQURKVVNUTUVOVChn
dGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDEwMC4wLCAwLjEsIDEuMCwgMS4wKSk7CisjaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBtX3RpbWVIU2NhbGUgPSBndGtfaHNjYWxlX25ldyhh
ZGp1c3RtZW50KTsKKyNlbHNlCisgICAgbV90aW1lSFNjYWxlID0gZ3RrX3NjYWxlX25ldyhHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgYWRqdXN0bWVudCk7CisjZW5kaWYKKyAgICBndGtfc2Nh
bGVfc2V0X2RyYXdfdmFsdWUoR1RLX1NDQUxFKG1fdGltZUhTY2FsZSksIEZBTFNFKTsKKyAgICBn
dGtfcmFuZ2Vfc2V0X3Nob3dfZmlsbF9sZXZlbChHVEtfUkFOR0UobV90aW1lSFNjYWxlKSwgVFJV
RSk7CisgICAgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25u
ZWN0KG1fdGltZUhTY2FsZSwgImJ1dHRvbi1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0sodGltZVNj
YWxlQnV0dG9uUHJlc3NlZCksIHRoaXMpOworICAgIG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRT
aWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAiYnV0dG9uLXJlbGVhc2Ut
ZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZUJ1dHRvblJlbGVhc2VkKSwgdGhpcyk7CisgICAg
bV9oc2NhbGVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAidmFsdWUt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGltZVNjYWxlVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAg
ICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbV90aW1lSFNjYWxlLCBUUlVFLCBU
UlVFLCAwKTsKKworICAgIG1fdGltZUxhYmVsID0gZ3RrX2xhYmVsX25ldygiIik7CisgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUxhYmVsLCBGQUxTRSwgVFJVRSwg
MCk7CisKKyAgICAvLyBWb2x1bWUgYnV0dG9uLgorICAgIG1fdm9sdW1lQnV0dG9uID0gZ3RrX3Zv
bHVtZV9idXR0b25fbmV3KCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCks
IG1fdm9sdW1lQnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX3NjYWxlX2J1dHRvbl9z
ZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT52b2x1
bWUoKSk7CisgICAgbV92b2x1bWVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV92b2x1bWVC
dXR0b24sICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2b2x1bWVWYWx1ZUNoYW5nZWQpLCB0
aGlzKTsKKworICAgIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24gPSBndGtfYWN0aW9uX25ldygiZXhp
dCIsIF8oIkV4aXQgRnVsbHNjcmVlbiIpLCBfKCJFeGl0IGZyb20gZnVsbHNjcmVlbiBtb2RlIiks
IEVYSVRfRlVMTFNDUkVFTl9JQ09OX05BTUUpOworICAgIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFj
dGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24s
ICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soZXhpdEZ1bGxzY3JlZW5BY3RpdmF0ZWQpLCB0aGlzKTsK
KyAgICBnX29iamVjdF9zZXQobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgImljb24tbmFtZSIsIEVY
SVRfRlVMTFNDUkVFTl9JQ09OX05BTUUsIE5VTEwpOworICAgIGl0ZW0gPSBndGtfYWN0aW9uX2Ny
ZWF0ZV90b29sX2l0ZW0obV9leGl0RnVsbHNjcmVlbkFjdGlvbik7CisgICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1goaGJveCksIGl0ZW0sIEZBTFNFLCBUUlVFLCAwKTsKKworICAgIG1fcHJv
Z3Jlc3NCYXJVcGRhdGVJZCA9IGdfdGltZW91dF9hZGQoUFJPR1JFU1NfQkFSX1VQREFURV9JTlRF
UlZBTCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocHJvZ3Jlc3NCYXJVcGRhdGVDYWxs
YmFjayksIHRoaXMpOworCisgICAgcGxheVN0YXRlQ2hhbmdlZCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3Jh
cGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU3
NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQxYjJjNDNiNjkxNDRiYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
ay5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBT
LkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKKyNk
ZWZpbmUgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCisKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKKworI2lu
Y2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrIDogcHVibGlj
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIgeworcHVibGljOgorICAgIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSop
OworCisgICAgdm9pZCBndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUqKTsKKworICAgIHZv
aWQgcGxheVN0YXRlQ2hhbmdlZCgpOworCisgICAgdm9pZCBiZWdpblNlZWsoKTsKKyAgICB2b2lk
IGRvU2VlaygpOworICAgIHZvaWQgZW5kU2VlaygpOworCisgICAgdm9pZCBoaWRlSHVkKCk7Cisg
ICAgdm9pZCBzaG93SHVkKGJvb2wpOworICAgIGdib29sZWFuIHVwZGF0ZUh1ZFByb2dyZXNzQmFy
KCk7CisKKyAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICB2b2lkIG11dGVDaGFuZ2VkKCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplV2luZG93KCk7CisgICAgdm9pZCBkZXN0
cm95V2luZG93KCk7CisKKyAgICB2b2lkIGNyZWF0ZUh1ZCgpOworICAgIHZvaWQgdXBkYXRlSHVk
UG9zaXRpb24oKTsKKworICAgIGd1aW50IG1faHVkVGltZW91dElkOworICAgIGd1aW50IG1fcHJv
Z3Jlc3NCYXJVcGRhdGVJZDsKKyAgICBndWludCBtX3Byb2dyZXNzQmFyRmlsbFVwZGF0ZUlkOwor
ICAgIGd1aW50IG1faHNjYWxlVXBkYXRlSWQ7CisgICAgZ3VpbnQgbV92b2x1bWVVcGRhdGVJZDsK
KyAgICBib29sIG1fc2Vla0xvY2s7CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsKKyAgICBHdGtX
aWRnZXQqIG1faHVkV2luZG93OworICAgIEd0a0FjdGlvbiogbV9wbGF5UGF1c2VBY3Rpb247Cisg
ICAgR3RrQWN0aW9uKiBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uOworICAgIEd0a1dpZGdldCogbV90
aW1lSFNjYWxlOworICAgIEd0a1dpZGdldCogbV90aW1lTGFiZWw7CisgICAgR3RrV2lkZ2V0KiBt
X3ZvbHVtZUJ1dHRvbjsKKworICAgIHVuc2lnbmVkIGxvbmcgbV9rZXlQcmVzc1NpZ25hbElkOwor
ICAgIHVuc2lnbmVkIGxvbmcgbV9kZXN0cm95U2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBt
X2lzQWN0aXZlU2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBtX21vdGlvbk5vdGlmeVNpZ25h
bElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9jb25maWd1cmVFdmVudFNpZ25hbElkOworICAgIHVu
c2lnbmVkIGxvbmcgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25n
IG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV90
aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9wbGF5
QWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXhpdEZ1bGxjcmVl
bkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQ7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODAxOGEzMGYwYzQx
ZTBlNGNlNWRjYzM4NGE5NTE5ZjU0NzA0NWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkd0
a1ZlcnNpb25pbmcuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorCitHZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKQoreworICAgIHJldHVybiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uo
c3VyZmFjZSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtD
YWlyb1V0aWxpdGllcy5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0
aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmNWIzZWRlZmMxMTFkYjk0NmUzMmFjODFkMGZjMmEwNTBj
ZTAyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dk
a0NhaXJvVXRpbGl0aWVzLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2RrQ2Fpcm9VdGlsaXRpZXNfaAorI2Rl
ZmluZSBHZGtDYWlyb1V0aWxpdGllc19oCisKK0dka1BpeGJ1ZiogY2Fpcm9JbWFnZVN1cmZhY2VU
b0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOworCisjZW5kaWYgLy8gR2RrQ2Fp
cm9VdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9J
Y29uR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2U5NTdiMzQ1Y2U1ZmIyNzExYTEwYzY2ODAyNTNkYzUyNGVjODhmNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0ay5jcHAKQEAg
LTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ljb246Okljb24oKQorICAgIDog
bV9pY29uKDApCit7Cit9CisKK0ljb246On5JY29uKCkKK3sKKyAgICBpZiAobV9pY29uKQorICAg
ICAgICBnX29iamVjdF91bnJlZihtX2ljb24pOworfQorCitzdGF0aWMgU3RyaW5nIGxvb2t1cElj
b25OYW1lKFN0cmluZyBNSU1FVHlwZSkKK3sKKyAgICAvKgorICAgICBMb29rdXAgYW4gYXBwcm9w
cmlhdGUgaWNvbiBhY2NvcmRpbmcgdG8gZWl0aGVyIHRoZSBJY29uIE5hbWluZyBTcGVjCisgICAg
IG9yIGNvbnZlbnRpb25hbCBHbm9tZSBpY29uIG5hbWVzIHJlc3BlY3RpdmVseS4KKworICAgICBT
ZWUgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvaWNvbi1uYW1pbmctc3BlYy9pY29u
LW5hbWluZy1zcGVjLWxhdGVzdC5odG1sCisKKyAgICAgVGhlIGljb24gdGhlbWUgaXMgcHJvYmVk
IGZvciB0aGUgZm9sbG93aW5nIG5hbWVzOgorICAgICAxLiBtZWRpYS1zdWJ0eXBlCisgICAgIDIu
IGdub21lLW1pbWUtbWVkaWEtc3VidHlwZQorICAgICAzLiBtZWRpYS14LWdlbmVyaWMKKyAgICAg
NC4gZ25vbWUtbWltZS1tZWRpYQorCisgICAgIEluIHRoZSB3b3JzdCBjYXNlIGl0IGZhbGxzIGJh
Y2sgdG8gdGhlIHN0b2NrIGZpbGUgaWNvbi4KKyAgICAqLworICAgIGludCBwb3MgPSBNSU1FVHlw
ZS5maW5kKCcvJyk7CisgICAgaWYocG9zID49IDApIHsKKyAgICAgICAgU3RyaW5nIG1lZGlhID0g
TUlNRVR5cGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIFN0cmluZyBzdWJ0eXBlID0gTUlN
RVR5cGUuc3Vic3RyaW5nKHBvcyArIDEpOworICAgICAgICBHdGtJY29uVGhlbWUqIGljb25UaGVt
ZSA9IGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCk7CisgICAgICAgIFN0cmluZyBpY29uTmFt
ZSA9IG1lZGlhICsgIi0iICsgc3VidHlwZTsKKyAgICAgICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFz
X2ljb24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBpY29uTmFtZTsKKyAgICAgICAgaWNvbk5hbWUgPSAiZ25vbWUtbWltZS0iICsgbWVkaWEg
KyAiLSIgKyBzdWJ0eXBlOworICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29u
VGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGljb25O
YW1lOworICAgICAgICBpY29uTmFtZSA9IG1lZGlhICsgIi14LWdlbmVyaWMiOworICAgICAgICBp
ZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRh
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOworICAgICAgICBpY29uTmFtZSA9IG1l
ZGlhICsgImdub21lLW1pbWUtIiArIG1lZGlhOworICAgICAgICBpZihndGtfaWNvbl90aGVtZV9o
YXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAg
cmV0dXJuIGljb25OYW1lOworICAgIH0KKyAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTEU7Cit9CisK
Ky8vIEZJWE1FOiBNb3ZlIHRoZSBjb2RlIHRvIENocm9tZUNsaWVudDo6aWNvbkZvckZpbGVzKCku
CitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKKyAgICAg
ICAgaWYgKCFnX3BhdGhfc2tpcF9yb290KGZpbGVuYW1lc1swXS51dGY4KCkuZGF0YSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBNSU1FVHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlbmFtZXNbMF0pOworICAgICAgICBTdHJp
bmcgaWNvbk5hbWUgPSBsb29rdXBJY29uTmFtZShNSU1FVHlwZSk7CisKKyAgICAgICAgUmVmUHRy
PEljb24+IGljb24gPSBhZG9wdFJlZihuZXcgSWNvbik7CisgICAgICAgIGljb24tPm1faWNvbiA9
IGd0a19pY29uX3RoZW1lX2xvYWRfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBp
Y29uTmFtZS51dGY4KCkuZGF0YSgpLCAxNiwgR1RLX0lDT05fTE9PS1VQX1VTRV9CVUlMVElOLCAw
KTsKKyAgICAgICAgaWYgKCFpY29uLT5tX2ljb24pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIGljb24ucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vRklYTUU6IEltcGxl
bWVudCB0aGlzCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRPRE86IFNj
YWxlL2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KKyAgICBjYWlyb190KiBjciA9IGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGdk
a19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgbV9pY29uLCByZWN0LngoKSwgcmVjdC55KCkp
OworICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUJ1ZmZlckd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlQnVmZmVyR3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NmZmNTNiNGZlMTExZDI0MzAyMjlmNjAzNjc2N2FjYTdlYmQ0ZDg1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFnZUJ1ZmZlckd0ay5j
cHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiR1JlZlB0ckd0
ay5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUq
IHF1YWxpdHksIEdPd25QdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQorewor
ICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20g
dGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25v
bWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGst
cGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJz
dHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9
ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1w
IikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1
ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1
cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRh
VVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291
cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEu
CisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9f
Rk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
c3VyZmFjZSkpKTsKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNl
VG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhi
dWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Cisg
ICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdFcnJvciogZXJy
b3IgPSAwOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcg
PSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAg
KyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCks
ICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJv
ciwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworICAgIH0g
ZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1
ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLCBO
VUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgQ29v
cmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIEdPd25Q
dHI8Z2NoYXI+IGJ1ZmZlcigwKTsKKyAgICBnc2l6ZSBidWZmZXJTaXplOworICAgIGlmICghZW5j
b2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVm
ZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUsIGJh
c2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dy
YXBoaWNzL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlkOWZiZWZmMDI1ODQyYzJmMWY4NWVkNDk5ZjY0MTU5MjBlNDUy
ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdl
R3RrLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdPd25QdHJH
dGsuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNoYXIqIGdldFBhdGhUb0ltYWdlUmVzb3VyY2UoY2hh
ciogcmVzb3VyY2UpCit7CisgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVRfVE9QX0xFVkVMIikpCisg
ICAgICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0ZW52KCJXRUJLSVRfVE9QX0xFVkVM
IiksICJTb3VyY2UiLCAiV2ViQ29yZSIsICJSZXNvdXJjZXMiLCByZXNvdXJjZSwgTlVMTCk7CisK
KyAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQYXRoKCkuZGF0YSgp
LCAiaW1hZ2VzIiwgcmVzb3VyY2UsIE5VTEwpOworfQorCitzdGF0aWMgQ1N0cmluZyBnZXRUaGVt
ZUljb25GaWxlTmFtZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKK3sKKyAgICBHdGtJY29u
SW5mbyogaWNvbkluZm8gPSBndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVt
ZV9nZXRfZGVmYXVsdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUsIHNpemUsIEdUS19JQ09OX0xPT0tVUF9OT19TVkcpOworICAg
IC8vIFRyeSB0byBmYWxsYmFjayBvbiBNSVNTSU5HX0lNQUdFLgorICAgIGlmICghaWNvbkluZm8p
CisgICAgICAgIGljb25JbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2ljb24oZ3RrX2ljb25f
dGhlbWVfZ2V0X2RlZmF1bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwgc2l6ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfSUNPTl9MT09LVVBfTk9fU1ZHKTsK
KyAgICBpZiAoaWNvbkluZm8pIHsKKyAgICAgICAgR093blB0cjxHdGtJY29uSW5mbz4gaW5mbyhp
Y29uSW5mbyk7CisgICAgICAgIHJldHVybiBDU3RyaW5nKGd0a19pY29uX2luZm9fZ2V0X2ZpbGVu
YW1lKGluZm8uZ2V0KCkpKTsKKyAgICB9CisKKyAgICAvLyBObyBpY29uIHdhcyBmb3VuZCwgdGhp
cyBjYW4gaGFwcGVuIGlmIG5vdCBHVEsgdGhlbWUgaXMgc2V0LiBJbgorICAgIC8vIHRoYXQgY2Fz
ZSBhbiBlbXB0eSBJbWFnZSB3aWxsIGJlIGNyZWF0ZWQuCisgICAgcmV0dXJuIENTdHJpbmcoKTsK
K30KKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVzb3VyY2VTaGFyZWRC
dWZmZXIoQ1N0cmluZyBuYW1lKQoreworICAgIEdPd25QdHI8Z2NoYXI+IGNvbnRlbnQ7CisgICAg
Z3NpemUgbGVuZ3RoOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhuYW1lLmRhdGEoKSwg
JmNvbnRlbnQub3V0UHRyKCksICZsZW5ndGgsIDApKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoKTsKKworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50
LmdldCgpLCBsZW5ndGgpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKCkKK3sKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gbG9hZEltYWdlRnJvbUZpbGUoQ1N0
cmluZyBmaWxlTmFtZSkKK3sKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGltZyA9IEJpdG1hcElt
YWdlOjpjcmVhdGUoKTsKKyAgICBpZiAoIWZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihmaWxl
TmFtZSk7CisgICAgICAgIGltZy0+c2V0RGF0YShidWZmZXIucmVsZWFzZSgpLCB0cnVlKTsKKyAg
ICB9CisgICAgcmV0dXJuIGltZy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIENTdHJp
bmcgZmlsZU5hbWU7CisgICAgaWYgKCFzdHJjbXAoIm1pc3NpbmdJbWFnZSIsIG5hbWUpKQorICAg
ICAgICBmaWxlTmFtZSA9IGdldFRoZW1lSWNvbkZpbGVOYW1lKEdUS19TVE9DS19NSVNTSU5HX0lN
QUdFLCAxNik7CisgICAgaWYgKGZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIEdPd25QdHI8
Z2NoYXI+IGltYWdlTmFtZShnX3N0cmR1cF9wcmludGYoIiVzLnBuZyIsIG5hbWUpKTsKKyAgICAg
ICAgR093blB0cjxnY2hhcj4gZ2xpYkZpbGVOYW1lKGdldFBhdGhUb0ltYWdlUmVzb3VyY2UoaW1h
Z2VOYW1lLmdldCgpKSk7CisgICAgICAgIGZpbGVOYW1lID0gZ2xpYkZpbGVOYW1lLmdldCgpOwor
ICAgIH0KKworICAgIHJldHVybiBsb2FkSW1hZ2VGcm9tRmlsZShmaWxlTmFtZSk7Cit9CisKK1Bh
c3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24oY29uc3QgY2hhciog
bmFtZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIGxvYWRJbWFnZUZyb21GaWxlKGdldFRoZW1l
SWNvbkZpbGVOYW1lKG5hbWUsIHNpemUpKTsKK30KKworR2RrUGl4YnVmKiBCaXRtYXBJbWFnZTo6
Z2V0R2RrUGl4YnVmKCkKK3sKKyAgICBOYXRpdmVJbWFnZUNhaXJvKiBpbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIGltYWdlID8gY2Fpcm9JbWFnZVN1cmZh
Y2VUb0dka1BpeGJ1ZihpbWFnZS0+c3VyZmFjZSgpKSA6IDA7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQwMjE1ODFl
OGVkOTRhOWViZWMxZGVlYmM5NWJkMDEzMjU2NzM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwCkBAIC0wLDAgKzEsNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisKKyNpbmNsdWRlIDxnZGsv
Z2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6OkludFBvaW50KGNvbnN0
IEdka1BvaW50JiBwKQorICAgIDogbV94KHAueCkKKyAgICAsIG1feShwLnkpCit7Cit9CisKK0lu
dFBvaW50OjpvcGVyYXRvciBHZGtQb2ludCgpIGNvbnN0Cit7CisgICAgR2RrUG9pbnQgcCA9IHsg
eCgpLCB5KCkgfTsKKyAgICByZXR1cm4gcDsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBl
dApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRSZWN0R3RrLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWYzMTI4MTlhZmNhMTFhZDc3N2QzNDJjN2EzOTQwNjQ3OWYyMzU4ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5jcHAKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBHZGtSZWN0YW5nbGUmIHIpCisgICAg
OiBtX2xvY2F0aW9uKEludFBvaW50KHIueCwgci55KSkKKyAgICAsIG1fc2l6ZShyLndpZHRoLCBy
LmhlaWdodCkKK3sKK30KKworSW50UmVjdDo6b3BlcmF0b3IgR2RrUmVjdGFuZ2xlKCkgY29uc3QK
K3sKKyAgICBHZGtSZWN0YW5nbGUgciA9IHsgeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpIH07
CisgICAgcmV0dXJuIHI7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0
MjNmYTVkZWQyMjZkZWI5N2NlNzMzYjE3ZWRjMTliYjdjZDY5NDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAK
QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgor
CisjZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEKKyNkZWZpbmUgU0VDUkVUX0FQSV9TVUJK
RUNUX1RPX0NIQU5HRSAxCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNs
dWRlIDxsaWJzZWNyZXQvc2VjcmV0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVk
ZW50aWFsQmFja2luZ1N0b3JlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENyZWRlbnRp
YWxCYWNraW5nU3RvcmUsIGJhY2tpbmdTdG9yZSwgKCkpOworICAgIHJldHVybiBiYWNraW5nU3Rv
cmU7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdIYXNoVGFibGU+IGNyZWF0ZUF0dHJpYnV0ZUhhc2hU
YWJsZUZyb21DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IENyZWRlbnRpYWwoKSkKK3sKKyAgICBT
b3VwVVJJKiB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShjaGFsbGVuZ2Uuc291cE1lc3NhZ2Uo
KSk7CisgICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3Jl
dF9hdHRyaWJ1dGVzX2J1aWxkKAorICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JL
LAorICAgICAgICAiZG9tYWluIiwgc291cF9hdXRoX2dldF9yZWFsbShjaGFsbGVuZ2Uuc291cEF1
dGgoKSksCisgICAgICAgICJzZXJ2ZXIiLCB1cmktPmhvc3QsCisgICAgICAgICJwcm90b2NvbCIs
IHVyaS0+c2NoZW1lLAorICAgICAgICAiYXV0aHR5cGUiLCBzb3VwX2F1dGhfZ2V0X3NjaGVtZV9u
YW1lKGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKKyAgICAgICAgInBvcnQiLCB1cmktPnBvcnQsCisg
ICAgICAgIE5VTEwpKTsKKyAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGVzOworCisgICAgZ19oYXNoX3RhYmxlX2luc2VydChhdHRyaWJ1dGVzLmdl
dCgpLCBnX3N0cmR1cCgidXNlciIpLCBnX3N0cmR1cChjcmVkZW50aWFsLnVzZXIoKS51dGY4KCku
ZGF0YSgpKSk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Cit9CisKK3N0cnVjdCBDcmVkZW50aWFs
Rm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSB7CisgICAgQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZTo6Q3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZv
aWQqIGRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNS
ZWFkeUNhbGxiYWNrKFNlY3JldFNlcnZpY2UqIHNlcnZpY2UsIEdBc3luY1Jlc3VsdCogYXN5bmNS
ZXN1bHQsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxs
YmFja0RhdGEpCit7CisgICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3JlZGVudGlhbEZvckNo
YWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrID0gY2FsbGJhY2tEYXRhLT5jYWxsYmFjazsKKyAgICB2
b2lkKiBkYXRhID0gY2FsbGJhY2tEYXRhLT5kYXRhOworICAgIGRlbGV0ZSBjYWxsYmFja0RhdGE7
CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR093blB0cjxHTGlzdD4gZWxlbWVu
dHMoc2VjcmV0X3NlcnZpY2Vfc2VhcmNoX2ZpbmlzaChzZXJ2aWNlLCBhc3luY1Jlc3VsdCwgJmVy
cm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yIHx8ICFlbGVtZW50cyB8fCAhZWxlbWVudHMt
PmRhdGEpIHsKKyAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8U2VjcmV0SXRlbT4gc2VjcmV0SXRlbSA9IGFk
b3B0R1JlZihzdGF0aWNfY2FzdDxTZWNyZXRJdGVtKj4oZWxlbWVudHMtPmRhdGEpKTsKKyAgICBH
UmVmUHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0
X2F0dHJpYnV0ZXMoc2VjcmV0SXRlbS5nZXQoKSkpOworICAgIFN0cmluZyB1c2VyID0gU3RyaW5n
Ojpmcm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChh
dHRyaWJ1dGVzLmdldCgpLCAidXNlciIpKSk7CisgICAgaWYgKHVzZXIuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIEdSZWZQdHI8U2VjcmV0VmFsdWU+IHNlY3Jl
dFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9zZWNyZXQoc2VjcmV0SXRlbS5nZXQo
KSkpOworICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRGF0YSA9IHNlY3JldF92YWx1ZV9nZXQoc2Vj
cmV0VmFsdWUuZ2V0KCksICZsZW5ndGgpOworICAgIFN0cmluZyBwYXNzd29yZCA9IFN0cmluZzo6
ZnJvbVVURjgocGFzc3dvcmREYXRhLCBsZW5ndGgpOworCisgICAgY2FsbGJhY2soQ3JlZGVudGlh
bCh1c2VyLCBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KSwgZGF0YSk7
Cit9CisKK3ZvaWQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Y3JlZGVudGlhbEZvckNoYWxsZW5n
ZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsRm9y
Q2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGRhdGEpCit7CisgICAgLy8gVGhlIGRl
ZmF1bHQgZmxhZyBvbmx5IHJldHVybnMgdGhlIG1vc3QgcmVjZW50IGl0ZW0sIG5vdCBhbGwgb2Yg
dGhlbS4KKyAgICBTZWNyZXRTZWFyY2hGbGFncyBzZWFyY2hGbGFncyA9IHN0YXRpY19jYXN0PFNl
Y3JldFNlYXJjaEZsYWdzPihTRUNSRVRfU0VBUkNIX1VOTE9DSyB8IFNFQ1JFVF9TRUFSQ0hfTE9B
RF9TRUNSRVRTKTsKKyAgICBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNr
RGF0YSogY2FsbGJhY2tEYXRhID0gbmV3IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5
Q2FsbGJhY2tEYXRhOworICAgIGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAg
ICBjYWxsYmFja0RhdGEtPmRhdGEgPSBkYXRhOworCisgICAgc2VjcmV0X3NlcnZpY2Vfc2VhcmNo
KAorICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNyZXRTZXJ2aWNlLgorICAgICAgICBTRUNS
RVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorICAgICAgICBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFi
bGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSkuZ2V0KCksCisgICAgICAgIHNlYXJjaEZsYWdzLAor
ICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2sp
LAorICAgICAgICBjYWxsYmFja0RhdGEpOworfQorCit2b2lkIENyZWRlbnRpYWxCYWNraW5nU3Rv
cmU6OnN0b3JlQ3JlZGVudGlhbHNGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKK3sKKyAgICBD
U3RyaW5nIHV0ZjhQYXNzd29yZCA9IGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCk7CisgICAg
R1JlZlB0cjxTZWNyZXRWYWx1ZT4gbmV3U2VjcmV0VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X3Zh
bHVlX25ldyh1dGY4UGFzc3dvcmQuZGF0YSgpLCB1dGY4UGFzc3dvcmQubGVuZ3RoKCksICJ0ZXh0
L3BsYWluIikpOworCisgICAgc2VjcmV0X3NlcnZpY2Vfc3RvcmUoCisgICAgICAgIDAsIC8vIFRo
ZSBkZWZhdWx0IFNlY3JldFNlcnZpY2UuCisgICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05F
VFdPUkssCisgICAgICAgIGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hh
bGxlbmdlLCBjcmVkZW50aWFsKS5nZXQoKSwKKyAgICAgICAgU0VDUkVUX0NPTExFQ1RJT05fREVG
QVVMVCwKKyAgICAgICAgXygiV2ViS2l0R1RLKyBwYXNzd29yZCIpLAorICAgICAgICBuZXdTZWNy
ZXRWYWx1ZS5nZXQoKSwKKyAgICAgICAgMCwgLy8gY2FuY2VsbGFibGUKKyAgICAgICAgMCwgLy8g
Y2FsbGJhY2sKKyAgICAgICAgMCk7IC8vIGRhdGEKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFja2lu
Z1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBkYTlhMTU3ZmJjMTk2ZTYyODcwNDIyYWNlOWVmZTg5NzQ4
ZWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVk
ZW50aWFsQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCisjZGVm
aW5lIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwor
CitjbGFzcyBDcmVkZW50aWFsQmFja2luZ1N0b3JlIHsKK1dURl9NQUtFX05PTkNPUFlBQkxFKENy
ZWRlbnRpYWxCYWNraW5nU3RvcmUpOworcHVibGljOgorICAgIGZyaWVuZCBDcmVkZW50aWFsQmFj
a2luZ1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7CisgICAgdmlydHVhbCB+Q3JlZGVu
dGlhbEJhY2tpbmdTdG9yZSgpIHsgfQorCisgICAgdHlwZWRlZiB2b2lkICgqQ3JlZGVudGlhbEZv
ckNoYWxsZW5nZUNhbGxiYWNrKShjb25zdCBDcmVkZW50aWFsJiwgdm9pZCogZGF0YSk7CisKKyAg
ICB2b2lkIGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmLCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2ssIHZvaWQqIGRhdGEpOworICAgIHZv
aWQgc3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKK3ByaXZhdGU6CisgICAgQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZSgpIHsgfQorfTsKKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJh
Y2tpbmdTdG9yZSgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDcmVk
ZW50aWFsQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4
dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
NWU1YTA1ZmE0OTE5NWZiMzBiZjY5ZGVkNTYyZDU0M2I4YjYxMDE4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VH
dGsuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25z
dCBjaGFyKiBjdXJyZW50U2VhcmNoTG9jYWxlSUQoKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQg
dXNlIHN5c3RlbSBsb2NhbGUuCisgICAgcmV0dXJuICIiOworfQorCitjb25zdCBjaGFyKiBjdXJy
ZW50VGV4dEJyZWFrTG9jYWxlSUQoKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHN5c3Rl
bSBsb2NhbGUuCisgICAgcmV0dXJuICJlbl91cyI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggNDZkYjNmNjliMGRlOGIzY2EzZWJhZGFkYTE5YjQyZmY5MjRkM2JhOS4uMzlhYTQ0Yzcw
OTFjMGY0NjI1Y2E5ODcwNDg0MWFiZmQwMDc2M2E3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTc5LDcgKzc5LDYgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0IFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIgXApAQCAtMTIzLDgg
KzEyMiw2IEBAIHBsYXRmb3JtX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZyBcCiAJLUkkKHNyY2RpcikvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
ZW5jaGFudAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBkNTgwMmRjZDI2YWRk
NDlkNDRjOGY2NWNiOTM3OTliZGI2ZGUyZTJhLi44NjBjZTY5Mzc2MTc2ZGFjZjYwYzllZWIxN2M0
YTI4ODE0ZTYxZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MzEsMTYg
KzU3MzEsNiBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaW5kUnVsZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9XT0ZGRmlsZUZvcm1hdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dPRkZGaWxlRm9ybWF0LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNH
dGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmggXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0xhbmd1YWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dp
bmdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3Ry
eUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vS2lsbFJpbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25l
LmNwcCBcCkBAIC01ODk3LDggKzU4ODcsNiBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2Uu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlh
bEJhY2tpbmdTdG9yZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3Rr
L0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAgXApA
QCAtNjAwMSw3ICs1OTg5LDYgQEAgcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU3lzdGVtVGltZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBcCkBAIC02MTE4LDcgKzYxMDUsNiBAQCBwbGF0Zm9y
bWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9GcmFtZVNlbGVj
dGlvbkd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3Rr
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3JlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZS5jcHAgXApAQCAtNjE0MCw5MSArNjEyNiwxMCBAQCBwbGF0Zm9ybWd0a19zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1W
aWRlb1dpbmRvd0d0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGll
cy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ludFBvaW50R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZEd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVz
R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGll
c0d0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRz
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRh
T2JqZWN0R3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0V2ZW50TG9vcEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lz
dGVtR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRl
ci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR093blB0ckd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
T3duUHRyR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrUG9wdXBNZW51LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtW
ZXJzaW9uaW5nLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5n
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
Mi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1No
YXJlZFRpbWVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3Rr
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIuaAogCiBpZiBUQVJHRVRfWDExCiBwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmNwcCBcCkBAIC02MjMzLDkgKzYxMzgsNyBAQCBwbGF0Zm9ybWd0a19zb3Vy
Y2VzICs9IFwKIGlmIFVTRV9PUEVOR0wKIHBsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCiBlbmRp
ZiAjIEVORCBVU0VfT1BFTkdMCiBpZiBVU0VfRUdMCiBwbGF0Zm9ybWd0a19zb3VyY2VzICs9IFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmM3ODdmNTA1YWNmZDMwYjJlZjZhNzYz
N2MwYjA0YTk4YTAzYzZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9CdXMu
aCIKLQotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0u
aCIKLQotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotUGFzc093blB0cjxBdWRpb0J1cz4gQXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNv
bnN0IGNoYXIqIG5hbWUsIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgR093blB0cjxnY2hhcj4g
ZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcy53YXYiLCBuYW1lKSk7Ci0gICAgY29uc3QgY2hh
ciogZW52aXJvbm1lbnRQYXRoID0gZ2V0ZW52KCJBVURJT19SRVNPVVJDRVNfUEFUSCIpOwotICAg
IEdPd25QdHI8Z2NoYXI+IGFic29sdXRlRmlsZW5hbWU7Ci0gICAgaWYgKGVudmlyb25tZW50UGF0
aCkKLSAgICAgICAgYWJzb2x1dGVGaWxlbmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShlbnZpcm9u
bWVudFBhdGgsIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNv
bHV0ZUZpbGVuYW1lLnNldChnX2J1aWxkX2ZpbGVuYW1lKHNoYXJlZFJlc291cmNlc1BhdGgoKS5k
YXRhKCksICJyZXNvdXJjZXMiLCAiYXVkaW8iLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOwotICAg
IHJldHVybiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGFic29sdXRlRmlsZW5hbWUuZ2V0KCksIGZh
bHNlLCBzYW1wbGVSYXRlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvQ29sb3JHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjU2
YmE2ZmI0ZTBiNjVhOTljMjczZDNiNDcwYmZkYjZiMzViOWFmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Db2xvckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNvbG9yLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ29sb3I6OkNvbG9yKGNvbnN0IEdka0NvbG9yJiBjKQotICAgIDogbV9jb2xvcihtYWtlUkdC
KGMucmVkID4+IDgsIGMuZ3JlZW4gPj4gOCwgYy5ibHVlID4+IDgpKQotICAgICwgbV92YWxpZCh0
cnVlKQotewotfQotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi1Db2xvcjo6Q29sb3IoY29u
c3QgR2RrUkdCQSYgYykKLSAgICA6IG1fY29sb3IobWFrZVJHQkEoc3RhdGljX2Nhc3Q8aW50Pihj
LnJlZCAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5n
cmVlbiAqIDI1NSksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYy5i
bHVlICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihjLmFs
cGhhICogMjU1KSkpCi0gICAgLCBtX3ZhbGlkKHRydWUpCi17Ci19Ci0KLUNvbG9yOjpvcGVyYXRv
ciBHZGtSR0JBKCkgY29uc3QKLXsKLSAgICBkb3VibGUgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7
Ci0gICAgZ2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgR2RrUkdCQSByZ2Jh
ID0geyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSB9OwotICAgIHJldHVybiByZ2JhOwotfQotI2Vu
ZGlmCi0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkN2YyZjVk
ZjMxNGZmM2E0NmNlNDJjNWI4NDc0OTQ5M2YwYmFiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
NTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMuTAotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RS
RUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLQotI2luY2x1ZGUgIkZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaCIKLQotI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAi
R1N0cmVhbWVyR1dvcmxkLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+
Ci0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIEhVRF9BVVRPX0hJREVfSU5URVJW
QUwgMzAwMCAvLyAzIHNlY29uZHMKLSNkZWZpbmUgUFJPR1JFU1NfQkFSX1VQREFURV9JTlRFUlZB
TCAxNTAgLy8gMTUwbXMKLQotLy8gVXNlIHN5bWJvbGljIGljb25zIG9ubHkgaWYgd2UgYnVpbGQg
d2l0aCBHVEsrLTMgc3VwcG9ydC4gVGhleSBjb3VsZAotLy8gYmUgZW5hYmxlZCBmb3IgdGhlIEdU
SysyIGJ1aWxkIGJ1dCB3ZSdkIG5lZWQgdG8gYnVtcCB0aGUgcmVxdWlyZWQKLS8vIHZlcnNpb24g
dG8gYXQgbGVhc3QgMi4yMi4KLSNpZiBHVEtfTUFKT1JfVkVSU0lPTiA+IDIKLSNkZWZpbmUgSUNP
Tl9OQU1FX1NVRkZJWCAiLXN5bWJvbGljIgotI2Vsc2UKLSNkZWZpbmUgSUNPTl9OQU1FX1NVRkZJ
WAotI2VuZGlmCi0KLSNkZWZpbmUgUExBWV9JQ09OX05BTUUgIm1lZGlhLXBsYXliYWNrLXN0YXJ0
IklDT05fTkFNRV9TVUZGSVgKLSNkZWZpbmUgUEFVU0VfSUNPTl9OQU1FICJtZWRpYS1wbGF5YmFj
ay1wYXVzZSJJQ09OX05BTUVfU1VGRklYCi0jZGVmaW5lIEVYSVRfRlVMTFNDUkVFTl9JQ09OX05B
TUUgInZpZXctcmVzdG9yZSJJQ09OX05BTUVfU1VGRklYCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGdib29sZWFuIGhpZGVIdWRDYWxsYmFjayhGdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPmhpZGVIdWQoKTsKLSAgICBy
ZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtNb3Rpb25O
b3RpZnlFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRNb3Rpb24qIGV2ZW50LCAgRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9sbGVy
LT5zaG93SHVkKHRydWUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBvbkZ1
bGxzY3JlZW5HdGtBY3RpdmVOb3RpZmljYXRpb24oR3RrV2lkZ2V0KiB3aWRnZXQsIEdQYXJhbVNw
ZWMqIHByb3BlcnR5LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQot
ewotICAgIGlmICghZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyh3aWRnZXQpKSkKLSAg
ICAgICAgY29udHJvbGxlci0+aGlkZUh1ZCgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gb25GdWxs
c2NyZWVuR3RrQ29uZmlndXJlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Q29uZmln
dXJlKiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsK
LSAgICBjb250cm9sbGVyLT5ndGtDb25maWd1cmUoZXZlbnQpOwotICAgIHJldHVybiBUUlVFOwot
fQotCi1zdGF0aWMgdm9pZCBvbkZ1bGxzY3JlZW5HdGtEZXN0cm95KEd0a1dpZGdldCogd2lkZ2V0
LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRy
b2xsZXItPmV4aXRGdWxsc2NyZWVuKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRvZ2dsZVBsYXlQYXVz
ZUFjdGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9sbGVyLT50b2dnbGVQbGF5KCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGV4aXRGdWxsc2NyZWVuQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9uLCBGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXIt
PmV4aXRPblVzZXJSZXF1ZXN0KCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBwcm9ncmVzc0JhclVw
ZGF0ZUNhbGxiYWNrKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17
Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXItPnVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiB0aW1lU2NhbGVCdXR0b25QcmVzc2VkKEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudEJ1dHRvbiogZXZlbnQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRy
b2xsZXIpCi17Ci0gICAgaWYgKGV2ZW50LT50eXBlICE9IEdES19CVVRUT05fUFJFU1MpCi0gICAg
ICAgIHJldHVybiBGQUxTRTsKLQotICAgIGNvbnRyb2xsZXItPmJlZ2luU2VlaygpOwotICAgIHJl
dHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHRpbWVTY2FsZUJ1dHRvblJlbGVhc2Vk
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQsIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+ZW5kU2Vlaygp
OwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGltZVNjYWxlVmFsdWVDaGFu
Z2VkKEd0a1dpZGdldCogd2lkZ2V0LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250
cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPmRvU2VlaygpOwotfQotCi1zdGF0aWMgdm9pZCB2
b2x1bWVWYWx1ZUNoYW5nZWQoR3RrU2NhbGVCdXR0b24gKmJ1dHRvbiwgZ2RvdWJsZSB2YWx1ZSwg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9s
bGVyLT5zZXRWb2x1bWUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKSk7Ci19Ci0KLQotRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0azo6RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi0gICAgOiBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR1N0cmVhbWVyKHBsYXllcikKLSAgICAsIG1faHVkVGltZW91dElkKDApCi0g
ICAgLCBtX3Byb2dyZXNzQmFyVXBkYXRlSWQoMCkKLSAgICAsIG1fc2Vla0xvY2soZmFsc2UpCi0g
ICAgLCBtX3dpbmRvdygwKQotICAgICwgbV9odWRXaW5kb3coMCkKLSAgICAsIG1fdm9sdW1lQnV0
dG9uKDApCi0gICAgLCBtX2tleVByZXNzU2lnbmFsSWQoMCkKLSAgICAsIG1fZGVzdHJveVNpZ25h
bElkKDApCi0gICAgLCBtX2lzQWN0aXZlU2lnbmFsSWQoMCkKLSAgICAsIG1fbW90aW9uTm90aWZ5
U2lnbmFsSWQoMCkKLSAgICAsIG1fY29uZmlndXJlRXZlbnRTaWduYWxJZCgwKQotICAgICwgbV9o
dWRNb3Rpb25Ob3RpZnlTaWduYWxJZCgwKQotICAgICwgbV90aW1lU2NhbGVCdXR0b25QcmVzc2Vk
U2lnbmFsSWQoMCkKLSAgICAsIG1fdGltZVNjYWxlQnV0dG9uUmVsZWFzZWRTaWduYWxJZCgwKQot
ICAgICwgbV9wbGF5QWN0aW9uQWN0aXZhdGVTaWduYWxJZCgwKQotICAgICwgbV9leGl0RnVsbGNy
ZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZCgwKQotewotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGs6Omd0a0NvbmZpZ3VyZShHZGtFdmVudENvbmZpZ3VyZSogZXZlbnQpCi17
Ci0gICAgdXBkYXRlSHVkUG9zaXRpb24oKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjpzaG93SHVkKGJvb2wgYXV0b0hpZGUpCi17Ci0gICAgaWYgKCFtX2h1ZFdpbmRv
dykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faHVkVGltZW91dElkKSB7Ci0gICAgICAg
IGdfc291cmNlX3JlbW92ZShtX2h1ZFRpbWVvdXRJZCk7Ci0gICAgICAgIG1faHVkVGltZW91dElk
ID0gMDsKLSAgICB9Ci0KLSAgICAvLyBTaG93IHRoZSBjdXJzb3IuCi0gICAgR2RrV2luZG93KiB3
aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIGdka193aW5kb3df
c2V0X2N1cnNvcih3aW5kb3csIDApOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwcm9ncmVzcyBiYXIg
aW1tZWRpYXRlbHkgYmVmb3JlIHNob3dpbmcgdGhlIHdpbmRvdy4KLSAgICB1cGRhdGVIdWRQcm9n
cmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwobV9odWRXaW5kb3cpOwotICAgIHVw
ZGF0ZUh1ZFBvc2l0aW9uKCk7Ci0KLSAgICAvLyBTdGFydCBwZXJpb2RpYyB1cGRhdGVzIG9mIHRo
ZSBwcm9ncmVzcyBiYXIuCi0gICAgaWYgKCFtX3Byb2dyZXNzQmFyVXBkYXRlSWQpCi0gICAgICAg
IG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IGdfdGltZW91dF9hZGQoUFJPR1JFU1NfQkFSX1VQREFU
RV9JTlRFUlZBTCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocHJvZ3Jlc3NCYXJVcGRh
dGVDYWxsYmFjayksIHRoaXMpOwotCi0gICAgLy8gSGlkZSB0aGUgaHVkIGluIGZldyBzZWNvbmRz
LCBpZiByZXF1ZXN0ZWQuCi0gICAgaWYgKGF1dG9IaWRlKQotICAgICAgICBtX2h1ZFRpbWVvdXRJ
ZCA9IGdfdGltZW91dF9hZGQoSFVEX0FVVE9fSElERV9JTlRFUlZBTCwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4oaGlkZUh1ZENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLXZvaWQgRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0azo6aGlkZUh1ZCgpCi17Ci0gICAgaWYgKG1faHVkVGltZW91
dElkKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX2h1ZFRpbWVvdXRJZCk7Ci0gICAgICAg
IG1faHVkVGltZW91dElkID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIW1faHVkV2luZG93KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBLZWVwIHRoZSBodWQgdmlzaWJsZSBpZiBhIHNlZWsgaXMg
aW4gcHJvZ3Jlc3Mgb3IgaWYgdGhlIHZvbHVtZQotICAgIC8vIHBvcHVwIGlzIHZpc2libGUuCi0g
ICAgR3RrV2lkZ2V0KiB2b2x1bWVQb3B1cCA9IGd0a19zY2FsZV9idXR0b25fZ2V0X3BvcHVwKEdU
S19TQ0FMRV9CVVRUT04obV92b2x1bWVCdXR0b24pKTsKLSAgICBpZiAobV9zZWVrTG9jayB8fCBn
dGtfd2lkZ2V0X2dldF92aXNpYmxlKHZvbHVtZVBvcHVwKSkgewotICAgICAgICBzaG93SHVkKHRy
dWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBn
dGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIEdka0N1cnNvciogY3Vyc29yID0g
YmxhbmtDdXJzb3IoKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCBjdXJzb3Ip
OwotCi0gICAgZ3RrX3dpZGdldF9oaWRlKG1faHVkV2luZG93KTsKLQotICAgIGlmIChtX3Byb2dy
ZXNzQmFyVXBkYXRlSWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcHJvZ3Jlc3NCYXJV
cGRhdGVJZCk7Ci0gICAgICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IDA7Ci0gICAgfQotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gb25GdWxsc2NyZWVuR3RrS2V5UHJlc3NFdmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
KiBjb250cm9sbGVyKQotewotICAgIHN3aXRjaCAoZXZlbnQtPmtleXZhbCkgewotICAgIGNhc2Ug
R0RLX0VzY2FwZToKLSAgICAgICAgY29udHJvbGxlci0+ZXhpdE9uVXNlclJlcXVlc3QoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHREtfc3BhY2U6Ci0gICAgY2FzZSBHREtfUmV0dXJuOgot
ICAgICAgICBjb250cm9sbGVyLT50b2dnbGVQbGF5KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR0RLX1VwOgotICAgICAgICBjb250cm9sbGVyLT5pbmNyZWFzZVZvbHVtZSgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdES19Eb3duOgotICAgICAgICBjb250cm9sbGVyLT5kZWNyZWFz
ZVZvbHVtZSgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjppbml0aWFsaXplV2luZG93KCkKLXsKLSAgICBtX3dpbmRvdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R3RrV2lkZ2V0Kj4obV9nc3RyZWFtZXJHV29ybGQtPnBsYXRmb3JtVmlkZW9XaW5k
b3coKS0+d2luZG93KCkpOwotCi0gICAgaWYgKCFtX2h1ZFdpbmRvdykKLSAgICAgICAgY3JlYXRl
SHVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgYmxhY2sgYmFja2dyb3VuZC4KLSNpZmRlZiBHVEtfQVBJ
X1ZFUlNJT05fMgotICAgIEdka0NvbG9yIGNvbG9yID0geyAxLCAwLCAwLCAwIH07Ci0gICAgZ3Rr
X3dpZGdldF9tb2RpZnlfYmcobV93aW5kb3csIEdUS19TVEFURV9OT1JNQUwsICZjb2xvcik7Ci0j
ZWxzZQotICAgIEdka1JHQkEgY29sb3IgPSB7IDAsIDAsIDAsIDF9OwotICAgIGd0a193aWRnZXRf
b3ZlcnJpZGVfYmFja2dyb3VuZF9jb2xvcihtX3dpbmRvdywgR1RLX1NUQVRFX0ZMQUdfTk9STUFM
LCAmY29sb3IpOwotI2VuZGlmCi0gICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVkKG1f
d2luZG93LCBGQUxTRSk7Ci0KLSAgICBtX2tleVByZXNzU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25u
ZWN0KG1fd2luZG93LCAia2V5LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5H
dGtLZXlQcmVzc0V2ZW50KSwgdGhpcyk7Ci0gICAgbV9kZXN0cm95U2lnbmFsSWQgPSBnX3NpZ25h
bF9jb25uZWN0KG1fd2luZG93LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3Rr
RGVzdHJveSksIHRoaXMpOwotICAgIG1faXNBY3RpdmVTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5l
Y3QobV93aW5kb3csICJub3RpZnk6OmlzLWFjdGl2ZSIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVu
R3RrQWN0aXZlTm90aWZpY2F0aW9uKSwgdGhpcyk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxs
KG1fd2luZG93KTsKLQotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KG1fd2luZG93KTsKLSAgICBHUmVmUHRyPEdka0N1cnNvcj4gY3Vyc29yKGFkb3B0R1JlZihi
bGFua0N1cnNvcigpKSk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgY3Vyc29y
LmdldCgpKTsKLQotICAgIG1fbW90aW9uTm90aWZ5U2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0
KG1fd2luZG93LCAibW90aW9uLW5vdGlmeS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVu
R3RrTW90aW9uTm90aWZ5RXZlbnQpLCB0aGlzKTsKLSAgICBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFs
SWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiY29uZmlndXJlLWV2ZW50IiwgR19DQUxM
QkFDSyhvbkZ1bGxzY3JlZW5HdGtDb25maWd1cmVFdmVudCksIHRoaXMpOwotCi0gICAgZ3RrX3dp
bmRvd19mdWxsc2NyZWVuKEdUS19XSU5ET1cobV93aW5kb3cpKTsKLSAgICBzaG93SHVkKHRydWUp
OwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnVwZGF0ZUh1ZFBvc2l0
aW9uKCkKLXsKLSAgICBpZiAoIW1faHVkV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBHZXQgdGhlIHNjcmVlbiByZWN0YW5nbGUuCi0gICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBndGtf
d2luZG93X2dldF9zY3JlZW4oR1RLX1dJTkRPVyhtX3dpbmRvdykpOwotICAgIEdka1dpbmRvdyog
d2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2luZG93KTsKLSAgICBHZGtSZWN0YW5n
bGUgZnVsbHNjcmVlblJlY3RhbmdsZTsKLSAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21l
dHJ5KHNjcmVlbiwgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCB3aW5k
b3cpLCAmZnVsbHNjcmVlblJlY3RhbmdsZSk7Ci0KLSAgICAvLyBHZXQgdGhlIHBvcHVwIHdpbmRv
dyBzaXplLgotICAgIGludCBodWRXaWR0aCwgaHVkSGVpZ2h0OwotICAgIGd0a193aW5kb3dfZ2V0
X3NpemUoR1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksICZodWRXaWR0aCwgJmh1ZEhlaWdodCk7Ci0K
LSAgICAvLyBSZXNpemUgdGhlIGh1ZCB0byB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgc2NyZWVuLgot
ICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBmdWxsc2NyZWVu
UmVjdGFuZ2xlLndpZHRoLCBodWRIZWlnaHQpOwotCi0gICAgLy8gTW92ZSB0aGUgaHVkIHRvIHRo
ZSBib3R0b20gb2YgdGhlIHNjcmVlbi4KLSAgICBndGtfd2luZG93X21vdmUoR1RLX1dJTkRPVyht
X2h1ZFdpbmRvdyksIGZ1bGxzY3JlZW5SZWN0YW5nbGUueCwgZnVsbHNjcmVlblJlY3RhbmdsZS5o
ZWlnaHQgKyBmdWxsc2NyZWVuUmVjdGFuZ2xlLnkgLSBodWRIZWlnaHQpOwotfQotCi12b2lkIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmRlc3Ryb3lXaW5kb3coKQotewotICAgIGlmICgh
bV9odWRXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdChtX3dpbmRvdywgbV9rZXlQcmVzc1NpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fZGVzdHJveVNpZ25hbElkKTsKLSAgICBnX3NpZ25h
bF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1faXNBY3RpdmVTaWduYWxJZCk7Ci0gICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBtX21vdGlvbk5vdGlmeVNpZ25h
bElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fY29uZmln
dXJlRXZlbnRTaWduYWxJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1faHVk
V2luZG93LCBtX2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVy
X2Rpc2Nvbm5lY3QobV90aW1lSFNjYWxlLCBtX3RpbWVTY2FsZUJ1dHRvblByZXNzZWRTaWduYWxJ
ZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhTY2FsZSwgbV90aW1l
U2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nv
bm5lY3QobV90aW1lSFNjYWxlLCBtX2hzY2FsZVVwZGF0ZUlkKTsKLSAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOwotICAgIGdf
c2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3BsYXlQYXVzZUFjdGlvbiwgbV9wbGF5QWN0aW9u
QWN0aXZhdGVTaWduYWxJZCk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fZXhp
dEZ1bGxzY3JlZW5BY3Rpb24sIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQp
OwotCi0gICAgaWYgKG1faHVkVGltZW91dElkKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92ZSht
X2h1ZFRpbWVvdXRJZCk7Ci0gICAgICAgIG1faHVkVGltZW91dElkID0gMDsKLSAgICB9Ci0KLSAg
ICBpZiAobV9wcm9ncmVzc0JhclVwZGF0ZUlkKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92ZSht
X3Byb2dyZXNzQmFyVXBkYXRlSWQpOwotICAgICAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSAw
OwotICAgIH0KLQotICAgIGd0a193aWRnZXRfaGlkZShtX3dpbmRvdyk7Ci0KLSAgICBpZiAobV9o
dWRXaW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2h1ZFdpbmRvdyk7Ci0gICAg
bV9odWRXaW5kb3cgPSAwOwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6
OnBsYXlTdGF0ZUNoYW5nZWQoKQotewotICAgIGlmIChtX2NsaWVudC0+bWVkaWFQbGF5ZXJJc1Bh
dXNlZCgpKQotICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5UGF1c2VBY3Rpb24sICJ0b29sdGlw
IiwgXygiUGxheSIpLCAiaWNvbi1uYW1lIiwgUExBWV9JQ09OX05BTUUsIE5VTEwpOwotICAgIGVs
c2UKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheVBhdXNlQWN0aW9uLCAidG9vbHRpcCIsIF8o
IlBhdXNlIiksICJpY29uLW5hbWUiLCBQQVVTRV9JQ09OX05BTUUsIE5VTEwpOwotICAgIHNob3dI
dWQoIW1fY2xpZW50LT5tZWRpYVBsYXllcklzUGF1c2VkKCkpOwotfQotCi12b2lkIEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnZvbHVtZUNoYW5nZWQoKQotewotICAgIGlmICghbV92b2x1
bWVCdXR0b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfYmxvY2so
bV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQpOwotICAgIGd0a19zY2FsZV9idXR0b25f
c2V0X3ZhbHVlKEdUS19TQ0FMRV9CVVRUT04obV92b2x1bWVCdXR0b24pLCBtX3BsYXllci0+dm9s
dW1lKCkpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfdW5ibG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92
b2x1bWVVcGRhdGVJZCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
bXV0ZUNoYW5nZWQoKQotewotICAgIGlmICghbV92b2x1bWVCdXR0b24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGdfc2lnbmFsX2hhbmRsZXJfYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1l
VXBkYXRlSWQpOwotICAgIGd0a19zY2FsZV9idXR0b25fc2V0X3ZhbHVlKEdUS19TQ0FMRV9CVVRU
T04obV92b2x1bWVCdXR0b24pLCBtX3BsYXllci0+bXV0ZWQoKSA/IDAgOiBtX3BsYXllci0+dm9s
dW1lKCkpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfdW5ibG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92
b2x1bWVVcGRhdGVJZCk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6
YmVnaW5TZWVrKCkKLXsKLSAgICBtX3NlZWtMb2NrID0gdHJ1ZTsKLX0KLQotdm9pZCBGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyR3RrOjpkb1NlZWsoKQotewotICAgIGlmICghbV9zZWVrTG9jaykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wbGF5ZXItPnNlZWsoZ3RrX3JhbmdlX2dldF92YWx1
ZShHVEtfUkFOR0UobV90aW1lSFNjYWxlKSkqbV9wbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDApOwot
fQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmVuZFNlZWsoKQotewotICAg
IG1fc2Vla0xvY2sgPSBmYWxzZTsKLX0KLQotZ2Jvb2xlYW4gRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlckd0azo6dXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKQotewotICAgIGZsb2F0IG1lZGlhRHVyYXRp
b24obV9wbGF5ZXItPmR1cmF0aW9uKCkpOwotICAgIGZsb2F0IG1lZGlhUG9zaXRpb24obV9wbGF5
ZXItPmN1cnJlbnRUaW1lKCkpOwotCi0gICAgaWYgKCFtX3NlZWtMb2NrKSB7Ci0gICAgICAgIGdk
b3VibGUgdmFsdWUgPSAwLjA7Ci0KLSAgICAgICAgaWYgKG1lZGlhUG9zaXRpb24gJiYgbWVkaWFE
dXJhdGlvbikKLSAgICAgICAgICAgIHZhbHVlID0gKG1lZGlhUG9zaXRpb24gKiAxMDAuMCkgLyBt
ZWRpYUR1cmF0aW9uOwotCi0gICAgICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBndGtf
cmFuZ2VfZ2V0X2FkanVzdG1lbnQoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSkpOwotICAgICAgICBn
dGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoYWRqdXN0bWVudCwgdmFsdWUpOwotICAgIH0KLQotICAg
IGd0a19yYW5nZV9zZXRfZmlsbF9sZXZlbChHVEtfUkFOR0UobV90aW1lSFNjYWxlKSwgKG1fcGxh
eWVyLT5tYXhUaW1lTG9hZGVkKCkgLyBtZWRpYUR1cmF0aW9uKSogMTAwKTsKLQotICAgIGdjaGFy
KiBsYWJlbCA9IGdfc3RyZHVwX3ByaW50ZigiJXMgLyAlcyIsIHRpbWVUb1N0cmluZyhtZWRpYVBv
c2l0aW9uKS51dGY4KCkuZGF0YSgpLCB0aW1lVG9TdHJpbmcobWVkaWFEdXJhdGlvbikudXRmOCgp
LmRhdGEoKSk7Ci0gICAgZ3RrX2xhYmVsX3NldF90ZXh0KEdUS19MQUJFTChtX3RpbWVMYWJlbCks
IGxhYmVsKTsKLSAgICBnX2ZyZWUobGFiZWwpOwotICAgIHJldHVybiBUUlVFOwotfQotCi12b2lk
IEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmNyZWF0ZUh1ZCgpCi17Ci0gICAgbV9odWRX
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBndGtfd2luZG93
X3NldF9ncmF2aXR5KEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBHREtfR1JBVklUWV9TT1VUSF9X
RVNUKTsKLSAgICBndGtfd2luZG93X3NldF90eXBlX2hpbnQoR1RLX1dJTkRPVyhtX2h1ZFdpbmRv
dyksIEdES19XSU5ET1dfVFlQRV9ISU5UX05PUk1BTCk7Ci0KLSAgICBtX2h1ZE1vdGlvbk5vdGlm
eVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX2h1ZFdpbmRvdywgIm1vdGlvbi1ub3RpZnkt
ZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlmeUV2ZW50KSwgdGhp
cyk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogaGJveCA9IGd0
a19oYm94X25ldyhGQUxTRSwgNCk7Ci0jZWxzZQotICAgIEd0a1dpZGdldCogaGJveCA9IGd0a19i
b3hfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCA0KTsKLSNlbmRpZgotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9odWRXaW5kb3cpLCBoYm94KTsKLQotICAgIG1f
cGxheVBhdXNlQWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoInBsYXkiLCBfKCJQbGF5IC8gUGF1c2Ui
KSwgXygiUGxheSBvciBwYXVzZSB0aGUgbWVkaWEiKSwgUEFVU0VfSUNPTl9OQU1FKTsKLSAgICBt
X3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3BsYXlQYXVz
ZUFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyh0b2dnbGVQbGF5UGF1c2VBY3RpdmF0ZWQp
LCB0aGlzKTsKLQotICAgIEd0a1dpZGdldCogaXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX3Rvb2xf
aXRlbShtX3BsYXlQYXVzZUFjdGlvbik7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
aGJveCksIGl0ZW0sIEZBTFNFLCBUUlVFLCAwKTsKLQotICAgIEd0a1dpZGdldCogbGFiZWwgPSBn
dGtfbGFiZWxfbmV3KF8oIlRpbWU6IikpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KGhib3gpLCBsYWJlbCwgRkFMU0UsIFRSVUUsIDApOwotCi0gICAgR3RrQWRqdXN0bWVudCogYWRq
dXN0bWVudCA9IEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMTAw
LjAsIDAuMSwgMS4wLCAxLjApKTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIG1fdGlt
ZUhTY2FsZSA9IGd0a19oc2NhbGVfbmV3KGFkanVzdG1lbnQpOwotI2Vsc2UKLSAgICBtX3RpbWVI
U2NhbGUgPSBndGtfc2NhbGVfbmV3KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBhZGp1c3Rt
ZW50KTsKLSNlbmRpZgotICAgIGd0a19zY2FsZV9zZXRfZHJhd192YWx1ZShHVEtfU0NBTEUobV90
aW1lSFNjYWxlKSwgRkFMU0UpOwotICAgIGd0a19yYW5nZV9zZXRfc2hvd19maWxsX2xldmVsKEdU
S19SQU5HRShtX3RpbWVIU2NhbGUpLCBUUlVFKTsKLSAgICBtX3RpbWVTY2FsZUJ1dHRvblByZXNz
ZWRTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAiYnV0dG9uLXByZXNz
LWV2ZW50IiwgR19DQUxMQkFDSyh0aW1lU2NhbGVCdXR0b25QcmVzc2VkKSwgdGhpcyk7Ci0gICAg
bV90aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3Rp
bWVIU2NhbGUsICJidXR0b24tcmVsZWFzZS1ldmVudCIsIEdfQ0FMTEJBQ0sodGltZVNjYWxlQnV0
dG9uUmVsZWFzZWQpLCB0aGlzKTsKLSAgICBtX2hzY2FsZVVwZGF0ZUlkID0gZ19zaWduYWxfY29u
bmVjdChtX3RpbWVIU2NhbGUsICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0aW1lU2NhbGVW
YWx1ZUNoYW5nZWQpLCB0aGlzKTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhi
b3gpLCBtX3RpbWVIU2NhbGUsIFRSVUUsIFRSVUUsIDApOwotCi0gICAgbV90aW1lTGFiZWwgPSBn
dGtfbGFiZWxfbmV3KCIiKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwg
bV90aW1lTGFiZWwsIEZBTFNFLCBUUlVFLCAwKTsKLQotICAgIC8vIFZvbHVtZSBidXR0b24uCi0g
ICAgbV92b2x1bWVCdXR0b24gPSBndGtfdm9sdW1lX2J1dHRvbl9uZXcoKTsKLSAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbV92b2x1bWVCdXR0b24sIEZBTFNFLCBUUlVFLCAw
KTsKLSAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9OKG1fdm9s
dW1lQnV0dG9uKSwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKLSAgICBtX3ZvbHVtZVVwZGF0ZUlkID0g
Z19zaWduYWxfY29ubmVjdChtX3ZvbHVtZUJ1dHRvbiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExC
QUNLKHZvbHVtZVZhbHVlQ2hhbmdlZCksIHRoaXMpOwotCi0gICAgbV9leGl0RnVsbHNjcmVlbkFj
dGlvbiA9IGd0a19hY3Rpb25fbmV3KCJleGl0IiwgXygiRXhpdCBGdWxsc2NyZWVuIiksIF8oIkV4
aXQgZnJvbSBmdWxsc2NyZWVuIG1vZGUiKSwgRVhJVF9GVUxMU0NSRUVOX0lDT05fTkFNRSk7Ci0g
ICAgbV9leGl0RnVsbGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5l
Y3QobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhleGl0RnVs
bHNjcmVlbkFjdGl2YXRlZCksIHRoaXMpOwotICAgIGdfb2JqZWN0X3NldChtX2V4aXRGdWxsc2Ny
ZWVuQWN0aW9uLCAiaWNvbi1uYW1lIiwgRVhJVF9GVUxMU0NSRUVOX0lDT05fTkFNRSwgTlVMTCk7
Ci0gICAgaXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX3Rvb2xfaXRlbShtX2V4aXRGdWxsc2NyZWVu
QWN0aW9uKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgaXRlbSwgRkFM
U0UsIFRSVUUsIDApOwotCi0gICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gZ190aW1lb3V0X2Fk
ZChQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihwcm9ncmVzc0JhclVwZGF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBwbGF5U3RhdGVD
aGFuZ2VkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ1NzcwYzU5ODg2NjQ3NGJhOTU0ODViM2Y0MWIyYzQzYjY5MTQ0YmMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaAorKysgL2Rldi9udWxs
CkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwK
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKLSNkZWZp
bmUgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCi0KLSNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShHU1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLQotI2luY2x1
ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrIDogcHVibGljIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIgewotcHVibGljOgotICAgIEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwot
Ci0gICAgdm9pZCBndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUqKTsKLQotICAgIHZvaWQg
cGxheVN0YXRlQ2hhbmdlZCgpOwotCi0gICAgdm9pZCBiZWdpblNlZWsoKTsKLSAgICB2b2lkIGRv
U2VlaygpOwotICAgIHZvaWQgZW5kU2VlaygpOwotCi0gICAgdm9pZCBoaWRlSHVkKCk7Ci0gICAg
dm9pZCBzaG93SHVkKGJvb2wpOwotICAgIGdib29sZWFuIHVwZGF0ZUh1ZFByb2dyZXNzQmFyKCk7
Ci0KLSAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKLSAgICB2b2lkIG11dGVDaGFuZ2VkKCk7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBpbml0aWFsaXplV2luZG93KCk7Ci0gICAgdm9pZCBkZXN0cm95
V2luZG93KCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUh1ZCgpOwotICAgIHZvaWQgdXBkYXRlSHVkUG9z
aXRpb24oKTsKLQotICAgIGd1aW50IG1faHVkVGltZW91dElkOwotICAgIGd1aW50IG1fcHJvZ3Jl
c3NCYXJVcGRhdGVJZDsKLSAgICBndWludCBtX3Byb2dyZXNzQmFyRmlsbFVwZGF0ZUlkOwotICAg
IGd1aW50IG1faHNjYWxlVXBkYXRlSWQ7Ci0gICAgZ3VpbnQgbV92b2x1bWVVcGRhdGVJZDsKLSAg
ICBib29sIG1fc2Vla0xvY2s7Ci0gICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsKLSAgICBHdGtXaWRn
ZXQqIG1faHVkV2luZG93OwotICAgIEd0a0FjdGlvbiogbV9wbGF5UGF1c2VBY3Rpb247Ci0gICAg
R3RrQWN0aW9uKiBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uOwotICAgIEd0a1dpZGdldCogbV90aW1l
SFNjYWxlOwotICAgIEd0a1dpZGdldCogbV90aW1lTGFiZWw7Ci0gICAgR3RrV2lkZ2V0KiBtX3Zv
bHVtZUJ1dHRvbjsKLQotICAgIHVuc2lnbmVkIGxvbmcgbV9rZXlQcmVzc1NpZ25hbElkOwotICAg
IHVuc2lnbmVkIGxvbmcgbV9kZXN0cm95U2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2lz
QWN0aXZlU2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX21vdGlvbk5vdGlmeVNpZ25hbElk
OwotICAgIHVuc2lnbmVkIGxvbmcgbV9jb25maWd1cmVFdmVudFNpZ25hbElkOwotICAgIHVuc2ln
bmVkIGxvbmcgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1f
dGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV90aW1l
U2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV9wbGF5QWN0
aW9uQWN0aXZhdGVTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXhpdEZ1bGxjcmVlbkFj
dGlvbkFjdGl2YXRlU2lnbmFsSWQ7Ci19OwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ4MDE4YTMwZjBjNDFlMGU0Y2U1ZGNjMzg0YTk1MTlmNTQ3MDQ1
ZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9V
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlIDxjYWly
by5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFj
ZVRvR2RrUGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICByZXR1cm4gZ2Rr
X3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZhY2UsIDAsIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJm
YWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNWIzZWRlZmMxMTFkYjk0NmUzMmFjODFkMGZjMmEw
NTBjZTAyNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHZGtDYWlyb1V0aWxpdGllc19oCi0jZGVmaW5l
IEdka0NhaXJvVXRpbGl0aWVzX2gKLQotR2RrUGl4YnVmKiBjYWlyb0ltYWdlU3VyZmFjZVRvR2Rr
UGl4YnVmKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSk7Ci0KLSNlbmRpZiAvLyBHZGtDYWlyb1V0
aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSWNvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNv
bkd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOTU3YjM0NWNlNWZiMjcx
MWExMGM2NjgwMjUzZGM1MjRlYzg4ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25H
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJY29uLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUljb246Okljb24oKQotICAgIDogbV9pY29uKDApCi17Ci19Ci0KLUljb246On5JY29uKCkK
LXsKLSAgICBpZiAobV9pY29uKQotICAgICAgICBnX29iamVjdF91bnJlZihtX2ljb24pOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGxvb2t1cEljb25OYW1lKFN0cmluZyBNSU1FVHlwZSkKLXsKLSAgICAv
KgotICAgICBMb29rdXAgYW4gYXBwcm9wcmlhdGUgaWNvbiBhY2NvcmRpbmcgdG8gZWl0aGVyIHRo
ZSBJY29uIE5hbWluZyBTcGVjCi0gICAgIG9yIGNvbnZlbnRpb25hbCBHbm9tZSBpY29uIG5hbWVz
IHJlc3BlY3RpdmVseS4KLQotICAgICBTZWUgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5v
cmcvaWNvbi1uYW1pbmctc3BlYy9pY29uLW5hbWluZy1zcGVjLWxhdGVzdC5odG1sCi0KLSAgICAg
VGhlIGljb24gdGhlbWUgaXMgcHJvYmVkIGZvciB0aGUgZm9sbG93aW5nIG5hbWVzOgotICAgICAx
LiBtZWRpYS1zdWJ0eXBlCi0gICAgIDIuIGdub21lLW1pbWUtbWVkaWEtc3VidHlwZQotICAgICAz
LiBtZWRpYS14LWdlbmVyaWMKLSAgICAgNC4gZ25vbWUtbWltZS1tZWRpYQotCi0gICAgIEluIHRo
ZSB3b3JzdCBjYXNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIHN0b2NrIGZpbGUgaWNvbi4KLSAgICAq
LwotICAgIGludCBwb3MgPSBNSU1FVHlwZS5maW5kKCcvJyk7Ci0gICAgaWYocG9zID49IDApIHsK
LSAgICAgICAgU3RyaW5nIG1lZGlhID0gTUlNRVR5cGUuc3Vic3RyaW5nKDAsIHBvcyk7Ci0gICAg
ICAgIFN0cmluZyBzdWJ0eXBlID0gTUlNRVR5cGUuc3Vic3RyaW5nKHBvcyArIDEpOwotICAgICAg
ICBHdGtJY29uVGhlbWUqIGljb25UaGVtZSA9IGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCk7
Ci0gICAgICAgIFN0cmluZyBpY29uTmFtZSA9IG1lZGlhICsgIi0iICsgc3VidHlwZTsKLSAgICAg
ICAgaWYoZ3RrX2ljb25fdGhlbWVfaGFzX2ljb24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCku
ZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybiBpY29uTmFtZTsKLSAgICAgICAgaWNvbk5hbWUg
PSAiZ25vbWUtbWltZS0iICsgbWVkaWEgKyAiLSIgKyBzdWJ0eXBlOwotICAgICAgICBpZihndGtf
aWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOwotICAgICAgICBpY29uTmFtZSA9IG1lZGlhICsg
Ii14LWdlbmVyaWMiOwotICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhl
bWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGljb25OYW1l
OwotICAgICAgICBpY29uTmFtZSA9IG1lZGlhICsgImdub21lLW1pbWUtIiArIG1lZGlhOwotICAg
ICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0Zjgo
KS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOwotICAgIH0KLSAgICByZXR1
cm4gR1RLX1NUT0NLX0ZJTEU7Ci19Ci0KLS8vIEZJWE1FOiBNb3ZlIHRoZSBjb2RlIHRvIENocm9t
ZUNsaWVudDo6aWNvbkZvckZpbGVzKCkuCi1QYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUlj
b25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQotewotICAgIGlmIChm
aWxlbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChmaWxlbmFt
ZXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKCFnX3BhdGhfc2tpcF9yb290KGZpbGVuYW1l
c1swXS51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIFN0
cmluZyBNSU1FVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxl
bmFtZXNbMF0pOwotICAgICAgICBTdHJpbmcgaWNvbk5hbWUgPSBsb29rdXBJY29uTmFtZShNSU1F
VHlwZSk7Ci0KLSAgICAgICAgUmVmUHRyPEljb24+IGljb24gPSBhZG9wdFJlZihuZXcgSWNvbik7
Ci0gICAgICAgIGljb24tPm1faWNvbiA9IGd0a19pY29uX3RoZW1lX2xvYWRfaWNvbihndGtfaWNv
bl90aGVtZV9nZXRfZGVmYXVsdCgpLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpLCAxNiwgR1RLX0lD
T05fTE9PS1VQX1VTRV9CVUlMVElOLCAwKTsKLSAgICAgICAgaWYgKCFpY29uLT5tX2ljb24pCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGljb24ucmVsZWFzZSgpOwotICAg
IH0KLQotICAgIC8vRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFRPRE86IFNjYWxlL2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4K
LSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAg
IGNhaXJvX3NhdmUoY3IpOwotICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgbV9p
Y29uLCByZWN0LngoKSwgcmVjdC55KCkpOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLSAgICBjYWly
b19yZXN0b3JlKGNyKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQ2ZmY1M2I0ZmUxMTFkMjQzMDIyOWY2MDM2NzY3YWNhN2ViZDRkODUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDgzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIK
LSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNs
dWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFs
aXR5LCBHT3duUHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKLXsKLSAgICAv
LyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBH
ZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9y
Zy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1
Zi1zYXZlLXRvLWJ1ZmZlcnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5n
KHNpemVvZiAiaW1hZ2UiKTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5n
IiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7Ci0g
ICAgaWYgKHR5cGUgPT0gImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0
IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgp
IG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1v
dmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgotICAg
ICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1B
VF9SR0IyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZh
Y2UpKSk7Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb0ltYWdlU3VyZmFjZVRvR2Rr
UGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGl4YnVmID0g
YWRvcHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOwotICAgIGlm
ICghcGl4YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHRXJyb3IqIGVycm9yID0g
MDsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAg
JiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3Ry
aW5nOjpmb3JtYXQoIiVkIiwgc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41
KSk7Ci0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVm
ZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3IsICJx
dWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIu
b3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvciwgTlVMTCk7
Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIENvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHT3duUHRyPGdj
aGFyPiBidWZmZXIoMCk7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAoIWVuY29kZUlt
YWdlKG1fZGF0YS5tX3N1cmZhY2UsIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNp
emUpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0
RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplLCBiYXNlNjRE
YXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFz
ZTY0RGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbWFnZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOWZiZWZm
MDI1ODQyYzJmMWY4NWVkNDk5ZjY0MTU5MjBlNDUyZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ltYWdlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVz
LmgiCi0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY2hhciogZ2V0
UGF0aFRvSW1hZ2VSZXNvdXJjZShjaGFyKiByZXNvdXJjZSkKLXsKLSAgICBpZiAoZ19nZXRlbnYo
IldFQktJVF9UT1BfTEVWRUwiKSkKLSAgICAgICAgcmV0dXJuIGdfYnVpbGRfZmlsZW5hbWUoZ19n
ZXRlbnYoIldFQktJVF9UT1BfTEVWRUwiKSwgIlNvdXJjZSIsICJXZWJDb3JlIiwgIlJlc291cmNl
cyIsIHJlc291cmNlLCBOVUxMKTsKLQotICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKHNoYXJl
ZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJpbWFnZXMiLCByZXNvdXJjZSwgTlVMTCk7Ci19Ci0K
LXN0YXRpYyBDU3RyaW5nIGdldFRoZW1lSWNvbkZpbGVOYW1lKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCBzaXplKQotewotICAgIEd0a0ljb25JbmZvKiBpY29uSW5mbyA9IGd0a19pY29uX3RoZW1lX2xv
b2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2l6ZSwgR1RLX0lD
T05fTE9PS1VQX05PX1NWRyk7Ci0gICAgLy8gVHJ5IHRvIGZhbGxiYWNrIG9uIE1JU1NJTkdfSU1B
R0UuCi0gICAgaWYgKCFpY29uSW5mbykKLSAgICAgICAgaWNvbkluZm8gPSBndGtfaWNvbl90aGVt
ZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19NSVNTSU5HX0lNQUdF
LCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19JQ09OX0xPT0tVUF9OT19TVkcpOwotICAgIGlmIChpY29uSW5mbykgewotICAgICAgICBHT3du
UHRyPEd0a0ljb25JbmZvPiBpbmZvKGljb25JbmZvKTsKLSAgICAgICAgcmV0dXJuIENTdHJpbmco
Z3RrX2ljb25faW5mb19nZXRfZmlsZW5hbWUoaW5mby5nZXQoKSkpOwotICAgIH0KLQotICAgIC8v
IE5vIGljb24gd2FzIGZvdW5kLCB0aGlzIGNhbiBoYXBwZW4gaWYgbm90IEdUSyB0aGVtZSBpcyBz
ZXQuIEluCi0gICAgLy8gdGhhdCBjYXNlIGFuIGVtcHR5IEltYWdlIHdpbGwgYmUgY3JlYXRlZC4K
LSAgICByZXR1cm4gQ1N0cmluZygpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGxvYWRSZXNvdXJjZVNoYXJlZEJ1ZmZlcihDU3RyaW5nIG5hbWUpCi17Ci0gICAgR093blB0
cjxnY2hhcj4gY29udGVudDsKLSAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgaWYgKCFnX2ZpbGVfZ2V0
X2NvbnRlbnRzKG5hbWUuZGF0YSgpLCAmY29udGVudC5vdXRQdHIoKSwgJmxlbmd0aCwgMCkpCi0g
ICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwotCi0gICAgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQuZ2V0KCksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQml0bWFw
SW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQotewotfQotCi1QYXNzUmVmUHRyPEltYWdl
PiBsb2FkSW1hZ2VGcm9tRmlsZShDU3RyaW5nIGZpbGVOYW1lKQotewotICAgIFJlZlB0cjxCaXRt
YXBJbWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGlmICghZmlsZU5hbWUu
aXNOdWxsKCkpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gbG9hZFJl
c291cmNlU2hhcmVkQnVmZmVyKGZpbGVOYW1lKTsKLSAgICAgICAgaW1nLT5zZXREYXRhKGJ1ZmZl
ci5yZWxlYXNlKCksIHRydWUpOwotICAgIH0KLSAgICByZXR1cm4gaW1nLnJlbGVhc2UoKTsKLX0K
LQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNo
YXIqIG5hbWUpCi17Ci0gICAgQ1N0cmluZyBmaWxlTmFtZTsKLSAgICBpZiAoIXN0cmNtcCgibWlz
c2luZ0ltYWdlIiwgbmFtZSkpCi0gICAgICAgIGZpbGVOYW1lID0gZ2V0VGhlbWVJY29uRmlsZU5h
bWUoR1RLX1NUT0NLX01JU1NJTkdfSU1BR0UsIDE2KTsKLSAgICBpZiAoZmlsZU5hbWUuaXNOdWxs
KCkpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gaW1hZ2VOYW1lKGdfc3RyZHVwX3ByaW50Zigi
JXMucG5nIiwgbmFtZSkpOwotICAgICAgICBHT3duUHRyPGdjaGFyPiBnbGliRmlsZU5hbWUoZ2V0
UGF0aFRvSW1hZ2VSZXNvdXJjZShpbWFnZU5hbWUuZ2V0KCkpKTsKLSAgICAgICAgZmlsZU5hbWUg
PSBnbGliRmlsZU5hbWUuZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxvYWRJbWFnZUZyb21G
aWxlKGZpbGVOYW1lKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVRoZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKLXsKLSAgICByZXR1cm4gbG9h
ZEltYWdlRnJvbUZpbGUoZ2V0VGhlbWVJY29uRmlsZU5hbWUobmFtZSwgc2l6ZSkpOwotfQotCi1H
ZGtQaXhidWYqIEJpdG1hcEltYWdlOjpnZXRHZGtQaXhidWYoKQotewotICAgIE5hdGl2ZUltYWdl
Q2Fpcm8qIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICByZXR1cm4g
aW1hZ2UgPyBjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4YnVmKGltYWdlLT5zdXJmYWNlKCkpIDog
MDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ludFBvaW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JbnRQb2ludEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MDIxNTgx
ZThlZDk0YTllYmVjMWRlZWJjOTViZDAxMzI1NjczNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ludFBvaW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEdka1Bv
aW50JiBwKQotICAgIDogbV94KHAueCkKLSAgICAsIG1feShwLnkpCi17Ci19Ci0KLUludFBvaW50
OjpvcGVyYXRvciBHZGtQb2ludCgpIGNvbnN0Ci17Ci0gICAgR2RrUG9pbnQgcCA9IHsgeCgpLCB5
KCkgfTsKLSAgICByZXR1cm4gcDsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjMxMjgxOWFmY2ExMWFkNzc3ZDM0MmM3
YTM5NDA2NDc5ZjIzNThlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRSZWN0R3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFJlY3Q6OkludFJlY3QoY29uc3Qg
R2RrUmVjdGFuZ2xlJiByKQotICAgIDogbV9sb2NhdGlvbihJbnRQb2ludChyLngsIHIueSkpCi0g
ICAgLCBtX3NpemUoci53aWR0aCwgci5oZWlnaHQpCi17Ci19Ci0KLUludFJlY3Q6Om9wZXJhdG9y
IEdka1JlY3RhbmdsZSgpIGNvbnN0Ci17Ci0gICAgR2RrUmVjdGFuZ2xlIHIgPSB7IHgoKSwgeSgp
LCB3aWR0aCgpLCBoZWlnaHQoKSB9OwotICAgIHJldHVybiByOwotfQotCi19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZmJkYTA4NzM0MGMwYmY2MWIxZGIxZDc3
MGM4OWM3ZWQ4MzAyNDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0j
aW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtR3RrLmgiCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3MuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEFzeW5jRmlsZVN5
c3RlbTo6aXNBdmFpbGFibGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1QYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gQXN5bmNGaWxlU3lzdGVt
OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQXN5bmNGaWxlU3lzdGVtR3Rr
KCkpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0oY29uc3QgU3Ry
aW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRpZmllciwgRmlsZVN5c3Rl
bVR5cGUsIGJvb2wsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjYWxsYmFja3MtPmRpZEZhaWwoTk9U
X1NVUFBPUlRFRF9FUlIpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZVN5
c3RlbShjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlm
aWVyLCBGaWxlU3lzdGVtVHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY2FsbGJhY2tz
LT5kaWRGYWlsKE5PVF9TVVBQT1JURURfRVJSKTsKLX0KLQotQXN5bmNGaWxlU3lzdGVtR3RrOjpB
c3luY0ZpbGVTeXN0ZW1HdGsoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUFzeW5j
RmlsZVN5c3RlbUd0azo6fkFzeW5jRmlsZVN5c3RlbUd0aygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6Om1vdmUoY29uc3QgS1VSTCYgc291
cmNlUGF0aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjb3B5KGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgs
IGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEFzeW5jRmlsZVN5c3RlbUd0azo6cmVtb3ZlKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlbW92ZVJlY3Vyc2l2ZWx5KGNv
bnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0
ZW1HdGs6OnJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVGaWxlKGNvbnN0IEtVUkwmIHBhdGgs
IGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lz
dGVtR3RrOjpjcmVhdGVEaXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmZpbGVFeGlz
dHMoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmls
ZVN5c3RlbUd0azo6ZGlyZWN0b3J5RXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlYWREaXJlY3RvcnkoY29uc3Qg
S1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgQXN5bmNGaWxlU3lzdGVt
R3RrOjpjcmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IEtV
UkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0Zp
bGVTeXN0ZW1HdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0
ZW1HdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlmNTczNzA4MWNhNjg0ZjAx
MTMyMWM3NWJhOGRmZTVkYTY1NWM3MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVt
R3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV
U0EKLSAqLwotCi0jaWZuZGVmICBBc3luY0ZpbGVTeXN0ZW1HdGtfaAotI2RlZmluZSAgQXN5bmNG
aWxlU3lzdGVtR3RrX2gKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2luY2x1ZGUgIkFz
eW5jRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOwotCi1jbGFzcyBB
c3luY0ZpbGVTeXN0ZW1HdGsgOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtIHsKLXB1YmxpYzoKLSAg
ICBBc3luY0ZpbGVTeXN0ZW1HdGsoKTsKLSAgICB2aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1HdGso
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBtb3ZlKGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0
IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25z
dCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVS
ZWN1cnNpdmVseShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCByZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlRmlsZShjb25zdCBLVVJMJiBwYXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRGly
ZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBmaWxlRXhpc3RzKGNvbnN0
IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAg
dmlydHVhbCB2b2lkIGRpcmVjdG9yeUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0
b3J5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
Pik7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQq
LCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vICBB
c3luY0ZpbGVTeXN0ZW1HdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYzYjZjZjhmMmVkYzU5
OThmMTVhMDFhZWJjNTcyMmUzNTk2NjQ0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0vKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkR3Rr
LmgiCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkRyYWdEYXRhLmgiCi0j
aW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZpbGVM
aXN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNs
dWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFz
dGVib2FyZC5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKLSNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRl
ICJtYXJrdXAuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZVRleHQsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAsCi0gICAgQ2xpcGJvYXJkRGF0YVR5
cGVVUklMaXN0LAotICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAotICAgIENsaXBib2FyZERhdGFU
eXBlSW1hZ2UsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duCi19OwotCi1QYXNzUmVmUHRy
PENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1Bv
bGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gQ2xpcGJvYXJkR3RrOjpj
cmVhdGUocG9saWN5LCBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9n
ZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCksIGZyYW1lKTsKLX0KLQotUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVy
biBDbGlwYm9hcmRHdGs6OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSwg
RHJhZ0FuZERyb3AsIGZyYW1lKTsKLX0KLQotQ2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1l
KiBmcmFtZSkKLSAgICA6IENsaXBib2FyZChwb2xpY3ksIENvcHlBbmRQYXN0ZSkKLSAgICAsIG1f
ZGF0YU9iamVjdChEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKSkKLSAgICAs
IG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi17Ci19Ci0KLUNs
aXBib2FyZEd0azo6Q2xpcGJvYXJkR3RrKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIFBh
c3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9h
cmRUeXBlLCBGcmFtZSogZnJhbWUpCi0gICAgOiBDbGlwYm9hcmQocG9saWN5LCBjbGlwYm9hcmRU
eXBlKQotICAgICwgbV9kYXRhT2JqZWN0KGRhdGFPYmplY3QpCi0gICAgLCBtX2NsaXBib2FyZCgw
KQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotQ2xpcGJvYXJkR3RrOjp+Q2xpcGJvYXJk
R3RrKCkKLXsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1v
dmVDbGllbnQodGhpcyk7Ci19Ci0KLXN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBkYXRhT2JqZWN0
VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShjb25zdCBTdHJpbmcmIHJhd1R5cGUpCi17Ci0gICAg
U3RyaW5nIHR5cGUocmF3VHlwZS5zdHJpcFdoaXRlU3BhY2UoKSk7Ci0KLSAgICAvLyBUd28gc3Bl
Y2lhbCBjYXNlcyBmb3IgSUUgY29tcGF0aWJpbGl0eQotICAgIGlmICh0eXBlID09ICJUZXh0IiB8
fCB0eXBlID09ICJ0ZXh0IikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dDsK
LSAgICBpZiAodHlwZSA9PSAiVVJMIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBl
VVJMOwotCi0gICAgLy8gRnJvbSB0aGUgTWFjIHBvcnQ6IElnbm9yZSBhbnkgdHJhaWxpbmcgY2hh
cnNldCAtIEpTIHN0cmluZ3MgYXJlCi0gICAgLy8gVW5pY29kZSwgd2hpY2ggZW5jYXBzdWxhdGVz
IHRoZSBjaGFyc2V0IGlzc3VlLgotICAgIGlmICh0eXBlID09ICJ0ZXh0L3BsYWluIiB8fCB0eXBl
LnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZVRleHQ7Ci0gICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZS5zdGFydHNXaXRo
KCJ0ZXh0L2h0bWw7IikpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cDsK
LSAgICBpZiAodHlwZSA9PSAiRmlsZXMiIHx8IHR5cGUgPT0gInRleHQvdXJpLWxpc3QiIHx8IHR5
cGUuc3RhcnRzV2l0aCgidGV4dC91cmktbGlzdDsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2Fy
ZERhdGFUeXBlVVJJTGlzdDsKLQotICAgIC8vIE5vdCBhIGtub3duIHR5cGUsIHNvIGp1c3QgZGVm
YXVsdCB0byB1c2luZyB0aGUgdGV4dCBwb3J0aW9uLgotICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZVVua25vd247Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlU3RyaW5nKQotewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFP
YmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOwotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJVUklMaXN0KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXA6Ci0gICAg
ICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJNYXJrdXAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJUZXh0
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVJbWFnZToKLSAg
ICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckltYWdlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFy
QWxsKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChtX2NsaXBib2FyZCkKLSAg
ICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVD
bGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLQotdm9pZCBDbGlwYm9hcmRHdGs6
OmNsZWFyQWxsRGF0YSgpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBkbyBub3QgY2xlYXIgZmlsZW5hbWVzLiBB
Y2NvcmRpbmcgdG8gdGhlIHNwZWM6ICJUaGUgY2xlYXJEYXRhKCkgbWV0aG9kCi0gICAgLy8gZG9l
cyBub3QgYWZmZWN0IHdoZXRoZXIgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcs
IHNvIHRoZSB0eXBlcwotICAgIC8vIGF0dHJpYnV0ZSdzIGxpc3QgbWlnaHQgc3RpbGwgbm90IGJl
IGVtcHR5IGFmdGVyIGNhbGxpbmcgY2xlYXJEYXRhKCkgKGl0IHdvdWxkIAotICAgIC8vIHN0aWxs
IGNvbnRhaW4gdGhlICJGaWxlcyIgc3RyaW5nIGlmIGFueSBmaWxlcyB3ZXJlIGluY2x1ZGVkIGlu
IHRoZSBkcmFnKS4iCi0gICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygp
OwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJk
KTsKLX0KLQotU3RyaW5nIENsaXBib2FyZEd0azo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGVT
dHJpbmcpIGNvbnN0Ci17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8
ICFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChtX2Ns
aXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0gICAgQ2xpcGJvYXJk
RGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVT
dHJpbmcpOwotICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCkKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJpTGlzdCgpOwotICAgIGlmICh0eXBlID09IENsaXBi
b2FyZERhdGFUeXBlVVJMKQotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmwoKTsKLSAg
ICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCkKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+bWFya3VwKCk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVU
ZXh0KQotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50ZXh0KCk7Ci0KLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkR3RrOjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgdHlwZSA9IGRhdGFPYmplY3RUeXBl
RnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGVTdHJpbmcpOwotICAgIGlmICh0eXBlID09IENsaXBi
b2FyZERhdGFUeXBlVVJJTGlzdCB8fCB0eXBlID09IENsaXBib2FyZERhdGFUeXBlVVJMKSB7Ci0g
ICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VVJJTGlzdChkYXRhKTsKLSAgICAgICAgc3VjY2VzcyA9
IHRydWU7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlTWFya3VwKSB7
Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGRhdGEpOwotICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0KSB7
Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChkYXRhKTsKLSAgICAgICAgc3VjY2VzcyA9
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLUxpc3RIYXNoU2V0PFN0
cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0Ci17Ci0gICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUp
Ci0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7Ci0KLSAgICBpZiAobV9jbGlw
Ym9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLQotICAgIExpc3RIYXNoU2V0
PFN0cmluZz4gdHlwZXM7Ci0gICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7Ci0gICAg
ICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgICAgICB0eXBlcy5hZGQoIlRleHQiKTsK
LSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7Ci0gICAgfQotCi0gICAgaWYgKG1fZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpCi0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7Ci0KLSAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0
L3VyaS1saXN0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVVJMIik7Ci0gICAgfQotCi0gICAgaWYg
KG1fZGF0YU9iamVjdC0+aGFzRmlsZW5hbWVzKCkpCi0gICAgICAgIHR5cGVzLmFkZCgiRmlsZXMi
KTsKLQotICAgIHJldHVybiB0eXBlczsKLX0KLQotUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJv
YXJkR3RrOjpmaWxlcygpIGNvbnN0Ci17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJl
YWRhYmxlKQotICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKG1f
Y2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0KLSAgICBSZWZQdHI8
RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKQotICAgICAgICBmaWxl
TGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXNbaV0sIEZpbGU6OkFsbENvbnRlbnRU
eXBlcykpOwotICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQ2xpcGJv
YXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
bG9jYXRpb24pCi17Ci0gICAgc2V0RHJhZ0ltYWdlKGltYWdlLCAwLCBsb2NhdGlvbik7Ci19Ci0K
LXZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqIGVsZW1lbnQsIGNv
bnN0IEludFBvaW50JiBsb2NhdGlvbikKLXsKLSAgICBzZXREcmFnSW1hZ2UoMCwgZWxlbWVudCwg
bG9jYXRpb24pOwotfQotCi12b2lkIENsaXBib2FyZEd0azo6c2V0RHJhZ0ltYWdlKENhY2hlZElt
YWdlKiBpbWFnZSwgTm9kZSogZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQotewot
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRJbWFnZVdyaXRhYmxlICYmIHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kcmFnSW1h
Z2UpCi0gICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgbV9kcmFn
SW1hZ2UgPSBpbWFnZTsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIG1fZHJhZ0ltYWdl
LT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICBtX2RyYWdMb2MgPSBsb2NhdGlvbjsKLSAgICBtX2Ry
YWdJbWFnZUVsZW1lbnQgPSBlbGVtZW50OwotfQotCi1EcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkR3Rr
OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxvY2F0aW9uKSBjb25zdAotewotICAgIGxvY2F0
aW9uID0gbV9kcmFnTG9jOwotCi0gICAgaWYgKG1fZHJhZ0ltYWdlKQotICAgICAgICByZXR1cm4g
Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKG1fZHJhZ0ltYWdlLT5pbWFnZSgpKTsKLSAgICBpZiAo
bV9kcmFnSW1hZ2VFbGVtZW50ICYmIG1fZnJhbWUpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lLT5u
b2RlSW1hZ2UobV9kcmFnSW1hZ2VFbGVtZW50LmdldCgpKTsKLQotICAgIHJldHVybiAwOyAvLyBX
ZSBkbyBub3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgZHJhZyBpbWFnZSwg
dXNlIHRoZSBkZWZhdWx0IGljb24uCi19Ci0KLXN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVk
SW1hZ2UoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICAvLyBBdHRlbXB0IHRvIHB1bGwgQ2FjaGVk
SW1hZ2UgZnJvbSBlbGVtZW50Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwg
IXJlbmRlcmVyLT5pc0ltYWdlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVuZGVySW1h
Z2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcik7Ci0gICAgaWYg
KGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JPY2N1
cnJlZCgpKQotICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCk7Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZy
YW1lKiBmcmFtZSkKLXsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKLSAg
ICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5v
ZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7Ci0KLSAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBnZXRD
YWNoZWRJbWFnZShlbGVtZW50KTsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNMb2FkZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFk
b3B0R1JlZihpbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+Z2V0
R2RrUGl4YnVmKCkpOwotICAgIGlmICghcGl4YnVmKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2RhdGFPYmplY3QtPnNldEltYWdlKHBpeGJ1Zi5nZXQoKSk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJk
R3RrOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1l
KikKLXsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKLSAgICBpZiAobV9j
bGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVs
cGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotfQotCi12b2lkIENs
aXBib2FyZEd0azo6d3JpdGVSYW5nZShSYW5nZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSkKLXsKLSAg
ICBBU1NFUlQocmFuZ2UpOwotCi0gICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0
b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOwotICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0
ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVO
b25Mb2NhbFVSTHMpKTsKLQotICAgIGlmIChtX2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2Fy
ZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50
cyhtX2NsaXBib2FyZCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjp3cml0ZVBsYWluVGV4dChj
b25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHRleHQpOwot
Ci0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
LX0KLQotYm9vbCBDbGlwYm9hcmRHdGs6Omhhc0RhdGEoKQotewotICAgIGlmIChtX2NsaXBib2Fy
ZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+
Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0gICAgcmV0dXJuIG1fZGF0YU9i
amVjdC0+aGFzVGV4dCgpIHx8IG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkKLSAgICAgICAgfHwg
bV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNJbWFnZSgpOwot
fQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
R3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOWQ2M2NlNGYyY2U4YmMxMTJkMGYyMDkzZWU1ODgz
OTMyMjhlMzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCisrKyAvZGV2L251bGwK
QEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9hcmRHdGtfaAot
I2RlZmluZSBDbGlwYm9hcmRHdGtfaAotCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIK
LSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBDYWNoZWRJbWFnZTsKLSAgICBjbGFzcyBGcmFt
ZTsKLSAgICBjbGFzcyBQYXN0ZWJvYXJkSGVscGVyOwotCi0gICAgLy8gU3RhdGUgYXZhaWxhYmxl
IGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotICAg
IC8vIENyZWF0ZWQgZnJvbSB0aGUgRXZlbnRIYW5kbGVyR3RrIHRvIGJlIHVzZWQgYnkgdGhlIGRv
bQotICAgIGNsYXNzIENsaXBib2FyZEd0ayA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNo
ZWRJbWFnZUNsaWVudCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkR3RrPiBjcmVhdGUoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1l
KiBmcmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlw
Ym9hcmRHdGsocG9saWN5LCBjbGlwYm9hcmQsIGZyYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kgcG9saWN5LCBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QsIENsaXBi
b2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwgRnJhbWUqIGZyYW1lKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEd0ayhwb2xpY3ksIGRhdGFPYmplY3Qs
IGNsaXBib2FyZFR5cGUsIGZyYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+Q2xp
cGJvYXJkR3RrKCk7Ci0KLSAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJik7Ci0g
ICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7Ci0gICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwotICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJik7Ci0KLSAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBj
b25zdDsKLQotICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3Qg
SW50UG9pbnQmKTsKLSAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2Rl
KiwgY29uc3QgSW50UG9pbnQmKTsKLQotICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVh
dGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYs
IEZyYW1lKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFu
Z2UqLCBGcmFtZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKLQotICAgICAgICBQ
YXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoKSB7IHJldHVybiBtX2RhdGFPYmpl
Y3Q7IH0KLSAgICAgICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVybiBtX2NsaXBi
b2FyZDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENsaXBib2FyZEFj
Y2Vzc1BvbGljeSwgR3RrQ2xpcGJvYXJkKiwgRnJhbWUqKTsKLSAgICAgICAgQ2xpcGJvYXJkR3Rr
KENsaXBib2FyZEFjY2Vzc1BvbGljeSwgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiwgQ2xpcGJv
YXJkVHlwZSwgRnJhbWUqKTsKLQotICAgICAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gbV9kYXRh
T2JqZWN0OwotICAgICAgICBHdGtDbGlwYm9hcmQqIG1fY2xpcGJvYXJkOwotICAgICAgICBGcmFt
ZSogbV9mcmFtZTsKLSAgICB9OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDlmYzBlNzQ0NmUwZWVkZTEyNWIxMGNhNGE4MmU2OWE3ZjY1YTI1NTAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5M
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJh
dGlvbiBjb3JlQWN0aW9uKQotewotICAgIEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uID0gc3RhdGlj
X2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7Ci0gICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJh
dGlvbk5vbmUpCi0gICAgICAgIHJldHVybiBnZGtBY3Rpb247Ci0KLSAgICBpZiAoY29yZUFjdGlv
biAmIERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxH
ZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBnZGtBY3Rpb24pOwotICAgIGlmIChjb3Jl
QWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19j
YXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTU9WRSB8IGdka0FjdGlvbik7Ci0gICAgaWYg
KGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAgZ2RrQWN0aW9uID0gc3Rh
dGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9MSU5LIHwgZ2RrQWN0aW9uKTsKLSAg
ICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQotICAgICAgICBnZGtBY3Rp
b24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX1BSSVZBVEUgfCBnZGtB
Y3Rpb24pOwotCi0gICAgcmV0dXJuIGdka0FjdGlvbjsKLX0KLQotR2RrRHJhZ0FjdGlvbiBkcmFn
T3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikK
LXsKLSAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlv
biAmIERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOwot
ICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIHJldHVybiBH
REtfQUNUSU9OX01PVkU7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykK
LSAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERy
YWdPcGVyYXRpb25Qcml2YXRlKQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLX0KLQotRHJhZ09wZXJh
dGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9u
KQotewotICAgIC8vIFdlIGhhdmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25F
dmVyeSBvdGhlciB0aGFuCi0gICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxh
Z3MgYXJlIG9uLgotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkgJiYgZ2RrQWN0
aW9uICYgR0RLX0FDVElPTl9NT1ZFCi0gICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05f
TElOSyAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZBVEUpCi0gICAgICAgIHJldHVybiBE
cmFnT3BlcmF0aW9uRXZlcnk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgYWN0aW9uID0gRHJhZ09wZXJh
dGlvbk5vbmU7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWSkKLSAgICAgICAg
YWN0aW9uIHw9IERyYWdPcGVyYXRpb25Db3B5OwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNU
SU9OX01PVkUpCi0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTW92ZTsKLSAgICBpZiAo
Z2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJh
dGlvbkxpbms7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKLSAgICAg
ICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Qcml2YXRlOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEcmFnT3BlcmF0aW9uPihhY3Rpb24pOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI2ZjYzNDY5ZTJiOGRlNDVjMDE3Nzc1ZjBiNDI5MmJkNmJhYzQ3NDIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oCisrKyAvZGV2L251bGwKQEAg
LTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkVXRpbGl0aWVz
R3RrX2gKLSNkZWZpbmUgQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKLQotI2luY2x1ZGUgIkRyYWdB
Y3Rpb25zLmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlv
bik7Ci1HZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJh
Z09wZXJhdGlvbik7Ci1EcmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24o
R2RrRHJhZ0FjdGlvbik7Ci0KLX0KLQotI2VuZGlmIC8vIENsaXBib2FyZFV0aWxpdGllc0d0a19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1
bHRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NWYyM2JiNTk2ZThjMmVhZWIzMjk3MTBk
ZjQ4ZTQ3NGM3ZWM0NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENvbXBvc2l0aW9uUmVzdWx0c19oCi0jZGVmaW5l
IENvbXBvc2l0aW9uUmVzdWx0c19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgQ29tcG9zaXRpb25SZXN1bHRzIHsKLSAg
ICBDb21wb3NpdGlvblJlc3VsdHMoKQotICAgICAgICA6IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0Nv
bXBvc2l0aW9uVXBkYXRlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBDb21wb3NpdGlvblJl
c3VsdHMoU3RyaW5nIHNpbXBsZVN0cmluZykKLSAgICAgICAgOiBzaW1wbGVTdHJpbmcoc2ltcGxl
U3RyaW5nKQotICAgICAgICAsIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRl
KGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBlbnVtIFJlc3VsdHNJbmRpY2F0b3IgeyBXaWxs
U2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24gfTsKLSAgICBDb21wb3NpdGlvblJlc3VsdHMoUmVz
dWx0c0luZGljYXRvcikKLSAgICAgICAgOiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlv
blVwZGF0ZSh0cnVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNvbXBvc2l0aW9uVXBkYXRl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29t
cG9zaXRpb25VcGRhdGU7Ci0gICAgfQotCi0gICAgLy8gU29tZSBzaW1wbGUgaW5wdXQgbWV0aG9k
cyByZXR1cm4gYSBzdHJpbmcgZm9yIGFsbCBrZXlib2FyZCBldmVudHMuIFRoaXMKLSAgICAvLyB2
YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBrZXljb2RlLgotICAgIFN0cmluZyBzaW1wbGVTdHJpbmc7Ci0KLSAgICBib29sIGFzc29jaWF0
ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gQ29t
cG9zaXRpb25SZXN1bHRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4
dE1lbnVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzAwMmM0ZDlmZDc4
MmY5MjcwNGM0OTc2YzQzN2VhMWY5ZTVkZGI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVu
dUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIK
LQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUNvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0
aW9uID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwotfQotCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1fcGxhdGZv
cm1EZXNjcmlwdGlvbihtZW51KQotewotfQotCi1Db250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkK
LXsKLSAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQotICAgICAgICBndGtfd2lkZ2V0X2Rl
c3Ryb3koR1RLX1dJREdFVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBDb250
ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCi17Ci0gICAgQVNTRVJU
KG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZv
cm1JdGVtID0gR1RLX1dJREdFVChpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwot
ICAgIEFTU0VSVChwbGF0Zm9ybUl0ZW0pOwotCi0gICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0g
Z3RrX3dpZGdldF9nZXRfcGFyZW50KHBsYXRmb3JtSXRlbS5nZXQoKSkpCi0gICAgICAgIGd0a19j
b250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgp
KTsKLQotICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pLCBwbGF0Zm9ybUl0ZW0uZ2V0KCkpOwotICAgIGd0a193aWRnZXRfc2hvdyhw
bGF0Zm9ybUl0ZW0uZ2V0KCkpOwotfQotCi12b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURl
c2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAgQVNTRVJUKG1l
bnUpOwotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24gPT0gbWVudSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0gICAgICAgIGd0a193aWRnZXRf
ZGVzdHJveShHVEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotCi0gICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gbWVudTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29u
dGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3Bs
YXRmb3JtRGVzY3JpcHRpb247Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRN
ZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gMDsKLQotICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLX0KLQotdW5z
aWduZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbik7Ci0KLSAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29u
dGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikp
KTsKLSAgICByZXR1cm4gZ19saXN0X2xlbmd0aChjaGlsZHJlbi5nZXQoKSk7Ci19Ci0KLVZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0+IGNvbnRleHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBtZW51KQotewotICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJ
dGVtVmVjdG9yOwotCi0gICAgR093blB0cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9n
ZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtZW51KSkpOwotICAgIGludCBpdGVtQ291bnQgPSBn
X2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKLSAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZl
Q2FwYWNpdHkoaXRlbUNvdW50KTsKLQotICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5n
ZXQoKTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAgICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7Ci0gICAgICAg
IGlmICghR1RLX0lTX01FTlVfSVRFTSh3aWRnZXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIG1lbnVJdGVtVmVjdG9yLmFwcGVuZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOwotICAg
IH0KLQotICAgIHJldHVybiBtZW51SXRlbVZlY3RvcjsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gcGxhdGZvcm1NZW51RGVzY3JpcHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1
Yk1lbnVJdGVtcykKLXsKLSAgICBHdGtNZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3
KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIEd0a1dpZGdldCogcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51
SXRlbXNbaV0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIGd0a19tZW51
X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKLSAgICAg
ICAgZ3RrX3dpZGdldF9zaG93KHBsYXRmb3JtSXRlbSk7Ci0gICAgfQotICAgIHJldHVybiBtZW51
OwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MGI1YmU2YmRmMGJkOWNmYzc3OGNhMjA1ZGIyMzg3NTVj
MzFlMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAot
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNsdWRl
ICJDb250ZXh0TWVudUl0ZW0uaCIKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jZGVmaW5lIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OICJ3ZWJraXQtY29udGV4dC1tZW51
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBndGtTdG9ja0lE
RnJvbUNvbnRleHRNZW51QWN0aW9uKGNvbnN0IENvbnRleHRNZW51QWN0aW9uJiBhY3Rpb24pCi17
Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlM
aW5rVG9DbGlwYm9hcmQ6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0Ns
aXBib2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxpbmtUb0NsaXBi
b2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6Ci0gICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfQ09QWTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdX
aW5kb3c6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoK
LSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfT1BFTjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlu
a1RvRGlzazoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6
Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0FWRTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0dvQmFjazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19HT19CQUNLOwotICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dP
X0ZPUldBUkQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX1NUT1A7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6Ci0g
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfUkVGUkVTSDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0N1dDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19DVVQ7Ci0gICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19QQVNURTsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19E
RUxFVEU7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6Ci0gICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfU0VMRUNUX0FMTDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nw
ZWxsaW5nR3Vlc3M6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnSWdub3JlU3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfTk87Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nOgotICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX09LOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3RoZXI6Ci0gICAgICAgIHJldHVy
biBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nl
YXJjaEluU3BvdGxpZ2h0OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0ZJTkQ7Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
RklORDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFwcGxpY2F0
aW9uOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47Ci0gICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZab29tSW46Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfWk9PTV9JTjsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVBERlpvb21PdXQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
Wk9PTV9PVVQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19aT09NX0ZJVDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERk5l
eHRQYWdlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0ZPUldBUkQ7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZQcmV2aW91c1BhZ2U6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
R09fQkFDSzsKLSAgICAvLyBOZXcgdGFncywgbm90IHBhcnQgb2YgQVBJCi0gICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19PUEVOOwot
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZzoKLSAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19TUEVMTF9DSEVDSzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRN
ZW51OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVDVF9GT05UOwotICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1NFTEVD
VF9GT05UOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKLSAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19CT0xEOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOgotICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX0lUQUxJQzsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuZGVybGluZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19VTkRFUkxJTkU7Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X1NFTEVDVF9DT0xPUjsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29u
dHJvbHM6Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKLSAgICAgICAg
Ly8gTm8gaWNvbiBmb3IgdGhpcy4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19GVUxMU0NSRUVOOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc3RhdGljIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBjcmVhdGVQbGF0Zm9ybU1lbnVJ
dGVtRGVzY3JpcHRpb24oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2Vk
KQotewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgIHJldHVybiBHVEtf
TUVOVV9JVEVNKGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpKTsKLQotICAgIEdPd25QdHI8
Y2hhcj4gYWN0aW9uTmFtZShnX3N0cmR1cF9wcmludGYoImNvbnRleHQtbWVudS1hY3Rpb24tJWQi
LCBhY3Rpb24pKTsKLSAgICBHUmVmUHRyPEd0a0FjdGlvbj4gcGxhdGZvcm1BY3Rpb247Ci0KLSAg
ICBpZiAodHlwZSA9PSBDaGVja2FibGVBY3Rpb25UeXBlKSB7Ci0gICAgICAgIHBsYXRmb3JtQWN0
aW9uID0gYWRvcHRHUmVmKEdUS19BQ1RJT04oZ3RrX3RvZ2dsZV9hY3Rpb25fbmV3KGFjdGlvbk5h
bWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2NrSURGcm9tQ29udGV4dE1l
bnVBY3Rpb24oYWN0aW9uKSkpKTsKLSAgICAgICAgZ3RrX3RvZ2dsZV9hY3Rpb25fc2V0X2FjdGl2
ZShHVEtfVE9HR0xFX0FDVElPTihwbGF0Zm9ybUFjdGlvbi5nZXQoKSksIGNoZWNrZWQpOwotICAg
IH0gZWxzZQotICAgICAgICBwbGF0Zm9ybUFjdGlvbiA9IGFkb3B0R1JlZihndGtfYWN0aW9uX25l
dyhhY3Rpb25OYW1lLmdldCgpLCB0aXRsZS51dGY4KCkuZGF0YSgpLCAwLCBndGtTdG9ja0lERnJv
bUNvbnRleHRNZW51QWN0aW9uKGFjdGlvbikpKTsKLSAgICBndGtfYWN0aW9uX3NldF9zZW5zaXRp
dmUocGxhdGZvcm1BY3Rpb24uZ2V0KCksIGVuYWJsZWQpOwotCi0gICAgR3RrTWVudUl0ZW0qIGl0
ZW0gPSBHVEtfTUVOVV9JVEVNKGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRlbShwbGF0Zm9ybUFj
dGlvbi5nZXQoKSkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGl0ZW0pLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTiwgR0lOVF9UT19QT0lOVEVSKGFjdGlvbikpOwotCi0gICAg
cmV0dXJuIGl0ZW07Ci19Ci0KLS8vIEV4dHJhY3QgdGhlIEFjdGlvblR5cGUgZnJvbSB0aGUgbWVu
dSBpdGVtCi1Db250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24gaXRlbSkKLSAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihpdGVtKQotewot
ICAgIC8vIERvbid0IHNob3cgYWNjZWwgbGFiZWxzIGluIGNvbnRleHQgbWVudSBpdGVtcy4KLSAg
ICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigpOwotICAgIGlmICghYWN0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWd0a19hY3Rpb25fZ2V0X2FjY2VsX3BhdGgoYWN0aW9u
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBjaGlsZCA9IGd0a19iaW5fZ2V0
X2NoaWxkKEdUS19CSU4oaXRlbSkpOwotICAgIGlmIChHVEtfSVNfQUNDRUxfTEFCRUwoY2hpbGQp
KQotICAgICAgICBndGtfYWNjZWxfbGFiZWxfc2V0X2FjY2VsX2Nsb3N1cmUoR1RLX0FDQ0VMX0xB
QkVMKGNoaWxkKSwgMCk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENv
bnRleHRNZW51KiBzdWJNZW51KQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19N
RU5VX0lURU0oZ3RrX21lbnVfaXRlbV9uZXcoKSk7Ci0gICAgaWYgKHN1Yk1lbnUpCi0gICAgICAg
IHNldFN1Yk1lbnUoc3ViTWVudSk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJ
dGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBDb250ZXh0TWVudSogc3ViTWVudSkKLXsKLSAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24odHlwZSwg
YWN0aW9uLCB0aXRsZSwgdHJ1ZSwgZmFsc2UpOwotICAgIGlmIChzdWJNZW51KQotICAgICAgICBz
ZXRTdWJNZW51KHN1Yk1lbnUpOwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRl
bShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29u
c3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQpCi17Ci0gICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gY3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKHR5
cGUsIGFjdGlvbiwgdGl0bGUsIGVuYWJsZWQsIGNoZWNrZWQpOwotfQotCi1Db250ZXh0TWVudUl0
ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIGJvb2wgZW5hYmxlZCwgYm9vbCBjaGVja2VkLCBWZWN0b3I8Q29udGV4dE1lbnVJ
dGVtPiYgc3ViTWVudUl0ZW1zKQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0
ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbihTdWJtZW51VHlwZSwgYWN0aW9uLCB0aXRsZSwg
ZW5hYmxlZCwgY2hlY2tlZCk7Ci0gICAgc2V0U3ViTWVudShzdWJNZW51SXRlbXMpOwotfQotCi1D
b250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0oKQotewotfQotCi1QbGF0Zm9ybU1lbnVJ
dGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlv
bigpCi17Ci0gICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRp
b24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0g
MDsKLSAgICByZXR1cm4gcGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotQ29udGV4dE1lbnVJdGVt
VHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAotewotICAgIGlmIChHVEtfSVNfU0VQ
QVJBVE9SX01FTlVfSVRFTShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4g
U2VwYXJhdG9yVHlwZTsKLSAgICBpZiAoR1RLX0lTX0NIRUNLX01FTlVfSVRFTShtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4gQ2hlY2thYmxlQWN0aW9uVHlwZTsKLSAgICBp
ZiAoZ3RrX21lbnVfaXRlbV9nZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKQotICAg
ICAgICByZXR1cm4gU3VibWVudVR5cGU7Ci0gICAgcmV0dXJuIEFjdGlvblR5cGU7Ci19Ci0KLXZv
aWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSkKLXsK
LSAgICBpZiAodHlwZSA9PSBTZXBhcmF0b3JUeXBlKQotICAgICAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24gPSBHVEtfTUVOVV9JVEVNKGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpKTsKLX0K
LQotQ29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUFjdGlvbj4oR1BPSU5URVJfVE9fSU5U
KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJ
VF9DT05URVhUX01FTlVfQUNUSU9OKSkpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0
QWN0aW9uKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTiwgR0lOVF9UT19QT0lOVEVSKGFjdGlvbikpOwotfQotCi1TdHJpbmcgQ29udGV4dE1lbnVJ
dGVtOjp0aXRsZSgpIGNvbnN0Ci17Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24o
KTsKLSAgICByZXR1cm4gYWN0aW9uID8gU3RyaW5nOjpmcm9tVVRGOChndGtfYWN0aW9uX2dldF9s
YWJlbChhY3Rpb24pKSA6IFN0cmluZygpOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0
VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0
a0FjdGlvbigpOwotICAgIGlmIChhY3Rpb24pCi0gICAgICAgIGd0a19hY3Rpb25fc2V0X2xhYmVs
KGFjdGlvbiwgdGl0bGUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0
aW9uIENvbnRleHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkgY29uc3QKLXsKLSAgICBHdGtX
aWRnZXQqIHN1Yk1lbnUgPSBndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNj
cmlwdGlvbik7Ci0gICAgcmV0dXJuIHN1Yk1lbnUgPyBHVEtfTUVOVShzdWJNZW51KSA6IDA7Ci19
Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KiBtZW51KQot
ewotICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUobV9wbGF0Zm9ybURlc2NyaXB0aW9uLCBH
VEtfV0lER0VUKG1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpKTsKLX0KLQotdm9p
ZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1
Yk1lbnVJdGVtcykKLXsKLSAgICBDb250ZXh0TWVudSBtZW51KHBsYXRmb3JtTWVudURlc2NyaXB0
aW9uKHN1Yk1lbnVJdGVtcykpOwotICAgIHNldFN1Yk1lbnUoJm1lbnUpOwotfQotCi12b2lkIENv
bnRleHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sIHNob3VsZENoZWNrKQotewotICAgIEd0a0Fj
dGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAmJiBHVEtfSVNfVE9H
R0xFX0FDVElPTihhY3Rpb24pKQotICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0aXZl
KEdUS19UT0dHTEVfQUNUSU9OKGFjdGlvbiksIHNob3VsZENoZWNrKTsKLX0KLQotYm9vbCBDb250
ZXh0TWVudUl0ZW06OmNoZWNrZWQoKSBjb25zdAotewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0g
Z3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAmJiBHVEtfSVNfVE9HR0xFX0FDVElPTihhY3Rp
b24pKQotICAgICAgICByZXR1cm4gZ3RrX3RvZ2dsZV9hY3Rpb25fZ2V0X2FjdGl2ZShHVEtfVE9H
R0xFX0FDVElPTihhY3Rpb24pKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ29udGV4
dE1lbnVJdGVtOjplbmFibGVkKCkgY29uc3QKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0
a0FjdGlvbigpOwotICAgIHJldHVybiBhY3Rpb24gPyBndGtfYWN0aW9uX2dldF9zZW5zaXRpdmUo
YWN0aW9uKSA6IGZhbHNlOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0RW5hYmxlZChi
b29sIHNob3VsZEVuYWJsZSkKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlvbigp
OwotICAgIGlmIChhY3Rpb24pCi0gICAgICAgIGd0a19hY3Rpb25fc2V0X3NlbnNpdGl2ZShhY3Rp
b24sIHNob3VsZEVuYWJsZSk7Ci19Ci0KLUd0a0FjdGlvbiogQ29udGV4dE1lbnVJdGVtOjpndGtB
Y3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBndGtfYWN0aXZhdGFibGVfZ2V0X3JlbGF0ZWRf
YWN0aW9uKEdUS19BQ1RJVkFUQUJMRShtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKLX0KLQotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DdXJzb3JHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmI5MDVh
OTY0ZGU3NjIzNDIwOWMyZjVjOTFjNmNkZjc5MDU0MjA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJz
b3JHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJp
Z2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDEyIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDdXJzb3JHdGsuaCIK
LSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1
ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxnZGsv
Z2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIEdSZWZQdHI8R2RrQ3Vyc29yPiBjcmVh
dGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JUeXBlIGN1cnNvclR5cGUpCi17Ci0gICAgQ3VzdG9t
Q3Vyc29yIGN1cnNvciA9IEN1c3RvbUN1cnNvcnNbY3Vyc29yVHlwZV07Ci0gICAgR1JlZlB0cjxH
ZGtDdXJzb3I+IGMgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXdfZnJvbV9uYW1lKGdka19kaXNw
bGF5X2dldF9kZWZhdWx0KCksIGN1cnNvci5uYW1lKSk7Ci0gICAgaWYgKGMpCi0gICAgICAgIHJl
dHVybiBjOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc291cmNlID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY29uc3RfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oY3Vyc29yLmJpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwgNCkpOwotICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1hc2sgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfZGF0YShjb25zdF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjdXJzb3IubWFza19i
aXRzKSwgQ0FJUk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJ
Uk9fRk9STUFUX0ExLCAzMiwgMzIpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJl
ZihjYWlyb19jcmVhdGUoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKGNyLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX21hc2tfc3Vy
ZmFjZShjci5nZXQoKSwgbWFzay5nZXQoKSwgMCwgMCk7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGdka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShzdXJmYWNl
LmdldCgpLCAwLCAwLCAzMiwgMzIpKTsKLSAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3Jf
bmV3X2Zyb21fcGl4YnVmKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwg
Y3Vyc29yLmhvdF94LCBjdXJzb3IuaG90X3kpKTsKLX0KLQotc3RhdGljIEdSZWZQdHI8R2RrQ3Vy
c29yPiBjcmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90
U3BvdCkKLXsKLSAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0ZXJtaW5lSG90U3Bv
dChpbWFnZSwgaG90U3BvdCk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0
R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgIHJldHVybiBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgcGl4YnVmLmdl
dCgpLCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCkpKTsKLX0KLQot
dm9pZCBDdXJzb3I6OmVuc3VyZVBsYXRmb3JtQ3Vyc29yKCkgY29uc3QKLXsKLSAgICBpZiAobV9w
bGF0Zm9ybUN1cnNvciB8fCBtX3R5cGUgPT0gQ3Vyc29yOjpQb2ludGVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgot
ICAgICAgICAvLyBBIG51bGwgR2RrQ3Vyc29yIGlzIHRoZSBkZWZhdWx0IGN1cnNvciBmb3IgdGhl
IHdpbmRvdy4KLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0
R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQ1JPU1MpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDdXJzb3I6OkhhbmQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2Rr
X2N1cnNvcl9uZXcoR0RLX0hBTkQyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29y
OjpJQmVhbToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29y
X25ldyhHREtfWFRFUk0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OldhaXQ6
Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RL
X1dBVENIKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgotICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19RVUVTVElP
Tl9BUlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6TW92ZToKLSAgICBj
YXNlIEN1cnNvcjo6TWlkZGxlUGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFk
b3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfRkxFVVIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDdXJzb3I6OkVhc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19S
SUdIVF9TSURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFJlc2l6
ZToKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfU0lERSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgotICAgIGNhc2UgQ3Vyc29y
OjpOb3J0aEVhc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVm
KGdka19jdXJzb3JfbmV3KEdES19UT1BfUklHSFRfQ09STkVSKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRo
V2VzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1
cnNvcl9uZXcoR0RLX1RPUF9MRUZUX0NPUk5FUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEN1cnNvcjo6U291dGhSZXNpemU6Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoUGFubmluZzoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9U
VE9NX1NJREUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJl
c2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1JJR0hUX0NP
Uk5FUikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXpl
OgotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fTEVGVF9DT1JORVIp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6Ci0gICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lE
RSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToK
LSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtf
VE9QX1RFRSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNp
emU6Ci0gICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZToKLSAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKLSAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfSF9ET1VCTEVfQVJST1cp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKLSAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfU0JfVl9ET1VC
TEVfQVJST1cpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4
dDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1
cnNvclZlcnRpY2FsVGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDZWxs
OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdE
S19QTFVTKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToK
LSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNv
ckNvbnRleHRNZW51KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkFsaWFzOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29y
QWxpYXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JQcm9n
cmVzcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb0Ryb3A6Ci0gICAgY2Fz
ZSBDdXJzb3I6Ok5vdEFsbG93ZWQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVO
YW1lZEN1cnNvcihDdXN0b21DdXJzb3JOb0Ryb3ApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEN1cnNvcjo6Q29weToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vy
c29yKEN1c3RvbUN1cnNvckNvcHkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6
Tm9uZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3Rv
bUN1cnNvck5vbmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Wm9vbUluOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29y
Wm9vbUluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Olpvb21PdXQ6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3Jab29t
T3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkdyYWI6Ci0gICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JHcmFiKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkdyYWJiaW5nOgotICAgICAgICBtX3BsYXRm
b3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYmJpbmcpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gY3JlYXRlQ3VzdG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBv
dGhlcikKLSAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgLCBtX2ltYWdlKG90aGVyLm1f
aW1hZ2UpCi0gICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RTcG90KQotICAgICwgbV9wbGF0Zm9y
bUN1cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQotewotfQotCi1DdXJzb3ImIEN1cnNvcjo6
b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCi17Ci0gICAgbV90eXBlID0gb3RoZXIubV90
eXBlOwotICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwotICAgIG1faG90U3BvdCA9IG90aGVy
Lm1faG90U3BvdDsKLSAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNv
cjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTY4OTE5YmEzMzVhMmFlNTRmMjhhNDYxOTA1ODNiM2E0YmEyNDY2MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBA
QAotLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBMIDEu
MS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUg
c3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRo
ZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJl
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNl
LgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCi0gKgotICog
VGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCi0gKiBUaW0gQ29w
cGVyZmllbGQuCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBh
cmUgQ29weXJpZ2h0IChDKSAyMDAxCi0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKiAgIFRpbSBDb3BwZXJmaWVs
ZCA8dGltZWNvcEBuZXR3b3JrLmVtYWlsLm5lLmpwPgotICogICBDaHJpc3RpYW4gRHl3YW4gPGNo
cmlzdGlhbkB0d290b2FzdHMuZGU+Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQ
TCIpLCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2Yg
dGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0
aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0g
KiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkg
dGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhl
IExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lmbmRl
ZiBDdXJzb3JHdGtfaAotI2RlZmluZSBDdXJzb3JHdGtfaAotCi0jaW5jbHVkZSAiQ3Vyc29yLmgi
Ci0KLS8qCi0gVGhlc2UgY3Vyc29ycyBhcmUgY29waWVkIGZyb20gTW96aWxsYSBjb2RlOgotICBo
dHRwOi8vbHhyLm1vemlsbGEub3JnL21vemlsbGExLjgvc291cmNlL3dpZGdldC9zcmMvZ3RrMi9u
c0d0a0N1cnNvcnMuaAotKi8KLQotLyogTU9aX0NVUlNPUl9WRVJUSUNBTF9URVhUICovCi1zdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4dF9iaXRzW10gPSB7Ci0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAs
IDB4MDAsIDB4MDAsCi0gIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2YsIDB4MDAs
IDB4MDAsIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAs
IDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3ZlcnRpY2FsX3RleHRfbWFza19iaXRz
W10gPSB7Ci0gIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAs
IDB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsCi0gIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmUs
IDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0gIDB4MGYsIDB4ZjAs
IDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAgfTsKLQotLyogTU9aX0NVUlNPUl9DT05URVhUX01FTlUgKi8KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgw
MCwgMHgwMCwgMHhmYywgMHhmZCwgMHgwMCwgMHgwMCwKLSAgMHhmYywgMHhmZiwgMHgwMCwgMHgw
MCwgMHg3YywgMHg4NCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmYywgMHgwMCwgMHgwMCwKLSAgMHhj
NCwgMHg4NCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NSwg
MHgwMCwgMHgwMCwKLSAgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBtb3pfbWVudV9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZCwg
MHgwMCwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhmZSwgMHhmZiwgMHgwMSwg
MHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMSwgMHgwMCwKLSAg
MHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhm
ZiwgMHgwMSwgMHgwMCwKLSAgMHhjMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmZCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VS
U09SX0NPUFkgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5X2JpdHNbXSA9
IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
NCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgw
MCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHg3YywgMHgwMCwgMHgw
MCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwgMHgwMCwgMHgwMCwK
LSAgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHg3YywgMHgzMCwgMHgwMCwgMHgwMCwgMHg2Yywg
MHgzMCwgMHgwMCwgMHgwMCwKLSAgMHhjNCwgMHhmYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywg
MHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwKLSAgMHg4MCwgMHgzMSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfY29weV9tYXNrX2JpdHNb
XSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgw
MCwKLSAgMHhmZSwgMHgzNywgMHgwMCwgMHgwMCwgMHhmZSwgMHg3YiwgMHgwMCwgMHgwMCwgMHhm
ZSwgMHhmYywgMHgwMCwgMHgwMCwKLSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhm
ZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHg3YiwgMHgw
MCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0FMSUFTICovCi1zdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciBtb3pfYWxpYXNfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAw
eDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAw
LCAweDAwLAotICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAw
LCAweGZjLCAweDAxLCAweDAwLCAweDAwLAotICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdj
LCAweGYwLCAweDAwLCAweDAwLCAweDZjLCAweGUwLCAweDAwLCAweDAwLAotICAweGM0LCAweGYw
LCAweDAwLCAweDAwLCAweGMwLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDE5LCAweDAwLCAw
eDAwLAotICAweDgwLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1vel9hbGlhc19tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgx
ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwg
MHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHhmNywgMHgwMCwgMHgwMCwg
MHhmZSwgMHhmYiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwMSwgMHgwMCwKLSAgMHhlZSwg
MHhmOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhiZiwgMHgw
MCwgMHgwMCwKLSAgMHhjMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOSwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1pP
T01fSU4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX2luX2JpdHNbXSA9
IHsKLSAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgw
MiwgMHgwNCwgMHgwMCwgMHgwMCwKLSAgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MSwgMHgw
OCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwKLSAgMHhmOSwgMHgwOSwgMHgw
MCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwK
LSAgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwg
MHgxYywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9pbl9tYXNrX2Jp
dHNbXSA9IHsKLSAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgw
MCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhm
ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHgw
ZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwg
MHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwg
MHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1pPT01fT1VUICovCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBtb3pfem9vbV9vdXRfYml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAw
LCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAot
ICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweGY5LCAw
eDA5LCAweDAwLCAweDAwLAotICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAw
eDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAotICAweDAyLCAweDA0LCAweDAwLCAw
eDAwLCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9tYXNrX2JpdHNbXSA9IHsKLSAgMHhmMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwg
MHgwMCwKLSAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwg
MHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwg
MHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKLSAgMHhmZSwgMHgwNywg
MHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHhlMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBN
T1pfQ1VSU09SX05PVF9BTExPV0VEICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pf
bm90X2FsbG93ZWRfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAw
eDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLAotICAweGYwLCAweGYwLCAw
eDAwLCAweDAwLCAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAzLCAweDAw
LAotICAweGVjLCAweDAwLCAweDAzLCAweDAwLCAweGNlLCAweDAxLCAweDA3LCAweDAwLCAweDg2
LCAweDAzLCAweDA2LCAweDAwLAotICAweDA2LCAweDA3LCAweDA2LCAweDAwLCAweDA2LCAweDBl
LCAweDA2LCAweDAwLCAweDA2LCAweDFjLCAweDA2LCAweDAwLAotICAweDBlLCAweDM4LCAweDA3
LCAweDAwLCAweDBjLCAweDcwLCAweDAzLCAweDAwLCAweDFjLCAweGUwLCAweDAzLCAweDAwLAot
ICAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAweGUwLCAw
eDdmLCAweDAwLCAweDAwLAotICAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
IG1vel9ub3RfYWxsb3dlZF9tYXNrX2JpdHNbXSA9IHsKLSAgMHg4MCwgMHgxZiwgMHgwMCwgMHgw
MCwgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhm
OCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmZSwgMHhjMCwg
MHgwNywgMHgwMCwKLSAgMHhmZSwgMHg4MSwgMHgwNywgMHgwMCwgMHhmZiwgMHg4MywgMHgwZiwg
MHgwMCwgMHhjZiwgMHgwNywgMHgwZiwgMHgwMCwKLSAgMHg4ZiwgMHgwZiwgMHgwZiwgMHgwMCwg
MHgwZiwgMHgxZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgzZSwgMHgwZiwgMHgwMCwKLSAgMHgxZiwg
MHhmYywgMHgwZiwgMHgwMCwgMHgxZSwgMHhmOCwgMHgwNywgMHgwMCwgMHgzZSwgMHhmMCwgMHgw
NywgMHgwMCwKLSAgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgw
MCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4
MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX1NQ
SU5OSU5HICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfc3Bpbm5pbmdfYml0c1td
ID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAw
eDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAwLCAw
eDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAw
LAotICAweGZjLCAweDNiLCAweDAwLCAweDAwLCAweDdjLCAweDM4LCAweDAwLCAweDAwLCAweDZj
LCAweDU0LCAweDAwLCAweDAwLAotICAweGM0LCAweGRjLCAweDAwLCAweDAwLCAweGMwLCAweDQ0
LCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLAotICAweDgwLCAweDM5LCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19tYXNr
X2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhmZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYiwgMHgw
MCwgMHgwMCwKLSAgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgw
MCwgMHhmZSwgMHhmZSwgMHgwMCwgMHgwMCwKLSAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhl
NCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHg3
ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX05PTkUgKi8KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBjaGFyIG1vel9ub25lX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5z
aWduZWQgY2hhciBtb3pfbm9uZV9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09S
X0hBTkRfR1JBQiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYl9i
aXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCi0gIDB4NjAsIDB4MzksIDB4MDAsIDB4MDAsIDB4
OTAsIDB4NDksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDksIDB4MDEsIDB4MDAsCi0gIDB4MjAsIDB4
YzksIDB4MDIsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDIsIDB4MDAsIDB4NTgsIDB4NDAsIDB4MDIs
IDB4MDAsCi0gIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDEsIDB4MDAs
IDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsCi0gIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTAs
IDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsCi0gIDB4NDAsIDB4NDAs
IDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3Jh
Yl9tYXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwg
MHgwMCwgMHgwMCwgMHg2MCwgMHgzZiwgMHgwMCwgMHgwMCwKLSAgMHhmMCwgMHg3ZiwgMHgwMCwg
MHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKLSAg
MHhmMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmYywgMHhm
ZiwgMHgwNywgMHgwMCwKLSAgMHhmZSwgMHhmZiwgMHgwNywgMHgwMCwgMHhmZSwgMHhmZiwgMHgw
MywgMHgwMCwgMHhmYywgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhmOCwgMHhmZiwgMHgwMywgMHgw
MCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhl
MCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0hBTkRfR1JBQkJJTkcgKi8K
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9oYW5kX2dyYWJiaW5nX2JpdHNbXSA9IHsK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHhjMCwgMHgzNiwgMHgwMCwg
MHgwMCwgMHgyMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMSwgMHgwMCwKLSAg
MHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgw
MCwgMHgwMSwgMHgwMCwKLSAgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgw
MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKLSAgMHg0MCwgMHg0MCwgMHgwMCwgMHgw
MCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCB9OwotCi1zdGF0aWMgY29uc3QgIHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdfbWFz
a19iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MzYsIDB4MDAsIDB4MDAsCi0gIDB4ZTAs
IDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4
MDMsIDB4MDAsCi0gIDB4ZTAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDMsIDB4
MDAsIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsCi0gIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4
ZjgsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsCi0gIDB4ZTAsIDB4
ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2YsIDB4MDAs
IDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAgfTsKLQotZW51bSBDdXN0b21DdXJzb3JUeXBlIHsKLSAgICBDdXN0b21D
dXJzb3JDb3B5ID0gMCwKLSAgICBDdXN0b21DdXJzb3JBbGlhcywKLSAgICBDdXN0b21DdXJzb3JD
b250ZXh0TWVudSwKLSAgICBDdXN0b21DdXJzb3Jab29tSW4sCi0gICAgQ3VzdG9tQ3Vyc29yWm9v
bU91dCwKLSAgICBDdXN0b21DdXJzb3JWZXJ0aWNhbFRleHQsCi0gICAgQ3VzdG9tQ3Vyc29yTm9E
cm9wLAotICAgIEN1c3RvbUN1cnNvclByb2dyZXNzLAotICAgIEN1c3RvbUN1cnNvck5vbmUsCi0g
ICAgQ3VzdG9tQ3Vyc29yR3JhYiwKLSAgICBDdXN0b21DdXJzb3JHcmFiYmluZywKLX07Ci0KLXR5
cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGJpdHM7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogbWFza19iaXRzOwotICAgIGlu
dCBob3RfeDsKLSAgICBpbnQgaG90X3k7Ci19IEN1c3RvbUN1cnNvcjsKLQotLy8gY3JlYXRlIGN1
c3RvbSBwaXhtYXAgY3Vyc29yIGZyb20gY3Vyc29ycyBpbiBuc0dUS0N1cnNvckRhdGEuaAotc3Rh
dGljIGNvbnN0IEN1c3RvbUN1cnNvciBDdXN0b21DdXJzb3JzW10gPSB7Ci0gICAgeyAiY29weSIs
IG1vel9jb3B5X2JpdHMsIG1vel9jb3B5X21hc2tfYml0cywgMiwgMiB9LAotICAgIHsgImFsaWFz
IiwgbW96X2FsaWFzX2JpdHMsIG1vel9hbGlhc19tYXNrX2JpdHMsIDIsIDIgfSwKLSAgICB7ICJj
b250ZXh0LW1lbnUiLCBtb3pfbWVudV9iaXRzLCBtb3pfbWVudV9tYXNrX2JpdHMsIDIsIDIgfSwK
LSAgICB7ICJ6b29tLWluIiwgbW96X3pvb21faW5fYml0cywgbW96X3pvb21faW5fbWFza19iaXRz
LCA2LCA2IH0sCi0gICAgeyAiem9vbS1vdXQiLCBtb3pfem9vbV9vdXRfYml0cywgbW96X3pvb21f
b3V0X21hc2tfYml0cywgNiwgNiB9LAotICAgIHsgInZlcnRpY2FsLXRleHQiLCBtb3pfdmVydGlj
YWxfdGV4dF9iaXRzLCBtb3pfdmVydGljYWxfdGV4dF9tYXNrX2JpdHMsIDgsIDQgfSwKLSAgICB7
ICJkbmQtbm8tZHJvcCIsIG1vel9ub3RfYWxsb3dlZF9iaXRzLCBtb3pfbm90X2FsbG93ZWRfbWFz
a19iaXRzLCA5LCAgOSB9LAotICAgIHsgImxlZnRfcHRyX3dhdGNoIiwgbW96X3NwaW5uaW5nX2Jp
dHMsIG1vel9zcGlubmluZ19tYXNrX2JpdHMsIDIsICAyfSwKLSAgICB7ICJub25lIiwgbW96X25v
bmVfYml0cywgbW96X25vbmVfbWFza19iaXRzLCAwLCAwIH0sCi0gICAgeyAiZ3JhYiIsIG1vel9o
YW5kX2dyYWJfYml0cywgbW96X2hhbmRfZ3JhYl9tYXNrX2JpdHMsIDEwLCAxMCB9LAotICAgIHsg
ImdyYWJiaW5nIiwgbW96X2hhbmRfZ3JhYmJpbmdfYml0cywgbW96X2hhbmRfZ3JhYmJpbmdfbWFz
a19iaXRzLCAxMCwgMTAgfQotfTsKLQotI2VuZGlmIC8vIEN1cnNvckd0a19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFkZmM2NmUwMTVlNTAyMjY3ODhjMjE0NzY4YTE1YjI5MTM2ODQzYjguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnRpbiBSb2JpbnNvbgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkRhdGFPYmplY3RHdGsuaCIKLQotI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2
b2lkIHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmluZyYgc3RyKQotewotICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyID0gMHhBMDsKLSAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgU3BhY2VDaGFyYWN0ZXIgPSAnICc7Ci0gICAgc3RyLnJlcGxh
Y2UoTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VDaGFyYWN0ZXIpOwotfQotCi1TdHJp
bmcgRGF0YU9iamVjdEd0azo6dGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmFuZ2UpCi0gICAg
ICAgIHJldHVybiBtX3JhbmdlLT50ZXh0KCk7Ci0gICAgcmV0dXJuIG1fdGV4dDsKLX0KLQotU3Ry
aW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmFuZ2UpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVNYXJrdXAobV9yYW5nZS5nZXQoKSwgMCwgQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpOwotICAgIHJldHVybiBtX21h
cmt1cDsKLX0KLQotdm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgbmV3
VGV4dCkKLXsKLSAgICBtX3JhbmdlID0gMDsKLSAgICBtX3RleHQgPSBuZXdUZXh0OwotICAgIHJl
cGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKG1fdGV4dCk7Ci19Ci0KLXZvaWQgRGF0YU9i
amVjdEd0azo6c2V0TWFya3VwKGNvbnN0IFN0cmluZyYgbmV3TWFya3VwKQotewotICAgIG1fcmFu
Z2UgPSAwOwotICAgIG1fbWFya3VwID0gbmV3TWFya3VwOwotfQotCi12b2lkIERhdGFPYmplY3RH
dGs6OnNldFVSSUxpc3QoY29uc3QgU3RyaW5nJiB1cmlMaXN0U3RyaW5nKQotewotICAgIG1fdXJp
TGlzdCA9IHVyaUxpc3RTdHJpbmc7Ci0KLSAgICAvLyBUaGlzIGNvZGUgaXMgb3JpZ2luYWxseSBm
cm9tOiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwLgotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGNvZGUgY3Jvc3MtcGxhdGZvcm0gZXZlbnR1YWxseS4K
LQotICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZlciwg
Zm9yIGNvbXBhdGliaWxpdHkKLSAgICAvLyByZWFzb25zIHdlIGFsc28gYWxsb3cganVzdCBcbiBo
ZXJlLgotICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7Ci0gICAgdXJpTGlzdFN0cmluZy5zcGxp
dCgnXG4nLCB1cmlMaXN0KTsKLQotICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5IHRo
ZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4KLSAgICAvLyBJbiBjYXNlIG5v
IFVSTHMgY2FuIGJlIGZvdW5kLCBzdWJzZXF1ZW50IGNhbGxzIHRvIGdldERhdGEoIlVSTCIpCi0g
ICAgLy8gd2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUg
SFRNTDUgc3BlYyAoc2VlCi0gICAgLy8gIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBp
bnRlcmZhY2VzIikuIEFsc28gZXh0cmFjdCBhbGwgZmlsZW5hbWVzCi0gICAgLy8gZnJvbSB0aGUg
VVJJIGxpc3QuCi0gICAgYm9vbCBzZXRVUkwgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nJiBsaW5lID0gdXJp
TGlzdFtpXTsKLSAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAg
IGlmIChsaW5lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
bGluZVswXSA9PSAnIycpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBLVVJMIHVy
bCA9IEtVUkwoS1VSTCgpLCBsaW5lKTsKLSAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgICAgIGlmICghc2V0VVJMKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0g
ICAgICAgICAgICAgICAgc2V0VVJMID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICAgICAgR093blB0cjxnY2hhcj4gZmls
ZW5hbWUoZ19maWxlbmFtZV9mcm9tX3VyaShsaW5lLnV0ZjgoKS5kYXRhKCksIDAsICZlcnJvci5v
dXRQdHIoKSkpOwotICAgICAgICAgICAgaWYgKCFlcnJvciAmJiBmaWxlbmFtZSkKLSAgICAgICAg
ICAgICAgICBtX2ZpbGVuYW1lcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZS5nZXQo
KSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OnNldFVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCi17Ci0gICAgbV91cmwgPSB1cmw7
Ci0gICAgbV91cmlMaXN0ID0gdXJsOwotICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKLQotICAg
IFN0cmluZyBhY3R1YWxMYWJlbChsYWJlbCk7Ci0gICAgaWYgKGFjdHVhbExhYmVsLmlzRW1wdHko
KSkKLSAgICAgICAgYWN0dWFsTGFiZWwgPSB1cmw7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIG1hcmt1
cDsKLSAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7Ci0gICAgbWFya3VwLmFwcGVuZCh1
cmwuc3RyaW5nKCkpOwotICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIpOwotICAgIEdPd25QdHI8Z2No
YXI+IGVzY2FwZWQoZ19tYXJrdXBfZXNjYXBlX3RleHQoYWN0dWFsTGFiZWwudXRmOCgpLmRhdGEo
KSwgLTEpKTsKLSAgICBtYXJrdXAuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXNjYXBlZC5nZXQo
KSkpOwotICAgIG1hcmt1cC5hcHBlbmQoIjwvYT4iKTsKLSAgICBzZXRNYXJrdXAobWFya3VwLnRv
U3RyaW5nKCkpOwotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyVGV4dCgpCi17Ci0gICAg
bV9yYW5nZSA9IDA7Ci0gICAgbV90ZXh0ID0gIiI7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6
Y2xlYXJNYXJrdXAoKQotewotICAgIG1fcmFuZ2UgPSAwOwotICAgIG1fbWFya3VwID0gIiI7Ci19
Ci0KLVN0cmluZyBEYXRhT2JqZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0Ci17Ci0gICAgaWYgKGhh
c1RleHQoKSkKLSAgICAgICAgcmV0dXJuIHRleHQoKTsKLQotICAgIGlmIChoYXNVUkwoKSkKLSAg
ICAgICAgcmV0dXJuIHVybCgpOwotCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIERh
dGFPYmplY3RHdGs6OmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCkKLXsKLSAgICBtX3RleHQgPSAi
IjsKLSAgICBtX21hcmt1cCA9ICIiOwotICAgIG1fdXJpTGlzdCA9ICIiOwotICAgIG1fdXJsID0g
S1VSTCgpOwotICAgIG1faW1hZ2UgPSAwOwotICAgIG1fcmFuZ2UgPSAwOwotfQotCi12b2lkIERh
dGFPYmplY3RHdGs6OmNsZWFyQWxsKCkKLXsKLSAgICBjbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygp
OwotICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIERhdGFPYmpl
Y3RHdGs6OmZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKLXsKLSAgICBzdGF0
aWMgSGFzaE1hcDxHdGtDbGlwYm9hcmQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBvYmplY3RN
YXA7Ci0KLSAgICBpZiAoIW9iamVjdE1hcC5jb250YWlucyhjbGlwYm9hcmQpKSB7Ci0gICAgICAg
IFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Y3JlYXRl
KCk7Ci0gICAgICAgIG9iamVjdE1hcC5zZXQoY2xpcGJvYXJkLCBkYXRhT2JqZWN0KTsKLSAgICAg
ICAgcmV0dXJuIGRhdGFPYmplY3QuZ2V0KCk7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxHdGtDbGlw
Ym9hcmQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPjo6aXRlcmF0b3IgaXQgPSBvYmplY3RNYXAu
ZmluZChjbGlwYm9hcmQpOwotICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1MjgxYjFlMTc4YmY5NDdkYTJjMDgwZDM4M2VhYTUwNmI2YTYzOTgw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJ0aW4gUm9iaW5zb24KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgRGF0YU9iamVjdEd0a19oCi0j
ZGVmaW5lIERhdGFPYmplY3RHdGtfaAotCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFPYmplY3RHdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRh
T2JqZWN0R3RrPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0
az4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YU9iamVj
dEd0aygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQotICAgIGNvbnN0IFN0cmluZyYgdXJpTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJp
TGlzdDsgfQotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGVuYW1lczsgfQotICAgIEdka1BpeGJ1ZiogaW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFJhbmdlPiBu
ZXdSYW5nZSkgeyBtX3JhbmdlID0gbmV3UmFuZ2U7IH0KLSAgICB2b2lkIHNldEltYWdlKEdka1Bp
eGJ1ZiogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5ld0ltYWdlOyB9Ci0gICAgdm9pZCBzZXRVUkwo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmFuZ2UgfHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1
cCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQotICAg
IGJvb2wgaGFzVVJJTGlzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9
Ci0gICAgYm9vbCBoYXNVUkwoKSBjb25zdCB7IHJldHVybiAhbV91cmwuaXNFbXB0eSgpICYmIG1f
dXJsLmlzVmFsaWQoKTsgfQotICAgIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4g
IW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlOyB9Ci0gICAgdm9pZCBjbGVhclVSSUxpc3QoKSB7IG1fdXJpTGlzdCA9ICIi
OyB9Ci0gICAgdm9pZCBjbGVhclVSTCgpIHsgbV91cmwgPSBLVVJMKCk7IH0KLSAgICB2b2lkIGNs
ZWFySW1hZ2UoKSB7IG1faW1hZ2UgPSAwOyB9Ci0KLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0Owot
ICAgIFN0cmluZyBtYXJrdXAoKSBjb25zdDsKLSAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCBzZXRNYXJrdXAoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRVUklM
aXN0KGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyB1cmxMYWJlbCgpIGNvbnN0OwotCi0gICAg
dm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVuYW1lcygpOwotICAgIHZvaWQgY2xlYXJBbGwoKTsKLSAg
ICB2b2lkIGNsZWFyVGV4dCgpOwotICAgIHZvaWQgY2xlYXJNYXJrdXAoKTsKLQotICAgIHN0YXRp
YyBEYXRhT2JqZWN0R3RrKiBmb3JDbGlwYm9hcmQoR3RrQ2xpcGJvYXJkKik7Ci0KLXByaXZhdGU6
Ci0gICAgU3RyaW5nIG1fdGV4dDsKLSAgICBTdHJpbmcgbV9tYXJrdXA7Ci0gICAgS1VSTCBtX3Vy
bDsKLSAgICBTdHJpbmcgbV91cmlMaXN0OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVz
OwotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBtX2ltYWdlOwotICAgIFJlZlB0cjxSYW5nZT4gbV9y
YW5nZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIERhdGFPYmplY3RHdGtfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAyYTQ3NDlkMzNjYmIyOTljOGRkNjZlMzVjMDA5MWFiMjhmMTBhZTcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBA
Ci0vKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRHJhZ0RhdGEuaCIKLQotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUg
IkNsaXBib2FyZEd0ay5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5z
Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNGaWxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+
aGFzRmlsZW5hbWVzKCk7Ci19Ci0KLXVuc2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZpbGVzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKS5zaXpl
KCk7Ci19Ci0KLXZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1
bHQpIGNvbnN0Ci17Ci0gICAgcmVzdWx0ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMo
KTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1RleHQoKTsKLX0KLQotU3RyaW5nIERyYWdE
YXRhOjphc1BsYWluVGV4dChGcmFtZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+dGV4dCgpOwotfQotCi1Db2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENvbG9yKCk7Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0
aWJsZUNvbnRlbnQoKSBjb25zdAotewotICAgIHJldHVybiBjb250YWluc1BsYWluVGV4dCgpIHx8
IGNvbnRhaW5zVVJMKDApIHx8IG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzTWFya3VwKCkgfHwgY29u
dGFpbnNDb2xvcigpIHx8IGNvbnRhaW5zRmlsZXMoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29u
dGFpbnNVUkwoRnJhbWUqIGZyYW1lLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQ
b2xpY3kpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFhc1VSTChmcmFtZSwgZmlsZW5hbWVQb2xpY3kp
LmlzRW1wdHkoKTsKLX0KLQotU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1l
Q29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVVJMKCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICBpZiAoZmlsZW5hbWVQb2xpY3kgIT0gQ29udmVydEZpbGVuYW1lcykgewot
ICAgICAgICBLVVJMIHVybChLVVJMKCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOwotICAg
ICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgfQotCi0gICAgU3RyaW5nIHVybChtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybCgpKTsKLSAg
ICBpZiAodGl0bGUpCi0gICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsTGFi
ZWwoKTsKLSAgICByZXR1cm4gdXJsOwotfQotCi0KLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwg
Ym9vbCwgYm9vbCYpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc01h
cmt1cCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+bWFya3VwKCks
ICIiKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJY29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MTg3NzFjODI5OWQwMTE1NDk1ZWZjY2M1MDEx
MmFjZDg0ZWQ3NjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSWNvbi5oIgot
I2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMg
Z2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtF
dmVudEV4cG9zZSogZXZlbnQsIERyYWdJY29uKiBpY29uKQotewotICAgIFJlZlB0cjxjYWlyb190
PiBjb250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KSk7Ci0g
ICAgaWNvbi0+ZHJhdyhjb250ZXh0LmdldCgpKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLSNlbHNl
Ci1zdGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRn
ZXQqLCBjYWlyb190KiBjb250ZXh0LCBEcmFnSWNvbiogaWNvbikKLXsKLSAgICBpZiAoIWdka19j
YWlyb19nZXRfY2xpcF9yZWN0YW5nbGUoY29udGV4dCwgMCkpCi0gICAgICAgIHJldHVybiBGQUxT
RTsKLSAgICBpY29uLT5kcmF3KGNvbnRleHQpOwotICAgIHJldHVybiBUUlVFOwotfQotI2VuZGlm
IC8vIEdUS19BUElfVkVSU0lPTl8yCi0KLURyYWdJY29uOjpEcmFnSWNvbigpCi0gICAgOiBpc0Nv
bXBvc2l0ZWQoZ2RrX3NjcmVlbl9pc19jb21wb3NpdGVkKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KSkpCi0gICAgLCBtX3dpbmRvdygwKQotewotICAgIGlmICghaXNDb21wb3NpdGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9Q
VVApOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3dp
bmRvdywgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0soZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRD
YWxsYmFjayksIHRoaXMpOwotI2Vsc2UKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAi
ZHJhdyIsIEdfQ0FMTEJBQ0soZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMp
OwotI2VuZGlmCi0KLSAgICAvLyBUaGlzIHN0cmF0ZWd5IG9yaWdpbmFsbHkgY29tZXMgZnJvbSBD
aHJvbWl1bTogc3JjL2Nocm9tZS9icm93c2VyL2d0ay90YWJfY29udGVudHNfZHJhZ19zb3VyY2Uu
Y2MKLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihtX3dpbmRv
dyk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHZGtDb2xvcm1hcCogcmdiYSA9IGdk
a19zY3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAoc2NyZWVuKTsKLSAgICBpZiAocmdiYSkKLSAgICAg
ICAgZ3RrX3dpZGdldF9zZXRfY29sb3JtYXAobV93aW5kb3csIHJnYmEpOwotI2Vsc2UKLSAgICBH
ZGtWaXN1YWwqIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfdmlzdWFsKHNjcmVlbik7Ci0g
ICAgaWYgKCF2aXN1YWwpCi0gICAgICAgIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92
aXN1YWwoc2NyZWVuKTsKLSAgICBndGtfd2lkZ2V0X3NldF92aXN1YWwobV93aW5kb3csIHZpc3Vh
bCk7Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLX0KLQotRHJhZ0ljb246On5EcmFnSWNv
bigpCi17Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93
aW5kb3cpOwotfQotCi12b2lkIERyYWdJY29uOjpkcmF3KGNhaXJvX3QqIGNvbnRleHQpCi17Ci0g
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1hZ2UuZ2V0KCkpLAotICAgICAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9pbWFnZS5nZXQoKSkpOwot
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwot
ICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LCBtX2ltYWdlLmdldCgpLCAwLCAw
KTsKLSAgICBjYWlyb19maWxsKGNvbnRleHQpOwotfQotCi12b2lkIERyYWdJY29uOjpzZXRJbWFn
ZShjYWlyb19zdXJmYWNlX3QqIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgbV9p
bWFnZSA9IGltYWdlOwotICAgIG1faW1hZ2VTaXplID0gSW50U2l6ZShjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFn
ZSkpOwotICAgIGlmIChpc0NvbXBvc2l0ZWQpIHsKLSAgICAgICAgZ3RrX3dpbmRvd19yZXNpemUo
R1RLX1dJTkRPVyhtX3dpbmRvdyksIG1faW1hZ2VTaXplLndpZHRoKCksIG1faW1hZ2VTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCi0gICAgbV9waXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1
ZihpbWFnZSkpOwotI2VuZGlmCi19Ci0KLXZvaWQgRHJhZ0ljb246OnVzZUZvckRyYWcoR2RrRHJh
Z0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgSW50UG9pbnQgaG90c3BvdChtX2ltYWdlU2l6ZSk7
Ci0gICAgaG90c3BvdC5zY2FsZSgwLjUsIDAuNSk7Ci0gICAgdXNlRm9yRHJhZyhjb250ZXh0LCBo
b3RzcG90KTsKLX0KLQotdm9pZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpCi17Ci0gICAgaWYgKGlzQ29tcG9zaXRl
ZCkgewotICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl93aWRnZXQoY29udGV4dCwgbV93aW5kb3cs
IGhvdHNwb3QueCgpLCBob3RzcG90LnkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBndGtfZHJhZ19zZXRfaWNvbl9waXhidWYoY29udGV4
dCwgbV9waXhidWYuZ2V0KCksIGhvdHNwb3QueCgpLCBob3RzcG90LnkoKSk7Ci0jZWxzZQotICAg
IGd0a19kcmFnX3NldF9pY29uX3N1cmZhY2UoY29udGV4dCwgbV9pbWFnZS5nZXQoKSk7Ci0jZW5k
aWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0ljb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlNDM1ZGNiZGEyMGUy
ZWRkN2JmYzI2ZjdiMGZmMDlhMjhiODg1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaAor
KysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEcmFnSWNvbl9oCi0jZGVmaW5lIERyYWdJ
Y29uX2gKLQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8UmVmUHRyQ2Fpcm8uaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRHJhZ0ljb24gewotcHVibGljOgotICAgIERyYWdJY29uKCk7Ci0gICAgdmlydHVh
bCB+RHJhZ0ljb24oKTsKLQotICAgIHZvaWQgZHJhdyhjYWlyb190Kik7Ci0gICAgdm9pZCBzZXRJ
bWFnZShjYWlyb19zdXJmYWNlX3QqKTsKLSAgICB2b2lkIHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRl
eHQqKTsKLSAgICB2b2lkIHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2lu
dCYgaG90c3BvdCk7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc0NvbXBvc2l0ZWQ7Ci0gICAgR3Rr
V2lkZ2V0KiBtX3dpbmRvdzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlOwot
ICAgIEludFNpemUgbV9pbWFnZVNpemU7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBH
UmVmUHRyPEdka1BpeGJ1Zj4gbV9waXhidWY7Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IERyYWdJY29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFn
SW1hZ2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiN2M0YzE0MmUxY2VmMzlkMjRmM2Jl
ZTlmMzRjYjJlYWQyYmQ3ZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogMjAxMCBJZ2FsaWEgUy5MCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRHJhZ0ltYWdlLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIklt
YWdlLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRTaXplIGRyYWdJ
bWFnZVNpemUoRHJhZ0ltYWdlUmVmIGltYWdlKQotewotICAgIGlmIChpbWFnZSkKLSAgICAgICAg
cmV0dXJuIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2UpKTsKLQotICAgIHJldHVybiBJbnRTaXpl
KDAsIDApOwotfQotCi12b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCi17
Ci0gICAgaWYgKGltYWdlKQotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwot
fQotCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9h
dFNpemUgc2NhbGUpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpbnQgbmV3V2lkdGggPSBzY2FsZS53aWR0aCgpICogY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
d2lkdGgoaW1hZ2UpOwotICAgIGludCBuZXdIZWlnaHQgPSBzY2FsZS5oZWlnaHQoKSAqIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBz
Y2FsZWRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcihpbWFnZSwgQ0FJUk9f
Q09OVEVOVF9DT0xPUl9BTFBIQSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7Ci0KLSAgICBSZWZQdHI8
Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzY2FsZWRTdXJmYWNlKSk7
Ci0gICAgY2Fpcm9fc2NhbGUoY29udGV4dC5nZXQoKSwgc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVp
Z2h0KCkpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNv
bnRleHQuZ2V0KCkpLCBDQUlST19FWFRFTkRfUEFEKTsKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9m
aWx0ZXIoY2Fpcm9fZ2V0X3NvdXJjZShjb250ZXh0LmdldCgpKSwgQ0FJUk9fRklMVEVSX0JFU1Qp
OwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9T
T1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LmdldCgpLCBpbWFn
ZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7Ci0KLSAgICBkZWxldGVE
cmFnSW1hZ2UoaW1hZ2UpOwotICAgIHJldHVybiBzY2FsZWRTdXJmYWNlOwotfQotCi1EcmFnSW1h
Z2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxv
YXQgZnJhY3Rpb24pCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoIWdka19zY3JlZW5faXNfY29tcG9zaXRlZChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkp
KQotICAgICAgICByZXR1cm4gaW1hZ2U7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9
IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShpbWFnZSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihj
b250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9ERVNUX0lOKTsKLSAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMCwgMCwgMCwgZnJhY3Rpb24pOwotICAgIGNhaXJvX3Bh
aW50KGNvbnRleHQuZ2V0KCkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uRW51bSkKLXsKLSAgICBOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIHJldHVybiBuYXRpdmVJbWFnZSA/
IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG5hdGl2ZUltYWdlLT5zdXJmYWNlKCkpIDogMDsKLX0K
LQotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJ
bWFnZSopCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0Vycm9yc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NGQ1NWU3
NjkxNTFlZGMxZDQxMTU2YTQzMmNhNzU5NzgxNGJhZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9y
c0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXJy
b3JzR3RrLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLVJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluTmV0d29yaywg
TmV0d29ya0Vycm9yQ2FuY2VsbGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCksIF8oIkxvYWQgcmVxdWVzdCBjYW5jZWxsZWQiKSk7Ci19Ci0KLVJlc291
cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsK
LSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JD
YW5ub3RVc2VSZXN0cmljdGVkUG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
LnVybCgpLnN0cmluZygpLCBfKCJOb3QgYWxsb3dlZCB0byB1c2UgcmVzdHJpY3RlZCBuZXR3b3Jr
IHBvcnQiKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJv
ckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5ub3RTaG93VVJMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIlVSTCBjYW5ub3QgYmUgc2hvd24i
KSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBv
bGljeUNoYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCgpLnN0cmlu
ZygpLCBfKCJGcmFtZSBsb2FkIHdhcyBpbnRlcnJ1cHRlZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJv
ciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5
RXJyb3JDYW5ub3RTaG93TWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2UudXJsKCkuc3RyaW5nKCksIF8oIkNvbnRlbnQgd2l0aCB0aGUgc3BlY2lmaWVkIE1JTUUgdHlw
ZSBjYW5ub3QgYmUgc2hvd24iKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlz
dEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluTmV0d29yaywgTmV0d29ya0Vycm9yRmlsZURvZXNOb3RF
eGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwg
XygiRmlsZSBkb2VzIG5vdCBleGlzdCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxs
SGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAg
IHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUGx1Z2luLCBQbHVnaW5FcnJvcldpbGxI
YW5kbGVMb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmlu
ZygpLCBfKCJQbHVnaW4gd2lsbCBoYW5kbGUgbG9hZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBk
b3dubG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBuZXR3b3JrRXJyb3IpCi17
Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93bmxvYWRF
cnJvck5ldHdvcmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya0Vycm9yLmZhaWxp
bmdVUkwoKSwgbmV0d29ya0Vycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpOwotfQotCi1SZXNv
dXJjZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5E
b3dubG9hZCwgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiVXNlciBjYW5jZWxsZWQgdGhlIGRv
d25sb2FkIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93
bmxvYWRFcnJvckRlc3RpbmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
LnVybCgpLnN0cmluZygpLCBlcnJvck1lc3NhZ2UpOwotfQotCi1SZXNvdXJjZUVycm9yIHByaW50
RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQotewotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50
Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckdlbmVyYWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJs
KCkgOiBLVVJMKCksIGVycm9yTWVzc2FnZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgcHJpbnRlck5v
dEZvdW5kRXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQpCi17Ci0gICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpblByaW50LCBQcmludEVycm9yUHJpbnRlck5vdEZvdW5kLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpLCBf
KCJQcmludGVyIG5vdCBmb3VuZCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJh
bmdlVG9QcmludChjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCkKLXsKLSAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluUHJpbnQsIFByaW50RXJyb3JJbnZhbGlkUGFnZVJhbmdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpLCBf
KCJJbnZhbGlkIHBhZ2UgcmFuZ2UiKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTgyY2M5OWZiZjI5MmU0Y2JjZDczZDZlZjA5Y2ZjNGMyYzk0ODZjZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgRXJyb3JzR3RrX2gK
LSNkZWZpbmUgRXJyb3JzR3RrX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFByaW50Q29udGV4dDsKLWNsYXNzIFJlc291
cmNlRXJyb3I7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OwotCi1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbk5ldHdvcmsgPSAiV2ViS2l0TmV0d29y
a0Vycm9yIjsKLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluUG9saWN5ID0gIldlYktpdFBv
bGljeUVycm9yIjsKLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluUGx1Z2luID0gIldlYktp
dFBsdWdpbkVycm9yIjsKLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluRG93bmxvYWQgPSAi
V2ViS2l0RG93bmxvYWRFcnJvciI7Ci1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblByaW50
ID0gIldlYktpdFByaW50RXJyb3IiOwotCi1lbnVtIE5ldHdvcmtFcnJvciB7Ci0gICAgTmV0d29y
a0Vycm9yRmFpbGVkID0gMzk5LAotICAgIE5ldHdvcmtFcnJvclRyYW5zcG9ydCA9IDMwMCwKLSAg
ICBOZXR3b3JrRXJyb3JVbmtub3duUHJvdG9jb2wgPSAzMDEsCi0gICAgTmV0d29ya0Vycm9yQ2Fu
Y2VsbGVkID0gMzAyLAotICAgIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhpc3QgPSAzMDMKLX07
Ci0KLS8vIFN5bmMnZCB3aXRoIE1hYydzIFdlYktpdCBFcnJvcnMuCi1lbnVtIFBvbGljeUVycm9y
IHsKLSAgICBQb2xpY3lFcnJvckZhaWxlZCA9IDE5OSwKLSAgICBQb2xpY3lFcnJvckNhbm5vdFNo
b3dNaW1lVHlwZSA9IDEwMCwKLSAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwgPSAxMDEsCi0g
ICAgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAot
ICAgIFBvbGljeUVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQgPSAxMDMKLX07Ci0KLWVudW0g
UGx1Z2luRXJyb3IgewotICAgIFBsdWdpbkVycm9yRmFpbGVkID0gMjk5LAotICAgIFBsdWdpbkVy
cm9yQ2Fubm90RmluZFBsdWdpbiA9IDIwMCwKLSAgICBQbHVnaW5FcnJvckNhbm5vdExvYWRQbHVn
aW4gPSAyMDEsCi0gICAgUGx1Z2luRXJyb3JKYXZhVW5hdmFpbGFibGUgPSAyMDIsCi0gICAgUGx1
Z2luRXJyb3JDb25uZWN0aW9uQ2FuY2VsbGVkID0gMjAzLAotICAgIFBsdWdpbkVycm9yV2lsbEhh
bmRsZUxvYWQgPSAyMDQKLX07Ci0KLWVudW0gRG93bmxvYWRFcnJvciB7Ci0gICAgRG93bmxvYWRF
cnJvck5ldHdvcmsgPSA0OTksCi0gICAgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlciA9IDQw
MCwKLSAgICBEb3dubG9hZEVycm9yRGVzdGluYXRpb24gPSA0MDEKLX07Ci0KLWVudW0gUHJpbnRF
cnJvciB7Ci0gICAgUHJpbnRFcnJvckdlbmVyYWwgPSA1OTksCi0gICAgUHJpbnRFcnJvclByaW50
ZXJOb3RGb3VuZCA9IDUwMCwKLSAgICBQcmludEVycm9ySW52YWxpZFBhZ2VSYW5nZSA9IDUwMQot
fTsKLQotUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKLVJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwot
UmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7
Ci1SZXNvdXJjZUVycm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7Ci1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVy
cm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhh
bmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci1SZXNvdXJjZUVycm9yIGRv
d25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLVJlc291cmNlRXJyb3Ig
ZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci1S
ZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotUmVzb3VyY2VFcnJvciBwcmludEVy
cm9yKGNvbnN0IFByaW50Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLVJl
c291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3IoY29uc3QgUHJpbnRDb250ZXh0Kik7Ci1S
ZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCop
OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0V2ZW50TG9vcEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29w
R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmN2I1Y2I3N2I5NDRmYmUw
NTgxODRmODYxNDQwNTJhZTZhNTIyYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTnVhbnRpIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV2ZW50TG9vcC5o
IgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRXZl
bnRMb29wOjpjeWNsZSgpCi17Ci0gICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZB
TFNFKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmYTIwNzI5NmM2YTZjYjQ2NjI4Zjc3MDk2MzRlMjRlNzJmODg3YzlmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9GaWxlU3lzdGVtR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVk
ZSAiRmlsZU1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgotI2luY2x1ZGUgPGdpby9naW8u
aD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dsaWJVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLyogT24gbGludXggZmlsZSBuYW1lcyBhcmUganVzdCByYXcgYnl0
ZXMsIHNvIGFsc28gc3RyaW5ncyB0aGF0IGNhbm5vdCBiZSBlbmNvZGVkIGluIGFueSB3YXkKLSAq
IGFyZSB2YWxpZCBmaWxlIG5hbWVzLiBUaGlzIG1lYW4gdGhhdCB3ZSBjYW5ub3QganVzdCBzdG9y
ZSBhIGZpbGUgbmFtZSBhcy1pcyBpbiBhIFN0cmluZwotICogYnV0IHdlIGhhdmUgdG8gZXNjYXBl
IGl0LgotICogT24gV2luZG93cyB0aGUgR0xpYiBmaWxlIG5hbWUgZW5jb2RpbmcgaXMgYWx3YXlz
IFVURi04IHNvIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2UuICovCi1TdHJpbmcgZmlsZW5hbWVU
b1N0cmluZyhjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBpZiAoIWZpbGVuYW1lKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KGZpbGVuYW1lKTsKLSNlbHNlCi0gICAgR093blB0cjxnY2hhcj4gZXNjYXBl
ZFN0cmluZyhnX3VyaV9lc2NhcGVfc3RyaW5nKGZpbGVuYW1lLCAiLzoiLCBmYWxzZSkpOwotICAg
IHJldHVybiBlc2NhcGVkU3RyaW5nLmdldCgpOwotI2VuZGlmCi19Ci0KLUNTdHJpbmcgZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSNpZiBPUyhXSU5ET1dT
KQotICAgIHJldHVybiBwYXRoLnV0ZjgoKTsKLSNlbHNlCi0gICAgR093blB0cjxnY2hhcj4gZmls
ZW5hbWUoZ191cmlfdW5lc2NhcGVfc3RyaW5nKHBhdGgudXRmOCgpLmRhdGEoKSwgMCkpOwotICAg
IHJldHVybiBmaWxlbmFtZS5nZXQoKTsKLSNlbmRpZgotfQotCi0vLyBDb252ZXJ0cyBhIHN0cmlu
ZyB0byBzb21ldGhpbmcgc3VpdGFibGUgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgotU3Ry
aW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSNpZiBPUyhX
SU5ET1dTKQotICAgIHJldHVybiBzdHJpbmc7Ci0jZWxzZQotICAgIENTdHJpbmcgZmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oc3RyaW5nKTsKLSAgICBHT3duUHRyPGdjaGFyPiBk
aXNwbGF5KGdfZmlsZW5hbWVfdG9fdXRmOChmaWxlbmFtZS5kYXRhKCksIDAsIDAsIDAsIDApKTsK
LSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChkaXNwbGF5LmdldCgpKTsKLSNlbmRpZgotfQotCi1ib29sIGZpbGVF
eGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLQot
ICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJlc3VsdCA9IGdfZmlsZV90ZXN0
KGZpbGVuYW1lLmRhdGEoKSwgR19GSUxFX1RFU1RfRVhJU1RTKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYm9v
bCByZXN1bHQgPSBmYWxzZTsKLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpOwotCi0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAg
cmVzdWx0ID0gZ19yZW1vdmUoZmlsZW5hbWUuZGF0YSgpKSA9PSAwOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotCi0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwo
KSkKLSAgICAgICAgcmVzdWx0ID0gZ19ybWRpcihmaWxlbmFtZS5kYXRhKCkpID09IDA7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQotewotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAgIGdp
bnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOwotICAgIGlm
IChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmVzdWx0U2l6ZSA9
IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1l
KQotewotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVu
YW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOwotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgbW9kaWZpZWRUaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLQotfQotCi1ib29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJp
bmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0cnVjdCBzdGF0IHN0YXRSZXN1
bHQ7Ci0gICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3Vs
dCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbWV0YWRh
dGEubW9kaWZpY2F0aW9uVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7Ci0gICAgbWV0YWRhdGEu
bGVuZ3RoID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIG1ldGFkYXRhLnR5cGUgPSBTX0lTRElS
KHN0YXRSZXN1bHQuc3RfbW9kZSkgPyBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3RvcnkgOiBGaWxl
TWV0YWRhdGE6OlR5cGVGaWxlOwotICAgIHJldHVybiB0cnVlOwotCi19Ci0KLVN0cmluZyBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNv
bXBvbmVudCkKLXsKLSAgICBpZiAocGF0aC5lbmRzV2l0aChHX0RJUl9TRVBBUkFUT1JfUykpCi0g
ICAgICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IHBhdGggKyBHX0RJUl9TRVBBUkFUT1JfUyArIGNvbXBvbmVudDsKLX0KLQotYm9vbCBtYWtlQWxs
RGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIENTdHJpbmcgZmlsZW5hbWUg
PSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0gICAgaWYgKGZpbGVuYW1lLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnaW50IHJlc3VsdCA9IGdfbWtkaXJf
d2l0aF9wYXJlbnRzKGZpbGVuYW1lLmRhdGEoKSwgU19JUldYVSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0ID09IDA7Ci19Ci0KLVN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCi17Ci0gICAgcmV0dXJu
IGZpbGVuYW1lVG9TdHJpbmcoZ19nZXRfaG9tZV9kaXIoKSk7Ci19Ci0KLVN0cmluZyBwYXRoR2V0
RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKLXsKLSAgICBpZiAocGF0aE5hbWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aE5hbWU7Ci0KLSAgICBDU3RyaW5nIHRtcEZpbGVu
YW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGhOYW1lKTsKLSAgICBHT3duUHRyPGdj
aGFyPiBiYXNlTmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKHRtcEZpbGVuYW1lLmRhdGEoKSkpOwot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGJhc2VOYW1lLmdldCgpKTsKLX0KLQotQ1N0cmlu
ZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKQotewotICAgIENTdHJpbmcgcGF0aCA9IGdldEN1
cnJlbnRFeGVjdXRhYmxlUGF0aCgpOwotICAgIGlmICghcGF0aC5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIHBhdGg7Ci0KLSAgICAvLyBJZiB0aGUgYWJvdmUgZmFpbHMsIGNoZWNrIHRoZSBQQVRI
IGVudiB2YXJpYWJsZS4KLSAgICBHT3duUHRyPGNoYXI+IGN1cnJlbnRFeGVQYXRoKGdfZmluZF9w
cm9ncmFtX2luX3BhdGgoZ19nZXRfcHJnbmFtZSgpKSk7Ci0gICAgaWYgKCFjdXJyZW50RXhlUGF0
aC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKLQotICAgIEdPd25QdHI8Y2hhcj4g
ZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoY3VycmVudEV4ZVBhdGguZ2V0KCkpKTsKLSAgICBy
ZXR1cm4gZGlybmFtZS5nZXQoKTsKLX0KLQotQ1N0cmluZyBzaGFyZWRSZXNvdXJjZXNQYXRoKCkK
LXsKLSAgICBzdGF0aWMgQ1N0cmluZyBjYWNoZWRQYXRoOwotICAgIGlmICghY2FjaGVkUGF0aC5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZFBhdGg7Ci0KLSNpZiBPUyhXSU5ET1dTKQot
ICAgIEhNT0RVTEUgaG1vZHVsZSA9IDA7Ci0gICAgR2V0TW9kdWxlSGFuZGxlRXhBKEdFVF9NT0RV
TEVfSEFORExFX0VYX0ZMQUdfRlJPTV9BRERSRVNTLCByZWludGVycHJldF9jYXN0PGNoYXIqPihz
aGFyZWRSZXNvdXJjZXNQYXRoKSwgJmhtb2R1bGUpOwotCi0gICAgR093blB0cjxnY2hhcj4gcnVu
dGltZURpcihnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9k
dWxlKGhtb2R1bGUpKTsKLSAgICBHT3duUHRyPGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVu
YW1lKHJ1bnRpbWVEaXIuZ2V0KCksICJzaGFyZSIsICJ3ZWJraXRndGstIldFQktJVEdUS19BUElf
VkVSU0lPTl9TVFJJTkcsIE5VTEwpKTsKLSNlbHNlCi0gICAgR093blB0cjxnY2hhcj4gZGF0YVBh
dGgoZ19idWlsZF9maWxlbmFtZShEQVRBX0RJUiwgIndlYmtpdGd0ay0iV0VCS0lUR1RLX0FQSV9W
RVJTSU9OX1NUUklORywgTlVMTCkpOwotI2VuZGlmCi0KLSAgICBjYWNoZWRQYXRoID0gZGF0YVBh
dGguZ2V0KCk7Ci0gICAgcmV0dXJuIGNhY2hlZFBhdGg7Ci19Ci0KLXVpbnQ2NF90IGdldFZvbHVt
ZUZyZWVTaXplRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQotewotICAgIEdSZWZQdHI8R0ZpbGU+
IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoKSk7Ci0gICAgR1JlZlB0
cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVt
X2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIDAsIDAp
KTsKLSAgICBpZiAoIWZpbGVJbmZvKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBn
X2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FU
VFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUpOwotfQotCi1TdHJpbmcgZGlyZWN0b3J5TmFtZShjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgLyogTm8gbnVsbCBjaGVja2luZyBuZWVkZWQgKi8KLSAg
ICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChk
aXJuYW1lLmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQotewotICAgIFZlY3RvcjxTdHJpbmc+
IGVudHJpZXM7Ci0KLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwotICAgIEdEaXIqIGRpciA9IGdfZGlyX29wZW4oZmlsZW5hbWUuZGF0YSgpLCAw
LCAwKTsKLSAgICBpZiAoIWRpcikKLSAgICAgICAgcmV0dXJuIGVudHJpZXM7Ci0KLSAgICBHUGF0
dGVyblNwZWMgKnBzcGVjID0gZ19wYXR0ZXJuX3NwZWNfbmV3KChmaWx0ZXIudXRmOCgpKS5kYXRh
KCkpOwotICAgIHdoaWxlIChjb25zdCBjaGFyKiBuYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcikp
IHsKLSAgICAgICAgaWYgKCFnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nKHBzcGVjLCBuYW1lKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdPd25QdHI8Z2NoYXI+IGVudHJ5KGdfYnVp
bGRfZmlsZW5hbWUoZmlsZW5hbWUuZGF0YSgpLCBuYW1lLCBOVUxMKSk7Ci0gICAgICAgIGVudHJp
ZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmcoZW50cnkuZ2V0KCkpKTsKLSAgICB9Ci0gICAgZ19w
YXR0ZXJuX3NwZWNfZnJlZShwc3BlYyk7Ci0gICAgZ19kaXJfY2xvc2UoZGlyKTsKLQotICAgIHJl
dHVybiBlbnRyaWVzOwotfQotCi1TdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5n
JiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQotewotICAgIEdPd25QdHI8Z2No
YXI+IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIHByZWZpeC51dGY4KCkuZGF0YSgp
LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIEdPd25Q
dHI8Z2NoYXI+IHRlbXBQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCBmaWxl
bmFtZS5nZXQoKSwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYo
Z19maWxlX25ld19mb3JfcGF0aCh0ZW1wUGF0aC5nZXQoKSkpOwotCi0gICAgaGFuZGxlID0gZ19m
aWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAw
KTsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsKLX0KLQot
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlIG1vZGUpCi17Ci0gICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bihwYXRoKTsKLSAgICBpZiAoZnNSZXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOwotCi0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZzUmVwLmRhdGEoKSkpOwotICAgIEdGaWxlSU9TdHJlYW0q
IGlvU3RyZWFtID0gMDsKLSAgICBpZiAobW9kZSA9PSBPcGVuRm9yUmVhZCkKLSAgICAgICAgaW9T
dHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwgMCk7Ci0gICAgZWxz
ZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpIHsKLSAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZz
UmVwLmRhdGEoKSwgc3RhdGljX2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBH
X0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCi0gICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9v
cGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaW9TdHJlYW0gPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVf
Q1JFQVRFX05PTkUsIDAsIDApOwotICAgIH0KLQotICAgIHJldHVybiBpb1N0cmVhbTsKLX0KLQot
dm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgaWYgKCFp
c0hhbmRsZVZhbGlkKGhhbmRsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdfaW9fc3RyZWFt
X2Nsb3NlKEdfSU9fU1RSRUFNKGhhbmRsZSksIDAsIDApOwotICAgIGdfb2JqZWN0X3VucmVmKGhh
bmRsZSk7Ci0gICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKLX0KLQotbG9u
ZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZz
ZXQsIEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKLXsKLSAgICBHU2Vla1R5cGUgc2Vla1R5cGUgPSBH
X1NFRUtfU0VUOwotICAgIHN3aXRjaCAob3JpZ2luKSB7Ci0gICAgY2FzZSBTZWVrRnJvbUJlZ2lu
bmluZzoKLSAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfU0VUOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNlZWtGcm9tQ3VycmVudDoKLSAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfQ1VSOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNlZWtGcm9tRW5kOgotICAgICAgICBzZWVrVHlwZSA9
IEdfU0VFS19FTkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGlmICghZ19zZWVrYWJsZV9zZWVrKEdfU0VF
S0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzZWVrVHlwZSwgMCwgMCkpCi0gICAg
ICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gZ19zZWVrYWJsZV90ZWxsKEdfU0VFS0FCTEUoZ19p
b19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSkpOwotfQotCi1p
bnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCkKLXsKLSAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Ci0gICAgZ19vdXRwdXRf
c3RyZWFtX3dyaXRlX2FsbChnX2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVB
TShoYW5kbGUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGxlbmd0aCwg
JmJ5dGVzV3JpdHRlbiwgMCwgMCk7Ci0gICAgcmV0dXJuIGJ5dGVzV3JpdHRlbjsKLX0KLQotaW50
IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBkbyB7Ci0gICAgICAg
IGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkKGdfaW9fc3RyZWFtX2dldF9p
bnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGxlbmd0aCwgMCwgJmVycm9yLm91dFB0cigp
KTsKLSAgICAgICAgaWYgKGJ5dGVzUmVhZCA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVz
UmVhZDsKLSAgICB9IHdoaWxlIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHX0ZJTEVfRVJST1Jf
SU5UUik7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1v
ZHVsZSBtb2R1bGUpCi17Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gOjpGcmVlTGlicmFy
eShtb2R1bGUpOwotI2Vsc2UKLSAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsKLSNl
bmRpZgotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25Q
dHJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjY5M2Y0MTVlOTc4MjQ3ZmQzYzkzODRkNGVk
MjUxZWUwNDliOGYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBT
LkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR093blB0ckd0ay5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50PihH
ZGtFdmVudCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIGdka19ldmVudF9mcmVlKHB0
cik7Ci19Ci0KLXRlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHdGtJY29uSW5mbz4oR3Rr
SWNvbkluZm8qIGluZm8pCi17Ci0gICAgaWYgKGluZm8pCi0gICAgICAgIGd0a19pY29uX2luZm9f
ZnJlZShpbmZvKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dPd25QdHJHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3Rr
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNWU4MzcxZWQzNjhmNDE1ZDg5NzQz
MjRlZTYyZDcxZmViN2EyZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuaAorKysgL2Rl
di9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR093blB0ckd0a19oCi0jZGVmaW5lIEdPd25QdHJH
dGtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50PihHZGtFdmVudCop
OwotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEd0a0ljb25JbmZvPihHdGtJY29uSW5m
byopOwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dSZWZQdHJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJH
dGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTUwNmRmOTAwN2QyNGNjMDc2
Nzc2OGRlZmQxMDU2NjJmYzM5YjNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSBMdGQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdSZWZQdHJHdGsuaCIKLQotI2RlZmluZSBTRUNSRVRfV0lUSF9VTlNUQUJMRSAxCi0j
ZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVDVF9UT19DSEFOR0UgMQotCi0jaW5jbHVkZSA8Z2xpYi5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzZWNyZXQvc2VjcmV0Lmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0
a1RhcmdldExpc3QqIHB0cikKLXsKLSAgICBpZiAocHRyKQotICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfcmVmKHB0cik7Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIGd0a190
YXJnZXRfbGlzdF91bnJlZihwdHIpOwotfQotCi10ZW1wbGF0ZSA8PiBTZWNyZXRWYWx1ZSogcmVm
R1B0cihTZWNyZXRWYWx1ZSogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIHNlY3JldF92
YWx1ZV9yZWYocHRyKTsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIHNlY3Jl
dF92YWx1ZV91bnJlZihwdHIpOwotfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXRlbXBs
YXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3IqIHB0cikKLXsKLSAgICBpZiAocHRy
KQotICAgICAgICBnZGtfY3Vyc29yX3JlZihwdHIpOwotICAgIHJldHVybiBwdHI7Ci19Ci0KLXRl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNvciogcHRyKQotewotICAgIGlmIChwdHIp
Ci0gICAgICAgIGdka19jdXJzb3JfdW5yZWYocHRyKTsKLX0KLSNlbmRpZgotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTE5Mjg2NGE5MjI5ZGFiODgzYmVmYTU2MmIyMzVhZDhhYzM5NmRjOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDkgTWFydGluIFJvYmluc29uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1JlZlB0ckd0a19oCi0j
ZGVmaW5lIEdSZWZQdHJHdGtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
Ci10eXBlZGVmIHN0cnVjdCBfU2VjcmV0VmFsdWUgU2VjcmV0VmFsdWU7Ci0KLW5hbWVzcGFjZSBX
VEYgewotCi10ZW1wbGF0ZSA8PiBHdGtUYXJnZXRMaXN0KiByZWZHUHRyKEd0a1RhcmdldExpc3Qq
IHB0cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpOwot
Ci10ZW1wbGF0ZSA8PiBTZWNyZXRWYWx1ZSogcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsKLXRl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpOwotCi0jaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKLXRlbXBsYXRlIDw+IEdka0N1cnNvciogcmVmR1B0cihHZGtDdXJzb3Iq
IHB0cik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHZGtDdXJzb3IqIHB0cik7Ci0jZW5k
aWYKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HYW1lcGFkc0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNH
dGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk2MDlkZDA4NzEyZDEyODUy
MzY0YmYyMGU2ZGJjM2Y0YWZmYWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVwYWRzLmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBB
RCkKLQotI2luY2x1ZGUgIkdhbWVwYWREZXZpY2VMaW51eC5oIgotI2luY2x1ZGUgIkdhbWVwYWRM
aXN0LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPGdpby9ndW5peGlucHV0c3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8Z3VkZXYvZ3VkZXYuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdhbWVwYWREZXZpY2VHdGsgOiBwdWJsaWMgR2FtZXBh
ZERldmljZUxpbnV4IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHYW1lcGFkRGV2
aWNlR3RrPiBjcmVhdGUoU3RyaW5nIGRldmljZUZpbGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEdhbWVwYWREZXZpY2VHdGsoZGV2aWNlRmlsZSkpOwotICAgIH0KLSAgICB+
R2FtZXBhZERldmljZUd0aygpOwotCi1wcml2YXRlOgotICAgIEdhbWVwYWREZXZpY2VHdGsoU3Ry
aW5nIGRldmljZUZpbGUpOwotCi0gICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2Jq
ZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgR1JlZlB0cjxHSW5wdXRT
dHJlYW0+IG1faW5wdXRTdHJlYW07Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKLX07
Ci0KLUdhbWVwYWREZXZpY2VHdGs6OkdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUp
Ci0gICAgOiBHYW1lcGFkRGV2aWNlTGludXgoZGV2aWNlRmlsZSkKLXsKLSAgICBpZiAobV9maWxl
RGVzY3JpcHRvciA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dFN0cmVhbSA9
IGFkb3B0R1JlZihnX3VuaXhfaW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxT
RSkpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2Ny
ZWF0ZV9zb3VyY2UoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSks
IDApKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgMCk7Ci19Ci0KLUdhbWVwYWREZXZpY2VHdGs6On5H
YW1lcGFkRGV2aWNlR3RrKCkKLXsKLSAgICBpZiAobV9zb3VyY2UpCi0gICAgICAgIGdfc291cmNl
X2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwotfQotCi1nYm9vbGVhbiBHYW1lcGFkRGV2aWNlR3Rr
OjpyZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgR2FtZXBhZERldmljZUd0ayogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R2FtZXBhZERldmljZUd0ayo+KGRhdGEpOwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAg
ICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7Ci0KLSAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJsZV9p
bnB1dF9zdHJlYW1fcmVhZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShwb2xs
YWJsZVN0cmVhbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkp
OwotCi0gICAgLy8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCi0gICAgLy8gSW4gdGhl
IGNhc2Ugb2YgR19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0
IHVudGlsCi0gICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxT
RSBvdGhlcndpc2UuCi0gICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRj
aGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKLQot
ICAgIEFTU0VSVF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7Ci0gICAgZ2FtZXBh
ZERldmljZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1j
bGFzcyBHYW1lcGFkc0d0ayB7Ci1wdWJsaWM6Ci0gICAgR2FtZXBhZHNHdGsodW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOwotICAg
IHZvaWQgdW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICB2b2lkIHVw
ZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgfkdhbWVwYWRz
R3RrKCk7Ci0gICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdj
aGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgc3RhdGljIGdi
b29sZWFuIGlzR2FtZXBhZERldmljZShHVWRldkRldmljZSopOwotCi0gICAgVmVjdG9yPE93blB0
cjxHYW1lcGFkRGV2aWNlR3RrPiA+IG1fc2xvdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVw
YWREZXZpY2VHdGsqPiBtX2RldmljZU1hcDsKLQotICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1f
Z3VkZXZDbGllbnQ7Ci19OwotCi1HYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5zaWduZWQgbGVu
Z3RoKQotICAgIDogbV9zbG90cyhsZW5ndGgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1
YnN5c3RlbXNbXSA9IHsgImlucHV0IiwgMCB9OwotICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9wdEdS
ZWYoZ191ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9ndWRldkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxsYmFj
ayksIHRoaXMpOwotCi0gICAgR093blB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVu
dF9xdWVyeV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1swXSkp
OwotICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVt
OyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgewotICAgICAgICBHVWRldkRldmlj
ZSogZGV2aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7Ci0gICAgICAgIFN0cmlu
ZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2Vf
ZmlsZShkZXZpY2UpKTsKLSAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQotICAg
ICAgICAgICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci0gICAgICAgIGdfb2JqZWN0X3Vu
cmVmKGRldmljZSk7Ci0gICAgfQotfQotCi1HYW1lcGFkc0d0azo6fkdhbWVwYWRzR3RrKCkKLXsK
LSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVudC5n
ZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci19Ci0KLXZvaWQg
R2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQotewotICAgIExP
RyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VG
aWxlKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNp
emUoKTsgaW5kZXgrKykgewotICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7Ci0gICAgICAg
ICAgICBtX3Nsb3RzW2luZGV4XSA9IEdhbWVwYWREZXZpY2VHdGs6OmNyZWF0ZShkZXZpY2VGaWxl
KTsKLSAgICAgICAgICAgIG1fZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2luZGV4
XS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBHYW1lcGFkc0d0azo6dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKLXsKLSAg
ICBMT0coR2FtZXBhZCwgIkdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNl
RmlsZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRl
dmljZUZpbGUpKTsKLQotICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBtX2Rl
dmljZU1hcC50YWtlKGRldmljZUZpbGUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmlu
ZChnYW1lcGFkRGV2aWNlKTsKLSAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotCi0gICAg
bV9zbG90c1tpbmRleF0uY2xlYXIoKTsKLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6dXBkYXRlR2Ft
ZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCi17Ci0gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgp
ID09IGludG8tPmxlbmd0aCgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Ns
b3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xv
dHNbaV0tPmNvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1l
cGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFk
PiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKLSAg
ICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAg
IGdhbWVwYWQtPmluZGV4KGkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERldmlj
ZS0+aWQoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+
dGltZXN0YW1wKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5h
eGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7Ci0gICAgICAgICAgICBnYW1l
cGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2aWNl
LT5idXR0b25zRGF0YSgpKTsKLQotICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKLSAgICB9Ci19Ci0K
LXZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqIHVkZXZDbGll
bnQsIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgaWYgKCFpc0dhbWVwYWREZXZpY2UoZGV2aWNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR2FtZXBhZHNHdGsqIGdhbWVwYWRzR3RrID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkc0d0
ayo+KGRhdGEpOwotICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3Vk
ZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKLQotICAgIGlmICghZ19zdHJjbXAw
KGFjdGlvbiwgImFkZCIpKQotICAgICAgICBnYW1lcGFkc0d0ay0+cmVnaXN0ZXJEZXZpY2UoZGV2
aWNlRmlsZSk7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkKLSAg
ICAgICAgZ2FtZXBhZHNHdGstPnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci19Ci0KLWdi
b29sZWFuIEdhbWVwYWRzR3RrOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmljZSkK
LXsKLSAgICBjb25zdCBnY2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2Rldmlj
ZV9maWxlKGRldmljZSk7Ci0gICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9kZXZp
Y2VfZ2V0X3N5c2ZzX3BhdGgoZGV2aWNlKTsKLSAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5c2Zz
UGF0aCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaWYgKCFnX3VkZXZfZGV2aWNlX2hh
c19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19wcm9w
ZXJ0eShkZXZpY2UsICJJRF9JTlBVVF9KT1lTVElDSyIpKQotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0KLSAgICByZXR1cm4gZ19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1dC9q
cyIpOwotfQotCi12b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQotewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAoaW50by0+bGVu
Z3RoKCkpKTsKLSAgICBnYW1lcGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhMmVhYjEyOTYzMzRkNGEw
MDYwNWE0MjFiMDJmZWFlNDgyZDc3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50aWFs
QmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgaW50
IGdMYXlvdXRDb2x1bW5TcGFjaW5nID0gMTI7Ci1zdGF0aWMgY29uc3QgaW50IGdMYXlvdXRSb3dT
cGFjaW5nID0gNjsKLXN0YXRpYyBjb25zdCBpbnQgZ0J1dHRvblNwYWNpbmcgPSA1OwotCi1HdGtB
dXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUp
Ci0gICAgOiBtX2RpYWxvZygwKQotICAgICwgbV9sb2dpbkVudHJ5KDApCi0gICAgLCBtX3Bhc3N3
b3JkRW50cnkoMCkKLSAgICAsIG1fcmVtZW1iZXJDaGVja0J1dHRvbigwKQotICAgICwgbV9jaGFs
bGVuZ2UoY2hhbGxlbmdlKQotICAgICwgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGUobW9kZSkKLXsK
LX0KLQotR3RrQXV0aGVudGljYXRpb25EaWFsb2c6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0
a1dpbmRvdyogcGFyZW50V2luZG93LCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKLSAgICA6IG1fZGlhbG9nKGd0a19k
aWFsb2dfbmV3KCkpCi0gICAgLCBtX2xvZ2luRW50cnkoMCkKLSAgICAsIG1fcGFzc3dvcmRFbnRy
eSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDApCi0gICAgLCBtX2NoYWxsZW5nZShj
aGFsbGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZShtb2RlKQotewotICAgIEd0
a1dpZGdldCogY29udGVudEFyZWEgPSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoR1RLX0RJ
QUxPRyhtX2RpYWxvZykpOwotICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtf
Q09OVEFJTkVSKEdUS19ESUFMT0cobV9kaWFsb2cpKSwgNSk7Ci0gICAgZ3RrX2JveF9zZXRfc3Bh
Y2luZyhHVEtfQk9YKGNvbnRlbnRBcmVhKSwgMik7IC8qIDIgKiA1ICsgMiA9IDEyICovCi0KLSAg
ICBHdGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSU5ET1cobV9kaWFsb2cpOwotICAgIGd0a193aW5k
b3dfc2V0X3Jlc2l6YWJsZSh3aW5kb3csIEZBTFNFKTsKLSAgICBndGtfd2luZG93X3NldF90aXRs
ZSh3aW5kb3csICIiKTsKLSAgICBndGtfd2luZG93X3NldF9pY29uX25hbWUod2luZG93LCBHVEtf
U1RPQ0tfRElBTE9HX0FVVEhFTlRJQ0FUSU9OKTsKLQotICAgIGlmIChwYXJlbnRXaW5kb3cpCi0g
ICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3Iod2luZG93LCBwYXJlbnRXaW5kb3cp
OwotCi0gICAgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihjb250ZW50QXJlYSk7Ci19Ci0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIHZvaWQgcGFja1R3b0NvbHVtbkxheW91dElu
Qm94KEd0a1dpZGdldCogYm94LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmd1bWVudExpc3Q7Ci0g
ICAgdmFfc3RhcnQoYXJndW1lbnRMaXN0LCBib3gpOwotCi0gICAgR3RrV2lkZ2V0KiB0YWJsZSA9
IGd0a190YWJsZV9uZXcoMSwgMiwgRkFMU0UpOwotICAgIGd0a190YWJsZV9zZXRfY29sX3NwYWNp
bmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRDb2x1bW5TcGFjaW5nKTsKLSAgICBndGtfdGFi
bGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCBnTGF5b3V0Um93U3BhY2luZyk7
Ci0KLSAgICBHdGtXaWRnZXQqIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlz
dCwgR3RrV2lkZ2V0Kik7Ci0gICAgaW50IHJvd051bWJlciA9IDA7Ci0gICAgd2hpbGUgKGZpcnN0
Q29sdW1uV2lkZ2V0KSB7Ci0gICAgICAgIGlmIChyb3dOdW1iZXIpCi0gICAgICAgICAgICBndGtf
dGFibGVfcmVzaXplKEdUS19UQUJMRSh0YWJsZSksIHJvd051bWJlciArIDEsIDIpOwotCi0gICAg
ICAgIEd0a1dpZGdldCogc2Vjb25kQ29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwg
R3RrV2lkZ2V0Kik7Ci0gICAgICAgIEd0a0F0dGFjaE9wdGlvbnMgYXR0YWNoT3B0aW9ucyA9IHN0
YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+KEdUS19FWFBBTkQgfCBHVEtfRklMTCk7Ci0gICAg
ICAgIGd0a190YWJsZV9hdHRhY2goR1RLX1RBQkxFKHRhYmxlKSwgZmlyc3RDb2x1bW5XaWRnZXQs
Ci0gICAgICAgICAgICAwLCBzZWNvbmRDb2x1bW5XaWRnZXQgPyAxIDogMiwKLSAgICAgICAgICAg
IHJvd051bWJlciwgcm93TnVtYmVyICsgMSwKLSAgICAgICAgICAgIGF0dGFjaE9wdGlvbnMsIGF0
dGFjaE9wdGlvbnMsCi0gICAgICAgICAgICAwLCAwKTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29s
dW1uV2lkZ2V0KQotICAgICAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFC
TEUodGFibGUpLCBzZWNvbmRDb2x1bW5XaWRnZXQsIDEsIDIsIHJvd051bWJlciwgcm93TnVtYmVy
ICsgMSk7Ci0KLSAgICAgICAgZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0
LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgcm93TnVtYmVyKys7Ci0gICAgfQotCi0gICAgdmFfZW5k
KGFyZ3VtZW50TGlzdCk7Ci0KLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChib3gpLCB0
YWJsZSwgRkFMU0UsIEZBTFNFLCAwKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBwYWNrVHdvQ29s
dW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3Vt
ZW50TGlzdDsKLSAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7Ci0KLSAgICBHdGtXaWRn
ZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsKLSAgICBndGtfZ3JpZF9zZXRfY29sdW1uX3NwYWNp
bmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKLSAgICBndGtfZ3JpZF9zZXRf
cm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIGdMYXlvdXRSb3dTcGFjaW5nKTsKLSAgICBndGtf
Z3JpZF9zZXRfY29sdW1uX2hvbW9nZW5lb3VzKEdUS19HUklEKGdyaWQpLCBUUlVFKTsKLQotICAg
IEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0LCBHdGtX
aWRnZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0gMDsKLSAgICB3aGlsZSAoZmlyc3RDb2x1bW5X
aWRnZXQpIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmco
YXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgaW50IGZpcnN0V2lkZ2V0V2lkdGgg
PSBzZWNvbmRDb2x1bW5XaWRnZXQgPyAxIDogMjsKLQotICAgICAgICBndGtfZ3JpZF9hdHRhY2go
R1RLX0dSSUQoZ3JpZCksIGZpcnN0Q29sdW1uV2lkZ2V0LCAwLCByb3dOdW1iZXIsIGZpcnN0V2lk
Z2V0V2lkdGgsIDEpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhwYW5kKGZpcnN0Q29sdW1u
V2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmV4cGFuZChmaXJzdENvbHVt
bldpZGdldCwgVFJVRSk7Ci0KLSAgICAgICAgaWYgKHNlY29uZENvbHVtbldpZGdldCkgewotICAg
ICAgICAgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBzZWNvbmRDb2x1bW5XaWRn
ZXQsIDEsIHJvd051bWJlciwgMSwgMSk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9oZXhw
YW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3Nl
dF92ZXhwYW5kKHNlY29uZENvbHVtbldpZGdldCwgVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwot
ICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9Ci0KLSAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsK
LQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCksIGdyaWQsIEZBTFNFLCBGQUxT
RSwgMCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIEd0a1dpZGdldCogY3JlYXRlRGlhbG9nTGFiZWwo
Y29uc3QgY2hhciogbGFiZWxTdHJpbmcsIGludCBob3Jpem9udGFsUGFkZGluZyA9IDApCi17Ci0g
ICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxTdHJpbmcpOwotICAgIGd0
a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MobGFiZWwpLCAwLCAwLjUpOwotICAgIGlmICho
b3Jpem9udGFsUGFkZGluZykKLSAgICAgICAgZ3RrX21pc2Nfc2V0X3BhZGRpbmcoR1RLX01JU0Mo
bGFiZWwpLCAwLCBob3Jpem9udGFsUGFkZGluZyk7Ci0gICAgcmV0dXJuIGxhYmVsOwotfQotCi1z
dGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dFbnRyeShHdGtXaWRnZXQqKiBtZW1iZXIpCi17
Ci0gICAgKm1lbWJlciA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICBndGtfZW50cnlfc2V0X2FjdGl2
YXRlc19kZWZhdWx0KEdUS19FTlRSWSgqbWVtYmVyKSwgVFJVRSk7Ci0gICAgcmV0dXJuICptZW1i
ZXI7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmNyZWF0ZUNvbnRlbnRzSW5D
b250YWluZXIoR3RrV2lkZ2V0KiBjb250YWluZXIpCi17Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIGdMYXlvdXRDb2x1
bW5TcGFjaW5nKTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBoQm94ID0gZ3RrX2JveF9uZXcoR1RL
X09SSUVOVEFUSU9OX0hPUklaT05UQUwsIGdMYXlvdXRDb2x1bW5TcGFjaW5nKTsKLSNlbmRpZgot
ICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGhCb3gpLCBn
QnV0dG9uU3BhY2luZyk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250
YWluZXIpLCBoQm94KTsKLQotICAgIEd0a1dpZGdldCogaWNvbiA9IGd0a19pbWFnZV9uZXdfZnJv
bV9zdG9jayhHVEtfU1RPQ0tfRElBTE9HX0FVVEhFTlRJQ0FUSU9OLCBHVEtfSUNPTl9TSVpFX0RJ
QUxPRyk7Ci0gICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhpY29uKSwgMC41LCAw
KTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoQm94KSwgaWNvbiwgRkFMU0UsIEZB
TFNFLCAwKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gcHJvbXB0KGdfc3RyZHVwX3ByaW50ZigKLSAg
ICAgICAgXygiVGhlIHNpdGUgJXM6JWkgcmVxdWVzdHMgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQi
KSwKLSAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpLnV0ZjgoKS5k
YXRhKCksCi0gICAgICAgIG1fY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLnBvcnQoKSkpOwot
Ci0gICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9t
bmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7Ci0gICAgZ3RrX2xhYmVsX3NldF9saW5l
X3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9yZW1lbWJlckNoZWNr
QnV0dG9uKSkpLCBUUlVFKTsKLSAgICBndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbChtX3JlbWVt
YmVyQ2hlY2tCdXR0b24sIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlID09IERpc2FsbG93UGVyc2lz
dGVudFN0b3JhZ2UpOwotCi0KLSAgICAvLyBXZSBhcmUgYWRkaW5nIHRoZSBidXR0b24gYm94IGhl
cmUgbWFudWFsbHkgaW5zdGVhZCBvZiB1c2luZyB0aGUgcmVhZHktbWFkZSBHdGtEaWFsb2cgYnV0
dG9ucy4KLSAgICAvLyBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIHNoYXJlIHRoZSBjb2RlIHdpdGgg
aW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IHVzZSBHdGtEaWFsb2cuCi0jaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0a19oYnV0dG9uX2JveF9u
ZXcoKTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBidXR0b25Cb3ggPSBndGtfYnV0dG9uX2JveF9u
ZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOwotI2VuZGlmCi0gICAgZ3RrX2JveF9zZXRf
c3BhY2luZyhHVEtfQk9YKGJ1dHRvbkJveCksIGdCdXR0b25TcGFjaW5nKTsKLSAgICBndGtfYnV0
dG9uX2JveF9zZXRfbGF5b3V0KEdUS19CVVRUT05fQk9YKGJ1dHRvbkJveCksIEdUS19CVVRUT05C
T1hfRU5EKTsKLQotICAgIG1fb2theUJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21fc3RvY2so
R1RLX1NUT0NLX09LKTsKLSAgICBtX2NhbmNlbEJ1dHRvbiA9IGd0a19idXR0b25fbmV3X2Zyb21f
c3RvY2soR1RLX1NUT0NLX0NBTkNFTCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
YnV0dG9uQm94KSwgbV9jYW5jZWxCdXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKLSAgICBndGtfYm94
X3BhY2tfc3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX29rYXlCdXR0b24sIEZBTFNFLCBUUlVF
LCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fb2theUJ1dHRvbiwgImNsaWNrZWQiLCBHX0NB
TExCQUNLKGJ1dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9jYW5jZWxCdXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhidXR0b25DbGlja2VkQ2Fs
bGJhY2spLCB0aGlzKTsKLQotICAgIFN0cmluZyByZWFsbSA9IG1fY2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZSgpLnJlYWxtKCk7Ci0gICAgaWYgKCFyZWFsbS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cGFja1R3b0NvbHVtbkxheW91dEluQm94KGhCb3gsCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dM
YWJlbChwcm9tcHQuZ2V0KCksIGdMYXlvdXRSb3dTcGFjaW5nKSwgTlVMTCwKLSAgICAgICAgICAg
IGNyZWF0ZURpYWxvZ0xhYmVsKF8oIlNlcnZlciBtZXNzYWdlOiIpKSwgY3JlYXRlRGlhbG9nTGFi
ZWwocmVhbG0udXRmOCgpLmRhdGEoKSksCi0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChf
KCJVc2VybmFtZToiKSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAotICAgICAg
ICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRy
eSgmbV9wYXNzd29yZEVudHJ5KSwKLSAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwg
TlVMTCwKLSAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7Ci0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJveCwKLSAgICAgICAgICAgIGNy
ZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAot
ICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiVXNlcm5hbWU6IikpLCBjcmVhdGVEaWFs
b2dFbnRyeSgmbV9sb2dpbkVudHJ5KSwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVsKF8o
IlBhc3N3b3JkOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fcGFzc3dvcmRFbnRyeSksCi0gICAg
ICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICBi
dXR0b25Cb3gsIE5VTEwsIE5VTEwpOwotICAgIH0KLQotICAgIGd0a19lbnRyeV9zZXRfdmlzaWJp
bGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFMU0UpOwotICAgIGNvbnN0IENyZWRl
bnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UgPSBtX2NoYWxsZW5nZS5wcm9w
b3NlZENyZWRlbnRpYWwoKTsKLSAgICBpZiAoIWNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3Jh
Z2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9s
b2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS51c2VyKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29y
ZEVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZS5wYXNzd29yZCgpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dH
TEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbiksIFRSVUUpOwotICAgIH0KLX0KLQotdm9p
ZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2hvdygpCi17Ci0gICAgZ3RrX3dpZGdldF9zZXRf
Y2FuX2RlZmF1bHQobV9va2F5QnV0dG9uLCBUUlVFKTsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZGVm
YXVsdChtX29rYXlCdXR0b24pOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhtX2xvZ2luRW50
cnkpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2RpYWxvZyk7Ci19Ci0KLXZvaWQgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQotewotICAgIGd0a193aWRnZXRfZGVzdHJv
eShtX2RpYWxvZyk7Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRp
b25EaWFsb2c6OmF1dGhlbnRpY2F0ZShjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewot
ICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVu
dGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50
aWFsKG1fY2hhbGxlbmdlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2hhbGxlbmdlLmF1dGhlbnRp
Y2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkQ3JlZGVudGlhbChtX2NoYWxsZW5nZSwgY3JlZGVudGlh
bCk7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmJ1dHRvbkNsaWNrZWRDYWxs
YmFjayhHdGtXaWRnZXQqIGJ1dHRvbiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykK
LXsKLSAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgaWYgKGJ1dHRvbiA9PSBkaWFsb2ct
Pm1fb2theUJ1dHRvbikgewotICAgICAgICBjb25zdCBjaGFyICp1c2VybmFtZSA9IGd0a19lbnRy
eV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9nLT5tX2xvZ2luRW50cnkpKTsKLSAgICAgICAgY29u
c3QgY2hhciAqcGFzc3dvcmQgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGRpYWxvZy0+
bV9wYXNzd29yZEVudHJ5KSk7Ci0gICAgICAgIGJvb2wgcmVtZW1iZXJQYXNzd29yZCA9IGd0a190
b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04oZGlhbG9nLT5tX3JlbWVt
YmVyQ2hlY2tCdXR0b24pKTsKLSAgICAgICAgQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3Rl
bmNlOwotCi0gICAgICAgIGlmIChyZW1lbWJlclBhc3N3b3JkICYmIGRpYWxvZy0+bV9jcmVkZW50
aWFsU3RvcmFnZU1vZGUgPT0gQWxsb3dQZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgIHBl
cnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Np
b247Ci0KLSAgICAgICAgY3JlZGVudGlhbCA9IENyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1
c2VybmFtZSksIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLCBwZXJzaXN0ZW5jZSk7Ci0gICAg
fQotCi0gICAgZGlhbG9nLT5hdXRoZW50aWNhdGUoY3JlZGVudGlhbCk7Ci0gICAgZGlhbG9nLT5k
ZXN0cm95KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3N2M4MWFkZmVmYmQxOTI2OTc1OWE5ODcxNjYxZWY0ODE1
YmEzNmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpZm5kZWYgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAotI2RlZmluZSBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR3RrQXV0aGVudGljYXRpb25EaWFsb2cpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgZW51bSBDcmVkZW50aWFsU3RvcmFnZU1vZGUgewotICAg
ICAgICBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlLCAvLyBUaGUgdXNlciBpcyBhc2tlZCB3aGV0aGVy
IHRvIHN0b3JlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uCi0gICAgICAgIERpc2FsbG93UGVyc2lz
dGVudFN0b3JhZ2UgLy8gQ3JlZGVudGlhbCBpbmZvcm1hdGlvbiBpcyBvbmx5IGtlcHQgaW4gdGhl
IHNlc3Npb24uCi0gICAgfTsKLQotICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKLSAgICBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7Ci0gICAgdmlydHVhbCB+R3RrQXV0aGVudGlj
YXRpb25EaWFsb2coKSB7IH0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIGRlc3Ryb3koKTsK
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgY3JlYXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRn
ZXQqIGNvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGF1dGhlbnRpY2F0ZShjb25zdCBDcmVk
ZW50aWFsJik7Ci0gICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKLSAgICBHdGtXaWRnZXQqIG1fbG9n
aW5FbnRyeTsKLSAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKLSAgICBHdGtXaWRnZXQq
IG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKLSAgICBHdGtXaWRnZXQqIG1fb2theUJ1dHRvbjsKLSAg
ICBHdGtXaWRnZXQqIG1fY2FuY2VsQnV0dG9uOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lk
IGJ1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyopOwotICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIG1fY2hhbGxlbmdlOwotICAgIENyZWRl
bnRpYWxTdG9yYWdlTW9kZSBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzhhMzJjMDI2NWVkMTE1ZDhkNzYxZWQ3YTRmZmQy
MTNlYWRkM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJ
Z2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkd0a0NsaWNrQ291bnRlci5oIgotCi0jaW5jbHVkZSAiR093blB0
ckd0ay5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1H
dGtDbGlja0NvdW50ZXI6Okd0a0NsaWNrQ291bnRlcigpCi0gICAgOiBtX2N1cnJlbnRDbGlja0Nv
dW50KDApCi0gICAgLCBtX3ByZXZpb3VzQ2xpY2tCdXR0b24oMCkKLSAgICAsIG1fcHJldmlvdXND
bGlja1RpbWUoMCkKLXsKLX0KLQotdm9pZCBHdGtDbGlja0NvdW50ZXI6OnJlc2V0KCkKLXsKLSAg
ICBtX2N1cnJlbnRDbGlja0NvdW50ID0gMDsKLSAgICBtX3ByZXZpb3VzQ2xpY2tQb2ludCA9IElu
dFBvaW50KCk7Ci0gICAgbV9wcmV2aW91c0NsaWNrVGltZSA9IDA7Ci0gICAgbV9wcmV2aW91c0Ns
aWNrQnV0dG9uID0gMDsKLX0KLQotYm9vbCBHdGtDbGlja0NvdW50ZXI6OnNob3VsZFByb2Nlc3NC
dXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCi17Ci0gICAgLy8gRm9yIGRv
dWJsZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5vcm1hbCBidXR0b24gcHJl
c3MgZXZlbnQKLSAgICAvLyBhbmQgYSBzcGVjaWZpYyB0eXBlIChsaWtlIEdES18yQlVUVE9OX1BS
RVNTKS4gSWYgd2UgZGV0ZWN0IGEgc3BlY2lhbCBwcmVzcwotICAgIC8vIGNvbWluZyB1cCwgaWdu
b3JlIHRoaXMgZXZlbnQgYXMgaXQgY2VydGFpbmx5IGdlbmVyYXRlZCB0aGUgZG91YmxlIG9yIHRy
aXBsZQotICAgIC8vIGNsaWNrLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90IGVhdGluZyB0aGlzIGV2
ZW50IGlzIHR3byBET00gYnV0dG9uIHByZXNzIGV2ZW50cwotICAgIC8vIGFyZSBnZW5lcmF0ZWQu
Ci0gICAgR093blB0cjxHZGtFdmVudD4gbmV4dEV2ZW50KGdka19ldmVudF9wZWVrKCkpOwotICAg
IGlmICghbmV4dEV2ZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobmV4dEV2ZW50
LT5hbnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0RXZlbnQtPmFueS50eXBlID09
IEdES18zQlVUVE9OX1BSRVNTKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyBndWludDMyIGdldEV2ZW50VGltZShHZGtFdmVudCogZXZlbnQpCi17
Ci0gICAgZ3VpbnQzMiB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KTsKLSAgICBpZiAo
dGltZSkKLSAgICAgICAgcmV0dXJuIHRpbWU7Ci0KLSAgICAvLyBSZWFsIGV2ZW50cyBhbHdheXMg
aGF2ZSBhIG5vbi16ZXJvIHRpbWUsIGJ1dCBldmVudHMgc3ludGhlc2l6ZWQKLSAgICAvLyBieSB0
aGUgRFJUIGRvIG5vdCBhbmQgd2UgbXVzdCBjYWxjdWxhdGUgYSB0aW1lIG1hbnVhbGx5LiBUaGlz
IHRpbWUKLSAgICAvLyBpcyBub3QgY2FsY3VsYXRlZCBpbiB0aGUgRFJULCBiZWNhdXNlIEdUSysg
ZG9lcyBub3Qgd29yayB3ZWxsIHdpdGgKLSAgICAvLyBhbnl0aGluZyBvdGhlciB0aGFuIEdES19D
VVJSRU5UX1RJTUUgb24gc3ludGhlc2l6ZWQgZXZlbnRzLgotICAgIEdUaW1lVmFsIHRpbWVWYWx1
ZTsKLSAgICBnX2dldF9jdXJyZW50X3RpbWUoJnRpbWVWYWx1ZSk7Ci0gICAgcmV0dXJuICh0aW1l
VmFsdWUudHZfc2VjICogMTAwMCkgKyAodGltZVZhbHVlLnR2X3VzZWMgLyAxMDAwKTsKLX0KLQot
aW50IEd0a0NsaWNrQ291bnRlcjo6Y2xpY2tDb3VudEZvckdka0J1dHRvbkV2ZW50KEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCi17Ci0gICAgZ2ludCBkb3Vi
bGVDbGlja0Rpc3RhbmNlID0gMjUwOwotICAgIGdpbnQgZG91YmxlQ2xpY2tUaW1lID0gNTsKLSAg
ICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2Zvcl9zY3JlZW4oZ3Rr
X3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkpOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywK
LSAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xpY2stZGlzdGFuY2UiLCAmZG91YmxlQ2xp
Y2tEaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xpY2stdGltZSIsICZk
b3VibGVDbGlja1RpbWUsIE5VTEwpOwotCi0gICAgLy8gR1RLKyBvbmx5IGNvdW50cyB1cCB0byB0
cmlwbGUgY2xpY2tzLCBidXQgV2ViQ29yZSB3YW50cyB0byBrbm93IGFib3V0Ci0gICAgLy8gcXVh
ZHJ1cGxlIGNsaWNrcywgcXVpbnR1cGxlIGNsaWNrcywgYWQgaW5maW5pdHVtLiBIZXJlLCB3ZSBy
ZXBsaWNhdGUgdGhlCi0gICAgLy8gR0RLIGxvZ2ljIGZvciBjb3VudGluZyBjbGlja3MuCi0gICAg
R2RrRXZlbnQqIGV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihidXR0b25FdmVudCkp
OwotICAgIGd1aW50MzIgZXZlbnRUaW1lID0gZ2V0RXZlbnRUaW1lKGV2ZW50KTsKLQotICAgIGlm
ICgoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RL
XzNCVVRUT05fUFJFU1MpCi0gICAgICAgIHx8ICgoYWJzKGJ1dHRvbkV2ZW50LT54IC0gbV9wcmV2
aW91c0NsaWNrUG9pbnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCi0gICAgICAgICAgICAm
JiAoYWJzKGJ1dHRvbkV2ZW50LT55IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQueSgpKSA8IGRvdWJs
ZUNsaWNrRGlzdGFuY2UpCi0gICAgICAgICAgICAmJiAoZXZlbnRUaW1lIC0gbV9wcmV2aW91c0Ns
aWNrVGltZSA8IHN0YXRpY19jYXN0PGd1aW50Pihkb3VibGVDbGlja1RpbWUpKQotICAgICAgICAg
ICAgJiYgKGJ1dHRvbkV2ZW50LT5idXR0b24gPT0gbV9wcmV2aW91c0NsaWNrQnV0dG9uKSkpCi0g
ICAgICAgIG1fY3VycmVudENsaWNrQ291bnQrKzsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVu
dENsaWNrQ291bnQgPSAxOwotCi0gICAgZ2RvdWJsZSB4LCB5OwotICAgIGdka19ldmVudF9nZXRf
Y29vcmRzKGV2ZW50LCAmeCwgJnkpOwotICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9p
bnQoeCwgeSk7Ci0gICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gYnV0dG9uRXZlbnQtPmJ1dHRv
bjsKLSAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gZXZlbnRUaW1lOwotCi0gICAgcmV0dXJuIG1f
Y3VycmVudENsaWNrQ291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjZjYTFkZWM5MTgwNzk0ZjJmNzUxOWI4YmM1MmI2Nzk0YjFmOTdjZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEd0a0NsaWNrQ291bnRlcl9o
Ci0jZGVmaW5lIEd0a0NsaWNrQ291bnRlcl9oCi0KLSNpbmNsdWRlICJJbnRQb2ludC5oIgotCi10
eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgR3RrQ2xpY2tDb3VudGVyIHsKLXB1YmxpYzoKLSAgICBHdGtD
bGlja0NvdW50ZXIoKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgYm9vbCBzaG91bGRQcm9jZXNz
QnV0dG9uRXZlbnQoR2RrRXZlbnRCdXR0b24qKTsKLSAgICBpbnQgY2xpY2tDb3VudEZvckdka0J1
dHRvbkV2ZW50KEd0a1dpZGdldCosIEdka0V2ZW50QnV0dG9uKik7Ci0KLXByaXZhdGU6Ci0gICAg
aW50IG1fY3VycmVudENsaWNrQ291bnQ7Ci0gICAgSW50UG9pbnQgbV9wcmV2aW91c0NsaWNrUG9p
bnQ7Ci0gICAgdW5zaWduZWQgaW50IG1fcHJldmlvdXNDbGlja0J1dHRvbjsKLSAgICBpbnQgbV9w
cmV2aW91c0NsaWNrVGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BI
ZWxwZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTdhNjA3YTE4OWI1NGI4
NjRhNTk4ZmZiODU4NTNhNThkN2IzNmI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtEcmFnQW5kRHJvcEhlbHBlci5o
IgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCi0jaW5jbHVkZSAiRHJhZ0Rh
dGEuaCIKLSNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRHJvcHBpbmdDb250ZXh0IHsKLSAgICBE
cm9wcGluZ0NvbnRleHQoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbikKLSAgICAgICAgOiBnZGtDb250ZXh0KGdka0NvbnRleHQpCi0gICAgICAgICwg
ZGF0YU9iamVjdChEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSkKLSAgICAgICAgLCBsYXN0TW90aW9u
UG9zaXRpb24ocG9zaXRpb24pCi0gICAgICAgICwgZHJvcEhhcHBlbmVkKGZhbHNlKQotICAgICAg
ICAsIGV4aXRlZENhbGxiYWNrKDApCi0gICAgewotICAgIH0KLQotICAgIEdka0RyYWdDb250ZXh0
KiBnZGtDb250ZXh0OwotICAgIFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2Jq
ZWN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKLSAgICBpbnQg
cGVuZGluZ0RhdGFSZXF1ZXN0czsKLSAgICBib29sIGRyb3BIYXBwZW5lZDsKLSAgICBEcmFnRXhp
dGVkQ2FsbGJhY2sgZXhpdGVkQ2FsbGJhY2s7Ci19OwotCi10eXBlZGVmIEhhc2hNYXA8R2RrRHJh
Z0NvbnRleHQqLCBEcm9wcGluZ0NvbnRleHQqPiBEcm9wcGluZ0NvbnRleHRNYXA7Ci10eXBlZGVm
IEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBEcmFnZ2lu
Z0RhdGFPYmplY3RzTWFwOwotCi1HdGtEcmFnQW5kRHJvcEhlbHBlcjo6fkd0a0RyYWdBbmREcm9w
SGVscGVyKCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9kcm9wcGluZ0NvbnRleHRzKTsKLX0K
LQotYm9vbCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4
dCogZHJhZ0NvbnRleHQpCi17Ci0gICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3Ig
aXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZmluZChkcmFnQ29udGV4dCk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbV9kcmFnZ2luZ0RhdGFPYmplY3RzLnJlbW92ZShpdGVyYXRvcik7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRs
ZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBz
ZWxlY3Rpb25EYXRhLCBndWludCBpbmZvKQotewotICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoY29udGV4dCk7
Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT52YWx1
ZS5nZXQoKSk7Ci19Ci0KLXN0cnVjdCBIYW5kbGVEcmFnTGF0ZXJEYXRhIHsKLSAgICBEcm9wcGlu
Z0NvbnRleHQqIGNvbnRleHQ7Ci0gICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIqIGdsdWU7Ci19Owot
Ci1zdGF0aWMgZ2Jvb2xlYW4gaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayhIYW5kbGVEcmFn
TGF0ZXJEYXRhKiBkYXRhKQotewotICAgIGRhdGEtPmdsdWUtPmhhbmRsZURyYWdMZWF2ZUxhdGVy
KGRhdGEtPmNvbnRleHQpOwotICAgIGRlbGV0ZSBkYXRhOwotICAgIHJldHVybiBGQUxTRTsKLX0K
LQotdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlTGF0ZXIoRHJvcHBp
bmdDb250ZXh0KiBjb250ZXh0KQotewotICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3Ig
aXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0LT5nZGtDb250ZXh0KTsK
LSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgdmlldyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcg
eWV0ICh0aGVyZSBhcmUgc3RpbGwgcGVuZGluZyBkYXRhKQotICAgIC8vIHJlcXVlc3RzLCBkb24n
dCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZy4KLSAgICBpZiAoY29u
dGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uID0gY29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOwotICAgIERy
YWdEYXRhIGRyYWdEYXRhKGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV93aWRn
ZXQsIHBvc2l0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICBEcmFnT3BlcmF0aW9uTm9uZSk7
Ci0gICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sobV93aWRnZXQsICZkcmFnRGF0YSwgY29udGV4
dC0+ZHJvcEhhcHBlbmVkKTsKLQotICAgIG1fZHJvcHBpbmdDb250ZXh0cy5yZW1vdmUoaXRlcmF0
b3IpOwotICAgIGRlbGV0ZSBjb250ZXh0OwotfQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIERyYWdFeGl0ZWRD
YWxsYmFjayBleGl0ZWRDYWxsYmFjaykKLXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJh
dG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoZ2RrQ29udGV4dCk7Ci0gICAg
aWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdpbGwgZmlyZSBhIGRyYWctbGVhdmUgc2ln
bmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcKLSAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ug
d2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKLSAgICAvLyB0
aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25v
dXNseSBoZXJlLgotICAgIEhhbmRsZURyYWdMYXRlckRhdGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJh
Z0xhdGVyRGF0YTsKLSAgICBkYXRhLT5jb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGRh
dGEtPmNvbnRleHQtPmV4aXRlZENhbGxiYWNrID0gZXhpdGVkQ2FsbGJhY2s7Ci0gICAgZGF0YS0+
Z2x1ZSA9IHRoaXM7Ci0gICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKSwgZGF0YSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHF1ZXJ5TmV3RHJvcENvbnRleHREYXRhKERyb3BwaW5nQ29udGV4dCogZHJvcENvbnRl
eHQsIEd0a1dpZGdldCogd2lkZ2V0LCBndWludCB0aW1lKQotewotICAgIEdka0RyYWdDb250ZXh0
KiBnZGtDb250ZXh0ID0gZHJvcENvbnRleHQtPmdka0NvbnRleHQ7Ci0gICAgVmVjdG9yPEdka0F0
b20+IGFjY2VwdGFibGVUYXJnZXRzKFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPmRyb3BBdG9tc0ZvckNvbnRleHQod2lkZ2V0LCBnZGtDb250ZXh0KSk7Ci0gICAg
ZHJvcENvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7
IGkrKykKLSAgICAgICAgZ3RrX2RyYWdfZ2V0X2RhdGEod2lkZ2V0LCBnZGtDb250ZXh0LCBhY2Nl
cHRhYmxlVGFyZ2V0cy5hdChpKSwgdGltZSk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIEd0a0RyYWdB
bmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24sIHVuc2lnbmVkIHRpbWUpCi17Ci0gICAgRHJvcHBpbmdD
b250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSAwOwotICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRl
cmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsKLSAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKSB7Ci0gICAgICAgIGRyb3Bw
aW5nQ29udGV4dCA9IG5ldyBEcm9wcGluZ0NvbnRleHQoY29udGV4dCwgcG9zaXRpb24pOwotICAg
ICAgICBtX2Ryb3BwaW5nQ29udGV4dHMuc2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7Ci0g
ICAgICAgIHF1ZXJ5TmV3RHJvcENvbnRleHREYXRhKGRyb3BwaW5nQ29udGV4dCwgbV93aWRnZXQs
IHRpbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9y
LT52YWx1ZTsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBw
b3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9u
IHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVkIGFsbAotICAgIC8vIHRoZSBkYXRhIGZv
ciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdh
aXQKLSAgICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgotICAgIEFTU0VSVChkcm9wcGluZ0NvbnRl
eHQpOwotICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmpl
Y3QuZ2V0KCk7Ci19Ci0KLURhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5k
bGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25E
YXRhKiBzZWxlY3Rpb25EYXRhLCB1bnNpZ25lZCBpbmZvLCBJbnRQb2ludCYgcG9zaXRpb24pCi17
Ci0gICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdD
b250ZXh0cy5maW5kKGNvbnRleHQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29u
dGV4dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRHJvcHBpbmdDb250ZXh0KiBk
cm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZHJvcHBpbmdDb250ZXh0LT5w
ZW5kaW5nRGF0YVJlcXVlc3RzLS07Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwg
aW5mbywgZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKLQotICAgIGlmIChkcm9w
cGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgLy8gVGhlIGNvb3JkaW5hdGVzIHBhc3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2lnbmFs
IGFyZSBzb21ldGltZXMKLSAgICAvLyBpbmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBjb29y
ZGluYXRlcyBvZiB0aGUgbGFzdCBtb3Rpb24gZXZlbnQuCi0gICAgcG9zaXRpb24gPSBkcm9wcGlu
Z0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBubyBt
b3JlIHBlbmRpbmcgcmVxdWVzdHMsIHN0YXJ0IHNlbmRpbmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJD
b3JlLgotICAgIHJldHVybiBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Ci19Ci0K
LURhdGFPYmplY3RHdGsqIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRHJvcChHZGtE
cmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGl0
ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsK
LSAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7Ci0KLSAgICByZXR1cm4g
ZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOwotfQotCi12b2lkIEd0a0RyYWdBbmRE
cm9wSGVscGVyOjpzdGFydGVkRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCwgRGF0YU9iamVj
dEd0ayogZGF0YU9iamVjdCkKLXsKLSAgICBtX2RyYWdnaW5nRGF0YU9iamVjdHMuc2V0KGNvbnRl
eHQsIGRhdGFPYmplY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTRiMDJjNGI3YTNmODczMDEzNWNkZjYxNjRhZTA2OWZh
ZTNkNTk3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlh
IFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgR3RrRHJhZ0Fu
ZERyb3BIZWxwZXJfaAotI2RlZmluZSBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCi0KLSNpbmNsdWRl
ICJEYXRhT2JqZWN0R3RrLmgiCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IERyb3BwaW5nQ29udGV4dDsKLWNsYXNzIERy
YWdEYXRhOwotCi10eXBlZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dpZGdldCos
IERyYWdEYXRhKiwgYm9vbCBkcm9wSGFwcGVuZWQpOwotCi1jbGFzcyBHdGtEcmFnQW5kRHJvcEhl
bHBlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxwZXIpOwot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgR3RrRHJhZ0FuZERy
b3BIZWxwZXIoKQotICAgICAgICA6IG1fd2lkZ2V0KDApCi0gICAgewotICAgIH0KLSAgICB+R3Rr
RHJhZ0FuZERyb3BIZWxwZXIoKTsKLQotICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCogd2lk
Z2V0KSB7IG1fd2lkZ2V0ID0gd2lkZ2V0OyB9Ci0gICAgYm9vbCBoYW5kbGVEcmFnRW5kKEdka0Ry
YWdDb250ZXh0Kik7Ci0gICAgdm9pZCBoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCos
IEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCBpbmZvKTsKLSAgICB2b2lkIGhhbmRsZURyYWdMZWF2
ZShHZGtEcmFnQ29udGV4dCosIERyYWdFeGl0ZWRDYWxsYmFjayk7Ci0gICAgdm9pZCBoYW5kbGVE
cmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQqKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5k
bGVEcmFnTW90aW9uKEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCB1bnNpZ25lZCB0
aW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdD
b250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8sIEludFBvaW50Jik7Ci0g
ICAgRGF0YU9iamVjdEd0ayogaGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2
b2lkIHN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiwgRGF0YU9iamVjdEd0ayopOwotCi1wcml2
YXRlOgotICAgIEd0a1dpZGdldCogbV93aWRnZXQ7Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4
dCosIERyb3BwaW5nQ29udGV4dCo+IG1fZHJvcHBpbmdDb250ZXh0czsKLSAgICBIYXNoTWFwPEdk
a0RyYWdDb250ZXh0KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gbV9kcmFnZ2luZ0RhdGFPYmpl
Y3RzOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk5ODBiNTQ2YTJhNDljNjQ2MDU0NTExNWUwNDZhMTM2
NWJjNDIzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMzUyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCIKLQotI2luY2x1ZGUgIkdP
d25QdHJHdGsuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8Z2RrL2dk
a2tleXN5bXMuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotLy8gVGhlIFdpbmRvd3MgY29tcG9zaXRpb24ga2V5IGV2ZW50IGNvZGUgaXMgMjk5
IG9yIFZLX1BST0NFU1NLRVkuIFdlIG5lZWQgdG8KLS8vIGVtaXQgdGhpcyBjb2RlIGZvciB3ZWIg
Y29tcGF0aWJpbGl0eSByZWFzb25zIHdoZW4ga2V5IGV2ZW50cyB0cmlnZ2VyCi0vLyBjb21wb3Np
dGlvbiByZXN1bHRzLiBHREsgZG9lc24ndCBoYXZlIGFuIGVxdWl2YWxlbnQsIHNvIHdlIHNlbmQg
Vm9pZFN5bWJvbAotLy8gaGVyZSB0byBXZWJDb3JlLiBQbGF0Zm9ybUtleUV2ZW50IGtub3dzIHRv
IGNvbnZlcnQgdGhpcyBjb2RlIGludG8KLS8vIFZLX1BST0NFU1NLRVkuCi1jb25zdCBpbnQgZ0Nv
bXBvc2l0aW9uRXZlbnRLZXlDb2RlID0gR0RLX0tFWV9Wb2lkU3ltYm9sOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZUNvbW1pdENhbGxiYWNrKEd0a0lNQ29udGV4
dCosIGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5nLCBHdGtJbnB1dE1ldGhvZEZpbHRlciog
ZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlQ29tbWl0KGNvbXBvc2l0aW9uU3RyaW5nKTsK
LX0KLQotc3RhdGljIHZvaWQgaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2soR3RrSU1Db250ZXh0
KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZVBy
ZWVkaXRTdGFydCgpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZENhbGxi
YWNrKEd0a0lNQ29udGV4dCosIEd0a0lucHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCi17Ci0gICAg
ZmlsdGVyLT5oYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQ
cmVlZGl0RW5kQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZp
bHRlcikKLXsKLSAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRFbmQoKTsKLX0KLQotc3RhdGljIHZv
aWQgaGFuZGxlV2lkZ2V0UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrSW5wdXRNZXRob2RG
aWx0ZXIqIGZpbHRlcikKLXsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0
X3dpbmRvdyh3aWRnZXQpOwotICAgIEFTU0VSVCh3aW5kb3cpOwotICAgIGd0a19pbV9jb250ZXh0
X3NldF9jbGllbnRfd2luZG93KGZpbHRlci0+Y29udGV4dCgpLCB3aW5kb3cpOwotfQotCi12b2lk
IEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgQVNTRVJUKCFtX3dpZGdldCk7Ci0KLSAgICBtX3dpZGdldCA9IHdpZGdldDsKLSAgICBpZiAo
Z3RrX3dpZGdldF9nZXRfd2luZG93KG1fd2lkZ2V0KSkKLSAgICAgICAgaGFuZGxlV2lkZ2V0UmVh
bGl6ZShtX3dpZGdldCwgdGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0
X2FmdGVyKHdpZGdldCwgInJlYWxpemUiLCBHX0NBTExCQUNLKGhhbmRsZVdpZGdldFJlYWxpemUp
LCB0aGlzKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0Q3Vyc29yUmVjdChj
b25zdCBJbnRSZWN0JiBjdXJzb3JSZWN0KQotewotICAgIC8vIERvbid0IG1vdmUgdGhlIHdpbmRv
dyB1bmxlc3MgdGhlIGN1cnNvciBhY3R1YWxseSBtb3ZlcyBtb3JlIHRoYW4gMTAKLSAgICAvLyBw
aXhlbHMuIFRoaXMgcHJldmVudHMgdXMgZnJvbSBtYWtpbmcgdGhlIHdpbmRvdyBmbGFzaCBkdXJp
bmcgbWlub3IKLSAgICAvLyBjdXJzb3IgYWRqdXN0bWVudHMuCi0gICAgc3RhdGljIGNvbnN0IGlu
dCB3aW5kb3dNb3ZlbWVudFRocmVzaG9sZCA9IDEwICogMTA7Ci0gICAgaWYgKGN1cnNvclJlY3Qu
bG9jYXRpb24oKS5kaXN0YW5jZVNxdWFyZWRUb1BvaW50KG1fbGFzdENhcmVMb2NhdGlvbikgPCB3
aW5kb3dNb3ZlbWVudFRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0Q2Fy
ZUxvY2F0aW9uID0gY3Vyc29yUmVjdC5sb2NhdGlvbigpOwotICAgIEludFJlY3QgdHJhbnNsYXRl
ZFJlY3QgPSBjdXJzb3JSZWN0OwotCi0gICAgQVNTRVJUKG1fd2lkZ2V0KTsKLSAgICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihtX3dpZGdl
dCwgJmFsbG9jYXRpb24pOwotICAgIHRyYW5zbGF0ZWRSZWN0Lm1vdmUoYWxsb2NhdGlvbi54LCBh
bGxvY2F0aW9uLnkpOwotCi0gICAgR2RrUmVjdGFuZ2xlIGdka0N1cnNvclJlY3QgPSBjdXJzb3JS
ZWN0OwotICAgIGd0a19pbV9jb250ZXh0X3NldF9jdXJzb3JfbG9jYXRpb24obV9jb250ZXh0Lmdl
dCgpLCAmZ2RrQ3Vyc29yUmVjdCk7Ci19Ci0KLUd0a0lucHV0TWV0aG9kRmlsdGVyOjpHdGtJbnB1
dE1ldGhvZEZpbHRlcigpCi0gICAgOiBtX2N1cnNvck9mZnNldCgwKQotICAgICwgbV9jb250ZXh0
KGFkb3B0R1JlZihndGtfaW1fbXVsdGljb250ZXh0X25ldygpKSkKLSAgICAsIG1fd2lkZ2V0KDAp
Ci0gICAgLCBtX2VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHko
ZmFsc2UpCi0gICAgLCBtX2ZpbHRlcmluZ0tleUV2ZW50KGZhbHNlKQotICAgICwgbV9wcmVlZGl0
Q2hhbmdlZChmYWxzZSkKLSAgICAsIG1fcHJldmVudE5leHRDb21taXQoZmFsc2UpCi0gICAgLCBt
X2p1c3RTZW50RmFrZUtleVVwKGZhbHNlKQotICAgICwgbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0Nv
ZGVXaXRoTm9SZXN1bHRzKEdES19LRVlfVm9pZFN5bWJvbCkKLXsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fY29udGV4dC5nZXQoKSwgImNvbW1pdCIsIEdfQ0FMTEJBQ0soaGFuZGxlQ29tbWl0Q2Fs
bGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInBy
ZWVkaXQtc3RhcnQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWNoYW5n
ZWQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtZW5kIiwgR19DQUxM
QkFDSyhoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQotR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6On5HdGtJbnB1dE1ldGhvZEZpbHRlcigpCi17Ci0gICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaGFuZGxlQ29tbWl0Q2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihoYW5kbGVQcmVlZGl0RW5kQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV93aWRnZXQsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGhhbmRsZVdpZGdldFJlYWxpemUpLCB0aGlzKTsKLX0KLQotdm9pZCBHdGtJ
bnB1dE1ldGhvZEZpbHRlcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9lbmFi
bGVkID0gZW5hYmxlZDsKLSAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRf
Zm9jdXNfaW4obV9jb250ZXh0LmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19pbV9jb250
ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOwotfQotCi1ib29sIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjpmaWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQpCi17Ci0gICAgaWYgKCFj
YW5FZGl0KCkgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVu
dChldmVudCk7Ci0KLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgbV9maWx0ZXJp
bmdLZXlFdmVudCA9IHRydWU7Ci0KLSAgICB1bnNpZ25lZCBpbnQgbGFzdEZpbHRlcmVkS2V5UHJl
c3NDb2RlV2l0aE5vUmVzdWx0cyA9IG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVz
dWx0czsKLSAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBHREtf
S0VZX1ZvaWRTeW1ib2w7Ci0KLSAgICBib29sIGZpbHRlcmVkID0gZ3RrX2ltX2NvbnRleHRfZmls
dGVyX2tleXByZXNzKG1fY29udGV4dC5nZXQoKSwgZXZlbnQpOwotICAgIG1fZmlsdGVyaW5nS2V5
RXZlbnQgPSBmYWxzZTsKLQotICAgIGJvb2wganVzdFNlbnRGYWtlS2V5VXAgPSBtX2p1c3RTZW50
RmFrZUtleVVwOwotICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSBmYWxzZTsKLSAgICBpZiAoanVz
dFNlbnRGYWtlS2V5VXAgJiYgZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFNpbXBsZSBpbnB1dCBtZXRob2RzIHdvcmsgc3VjaCB0
aGF0IGV2ZW4gbm9ybWFsIGtleXN0cm9rZXMgZmlyZSB0aGUKLSAgICAvLyBjb21taXQgc2lnbmFs
LiBXZSBkZXRlY3QgdGhvc2Ugc2l0dWF0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBub3JtYWwKLSAg
ICAvLyBrZXkgZXZlbnRzLCBzdXBwbHlpbmcgdGhlIGNvbW1pdCBzdHJpbmcgYXMgdGhlIGtleSBj
aGFyYWN0ZXIuCi0gICAgaWYgKGZpbHRlcmVkICYmICFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkg
JiYgIW1fcHJlZWRpdENoYW5nZWQgJiYgbV9jb25maXJtZWRDb21wb3NpdGlvbi5sZW5ndGgoKSA9
PSAxKSB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gc2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50LCBt
X2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKLSAgICAgICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9
IFN0cmluZygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGlmIChmaWx0
ZXJlZCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1BSRVNTKSB7Ci0gICAgICAgIGlmICghbV9w
cmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSB0cnVlOwotICAgICAgICAgICAgbV9s
YXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gZXZlbnQtPmtleXZhbDsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCByZXN1bHQg
PSBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKGV2ZW50KTsKLSAgICAgICAgaWYg
KCFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9jb21w
b3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2NvbmZpcm1lZENvbXBv
c2l0aW9uID0gU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZpbHRlcmVkIGEga2V5IHByZXNzIGV2ZW50
IGFuZCBpdCB5aWVsZGVkIG5vIHJlc3VsdHMuIFN1cHByZXNzCi0gICAgLy8gdGhlIGNvcnJlc3Bv
bmRpbmcga2V5IHJlbGVhc2UgZXZlbnQgdG8gYXZvaWQgY29uZnVzaW5nIHRoZSB3ZWIgY29udGVu
dC4KLSAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFICYmIGxhc3RGaWx0ZXJl
ZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPT0gZXZlbnQtPmtleXZhbCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IGEga2V5c3Ryb2tlIHdhcyBlaXRoZXI6
Ci0gICAgLy8gMS4gVW5maWx0ZXJlZAotICAgIC8vIDIuIEEgZmlsdGVyZWQga2V5dXAgZXZlbnQu
IEFzIHRoZSBJTUUgY29kZSBpbiBFZGl0b3JDbGllbnQuaCBkb2Vzbid0Ci0gICAgLy8gICAgZXZl
ciBsb29rIGF0IGtleXVwIGV2ZW50cywgd2Ugc2VuZCBhbnkgY29tcG9zaXRpb24gcmVzdWx0cyBi
ZWZvcmUKLSAgICAvLyAgICB0aGUga2V5IGV2ZW50LgotICAgIC8vIEJvdGggbWlnaHQgaGF2ZSBj
b21wb3NpdGlvbiByZXN1bHRzIG9yIG5vdC4KLSAgICAvLwotICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRvIHNlbmQgdGhlIGNvbXBvc2l0aW9uIHJlc3VsdHMgYmVmb3JlIHRoZSBldmVudAotICAgIC8v
IGJlY2F1c2Ugc29tZSBJTSBtb2R1bGVzIG9wZXJhdGUgdGhhdCB3YXkuIEZvciBleGFtcGxlICh0
YWtlbiBmcm9tCi0gICAgLy8gdGhlIENocm9taXVtIHNvdXJjZSksIHRoZSBsYXRpbi1wb3N0IGlu
cHV0IG1ldGhvZCBnaXZlcyB0aGlzIHNlcXVlbmNlCi0gICAgLy8gd2hlbiB5b3UgcHJlc3MgJ2En
IGFuZCB0aGVuIGJhY2tzcGFjZToKLSAgICAvLyAgMS4ga2V5ZG93biAnYScgKGZpbHRlcmVkKQot
ICAgIC8vICAyLiBwcmVlZGl0IGNoYW5nZWQgdG8gImEiCi0gICAgLy8gIDMuIGtleXVwICdhJyAo
dW5maWx0ZXJlZCkKLSAgICAvLyAgNC4ga2V5ZG93biBCYWNrc3BhY2UgKHVuZmlsdGVyZWQpCi0g
ICAgLy8gIDUuIGNvbW1pdCAiYSIKLSAgICAvLyAgNi4gcHJlZWRpdCBlbmQKLSAgICBpZiAoIW1f
Y29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKQotICAgICAgICBjb25maXJtQ29tcG9zaXRp
b24oKTsKLSAgICBpZiAobV9wcmVlZGl0Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlUHJlZWRpdCgp
OwotICAgIHJldHVybiBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEd0a0lu
cHV0TWV0aG9kRmlsdGVyOjpub3RpZnlNb3VzZUJ1dHRvblByZXNzKCkKLXsKLSAgICAvLyBDb25m
aXJtaW5nIHRoZSBjb21wb3NpdGlvbiBtYXkgdHJpZ2dlciBhIHNlbGVjdGlvbiBjaGFuZ2UsIHdo
aWNoCi0gICAgLy8gbWlnaHQgdHJpZ2dlciBmdXJ0aGVyIHVud2FudGVkIGFjdGlvbnMgb24gdGhl
IGNvbnRleHQsIHNvIHdlIHByZXZlbnQKLSAgICAvLyB0aGF0IGJ5IHNldHRpbmcgbV9jb21wb3Np
bmdUZXh0Q3VycmVudGx5IHRvIGZhbHNlLgotICAgIGlmIChtX2NvbXBvc2luZ1RleHRDdXJyZW50
bHkpCi0gICAgICAgIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsKLSAgICBtX2NvbXBvc2lu
Z1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICBjYW5jZWxDb250ZXh0Q29tcG9zaXRpb24oKTsK
LX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6cmVzZXRDb250ZXh0KCkKLXsKLQotICAg
IC8vIFdlIGFsd2F5cyBjYW5jZWwgdGhlIGN1cnJlbnQgV2ViQ29yZSBjb21wb3NpdGlvbiBoZXJl
LCBpbiBjYXNlIHRoZQotICAgIC8vIGNvbXBvc2l0aW9uIHdhcyBzZXQgb3V0c2lkZSB0aGUgR1RL
KyBJTUUgcGF0aCAodmlhIGEgc2NyaXB0LCBmb3IKLSAgICAvLyBpbnN0YW5jZSkgYW5kIHdlIGFy
ZW4ndCB0cmFja2luZyBpdC4KLSAgICBjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKTsKLQotICAg
IGlmICghbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0
aW9uKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNhbmNlbENvbnRleHRDb21w
b3NpdGlvbigpCi17Ci0gICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9ICFtX3ByZWVkaXQuaXNFbXB0
eSgpOwotCi0gICAgZ3RrX2ltX2NvbnRleHRfcmVzZXQobV9jb250ZXh0LmdldCgpKTsKLQotICAg
IG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgIG1fanVzdFNlbnRGYWtlS2V5
VXAgPSBmYWxzZTsKLSAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKLSAgICBtX2NvbmZpcm1lZENv
bXBvc2l0aW9uID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5v
dGlmeUZvY3VzZWRJbigpCi17Ci0gICAgbV9lbmFibGVkID0gdHJ1ZTsKLSAgICBndGtfaW1fY29u
dGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9k
RmlsdGVyOjpub3RpZnlGb2N1c2VkT3V0KCkKLXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSkKLSAgICAgICAg
Y29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOwotICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlv
bigpOwotICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChtX2NvbnRleHQuZ2V0KCkpOwotICAg
IG1fZW5hYmxlZCA9IGZhbHNlOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpjb25m
aXJtQ29tcG9zaXRpb24oKQotewotICAgIGNvbmZpcm1Db21wb3NpdGlvblRleHQobV9jb25maXJt
ZWRDb21wb3NpdGlvbik7Ci0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwot
fQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjp1cGRhdGVQcmVlZGl0KCkKLXsKLSAgICBz
ZXRQcmVlZGl0KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQpOwotICAgIG1fcHJlZWRpdENoYW5n
ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZENvbXBvc2l0
aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2Vu
ZCkKLXsKLSAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19LRVlf
UFJFU1MpKTsKLSAgICBldmVudC0+a2V5LnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2
ZW50LT5rZXkua2V5dmFsID0gZ0NvbXBvc2l0aW9uRXZlbnRLZXlDb2RlOwotICAgIHNlbmRLZXlF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQsIEV2
ZW50RmFrZWQpOwotCi0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwotICAg
IGlmIChyZXN1bHRzVG9TZW5kICYgQ29tcG9zaXRpb24pCi0gICAgICAgIG1fY29tcG9zaW5nVGV4
dEN1cnJlbnRseSA9IGZhbHNlOwotCi0gICAgZXZlbnQtPnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7
Ci0gICAgc2VuZFNpbXBsZUtleUV2ZW50KCZldmVudC0+a2V5LCBTdHJpbmcoKSwgRXZlbnRGYWtl
ZCk7Ci0gICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IHRydWU7Ci19Ci0KLXZvaWQgR3RrSW5wdXRN
ZXRob2RGaWx0ZXI6OmhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0cmluZykK
LXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCkgewotICAgICAgICBtX3ByZXZlbnROZXh0
Q29tbWl0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZW5h
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb25maXJtZWRDb21wb3NpdGlvbi5hcHBl
bmQoU3RyaW5nOjpmcm9tVVRGOChjb21wb3NpdGlvblN0cmluZykpOwotCi0gICAgLy8gSWYgdGhl
IGNvbW1pdCB3YXMgdHJpZ2dlcmVkIG91dHNpZGUgb2YgYSBrZXkgZXZlbnQsIGp1c3Qgc2VuZAot
ICAgIC8vIHRoZSBJTUUgZXZlbnQgbm93LiBJZiB3ZSBhcmUgaGFuZGxpbmcgYSBrZXkgZXZlbnQs
IHdlJ2xsIGRlY2lkZQotICAgIC8vIGxhdGVyIGhvdyB0byBoYW5kbGUgdGhpcy4KLSAgICBpZiAo
IW1fZmlsdGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHNlbmRDb21wb3NpdGlvbkFuZFByZWVkaXRX
aXRoRmFrZUtleUV2ZW50cyhDb21wb3NpdGlvbik7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RG
aWx0ZXI6OmhhbmRsZVByZWVkaXRTdGFydCgpCi17Ci0gICAgaWYgKG1fcHJldmVudE5leHRDb21t
aXQgfHwgIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJlZWRpdENoYW5nZWQg
PSB0cnVlOwotICAgIG1fcHJlZWRpdCA9ICIiOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmls
dGVyOjpoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX2VuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdPd25QdHI8Z2NoYXI+IG5ld1ByZWVkaXQ7Ci0gICAgZ3RrX2lt
X2NvbnRleHRfZ2V0X3ByZWVkaXRfc3RyaW5nKG1fY29udGV4dC5nZXQoKSwgJm5ld1ByZWVkaXQu
b3V0UHRyKCksIDAsICZtX2N1cnNvck9mZnNldCk7Ci0KLSAgICBpZiAobV9wcmV2ZW50TmV4dENv
bW1pdCkgewotICAgICAgICBpZiAoc3RybGVuKG5ld1ByZWVkaXQuZ2V0KCkpID4gMCkKLSAgICAg
ICAgICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcHJlZWRpdCA9IFN0cmluZzo6ZnJvbVVURjgo
bmV3UHJlZWRpdC5nZXQoKSk7Ci0gICAgbV9jdXJzb3JPZmZzZXQgPSBzdGQ6Om1pbihzdGQ6Om1h
eChtX2N1cnNvck9mZnNldCwgMCksIHN0YXRpY19jYXN0PGludD4obV9wcmVlZGl0Lmxlbmd0aCgp
KSk7Ci0KLSAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSAhbV9wcmVlZGl0LmlzRW1wdHko
KTsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKLQotICAgIGlmICghbV9maWx0ZXJpbmdL
ZXlFdmVudCkKLSAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZl
bnRzKFByZWVkaXQpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVQcmVl
ZGl0RW5kKCkKLXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByZWVkaXQgPSBTdHJpbmcoKTsKLSAgICBtX2N1cnNv
ck9mZnNldCA9IDA7Ci0gICAgbV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1f
ZmlsdGVyaW5nS2V5RXZlbnQpCi0gICAgICAgIHVwZGF0ZVByZWVkaXQoKTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU0ODI1MzQ4OGQxMDRlODU0M2JhMGYxMjhh
YTYzMzQxZWNhN2I2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBHdGtJbnB1dE1ldGhvZEZpbHRlcl9oCi0jZGVmaW5lIEd0a0lu
cHV0TWV0aG9kRmlsdGVyX2gKLQotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4dDsKLXR5
cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEd0a0lucHV0TWV0aG9kRmlsdGVyIHsKLXB1YmxpYzoKLSAgICBHdGtJbnB1dE1l
dGhvZEZpbHRlcigpOwotICAgIH5HdGtJbnB1dE1ldGhvZEZpbHRlcigpOwotCi0gICAgYm9vbCBm
aWx0ZXJLZXlFdmVudChHZGtFdmVudEtleSopOwotICAgIHZvaWQgbm90aWZ5TW91c2VCdXR0b25Q
cmVzcygpOwotICAgIHZvaWQgbm90aWZ5Rm9jdXNlZEluKCk7Ci0gICAgdm9pZCBub3RpZnlGb2N1
c2VkT3V0KCk7Ci0gICAgdm9pZCByZXNldENvbnRleHQoKTsKLSAgICB2b2lkIHNldEVuYWJsZWQo
Ym9vbCk7Ci0KLSAgICB2b2lkIGhhbmRsZUNvbW1pdChjb25zdCBjaGFyKiBjb21wb3NpdGlvblN0
cmluZyk7Ci0gICAgdm9pZCBoYW5kbGVQcmVlZGl0Q2hhbmdlZCgpOwotICAgIHZvaWQgaGFuZGxl
UHJlZWRpdFN0YXJ0KCk7Ci0gICAgdm9pZCBoYW5kbGVQcmVlZGl0RW5kKCk7Ci0KLSAgICB2b2lk
IGNvbmZpcm1Db21wb3NpdGlvbigpOwotICAgIHZvaWQgY2FuY2VsQ29udGV4dENvbXBvc2l0aW9u
KCk7Ci0gICAgdm9pZCB1cGRhdGVQcmVlZGl0KCk7Ci0gICAgdm9pZCBzZXRDdXJzb3JSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2F0aW9uKTsKLQotICAgIEd0a0lNQ29udGV4dCogY29udGV4dCgpIHsg
cmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAgZW51bSBFdmVudEZha2VkRm9yQ29tcG9z
aXRpb24gewotICAgICAgICBFdmVudEZha2VkLAotICAgICAgICBFdmVudE5vdEZha2VkCi0gICAg
fTsKLQotcHJvdGVjdGVkOgotICAgIGVudW0gUmVzdWx0c1RvU2VuZCB7Ci0gICAgICAgIFByZWVk
aXQgPSAxIDw8IDEsCi0gICAgICAgIENvbXBvc2l0aW9uID0gMSA8PCAyLAotICAgICAgICBQcmVl
ZGl0QW5kQ29tcG9zaXRpb24gPSBQcmVlZGl0ICsgQ29tcG9zaXRpb24KLSAgICB9OwotCi0gICAg
dm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgdmlydHVhbCBib29sIGNhbkVkaXQoKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSosIFdU
Rjo6U3RyaW5nIGV2ZW50U3RyaW5nID0gU3RyaW5nKCksIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlv
biA9IEV2ZW50Tm90RmFrZWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQgPSBQcmVlZGl0
QW5kQ29tcG9zaXRpb24sIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiA9IEV2ZW50Tm90RmFrZWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJpbmcgY29t
cG9zaXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21wb3NpdGlv
bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVlZGl0KFN0cmluZywgaW50IGN1cnNvck9mZnNldCkg
PSAwOwotCi0gICAgV1RGOjpTdHJpbmcgbV9jb25maXJtZWRDb21wb3NpdGlvbjsKLSAgICBXVEY6
OlN0cmluZyBtX3ByZWVkaXQ7Ci0gICAgaW50IG1fY3Vyc29yT2Zmc2V0OwotCi1wcml2YXRlOgot
ICAgIHZvaWQgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3Vs
dHNUb1NlbmQpOwotCi0gICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IG1fY29udGV4dDsKLSAgICBH
dGtXaWRnZXQqIG1fd2lkZ2V0OwotICAgIGJvb2wgbV9lbmFibGVkOwotICAgIGJvb2wgbV9jb21w
b3NpbmdUZXh0Q3VycmVudGx5OwotICAgIGJvb2wgbV9maWx0ZXJpbmdLZXlFdmVudDsKLSAgICBi
b29sIG1fcHJlZWRpdENoYW5nZWQ7Ci0gICAgYm9vbCBtX3ByZXZlbnROZXh0Q29tbWl0OwotICAg
IGJvb2wgbV9qdXN0U2VudEZha2VLZXlVcDsKLSAgICB1bnNpZ25lZCBpbnQgbV9sYXN0RmlsdGVy
ZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzOwotICAgIEludFBvaW50IG1fbGFzdENhcmVMb2Nh
dGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a0lucHV0
TWV0aG9kRmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtQbHVnaW5XaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdp
bldpZGdldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjFiNjgwZGJhYmEz
NjFmZDFjNTAzZDRiNjZmYzlhMWE5Y2UyOTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldp
ZGdldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHdGtQbHVnaW5XaWRn
ZXQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNp
b25pbmcuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3RrUGx1Z2luV2lkZ2V0OjpHdGtQbHVnaW5XaWRn
ZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi0gICAgOiBXaWRnZXQod2lkZ2V0KQotewotICAgIGd0a193
aWRnZXRfaGlkZSh3aWRnZXQpOwotfQotCi1HdGtQbHVnaW5XaWRnZXQ6On5HdGtQbHVnaW5XaWRn
ZXQoKQotewotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoZ3RrX3dpZGdl
dF9nZXRfcGFyZW50KHBsYXRmb3JtV2lkZ2V0KCkpKSwgcGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0K
LXZvaWQgR3RrUGx1Z2luV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb3Jl
UmVjdCkKLXsKLSAgICAvKiBubyBuZWVkIHRvICovCi0gICAgaWYgKCFndGtfd2lkZ2V0X2dldF9o
YXNfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHZGtX
aW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhwbGF0Zm9ybVdpZGdldCgpKTsK
LSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2RrUmVjdGFuZ2xlIHJl
Y3QgPSBjb3JlUmVjdDsKLSAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZy
ZWN0LCBGQUxTRSk7Ci19Ci0KLXZvaWQgR3RrUGx1Z2luV2lkZ2V0OjpmcmFtZVJlY3RzQ2hhbmdl
ZCgpCi17Ci0gICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7Ci0gICAgSW50UG9pbnQgbG9j
ID0gcGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKLSAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSB9OwotCi0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KHBsYXRm
b3JtV2lkZ2V0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3dpZGdl
dF9zaXplX2FsbG9jYXRlKHBsYXRmb3JtV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKLSAgICBndGtf
d2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzM3M2VjNTkwYjJmMjIxZTNiYjk4MTdkMGQzMzdlZTFmNDMzZDc5Mi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR3RrUGx1Z2luV2lkZ2V0X2gK
LSNkZWZpbmUgR3RrUGx1Z2luV2lkZ2V0X2gKLQotI2luY2x1ZGUgIldpZGdldC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgR3RrUGx1Z2luV2lkZ2V0IDogcHVibGljIFdpZGdl
dCB7Ci0gICAgcHVibGljOgotICAgICAgICBHdGtQbHVnaW5XaWRnZXQoR3RrV2lkZ2V0Kik7Ci0g
ICAgICAgIHZpcnR1YWwgfkd0a1BsdWdpbldpZGdldCgpOwotICAgICAgICB2b2lkIGludmFsaWRh
dGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgp
OwotICAgIH07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
UG9wdXBNZW51LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1N2ExN2RjMzIz
YmNmN2IzNTdiMjc3ZjA4MGFkZWYwOTEzNTJmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBN
ZW51LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVs
ZW1lbnRzIGluIFdlYkNvcmUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBJ
Z2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a1BvcHVwTWVu
dS5oIgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIkd0a1Zl
cnNpb25pbmcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBn
U2VhcmNoVGltZW91dE1zID0gMTAwMDsKLQotR3RrUG9wdXBNZW51OjpHdGtQb3B1cE1lbnUoKQot
ICAgIDogbV9wb3B1cChndGtfbWVudV9uZXcoKSkKLSAgICAsIG1fcHJldmlvdXNLZXlFdmVudENo
YXJhY3RlcigwKQotICAgICwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKDApCi17Ci0gICAg
bV9rZXlQcmVzc0hhbmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgImtl
eS1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0soR3RrUG9wdXBNZW51OjprZXlQcmVzc0V2ZW50Q2Fs
bGJhY2spLCB0aGlzKTsKLX0KLQotR3RrUG9wdXBNZW51Ojp+R3RrUG9wdXBNZW51KCkKLXsKLSAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9wb3B1cC5nZXQoKSwgbV9rZXlQcmVzc0hh
bmRsZXJJRCk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjpjbGVhcigpCi17Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9mb3JlYWNoKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0
X2Nhc3Q8R3RrQ2FsbGJhY2s+KG1lbnVSZW1vdmVJdGVtKSwgdGhpcyk7Ci19Ci0KLXZvaWQgR3Rr
UG9wdXBNZW51OjphcHBlbmRTZXBhcmF0b3IoKQotewotICAgIEd0a1dpZGdldCogbWVudUl0ZW0g
PSBndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9uZXcoKTsKLSAgICBndGtfbWVudV9zaGVsbF9hcHBl
bmQoR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKLSAgICBndGtfd2lk
Z2V0X3Nob3cobWVudUl0ZW0pOwotfQotCi12b2lkIEd0a1BvcHVwTWVudTo6YXBwZW5kSXRlbShH
dGtBY3Rpb24qIGFjdGlvbikKLXsKLSAgICBHdGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX2FjdGlv
bl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7Ci0gICAgZ3RrX3dpZGdldF9zZXRfdG9vbHRpcF90
ZXh0KG1lbnVJdGVtLCBndGtfYWN0aW9uX2dldF90b29sdGlwKGFjdGlvbikpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QobWVudUl0ZW0sICJzZWxlY3QiLCBHX0NBTExCQUNLKEd0a1BvcHVwTWVudTo6
c2VsZWN0SXRlbUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdU
S19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBtZW51SXRlbSk7Ci0KLSAgICBpZiAoZ3RrX2Fj
dGlvbl9pc192aXNpYmxlKGFjdGlvbikpCi0gICAgICAgIGd0a193aWRnZXRfc2hvdyhtZW51SXRl
bSk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51Ojpwb3BVcChjb25zdCBJbnRTaXplJiBtZW51U2l6
ZSwgY29uc3QgSW50UG9pbnQmIG1lbnVQb3NpdGlvbiwgaW50IGl0ZW1Db3VudCwgaW50IHNlbGVj
dGVkSXRlbSwgY29uc3QgR2RrRXZlbnQqIGV2ZW50KQotewotICAgIHJlc2V0VHlwZUFoZWFkRmlu
ZFN0YXRlKCk7Ci0gICAgbV9tZW51UG9zaXRpb24gPSBtZW51UG9zaXRpb247Ci0gICAgZ3RrX21l
bnVfc2V0X2FjdGl2ZShHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgc2VsZWN0ZWRJdGVtKTsKLQot
ICAgIC8vIFRoaXMgYXBwcm9hY2ggZm9sbG93cyB0aGUgb25lIGluIGd0a2NvbWJvYm94LmMuCi0g
ICAgR3RrUmVxdWlzaXRpb24gcmVxdWlzaXRpb247Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9y
ZXF1ZXN0KG1fcG9wdXAuZ2V0KCksIC0xLCAtMSk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LSAgICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCAmcmVxdWlzaXRpb24p
OwotI2Vsc2UKLSAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6ZShtX3BvcHVwLmdldCgp
LCAmcmVxdWlzaXRpb24sIDApOwotI2VuZGlmCi0KLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3Jl
cXVlc3QobV9wb3B1cC5nZXQoKSwgc3RkOjptYXgobWVudVNpemUud2lkdGgoKSwgcmVxdWlzaXRp
b24ud2lkdGgpLCAtMSk7Ci0KLSAgICBHTGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dl
dF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpKTsKLSAgICBHTGlzdCogcCA9
IGNoaWxkcmVuOwotICAgIGlmIChpdGVtQ291bnQpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBpdGVtQ291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgPiBzZWxlY3RlZEl0ZW0p
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIEd0a1dpZGdldCogaXRlbSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8R3RrV2lkZ2V0Kj4ocC0+ZGF0YSk7Ci0gICAgICAgICAgICBHdGtS
ZXF1aXNpdGlvbiBpdGVtUmVxdWlzaXRpb247Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAg
ICAgICAgICAgIGd0a193aWRnZXRfZ2V0X2NoaWxkX3JlcXVpc2l0aW9uKGl0ZW0sICZpdGVtUmVx
dWlzaXRpb24pOwotI2Vsc2UKLSAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9z
aXplKGl0ZW0sICZpdGVtUmVxdWlzaXRpb24sIDApOwotI2VuZGlmCi0gICAgICAgICAgICBtX21l
bnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9uLnkoKSAtIGl0ZW1SZXF1aXNpdGlvbi5oZWln
aHQpOwotCi0gICAgICAgICAgICBwID0gZ19saXN0X25leHQocCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBDZW50ZXIgdmVydGljYWxseSB0aGUgZW1wdHkgcG9wdXAgaW4g
dGhlIGNvbWJvIGJveCBhcmVhLgotICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBv
c2l0aW9uLnkoKSAtIG1lbnVTaXplLmhlaWdodCgpIC8gMik7Ci0gICAgfQotICAgIGdfbGlzdF9m
cmVlKGNoaWxkcmVuKTsKLQotICAgIGd1aW50IGJ1dHRvbjsKLSAgICBndWludDMyIGFjdGl2YXRl
VGltZTsKLSAgICBpZiAoZXZlbnQpIHsKLSAgICAgICAgYnV0dG9uID0gZXZlbnQtPnR5cGUgPT0g
R0RLX0JVVFRPTl9QUkVTUyA/IGV2ZW50LT5idXR0b24uYnV0dG9uIDogMTsKLSAgICAgICAgYWN0
aXZhdGVUaW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBidXR0b24gPSAxOwotICAgICAgICBhY3RpdmF0ZVRpbWUgPSBHREtfQ1VSUkVOVF9USU1F
OwotICAgIH0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ3RrX21lbnVfcG9wdXAo
R1RLX01FTlUobV9wb3B1cC5nZXQoKSksIDAsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBv
c2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCBidXR0b24sIGFjdGl2YXRl
VGltZSk7Ci0jZWxzZQotICAgIGd0a19tZW51X3BvcHVwX2Zvcl9kZXZpY2UoR1RLX01FTlUobV9w
b3B1cC5nZXQoKSksIGV2ZW50ID8gZ2RrX2V2ZW50X2dldF9kZXZpY2UoZXZlbnQpIDogMCwgMCwg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVu
dVBvc2l0aW9uRnVuYz4obWVudVBvc2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBidXR0b24sIGFj
dGl2YXRlVGltZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OnBvcERvd24oKQot
ewotICAgIGd0a19tZW51X3BvcGRvd24oR1RLX01FTlUobV9wb3B1cC5nZXQoKSkpOwotICAgIHJl
c2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjptZW51UmVt
b3ZlSXRlbShHdGtXaWRnZXQqIHdpZGdldCwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0g
ICAgQVNTRVJUKHBvcHVwTWVudS0+bV9wb3B1cCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUo
R1RLX0NPTlRBSU5FUihwb3B1cE1lbnUtPm1fcG9wdXAuZ2V0KCkpLCB3aWRnZXQpOwotfQotCi12
b2lkIEd0a1BvcHVwTWVudTo6bWVudVBvc2l0aW9uRnVuY3Rpb24oR3RrTWVudSosIGdpbnQqIHgs
IGdpbnQqIHksIGdib29sZWFuKiBwdXNoSW4sIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQotewot
ICAgICp4ID0gcG9wdXBNZW51LT5tX21lbnVQb3NpdGlvbi54KCk7Ci0gICAgKnkgPSBwb3B1cE1l
bnUtPm1fbWVudVBvc2l0aW9uLnkoKTsKLSAgICAqcHVzaEluID0gdHJ1ZTsKLX0KLQotdm9pZCBH
dGtQb3B1cE1lbnU6OnJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCkKLXsKLSAgICBtX2N1cnJlbnRs
eVNlbGVjdGVkTWVudUl0ZW0gPSAwOwotICAgIG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlciA9
IDA7Ci0gICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nID0gIiI7Ci19Ci0KLWJvb2wgR3RrUG9wdXBN
ZW51Ojp0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICAvLyBJZiB3ZSB3
ZXJlIGdpdmVuIGEgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXIganVzdCBza2lwIGl0LgotICAgIGd1
bmljaGFyIHVuaWNvZGVDaGFyYWN0ZXIgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZXZlbnQtPmtl
eXZhbCk7Ci0gICAgaWYgKCFnX3VuaWNoYXJfaXNwcmludCh1bmljb2RlQ2hhcmFjdGVyKSkgewot
ICAgICAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgZ2xvbmcgY2hhcmFjdGVyc1dyaXR0ZW47Ci0gICAgR093blB0cjxndW5p
Y2hhcjI+IHV0ZjE2U3RyaW5nKGdfdWNzNF90b191dGYxNigmdW5pY29kZUNoYXJhY3RlciwgMSwg
MCwgJmNoYXJhY3RlcnNXcml0dGVuLCAwKSk7Ci0gICAgaWYgKCF1dGYxNlN0cmluZykgewotICAg
ICAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gSWYgdGhlIGNoYXJhY3RlciBpcyB0aGUgc2FtZSBhcyB0aGUgbGFzdCBj
aGFyYWN0ZXIsIHRoZSB1c2VyIGlzIHByb2JhYmx5IHRyeWluZyB0bwotICAgIC8vIGN5Y2xlIHRo
cm91Z2ggdGhlIG1lbnVsaXN0IGVudHJpZXMuIFRoaXMgbWF0Y2hlcyB0aGUgV2ViQ29yZSBiZWhh
dmlvciBmb3IgY29sbGFwc2VkCi0gICAgLy8gbWVudWxpc3RzLgotICAgIGJvb2wgcmVwZWF0aW5n
Q2hhcmFjdGVyID0gdW5pY29kZUNoYXJhY3RlciAhPSBtX3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0
ZXI7Ci0gICAgaWYgKGV2ZW50LT50aW1lIC0gbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wID4g
Z1NlYXJjaFRpbWVvdXRNcykKLSAgICAgICAgbV9jdXJyZW50U2VhcmNoU3RyaW5nID0gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPih1dGYxNlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNX
cml0dGVuKTsKLSAgICBlbHNlIGlmIChyZXBlYXRpbmdDaGFyYWN0ZXIpCi0gICAgICAgIG1fY3Vy
cmVudFNlYXJjaFN0cmluZy5hcHBlbmQoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPih1
dGYxNlN0cmluZy5nZXQoKSksIGNoYXJhY3RlcnNXcml0dGVuKSk7Ci0KLSAgICBtX3ByZXZpb3Vz
S2V5RXZlbnRUaW1lc3RhbXAgPSBldmVudC0+dGltZTsKLSAgICBtX3ByZXZpb3VzS2V5RXZlbnRD
aGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyOwotCi0gICAgLy8gTGlrZSB0aGUgQ2hyb21pdW0g
cG9ydCwgd2UgY2FzZSBmb2xkIGJlZm9yZSBzZWFyY2hpbmcsIGJlY2F1c2UgCi0gICAgLy8gc3Ry
bmNtcCBkb2VzIG5vdCBoYW5kbGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCi0gICAgR093blB0cjxn
Y2hhcj4gc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQoZ191dGY4X2Nhc2Vmb2xkKG1fY3VycmVu
dFNlYXJjaFN0cmluZy51dGY4KCkuZGF0YSgpLCAtMSkpOwotICAgIHNpemVfdCBwcmVmaXhMZW5n
dGggPSBzdHJsZW4oc2VhcmNoU3RyaW5nV2l0aENhc2VGb2xkZWQuZ2V0KCkpOwotCi0gICAgR0xp
c3QqIGNoaWxkcmVuID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUiht
X3BvcHVwLmdldCgpKSk7Ci0gICAgaWYgKCFjaGlsZHJlbikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBJZiBhIG1lbnUgaXRlbSBoYXMgYWxyZWFkeSBiZWVuIHNlbGVjdGVkLCBzdGFy
dCBzZWFyY2hpbmcgZnJvbSB0aGUgY3VycmVudAotICAgIC8vIGl0ZW0gZG93biB0aGUgbGlzdC4g
VGhpcyB3aWxsIG1ha2UgbXVsdGlwbGUga2V5IHByZXNzZXMgb2YgdGhlIHNhbWUgY2hhcmFjdGVy
Ci0gICAgLy8gYWR2YW5jZSB0aGUgc2VsZWN0aW9uLgotICAgIEdMaXN0KiBjdXJyZW50Q2hpbGQg
PSBjaGlsZHJlbjsKLSAgICBpZiAobV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKSB7Ci0gICAg
ICAgIGN1cnJlbnRDaGlsZCA9IGdfbGlzdF9maW5kKGNoaWxkcmVuLCBtX2N1cnJlbnRseVNlbGVj
dGVkTWVudUl0ZW0pOwotICAgICAgICBpZiAoIWN1cnJlbnRDaGlsZCkgewotICAgICAgICAgICAg
bV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0gMDsKLSAgICAgICAgICAgIGN1cnJlbnRDaGls
ZCA9IGNoaWxkcmVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVwZWF0aW5nIGNoYXJhY3Rl
cnMgc2hvdWxkIGl0ZXJhdGUuCi0gICAgICAgIGlmIChyZXBlYXRpbmdDaGFyYWN0ZXIpIHsKLSAg
ICAgICAgICAgIGlmIChHTGlzdCogbmV4dENoaWxkID0gZ19saXN0X25leHQoY3VycmVudENoaWxk
KSkKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBuZXh0Q2hpbGQ7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBHTGlzdCogZmlyc3RDaGlsZCA9IGN1cnJlbnRDaGlsZDsKLSAgICBkbyB7
Ci0gICAgICAgIGN1cnJlbnRDaGlsZCA9IGdfbGlzdF9uZXh0KGN1cnJlbnRDaGlsZCk7Ci0gICAg
ICAgIGlmICghY3VycmVudENoaWxkKQotICAgICAgICAgICAgY3VycmVudENoaWxkID0gY2hpbGRy
ZW47Ci0KLSAgICAgICAgR093blB0cjxnY2hhcj4gaXRlbVRleHQoZ191dGY4X2Nhc2Vmb2xkKGd0
a19tZW51X2l0ZW1fZ2V0X2xhYmVsKEdUS19NRU5VX0lURU0oY3VycmVudENoaWxkLT5kYXRhKSks
IC0xKSk7Ci0gICAgICAgIGlmICghc3RybmNtcChzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZC5n
ZXQoKSwgaXRlbVRleHQuZ2V0KCksIHByZWZpeExlbmd0aCkpIHsKLSAgICAgICAgICAgIGd0a19t
ZW51X3NoZWxsX3NlbGVjdF9pdGVtKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBHVEtf
V0lER0VUKGN1cnJlbnRDaGlsZC0+ZGF0YSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9IHdoaWxlIChjdXJyZW50Q2hpbGQgIT0gZmlyc3RDaGlsZCk7Ci0KLSAgICBnX2xp
c3RfZnJlZShjaGlsZHJlbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3RrUG9wdXBN
ZW51OjpzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qIGl0ZW0sIEd0a1BvcHVwTWVudSog
cG9wdXBNZW51KQotewotICAgIHBvcHVwTWVudS0+bV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVt
ID0gR1RLX1dJREdFVChpdGVtKTsKLX0KLQotZ2Jvb2xlYW4gR3RrUG9wdXBNZW51OjprZXlQcmVz
c0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCwgR3Rr
UG9wdXBNZW51KiBwb3B1cE1lbnUpCi17Ci0gICAgcmV0dXJuIHBvcHVwTWVudS0+dHlwZUFoZWFk
RmluZChldmVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggN2M2YWQ0NGY3ZGQxNjY0MGM0MmY1OWYyYmFiMDQwYjM2ZWY4MzczMC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrUG9wdXBNZW51LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0
a1BvcHVwTWVudV9oCi0jZGVmaW5lIEd0a1BvcHVwTWVudV9oCi0KLSNpbmNsdWRlICJHUmVmUHRy
R3RrLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5j
bHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3RrUG9wdXBNZW51IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHdGtQb3B1cE1lbnUpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R3RrUG9wdXBNZW51PiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHdGtQb3B1cE1lbnUoKSk7Ci0gICAgfQot
Ci0gICAgfkd0a1BvcHVwTWVudSgpOwotCi0gICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybU1lbnUoKSBj
b25zdCB7IHJldHVybiBtX3BvcHVwLmdldCgpOyB9Ci0gICAgdm9pZCBjbGVhcigpOwotICAgIHZv
aWQgYXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgdm9pZCBhcHBlbmRJdGVtKEd0a0FjdGlvbiopOwot
ICAgIHZvaWQgcG9wVXAoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFBvaW50JiwgaW50IGl0ZW1z
Q291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2ZW50Kik7Ci0gICAgdm9pZCBwb3BE
b3duKCk7Ci0KLXByaXZhdGU6Ci0gICAgR3RrUG9wdXBNZW51KCk7Ci0KLSAgICB2b2lkIHJlc2V0
VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgYm9vbCB0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5
Kik7Ci0KLSAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlbSosIEd0
a1BvcHVwTWVudSopOwotICAgIHN0YXRpYyB2b2lkIG1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01l
bnUqLCBnaW50KiwgZ2ludCosIGdib29sZWFuKiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGlj
IHZvaWQgbWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiwgR3RrUG9wdXBNZW51Kik7Ci0gICAgc3Rh
dGljIHZvaWQgc2VsZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiwgR3RrUG9wdXBNZW51Kik7
Ci0gICAgc3RhdGljIGdib29sZWFuIGtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBH
ZGtFdmVudEtleSosIEd0a1BvcHVwTWVudSopOwotCi0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1f
cG9wdXA7Ci0gICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247Ci0gICAgU3RyaW5nIG1fY3VycmVu
dFNlYXJjaFN0cmluZzsKLSAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXA7
Ci0gICAgdW5zaWduZWQgaW50IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKLSAgICBHdGtX
aWRnZXQqIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbTsKLSAgICB1bnNpZ25lZCBpbnQgbV9r
ZXlQcmVzc0hhbmRsZXJJRDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEd0a1BvcHVwTWVudV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjOThiNWJhMzYyODRkOGMxNzlhZGY0MWNkNDYyMGUzOWRlZGE5
ODBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHdGtVdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFBvaW50IGNvbnZlcnRXaWRn
ZXRQb2ludFRvU2NyZWVuUG9pbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFBvaW50JiBw
b2ludCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhY3R1YWxseSBhIHZlcnkgdHJpY2t5IG9w
ZXJhdGlvbiBhbmQgdGhlIHJlc3VsdHMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQKLSAgICAvLyBv
bmx5IGJlIHRob3VnaHQgb2YgYXMgYSBndWVzcy4gRm9yIGluc3RhbmNlLCBzb21ldGltZXMgaXQg
bWF5IG5vdCBjb3JyZWN0bHkgdGFrZSBpbnRvCi0gICAgLy8gYWNjb3VudCB3aW5kb3cgZGVjb3Jh
dGlvbnMuCi0KLSAgICBHdGtXaWRnZXQqIHRvcGxldmVsV2lkZ2V0ID0gZ3RrX3dpZGdldF9nZXRf
dG9wbGV2ZWwod2lkZ2V0KTsKLSAgICBpZiAoIXRvcGxldmVsV2lkZ2V0IHx8ICFndGtfd2lkZ2V0
X2lzX3RvcGxldmVsKHRvcGxldmVsV2lkZ2V0KSB8fCAhR1RLX0lTX1dJTkRPVyh0b3BsZXZlbFdp
ZGdldCkpCi0gICAgICAgIHJldHVybiBwb2ludDsKLQotICAgIEdka1dpbmRvdyogZ2RrV2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHRvcGxldmVsV2lkZ2V0KTsKLSAgICBpZiAoIWdka1dp
bmRvdykKLSAgICAgICAgcmV0dXJuIHBvaW50OwotCi0gICAgaW50IHhJbldpbmRvdywgeUluV2lu
ZG93OwotICAgIGd0a193aWRnZXRfdHJhbnNsYXRlX2Nvb3JkaW5hdGVzKHdpZGdldCwgdG9wbGV2
ZWxXaWRnZXQsIHBvaW50LngoKSwgcG9pbnQueSgpLCAmeEluV2luZG93LCAmeUluV2luZG93KTsK
LQotICAgIGludCB3aW5kb3dPcmlnaW5YLCB3aW5kb3dPcmlnaW5ZOwotICAgIGdka193aW5kb3df
Z2V0X29yaWdpbihnZGtXaW5kb3csICZ3aW5kb3dPcmlnaW5YLCAmd2luZG93T3JpZ2luWSk7Ci0K
LSAgICByZXR1cm4gSW50UG9pbnQod2luZG93T3JpZ2luWCArIHhJbldpbmRvdywgd2luZG93T3Jp
Z2luWSArIHlJbldpbmRvdyk7Ci19Ci0KLWJvb2wgd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2lu
ZG93KEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2lzX3RvcGxl
dmVsKHdpZGdldCkgJiYgR1RLX0lTX1dJTkRPVyh3aWRnZXQpICYmICFHVEtfSVNfT0ZGU0NSRUVO
X1dJTkRPVyh3aWRnZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI5YmRkZTY1OThmMDJkMzM1N2EwMGE3MTMzODk2YmFjNTRjMmRhMmIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBHdGtVdGlsaXRpZXNfaCAKLSNkZWZpbmUgR3Rr
VXRpbGl0aWVzX2ggCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50UG9pbnQ7Ci0K
LUludFBvaW50IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQoR3RrV2lkZ2V0KiwgY29u
c3QgSW50UG9pbnQmKTsKLWJvb2wgd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KEd0a1dp
ZGdldCopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHdGtVdGlsaXRp
ZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuYyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMmY4NGMyZWY4ODY2YzAzYzA2ZjE2ZGMyMTU5ZmZl
YTk5N2NkYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYworKysgL2Rldi9udWxs
CkBAIC0xLDM4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBM
dGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJHdGtWZXJzaW9uaW5nLmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLSNpZmRlZiBH
REtfV0lORE9XSU5HX1gxMQotI2luY2x1ZGUgPFgxMS9YYXRvbS5oPgotI2luY2x1ZGUgPGdkay9n
ZGt4Lmg+Ci0jZW5kaWYKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKLXZvaWQg
Z3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1lbnQqIGFkanVzbWVudCwgZ2RvdWJs
ZSB2YWx1ZSkKLXsKLSAgICAgICAgbV9hZGp1c3RtZW50LT52YWx1ZSA9IG1fY3VycmVudFBvczsK
LSAgICAgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChtX2FkanVzdG1lbnQpOwotfQot
Ci12b2lkIGd0a19hZGp1c3RtZW50X2NvbmZpZ3VyZShHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50
LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxvd2VyLCBnZG91YmxlIHVwcGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwSW5jcmVtZW50LCBnZG91YmxlIHBhZ2VJ
bmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUpCi17Ci0gICAgZ19vYmplY3RfZnJlZXplX25vdGlm
eShHX09CSkVDVChhZGp1c3RtZW50KSk7Ci0KLSAgICBnX29iamVjdF9zZXQoYWRqdXN0bWVudCwK
LSAgICAgICAgICAgICAgICAgImxvd2VyIiwgbG93ZXIsCi0gICAgICAgICAgICAgICAgICJ1cHBl
ciIsIHVwcGVyLAotICAgICAgICAgICAgICAgICAic3RlcC1pbmNyZW1lbnQiLCBzdGVwSW5jcmVt
ZW50LAotICAgICAgICAgICAgICAgICAicGFnZS1pbmNyZW1lbnQiLCBwYWdlSW5jcmVtZW50LAot
ICAgICAgICAgICAgICAgICAicGFnZS1zaXplIiwgcGFnZVNpemUsCi0gICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgZ19vYmplY3RfdGhhd19ub3RpZnkoR19PQkpFQ1QoYWRqdXN0bWVudCkp
OwotCi0gICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGp1c3RtZW50KTsKLSAgICBndGtfYWRq
dXN0bWVudF92YWx1ZV9jaGFuZ2VkKGFkanVzdG1lbnQpOwotfQotI2VuZGlmCi0KLUdka0Rldmlj
ZSAqZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2luZG93KiB3aW5kb3cpCi17Ci0jaWZu
ZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrRGV2aWNlTWFuYWdlciAqbWFuYWdlciA9ICBn
ZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dpbmRvd19nZXRfZGlzcGxheSh3aW5k
b3cpKTsKLSAgICByZXR1cm4gZ2RrX2RldmljZV9tYW5hZ2VyX2dldF9jbGllbnRfcG9pbnRlciht
YW5hZ2VyKTsKLSNlbHNlCi0gICAgcmV0dXJuIGdka19kZXZpY2VfZ2V0X2NvcmVfcG9pbnRlcigp
OwotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi19Ci0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMTcsIDMpCi12b2lkIGdka193aW5kb3dfZ2V0X3Jvb3RfY29vcmRzKEdka1dpbmRvdyog
d2luZG93LCBnaW50IHgsIGdpbnQgeSwgZ2ludCogcm9vdFgsIGdpbnQqIHJvb3RZKQotewotICAg
IGdka193aW5kb3dfZ2V0X3Jvb3Rfb3JpZ2luKHdpbmRvdywgcm9vdFgsIHJvb3RZKTsKLSAgICAq
cm9vdFggPSAqcm9vdFggKyB4OwotICAgICpyb290WSA9ICpyb290WSArIHk7Ci19Ci0jZW5kaWYK
LQotR2RrQ3Vyc29yICogYmxhbmtDdXJzb3IoKQotewotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIs
IDE2LCAwKQotICAgIHJldHVybiBnZGtfY3Vyc29yX25ldyhHREtfQkxBTktfQ1VSU09SKTsKLSNl
bHNlCi0gICAgR2RrQ3Vyc29yICogY3Vyc29yOwotICAgIEdka1BpeG1hcCAqIHNvdXJjZTsKLSAg
ICBHZGtQaXhtYXAgKiBtYXNrOwotICAgIEdka0NvbG9yIGZvcmVncm91bmQgPSB7IDAsIDY1NTM1
LCAwLCAwIH07IC8vIFJlZC4KLSAgICBHZGtDb2xvciBiYWNrZ3JvdW5kID0geyAwLCAwLCAwLCA2
NTUzNSB9OyAvLyBCbHVlLgotICAgIHN0YXRpYyBnY2hhciBjdXJzb3JCaXRzW10gPSB7MHgwLCAw
eDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDB9OwotCi0gICAgc291cmNlID0gZ2RrX2Jp
dG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMsIDgsIDgpOwotICAgIG1hc2sgPSBn
ZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29yQml0cywgOCwgOCk7Ci0gICAgY3Vy
c29yID0gZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhtYXAoc291cmNlLCBtYXNrLCAmZm9yZWdyb3Vu
ZCwgJmJhY2tncm91bmQsIDgsIDgpOwotICAgIGdka19waXhtYXBfdW5yZWYoc291cmNlKTsKLSAg
ICBnZGtfcGl4bWFwX3VucmVmKG1hc2spOwotICAgIHJldHVybiBjdXJzb3I7Ci0jZW5kaWYgLy8g
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi19Ci0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMTYsIDApCi1jb25zdCBnY2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0
ZW0qIG1lbnVJdGVtKQotewotICAgIEd0a1dpZGdldCAqIGxhYmVsID0gZ3RrX2Jpbl9nZXRfY2hp
bGQoR1RLX0JJTihtZW51SXRlbSkpOwotICAgIGlmIChHVEtfSVNfTEFCRUwobGFiZWwpKQotICAg
ICAgICByZXR1cm4gZ3RrX2xhYmVsX2dldF90ZXh0KEdUS19MQUJFTChsYWJlbCkpOwotICAgIHJl
dHVybiAwOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotCi0jaWZk
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBjYWlyb19mb3JtYXRfdAotZ2RrX2NhaXJvX2Zv
cm1hdF9mb3JfY29udGVudChjYWlyb19jb250ZW50X3QgY29udGVudCkKLXsKLSAgICBzd2l0Y2gg
KGNvbnRlbnQpIHsKLSAgICBjYXNlIENBSVJPX0NPTlRFTlRfQ09MT1I6Ci0gICAgICAgIHJldHVy
biBDQUlST19GT1JNQVRfUkdCMjQ7Ci0gICAgY2FzZSBDQUlST19DT05URU5UX0FMUEhBOgotICAg
ICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0E4OwotICAgIGNhc2UgQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0FSR0Iz
MjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBjYWlyb19zdXJmYWNlX3QqCi1nZGtfY2Fpcm9fc3VyZmFj
ZV9jb2VyY2VfdG9faW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaGVpZ2h0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdCAqIGNvcHk7
Ci0gICAgY2Fpcm9fdCAqIGNyOwotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3Vy
ZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZh
Y2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gY29udGVudAotICAgICAgICAmJiBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSA+PSB3aWR0aAotICAgICAgICAmJiBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkgPj0gaGVpZ2h0KQotICAgICAgICByZXR1
cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7Ci0KLSAgICBjb3B5ID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGUoZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChjb250ZW50
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7Ci0KLSAgICBjciA9IGNhaXJv
X2NyZWF0ZShjb3B5KTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzdXJmYWNlLCAwLCAw
KTsKLSAgICBjYWlyb19wYWludChjcik7Ci0gICAgY2Fpcm9fZGVzdHJveShjcik7Ci0KLSAgICBy
ZXR1cm4gY29weTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnZlcnRfYWxwaGEoZ3VjaGFyICogZGVz
dERhdGEsIGludCBkZXN0U3RyaWRlLAotICAgICAgICAgICAgICBndWNoYXIgKiBzcmNEYXRhLCBp
bnQgc3JjU3RyaWRlLAotICAgICAgICAgICAgICBpbnQgc3JjWCwgaW50IHNyY1ksIGludCB3aWR0
aCwgaW50IGhlaWdodCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIHNyY0RhdGEgKz0gc3JjU3Ry
aWRlICogc3JjWSArIHNyY1kgKiA0OwotCi0gICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KSB7Ci0gICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBzcmNEYXRhOwotCi0gICAg
ICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgICBndWludCBhbHBo
YSA9IHNyY1t4XSA+PiAyNDsKLQotICAgICAgICAgICAgaWYgKCFhbHBoYSkgewotICAgICAgICAg
ICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAwOwotICAgICAgICAgICAgICAgIGRlc3REYXRh
W3ggKiA0ICsgMV0gPSAwOwotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMl0gPSAw
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCAr
IDBdID0gKCgoc3JjW3hdICYgMHhmZjAwMDApID4+IDE2KSAqIDI1NSArIGFscGhhIC8gMikgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDFdID0gKCgoc3JjW3hdICYg
MHgwMGZmMDApID4+ICA4KSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0gKCgoc3JjW3hdICYgMHgwMDAwZmYpID4+ICAwKSAq
IDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl
c3REYXRhW3ggKiA0ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotCi0gICAgICAgIHNyY0RhdGEg
Kz0gc3JjU3RyaWRlOwotICAgICAgICBkZXN0RGF0YSArPSBkZXN0U3RyaWRlOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQKLWNvbnZlcnRfbm9fYWxwaGEoZ3VjaGFyICogZGVzdERhdGEsIGludCBk
ZXN0U3RyaWRlLCBndWNoYXIgKiBzcmNEYXRhLAotICAgICAgICAgICAgICAgICBpbnQgc3JjU3Ry
aWRlLCBpbnQgc3JjWCwgaW50IHNyY1ksCi0gICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50
IGhlaWdodCkKLXsKLSAgICBpbnQgeCwgeTsKLQotICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlICog
c3JjWSArIHNyY1ggKiA0OwotCi0gICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0g
ICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBzcmNEYXRhOwotCi0gICAgICAgIGZv
ciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgICBkZXN0RGF0YVt4ICogMyAr
IDBdID0gc3JjW3hdID4+IDE2OwotICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMgKyAxXSA9IHNy
Y1t4XSA+PiAgODsKLSAgICAgICAgICAgIGRlc3REYXRhW3ggKiAzICsgMl0gPSBzcmNbeF07Ci0g
ICAgICAgIH0KLQotICAgICAgICBzcmNEYXRhICs9IHNyY1N0cmlkZTsKLSAgICAgICAgZGVzdERh
dGEgKz0gZGVzdFN0cmlkZTsKLSAgICB9Ci19Ci0KLS8qKgotICogZ2RrX3BpeGJ1Zl9nZXRfZnJv
bV9zdXJmYWNlOgotICogQHN1cmZhY2U6IHN1cmZhY2UgdG8gY29weSBmcm9tCi0gKiBAc3JjX3g6
IFNvdXJjZSBYIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCi0gKiBAc3JjX3k6IFNvdXJjZSBZ
IGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCi0gKiBAd2lkdGg6IFdpZHRoIGluIHBpeGVscyBv
ZiByZWdpb24gdG8gZ2V0Ci0gKiBAaGVpZ2h0OiBIZWlnaHQgaW4gcGl4ZWxzIG9mIHJlZ2lvbiB0
byBnZXQKLSAqCi0gKiBUcmFuc2ZlcnMgaW1hZ2UgZGF0YSBmcm9tIGEgI2NhaXJvX3N1cmZhY2Vf
dCBhbmQgY29udmVydHMgaXQgdG8gYW4gUkdCKEEpCi0gKiByZXByZXNlbnRhdGlvbiBpbnNpZGUg
YSAjR2RrUGl4YnVmLiBUaGlzIGFsbG93cyB5b3UgdG8gZWZmaWNpZW50bHkgcmVhZAotICogaW5k
aXZpZHVhbCBwaXhlbHMgZnJvbSBjYWlybyBzdXJmYWNlcy4gRm9yICNHZGtXaW5kb3dzLCB1c2UK
LSAqIGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KCkgaW5zdGVhZC4KLSAqCi0gKiBUaGlzIGZ1
bmN0aW9uIHdpbGwgY3JlYXRlIGFuIFJHQiBwaXhidWYgd2l0aCA4IGJpdHMgcGVyIGNoYW5uZWwu
IFRoZSBwaXhidWYKLSAqIHdpbGwgY29udGFpbiBhbiBhbHBoYSBjaGFubmVsIGlmIHRoZSBAc3Vy
ZmFjZSBjb250YWlucyBvbmUuCi0gKgotICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgZnVsbCk6
IEEgbmV3bHktY3JlYXRlZCBwaXhidWYgd2l0aCBhIHJlZmVyZW5jZSBjb3VudAotICogb2YgMSwg
b3IgJU5VTEwgb24gZXJyb3IKLSAqKi8KLUdka1BpeGJ1ZioKLWdka19waXhidWZfZ2V0X2Zyb21f
c3VyZmFjZShjYWlyb19zdXJmYWNlX3QgKiBzdXJmYWNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fY29udGVudF90IGNvbnRlbnQ7Ci0g
ICAgR2RrUGl4YnVmICogZGVzdDsKLQotICAgIC8qIEdlbmVyYWwgc2FuaXR5IGNoZWNrcyAqLwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN1cmZhY2UsIE5VTEwpOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNyY1ggPj0gMCAmJiBzcmNZID49IDAsIE5VTEwpOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBOVUxMKTsKLQotICAgIGNvbnRlbnQg
PSBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpIHwgQ0FJUk9fQ09OVEVOVF9DT0xP
UjsKLSAgICBkZXN0ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0VfUkdCLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAhIShjb250ZW50ICYgQ0FJUk9fQ09OVEVOVF9BTFBIQSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLCBoZWlnaHQpOwotCi0gICAgc3VyZmFjZSA9IGdka19jYWlyb19zdXJmYWNlX2NvZXJjZV90
b19pbWFnZShzdXJmYWNlLCBjb250ZW50LCBzcmNYICsgd2lkdGgsIHNyY1kgKyBoZWlnaHQpOwot
ICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKHN1cmZhY2UpIHx8ICFkZXN0KSB7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShzdXJmYWNlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKGdka19w
aXhidWZfZ2V0X2hhc19hbHBoYShkZXN0KSkKLSAgICAgICAgY29udmVydF9hbHBoYShnZGtfcGl4
YnVmX2dldF9waXhlbHMoZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAgIGdka19waXhidWZf
Z2V0X3Jvd3N0cmlkZShkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAg
ICBzcmNYLCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBlbHNlCi0gICAgICAgIGNvbnZlcnRfbm9fYWxwaGEoZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzKGRl
c3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUo
ZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jj
WCwgc3JjWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7Ci0KLSAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Ci0gICAgcmV0dXJuIGRlc3Q7Ci19Ci0K
LSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKLXZvaWQgZ2V0R2RrRHJhd2FibGVTaXpl
KEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQpCi17Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChHREtfSVNfUElYTUFQKGRyYXdhYmxlKSB8fCBHREtfSVNfV0lORE9X
KGRyYXdhYmxlKSk7Ci0KLSAgICBpZiAoR0RLX0lTX1BJWE1BUChkcmF3YWJsZSkpIHsKLSAgICAg
ICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShHREtfUElYTUFQKGRyYXdhYmxlKSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHZGtXaW5kb3cgKndpbmRvdyA9IEdE
S19XSU5ET1coZHJhd2FibGUpOwotICAgICp3aWR0aCA9IGdka193aW5kb3dfZ2V0X3dpZHRoKHdp
bmRvdyk7Ci0gICAgKmhlaWdodCA9IGdka193aW5kb3dfZ2V0X2hlaWdodCh3aW5kb3cpOwotfQot
I2Vsc2UKLXZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50
ICp3aWR0aCwgaW50ICpoZWlnaHQpCi17Ci0gICAgZ2RrX2RyYXdhYmxlX2dldF9zaXplKGRyYXdh
YmxlLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAy
NCwgMCkKLQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpZiAhR0xJQl9DSEVDS19W
RVJTSU9OKDIsIDI3LCAxKQotZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11bGF0b3JfZmlyc3Rfd2lu
cyhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKmludm9jYXRpb25IaW50LCBHVmFsdWUgKnJldHVybkFj
Y3VtdWxhdG9yLCBjb25zdCBHVmFsdWUgKmhhbmRsZXJSZXR1cm4sIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgZ192YWx1ZV9jb3B5KGhhbmRsZXJSZXR1cm4sIHJldHVybkFjY3VtdWxhdG9yKTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0jZW5kaWYKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAy
MiwgMCkKLWNhaXJvX3N1cmZhY2VfdCAqZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNl
KEdka1dpbmRvdyAqd2luZG93LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGNhaXJvX3QgKmNhaXJvQ29udGV4dCA9IGdka19jYWlyb19jcmVh
dGUod2luZG93KTsKLSAgICBjYWlyb19zdXJmYWNlX3QgKmNhaXJvU3VyZmFjZSA9IGNhaXJvX2dl
dF90YXJnZXQoY2Fpcm9Db250ZXh0KTsKLSAgICBjYWlyb19zdXJmYWNlX3QgKm5ld1N1cmZhY2Ug
PSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFyKGNhaXJvU3VyZmFjZSwgY29udGVudCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgY2Fpcm9fZGVzdHJveShjYWlyb0NvbnRleHQpOwotICAgIHJldHVy
biBuZXdTdXJmYWNlOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQot
Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCi0jaWZkZWYgR0RLX1dJTkRPV0lOR19Y
MTEKLXN0YXRpYyBpbnQgZ2V0U2NyZWVuQ3VycmVudERlc2t0b3AoR2RrU2NyZWVuICpzY3JlZW4p
Ci17Ci0gICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19zY3Jl
ZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7Ci0gICAgV2luZG93IHJvb3RXaW5kb3cgPSBYUm9vdFdp
bmRvdyhkaXNwbGF5LCBHREtfU0NSRUVOX1hOVU1CRVIoc2NyZWVuKSk7Ci0gICAgQXRvbSBjdXJy
ZW50RGVza3RvcCA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX0NVUlJFTlRfREVTS1RPUCIs
IFRydWUpOwotCi0gICAgQXRvbSB0eXBlOwotICAgIGludCBmb3JtYXQ7Ci0gICAgdW5zaWduZWQg
bG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOwotICAgIHVuc2lnbmVkIGNoYXIgKnJldHVybmVk
RGF0YSA9IE5VTEw7Ci0gICAgWEdldFdpbmRvd1Byb3BlcnR5KGRpc3BsYXksIHJvb3RXaW5kb3cs
IGN1cnJlbnREZXNrdG9wLCAwLCBHX01BWExPTkcsIEZhbHNlLCBYQV9DQVJESU5BTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZpdGVtc0NvdW50LCAmYnl0ZXNBZnRl
ciwgJnJldHVybmVkRGF0YSk7Ci0KLSAgICBpbnQgd29ya3NwYWNlID0gMDsKLSAgICBpZiAodHlw
ZSA9PSBYQV9DQVJESU5BTCAmJiBmb3JtYXQgPT0gMzIgJiYgaXRlbXNDb3VudCA+IDApCi0gICAg
ICAgIHdvcmtzcGFjZSA9IChpbnQpcmV0dXJuZWREYXRhWzBdOwotCi0gICAgaWYgKHJldHVybmVk
RGF0YSkKLSAgICAgICAgWEZyZWUocmV0dXJuZWREYXRhKTsKLQotICAgIHJldHVybiB3b3Jrc3Bh
Y2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldFNjcmVlbldvcmtBcmVhKEdka1NjcmVlbiAqc2NyZWVu
LCBHZGtSZWN0YW5nbGUgKmFyZWEpCi17Ci0gICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7Ci0gICAgQXRvbSB3
b3JrQXJlYSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVUX1dPUktBUkVBIiwgVHJ1ZSk7Ci0K
LSAgICAvKiBEZWZhdWx0cyBpbiBjYXNlIG9mIGVycm9yLiAqLwotICAgIGFyZWEtPnggPSAwOwot
ICAgIGFyZWEtPnkgPSAwOwotICAgIGFyZWEtPndpZHRoID0gZ2RrX3NjcmVlbl9nZXRfd2lkdGgo
c2NyZWVuKTsKLSAgICBhcmVhLT5oZWlnaHQgPSBnZGtfc2NyZWVuX2dldF9oZWlnaHQoc2NyZWVu
KTsKLQotICAgIGlmICh3b3JrQXJlYSA9PSBOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBX
aW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3BsYXksIEdES19TQ1JFRU5fWE5VTUJF
UihzY3JlZW4pKTsKLSAgICBBdG9tIHR5cGU7Ci0gICAgaW50IGZvcm1hdDsKLSAgICB1bnNpZ25l
ZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7Ci0gICAgdW5zaWduZWQgY2hhciAqcmV0dXJu
ZWREYXRhID0gMDsKLSAgICBpbnQgcmVzdWx0ID0gWEdldFdpbmRvd1Byb3BlcnR5KGRpc3BsYXks
IHJvb3RXaW5kb3csIHdvcmtBcmVhLCAwLCA0ICogMzIgLyogTWF4IGxlbmd0aCAqLywgRmFsc2Us
IEFueVByb3BlcnR5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0
eXBlLCAmZm9ybWF0LCAmaXRlbXNDb3VudCwgJmJ5dGVzQWZ0ZXIsICZyZXR1cm5lZERhdGEpOwot
ICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcyB8fCB0eXBlID09IE5vbmUgfHwgIWZvcm1hdCB8fCBi
eXRlc0FmdGVyIHx8IGl0ZW1zQ291bnQgJSA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
ZGVza3RvcCA9IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKHNjcmVlbik7Ci0gICAgbG9uZyAqd29y
a0FyZWFzID0gKGxvbmcgKilyZXR1cm5lZERhdGE7Ci0gICAgYXJlYS0+eCA9IHdvcmtBcmVhc1tk
ZXNrdG9wICogNF07Ci0gICAgYXJlYS0+eSA9IHdvcmtBcmVhc1tkZXNrdG9wICogNCArIDFdOwot
ICAgIGFyZWEtPndpZHRoID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMl07Ci0gICAgYXJlYS0+
aGVpZ2h0ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgM107Ci0KLSAgICBYRnJlZShyZXR1cm5l
ZERhdGEpOwotfQotI2VuZGlmIC8vIEdES19XSU5ET1dJTkdfWDExCi0KLXZvaWQgZ2RrX3NjcmVl
bl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKnNjcmVlbiwgaW50IG1vbml0b3IsIEdk
a1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5
KHNjcmVlbiwgbW9uaXRvciwgYXJlYSk7Ci0KLSNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQotICAg
IEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKLSAgICBnZXRTY3JlZW5Xb3JrQXJlYShzY3JlZW4sICZ3
b3JrQXJlYSk7Ci0gICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNlY3QoJndvcmtBcmVhLCBhcmVhLCBh
cmVhKTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzAzOWVlMmRjMGE1NDQxMGFhODdkZTFjNjRmYmM2ZGM0NDUyODdm
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtW
ZXJzaW9uaW5nX2gKLSNkZWZpbmUgR3RrVmVyc2lvbmluZ19oCi0KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3lt
cy1jb21wYXQuaD4KLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8vIE1hY3JvcyB0byBhdm9p
ZCBkZXByZWNhdGlvbiBjaGVja2luZyBjaHVybgotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgot
I2RlZmluZSBHREtfV0lORE9XX1hXSU5ET1cod2luZG93KSAoZ2RrX3gxMV93aW5kb3dfZ2V0X3hp
ZCh3aW5kb3cpKQotI2Vsc2UKLUdka1BpeGJ1ZiogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNl
KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgaW50IHNyY1gsIGludCBzcmNZLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLXZv
aWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgaW50KiB3aWR0aCwg
aW50KiBoZWlnaHQpOwotI2VuZGlmCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQp
Ci0jZGVmaW5lIGdka19waXhtYXBfZ2V0X3NpemUgZ2RrX2RyYXdhYmxlX2dldF9zaXplCi0jZW5k
aWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjMsIDQpCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMjMsIDApCi0jZGVmaW5lIGdka193aW5kb3dfZ2V0X2Rpc3BsYXkod2luZG93KSBnZGtf
ZHJhd2FibGVfZ2V0X2Rpc3BsYXkod2luZG93KQotI2RlZmluZSBnZGtfd2luZG93X2dldF92aXN1
YWwgZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAyMywgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLWNhaXJvX3N1cmZh
Y2VfdCogZ2RrX3dpbmRvd19jcmVhdGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRvdyogd2luZG93
LCBjYWlyb19jb250ZW50X3QgY29udGVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSNlbmRp
ZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAyMSwgMikKLSNkZWZpbmUgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgodmlzdWFsKSAodmlzdWFs
KS0+ZGVwdGgKLSNkZWZpbmUgZ2RrX3Zpc3VhbF9nZXRfYml0c19wZXJfcmdiKHZpc3VhbCkgKHZp
c3VhbCktPmJpdHNfcGVyX3JnYgotI2RlZmluZSBnZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3Rl
ZF9hY3Rpb24oY29udGV4dCkgKGNvbnRleHQpLT5hY3Rpb24KLSNkZWZpbmUgZ2RrX2RyYWdfY29u
dGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSAoY29udGV4dCktPmFjdGlvbnMKLSNlbmRpZiAvLyBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMikKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAy
MCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lER0VU
X1JFQUxJWkVEKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0
LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9GTEFHUygod2lkZ2V0KSwgR1RLX1JFQUxJWkVEKQotI2Rl
ZmluZSBndGtfcmFuZ2VfZ2V0X21pbl9zbGlkZXJfc2l6ZShyYW5nZSkgKHJhbmdlKS0+bWluX3Ns
aWRlcl9zaXplCi0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAsIDApCi0KLSNpZiAh
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMTksIDApCi0jZGVmaW5lIGd0a193aWRnZXRfaXNfdG9wbGV2
ZWwod2lkZ2V0KSBHVEtfV0lER0VUX1RPUExFVkVMKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdl
dF9nZXRfcmVhbGl6ZWQod2lkZ2V0KSBHVEtfV0lER0VUX1JFQUxJWkVEKHdpZGdldCkKLSNkZWZp
bmUgZ3RrX3dpZGdldF9nZXRfaGFzX3dpbmRvdyh3aWRnZXQpICFHVEtfV0lER0VUX05PX1dJTkRP
Vyh3aWRnZXQpCi0jZGVmaW5lIGd0a193aWRnZXRfZ2V0X2Nhbl9mb2N1cyh3aWRnZXQpIEdUS19X
SURHRVRfQ0FOX0ZPQ1VTKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9pc19zZW5zaXRpdmUo
d2lkZ2V0KSBHVEtfV0lER0VUX0lTX1NFTlNJVElWRSh3aWRnZXQpCi0jZW5kaWYgLy8gR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTksIDApCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDAp
Ci0jZGVmaW5lIGd0a193aWRnZXRfc2V0X3Zpc2libGUod2lkZ2V0LCBGQUxTRSkgR1RLX1dJREdF
VF9VTlNFVF9GTEFHUygod2lkZ2V0KSwgR1RLX1ZJU0lCTEUpCi0jZGVmaW5lIGd0a193aWRnZXRf
Z2V0X3Zpc2libGUod2lkZ2V0KSAoR1RLX1dJREdFVF9GTEFHUyh3aWRnZXQpICYgR1RLX1ZJU0lC
TEUpCi0KLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgbmV3X3dpbmRvdykg
KHdpZGdldCktPndpbmRvdyA9IChuZXdfd2luZG93KQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF9j
YW5fZm9jdXMod2lkZ2V0LCBUUlVFKSBHVEtfV0lER0VUX1NFVF9GTEFHUygod2lkZ2V0KSwgR1RL
X0NBTl9GT0NVUykKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFs
bG9jKSAoKihhbGxvYykgPSAod2lkZ2V0KS0+YWxsb2NhdGlvbikKLSNkZWZpbmUgZ3RrX3dpZGdl
dF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsIGFsbG9jKSAoKHdpZGdldCktPmFsbG9jYXRpb24gPSAq
KGFsbG9jKSkKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKLQotI2lmICFH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxNywgMykKLXZvaWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29y
ZHMoR2RrV2luZG93KiB3aW5kb3csIGdpbnQgeCwgZ2ludCB5LCBnaW50KiByb290WCwgZ2ludCog
cm9vdFkpOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQotCi0jaWYgIUdU
S19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQotY29uc3QgZ2NoYXIqIGd0a19tZW51X2l0ZW1fZ2V0
X2xhYmVsKEd0a01lbnVJdGVtKik7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYs
IDApCi0KLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKLSNkZWZpbmUgZ3RrX3dp
ZGdldF9nZXRfd2luZG93KHdpZGdldCkgKHdpZGdldCktPndpbmRvdwotI2RlZmluZSBndGtfYWRq
dXN0bWVudF9nZXRfdmFsdWUoYWRqKSAoYWRqKS0+dmFsdWUKLSNkZWZpbmUgZ3RrX2RpYWxvZ19n
ZXRfY29udGVudF9hcmVhKGRpYWxvZykgKGRpYWxvZyktPnZib3gKLSNkZWZpbmUgZ3RrX2RpYWxv
Z19nZXRfYWN0aW9uX2FyZWEoZGlhbG9nKSAoZGlhbG9nKS0+YWN0aW9uX2FyZWEKLSNkZWZpbmUg
Z3RrX3NlbGVjdGlvbl9kYXRhX2dldF9sZW5ndGgoZGF0YSkgKGRhdGEpLT5sZW5ndGgKLSNkZWZp
bmUgZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEpIChkYXRhKS0+ZGF0YQotI2RlZmlu
ZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3RhcmdldChkYXRhKSAoZGF0YSktPnRhcmdldAotI2Rl
ZmluZSBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXplKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+
cGFnZV9zaXplID0gbmV3VmFsdWUpCi0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShh
ZGosIG5ld1ZhbHVlKSAoKGFkaiktPnZhbHVlID0gbmV3VmFsdWUpCi0jZGVmaW5lIGd0a19hZGp1
c3RtZW50X3NldF9sb3dlcihhZGosIG5ld1ZhbHVlKSAoKGFkaiktPmxvd2VyID0gbmV3VmFsdWUp
Ci0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF91cHBlcihhZGosIG5ld1ZhbHVlKSAoKGFkaikt
PnVwcGVyID0gbmV3VmFsdWUpCi0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfY29uZmlndXJlKEd0a0Fk
anVzdG1lbnQqIGFkanVzdG1lbnQsIGdkb3VibGUgdmFsdWUsIGdkb3VibGUgbG93ZXIsIGdkb3Vi
bGUgdXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXBJbmNy
ZW1lbnQsIGdkb3VibGUgcGFnZUluY3JlbWVudCwgZ2RvdWJsZSBwYWdlU2l6ZSk7Ci0KLXZvaWQg
Z3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1lbnQqIGFkanVzbWVudCwgZ2RvdWJs
ZSB2YWx1ZSk7Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTQsIDApCi0KLUdka0Rl
dmljZSogZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2luZG93KiB3aW5kb3cpOwotR2Rr
Q3Vyc29yKiBibGFua0N1cnNvcigpOwotCi0jaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyNywg
MSkKLWdib29sZWFuIGdfc2lnbmFsX2FjY3VtdWxhdG9yX2ZpcnN0X3dpbnMoR1NpZ25hbEludm9j
YXRpb25IaW50KiBpbnZvY2F0aW9uSGludCwgR1ZhbHVlKiByZXR1cm5BY2N1bXVsYXRvciwgY29u
c3QgR1ZhbHVlKiBoYW5kbGVyUmV0dXJuLCBncG9pbnRlciBkYXRhKTsKLSNlbmRpZgotCi0jaWYg
IUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCi12b2lkIGdka19zY3JlZW5fZ2V0X21vbml0b3Jf
d29ya2FyZWEoR2RrU2NyZWVuICosIGludCBtb25pdG9yLCBHZGtSZWN0YW5nbGUgKmFyZWEpOwot
I2VuZGlmCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvLyBHdGtWZXJzaW9uaW5nX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVY
MTEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9y
ZVgxMS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMzc2YmM3NzE0YjM5NTQ5
MDAxMmI5Nzc5NmExOTk3ZmNhM2MwY2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tp
bmdTdG9yZVgxMS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXaWRnZXRCYWNraW5nU3RvcmUu
aCIKLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgotI2luY2x1
ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka3guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLQotcHVibGljOgotICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLSAgICBQaXhtYXAg
bV9waXhtYXA7Ci0gICAgR0MgbV9nYzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1
cmZhY2U7Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRl
PiBjcmVhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUod2lk
Z2V0LCBzaXplKSk7Ci0gICAgfQotCi0gICAgfldpZGdldEJhY2tpbmdTdG9yZVByaXZhdGUoKQot
ICAgIHsKLSAgICAgICAgWEZyZWVQaXhtYXAobV9kaXNwbGF5LCBtX3BpeG1hcCk7Ci0gICAgICAg
IFhGcmVlR0MobV9kaXNwbGF5LCBtX2djKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2Ug
a2VlcCB0d28gY29waWVzIG9mIHRoZSBzdXJmYWNlIGhlcmUsIHdoaWNoIHdpbGwgZG91YmxlIHRo
ZSBtZW1vcnkgdXNhZ2UsIGJ1dCBpbmNyZWFzZQotICAgIC8vIHNjcm9sbGluZyBwZXJmb3JtYW5j
ZSBzaW5jZSB3ZSBkbyBub3QgaGF2ZSB0byBrZWVwIHJlYWxsb2NhdGluZyBhIG1lbW9yeSByZWdp
b24gZHVyaW5nCi0gICAgLy8gcXVpY2sgc2Nyb2xsaW5nIHJlcXVlc3RzLgotICAgIFdpZGdldEJh
Y2tpbmdTdG9yZVByaXZhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUp
Ci0gICAgewotICAgICAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3Vh
bCh3aWRnZXQpOwotICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka192aXN1YWxfZ2V0X3Nj
cmVlbih2aXN1YWwpOwotICAgICAgICBtX2Rpc3BsYXkgPSBHREtfU0NSRUVOX1hESVNQTEFZKHNj
cmVlbik7Ci0gICAgICAgIG1fcGl4bWFwID0gWENyZWF0ZVBpeG1hcChtX2Rpc3BsYXksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfV0lORE9XX1hJRChnZGtfc2NyZWVuX2dl
dF9yb290X3dpbmRvdyhzY3JlZW4pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdka192aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCkpOwotICAgICAgICBtX2djID0gWENy
ZWF0ZUdDKG1fZGlzcGxheSwgbV9waXhtYXAsIDAsIDApOwotCi0gICAgICAgIG1fc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobV9kaXNwbGF5LCBtX3BpeG1hcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
REtfVklTVUFMX1hWSVNVQUwodmlzdWFsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsK
LSAgICB9Ci19OwotCi1QYXNzT3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZT4gV2lkZ2V0QmFja2lu
Z1N0b3JlOjpjcmVhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUmIHNpemUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmUod2lkZ2V0LCBzaXpl
KSk7Ci19Ci0KLVdpZGdldEJhY2tpbmdTdG9yZTo6V2lkZ2V0QmFja2luZ1N0b3JlKEd0a1dpZGdl
dCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9wcml2YXRlKFdpZGdldEJh
Y2tpbmdTdG9yZVByaXZhdGU6OmNyZWF0ZSh3aWRnZXQsIHNpemUpKQotICAgICwgbV9zaXplKHNp
emUpCi17Ci19Ci0KLVdpZGdldEJhY2tpbmdTdG9yZTo6fldpZGdldEJhY2tpbmdTdG9yZSgpCi17
Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogV2lkZ2V0QmFja2luZ1N0b3JlOjpjYWlyb1N1cmZhY2Uo
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotdm9pZCBX
aWRnZXRCYWNraW5nU3RvcmU6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25z
dCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgSW50UmVjdCB0YXJnZXRSZWN0KHNjcm9s
bFJlY3QpOwotICAgIHRhcmdldFJlY3QubW92ZShzY3JvbGxPZmZzZXQpOwotICAgIHRhcmdldFJl
Y3QuaW50ZXJzZWN0KHNjcm9sbFJlY3QpOwotICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3ByaXZhdGUtPm1f
c3VyZmFjZS5nZXQoKSk7Ci0gICAgWENvcHlBcmVhKG1fcHJpdmF0ZS0+bV9kaXNwbGF5LCBtX3By
aXZhdGUtPm1fcGl4bWFwLCBtX3ByaXZhdGUtPm1fcGl4bWFwLCBtX3ByaXZhdGUtPm1fZ2MsIAot
ICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSAtIHNjcm9sbE9mZnNldC53aWR0aCgpLCB0YXJn
ZXRSZWN0LnkoKSAtIHNjcm9sbE9mZnNldC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICB0YXJnZXRS
ZWN0LngoKSwgdGFyZ2V0UmVjdC55KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9y
ZWN0YW5nbGUobV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhkMWZlYWNhOTZhNGEwOWY0YmJkMDcwODA5YjY4ZTE4NTQ0MTY4ZjIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0tVUkxHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIktVUkwuaCIKLQotI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKLXsK
LSAgICBpZiAoIWlzVmFsaWQoKSB8fCAhaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3
X2Zvcl9wYXRoKHBhdGgoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR093blB0cjxjaGFyPiBmaWxl
bmFtZShnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOwotICAgIHJldHVybiBmaWxlbmFtZVRv
U3RyaW5nKGZpbGVuYW1lLmdldCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNWJiZDYyNjNmZjU5NTgwY2FiMDdi
NTZmY2QzOTQ0ZmUwMDlhMGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5QmluZGluZ1RyYW5zbGF0b3IuaCIK
LQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlw
ZWRlZiBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+IEludENvbnN0Q2hhckhhc2hNYXA7Ci0KLXN0
YXRpYyB2b2lkIGJhY2tzcGFjZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5n
VHJhbnNsYXRvciogdHJhbnNsYXRvcikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5
X25hbWUod2lkZ2V0LCAiYmFja3NwYWNlIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoIkRlbGV0ZUJhY2t3YXJkIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbGVjdEFs
bENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiBzZWxlY3QsIEtleUJpbmRpbmdU
cmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlf
bmFtZSh3aWRnZXQsICJzZWxlY3QtYWxsIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoc2VsZWN0ID8gIlNlbGVjdEFsbCIgOiAiVW5zZWxlY3QiKTsKLX0KLQotc3Rh
dGljIHZvaWQgY3V0Q2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRp
bmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25f
YnlfbmFtZSh3aWRnZXQsICJjdXQtY2xpcGJvYXJkIik7Ci0gICAgdHJhbnNsYXRvci0+YWRkUGVu
ZGluZ0VkaXRvckNvbW1hbmQoIkN1dCIpOwotfQotCi1zdGF0aWMgdm9pZCBjb3B5Q2xpcGJvYXJk
Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xh
dG9yKQotewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJjb3B5
LWNsaXBib2FyZCIpOwotICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJD
b3B5Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhc3RlQ2xpcGJvYXJkQ2FsbGJhY2soR3RrV2lkZ2V0
KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2ln
bmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwYXN0ZS1jbGlwYm9hcmQiKTsKLSAg
ICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiUGFzdGUiKTsKLX0KLQotc3Rh
dGljIHZvaWQgdG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJp
bmRpbmdUcmFuc2xhdG9yKikKLXsKLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRvZ2dsaW5nIHRo
ZSBvdmVyd3JpdGUgbW9kZSwgYnV0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGV4cGVjdHMKLSAgICAv
LyB0aGUgR3RrVGV4dFZpZXcgdG8gaGF2ZSBhIGxheW91dCwgc28gd2UgaGFuZGxlIHRoaXMgc2ln
bmFsIGp1c3QgdG8gc3RvcCBpdC4KLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUo
d2lkZ2V0LCAidG9nZ2xlLW92ZXJ3cml0ZSIpOwotfQotCi0vLyBHVEsrIHdpbGwgc3RpbGwgc2Vu
ZCB0aGVzZSBzaWduYWxzIHRvIHRoZSB3ZWIgdmlldy4gU28gd2UgY2FuIHNhZmVseSBzdG9wIHNp
Z25hbAotLy8gZW1pc3Npb24gd2l0aG91dCBicmVha2luZyBhY2Nlc3NpYmlsaXR5Lgotc3RhdGlj
IHZvaWQgcG9wdXBNZW51Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFu
c2xhdG9yKikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
cG9wdXAtbWVudSIpOwotfQotCi1zdGF0aWMgdm9pZCBzaG93SGVscENhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciopCi17Ci0gICAgZ19zaWduYWxfc3RvcF9l
bWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNob3ctaGVscCIpOwotfQotCi1zdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZ3RrRGVsZXRlQ29tbWFuZHNbXVsyXSA9IHsKLSAgICB7ICJEZWxldGVCYWNr
d2FyZCIsICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAg
ICAgfSwgLy8gQ2hhcmFjdGVycwotICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAg
ICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkIGVuZHMK
LSAgICB7ICJEZWxldGVXb3JkQmFja3dhcmQiLCAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJk
IiAgICAgICAgICAgICAgICAgICAgfSwgLy8gV29yZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmlu
Z09mTGluZSIsICAgICAgIkRlbGV0ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgfSwg
Ly8gTGluZXMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mTGluZSIsICAgICAgIkRlbGV0ZVRv
RW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgfSwgLy8gTGluZSBlbmRzCi0gICAgeyAiRGVs
ZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAg
ICAgICAgICAgIH0sIC8vIFBhcmFncmFwaCBlbmRzCi0gICAgeyAiRGVsZXRlVG9CZWdpbm5pbmdP
ZlBhcmFncmFwaCIsICJEZWxldGVUb0VuZE9mUGFyYWdyYXBoIiAgICAgICAgICAgICAgIH0sIC8v
IFBhcmFncmFwaHMKLSAgICB7IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBXaGl0ZXNwYWNlIChNLVwgaW4g
RW1hY3MpCi19OwotCi1zdGF0aWMgdm9pZCBkZWxldGVGcm9tQ3Vyc29yQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIEd0a0RlbGV0ZVR5cGUgZGVsZXRlVHlwZSwgZ2ludCBjb3VudCwgS2V5Qmlu
ZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lv
bl9ieV9uYW1lKHdpZGdldCwgImRlbGV0ZS1mcm9tLWN1cnNvciIpOwotICAgIGludCBkaXJlY3Rp
b24gPSBjb3VudCA+IDAgPyAxIDogMDsKLQotICAgIC8vIEVuc3VyaW5nIHRoYXQgZGVsZXRlVHlw
ZSA8PSBHX05fRUxFTUVOVFMgaGVyZSByZXN1bHRzIGluIGEgY29tcGlsZXIgd2FybmluZwotICAg
IC8vIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMgdHJ1ZS4KLQotICAgIGlmIChkZWxldGVU
eXBlID09IEdUS19ERUxFVEVfV09SRFMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pIHsKLSAg
ICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEZv
cndhcmQiKTsKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5k
KCJNb3ZlV29yZEJhY2t3YXJkIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0cmFu
c2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRCYWNrd2FyZCIpOwotICAg
ICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9y
d2FyZCIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxF
VEVfRElTUExBWV9MSU5FUykgewotICAgICAgICBpZiAoIWRpcmVjdGlvbikKLSAgICAgICAgICAg
IHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZkxp
bmUiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoIk1vdmVUb0VuZE9mTGluZSIpOwotICAgIH0gZWxzZSBpZiAoZGVsZXRlVHlw
ZSA9PSBHVEtfREVMRVRFX1BBUkFHUkFQSFMpIHsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24pCi0g
ICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvQmVn
aW5uaW5nT2ZQYXJhZ3JhcGgiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNsYXRv
ci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0VuZE9mUGFyYWdyYXBoIik7Ci0gICAg
fQotCi0gICAgY29uc3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a0RlbGV0ZUNvbW1hbmRzW2RlbGV0
ZVR5cGVdW2RpcmVjdGlvbl07Ci0gICAgaWYgKCFyYXdDb21tYW5kKQotICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCi0gICAgICAgIHRyYW5z
bGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOwotfQotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZ3RrTW92ZUNvbW1hbmRzW11bNF0gPSB7Ci0gICAgeyAiTW92ZUJh
Y2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRm9yd2FyZCIs
Ci0gICAgICAiTW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAgICAg
ICJNb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwgLy8gRm9yd2Fy
ZC9iYWNrd2FyZCBncmFwaGVtZQotICAgIHsgIk1vdmVMZWZ0IiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRN
b2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBMZWZ0L3JpZ2h0IGdyYXBoZW1lCi0gICAgeyAiTW92
ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlV29yZEZv
cndhcmQiLAotICAgICAgIk1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAg
ICAgICAgICAiTW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8v
IEZvcndhcmQvYmFja3dhcmQgd29yZAotICAgIHsgIk1vdmVVcCIsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iLAotICAgICAgIk1vdmVVcEFuZE1vZGlm
eVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxl
Y3Rpb24iICAgICAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZQotICAgIHsgIk1vdmVUb0Jl
Z2lubmluZ09mTGluZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5l
IiwKLSAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAg
ICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9LCAvLyBVcC9k
b3duIGxpbmUgZW5kcwotICAgIHsgIk1vdmVQYXJhZ3JhcGhCYWNrd2FyZCIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAiTW92ZVBhcmFncmFwaEZvcndhcmQiLAotICAgICAgIk1vdmVQYXJhZ3Jh
cGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVBhcmFncmFwaEZvcndh
cmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBocwotICAgIHsg
Ik1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgICAgICAgICAgICAgICAgICAgICAiTW92ZVRv
RW5kT2ZQYXJhZ3JhcGgiLAotICAgICAgIk1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9k
aWZ5U2VsZWN0aW9uIiwgICAiTW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24i
ICAgIH0sIC8vIFVwL2Rvd24gcGFyYWdyYXBoIGVuZHMuCi0gICAgeyAiTW92ZVBhZ2VVcCIsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iLAotICAgICAg
Ik1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgICAiTW92ZVBh
Z2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgIH0sIC8vIFVwL2Rvd24gcGFnZQot
ICAgIHsgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiLCAgICAgICAgICAgICAgICAgICAgICAi
TW92ZVRvRW5kT2ZEb2N1bWVudCIsCi0gICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFu
ZE1vZGlmeVNlbGVjdGlvbiIsICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgfSwgLy8gQmVnaW4vZW5kIG9mIGJ1ZmZlcgotICAgIHsgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgMCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSG9yaXpvbnRhbCBwYWdlIG1vdmVtZW50Ci19
OwotCi1zdGF0aWMgdm9pZCBtb3ZlQ3Vyc29yQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0
a01vdmVtZW50U3RlcCBzdGVwLCBnaW50IGNvdW50LCBnYm9vbGVhbiBleHRlbmRTZWxlY3Rpb24s
IEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQotewotICAgIGdfc2lnbmFsX3N0b3Bf
ZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJtb3ZlLWN1cnNvciIpOwotICAgIGludCBkaXJlY3Rp
b24gPSBjb3VudCA+IDAgPyAxIDogMDsKLSAgICBpZiAoZXh0ZW5kU2VsZWN0aW9uKQotICAgICAg
ICBkaXJlY3Rpb24gKz0gMjsKLQotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RlcCkg
Pj0gR19OX0VMRU1FTlRTKGd0a01vdmVDb21tYW5kcykpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbnN0IGNoYXIqIHJhd0NvbW1hbmQgPSBndGtNb3ZlQ29tbWFuZHNbc3RlcF1bZGlyZWN0aW9u
XTsKLSAgICBpZiAoIXJhd0NvbW1hbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYWJzKGNvdW50KTsgaSsrKQotICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5k
aW5nRWRpdG9yQ29tbWFuZChyYXdDb21tYW5kKTsKLX0KLQotS2V5QmluZGluZ1RyYW5zbGF0b3I6
OktleUJpbmRpbmdUcmFuc2xhdG9yKCkKLSAgICA6IG1fbmF0aXZlV2lkZ2V0KGd0a190ZXh0X3Zp
ZXdfbmV3KCkpCi17Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
ImJhY2tzcGFjZSIsIEdfQ0FMTEJBQ0soYmFja3NwYWNlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY3V0LWNsaXBib2FyZCIsIEdf
Q0FMTEJBQ0soY3V0Q2xpcGJvYXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiY29weS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKGNv
cHlDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRp
dmVXaWRnZXQuZ2V0KCksICJwYXN0ZS1jbGlwYm9hcmQiLCBHX0NBTExCQUNLKHBhc3RlQ2xpcGJv
YXJkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0
LmdldCgpLCAic2VsZWN0LWFsbCIsIEdfQ0FMTEJBQ0soc2VsZWN0QWxsQ2FsbGJhY2spLCB0aGlz
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAibW92ZS1jdXJz
b3IiLCBHX0NBTExCQUNLKG1vdmVDdXJzb3JDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJkZWxldGUtZnJvbS1jdXJzb3IiLCBHX0NB
TExCQUNLKGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJ0b2dnbGUtb3ZlcndyaXRlIiwgR19DQUxMQkFD
Syh0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJwb3B1cC1tZW51IiwgR19DQUxMQkFDSyhwb3B1cE1lbnVD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0
KCksICJzaG93LWhlbHAiLCBHX0NBTExCQUNLKHNob3dIZWxwQ2FsbGJhY2spLCB0aGlzKTsKLX0K
LQotc3RydWN0IEtleUNvbWJpbmF0aW9uRW50cnkgewotICAgIHVuc2lnbmVkIGdka0tleUNvZGU7
Ci0gICAgdW5zaWduZWQgc3RhdGU7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLX07Ci0KLXN0YXRp
YyBjb25zdCBLZXlDb21iaW5hdGlvbkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7Ci0gICAgeyBH
REtfYiwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJUb2dnbGVCb2xk
IiAgICB9LAotICAgIHsgR0RLX2ksICAgICAgICAgR0RLX0NPTlRST0xfTUFTSywgICAgICAgICAg
ICAgICAiVG9nZ2xlSXRhbGljIiAgfSwKLSAgICB7IEdES19Fc2NhcGUsICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCi0gICAgeyBHREtfZ3JlYXRl
ciwgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICB9LAot
fTsKLQotLy8gVGhlc2UgY29tbWFuZHMgYXJlIHRleHQgaW5zZXJ0aW9uIGNvbW1hbmRzLCBzbyBz
aG91bGQgdGFrZSBwbGFjZQotLy8gd2hpbGUgaGFuZGxpbmcgdGhlIEtleVByZXNzIGV2ZW50Lgot
c3RhdGljIGNvbnN0IEtleUNvbWJpbmF0aW9uRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7Ci0g
ICAgeyBHREtfVGFiLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnNl
cnRUYWIiICAgICB9LAotICAgIHsgR0RLX1RhYiwgICAgICAgR0RLX1NISUZUX01BU0ssICAgICAg
ICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgfSwKLX07Ci0KLXZvaWQgS2V5QmluZGluZ1RyYW5z
bGF0b3I6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBF
dmVudFR5cGUgdHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYgY29tbWFuZExpc3QpCi17Ci0gICAg
bV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuY2xlYXIoKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCi0gICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdUS19PQkpFQ1QobV9uYXRpdmVX
aWRnZXQuZ2V0KCkpLCBldmVudCk7Ci0jZWxzZQotICAgIGd0a19iaW5kaW5nc19hY3RpdmF0ZV9l
dmVudChHX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGV2ZW50KTsKLSNlbmRpZgotCi0g
ICAgaWYgKCFtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29t
bWFuZExpc3QuYXBwZW5kKG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSW50Q29uc3RDaGFySGFzaE1hcCwg
a2V5RG93bkNvbW1hbmRzTWFwLCAoKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25z
dENoYXJIYXNoTWFwLCBrZXlQcmVzc0NvbW1hbmRzTWFwLCAoKSk7Ci0KLSAgICBpZiAoa2V5RG93
bkNvbW1hbmRzTWFwLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR19OX0VMRU1FTlRTKGtleURvd25FbnRyaWVzKTsgaSsrKQotICAgICAgICAgICAga2V5RG93
bkNvbW1hbmRzTWFwLnNldChrZXlEb3duRW50cmllc1tpXS5zdGF0ZSA8PCAxNiB8IGtleURvd25F
bnRyaWVzW2ldLmdka0tleUNvZGUsIGtleURvd25FbnRyaWVzW2ldLm5hbWUpOwotCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5UHJlc3NFbnRyaWVzKTsg
aSsrKQotICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC5zZXQoa2V5UHJlc3NFbnRyaWVz
W2ldLnN0YXRlIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmdka0tleUNvZGUsIGtleVByZXNz
RW50cmllc1tpXS5uYW1lKTsKLSAgICB9Ci0KLSAgICAvLyBTcGVjaWFsLWNhc2UgZW50ZXIga2V5
cyBmb3Igd2Ugd2FudCB0aGVtIHRvIHdvcmsgcmVnYXJkbGVzcyBvZiBtb2RpZmllci4KLSAgICBp
ZiAoKGV2ZW50LT5rZXl2YWwgPT0gR0RLX1JldHVybiB8fCBldmVudC0+a2V5dmFsID09IEdES19L
UF9FbnRlciB8fCBldmVudC0+a2V5dmFsID09IEdES19JU09fRW50ZXIpICYmIHR5cGUgPT0gS2V5
UHJlc3MpIHsKLSAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKCJJbnNlcnROZXdMaW5lIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3Iga2V5cHJlc3MgZXZlbnRzLCB3ZSB3
YW50IGNoYXJDb2RlKCksIGJ1dCBrZXlDb2RlKCkgZG9lcyB0aGF0LgotICAgIGludCBtYXBLZXkg
PSBldmVudC0+c3RhdGUgPDwgMTYgfCBldmVudC0+a2V5dmFsOwotICAgIGlmIChtYXBLZXkpIHsK
LSAgICAgICAgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiogY29tbWFuZE1hcCA9IHR5cGUgPT0g
S2V5RG93biA/ICAma2V5RG93bkNvbW1hbmRzTWFwIDogJmtleVByZXNzQ29tbWFuZHNNYXA7Ci0g
ICAgICAgIGlmIChjb25zdCBjaGFyKiBjb21tYW5kU3RyaW5nID0gY29tbWFuZE1hcC0+Z2V0KG1h
cEtleSkpIHsKLSAgICAgICAgICAgIGNvbW1hbmRMaXN0LmFwcGVuZChjb21tYW5kU3RyaW5nKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJp
bmRpbmdUcmFuc2xhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGlu
Z1RyYW5zbGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0MzZkZTZjYjg2
M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGlu
Z1RyYW5zbGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpZm5kZWYgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAotI2RlZmluZSBLZXlCaW5k
aW5nVHJhbnNsYXRvcl9oCi0KLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0
cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgS2V5QmluZGluZ1RyYW5zbGF0b3IgewotcHVibGljOgotICAgIEtleUJpbmRpbmdUcmFu
c2xhdG9yKCk7Ci0KLSAgICBlbnVtIEV2ZW50VHlwZSB7IEtleURvd24sIEtleVByZXNzIH07Ci0g
ICAgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KEdka0V2ZW50S2V5KiwgRXZlbnRU
eXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+Jik7Ci0gICAgdm9pZCBhZGRQZW5kaW5nRWRpdG9yQ29t
bWFuZChjb25zdCBjaGFyKiBjb21tYW5kKSB7IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmFwcGVu
ZChjb21tYW5kKTsgfQotCi1wcml2YXRlOgotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBtX25hdGl2
ZVdpZGdldDsKLSAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fcGVuZGluZ0VkaXRvckNvbW1hbmRz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzdhNzFlNTYxYzUzNDRjMDVlZjAzYmYxMjgzMzU2ZmM1MmE0MmZkZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKLQotI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0j
aW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGxvY2FsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIFVzaW5nIHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkgaGVyZSBpcyBub3Qg
YW4gb3B0aW9uLCBiZWNhdXNlCi0vLyBpdCBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxv
Y2FsZSBpbiBydW50aW1lLCBzbyBpdCByZXR1cm5zCi0vLyBhbHdheXMgdGhlIHNhbWUgdmFsdWUu
Ci1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQotewotICAgIGNoYXIqIGxvY2FsZURl
ZmF1bHQgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOwotCi0gICAgaWYgKCFsb2NhbGVEZWZh
dWx0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCJjIik7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBu
b3JtYWxpemVkRGVmYXVsdChnX2FzY2lpX3N0cmRvd24obG9jYWxlRGVmYXVsdCwgLTEpKTsKLSAg
ICBjaGFyKiBwdHIgPSBzdHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICdfJyk7Ci0KLSAg
ICBpZiAocHRyKQotICAgICAgICAqcHRyID0gJy0nOwotCi0gICAgcHRyID0gc3RyY2hyKG5vcm1h
bGl6ZWREZWZhdWx0LmdldCgpLCAnLicpOwotCi0gICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9
ICdcMCc7Ci0KLSAgICByZXR1cm4gU3RyaW5nKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpKTsKLX0K
LQotVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwotICAgIHVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXMuYXBwZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7Ci0gICAgcmV0dXJuIHVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXM7Ci19Ci0gICAgCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIwMmNhYTJmOWRmMjUyZjY5MjViYTIwMzRlNGNhNDU5MWJjMTViNmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
Nzg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNo
cmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSA8
Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2NrTGFiZWwoY29uc3QgY2hhciogc3Rv
Y2tJRCkKLXsKLSAgICBHdGtTdG9ja0l0ZW0gaXRlbTsKLSAgICBpZiAoIWd0a19zdG9ja19sb29r
dXAoc3RvY2tJRCwgJml0ZW0pKQotICAgICAgICByZXR1cm4gc3RvY2tJRDsKLSAgICByZXR1cm4g
aXRlbS5sYWJlbDsKLX0KLQotU3RyaW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3VibWl0IikpOwotfQotCi1TdHJpbmcgaW5w
dXRFbGVtZW50QWx0VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3Vi
bWl0IikpOwotfQotCi1TdHJpbmcgcmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJlc2V0IikpOwotfQotCi1TdHJpbmcgZGVmYXVsdERl
dGFpbHNTdW1tYXJ5VGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiRGV0
YWlscyIpKTsKLX0KLQotU3RyaW5nIHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXgu
IEVudGVyIHNlYXJjaCBrZXl3b3JkczogIikpOwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbkNob29z
ZUZpbGVMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hvb3NlIEZp
bGUiKSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVsdGlwbGVGaWxlc0xhYmVsKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDaG9vc2UgRmlsZXMiKSk7Ci19Ci0K
LVN0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiKE5vbmUpIikpOwotfQotCi1TdHJpbmcgZmlsZUJ1dHRvbk5vRmls
ZXNTZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9u
ZSkiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVuIExpbmsgaW4gTmV3IF9X
aW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rp
c2soKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9Eb3dubG9hZCBMaW5rZWQg
RmlsZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9h
cmQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcHkgTGluayBMb2NfYXRp
b24iKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRv
dygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfSW1hZ2UgaW4gTmV3
IFdpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VU
b0Rpc2soKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlNhX3ZlIEltYWdlIEFz
IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcF95IEltYWdlIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcHkgSW1hZ2UgX0FkZHJlc3MiKSk7Ci19
Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfVmlkZW8gaW4gTmV3IFdpbmRvdyIp
KTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93KCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJPcGVuIF9BdWRpbyBpbiBOZXcgV2lu
ZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xp
cGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3BfeSBWaWRlbyBM
aW5rIExvY2F0aW9uIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlv
TGlua1RvQ2xpcGJvYXJkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDb3Bf
eSBBdWRpbyBMaW5rIExvY2F0aW9uIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFDb250cm9scygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X1RvZ2dsZSBNZWRpYSBDb250cm9scyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1RvZ2dsZU1lZGlhTG9vcCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiVG9n
Z2xlIE1lZGlhIF9Mb29wIFBsYXliYWNrIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4oKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlN3aXRjaCBWaWRlbyB0byBfRnVsbHNjcmVlbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X1BsYXkiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUGF1c2UiKSk7Ci19Ci0KLVN0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIl9NdXRlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1l
SW5OZXdXaW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk9wZW4gX0Zy
YW1lIGluIE5ldyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5
KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0
a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0NPUFkpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0K
LQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpCi17Ci0gICAgc3RhdGljIFN0cmlu
ZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19E
RUxFVEUpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ1NlbGVjdEFsbCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3Ry
aW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19TRUxFQ1RfQUxMKSk7Ci0gICAg
cmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2Rl
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29u
dHJvbCBDaGFyYWN0ZXIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1l
dGhvZHMoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIklucHV0IF9NZXRob2Rz
IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29CYWNrKCkKLXsKLSAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RL
X1NUT0NLX0dPX0JBQ0spKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xh
YmVsID0gU3RyaW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19HT19GT1JXQVJE
KSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdTdG9wKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21V
VEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1NUT1ApKTsKLSAgICByZXR1cm4gc3RvY2tMYWJl
bDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiX1JlbG9hZCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0N1dCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpm
cm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19DVVQpKTsKLSAgICByZXR1cm4gc3RvY2tM
YWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkKLXsKLSAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RL
X1NUT0NLX1BBU1RFKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiTm8gR3Vlc3NlcyBGb3VuZCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0lnbm9yZVNwZWxsaW5nKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJf
SWdub3JlIFNwZWxsaW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5T
cGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0xlYXJuIFNwZWxs
aW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfU2VhcmNoIHRoZSBXZWIiKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoY29uc3QgU3RyaW5nJikK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfTG9vayBVcCBpbiBEaWN0aW9uYXJ5
IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9PcGVuIExpbmsiKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJJZ25vcmUgX0dyYW1tYXIiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdTcGVsbGluZ01lbnUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlNwZWxs
aW5nIGFuZCBfR3JhbW1hciIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
cGVsbGluZ1BhbmVsKGJvb2wgc2hvdykKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChz
aG93ID8gXygiX1Nob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKSA6IF8oIl9IaWRlIFNwZWxsaW5n
IGFuZCBHcmFtbWFyIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVs
bGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0NoZWNrIERvY3VtZW50
IE5vdyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGls
ZVR5cGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiQ2hlY2sgU3BlbGxp
bmcgV2hpbGUgX1R5cGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNr
R3JhbW1hcldpdGhTcGVsbGluZygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
Q2hlY2sgX0dyYW1tYXIgV2l0aCBTcGVsbGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0ZvbnRNZW51KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfRm9u
dCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKQotewotICAgIHN0YXRp
YyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtf
U1RPQ0tfQk9MRCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnSXRhbGljKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBT
dHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0lUQUxJQykpOwotICAgIHJl
dHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5l
KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0
a1N0b2NrTGFiZWwoR1RLX1NUT0NLX1VOREVSTElORSkpOwotICAgIHJldHVybiBzdG9ja0xhYmVs
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiX091dGxpbmUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiSW5zcGVjdCBfRWxlbWVudCIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Vu
aWNvZGVJbnNlcnRMUk1NYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJM
Uk0gX0xlZnQtdG8tcmlnaHQgbWFyayIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGVJbnNlcnRSTE1NYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJSTE0gX1JpZ2h0LXRvLWxlZnQgbWFyayIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1VuaWNvZGVJbnNlcnRMUkVNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJMUkUgTGVmdC10by1yaWdodCBfZW1iZWRkaW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMRU1hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIlJMRSBSaWdodC10by1sZWZ0IGVfbWJlZGRpbmciKSk7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0TFJPTWFyaygpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiTFJPIExlZnQtdG8tcmlnaHQgX292ZXJyaWRlIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMT01hcmsoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMTyBSaWdodC10by1sZWZ0IG9fdmVycmlkZSIp
KTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRQREZNYXJrKCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJQREYgX1BvcCBkaXJlY3Rpb25hbCBm
b3JtYXR0aW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dFpXU01hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlpXUyBfWmVybyB3
aWR0aCBzcGFjZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNl
cnRaV0pNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV0ogWmVybyB3
aWR0aCBfam9pbmVyIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUlu
c2VydFpXTkpNYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJaV05KIFpl
cm8gd2lkdGggX25vbi1qb2luZXIiKSk7Ci19Ci0KLVN0cmluZyBzZWFyY2hNZW51Tm9SZWNlbnRT
ZWFyY2hlc1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk5vIHJlY2Vu
dCBzZWFyY2hlcyIpKTsKLX0KLQotU3RyaW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJlY2VudCBzZWFyY2hlcyIpKTsK
LX0KLQotU3RyaW5nIHNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX0NsZWFyIHJlY2VudCBzZWFyY2hlcyIpKTsKLX0K
LQotU3RyaW5nIEFYRGVmaW5pdGlvblRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oImRlZmluaXRpb24iKSk7Ci19Ci0KLVN0cmluZyBBWERlc2NyaXB0aW9uTGlzdFRlcm1U
ZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ0ZXJtIikpOwotfQotCi1T
dHJpbmcgQVhEZXNjcmlwdGlvbkxpc3REZXRhaWxUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJkZXNjcmlwdGlvbiIpKTsKLX0KLQotU3RyaW5nIEFYRm9vdGVyUm9sZURl
c2NyaXB0aW9uVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZm9vdGVy
IikpOwotfQotCi1TdHJpbmcgQVhCdXR0b25BY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJwcmVzcyIpKTsKLX0KLQotU3RyaW5nIEFYUmFkaW9CdXR0b25BY3Rp
b25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWxlY3QiKSk7Ci19
Ci0KLVN0cmluZyBBWFRleHRGaWVsZEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oImFjdGl2YXRlIikpOwotfQotCi1TdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hB
Y3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bmNoZWNrIikp
OwotfQotCi1TdHJpbmcgQVhVbmNoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImNoZWNrIikpOwotfQotCi1TdHJpbmcgQVhMaW5rQWN0
aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygianVtcCIpKTsKLX0K
LQotU3RyaW5nIEFYTWVudUxpc3RQb3B1cEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotU3RyaW5nIEFYTWVudUxpc3RBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0gICAgCi1TdHJpbmcgbWlzc2luZ1BsdWdpblRleHQoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIk1pc3NpbmcgUGx1Zy1pbiIpKTsKLX0KLQotU3RyaW5n
IGNyYXNoZWRQbHVnaW5UZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIlBsdWctaW4gRmFpbHVyZSIpKTsKLX0KLQotU3RyaW5nIGJs
b2NrZWRQbHVnaW5CeUNvbnRlbnRTZWN1cml0eVBvbGljeVRleHQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgaW5zZWN1cmVQbHVn
aW5WZXJzaW9uVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBpbmFjdGl2ZVBsdWdpblRleHQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgbXVsdGlwbGVGaWxl
VXBsb2FkVGV4dCh1bnNpZ25lZCBudW1iZXJPZkZpbGVzKQotewotICAgIC8vIEZJWE1FOiBJZiB0
aGlzIGZpbGUgZ2V0cyBsb2NhbGl6ZWQsIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBsb2NhbGl6ZWQg
YXMgb25lIHN0cmluZyB3aXRoIGEgd2lsZGNhcmQgZm9yIHRoZSBudW1iZXIuCi0gICAgcmV0dXJu
IFN0cmluZzo6bnVtYmVyKG51bWJlck9mRmlsZXMpICsgU3RyaW5nOjpmcm9tVVRGOChfKCIgZmls
ZXMiKSk7Ci19Ci0KLVN0cmluZyB1bmtub3duRmlsZVNpemVUZXh0KCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJVbmtub3duIikpOwotfQotCi1TdHJpbmcgaW1hZ2VUaXRsZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIEdPd25Q
dHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoQ18oIlRpdGxlIHN0cmluZyBmb3IgaW1h
Z2VzIiwgIiVzICAoJWR4JWQgcGl4ZWxzKSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwot
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKLX0KLQotCi0jaWYg
RU5BQkxFKFZJREVPKQotCi1TdHJpbmcgbWVkaWFFbGVtZW50TG9hZGluZ1N0YXRlVGV4dCgpCi17
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTG9hZGluZy4uLiIpKTsKLX0KLQotU3Ry
aW5nIG1lZGlhRWxlbWVudExpdmVCcm9hZGNhc3RTdGF0ZVRleHQoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkxpdmUgQnJvYWRjYXN0IikpOwotfQotCi1TdHJpbmcgbG9jYWxp
emVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
aWYgKG5hbWUgPT0gIkF1ZGlvRWxlbWVudCIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oImF1ZGlvIGVsZW1lbnQgY29udHJvbGxlciIpKTsKLSAgICBpZiAobmFtZSA9PSAiVmlk
ZW9FbGVtZW50IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidmlkZW8gZWxl
bWVudCBjb250cm9sbGVyIikpOwotICAgIGlmIChuYW1lID09ICJNdXRlQnV0dG9uIikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibXV0ZSIpKTsKLSAgICBpZiAobmFtZSA9PSAi
VW5NdXRlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygidW5tdXRl
IikpOwotICAgIGlmIChuYW1lID09ICJQbGF5QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygicGxheSIpKTsKLSAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQot
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXVzZSIpKTsKLSAgICBpZiAobmFt
ZSA9PSAiU2xpZGVyIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibW92aWUg
dGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2xpZGVyVGh1bWIiKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJ0aW1lbGluZSBzbGlkZXIgdGh1bWIiKSk7Ci0gICAgaWYgKG5h
bWUgPT0gIlJld2luZEJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
ImJhY2sgMzAgc2Vjb25kcyIpKTsKLSAgICBpZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJldHVybiB0byByZWFs
dGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiQ3VycmVudFRpbWVEaXNwbGF5IikKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZWxhcHNlZCB0aW1lIikpOwotICAgIGlmIChuYW1l
ID09ICJUaW1lUmVtYWluaW5nRGlzcGxheSIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oInJlbWFpbmluZyB0aW1lIikpOwotICAgIGlmIChuYW1lID09ICJTdGF0dXNEaXNwbGF5
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RhdHVzIikpOwotICAgIGlm
IChuYW1lID09ICJFbnRlckZ1bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJlbnRlciBmdWxsc2NyZWVuIikpOwotICAgIGlmIChuYW1lID09ICJFeGl0
RnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImV4
aXQgZnVsbHNjcmVlbiIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQot
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmYXN0IGZvcndhcmQiKSk7Ci0gICAg
aWYgKG5hbWUgPT0gIlNlZWtCYWNrQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiZmFzdCByZXZlcnNlIikpOwotICAgIGlmIChuYW1lID09ICJTaG93Q2xvc2VkQ2Fw
dGlvbnNCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzaG93IGNs
b3NlZCBjYXB0aW9ucyIpKTsKLSAgICBpZiAobmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25zQnV0
dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiaGlkZSBjbG9zZWQgY2Fw
dGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkNvbnRyb2xzUGFuZWwiKQotICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtZWRpYSBjb250cm9scyIpKTsKLQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGxvY2FsaXpl
ZE1lZGlhQ29udHJvbEVsZW1lbnRIZWxwVGV4dChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
aWYgKG5hbWUgPT0gIkF1ZGlvRWxlbWVudCIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oImF1ZGlvIGVsZW1lbnQgcGxheWJhY2sgY29udHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5
IikpOwotICAgIGlmIChuYW1lID09ICJWaWRlb0VsZW1lbnQiKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJ2aWRlbyBlbGVtZW50IHBsYXliYWNrIGNvbnRyb2xzIGFuZCBzdGF0
dXMgZGlzcGxheSIpKTsKLSAgICBpZiAobmFtZSA9PSAiTXV0ZUJ1dHRvbiIpCi0gICAgICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm11dGUgYXVkaW8gdHJhY2tzIikpOwotICAgIGlmIChu
YW1lID09ICJVbk11dGVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJ1bm11dGUgYXVkaW8gdHJhY2tzIikpOwotICAgIGlmIChuYW1lID09ICJQbGF5QnV0dG9uIikK
LSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYmVnaW4gcGxheWJhY2siKSk7Ci0g
ICAgaWYgKG5hbWUgPT0gIlBhdXNlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygicGF1c2UgcGxheWJhY2siKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlciIpCi0g
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1vdmllIHRpbWUgc2NydWJiZXIiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlNsaWRlclRodW1iIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygibW92aWUgdGltZSBzY3J1YmJlciB0aHVtYiIpKTsKLSAgICBpZiAobmFtZSA9
PSAiUmV3aW5kQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2Vl
ayBtb3ZpZSBiYWNrIDMwIHNlY29uZHMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlJldHVyblRvUmVh
bHRpbWVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyZXR1cm4g
c3RyZWFtaW5nIG1vdmllIHRvIHJlYWwgdGltZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiQ3VycmVu
dFRpbWVEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVu
dCBtb3ZpZSB0aW1lIGluIHNlY29uZHMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5p
bmdEaXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibnVtYmVyIG9m
IHNlY29uZHMgb2YgbW92aWUgcmVtYWluaW5nIikpOwotICAgIGlmIChuYW1lID09ICJTdGF0dXNE
aXNwbGF5IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY3VycmVudCBtb3Zp
ZSBzdGF0dXMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlNlZWtCYWNrQnV0dG9uIikKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic2VlayBxdWlja2x5IGJhY2siKSk7Ci0gICAgaWYg
KG5hbWUgPT0gIlNlZWtGb3J3YXJkQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygic2VlayBxdWlja2x5IGZvcndhcmQiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkVudGVy
RnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlBs
YXkgbW92aWUgaW4gZnVsbHNjcmVlbiBtb2RlIikpOwotICAgIGlmIChuYW1lID09ICJFbnRlckZ1
bGxzY3JlZW5CdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJFeGl0
IGZ1bGxzY3JlZW4gbW9kZSIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2hvd0Nsb3NlZENhcHRpb25z
QnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RhcnQgZGlzcGxh
eWluZyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkhpZGVDbG9zZWRDYXB0
aW9uc0J1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0b3AgZGlz
cGxheWluZyBjbG9zZWQgY2FwdGlvbnMiKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWRNZWRpYVRpbWVEZXNj
cmlwdGlvbihmbG9hdCB0aW1lKQotewotICAgIGlmICghc3RkOjppc2Zpbml0ZSh0aW1lKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiaW5kZWZpbml0ZSB0aW1lIikpOwotCi0g
ICAgaW50IHNlY29uZHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGFicyh0aW1lKSk7Ci0gICAgaW50IGRh
eXMgPSBzZWNvbmRzIC8gKDYwICogNjAgKiAyNCk7Ci0gICAgaW50IGhvdXJzID0gc2Vjb25kcyAv
ICg2MCAqIDYwKTsKLSAgICBpbnQgbWludXRlcyA9IChzZWNvbmRzIC8gNjApICUgNjA7Ci0gICAg
c2Vjb25kcyAlPSA2MDsKLQotICAgIGlmIChkYXlzKSB7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+
IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIGRheXMgJWQgaG91cnMgJWQgbWludXRlcyAlZCBz
ZWNvbmRzIiwgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKTsKLSAgICAgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAoaG91cnMp
IHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgaG91
cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpKTsKLSAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nLmdldCgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobWludXRlcykgewotICAgICAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBf
cHJpbnRmKCIlZCBtaW51dGVzICVkIHNlY29uZHMiLCBtaW51dGVzLCBzZWNvbmRzKSk7Ci0gICAg
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Ci0gICAgfQotCi0gICAg
R093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgc2Vjb25kcyIsIHNlY29u
ZHMpKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkpOwotfQotI2Vu
ZGlmICAvLyBFTkFCTEUoVklERU8pCi0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlz
c2luZ1RleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZhbHVlIG1pc3Np
bmciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckNoZWNr
Ym94VGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlv
bk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2Fn
ZVZhbHVlTWlzc2luZ0ZvckZpbGVUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlwbGVGaWxlVGV4dCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1p
c3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0Zv
clJhZGlvVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRh
dGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1T
dHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInR5cGUgbWlzbWF0Y2gi
KSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4
dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3Nh
Z2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVN
aXNtYXRjaEZvck11bHRpcGxlRW1haWxUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKLX0KLQotU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yVVJMVGV4dCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hU
ZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVBhdHRlcm5NaXNtYXRjaFRleHQo
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInBhdHRlcm4gbWlzbWF0Y2giKSk7
Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVRvb0xvbmdUZXh0KGludCwgaW50KQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRvbyBsb25nIikpOwotfQotCi1TdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJyYW5nZSB1bmRlcmZsb3ciKSk7Ci19Ci0KLVN0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0KGNvbnN0IFN0cmluZyYpCi17
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmFuZ2Ugb3ZlcmZsb3ciKSk7Ci19Ci0K
LVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzdGVwIG1p
c21hdGNoIikpOwotfQotCi1TdHJpbmcgdW5hY2NlcHRhYmxlVExTQ2VydGlmaWNhdGUoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlVuYWNjZXB0YWJsZSBUTFMgY2VydGlmaWNh
dGUiKSk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWRTdHJpbmcoY29uc3QgY2hhcioga2V5KQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGtleSwgc3RybGVuKGtleSkpOwotfQotCi1TdHJp
bmcgdmFsaWRhdGlvbk1lc3NhZ2VCYWRJbnB1dEZvck51bWJlclRleHQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4
dCgpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotU3RyaW5nIHRleHRUcmFja0Nsb3Nl
ZENhcHRpb25zVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNsb3Nl
ZCBDYXB0aW9ucyIsICJNZW51IHNlY3Rpb24gaGVhZGluZyBmb3IgY2xvc2VkIGNhcHRpb25zIikp
OwotfQotCi1TdHJpbmcgdGV4dFRyYWNrU3VidGl0bGVzVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoQ18oIlN1YnRpdGxlcyIsICJNZW51IHNlY3Rpb24gaGVhZGluZyBmb3Ig
c3VidGl0bGVzIikpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrT2ZmVGV4dCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIk9mZiIsICJNZW51IGl0ZW0gbGFiZWwgZm9yIHRoZSB0
cmFjayB0aGF0IHJlcHJlc2VudHMgZGlzYWJsaW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKLX0KLQot
U3RyaW5nIHRleHRUcmFja05vTGFiZWxUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChDXygiTm8gbGFiZWwiLCAiTWVudSBpdGVtIGxhYmVsIGZvciBhIGNsb3NlZCBjYXB0aW9u
cyB0cmFjayB0aGF0IGhhcyBubyBvdGhlciBuYW1lIikpOwotfQotI2VuZGlmCi0KLVN0cmluZyBz
bmFwc2hvdHRlZFBsdWdJbkxhYmVsVGl0bGUoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KENfKCJTbmFwc2hvdHRlZCBQbHVnLUluIiwgIlRpdGxlIG9mIHRoZSBsYWJlbCB0byBzaG93
IG9uIGEgc25hcHNob3R0ZWQgcGx1Zy1pbiIpKTsKLX0KLQotU3RyaW5nIHNuYXBzaG90dGVkUGx1
Z0luTGFiZWxTdWJ0aXRsZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIkNs
aWNrIHRvIHJlc3RhcnQiLCAiU3VidGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFw
c2hvdHRlZCBwbHVnLWluIikpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
TG9nZ2luZ0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OThhZjdkOGJl
YmNiZTA1YzlhYmU3ZmY0YTQxZTE3YzkwOGNmOTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvZ2dpbmdH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkluaXRpYWxpemVMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
Ci0jaWYgIUxPR19ESVNBQkxFRAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEluc3BpcmVkIGJ5IHRoZSBjb2RlIHVzZWQgYnkgdGhlIFF0IHBvcnQKLQotdm9p
ZCBpbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKQotewotICAgIHN0YXRpYyBi
b29sIGRpZEluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHMgPSBmYWxzZTsKLSAgICBpZiAoZGlkSW5p
dGlhbGl6ZUxvZ2dpbmdDaGFubmVscykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGlkSW5pdGlh
bGl6ZUxvZ2dpbmdDaGFubmVscyA9IHRydWU7Ci0KLSAgICBjaGFyKiBsb2dFbnYgPSBnZXRlbnYo
IldFQktJVF9ERUJVRyIpOwotICAgIGlmICghbG9nRW52KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyB3ZSBzZXQgdXAgdGhlIGxvZ3MgYW55d2F5IGJlY2F1c2Ugc29tZSBvZiBvdXIgbG9nZ2lu
Zywgc3VjaCBhcwotICAgIC8vIHNvdXAncyBpcyBhdmFpbGFibGUgaW4gcmVsZWFzZSBidWlsZHMK
LSNpZiBkZWZpbmVkKE5ERUJVRykKLSAgICBnX3dhcm5pbmcoIldFQktJVF9ERUJVRyBpcyBub3Qg
ZW1wdHksIGJ1dCB0aGlzIGlzIGEgcmVsZWFzZSBidWlsZC4gTm90aWNlIHRoYXQgbWFueSBsb2cg
bWVzc2FnZXMgd2lsbCBvbmx5IGFwcGVhciBpbiBhIGRlYnVnIGJ1aWxkLiIpOwotI2VuZGlmCi0K
LSAgICBjaGFyKiogbG9ndiA9IGdfc3Ryc3BsaXQobG9nRW52LCAiICIsIC0xKTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBsb2d2W2ldOyBpKyspIHsKLSAgICAgICAgaWYgKFdURkxvZ0NoYW5uZWwq
IGNoYW5uZWwgPSBnZXRDaGFubmVsRnJvbU5hbWUobG9ndltpXSkpCi0gICAgICAgICAgICBjaGFu
bmVsLT5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLSAgICB9Ci0KLSAgICBnX3N0cmZyZWV2KGxv
Z3YpOwotCi0gICAgLy8gdG8gZGlzYWJsZSBsb2dnaW5nIG5vdEltcGxlbWVudGVkIHNldCB0aGUg
RElTQUJMRV9OSV9XQVJOSU5HCi0gICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gMQotICAg
IExvZ05vdFlldEltcGxlbWVudGVkLnN0YXRlID0gV1RGTG9nQ2hhbm5lbE9uOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAhTE9HX0RJU0FCTEVECmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2YxNGNkOGRmN2E1NjJiMDJlYzMyYjhkZmEyZjRj
Zjk2ZmIyYjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLQotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKLSAgICBjb25zdCBjaGFyKiBl
eHRlbnNpb247Ci0gICAgY29uc3QgY2hhciogbWltZVR5cGU7Ci19OwotCi1zdGF0aWMgY29uc3Qg
RXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKLSAgICB7ICJibXAiLCAiaW1hZ2UvYm1w
IiB9LAotICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKLSAgICB7ICJnaWYiLCAiaW1hZ2UvZ2lm
IiB9LAotICAgIHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaHRtbCIsICJ0ZXh0L2h0
bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwKLSAgICB7ICJqcGVnIiwgImlt
YWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianMiLCAi
YXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBkZiIsICJhcHBsaWNhdGlvbi9w
ZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAgICB7ICJyc3MiLCAiYXBwbGlj
YXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKLSAgICB7
ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAidHh0IiwgInRleHQvcGxhaW4iIH0sCi0g
ICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKLSAgICB7ICJ4bWwiLCAidGV4dC94bWwi
IH0sCi0gICAgeyAieHNsIiwgInRleHQveHNsIiB9LAotICAgIHsgInhodG1sIiwgImFwcGxpY2F0
aW9uL3hodG1sK3htbCIgfSwKLSAgICB7ICJ3bWwiLCAidGV4dC92bmQud2FwLndtbCIgfSwKLSAg
ICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIgfSwKLSAgICB7IDAsIDAgfQot
fTsKLQotU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyAmZXh0KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBT
dHJpbmcgcyA9IGV4dC5sb3dlcigpOwotICAgIGNvbnN0IEV4dGVuc2lvbk1hcCAqZSA9IGV4dGVu
c2lvbk1hcDsKLSAgICB3aGlsZSAoZS0+ZXh0ZW5zaW9uKSB7Ci0gICAgICAgIGlmIChzID09IGUt
PmV4dGVuc2lvbikKLSAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsKLSAgICAgICAgKytl
OwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUoY29uc3QgU3RyaW5nJikKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGYxYzFjYzgzYTAyMzQ5OGMxYWIyYjg0ZGMxMDllOWE5YzVmODUwYzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZwotICogIENvcHlyaWdodCAoQykgMjAxMCBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDEw
IENvbGxhYm9yYSBMdGQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9u
aW5nLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUGFz
c1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+IE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3Jl
YXRlKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNYWluRnJhbWVTY3JvbGxi
YXJHdGsoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uKSk7Ci19Ci0KLS8vIEEgTWFpbkZyYW1l
U2Nyb2xsYmFyIGlzIGp1c3QgYSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyLiBPdGhlcndpc2UgaXQg
aXMgZnVsbHkKLS8vIGZ1bmN0aW9uYWwuIEEgbm9uLXBhaW50aW5nIHNjcm9sbGJhciBhbGxvd3Mg
YSBtYWluLWZyYW1lIFNjcm9sbFZpZXcgdG8gdXNlCi0vLyBhIGNvbnRhaW5pbmcgR3RrU2Nyb2xs
ZWRXaW5kb3cgYXMgaXRzIHVzZXIgaW50ZXJmYWNlLiBUaGUgQ2hyb21lQ2xpZW50IGluIHRoZQot
Ly8gV2ViS2l0IGxheWVyIGp1c3QgbGlzdGVucyBmb3Igc2Nyb2xsaW5nIGFuZCBzaXppbmcgY2hh
bmdlcyBhbmQgdXBkYXRlcyBpdHMKLS8vIGNvbnRhaW5lciAodGhlIEd0a1Njcm9sbGVkV2luZG93
KSBhY2NvcmRpbmdseS4gVGhlIFNjcm9sbFZpZXcgaXMgcmVzcG9uc2libGUKLS8vIGZvciBkZWNp
ZGluZyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBNYWluRnJhbWVTY3JvbGxiYXIgb3IgbmF0
aXZlIHNjcm9sbGJhci4KLU1haW5GcmFtZVNjcm9sbGJhckd0azo6TWFpbkZyYW1lU2Nyb2xsYmFy
R3RrKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCi0gICAgOiBTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGFrZSB1cCBh
bnkgc3BhY2UuCi0gICAgcmVzaXplKDAsIDApOwotfQotCi12b2lkIE1haW5GcmFtZVNjcm9sbGJh
ckd0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIC8vIE1haW4gZnJhbWUgc2Nyb2xsYmFycyBhcmUgbm90IHBhaW50ZWQgYnkgV2Vi
Q29yZS4KLSAgICByZXR1cm47Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiOGNiNjM4ZmRhY2M5YjBjMjVjNjA0ODE4NWQ3NTBhNzBmNTQwZjcuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQotICovCi0KLQotI2lmbmRlZiBNYWluRnJhbWVTY3JvbGxiYXJHdGtfaAotI2Rl
ZmluZSBNYWluRnJhbWVTY3JvbGxiYXJHdGtfaAotCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNYWluRnJhbWVTY3JvbGxiYXJHdGsgOiBwdWJsaWMgU2Nyb2xsYmFyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+IGNyZWF0ZShTY3JvbGxh
YmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi1wcml2YXRlOgotICAgIE1haW5G
cmFtZVNjcm9sbGJhckd0ayhTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uKTsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFNjcm9sbGJhckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDdhN2EzZjk3OTk1MGFmZDhhNjhkYTRjMDE1ZjMxODk0OTRjMzFiOTguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGFzdGVib2FyZC5oIgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCi0jaW5jbHVkZSAiRGF0
YU9iamVjdEd0ay5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
LSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgot
I2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJt
YXJrdXAuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
LSNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCi17Ci0gICAgc3Rh
dGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOwotICAgIHJldHVy
biBwYXN0ZWJvYXJkOwotfQotCi1QYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKLXsKLX0KLQotdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBj
YW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQotewotICAgIFBhc3RlYm9hcmRIZWxw
ZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7
Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9h
cmQoZnJhbWUpOwotCi0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RH
dGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7
Ci0KLSAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0
KCkpOwotICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5n
ZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMp
KTsKLSAgICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkLCBjYW5TbWFy
dENvcHlPckRlbGV0ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFz
dGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Ci19Ci0KLXZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRp
b24gc21hcnRSZXBsYWNlT3B0aW9uKQotewotICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0g
Z3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwg
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3Qg
PSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBkYXRhT2JqZWN0
LT5jbGVhckFsbCgpOwotCi0gICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0ZXh0KTsKLSAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKGNsaXBib2FyZCwKLSAgICAgICAgKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFy
dFJlcGxhY2UpID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJv
YXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJk
Ojp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKTsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0
Q3VycmVudENsaXBib2FyZChmcmFtZSk7Ci0KLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0
ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgZGF0YU9iamVj
dC0+Y2xlYXJBbGwoKTsKLQotICAgIGRhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKLSAg
ICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKLX0KLQotc3RhdGlj
IEtVUkwgZ2V0VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgLy8gRklYTUU6IExh
dGVyIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hh
bmNlcyBhcmUgYWxsIHBsYXRmb3JtcyB3YW50IGl0LgotICAgIEF0b21pY1N0cmluZyB1cmxTdHJp
bmc7Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0
cik7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05h
bWVzOjppbWFnZVRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKS0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLSNlbmRpZgotICAg
IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpIHsKLSAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgdXJsU3RyaW5nID0g
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2Rl
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXModXJsU3RyaW5nKSk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBu
b2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBBU1NFUlQobm9k
ZSk7Ci0KLSAgICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
SW1hZ2UoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9
IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8
fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgSW1h
Z2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotICAg
IEFTU0VSVChpbWFnZSk7Ci0KLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlw
Ym9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxF
Q1RJT05fQ0xJUEJPQVJEKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9i
amVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJB
bGwoKTsKLQotICAgIEtVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VOb2RlKG5vZGUpOwotICAgIGlm
ICghdXJsLmlzRW1wdHkoKSkgewotICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRs
ZSk7Ci0KLSAgICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwot
ICAgIH0KLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2Ut
PmdldEdka1BpeGJ1ZigpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkp
OwotCi0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlQ2xpcGJvYXJkKENsaXBib2FyZCogY2xpcGJvYXJkKQotewotICAgIEd0a0NsaXBib2FyZCog
Z3RrQ2xpcGJvYXJkID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+Y2xp
cGJvYXJkKCk7Ci0gICAgaWYgKGd0a0NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhndGtD
bGlwYm9hcmQpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKLXsKLSAgICBndGtfY2xp
cGJvYXJkX2NsZWFyKGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSk7Ci19Ci0KLWJvb2wgUGFzdGVi
b2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsKLSAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRS
ZXBsYWNlKAotICAgICAgICBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpOwotfQotCi1QYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRleHQs
IGJvb2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7Ci0gICAgR3RrQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwot
ICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9h
cmQoY2xpcGJvYXJkKTsKLSAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2Fy
ZCk7Ci0KLSAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotCi0gICAgaWYgKGRhdGFPYmplY3Qt
Pmhhc01hcmt1cCgpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVj
dC0+bWFya3VwKCksICIiLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRl
ZCk7Ci0gICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIGNob3Nl
UGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBkYXRhT2JqZWN0LT50
ZXh0KCkpOwotICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21l
bnQucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmcgUGFzdGVi
b2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBQYXN0ZWJvYXJkSGVscGVyKiBo
ZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOwotICAg
IEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZy
YW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0KLSAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRz
KGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQoKTsKLX0KLQotYm9vbCBQ
YXN0ZWJvYXJkOjppc1NlbGVjdGlvbk1vZGUoKSBjb25zdAotewotICAgIHJldHVybiBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT51c2VQcmltYXJ5U2VsZWN0aW9u
Q2xpcGJvYXJkKCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6c2V0U2VsZWN0aW9uTW9kZShib29s
IHNlbGVjdGlvbk1vZGUpCi17Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+c2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChzZWxlY3Rpb25Nb2Rl
KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3Rl
Ym9hcmRIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRI
ZWxwZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmE5NzU0MzcwNzhjYmVi
NjgxMTE5OWYxZGVjMjUwOTE4YmE4MzE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVs
cGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0KLSNpbmNsdWRlICJD
aHJvbWUuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlBhc3RlYm9hcmQuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR2RrQXRvbSB0ZXh0UGxhaW5BdG9tOwotc3RhdGljIEdk
a0F0b20gbWFya3VwQXRvbTsKLXN0YXRpYyBHZGtBdG9tIG5ldHNjYXBlVVJMQXRvbTsKLXN0YXRp
YyBHZGtBdG9tIHVyaUxpc3RBdG9tOwotc3RhdGljIEdka0F0b20gc21hcnRQYXN0ZUF0b207Ci1z
dGF0aWMgU3RyaW5nIGdNYXJrdXBQcmVmaXg7Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZU1hcmt1cFBy
ZWZpeChTdHJpbmcmIG1hcmt1cCkKLXsKLSAgICAvLyBUaGUgbWFya3VwIHByZWZpeCBpcyBub3Qg
aGFybWZ1bCwgYnV0IHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBzdHJpbmcgYW55d2F5LCBzbyB0aGF0
Ci0gICAgLy8gd2UgY2FuIGhhdmUgY29uc2lzdGVudCByZXN1bHRzIHdpdGggb3RoZXIgcG9ydHMg
ZHVyaW5nIHRoZSBsYXlvdXQgdGVzdHMuCi0gICAgaWYgKG1hcmt1cC5zdGFydHNXaXRoKGdNYXJr
dXBQcmVmaXgpKQotICAgICAgICBtYXJrdXAucmVtb3ZlKDAsIGdNYXJrdXBQcmVmaXgubGVuZ3Ro
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbml0R2RrQXRvbXMoKQotewotICAgIHN0YXRpYyBnYm9v
bGVhbiBpbml0aWFsaXplZCA9IEZBTFNFOwotCi0gICAgaWYgKGluaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbml0aWFsaXplZCA9IFRSVUU7Ci0KLSAgICB0ZXh0UGxhaW5BdG9t
ID0gZ2RrX2F0b21faW50ZXJuKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiLCBGQUxTRSk7Ci0g
ICAgbWFya3VwQXRvbSA9IGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpOwotICAg
IG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9tX2ludGVybigiX05FVFNDQVBFX1VSTCIsIEZBTFNF
KTsKLSAgICB1cmlMaXN0QXRvbSA9IGdka19hdG9tX2ludGVybigidGV4dC91cmktbGlzdCIsIEZB
TFNFKTsKLSAgICBzbWFydFBhc3RlQXRvbSA9IGdka19hdG9tX2ludGVybigiYXBwbGljYXRpb24v
dm5kLndlYmtpdGd0ay5zbWFydHBhc3RlIiwgRkFMU0UpOwotICAgIGdNYXJrdXBQcmVmaXggPSAi
PG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9dXRmLThcIj4iOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyKiBQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQ
YXN0ZWJvYXJkSGVscGVyLCBkZWZhdWx0SGVscGVyLCAoKSk7Ci0gICAgcmV0dXJuICZkZWZhdWx0
SGVscGVyOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyOjpQYXN0ZWJvYXJkSGVscGVyKCkKLSAgICA6
IG1fdGFyZ2V0TGlzdChndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApKQotICAgICwgbV91c2VQcmlt
YXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZhbHNlKQotewotICAgIGluaXRHZGtBdG9tcygpOwotCi0g
ICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJv
YXJkSGVscGVyOjpUYXJnZXRUeXBlVGV4dCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3Rh
cmdldExpc3QsIG1hcmt1cEF0b20sIDAsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVNYXJr
dXApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMobV90YXJnZXRMaXN0LCBQ
YXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlVVJJTGlzdCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0
X2FkZChtX3RhcmdldExpc3QsIG5ldHNjYXBlVVJMQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBlcjo6
VGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3Rh
cmdldHMobV90YXJnZXRMaXN0LCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlSW1hZ2UsIFRS
VUUpOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhlbHBlcigpCi17Ci0gICAg
Z3RrX3RhcmdldF9saXN0X3VucmVmKG1fdGFyZ2V0TGlzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
R2RrRGlzcGxheSogZGlzcGxheUZyb21GcmFtZShGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJU
KGZyYW1lKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBBU1NFUlQocGFn
ZSk7Ci0gICAgQ2hyb21lKiBjaHJvbWUgPSBwYWdlLT5jaHJvbWUoKTsKLSAgICBBU1NFUlQoY2hy
b21lKTsKLSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50ID0gY2hyb21lLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKTsKLSAgICByZXR1cm4gY2xpZW50ID8gZ3RrX3dpZGdldF9nZXRfZGlzcGxheShj
bGllbnQpIDogZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKTsKLX0KLQotR3RrQ2xpcGJvYXJkKiBQ
YXN0ZWJvYXJkSGVscGVyOjpnZXRDdXJyZW50Q2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkKLXsKLSAg
ICBpZiAobV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKQotICAgICAgICByZXR1cm4gZ2V0
UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChmcmFtZSk7Ci0gICAgcmV0dXJuIGdldENsaXBib2Fy
ZChmcmFtZSk7Ci19Ci0KLUd0a0NsaXBib2FyZCogUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJv
YXJkKEZyYW1lKiBmcmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF9nZXRf
Zm9yX2Rpc3BsYXkoZGlzcGxheUZyb21GcmFtZShmcmFtZSksIEdES19TRUxFQ1RJT05fQ0xJUEJP
QVJEKTsKLX0KLQotR3RrQ2xpcGJvYXJkKiBQYXN0ZWJvYXJkSGVscGVyOjpnZXRQcmltYXJ5U2Vs
ZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKiBmcmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZ3RrX2Ns
aXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZGlzcGxheUZyb21GcmFtZShmcmFtZSksIEdES19TRUxF
Q1RJT05fUFJJTUFSWSk7Ci19Ci0KLUd0a1RhcmdldExpc3QqIFBhc3RlYm9hcmRIZWxwZXI6OnRh
cmdldExpc3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3RhcmdldExpc3Q7Ci19Ci0KLXN0YXRp
YyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhHdGtTZWxlY3Rpb25EYXRhKiBkYXRh
KQotewotICAgIC8vIGdfc3RybmR1cCBndWFyZHMgYWdhaW5zdCBzZWxlY3Rpb24gZGF0YSB0aGF0
IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0gICAgR093blB0cjxnY2hhcj4gbWFya3VwU3RyaW5n
KGdfc3RybmR1cChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihndGtfc2VsZWN0aW9uX2Rh
dGFfZ2V0X2RhdGEoZGF0YSkpLCBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkp
OwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KG1hcmt1cFN0cmluZy5nZXQoKSk7Ci19Ci0K
LXZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJk
KiBjbGlwYm9hcmQpCi17Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmpl
Y3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIEFTU0VSVChkYXRhT2JqZWN0KTsK
LQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9hdmFpbGFibGUoY2xpcGJvYXJk
KSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiB0ZXh0RGF0YShndGtfY2xpcGJvYXJkX3dhaXRf
Zm9yX3RleHQoY2xpcGJvYXJkKSk7Ci0gICAgICAgIGlmICh0ZXh0RGF0YSkKLSAgICAgICAgICAg
IGRhdGFPYmplY3QtPnNldFRleHQoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0RGF0YS5nZXQoKSkpOwot
ICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShj
bGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBk
YXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIG1hcmt1cEF0
b20pKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJp
bmcoZGF0YSkpOwotICAgICAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7Ci0gICAg
ICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKLSAgICAgICAgICAgIGd0a19z
ZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGd0
a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgdXJpTGlzdEF0
b20pKSB7Ci0gICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2Fy
ZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIHVyaUxpc3RBdG9tKSkgewotICAgICAgICAg
ICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEp
KTsKLSAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxTZWxlY3Rpb25EYXRhKEd0
a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QpCi17Ci0gICAgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZVRleHQpCi0gICAgICAg
IGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT50
ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOwotCi0gICAgZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRU
eXBlTWFya3VwKSB7Ci0gICAgICAgIC8vIFNvbWUgTGludXggYXBwbGljYXRpb25zIHJlZnVzZSB0
byBhY2NlcHQgcGFzdGVkIG1hcmt1cCB1bmxlc3MgaXQgaXMKLSAgICAgICAgLy8gcHJlZml4ZWQg
YnkgYSBjb250ZW50LXR5cGUgbWV0YSB0YWcuCi0gICAgICAgIENTdHJpbmcgbWFya3VwID0gU3Ry
aW5nKGdNYXJrdXBQcmVmaXggKyBkYXRhT2JqZWN0LT5tYXJrdXAoKSkudXRmOCgpOwotICAgICAg
ICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG1hcmt1cEF0b20sIDgsCi0g
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KG1hcmt1cC5kYXRhKCkp
LCBtYXJrdXAubGVuZ3RoKCkgKyAxKTsKLQotICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRU
eXBlVVJJTGlzdCkgewotICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBkYXRhT2JqZWN0LT51cmlM
aXN0KCkudXRmOCgpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRh
dGEsIHVyaUxpc3RBdG9tLCA4LAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBn
dWNoYXIqPih1cmlMaXN0LmRhdGEoKSksIHVyaUxpc3QubGVuZ3RoKCkgKyAxKTsKLQotICAgIH0g
ZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTmV0c2NhcGVVUkwgJiYgZGF0YU9iamVjdC0+aGFz
VVJMKCkpIHsKLSAgICAgICAgU3RyaW5nIHVybChkYXRhT2JqZWN0LT51cmwoKSk7Ci0gICAgICAg
IFN0cmluZyByZXN1bHQodXJsKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLQotICAg
ICAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChkYXRhT2JqZWN0LT50ZXh0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHVybCk7Ci0KLSAgICAgICAgR093blB0cjxnY2hhcj4gcmVzdWx0RGF0YShnX3N0cmR1
cChyZXN1bHQudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0
KHNlbGVjdGlvbkRhdGEsIG5ldHNjYXBlVVJMQXRvbSwgOCwKLSAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4ocmVzdWx0RGF0YS5nZXQoKSksIHN0cmxlbihyZXN1bHRE
YXRhLmdldCgpKSArIDEpOwotCi0gICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVJbWFn
ZSkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF9waXhidWYoc2VsZWN0aW9uRGF0YSwg
ZGF0YU9iamVjdC0+aW1hZ2UoKSk7Ci0KLSAgICBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVT
bWFydFBhc3RlKQotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9u
RGF0YSwgIiIsIC0xKTsKLX0KLQotR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFy
Z2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCwgU21hcnRQYXN0
ZUluY2x1c2lvbiBzaG91bGRJbmx1ZGVTbWFydFBhc3RlKQotewotICAgIEd0a1RhcmdldExpc3Qq
IGxpc3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApOwotCi0gICAgaWYgKGRhdGFPYmplY3Qt
Pmhhc1RleHQoKSkKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobGlz
dCwgVGFyZ2V0VHlwZVRleHQpOwotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKQot
ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QsIG1hcmt1cEF0b20sIDAsIFRhcmdldFR5
cGVNYXJrdXApOwotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVVUklMaXN0
KTsKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAs
IFRhcmdldFR5cGVOZXRzY2FwZVVSTCk7Ci0gICAgfQotCi0gICAgaWYgKGRhdGFPYmplY3QtPmhh
c0ltYWdlKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0
LCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotCi0gICAgaWYgKHNob3VsZElubHVkZVNtYXJ0UGFz
dGUgPT0gSW5jbHVkZVNtYXJ0UGFzdGUpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlz
dCwgc21hcnRQYXN0ZUF0b20sIDAsIFRhcmdldFR5cGVTbWFydFBhc3RlKTsKLQotICAgIHJldHVy
biBsaXN0OwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxEYXRhT2JqZWN0RnJvbURy
b3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEsIGd1aW50IGluZm8sIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QpCi17Ci0gICAgaWYgKCFndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0
YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdka0F0b20gdGFyZ2V0ID0gZ3RrX3NlbGVjdGlv
bl9kYXRhX2dldF90YXJnZXQoZGF0YSk7Ci0gICAgaWYgKHRhcmdldCA9PSB0ZXh0UGxhaW5BdG9t
KQotICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmco
ZGF0YSkpOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBtYXJrdXBBdG9tKSB7Ci0gICAgICAgIFN0
cmluZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIHJl
bW92ZU1hcmt1cFByZWZpeChtYXJrdXApOwotICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAo
bWFya3VwKTsKLSAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSB1cmlMaXN0QXRvbSkgewotICAgICAg
ICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkp
OwotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IG5ldHNjYXBlVVJMQXRvbSkgewotICAgICAgICBT
dHJpbmcgdXJsV2l0aExhYmVsKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBwaWVjZXM7Ci0gICAgICAgIHVybFdpdGhMYWJlbC5zcGxpdCgi
XG4iLCBwaWVjZXMpOwotCi0gICAgICAgIC8vIEdpdmUgcHJlZmVyZW5jZSB0byB0ZXh0L3VyaS1s
aXN0IGhlcmUsIGFzIGl0IGNhbiBob2xkIG1vcmUKLSAgICAgICAgLy8gdGhhbiBvbmUgVVJJIGJ1
dCBzdGlsbCB0YWtlICB0aGUgbGFiZWwgaWYgdGhlcmUgaXMgb25lLgotICAgICAgICBpZiAoIWRh
dGFPYmplY3QtPmhhc1VSSUxpc3QoKSkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxp
c3QocGllY2VzWzBdKTsKLSAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQotICAgICAgICAg
ICAgZGF0YU9iamVjdC0+c2V0VGV4dChwaWVjZXNbMV0pOwotICAgIH0KLX0KLQotVmVjdG9yPEdk
a0F0b20+IFBhc3RlYm9hcmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIC8vIEFsd2F5cyBzZWFyY2gg
Zm9yIHRoZXNlIGNvbW1vbiBhdG9tcy4KLSAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zOwot
ICAgIGRyb3BBdG9tcy5hcHBlbmQodGV4dFBsYWluQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVu
ZChtYXJrdXBBdG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKHVyaUxpc3RBdG9tKTsKLSAgICBk
cm9wQXRvbXMuYXBwZW5kKG5ldHNjYXBlVVJMQXRvbSk7Ci0KLSAgICAvLyBGb3IgaW1hZ2VzLCB0
cnkgdG8gZmluZCB0aGUgbW9zdCBhcHBsaWNhYmxlIGltYWdlIHR5cGUuCi0gICAgR1JlZlB0cjxH
dGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkp
OwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJn
ZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIEdka0F0b20gYXRvbSA9IGd0a19kcmFnX2Rlc3RfZmlu
ZF90YXJnZXQod2lkZ2V0LCBjb250ZXh0LCBsaXN0LmdldCgpKTsKLSAgICBpZiAoYXRvbSAhPSBH
REtfTk9ORSkKLSAgICAgICAgZHJvcEF0b21zLmFwcGVuZChhdG9tKTsKLQotICAgIHJldHVybiBk
cm9wQXRvbXM7Ci19Ci0KLXN0YXRpYyBEYXRhT2JqZWN0R3RrKiBzZXR0aW5nQ2xpcGJvYXJkRGF0
YU9iamVjdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2so
R3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEd0a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEs
IGd1aW50IGluZm8sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIEFTU0VS
VChkYXRhT2JqZWN0KTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkYXRhT2JqZWN0
KTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0Ns
aXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRlciBkYXRhKQotewotICAgIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAg
ICBBU1NFUlQoZGF0YU9iamVjdCk7Ci0KLSAgICAvLyBPbmx5IGNsZWFyIHRoZSBEYXRhT2JqZWN0
IGZvciB0aGlzIGNsaXBib2FyZCBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBzZXR0aW5nIGl0Lgot
ICAgIGlmIChkYXRhT2JqZWN0ICE9IHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0KQotICAgICAg
ICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxHQ2xvc3VyZSo+KGRh
dGEpOwotICAgIEdWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gezAsIHt7MH19fTsKLSAgICBnX3ZhbHVl
X2luaXQoJmZpcnN0QXJndW1lbnQsIEdfVFlQRV9QT0lOVEVSKTsKLSAgICBnX3ZhbHVlX3NldF9w
b2ludGVyKCZmaXJzdEFyZ3VtZW50LCBjbGlwYm9hcmQpOwotICAgIGdfY2xvc3VyZV9pbnZva2Uo
Y2FsbGJhY2ssIDAsIDEsICZmaXJzdEFyZ3VtZW50LCAwKTsKLSAgICBnX2Nsb3N1cmVfdW5yZWYo
Y2FsbGJhY2spOwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OndyaXRlQ2xpcGJvYXJkQ29u
dGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIFNtYXJ0UGFzdGVJbmNsdXNpb24gaW5jbHVk
ZVNtYXJ0UGFzdGUsIEdDbG9zdXJlKiBjYWxsYmFjaykKLXsKLSAgICBEYXRhT2JqZWN0R3RrKiBk
YXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAg
R3RrVGFyZ2V0TGlzdCogbGlzdCA9IHRhcmdldExpc3RGb3JEYXRhT2JqZWN0KGRhdGFPYmplY3Qs
IGluY2x1ZGVTbWFydFBhc3RlKTsKLQotICAgIGludCBudW1iZXJPZlRhcmdldHM7Ci0gICAgR3Rr
VGFyZ2V0RW50cnkqIHRhYmxlID0gZ3RrX3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0KGxpc3Qs
ICZudW1iZXJPZlRhcmdldHMpOwotCi0gICAgaWYgKG51bWJlck9mVGFyZ2V0cyA+IDAgJiYgdGFi
bGUpIHsKLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSBkYXRhT2JqZWN0Owot
Ci0gICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShjbGlwYm9hcmQsIHRhYmxlLCBu
dW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNr
LCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNhbGxiYWNrKTsKLSAgICAgICAgZ3Rr
X2NsaXBib2FyZF9zZXRfY2FuX3N0b3JlKGNsaXBib2FyZCwgMCwgMCk7Ci0KLSAgICAgICAgc2V0
dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSAwOwotCi0gICAgfSBlbHNlCi0gICAgICAgIGd0a19j
bGlwYm9hcmRfY2xlYXIoY2xpcGJvYXJkKTsKLQotICAgIGlmICh0YWJsZSkKLSAgICAgICAgZ3Rr
X3RhcmdldF90YWJsZV9mcmVlKHRhYmxlLCBudW1iZXJPZlRhcmdldHMpOwotICAgIGd0a190YXJn
ZXRfbGlzdF91bnJlZihsaXN0KTsKLX0KLQotYm9vbCBQYXN0ZWJvYXJkSGVscGVyOjpjbGlwYm9h
cmRDb250ZW50U3VwcG9ydHNTbWFydFJlcGxhY2UoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCi17
Ci0gICAgcmV0dXJuIGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBi
b2FyZCwgc21hcnRQYXN0ZUF0b20pOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0MjM4ZjgwZGQ4MWZjZTZmNzRmOWVkMjU2NzQxYzQ2YmY4N2Q4OTViLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEx1Y2EgQnJ1bm8gPGxldGhhbG1hbjg4QGdtYWlsLmNv
bT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICog
Q29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jaWZuZGVmIFBhc3RlYm9hcmRIZWxwZXJfaAotI2RlZmluZSBQYXN0ZWJvYXJkSGVs
cGVyX2gKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRGF0YU9iamVjdEd0azsKLQotY2xhc3MgUGFzdGVib2FyZEhlbHBlciB7Ci1wdWJsaWM6Ci0g
ICAgUGFzdGVib2FyZEhlbHBlcigpOwotICAgIHZpcnR1YWwgflBhc3RlYm9hcmRIZWxwZXIoKTsK
LSAgICBzdGF0aWMgUGFzdGVib2FyZEhlbHBlciogZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsK
LQotICAgIHZvaWQgc2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChib29sIHVzZVByaW1h
cnkpIHsgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkID0gdXNlUHJpbWFyeTsgfQotICAg
IGJvb2wgdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCgpIHsgcmV0dXJuIG1fdXNlUHJpbWFy
eVNlbGVjdGlvbkNsaXBib2FyZDsgfQotCi0gICAgZW51bSBTbWFydFBhc3RlSW5jbHVzaW9uIHsg
SW5jbHVkZVNtYXJ0UGFzdGUsIERvTm90SW5jbHVkZVNtYXJ0UGFzdGUgfTsKLQotICAgIEd0a0Ns
aXBib2FyZCogZ2V0Q3VycmVudENsaXBib2FyZChGcmFtZSopOwotICAgIEd0a0NsaXBib2FyZCog
Z2V0Q2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7Ci0gICAgR3RrQ2xpcGJvYXJkKiBnZXRQcmltYXJ5
U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7Ci0gICAgR3RrVGFyZ2V0TGlzdCogdGFy
Z2V0TGlzdCgpIGNvbnN0OwotICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3RGb3JEYXRhT2Jq
ZWN0KERhdGFPYmplY3RHdGsqLCBTbWFydFBhc3RlSW5jbHVzaW9uID0gRG9Ob3RJbmNsdWRlU21h
cnRQYXN0ZSk7Ci0gICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwg
Z3VpbnQsIERhdGFPYmplY3RHdGsqKTsKLSAgICB2b2lkIGZpbGxEYXRhT2JqZWN0RnJvbURyb3BE
YXRhKEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCwgRGF0YU9iamVjdEd0ayopOwotICAgIFZlY3Rv
cjxHZGtBdG9tPiBkcm9wQXRvbXNGb3JDb250ZXh0KEd0a1dpZGdldCosIEdka0RyYWdDb250ZXh0
Kik7Ci0gICAgdm9pZCB3cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCosIFNtYXJ0
UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1ZGVTbWFydFBhc3RlLCBHQ2xvc3VyZSogPSAwKTsK
LSAgICB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCopOwotCi0gICAgZW51
bSBQYXN0ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVNYXJrdXAsIFRhcmdldFR5cGVUZXh0
LCBUYXJnZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklMaXN0LCBUYXJnZXRUeXBlTmV0c2NhcGVV
UkwsIFRhcmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRUeXBlVW5rbm93biB9OwotICAgIGJvb2wg
Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRSZXBsYWNlKEd0a0NsaXBib2FyZCopOwotCi1w
cml2YXRlOgotICAgIEd0a1RhcmdldExpc3QqIG1fdGFyZ2V0TGlzdDsKLSAgICBib29sIG1fdXNl
UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFBhc3RlYm9h
cmRIZWxwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRm
b3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxh
dGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzA2ZDZlMjVjOTkwMDVhMjQyMDBjYTlkNGYwNTAyNTVmZTIyZjRjNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYzMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0KLSNpbmNsdWRl
ICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgotCi0j
aW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6
IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKLS8v
IG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBz
dGF0ZW1lbnRzCi0vLyBhdCBidWlsZCB0aW1lLgotU3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUodW5zaWduZWQga2V5Q29kZSkKLXsKLSAgICBz
d2l0Y2ggKGtleUNvZGUpIHsKLSAgICAgICAgY2FzZSBHREtfTWVudToKLSAgICAgICAgY2FzZSBH
REtfQWx0X0w6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9SOgotICAgICAgICAgICAgcmV0dXJuICJB
bHQiOwotICAgICAgICBjYXNlIEdES19DbGVhcjoKLSAgICAgICAgICAgIHJldHVybiAiQ2xlYXIi
OwotICAgICAgICBjYXNlIEdES19Eb3duOgotICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKLSAg
ICAgICAgICAgIC8vICJFbmQiCi0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJl
dHVybiAiRW5kIjsKLSAgICAgICAgICAgIC8vICJFbnRlciIKLSAgICAgICAgY2FzZSBHREtfSVNP
X0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfUmV0
dXJuOgotICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7Ci0gICAgICAgIGNhc2UgR0RLX0V4ZWN1
dGU6Ci0gICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOwotICAgICAgICBjYXNlIEdES19GMToK
LSAgICAgICAgICAgIHJldHVybiAiRjEiOwotICAgICAgICBjYXNlIEdES19GMjoKLSAgICAgICAg
ICAgIHJldHVybiAiRjIiOwotICAgICAgICBjYXNlIEdES19GMzoKLSAgICAgICAgICAgIHJldHVy
biAiRjMiOwotICAgICAgICBjYXNlIEdES19GNDoKLSAgICAgICAgICAgIHJldHVybiAiRjQiOwot
ICAgICAgICBjYXNlIEdES19GNToKLSAgICAgICAgICAgIHJldHVybiAiRjUiOwotICAgICAgICBj
YXNlIEdES19GNjoKLSAgICAgICAgICAgIHJldHVybiAiRjYiOwotICAgICAgICBjYXNlIEdES19G
NzoKLSAgICAgICAgICAgIHJldHVybiAiRjciOwotICAgICAgICBjYXNlIEdES19GODoKLSAgICAg
ICAgICAgIHJldHVybiAiRjgiOwotICAgICAgICBjYXNlIEdES19GOToKLSAgICAgICAgICAgIHJl
dHVybiAiRjkiOwotICAgICAgICBjYXNlIEdES19GMTA6Ci0gICAgICAgICAgICByZXR1cm4gIkYx
MCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMToKLSAgICAgICAgICAgIHJldHVybiAiRjExIjsKLSAg
ICAgICAgY2FzZSBHREtfRjEyOgotICAgICAgICAgICAgcmV0dXJuICJGMTIiOwotICAgICAgICBj
YXNlIEdES19GMTM6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMyI7Ci0gICAgICAgIGNhc2UgR0RL
X0YxNDoKLSAgICAgICAgICAgIHJldHVybiAiRjE0IjsKLSAgICAgICAgY2FzZSBHREtfRjE1Ogot
ICAgICAgICAgICAgcmV0dXJuICJGMTUiOwotICAgICAgICBjYXNlIEdES19GMTY6Ci0gICAgICAg
ICAgICByZXR1cm4gIkYxNiI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNzoKLSAgICAgICAgICAgIHJl
dHVybiAiRjE3IjsKLSAgICAgICAgY2FzZSBHREtfRjE4OgotICAgICAgICAgICAgcmV0dXJuICJG
MTgiOwotICAgICAgICBjYXNlIEdES19GMTk6Ci0gICAgICAgICAgICByZXR1cm4gIkYxOSI7Ci0g
ICAgICAgIGNhc2UgR0RLX0YyMDoKLSAgICAgICAgICAgIHJldHVybiAiRjIwIjsKLSAgICAgICAg
Y2FzZSBHREtfRjIxOgotICAgICAgICAgICAgcmV0dXJuICJGMjEiOwotICAgICAgICBjYXNlIEdE
S19GMjI6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoK
LSAgICAgICAgICAgIHJldHVybiAiRjIzIjsKLSAgICAgICAgY2FzZSBHREtfRjI0OgotICAgICAg
ICAgICAgcmV0dXJuICJGMjQiOwotICAgICAgICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAg
cmV0dXJuICJIZWxwIjsKLSAgICAgICAgY2FzZSBHREtfSG9tZToKLSAgICAgICAgICAgIHJldHVy
biAiSG9tZSI7Ci0gICAgICAgIGNhc2UgR0RLX0luc2VydDoKLSAgICAgICAgICAgIHJldHVybiAi
SW5zZXJ0IjsKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiAiTGVm
dCI7Ci0gICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiAiUGFn
ZURvd24iOwotICAgICAgICBjYXNlIEdES19QYWdlX1VwOgotICAgICAgICAgICAgcmV0dXJuICJQ
YWdlVXAiOwotICAgICAgICBjYXNlIEdES19QYXVzZToKLSAgICAgICAgICAgIHJldHVybiAiUGF1
c2UiOwotICAgICAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVuOgotICAgICAgICBjYXNlIEdE
S19QcmludDoKLSAgICAgICAgICAgIHJldHVybiAiUHJpbnRTY3JlZW4iOwotICAgICAgICBjYXNl
IEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiAiUmlnaHQiOwotICAgICAgICBjYXNlIEdE
S19TZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4gIlNlbGVjdCI7Ci0gICAgICAgIGNhc2UgR0RL
X1VwOgotICAgICAgICAgICAgcmV0dXJuICJVcCI7Ci0gICAgICAgICAgICAvLyBTdGFuZGFyZCBz
YXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgotICAgICAgICBjYXNlIEdES19EZWxldGU6Ci0g
ICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7Ci0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToK
LSAgICAgICAgICAgIHJldHVybiAiVSswMDA4IjsKLSAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRf
VGFiOgotICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6Ci0gICAgICAgIGNhc2UgR0RLX1Rh
YjoKLSAgICAgICAgICAgIHJldHVybiAiVSswMDA5IjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmlj
b2RlKGdka19rZXl2YWxfdG9fdXBwZXIoa2V5Q29kZSkpKTsKLSAgICB9Ci19Ci0KLWludCBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBr
ZXljb2RlKQotewotICAgIHN3aXRjaCAoa2V5Y29kZSkgewotICAgICAgICBjYXNlIEdES19LUF8w
OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAw
IGtleQotICAgICAgICBjYXNlIEdES19LUF8xOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQotICAgICAgICBjYXNlIEdES19LUF8yOgot
ICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzM6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFE
MzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQotICAgICAgICBjYXNlIEdES19LUF80Ogot
ICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1
OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNjoKLSAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0tQXzc6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsg
Ly8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQotICAgICAgICBjYXNlIEdES19LUF84OgotICAg
ICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkK
LSAgICAgICAgY2FzZSBHREtfS1BfOToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAv
LyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5
OgotICAgICAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQot
ICAgICAgICBjYXNlIEdES19LUF9BZGQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAo
NkIpIEFkZCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0tQX0RlY2ltYWw6Ci0gICAgICAgICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNp
bWFsIGtleQotICAgICAgICBjYXNlIEdES19LUF9EaXZpZGU6Ci0gICAgICAgICAgICByZXR1cm4g
VktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBrZXkKLQotICAgICAgICBjYXNlIEdES19LUF9QYWdl
X1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ORVhU
OyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfRW5kOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQ
X0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQotICAg
ICAgICBjYXNlIEdES19LUF9MZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgy
NSkgTEVGVCBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfVXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX1Jp
Z2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtl
eQotICAgICAgICBjYXNlIEdES19LUF9Eb3duOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047
IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKLQotICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0gICAgICAg
IGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKLSAgICAgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgot
ICAgICAgICBjYXNlIEdES19UYWI6Ci0gICAgICAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkp
IFRBQiBrZXkKLSAgICAgICAgY2FzZSBHREtfQ2xlYXI6Ci0gICAgICAgICAgICByZXR1cm4gVktf
Q0xFQVI7IC8vICgwQykgQ0xFQVIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKLSAg
ICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Ci0gICAgICAgIGNhc2UgR0RLX1JldHVybjoKLSAgICAg
ICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4ga2V5Ci0KLSAgICAgICAgICAg
IC8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5Ci0gICAgICAgICAgICAvLyBWS19DT05UUk9MICgx
MSkgQ1RSTCBrZXkKLQotICAgICAgICBjYXNlIEdES19NZW51OgotICAgICAgICAgICAgcmV0dXJu
IFZLX0FQUFM7ICAvLyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCi0K
LSAgICAgICAgICAgIC8vIFZLX01FTlUgKDEyKSBBTFQga2V5Ci0KLSAgICAgICAgY2FzZSBHREtf
UGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKLSAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFM
OyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKLSAgICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgotICAg
ICAgICBjYXNlIEdES19LYW5hX1NoaWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8v
ICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKLSAgICAgICAgY2FzZSBH
REtfSGFuZ3VsOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgx
NSkgSU1FIEhhbmd1bCBtb2RlCi0gICAgICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5q
YSBtb2RlCi0gICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCi0gICAg
ICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKLSAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsg
Ly8gKDE5KSBJTUUgSGFuamEgbW9kZQotICAgICAgICBjYXNlIEdES19LYW5qaToKLSAgICAgICAg
ICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2FuamkgbW9kZQotICAgICAgICBjYXNl
IEdES19Fc2NhcGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBr
ZXkKLSAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAotICAgICAgICAg
ICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0Ci0gICAgICAgICAgICAvLyBW
S19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Ci0gICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgx
RikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKLSAgICAgICAgY2FzZSBHREtfc3BhY2U6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKLSAgICAgICAgY2FzZSBH
REtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQ
IGtleQotICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gVktf
TkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5Ci0gICAgICAgIGNhc2UgR0RLX0VuZDoKLSAgICAg
ICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQotICAgICAgICBjYXNlIEdES19I
b21lOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKLSAgICAg
ICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExF
RlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAgICAgICAgICAgcmV0dXJuIFZL
X1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19SaWdodDoKLSAgICAg
ICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKLSAgICAgICAg
Y2FzZSBHREtfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04g
QVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBW
S19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQotICAgICAgICBjYXNlIEdES19QcmludDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19TTkFQU0hPVDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsv
LyAoMkIpIEVYRUNVVEUga2V5Ci0gICAgICAgIGNhc2UgR0RLX0luc2VydDoKLSAgICAgICAgY2Fz
ZSBHREtfS1BfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJ
TlMga2V5Ci0gICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAgY2FzZSBHREtfS1BfRGVs
ZXRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAgICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBI
RUxQIGtleQotICAgICAgICBjYXNlIEdES18wOgotICAgICAgICBjYXNlIEdES19wYXJlbnJpZ2h0
OgotICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzApIDApIGtleQotICAgICAgICBj
YXNlIEdES18xOgotICAgICAgICBjYXNlIEdES19leGNsYW06Ci0gICAgICAgICAgICByZXR1cm4g
VktfMTsgLy8gICgzMSkgMSAhIGtleQotICAgICAgICBjYXNlIEdES18yOgotICAgICAgICBjYXNl
IEdES19hdDoKLSAgICAgICAgICAgIHJldHVybiBWS18yOyAvLyAgKDMyKSAyICYga2V5Ci0gICAg
ICAgIGNhc2UgR0RLXzM6Ci0gICAgICAgIGNhc2UgR0RLX251bWJlcnNpZ246Ci0gICAgICAgICAg
ICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2FzZSAnIyc7Ci0gICAgICAgIGNhc2UgR0RLXzQ6
Ci0gICAgICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOwotICAgICAgICAg
ICAgcmV0dXJuIFZLXzQ7Ci0gICAgICAgIGNhc2UgR0RLXzU6Ci0gICAgICAgIGNhc2UgR0RLX3Bl
cmNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkgICclJwotICAg
ICAgICBjYXNlIEdES182OgotICAgICAgICBjYXNlIEdES19hc2NpaWNpcmN1bToKLSAgICAgICAg
ICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2IGtleSAgJ14nCi0gICAgICAgIGNhc2UgR0RLXzc6
Ci0gICAgICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoKLSAgICAgICAgICAgIHJldHVybiBWS183OyAv
LyAgKDM3KSA3IGtleSAgY2FzZSAnJicKLSAgICAgICAgY2FzZSBHREtfODoKLSAgICAgICAgY2Fz
ZSBHREtfYXN0ZXJpc2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfODsgLy8gICgzOCkgOCBrZXkg
ICcqJwotICAgICAgICBjYXNlIEdES185OgotICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkgJygnCi0gICAgICAgIGNhc2Ug
R0RLX2E6Ci0gICAgICAgIGNhc2UgR0RLX0E6Ci0gICAgICAgICAgICByZXR1cm4gVktfQTsgLy8g
ICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKLSAgICAgICAgY2Fz
ZSBHREtfYjoKLSAgICAgICAgY2FzZSBHREtfQjoKLSAgICAgICAgICAgIHJldHVybiBWS19COyAv
LyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2FzZSAnQic6IHJldHVybiAweDQyOwotICAgICAgICBj
YXNlIEdES19jOgotICAgICAgICBjYXNlIEdES19DOgotICAgICAgICAgICAgcmV0dXJuIFZLX0M7
IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7Ci0gICAgICAg
IGNhc2UgR0RLX2Q6Ci0gICAgICAgIGNhc2UgR0RLX0Q6Ci0gICAgICAgICAgICByZXR1cm4gVktf
RDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKLSAgICAg
ICAgY2FzZSBHREtfZToKLSAgICAgICAgY2FzZSBHREtfRToKLSAgICAgICAgICAgIHJldHVybiBW
S19FOyAvLyAgKDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OwotICAg
ICAgICBjYXNlIEdES19mOgotICAgICAgICBjYXNlIEdES19GOgotICAgICAgICAgICAgcmV0dXJu
IFZLX0Y7IC8vICAoNDYpIEYga2V5IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7Ci0g
ICAgICAgIGNhc2UgR0RLX2c6Ci0gICAgICAgIGNhc2UgR0RLX0c6Ci0gICAgICAgICAgICByZXR1
cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2FzZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsK
LSAgICAgICAgY2FzZSBHREtfaDoKLSAgICAgICAgY2FzZSBHREtfSDoKLSAgICAgICAgICAgIHJl
dHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4
OwotICAgICAgICBjYXNlIEdES19pOgotICAgICAgICBjYXNlIEdES19JOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4
NDk7Ci0gICAgICAgIGNhc2UgR0RLX2o6Ci0gICAgICAgIGNhc2UgR0RLX0o6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfSjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4g
MHg0QTsKLSAgICAgICAgY2FzZSBHREtfazoKLSAgICAgICAgY2FzZSBHREtfSzoKLSAgICAgICAg
ICAgIHJldHVybiBWS19LOyAvLyAgKDRCKSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVy
biAweDRCOwotICAgICAgICBjYXNlIEdES19sOgotICAgICAgICBjYXNlIEdES19MOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0
dXJuIDB4NEM7Ci0gICAgICAgIGNhc2UgR0RLX206Ci0gICAgICAgIGNhc2UgR0RLX006Ci0gICAg
ICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiBy
ZXR1cm4gMHg0RDsKLSAgICAgICAgY2FzZSBHREtfbjoKLSAgICAgICAgY2FzZSBHREtfTjoKLSAg
ICAgICAgICAgIHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6
IHJldHVybiAweDRFOwotICAgICAgICBjYXNlIEdES19vOgotICAgICAgICBjYXNlIEdES19POgot
ICAgICAgICAgICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdP
JzogcmV0dXJuIDB4NEY7Ci0gICAgICAgIGNhc2UgR0RLX3A6Ci0gICAgICAgIGNhc2UgR0RLX1A6
Ci0gICAgICAgICAgICByZXR1cm4gVktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2Ug
J1AnOiByZXR1cm4gMHg1MDsKLSAgICAgICAgY2FzZSBHREtfcToKLSAgICAgICAgY2FzZSBHREtf
UToKLSAgICAgICAgICAgIHJldHVybiBWS19ROyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2Fz
ZSAnUSc6IHJldHVybiAweDUxOwotICAgICAgICBjYXNlIEdES19yOgotICAgICAgICBjYXNlIEdE
S19SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBj
YXNlICdSJzogcmV0dXJuIDB4NTI7Ci0gICAgICAgIGNhc2UgR0RLX3M6Ci0gICAgICAgIGNhc2Ug
R0RLX1M6Ci0gICAgICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6
IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKLSAgICAgICAgY2FzZSBHREtfdDoKLSAgICAgICAgY2Fz
ZSBHREtfVDoKLSAgICAgICAgICAgIHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0
JzogY2FzZSAnVCc6IHJldHVybiAweDU0OwotICAgICAgICBjYXNlIEdES191OgotICAgICAgICBj
YXNlIEdES19VOgotICAgICAgICAgICAgcmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2Ug
J3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7Ci0gICAgICAgIGNhc2UgR0RLX3Y6Ci0gICAgICAg
IGNhc2UgR0RLX1Y6Ci0gICAgICAgICAgICByZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2Fz
ZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKLSAgICAgICAgY2FzZSBHREtfdzoKLSAgICAg
ICAgY2FzZSBHREtfVzoKLSAgICAgICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBj
YXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAweDU3OwotICAgICAgICBjYXNlIEdES194OgotICAg
ICAgICBjYXNlIEdES19YOgotICAgICAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5
IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJuIDB4NTg7Ci0gICAgICAgIGNhc2UgR0RLX3k6Ci0g
ICAgICAgIGNhc2UgR0RLX1k6Ci0gICAgICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBr
ZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1cm4gMHg1OTsKLSAgICAgICAgY2FzZSBHREtfejoK
LSAgICAgICAgY2FzZSBHREtfWjoKLSAgICAgICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBa
IGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJldHVybiAweDVBOwotICAgICAgICBjYXNlIEdES19N
ZXRhX0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mg
a2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAgY2FzZSBHREtfTWV0YV9S
OgotICAgICAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkg
KE5hdHVyYWwga2V5Ym9hcmQpCi0gICAgICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVy
IFNsZWVwIGtleQotICAgICAgICAgICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtl
eQotICAgICAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQotICAgICAgICAgICAgLy8gVktfRElW
SURFICg2RikgRGl2aWRlIGtleQotICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBh
Ym92ZQotCi0gICAgICAgIGNhc2UgR0RLX051bV9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZL
X05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfU2Nyb2xs
X0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NL
IGtleQotCi0gICAgICAgIGNhc2UgR0RLX1NoaWZ0X0w6Ci0gICAgICAgICAgICByZXR1cm4gVktf
TFNISUZUOyAvLyAoQTApIExlZnQgU0hJRlQga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NoaWZ0X1I6
Ci0gICAgICAgICAgICByZXR1cm4gVktfUlNISUZUOyAvLyAoQTEpIFJpZ2h0IFNISUZUIGtleQot
ICAgICAgICBjYXNlIEdES19Db250cm9sX0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTENPTlRS
T0w7IC8vIChBMikgTGVmdCBDT05UUk9MIGtleQotICAgICAgICBjYXNlIEdES19Db250cm9sX1I6
Ci0gICAgICAgICAgICByZXR1cm4gVktfUkNPTlRST0w7IC8vIChBMykgUmlnaHQgQ09OVFJPTCBr
ZXkKLSAgICAgICAgY2FzZSBHREtfQWx0X0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTE1FTlU7
IC8vIChBNCkgTGVmdCBNRU5VIGtleQotICAgICAgICBjYXNlIEdES19BbHRfUjoKLSAgICAgICAg
ICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1KSBSaWdodCBNRU5VIGtleQotCi0gICAgICAgICAg
ICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBr
ZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9Y
UDogQnJvd3NlciBGb3J3YXJkIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNI
IChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5Ci0gICAgICAgICAgICAv
LyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkK
LSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBC
cm93c2VyIFNlYXJjaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChB
QikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKLSAgICAgICAgICAgIC8v
IFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQg
SG9tZSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAw
L1hQOiBWb2x1bWUgTXV0ZSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkg
V2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKLSAgICAgICAgICAgIC8vIFZLX1ZPTFVN
RV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQotICAgICAgICAgICAgLy8g
VktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkK
LSAgICAgICAgICAgIC8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6
IFByZXZpb3VzIFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdp
bmRvd3MgMjAwMC9YUDogU3RvcCBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1BM
QVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Ci0gICAg
ICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFp
bCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dz
IDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAx
IChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQotICAgICAgICAg
ICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0
aW9uIDIga2V5Ci0KLSAgICAgICAgICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKLSAgICAgICAg
Y2FzZSBHREtfc2VtaWNvbG9uOgotICAgICAgICBjYXNlIEdES19jb2xvbjoKLSAgICAgICAgICAg
IHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAnOic6IHJldHVybiAweEJBOwotICAg
ICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291
bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Ci0gICAgICAgIGNhc2UgR0RLX3BsdXM6Ci0gICAgICAg
IGNhc2UgR0RLX2VxdWFsOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVTOyAvL2Nhc2Ug
Jz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7Ci0gICAgICAgICAgICAvLyBWS19PRU1fQ09NTUEg
KEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5
Ci0gICAgICAgIGNhc2UgR0RLX2NvbW1hOgotICAgICAgICBjYXNlIEdES19sZXNzOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsgLy9jYXNlICcsJzogY2FzZSAnPCc6IHJldHVybiAw
eEJDOwotICAgICAgICAgICAgLy8gVktfT0VNX01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBG
b3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQotICAgICAgICBjYXNlIEdES19taW51
czoKLSAgICAgICAgY2FzZSBHREtfdW5kZXJzY29yZToKLSAgICAgICAgICAgIHJldHVybiBWS19P
RU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4gMHhCRDsKLSAgICAgICAgICAg
IC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9y
ZWdpb24sIHRoZSAnLicga2V5Ci0gICAgICAgIGNhc2UgR0RLX3BlcmlvZDoKLSAgICAgICAgY2Fz
ZSBHREtfZ3JlYXRlcjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2Ug
Jy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7Ci0gICAgICAgICAgICAvLyBWS19PRU1fMiAoQkYp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcv
Pycga2V5Ci0gICAgICAgIGNhc2UgR0RLX3NsYXNoOgotICAgICAgICBjYXNlIEdES19xdWVzdGlv
bjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMjsgLy9jYXNlICcvJzogY2FzZSAnPyc6IHJl
dHVybiAweEJGOwotICAgICAgICAgICAgLy8gVktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAv
WFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnYH4nIGtleQotICAgICAgICBj
YXNlIEdES19hc2NpaXRpbGRlOgotICAgICAgICBjYXNlIEdES19xdW90ZWxlZnQ6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2FzZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsK
LSAgICAgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYnJh
Y2tldGxlZnQ6Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoKLSAgICAgICAgICAgIHJldHVy
biBWS19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAweERCOwotICAgICAgICAg
ICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0
IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRh
cmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQotICAgICAgICBjYXNlIEdES19iYWNrc2xhc2g6Ci0g
ICAgICAgIGNhc2UgR0RLX2JhcjoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNTsgLy9jYXNl
ICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhEQzsKLSAgICAgICAgICAgIC8vIFZLX09FTV82IChE
RCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
J119JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYnJhY2tldHJpZ2h0OgotICAgICAgICBjYXNlIEdE
S19icmFjZXJpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzog
Y2FzZSAnfSc6IHJldHVybiAweEREOwotICAgICAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2Vk
IGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBX
aW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xl
LXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Ci0gICAgICAgIGNhc2UgR0RLX3F1b3RlcmlnaHQ6Ci0g
ICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV83OyAv
LyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKLSAgICAgICAgICAgIC8vIFZLX09F
TV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4KLSAgICAgICAgICAgIC8vIFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAv
WFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24g
dGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKLSAgICAgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1
KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUg
UFJPQ0VTUyBrZXkKLSAgICAgICAgICAgIC8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9Y
UDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ry
b2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1
YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZ
RE9XTiwgYW5kIFdNX0tFWVVQCi0gICAgICAgICAgICAvLyBWS19BVFROIChGNikgQXR0biBrZXkK
LSAgICAgICAgICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Ci0gICAgICAgICAgICAvLyBW
S19FWFNFTCAoRjgpIEV4U2VsIGtleQotICAgICAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFz
ZSBFT0Yga2V5Ci0gICAgICAgICAgICAvLyBWS19QTEFZIChGQSkgUGxheSBrZXkKLSAgICAgICAg
ICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtleQotICAgICAgICAgICAgLy8gVktfTk9OQU1FIChG
QykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLSAgICAgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBB
MSBrZXkKLSAgICAgICAgICAgIC8vIFZLX09FTV9DTEVBUiAoRkUpIENsZWFyIGtleQotICAgICAg
ICBjYXNlIEdES19GMToKLSAgICAgICAgY2FzZSBHREtfRjI6Ci0gICAgICAgIGNhc2UgR0RLX0Yz
OgotICAgICAgICBjYXNlIEdES19GNDoKLSAgICAgICAgY2FzZSBHREtfRjU6Ci0gICAgICAgIGNh
c2UgR0RLX0Y2OgotICAgICAgICBjYXNlIEdES19GNzoKLSAgICAgICAgY2FzZSBHREtfRjg6Ci0g
ICAgICAgIGNhc2UgR0RLX0Y5OgotICAgICAgICBjYXNlIEdES19GMTA6Ci0gICAgICAgIGNhc2Ug
R0RLX0YxMToKLSAgICAgICAgY2FzZSBHREtfRjEyOgotICAgICAgICBjYXNlIEdES19GMTM6Ci0g
ICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgY2FzZSBHREtfRjE1OgotICAgICAgICBjYXNl
IEdES19GMTY6Ci0gICAgICAgIGNhc2UgR0RLX0YxNzoKLSAgICAgICAgY2FzZSBHREtfRjE4Ogot
ICAgICAgICBjYXNlIEdES19GMTk6Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoKLSAgICAgICAgY2Fz
ZSBHREtfRjIxOgotICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAgIGNhc2UgR0RLX0YyMzoK
LSAgICAgICAgY2FzZSBHREtfRjI0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0YxICsgKGtleWNv
ZGUgLSBHREtfRjEpOwotICAgICAgICBjYXNlIEdES19LRVlfVm9pZFN5bWJvbDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19QUk9DRVNTS0VZOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi19Ci0KLVN0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNp
bmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCB2YWwpCi17Ci0gICAgc3dpdGNoICh2YWwpIHsK
LSAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoK
LSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHIi
KTsKLSAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgotICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygiXHg4Iik7Ci0gICAgICAgIGNhc2UgR0RLX1RhYjoKLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoIlx0Iik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBndW5pY2hhciBjID0gZ2Rr
X2tleXZhbF90b191bmljb2RlKHZhbCk7Ci0gICAgICAgICAgICBnbG9uZyBud2M7Ci0gICAgICAg
ICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBnX3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2Ms
IDApOwotCi0gICAgICAgICAgICBTdHJpbmcgcmV0VmFsOwotICAgICAgICAgICAgaWYgKHVjaGFy
MTYpCi0gICAgICAgICAgICAgICAgcmV0VmFsID0gU3RyaW5nKChVQ2hhciopdWNoYXIxNiwgbndj
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXRWYWwgPSBTdHJpbmcoKTsK
LQotICAgICAgICAgICAgZ19mcmVlKHVjaGFyMTYpOwotCi0gICAgICAgICAgICByZXR1cm4gcmV0
VmFsOwotICAgIH0KLX0KLQotc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9y
R2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIHJldHVybiBldmVudC0+dHlw
ZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZl
bnQ6OktleURvd247Ci19Ci0KLXN0YXRpYyBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZp
ZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIHVuc2lnbmVkIGlu
dCBtb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8
fCBldmVudC0+a2V5dmFsID09IEdES18zMjcwX0JhY2tUYWIpCi0gICAgICAgIG1vZGlmaWVycyB8
PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NP
TlRST0xfTUFTSykKLSAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7
Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAgICAgIG1vZGlmaWVy
cyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19N
RVRBX01BU0spCi0gICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5Owot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVy
cyk7Ci19Ci0KLS8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2
ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBv
c2l0aW9uUmVzdWx0cykKLSAgICA6IFBsYXRmb3JtRXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZl
bnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtLZXlFdmVudChldmVudCksIGN1cnJlbnRUaW1lKCkp
Ci0gICAgLCBtX3RleHQoY29tcG9zaXRpb25SZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/
IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcgOiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
ZXZlbnQtPmtleXZhbCkpCi0gICAgLCBtX3VubW9kaWZpZWRUZXh0KG1fdGV4dCkKLSAgICAsIG1f
a2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkK
LSAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29k
ZShldmVudC0+a2V5dmFsKSkKLSAgICAsIG1fbmF0aXZlVmlydHVhbEtleUNvZGUoZXZlbnQtPmtl
eXZhbCkKLSAgICAsIG1fbWFjQ2hhckNvZGUoMCkKLSAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkK
LSAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtleXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQt
PmtleXZhbCA8PSBHREtfS1BfOSkKLSAgICAsIG1faXNTeXN0ZW1LZXkoZmFsc2UpCi0gICAgLCBt
X2dka0V2ZW50S2V5KGV2ZW50KQotICAgICwgbV9jb21wb3NpdGlvblJlc3VsdHMoY29tcG9zaXRp
b25SZXN1bHRzKQotewotICAgIC8vIFRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBJRSwgd2UgcmV0
dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMgdGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRpb24gcmVz
dWx0cy4KLSAgICBpZiAoY29tcG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKQot
ICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IFZLX1BST0NFU1NLRVk7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0
eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCi17Ci0gICAgLy8gQ2FuIG9ubHkg
Y2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFj
ayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCi0gICAgQVNTRVJUKG1fdHlwZSA9
PSBLZXlEb3duKTsKLSAgICBtX3R5cGUgPSB0eXBlOwotCi0gICAgaWYgKGJhY2t3YXJkQ29tcGF0
aWJpbGl0eU1vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0eXBlID09IFBsYXRmb3Jt
RXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7Ci0gICAgICAg
IG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUGxh
dGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0
ZWQoKSkgewotICAgICAgICAvLyBIYXZpbmcgZW1wdHkgdGV4dCwgcHJldmVudHMgdGhpcyBDaGFy
ICh3aGljaCBpcyBhIERPTSBrZXlwcmVzcykgZXZlbnQKLSAgICAgICAgLy8gZnJvbSBnb2luZyB0
byB0aGUgRE9NLiBLZXlzIHRoYXQgdHJpZ2dlciBjb21wb3NpdGlvbiBldmVudHMgc2hvdWxkIG5v
dAotICAgICAgICAvLyBmaXJlIGtleXByZXNzLgotICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsK
LSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOwotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFs
S2V5Q29kZSA9IDA7Ci0gICAgfQotfQotCi1ib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3Vy
cmVudENhcHNMb2NrU3RhdGUoKQotewotICAgIHJldHVybiBnZGtfa2V5bWFwX2dldF9jYXBzX2xv
Y2tfc3RhdGUoZ2RrX2tleW1hcF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2RpZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29s
JiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJvb2wmIG1ldGFLZXkpCi17Ci0gICAgR2RrTW9kaWZp
ZXJUeXBlIHN0YXRlOwotICAgIGd0a19nZXRfY3VycmVudF9ldmVudF9zdGF0ZSgmc3RhdGUpOwot
Ci0gICAgc2hpZnRLZXkgPSBzdGF0ZSAmIEdES19TSElGVF9NQVNLOwotICAgIGN0cmxLZXkgPSBz
dGF0ZSAmIEdES19DT05UUk9MX01BU0s7Ci0gICAgYWx0S2V5ID0gc3RhdGUgJiBHREtfTU9EMV9N
QVNLOwotICAgIG1ldGFLZXkgPSBzdGF0ZSAmIEdES19NRVRBX01BU0s7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MTAxYzFmYTNkNzI4NjZjYmM5NTNm
ODRiNTcyODU5MzdmMzIxM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLQotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBv
dXQgd2hpY2ggbW9kaWZpZXIgaXMgQWx0IGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0Qx
X01BU0suCi0KLS8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2
ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQo
R2RrRXZlbnRCdXR0b24qIGV2ZW50KQotewotICAgIG1fdGltZXN0YW1wID0gZXZlbnQtPnRpbWU7
Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkp
OwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChp
bnQpZXZlbnQtPnlfcm9vdCk7Ci0KLSAgICBtX21vZGlmaWVycyA9IDA7Ci0gICAgaWYgKGV2ZW50
LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBTaGlmdEtl
eTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbV9t
b2RpZmllcnMgfD0gQ3RybEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFT
SykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUg
JiBHREtfTUVUQV9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBNZXRhS2V5OwotCi0gICAg
c3dpdGNoIChldmVudC0+dHlwZSkgewotICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICBj
YXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAg
Y2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6
Ok1vdXNlUHJlc3NlZDsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVM
RUFTRSkgewotICAgICAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNl
ZDsKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9
IDE7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQot
ICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMjsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5
cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOwot
Ci0gICAgICAgIGlmIChldmVudC0+YnV0dG9uID09IDEpCi0gICAgICAgICAgICBtX2J1dHRvbiA9
IExlZnRCdXR0b247Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMikKLSAgICAg
ICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICBlbHNlIGlmIChldmVudC0+
YnV0dG9uID09IDMpCi0gICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwotICAgICAg
ICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH07Ci19Ci0KLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2
ZW50TW90aW9uKiBtb3Rpb24pCi17Ci0gICAgbV90aW1lc3RhbXAgPSBtb3Rpb24tPnRpbWU7Ci0g
ICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7
Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChp
bnQpbW90aW9uLT55X3Jvb3QpOwotCi0gICAgbV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChtb3Rp
b24tPnN0YXRlICYgR0RLX1NISUZUX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0
S2V5OwotICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAg
bV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19NT0Qx
X01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAobW90aW9uLT5z
dGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7Ci0K
LSAgICBzd2l0Y2ggKG1vdGlvbi0+dHlwZSkgewotICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6
Ci0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7Ci0gICAgICAgIG1f
YnV0dG9uID0gTm9CdXR0b247Ci0gICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH07
Ci0KLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04xX01BU0spCi0gICAgICAgIG1f
YnV0dG9uID0gTGVmdEJ1dHRvbjsKLSAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JV
VFRPTjJfTUFTSykKLSAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247Ci0gICAgZWxzZSBp
ZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04zX01BU0spCi0gICAgICAgIG1fYnV0dG9uID0g
UmlnaHRCdXR0b247Ci19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtU2NyZWVuR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNzg4
MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBjNWY5MTZjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxh
dGZvcm1TY3JlZW5HdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFu
QGltZW5kaW8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBHdGtXaWRnZXQqIGdldFRvcGxldmVsKEd0a1dp
ZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dl
dF90b3BsZXZlbCh3aWRnZXQpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRv
cGxldmVsKSA/IHRvcGxldmVsIDogMDsKLX0KLQotc3RhdGljIEdka1Zpc3VhbCogZ2V0VmlzdWFs
KFdpZGdldCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8g
R1RLX1dJREdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSkgOiAwOwotICAgIGlmICghY29udGFpbmVyKSB7Ci0gICAgICAgIEdka1NjcmVlbiogc2Ny
ZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotICAgICAgICByZXR1cm4gc2NyZWVuID8g
Z2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChzY3JlZW4pIDogMDsKLSAgICB9Ci0KLSAgICBp
ZiAoIWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKGNvbnRhaW5lcikpCi0gICAgICAgIGNvbnRhaW5l
ciA9IGdldFRvcGxldmVsKGNvbnRhaW5lcik7Ci0gICAgcmV0dXJuIGNvbnRhaW5lciA/IGdka193
aW5kb3dfZ2V0X3Zpc3VhbChndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOwot
fQotCi1pbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR2RrVmlzdWFsKiB2
aXN1YWwgPSBnZXRWaXN1YWwod2lkZ2V0KTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgcmV0
dXJuIDI0OwotICAgIHJldHVybiBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpOwotfQotCi1p
bnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR2RrVmlz
dWFsKiB2aXN1YWwgPSBnZXRWaXN1YWwod2lkZ2V0KTsKLSAgICBpZiAoIXZpc3VhbCkKLSAgICAg
ICAgcmV0dXJuIDg7Ci0KLSAgICByZXR1cm4gZ2RrX3Zpc3VhbF9nZXRfYml0c19wZXJfcmdiKHZp
c3VhbCk7Ci19Ci0KLWJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQotewot
ICAgIHJldHVybiBzY3JlZW5EZXB0aCh3aWRnZXQpIDwgMjsKLX0KLQotCi1zdGF0aWMgR2RrU2Ny
ZWVuKiBnZXRTY3JlZW4oR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIGd0a193aWRn
ZXRfaGFzX3NjcmVlbih3aWRnZXQpID8gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkgOiBn
ZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7Ci19Ci0KLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdl
dCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJ
REdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkg
OiAwOwotICAgIGlmIChjb250YWluZXIpCi0gICAgICAgIGNvbnRhaW5lciA9IGdldFRvcGxldmVs
KGNvbnRhaW5lcik7Ci0KLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGNvbnRhaW5lciA/IGdldFNj
cmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwotICAgIGlmICghc2Ny
ZWVuKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBnaW50IG1vbml0b3IgPSBj
b250YWluZXIgPyBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhjb250YWluZXIpKSA6IDA7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2Vv
bWV0cnk7Ci0gICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIG1vbml0
b3IsICZnZW9tZXRyeSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KGdlb21ldHJ5LngsIGdlb21l
dHJ5LnksIGdlb21ldHJ5LndpZHRoLCBnZW9tZXRyeS5oZWlnaHQpOwotfQotCi1GbG9hdFJlY3Qg
c2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBHdGtXaWRnZXQqIGNv
bnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKLSAgICBpZiAoY29udGFpbmVyICYmICFndGtf
d2lkZ2V0X2dldF9yZWFsaXplZChjb250YWluZXIpKQotICAgICAgICByZXR1cm4gc2NyZWVuUmVj
dCh3aWRnZXQpOwotCi0gICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3Jl
ZW4oY29udGFpbmVyKSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIXNjcmVl
bikKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgZ2ludCBtb25pdG9yID0gY29u
dGFpbmVyID8gZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lk
Z2V0X2dldF93aW5kb3coY29udGFpbmVyKSkgOiAwOwotCi0gICAgR2RrUmVjdGFuZ2xlIHdvcmtB
cmVhOwotICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3Jfd29ya2FyZWEoc2NyZWVuLCBtb25pdG9y
LCAmd29ya0FyZWEpOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdCh3b3JrQXJlYS54LCB3b3JrQXJl
YS55LCB3b3JrQXJlYS53aWR0aCwgd29ya0FyZWEuaGVpZ2h0KTsKLQotfQotCi12b2lkIHNjcmVl
bkNvbG9yUHJvZmlsZShDb2xvclByb2ZpbGUmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUyMGJmOWE4OWQ3NmQwNWY1MjhlZDM0OWRlMDUzNjcyNzEyZGY4YTcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBl
dmVudCBjb25zdHJ1Y3RvcnMKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50
KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVsdGEg
PSAxOwotCi0gICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7Ci0gICAgbV90aW1lc3Rh
bXAgPSBjdXJyZW50VGltZSgpOwotCi0gICAgbV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVu
dC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRL
ZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCi0gICAgICAgIG1f
bW9kaWZpZXJzIHw9IEN0cmxLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01B
U0spCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRl
ICYgR0RLX01FVEFfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKLQotICAg
IG1fZGVsdGFYID0gMDsKLSAgICBtX2RlbHRhWSA9IDA7Ci0KLSAgICAvLyBEb2NzIHNheSBhbiB1
cHdhcmRzIHNjcm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMgYSBwb3NpdGl2ZSBkZWx0YQot
ICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgewotICAgICAgICBjYXNlIEdES19TQ1JPTExf
VVA6Ci0gICAgICAgICAgICBtX2RlbHRhWSA9IGRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dOOgotICAgICAgICAgICAgbV9kZWx0YVkgPSAtZGVs
dGE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6Ci0g
ICAgICAgICAgICBtX2RlbHRhWCA9IGRlbHRhOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKLSAgICAgICAgICAgIG1fZGVsdGFYID0gLWRlbHRhOwot
ICAgICAgICAgICAgYnJlYWs7Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCi0gICAg
ICAgIGNhc2UgR0RLX1NDUk9MTF9TTU9PVEg6IHsKLSAgICAgICAgICAgICAgICBnZG91YmxlIGRl
bHRhWCwgZGVsdGFZOwotICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2RlbHRh
cyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmZGVsdGFYLCAmZGVsdGFZKTsK
LSAgICAgICAgICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YVg7Ci0gICAgICAgICAgICAgICAgbV9k
ZWx0YVkgPSAtZGVsdGFZOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5k
aWYKLSAgICB9Ci0gICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOwotICAgIG1fd2hlZWxUaWNr
c1kgPSBtX2RlbHRhWTsKLQotICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxp
bnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkpOwotICAgIG1fZ2xvYmFs
UG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpLCBzdGF0
aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpKTsKLSAgICBtX2dyYW51bGFyaXR5ID0gU2Nyb2xs
QnlQaXhlbFdoZWVsRXZlbnQ7Ci0gICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBm
YWxzZTsKLQotICAgIC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0aGUg
bnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50Ci0gICAgbV9kZWx0
YVggKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7
Ci0gICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9Qb3B1cE1lbnVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVw
TWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNTE3YjAxZWM1Mjlj
NWRmYTUwMmI3YWE1MGI3ZWY4MDQ4MGU2ZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVt
ZW50cyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBT
LkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgiCi0K
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
Ci0jaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IGdTZWFyY2hUaW1lb3V0TXMg
PSAxMDAwOwotCi1Qb3B1cE1lbnVHdGs6OlBvcHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCkKLSAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQotewotfQotCi1Qb3B1cE1lbnVHdGs6
On5Qb3B1cE1lbnVHdGsoKQotewotICAgIGlmIChtX3BvcHVwKSB7Ci0gICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSwgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci0gICAgICAgIGhpZGUoKTsKLSAg
ICB9Ci19Ci0KLUd0a0FjdGlvbiogUG9wdXBNZW51R3RrOjpjcmVhdGVHdGtBY3Rpb25Gb3JNZW51
SXRlbShpbnQgaXRlbUluZGV4KQotewotICAgIEdPd25QdHI8Y2hhcj4gYWN0aW9uTmFtZShnX3N0
cmR1cF9wcmludGYoInBvcHVwLW1lbnUtYWN0aW9uLSVkIiwgaXRlbUluZGV4KSk7Ci0gICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtfYWN0aW9uX25ldyhhY3Rpb25OYW1lLmdldCgpLCBjbGllbnQo
KS0+aXRlbVRleHQoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCBjbGllbnQoKS0+aXRlbVRvb2xU
aXAoaXRlbUluZGV4KS51dGY4KCkuZGF0YSgpLCAwKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShH
X09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5kZXgiLCBHSU5UX1RPX1BPSU5U
RVIoaXRlbUluZGV4KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhY3Rpb24sICJhY3RpdmF0ZSIs
IEdfQ0FMTEJBQ0sobWVudUl0ZW1BY3RpdmF0ZWQpLCB0aGlzKTsKLSAgICAvLyBGSVhNRTogQXBw
bHkgdGhlIFBvcHVwTWVudVN0eWxlIGZyb20gY2xpZW50KCktPml0ZW1TdHlsZShpKQotICAgIGd0
a19hY3Rpb25fc2V0X3Zpc2libGUoYWN0aW9uLCAhY2xpZW50KCktPml0ZW1TdHlsZShpdGVtSW5k
ZXgpLmlzRGlzcGxheU5vbmUoKSk7Ci0gICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFjdGlv
biwgY2xpZW50KCktPml0ZW1Jc0VuYWJsZWQoaXRlbUluZGV4KSk7Ci0KLSAgICByZXR1cm4gYWN0
aW9uOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBG
cmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKLXsKLSAgICBBU1NFUlQoY2xpZW50KCkpOwotCi0g
ICAgaWYgKCFtX3BvcHVwKSB7Ci0gICAgICAgIG1fcG9wdXAgPSBHdGtQb3B1cE1lbnU6OmNyZWF0
ZSgpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcG9wdXAtPnBsYXRmb3JtTWVudSgpLCAi
dW5tYXAiLCBHX0NBTExCQUNLKFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVkKSwgdGhpcyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fcG9wdXAtPmNsZWFyKCk7Ci0KLSAgICBjb25zdCBpbnQgc2l6
ZSA9IGNsaWVudCgpLT5saXN0U2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIGlmIChjbGllbnQoKS0+aXRlbUlzU2VwYXJhdG9yKGkpKQotICAgICAg
ICAgICAgbV9wb3B1cC0+YXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgR1JlZlB0cjxHdGtBY3Rpb24+IGFjdGlvbiA9IGFkb3B0R1JlZihjcmVhdGVHdGtBY3Rp
b25Gb3JNZW51SXRlbShpKSk7Ci0gICAgICAgICAgICBtX3BvcHVwLT5hcHBlbmRJdGVtKGFjdGlv
bi5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBJbnRQb2ludCBtZW51UG9zaXRpb24g
PSBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEdUS19XSURHRVQodmlldy0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSksIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVj
dC5sb2NhdGlvbigpKSk7Ci0gICAgbWVudVBvc2l0aW9uLm1vdmUoMCwgcmVjdC5oZWlnaHQoKSk7
Ci0KLSAgICBtX3BvcHVwLT5wb3BVcChyZWN0LnNpemUoKSwgbWVudVBvc2l0aW9uLCBzaXplLCBp
bmRleCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkpOwotCi0gICAgLy8gR1RLIGNhbiByZWZ1c2Ug
dG8gYWN0dWFsbHkgb3BlbiB0aGUgbWVudSB3aGVuIG1vdXNlIGdyYWJzIGZhaWxzLgotICAgIC8v
IEVuc3VyZSBXZWJDb3JlIGRvZXMgbm90IGdvIGludG8gc29tZSBwZXNreSBzdGF0ZS4KLSAgICBp
ZiAoIWd0a193aWRnZXRfZ2V0X3Zpc2libGUobV9wb3B1cC0+cGxhdGZvcm1NZW51KCkpKQotICAg
ICAgICBjbGllbnQoKS0+cG9wdXBEaWRIaWRlKCk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51R3RrOjpo
aWRlKCkKLXsKLSAgICBBU1NFUlQobV9wb3B1cCk7Ci0gICAgbV9wb3B1cC0+cG9wRG93bigpOwot
fQotCi12b2lkIFBvcHVwTWVudUd0azo6dXBkYXRlRnJvbUVsZW1lbnQoKQotewotICAgIGNsaWVu
dCgpLT5zZXRUZXh0RnJvbUl0ZW0oY2xpZW50KCktPnNlbGVjdGVkSW5kZXgoKSk7Ci19Ci0KLXZv
aWQgUG9wdXBNZW51R3RrOjpkaXNjb25uZWN0Q2xpZW50KCkKLXsKLSAgICBtX3BvcHVwQ2xpZW50
ID0gMDsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6Om1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlv
biogYWN0aW9uLCBQb3B1cE1lbnVHdGsqIHRoYXQpCi17Ci0gICAgQVNTRVJUKHRoYXQtPmNsaWVu
dCgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+dmFsdWVDaGFuZ2VkKEdQT0lOVEVSX1RPX0lOVChn
X29iamVjdF9nZXRfZGF0YShHX09CSkVDVChhY3Rpb24pLCAicG9wdXAtbWVudS1hY3Rpb24taW5k
ZXgiKSkpOwotfQotCi12b2lkIFBvcHVwTWVudUd0azo6bWVudVVubWFwcGVkKEd0a1dpZGdldCos
IFBvcHVwTWVudUd0ayogdGhhdCkKLXsKLSAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAg
IHRoYXQtPmNsaWVudCgpLT5wb3B1cERpZEhpZGUoKTsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDJkODExZmJmNWZlMzlmN2Q0ZjRjMmMyY2IwYjgwMzUyYTZkOTA4OWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpZm5kZWYgUG9wdXBNZW51R3RrX2gKLSNkZWZpbmUgUG9wdXBNZW51R3Rr
X2gKLQotI2luY2x1ZGUgIkd0a1BvcHVwTWVudS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlICJQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBTY3JvbGxiYXI7Ci0K
LWNsYXNzIFBvcHVwTWVudUd0ayA6IHB1YmxpYyBQb3B1cE1lbnUgewotcHVibGljOgotICAgIFBv
cHVwTWVudUd0ayhQb3B1cE1lbnVDbGllbnQqKTsKLSAgICB+UG9wdXBNZW51R3RrKCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50IGluZGV4
KTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9t
RWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0Q2xpZW50KCk7Ci0KLXByaXZh
dGU6Ci0gICAgUG9wdXBNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3BvcHVw
Q2xpZW50OyB9Ci0gICAgR3RrQWN0aW9uKiBjcmVhdGVHdGtBY3Rpb25Gb3JNZW51SXRlbShpbnQg
aXRlbUluZGV4KTsKLQotICAgIHN0YXRpYyB2b2lkIG1lbnVVbm1hcHBlZChHdGtXaWRnZXQqLCBQ
b3B1cE1lbnVHdGsqKTsKLSAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtBY3Rp
b24qLCBQb3B1cE1lbnVHdGsqKTsKLQotICAgIFBvcHVwTWVudUNsaWVudCogbV9wb3B1cENsaWVu
dDsKLSAgICBPd25QdHI8R3RrUG9wdXBNZW51PiBtX3BvcHVwOwotfTsKLQotfQotCi0jZW5kaWYg
Ly8gUG9wdXBNZW51R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhNDUyNThmMzZhY2Y3NDM3M2RmMTAwMjZmZDhjOTg5NDYwZmY2Yzk0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5M
LgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKLQotI2lmIFVTRShHTFgpCi0K
LSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4
dGVuc2lvbnMvWGRhbWFnZS5oPgotI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KLSNpbmNsdWRlIDxn
ZGsvZ2RreC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhh
c2hNYXA8V2luZG93LCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyo+IFdpbmRvd0hhc2hNYXA7
Ci1zdGF0aWMgV2luZG93SGFzaE1hcCYgZ2V0V2luZG93SGFzaE1hcCgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChXaW5kb3dIYXNoTWFwLCB3aW5kb3dIYXNoTWFwLCAoKSk7Ci0gICAgcmV0
dXJuIHdpbmRvd0hhc2hNYXA7Ci19Ci0KLXN0YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKLXN0
YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmlsdGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2
ZW50LCBHZGtFdmVudCogZXZlbnQsIHZvaWQqKQotewotICAgIFhFdmVudCogeEV2ZW50ID0gc3Rh
dGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2ZW50KTsKLSAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdE
YW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdlTm90aWZ5KQotICAgICAgICByZXR1cm4gR0RLX0ZJTFRF
Ul9DT05USU5VRTsKLQotICAgIFhEYW1hZ2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWlu
dGVycHJldF9jYXN0PFhEYW1hZ2VOb3RpZnlFdmVudCo+KHhFdmVudCk7Ci0gICAgV2luZG93SGFz
aE1hcCYgd2luZG93SGFzaE1hcCA9IGdldFdpbmRvd0hhc2hNYXAoKTsKLSAgICBXaW5kb3dIYXNo
TWFwOjppdGVyYXRvciBpID0gd2luZG93SGFzaE1hcC5maW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJs
ZSk7Ci0gICAgaWYgKGkgPT0gd2luZG93SGFzaE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdE
S19GSUxURVJfQ09OVElOVUU7Ci0KLSAgICBpLT52YWx1ZS0+Y2FsbERhbWFnZU5vdGlmeUNhbGxi
YWNrKCk7Ci0gICAgWERhbWFnZVN1YnRyYWN0KEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNw
bGF5X2dldF9kZWZhdWx0KCkpLCBkYW1hZ2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKLSAg
ICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7Ci19Ci0KLXN0YXRpYyBib29sIHN1cHBvcnRzWERh
bWFnZUFuZFhDb21wb3NpdGUoKQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFs
c2U7Ci0gICAgc3RhdGljIGJvb2wgaGFzRXh0ZW5zaW9ucyA9IGZhbHNlOwotCi0gICAgaWYgKGlu
aXRpYWxpemVkKQotICAgICAgICByZXR1cm4gaGFzRXh0ZW5zaW9uczsKLQotICAgIGluaXRpYWxp
emVkID0gdHJ1ZTsKLQotICAgIGludCBlcnJvckJhc2U7Ci0gICAgRGlzcGxheSogZGlzcGxheSA9
IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIGlm
ICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9uKGRpc3BsYXksICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJy
b3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGV2ZW50QmFzZTsKLSAg
ICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJy
b3JCYXNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgbmVlZCB0byBzdXBw
b3J0IFhDb21wb3NpdGUgdmVyc2lvbiAwLjIuCi0gICAgaW50IG1ham9yLCBtaW5vcjsKLSAgICBY
Q29tcG9zaXRlUXVlcnlWZXJzaW9uKGRpc3BsYXksICZtYWpvciwgJm1pbm9yKTsKLSAgICBpZiAo
bWFqb3IgPCAwIHx8ICghbWFqb3IgJiYgbWlub3IgPCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaGFzRXh0ZW5zaW9ucyA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBh
c3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRz
Q29udGV4dCkKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpID8g
YWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KHNpemUsIG5lZWRzQ29udGV4
dCkpIDogbnVsbHB0cjsKLX0KLQotUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUsIEdMQ29udGV4dE5lZWRlZCBu
ZWVkc0NvbnRleHQpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fd2luZG93KDApCi0gICAg
LCBtX3BhcmVudFdpbmRvdygwKQotICAgICwgbV9waXhtYXAoMCkKLSAgICAsIG1fbmVlZHNDb250
ZXh0KG5lZWRzQ29udGV4dCkKLSAgICAsIG1fc3VyZmFjZSgwKQotICAgICwgbV9uZWVkc05ld1Bp
eG1hcEFmdGVyUmVzaXplKGZhbHNlKQotICAgICwgbV9kYW1hZ2UoMCkKLSAgICAsIG1fZGFtYWdl
Tm90aWZ5Q2FsbGJhY2soMCkKLSAgICAsIG1fZGFtYWdlTm90aWZ5RGF0YSgwKQotewotICAgIERp
c3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVm
YXVsdCgpKTsKLSAgICBTY3JlZW4qIHNjcmVlbiA9IERlZmF1bHRTY3JlZW5PZkRpc3BsYXkoZGlz
cGxheSk7Ci0KLSAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3Jj
L2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYwotICAg
IFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgd2luZG93QXR0cmli
dXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7Ci0gICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3Jl
YXRlV2luZG93KGRpc3BsYXksCi0gICAgICAgIFJvb3RXaW5kb3dPZlNjcmVlbihzY3JlZW4pLAot
ICAgICAgICBXaWR0aE9mU2NyZWVuKHNjcmVlbikgKyAxLCAwLCAxLCAxLAotICAgICAgICAwLAot
ICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgIENv
cHlGcm9tUGFyZW50LAotICAgICAgICBDV092ZXJyaWRlUmVkaXJlY3QsCi0gICAgICAgICZ3aW5k
b3dBdHRyaWJ1dGVzKTsKLSAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsK
LQotICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7
Ci0gICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOwotICAgIG1f
d2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3BhcmVudFdpbmRvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
V0V2ZW50TWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0
ZXMpOwotICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOwotCi0gICAgaWYgKGdldFdp
bmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0gICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigw
LCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDAp
OwotICAgIGdldFdpbmRvd0hhc2hNYXAoKS5hZGQobV93aW5kb3csIHRoaXMpOwotCi0gICAgd2hp
bGUgKDEpIHsKLSAgICAgICAgWEV2ZW50IGV2ZW50OwotICAgICAgICBYV2luZG93RXZlbnQoZGlz
cGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7Ci0gICAgICAgIGlm
IChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRv
dykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwg
bV93aW5kb3csIE5vRXZlbnRNYXNrKTsKLSAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlz
cGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICBtX2RhbWFnZSA9
IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwgbV93aW5kb3csIFhEYW1hZ2VSZXBvcnROb25FbXB0eSk7
Ci19Ci0KLVJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3coKQotewotICAgIEFTU0VSVChtX2RhbWFnZSk7Ci0gICAgQVNTRVJUKG1fd2luZG93KTsK
LSAgICBBU1NFUlQobV9wYXJlbnRXaW5kb3cpOwotCi0gICAgZ2V0V2luZG93SGFzaE1hcCgpLnJl
bW92ZShtX3dpbmRvdyk7Ci0gICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIGdka193aW5kb3dfcmVtb3ZlX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0Zp
bHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOwotCi0gICAgRGlzcGxheSogZGlzcGxh
eSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAg
IFhEYW1hZ2VEZXN0cm95KGRpc3BsYXksIG1fZGFtYWdlKTsKLSAgICBYRGVzdHJveVdpbmRvdyhk
aXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRX
aW5kb3cpOwotICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci19Ci0KLXZvaWQg
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQot
ewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpKTsKLSAgICBYUmVzaXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgWEZsdXNoKGRpc3BsYXkpOwotCi0g
ICAgaWYgKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCkgewotICAgICAgICBjb250
ZXh0KCktPndhaXROYXRpdmUoKTsKLSAgICAgICAgLy8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNv
ZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRl
bCBkcml2ZXJzCi0gICAgICAgIC8vIHdoZXJlIGEgc3dhcCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJl
IHRoZSBmcm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBwcm9wZXJseSByZXNpemVkLgotICAgICAg
ICBpZiAoY29udGV4dCgpID09IEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpKQotICAgICAgICAgICAg
Y29udGV4dCgpLT5zd2FwQnVmZmVycygpOwotICAgIH0KLQotICAgIG1fc2l6ZSA9IHNpemU7Ci0g
ICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gdHJ1ZTsKLX0KLQotR0xDb250ZXh0KiBS
ZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y29udGV4dCgpCi17Ci0gICAgQVNTRVJUKG1fbmVl
ZHNDb250ZXh0ID09IENyZWF0ZUdMQ29udGV4dCk7Ci0KLSAgICBpZiAobV9jb250ZXh0KQotICAg
ICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotCi0gICAgQVNTRVJUKG1fd2luZG93KTsKLSAg
ICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3cs
IEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKQotewotICAgIGlmICghbV9waXhtYXApCi0gICAgICAgIHJldHVybjsK
LQotICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRfZGlzcGxheShtX3N1cmZh
Y2UuZ2V0KCkpLCBtX3BpeG1hcCk7Ci0gICAgbV9waXhtYXAgPSAwOwotICAgIG1fc3VyZmFjZSA9
IG51bGxwdHI7Ci19Ci0KLWNhaXJvX3N1cmZhY2VfdCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAo
IW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2UpCi0gICAgICAgIHJldHVy
biBtX3N1cmZhY2UuZ2V0KCk7Ci0KLSAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBm
YWxzZTsKLQotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG5ldyBwaXhtYXAgYmUgY3Jl
YXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBhcyB0aGUgdGFyZ2V0Ci0gICAgLy8g
d2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUgMTAweCBzbG93ZXIuCi0gICAgRGlz
cGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRf
Z2V0X2Rpc3BsYXkod2lkZ2V0KSk7Ci0gICAgUGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVO
YW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93KTsKLSAgICBpZiAoIW5l
d1BpeG1hcCkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRy
aWJ1dGVzOwotICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobmV3UGl4bWFwRGlzcGxheSwg
bV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgewotICAgICAgICBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOwotICAgICAgICBYRnJlZVBpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBu
ZXdQaXhtYXApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0
ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93
QXR0cmlidXRlcy52aXN1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJl
IHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEg
ZmV3IGZyYWN0aW9ucwotICAgIC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGls
ZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFu
ZCBjcmVhdGVzCi0gICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVt
b3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRo
ZSBvbGQKLSAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6
ZSBpdC4KLSAgICBpZiAobV9zdXJmYWNlKSB7Ci0gICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9
IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsKLSAgICAgICAgY2Fpcm9fcGFpbnQo
Y3IuZ2V0KCkpOwotICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1f
c3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLSAg
ICB9Ci0KLSAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwotICAgIG1fcGl4bWFw
ID0gbmV3UGl4bWFwOwotICAgIG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7Ci0KLSAgICByZXR1cm4g
bV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojpj
YWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKQotewotICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxi
YWNrKQotICAgICAgICBtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjJhNDhiMmVhNWM0YWY2
NjAxNDM3ZDlmNWM5MjE4YTYyNDQwZDk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotI2RlZmluZSAgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAotCi0jaWYgVVNFKEdMWCkKLQotI2luY2x1ZGUgIkdM
Q29udGV4dC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5o
IgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4bWFwOwotdHlwZWRlZiB1bnNpZ25lZCBsb25n
IFdpbmRvdzsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEYW1hZ2U7Ci10eXBlZGVmIHZvaWQgKCpE
YW1hZ2VOb3RpZnlDYWxsYmFjaykodm9pZCopOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKLXB1YmxpYzoKLSAgICBlbnVtIEdMQ29u
dGV4dE5lZWRlZCB7IENyZWF0ZUdMQ29udGV4dCwgRG9Ob3RDcmVhdGVHTENvbnRleHQgfTsKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNv
bnN0IEludFNpemUmLCBHTENvbnRleHROZWVkZWQgPSBDcmVhdGVHTENvbnRleHQpOwotICAgIHZp
cnR1YWwgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7Ci0gICAgY29uc3QgSW50U2l6ZSYg
c2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSk7Ci0gICAgR0xDb250ZXh0KiBjb250ZXh0KCk7Ci0gICAgY2Fpcm9fc3VyZmFj
ZV90KiBjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgV2luZG93IHdpbmRv
d0lkKCkgeyByZXR1cm4gbV93aW5kb3c7IH0KLSAgICB2b2lkIGNhbGxEYW1hZ2VOb3RpZnlDYWxs
YmFjaygpOwotCi0gICAgdm9pZCBzZXREYW1hZ2VOb3RpZnlDYWxsYmFjayhEYW1hZ2VOb3RpZnlD
YWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKLSAgICB7Ci0gICAgICAgIG1fZGFtYWdlTm90
aWZ5Q2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgICAgbV9kYW1hZ2VOb3RpZnlEYXRhID0gZGF0
YTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29u
c3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCk7Ci0gICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOwotCi0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgV2luZG93IG1fd2lu
ZG93OwotICAgIFdpbmRvdyBtX3BhcmVudFdpbmRvdzsKLSAgICBQaXhtYXAgbV9waXhtYXA7Ci0g
ICAgR0xDb250ZXh0TmVlZGVkIG1fbmVlZHNDb250ZXh0OwotICAgIE93blB0cjxHTENvbnRleHQ+
IG1fY29udGV4dDsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAg
dW5zaWduZWQgaW50IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOwotICAgIGJvb2wgbV9uZWVkc05l
d1BpeG1hcEFmdGVyUmVzaXplOwotCi0gICAgRGFtYWdlIG1fZGFtYWdlOwotICAgIERhbWFnZU5v
dGlmeUNhbGxiYWNrIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2s7Ci0gICAgdm9pZCogbV9kYW1hZ2VO
b3RpZnlEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KEdMWCkKLQotI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhMmYyNzI3ZWFlMmMxYWVlYzM3ZGE4YWE5YjBiOWUwNGM2OWY5OGVk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw3MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgotCi0jaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhv
bGRlci5oIgotI2luY2x1ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgot
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZv
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZW5kZXJC
b3guaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTdHJpbmdUcnVuY2F0
b3IuaCIKLSNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVT
aGVldHMuaCIKLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVk
ZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSNpbmNsdWRlICJSZW5kZXJQ
cm9ncmVzcy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyB3b3Vs
ZCBiZSBhIHN0YXRpYyBtZXRob2QsIGV4Y2VwdCB0aGF0IGZvcndhcmQgZGVjbGFyaW5nIEdUeXBl
IGlzIHRyaWNreSwgc2luY2UgaXRzCi0vLyBkZWZpbml0aW9uIGRlcGVuZHMgb24gaW5jbHVkaW5n
IGdsaWIuaCwgbmVnYXRpbmcgdGhlIGJlbmVmaXQgb2YgdXNpbmcgYSBmb3J3YXJkIGRlY2xhcmF0
aW9uLgotZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBl
KEdUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUs
IGdpbnQgaWNvblNpemUpOwotZXh0ZXJuIEdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9ja1N5bWJv
bGljSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogc3ltYm9s
aWNJY29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBnaW50IGRpcmVj
dGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSk7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1zdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogZ2V0
TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgTm9k
ZSogbm9kZSA9IG8tPm5vZGUoKTsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+
c2hhZG93SG9zdCgpIDogMDsKLSAgICBpZiAoIW1lZGlhTm9kZSkKLSAgICAgICAgbWVkaWFOb2Rl
ID0gbm9kZTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAhbWVkaWFOb2RlLT5pc0VsZW1lbnROb2Rl
KCkgfHwgIXN0YXRpY19jYXN0PEVsZW1lbnQqPihtZWRpYU5vZGUpLT5pc01lZGlhRWxlbWVudCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFF
bGVtZW50Kj4obWVkaWFOb2RlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlh
QnV0dG9ucygpCi17Ci0gICAgc3RhdGljIGJvb2wgaWNvbnNJbml0aWFsaXplZCA9IGZhbHNlOwot
Ci0gICAgaWYgKGljb25zSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQ
dHI8R3RrSWNvbkZhY3Rvcnk+IGljb25GYWN0b3J5ID0gYWRvcHRHUmVmKGd0a19pY29uX2ZhY3Rv
cnlfbmV3KCkpOwotICAgIEd0a0ljb25Tb3VyY2UqIGljb25Tb3VyY2UgPSBndGtfaWNvbl9zb3Vy
Y2VfbmV3KCk7Ci0gICAgY29uc3QgY2hhciogaWNvbnNbXSA9IHsgImF1ZGlvLXZvbHVtZS1oaWdo
IiwgImF1ZGlvLXZvbHVtZS1tdXRlZCIgfTsKLQotICAgIGd0a19pY29uX2ZhY3RvcnlfYWRkX2Rl
ZmF1bHQoaWNvbkZhY3RvcnkuZ2V0KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBH
X05fRUxFTUVOVFMoaWNvbnMpOyArK2kpIHsKLSAgICAgICAgZ3RrX2ljb25fc291cmNlX3NldF9p
Y29uX25hbWUoaWNvblNvdXJjZSwgaWNvbnNbaV0pOwotICAgICAgICBHdGtJY29uU2V0KiBpY29u
U2V0ID0gZ3RrX2ljb25fc2V0X25ldygpOwotICAgICAgICBndGtfaWNvbl9zZXRfYWRkX3NvdXJj
ZShpY29uU2V0LCBpY29uU291cmNlKTsKLSAgICAgICAgZ3RrX2ljb25fZmFjdG9yeV9hZGQoaWNv
bkZhY3RvcnkuZ2V0KCksIGljb25zW2ldLCBpY29uU2V0KTsKLSAgICAgICAgZ3RrX2ljb25fc2V0
X3VucmVmKGljb25TZXQpOwotICAgIH0KLQotICAgIGd0a19pY29uX3NvdXJjZV9mcmVlKGljb25T
b3VyY2UpOwotCi0gICAgaWNvbnNJbml0aWFsaXplZCA9IHRydWU7Ci19Ci0jZW5kaWYKLQotUGFz
c1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVHdGs6OmNyZWF0ZSgpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUd0aygpKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5k
ZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQotewotICAgIHN0
YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVtZUd0azo6Y3JlYXRlKCkubGVha1JlZigp
OwotICAgIHJldHVybiBydDsKLX0KLQotUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3RrKCkK
LSAgICA6IG1fcGFuZWxDb2xvcihDb2xvcjo6d2hpdGUpCi0gICAgLCBtX3NsaWRlckNvbG9yKENv
bG9yOjp3aGl0ZSkKLSAgICAsIG1fc2xpZGVyVGh1bWJDb2xvcihDb2xvcjo6d2hpdGUpCi0gICAg
LCBtX21lZGlhSWNvblNpemUoMTYpCi0gICAgLCBtX21lZGlhU2xpZGVySGVpZ2h0KDE0KQotewot
ICAgIHBsYXRmb3JtSW5pdCgpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICBpbml0TWVkaWFDb2xv
cnMoKTsKLSAgICBpbml0TWVkaWFCdXR0b25zKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wg
c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBw
ZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0
OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBj
YXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFJh
ZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBjYXNlIFNsaWRlckhvcml6b250
YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgIGNhc2UgTWVkaWFQbGF5
QnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyUGFydDoKLSAgICBjYXNlIE1l
ZGlhTXV0ZUJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBNZWRpYUVudGVyRnVsbHNjcmVlbkJ1dHRvblBh
cnQ6Ci0gICAgY2FzZSBNZWRpYVNsaWRlclBhcnQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVy
T2JqZWN0KiBvKSBjb25zdAotewotICAgIHJldHVybiBpc0VuYWJsZWQobyk7Ci19Ci0KLWludCBS
ZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNv
bnN0Ci17Ci0gICAgaWYgKCFvLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHN0cmF0ZWd5IGlzIHBvc3NpYmx5IGluY29ycmVjdCBmb3IgdGhlIEdUSysg
cG9ydC4KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydAot
ICAgICAgICB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7Ci0gICAg
ICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgIHJldHVy
biBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDI7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG8pOwotfQotCi0vLyBUaGlzIGlzIHVz
ZWQgaW4gUmVuZGVyVGhlbWVHdGsyIGFuZCBSZW5kZXJUaGVtZUd0azMuIE5vcm1hbGx5LCBpdCB3
b3VsZCBiZSBpbgotLy8gdGhlIFJlbmRlclRoZW1lR3RrIGhlYWRlciAocGVyaGFwcyBhcyBhIHN0
YXRpYyBtZXRob2QpLCBidXQgd2Ugd2FudCB0byBhdm9pZAotLy8gaGF2aW5nIHRvIGluY2x1ZGUg
R1RLKyBoZWFkZXJzIG9ubHkgZm9yIHRoZSBHdGtUZXh0RGlyZWN0aW9uIGVudW0uCi1HdGtUZXh0
RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIFJUTDoKLSAgICAgICAgcmV0dXJuIEdU
S19URVhUX0RJUl9SVEw7Ci0gICAgY2FzZSBMVFI6Ci0gICAgICAgIHJldHVybiBHVEtfVEVYVF9E
SVJfTFRSOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHVEtfVEVYVF9ESVJfTk9ORTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ3RrSWNvblN0YXRlKFJlbmRlclRoZW1l
KiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCi17Ci0gICAgaWYgKCF0aGVtZS0+
aXNFbmFibGVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVfSU5TRU5T
SVRJVkU7Ci0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAg
cmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVy
T2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdIVDsKLQotICAgIHJldHVy
biBHVEtfU1RBVEVfTk9STUFMOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVt
ZW50KikgY29uc3QKLXsKLSAgICAvLyBTb21lIGxheW91dCB0ZXN0cyBjaGVjayBleHBsaWNpdGx5
IHRoYXQgYnV0dG9ucyBpZ25vcmUgbGluZS1oZWlnaHQuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpCi0gICAgICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJl
bmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBUaGUgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0
aGF0IHNlbGVjdCBtZW51IGJ1dHRvbnMgaWdub3JlIGxpbmUgaGVpZ2h0LgotICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLQotICAgIC8v
IFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMg
YWN0aXZlLCB1bmZvcnR1bmF0ZWx5LgotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKLXsKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIHJldHVybiBwYWludE1lbnVMaXN0KG9iamVjdCwgaW5mbywgcmVjdCk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4
dEZpZWxkKG8sIGksIHIpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludEdka1BpeGJ1ZihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdka1BpeGJ1ZiogaWNvbiwgY29uc3QgSW50UmVjdCYg
aWNvblJlY3QpCi17Ci0gICAgSW50U2l6ZSBpY29uU2l6ZShnZGtfcGl4YnVmX2dldF93aWR0aChp
Y29uKSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24pKTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gc2NhbGVkSWNvbjsKLSAgICBpZiAoaWNvblJlY3Quc2l6ZSgpICE9IGljb25TaXplKSB7Ci0g
ICAgICAgIC8vIFdlIGNvdWxkIHVzZSBjYWlyb19zY2FsZSgpIGhlcmUgYnV0IGNhaXJvL3BpeG1h
biBkb3duc2NhbGUgcXVhbGl0eSBpcyBxdWl0ZSBiYWQuCi0gICAgICAgIHNjYWxlZEljb24gPSBh
ZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvbiwgaWNvblJlY3Qud2lkdGgoKSwg
aWNvblJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0RLX0lOVEVSUF9CSUxJTkVBUikpOwotICAgICAgICBpY29uID0g
c2NhbGVkSWNvbi5nZXQoKTsKLSAgICB9Ci0KLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGdka19jYWly
b19zZXRfc291cmNlX3BpeGJ1ZihjciwgaWNvbiwgaWNvblJlY3QueCgpLCBpY29uUmVjdC55KCkp
OwotICAgIGNhaXJvX3BhaW50KGNyKTsKLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLX0KLQotLy8g
RGVmaW5lZCBpbiBHVEsrIChndGsvZ3RraWNvbmZhY3RvcnkuYykKLXN0YXRpYyBjb25zdCBnaW50
IGd0a0ljb25TaXplTWVudSA9IDE2Owotc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVTbWFs
bFRvb2xiYXIgPSAxODsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplQnV0dG9uID0gMjA7
Ci1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZUxhcmdlVG9vbGJhciA9IDI0Owotc3RhdGlj
IGNvbnN0IGdpbnQgZ3RrSWNvblNpemVEbmQgPSAzMjsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0lj
b25TaXplRGlhbG9nID0gNDg7Ci0KLXN0YXRpYyBHdGtJY29uU2l6ZSBnZXRJY29uU2l6ZUZvclBp
eGVsU2l6ZShnaW50IHBpeGVsU2l6ZSkKLXsKLSAgICBpZiAocGl4ZWxTaXplIDwgZ3RrSWNvblNp
emVTbWFsbFRvb2xiYXIpCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX01FTlU7Ci0gICAg
aWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6ZVNtYWxsVG9vbGJhciAmJiBwaXhlbFNpemUgPCBn
dGtJY29uU2l6ZUJ1dHRvbikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfU01BTExfVE9P
TEJBUjsKLSAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25TaXplQnV0dG9uICYmIHBpeGVsU2l6
ZSA8IGd0a0ljb25TaXplTGFyZ2VUb29sYmFyKQotICAgICAgICByZXR1cm4gR1RLX0lDT05fU0la
RV9CVVRUT047Ci0gICAgaWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6ZUxhcmdlVG9vbGJhciAm
JiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZURuZCkKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJ
WkVfTEFSR0VfVE9PTEJBUjsKLSAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25TaXplRG5kICYm
IHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplRGlhbG9nKQotICAgICAgICByZXR1cm4gR1RLX0lDT05f
U0laRV9ETkQ7Ci0KLSAgICByZXR1cm4gR1RLX0lDT05fU0laRV9ESUFMT0c7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKLXsKLSAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvbihvLCBpLCByZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRJY29uU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIHN0eWxlLT5yZXNldEJvcmRl
cigpOwotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKLQotICAgIC8vIEdldCB0aGUgaWNvbiBz
aXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmZv
bnRTaXplKCk7Ci0gICAgaWYgKGZvbnRTaXplIDwgZ3RrSWNvblNpemVNZW51KSB7Ci0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIGd0a19pY29uX3NpemVf
bG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZvbnRTaXplKSwgJndpZHRoLCAmaGVpZ2h0
KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGFkanVzdFNl
YXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKLX0KLQotc3RhdGljIEludFJlY3QgY2VudGVyUmVj
dFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxp
bnB1dD4gZWxlbWVudC4KLSAgICBOb2RlKiBpbnB1dCA9IHJlbmRlck9iamVjdC0+bm9kZSgpLT5z
aGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgaW5wdXQgPSByZW5kZXJPYmpl
Y3QtPm5vZGUoKTsKLSAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgLy8gSWYgcG9zc2libGUgY2VudGVyIHRoZSB5LWNv
b3JkaW5hdGUgb2YgdGhlIHJlY3QgdmVydGljYWxseSBpbiB0aGUgcGFyZW50IGlucHV0IGVsZW1l
bnQuCi0gICAgLy8gV2UgYWxzbyBhZGQgb25lIHBpeGVsIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhl
IHkgY29vcmRpbmF0ZSBpcyByb3VuZGVkIHVwIGZvciBib3ggaGVpZ2h0cwotICAgIC8vIHRoYXQg
YXJlIGV2ZW4sIHdoaWNoIGxvb2tzIGluIHJlbGF0aW9uIHRvIHRoZSBib3ggdGV4dC4KLSAgICBJ
bnRSZWN0IGlucHV0Q29udGVudEJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKS0+
YWJzb2x1dGVDb250ZW50Qm94KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBkZWNv
cmF0aW9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KLSAg
ICBpbnQgaWNvblNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjpt
aW4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgSW50UmVj
dCBzY2FsZWRSZWN0KHJlY3QueCgpLCBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVu
dEJveC5oZWlnaHQoKSAtIGljb25TaXplICsgMSkgLyAyLCBpY29uU2l6ZSwgaWNvblNpemUpOwot
ICAgIHJldHVybiBzY2FsZWRSZWN0OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIElu
dFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50
KHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9j
a0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfRklORCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrVGV4
dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0
YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25TaXplRm9yUGl4ZWxTaXplKHJlY3QuaGVp
Z2h0KCkpKTsKLSAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQo
KSwgaWNvblJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBhZGp1c3RTZWFyY2hGaWVs
ZEljb25TdHlsZShzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3QgaWNv
blJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9i
amVjdCwgcmVjdCk7Ci0gICAgaWYgKGljb25SZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja0ljb25Gb3JX
aWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0xFQVIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rp
b24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlz
LCByZW5kZXJPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7
Ci0gICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25S
ZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Ci17Ci0gICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVyaW5n
IHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5bGUt
PnJlc2V0Qm9yZGVyUmFkaXVzKCk7Ci0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByZWN0KTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMgZG9uJ3QgbmVl
ZCB0byBjaGVjayB3aGV0aGVyIHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2UgUmVuZGVyVGhl
bWUgYWxyZWFkeSBjaGVja3MgaXQKLSAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVtLCBidXQgcGFp
bnRDYXBzTG9ja0luZGljYXRvcigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUgd2hpY2ggZG9lc24ndCBjaGVjayBpdC4KLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpbnQgaWNv
blNpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIEdSZWZQ
dHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9F
TlRSWSwgR1RLX1NUT0NLX0NBUFNfTE9DS19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBnZXRJY29uU2l6ZUZvclBpeGVsU2l6
ZShpY29uU2l6ZSkpOwotCi0gICAgLy8gT25seSByZS1zY2FsZSB0aGUgaWNvbiB3aGVuIGl0J3Mg
c21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGljb24gc2l6ZS4KLSAgICBpZiAoaWNvblNpemUgPj0g
Z3RrSWNvblNpemVNZW51KQotICAgICAgICBpY29uU2l6ZSA9IGdka19waXhidWZfZ2V0X2hlaWdo
dChpY29uLmdldCgpKTsKLQotICAgIC8vIEdUSysgbG9jYXRlcyB0aGUgaWNvbiByaWdodCBhbGln
bmVkIGluIHRoZSBlbnRyeS4gVGhlIGdpdmVuIHJlY3RhbmdsZSBpcyBhbHJlYWR5Ci0gICAgLy8g
Y2VudGVyZWQgdmVydGljYWxseSBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuCi0gICAg
SW50UmVjdCBpY29uUmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGljb25TaXplLAotICAg
ICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGljb25TaXplKSAv
IDIsCi0gICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZSwgaWNvblNpemUpOwotICAgIHBhaW50
R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAg
UmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLWRvdWJs
ZSBSZW5kZXJUaGVtZUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKLXsKLSAgICBHdGtT
ZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLQotICAgIGdi
b29sZWFuIHNob3VsZEJsaW5rOwotICAgIGdpbnQgdGltZTsKLQotICAgIGdfb2JqZWN0X2dldChz
ZXR0aW5ncywgImd0ay1jdXJzb3ItYmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJs
aW5rLXRpbWUiLCAmdGltZSwgTlVMTCk7Ci0KLSAgICBpZiAoIXNob3VsZEJsaW5rKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiB0aW1lIC8gMjAwMC47Ci19Ci0KLWRvdWJsZSBSZW5k
ZXJUaGVtZUd0azo6Z2V0U2NyZWVuRFBJKCkKLXsKLSAgICAvLyBGSVhNRTogUmVhbGx5IHRoaXMg
c2hvdWxkIGJlIHRoZSB3aWRnZXQncyBzY3JlZW4uCi0gICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBn
ZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHJldHVy
biA5NjsgLy8gRGVmYXVsdCB0byA5NiBEUEkuCi0KLSAgICBmbG9hdCBkcGkgPSBnZGtfc2NyZWVu
X2dldF9yZXNvbHV0aW9uKHNjcmVlbik7Ci0gICAgaWYgKGRwaSA8PSAwKQotICAgICAgICByZXR1
cm4gOTY7Ci0gICAgcmV0dXJuIGRwaTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c3lzdGVt
Rm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAg
IEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwotICAg
IGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgd2lsbCBiZSBh
IGZvbnQgc2VsZWN0aW9uIHN0cmluZyBsaWtlICJTYW5zIDEwIiBzbyB3ZSBjYW5ub3QgdXNlIGl0
IGFzIHRoZSBmYW1pbHkgbmFtZS4KLSAgICBHT3duUHRyPGdjaGFyPiBmb250TmFtZTsKLSAgICBn
X29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstZm9udC1uYW1lIiwgJmZvbnROYW1lLm91dFB0cigp
LCBOVUxMKTsKLQotICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBwYW5nb0Rlc2NyaXB0aW9uID0g
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcm9tX3N0cmluZyhmb250TmFtZS5nZXQoKSk7Ci0gICAg
aWYgKCFwYW5nb0Rlc2NyaXB0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkocGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRf
ZmFtaWx5KHBhbmdvRGVzY3JpcHRpb24pKTsKLQotICAgIGludCBzaXplID0gcGFuZ29fZm9udF9k
ZXNjcmlwdGlvbl9nZXRfc2l6ZShwYW5nb0Rlc2NyaXB0aW9uKSAvIFBBTkdPX1NDQUxFOwotICAg
IC8vIElmIHRoZSBzaXplIG9mIHRoZSBmb250IGlzIGluIHBvaW50cywgd2UgbmVlZCB0byBjb252
ZXJ0IGl0IHRvIHBpeGVscy4KLSAgICBpZiAoIXBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3Np
emVfaXNfYWJzb2x1dGUocGFuZ29EZXNjcmlwdGlvbikpCi0gICAgICAgIHNpemUgPSBzaXplICog
KGdldFNjcmVlbkRQSSgpIC8gNzIuMCk7Ci0KLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1
ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpOb0ZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9y
bWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKLSAgICBwYW5nb19m
b250X2Rlc2NyaXB0aW9uX2ZyZWUocGFuZ29EZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKLXsKLSNpZiBFTkFCTEUoVklERU8p
Ci0gICAgaW5pdE1lZGlhQ29sb3JzKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJUaGVtZTo6cGxhdGZv
cm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVN0cmluZyBSZW5k
ZXJUaGVtZUd0azo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0dXJu
IFN0cmluZyhtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlh
Q29udHJvbHNHdGtVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLSNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCi1TdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hl
ZXQoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IGNoYXIqIHN5
bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSkKLXsKLSAg
ICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1fbWVkaWFJY29u
U2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUlj
b25TaXplLCBtX21lZGlhSWNvblNpemUpOwotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0g
Z2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0NPTlRBSU5FUiwgc3lt
Ym9saWNJY29uTmFtZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLAotICAgICAgICBndGtUZXh0RGly
ZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLCBndGtJY29uU3RhdGUo
dGhpcywgcmVuZGVyT2JqZWN0KSwgaWNvblJlY3Qud2lkdGgoKSk7Ci0gICAgcGFpbnRHZGtQaXhi
dWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENv
bnRyb2xQYXJ0IHBhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChwYXJ0ICE9IE1lZGlhTXV0ZUJ1
dHRvblBhcnQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVl
bkJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0
b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgInZpZXctZnVsbHNjcmVl
bi1zeW1ib2xpYyIsIEdUS19TVE9DS19GVUxMU0NSRUVOKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJP
YmplY3QocmVuZGVyT2JqZWN0KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBtdXRlZCA9IG1lZGlhRWxlbWVudC0+bXV0ZWQoKTsKLSAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0
LCByZWN0LAotICAgICAgICBtdXRlZCA/ICJhdWRpby12b2x1bWUtbXV0ZWQtc3ltYm9saWMiIDog
ImF1ZGlvLXZvbHVtZS1oaWdoLXN5bWJvbGljIiwKLSAgICAgICAgbXV0ZWQgPyAiYXVkaW8tdm9s
dW1lLW11dGVkIiA6ICJhdWRpby12b2x1bWUtaGlnaCIpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgTm9k
ZSogbm9kZSA9IHJlbmRlck9iamVjdC0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghbm9kZS0+aXNNZWRpYUNvbnRyb2xFbGVtZW50KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgcGxheSA9IG1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlKG5vZGUpID09IE1lZGlhUGxheUJ1dHRvbjsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1
dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0LCByZWN0LAotICAgICAgICBwbGF5
ID8gIm1lZGlhLXBsYXliYWNrLXN0YXJ0LXN5bWJvbGljIiA6ICJtZWRpYS1wbGF5YmFjay1wYXVz
ZS1zeW1ib2xpYyIsCi0gICAgICAgIHBsYXkgPyBHVEtfU1RPQ0tfTUVESUFfUExBWSA6IEdUS19T
VE9DS19NRURJQV9QQVVTRSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFT
ZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVk
aWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwgIm1lZGlhLXNl
ZWstYmFja3dhcmQtc3ltYm9saWMiLCBHVEtfU1RPQ0tfTUVESUFfUkVXSU5EKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCAibWVkaWEtc2Vlay1mb3J3YXJkLXN5bWJvbGljIiwgR1RL
X1NUT0NLX01FRElBX0ZPUldBUkQpOwotfQotCi1zdGF0aWMgUm91bmRlZFJlY3Q6OlJhZGlpIGJv
cmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICByZXR1cm4gUm91
bmRlZFJlY3Q6OlJhZGlpKAotICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFk
aXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLmhl
aWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJUb3BSaWdo
dFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVz
KCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJv
dHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21M
ZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAgIEludFNpemUoc3R5bGUt
PmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9y
ZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pOwotICAg
IGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICBjb250ZXh0LT5zYXZl
KCk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwotCi0gICAgZmxvYXQg
bWVkaWFEdXJhdGlvbiA9IG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKLSAgICBmbG9hdCB0b3Rh
bFRyYWNrV2lkdGggPSByLndpZHRoKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5
bGUoKTsKLSAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IG1lZGlhRWxlbWVudC0+
YnVmZmVyZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0aW1lUmFu
Z2VzLT5sZW5ndGgoKTsgKytpbmRleCkgewotICAgICAgICBmbG9hdCBzdGFydCA9IHRpbWVSYW5n
ZXMtPnN0YXJ0KGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgZmxvYXQgZW5kID0g
dGltZVJhbmdlcy0+ZW5kKGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgZmxvYXQg
c3RhcnRSYXRpbyA9IHN0YXJ0IC8gbWVkaWFEdXJhdGlvbjsKLSAgICAgICAgZmxvYXQgbGVuZ3Ro
UmF0aW8gPSAoZW5kIC0gc3RhcnQpIC8gbWVkaWFEdXJhdGlvbjsKLSAgICAgICAgaWYgKCFsZW5n
dGhSYXRpbykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEludFJlY3QgcmFuZ2VS
ZWN0KHIpOwotICAgICAgICByYW5nZVJlY3Quc2V0V2lkdGgobGVuZ3RoUmF0aW8gKiB0b3RhbFRy
YWNrV2lkdGgpOwotICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAgICByYW5nZVJlY3QubW92
ZShzdGFydFJhdGlvICogdG90YWxUcmFja1dpZHRoLCAwKTsKLSAgICAgICAgY29udGV4dC0+Zmls
bFJvdW5kZWRSZWN0KFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVyUmFkaWlGcm9tU3R5bGUo
c3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
c3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsK
LSAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KFJvdW5kZWRSZWN0KHIsIGJv
cmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRh
aW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChy
ZW5kZXJPYmplY3QpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGZsb2F0IHZvbHVtZSA9IG1lZGlhRWxlbWVudC0+dm9sdW1lKCk7Ci0gICAgaWYg
KCF2b2x1bWUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNv
bnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKLQotICAgIGludCByZWN0SGVpZ2h0ID0g
cmVjdC5oZWlnaHQoKTsKLSAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1
bWU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpOwotICAg
IEludFJlY3Qgdm9sdW1lUmVjdChyZWN0KTsKLSAgICB2b2x1bWVSZWN0Lm1vdmUoMCwgcmVjdEhl
aWdodCAtIHRyYWNrSGVpZ2h0KTsKLSAgICB2b2x1bWVSZWN0LnNldEhlaWdodChjZWlsKHRyYWNr
SGVpZ2h0KSk7Ci0KLSAgICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QoUm91bmRlZFJlY3Qodm9s
dW1lUmVjdCwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwKLSAgICAgICAgc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2Uo
KSk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVyVGh1bWIocmVuZGVyT2Jq
ZWN0LCBwYWludEluZm8sIHJlY3QpOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmZvcm1h
dE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRp
b24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRU
aW1lKSArICIgLyAiICsgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUoZHVyYXRpb24pOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFBST0dS
RVNTX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLS8vIFRoZXNlIHZhbHVlcyBo
YXZlIGJlZW4gY29waWVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCi1zdGF0aWMg
Y29uc3QgaW50IHByb2dyZXNzQWN0aXZpdHlCbG9ja3MgPSA1Owotc3RhdGljIGNvbnN0IGludCBw
cm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEwOwotc3RhdGljIGNvbnN0IGRvdWJsZSBwcm9ncmVz
c0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7Ci1kb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAot
ewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsOwotfQotCi1kb3VibGUgUmVu
ZGVyVGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MqKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJv
Z3Jlc3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwotfQot
Ci1JbnRSZWN0IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQotewotICAgIElu
dFJlY3QgcHJvZ3Jlc3NSZWN0KGZ1bGxCYXJSZWN0KTsKLSAgICBSZW5kZXJQcm9ncmVzcyogcmVu
ZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKHJlbmRlck9iamVjdCk7Ci0gICAgaWYgKHJl
bmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKLSAgICAgICAgaW50IHByb2dyZXNzV2lk
dGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpOwot
ICAgICAgICBpZiAocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0g
ICAgICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgcHJvZ3Jlc3NS
ZWN0LndpZHRoKCkgLSBwcm9ncmVzc1dpZHRoKTsKLSAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdp
ZHRoKHByb2dyZXNzV2lkdGgpOwotICAgICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwotICAgIH0K
LQotICAgIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRp
b25Qcm9ncmVzcygpOwotCi0gICAgLy8gTmV2ZXIgbGV0IHRoZSBwcm9ncmVzcyByZWN0IHNocmlu
ayBzbWFsbGVyIHRoYW4gMiBwaXhlbHMuCi0gICAgaW50IG5ld1dpZHRoID0gbWF4KDIsIHByb2dy
ZXNzUmVjdC53aWR0aCgpIC8gcHJvZ3Jlc3NBY3Rpdml0eUJsb2Nrcyk7Ci0gICAgaW50IG1vdmFi
bGVXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpIC0gbmV3V2lkdGg7Ci0gICAgcHJvZ3Jlc3NS
ZWN0LnNldFdpZHRoKG5ld1dpZHRoKTsKLQotICAgIC8vIFdlIHdhbnQgdGhlIGZpcnN0IDAuNSB1
bml0cyBvZiB0aGUgYW5pbWF0aW9uIHByb2dyZXNzIHRvIHJlcHJlc2VudCB0aGUKLSAgICAvLyBm
b3J3YXJkIG1vdGlvbiBhbmQgdGhlIHNlY29uZCAwLjUgdW5pdHMgdG8gcmVwcmVzZW50IHRoZSBi
YWNrd2FyZCBtb3Rpb24sCi0gICAgLy8gdGh1cyB3ZSBtdWx0aXBseSBieSB0d28gaGVyZSB0byBn
ZXQgdGhlIGZ1bGwgc3dlZXAgb2YgdGhlIHByb2dyZXNzIGJhciB3aXRoCi0gICAgLy8gZWFjaCBk
aXJlY3Rpb24uCi0gICAgaWYgKGFuaW1hdGlvblByb2dyZXNzIDwgMC41KQotICAgICAgICBwcm9n
cmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgKGFuaW1hdGlvblByb2dyZXNzICogMiAq
IG1vdmFibGVXaWR0aCkpOwotICAgIGVsc2UKLSAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJv
Z3Jlc3NSZWN0LngoKSArICgoMS4wIC0gYW5pbWF0aW9uUHJvZ3Jlc3MpICogMiAqIG1vdmFibGVX
aWR0aCkpOwotICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7Ci19Ci0jZW5kaWYKLQotU3RyaW5nIFJl
bmRlclRoZW1lR3RrOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxp
c3QsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dl
ZCkgY29uc3QKLXsKLSAgICBpZiAod2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgaWYgKGZpbGVMaXN0LT5sZW5ndGgoKSA+IDEpCi0gICAgICAgIHJldHVybiBTdHJp
bmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUobXVsdGlwbGVGaWxlVXBsb2FkVGV4dChmaWxlTGlz
dC0+bGVuZ3RoKCkpLCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGlu
Z0hhY2tzKTsKLQotICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgaWYgKGZpbGVMaXN0LT5sZW5ndGgo
KSkKLSAgICAgICAgc3RyaW5nID0gcGF0aEdldEZpbGVOYW1lKGZpbGVMaXN0LT5pdGVtKDApLT5w
YXRoKCkpOwotICAgIGVsc2UgaWYgKG11bHRpcGxlRmlsZXNBbGxvd2VkKQotICAgICAgICBzdHJp
bmcgPSBmaWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwoKTsKLSAgICBlbHNlCi0gICAgICAg
IHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCk7Ci0KLSAgICByZXR1cm4g
U3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZShzdHJpbmcsIHdpZHRoLCBmb250LCBTdHJp
bmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwotfQotCi0jaWYgRU5BQkxFKERBVEFM
SVNUX0VMRU1FTlQpCi1JbnRTaXplIFJlbmRlclRoZW1lR3RrOjpzbGlkZXJUaWNrU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc2V0IHRoaXMgdG8gdGhlIHNpemUgb2Yg
b25lIHRpY2sgbWFyay4KLSAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKLX0KLQotaW50IFJlbmRl
clRoZW1lR3RrOjpzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byBzZXQgdGhpcyB0byB0aGUgcG9zaXRpb24gb2YgdGhlIHRp
Y2sgbWFya3MuCi0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNGE1ODA4MDE1NzlmMWYyNGYwYzc2ZTg0ZWE2MWRkMzdkMzdjNzk2Mi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBA
Ci0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFJlbmRlclRoZW1lR3Rr
X2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVHdGtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9HZGtD
b2xvcm1hcCBHZGtDb2xvcm1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5k
ZXJUaGVtZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci1wcml2YXRlOgotICAgIFJlbmRlclRo
ZW1lR3RrKCk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsKLQotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKLQotICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJl
ZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBB
IG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmlu
Zy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUq
KSBjb25zdDsKLQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2Vz
IGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwg
Ym9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQot
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwotCi0gICAgLy8gQSBtZXRob2Qg
dG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRo
aXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQotICAgIC8vIHBvc2l0aW9uIGNhbm5v
dCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFu
ZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgotICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVl
ZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7Ci0KLSAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9y
LgotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBM
aXN0IEJveCBzZWxlY3Rpb24gY29sb3IKLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIGFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENv
bG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwotCi0gICAgLy8g
U3lzdGVtIGZvbnRzIGFuZCBjb2xvcnMuCi0gICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50
IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBzeXN0
ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcG9wc01l
bnVCeVNwYWNlT3JSZXR1cm4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Ci0KLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5
bGVTaGVldCgpOwotICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwotCi0jaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRnVsbFNjcmVlblN0
eWxlU2hlZXQoKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVO
VCkKLSAgICAvLyBSZXR1cm5zIHNpemUgb2Ygb25lIHNsaWRlciB0aWNrIG1hcmsgZm9yIGEgaG9y
aXpvbnRhbCB0cmFjay4KLSAgICAvLyBGb3IgdmVydGljYWwgdHJhY2tzIHdlIHJvdGF0ZSBpdCBh
bmQgdXNlIGl0LiBpLmUuIFdpZHRoIGlzIGFsd2F5cyBsZW5ndGggYWxvbmcgdGhlIHRyYWNrLgot
ICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0OwotICAgIC8vIFJldHVy
bnMgdGhlIGRpc3RhbmNlIG9mIHNsaWRlciB0aWNrIG9yaWdpbiBmcm9tIHRoZSBzbGlkZXIgdHJh
Y2sgY2VudGVyLgotICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50
ZXIoKSBjb25zdDsKLSNlbmRpZgotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtX
aWRnZXQqIGd0a0NvbnRhaW5lcigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBj
b25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1ZTY3JvbGxiYXIoKSBjb25zdDsKLSAgICBHdGtXaWRn
ZXQqIGd0a0hTY3JvbGxiYXIoKSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBnZXRJbmRpY2F0b3JN
ZXRyaWNzKENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3Bh
Y2luZyk7Ci0jZWxzZQotICAgIEd0a1N0eWxlQ29udGV4dCogZ3RrU2Nyb2xsYmFyU3R5bGUoKTsK
LSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9T
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
UmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5k
ZXJTdHlsZSopIGNvbnN0OwotICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5k
ZXJTdHlsZSopIGNvbnN0OwotCi0gICAgLy8gVGhlIE1hYyBwb3J0IGRpZmZlcmVudGlhdGVzIGJl
dHdlZW4gdGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBidXR0b24uIgotICAgIC8v
IFRoZSBmb3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRvbiBoYXMgYmVlbiBzdHls
ZWQuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUKLSAgICAvLyBBcXVhIHRoZW1lZCBjb250cm9scyB3
aGVuZXZlciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdUSysgdGhlbWluZywgc28K
LSAgICAvLyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlhdGlvbi4KLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgaW5pdE1lZGlhQ29sb3JzKCk7Ci0g
ICAgdm9pZCBpbml0TWVkaWFCdXR0b25zKCk7Ci0gICAgdmlydHVhbCBib29sIGhhc093bkRpc2Fi
bGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFT
ZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJ
bnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyop
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNh
dG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JX
aWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlw
bGVGaWxlc0FsbG93ZWQpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQo
KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlKik7Ci0g
ICAgc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAg
ICBib29sIHBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIq
IGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQUk9HUkVTU19F
TEVNRU5UKQotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIG11dGFibGUgQ29sb3IgbV9w
YW5lbENvbG9yOwotICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJDb2xvcjsKLSAgICBtdXRhYmxl
IENvbG9yIG1fc2xpZGVyVGh1bWJDb2xvcjsKLSAgICBjb25zdCBpbnQgbV9tZWRpYUljb25TaXpl
OwotICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVpZ2h0OwotCi0jaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKLSAgICB2b2lkIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIoR3RrV2lkZ2V0
KiwgR3RrV2lkZ2V0KikgY29uc3Q7Ci0gICAgdm9pZCByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigp
IGNvbnN0OwotICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiwgaW50JiBs
ZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0OwotICAgIGludCBn
ZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGNvbWJvQm94QXJyb3dT
aXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICBHdGtXaWRnZXQqIGd0a0J1dHRvbigpIGNv
bnN0OwotICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQq
IGd0a1ZTY2FsZSgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrSFNjYWxlKCkgY29uc3Q7Ci0g
ICAgR3RrV2lkZ2V0KiBndGtSYWRpb0J1dHRvbigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3Rr
Q2hlY2tCdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1Byb2dyZXNzQmFyKCkgY29u
c3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveCgpIGNvbnN0OwotICAgIEd0a1dpZGdldCog
Z3RrQ29tYm9Cb3hCdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94QXJy
b3coKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3Q7
Ci0gICAgR3RrV2lkZ2V0KiBndGtTcGluQnV0dG9uKCkgY29uc3Q7Ci0KLSAgICBHZGtDb2xvcm1h
cCogbV9jb2xvcm1hcDsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7Ci0gICAg
bXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29udGFpbmVyOwotICAgIG11dGFibGUgR3RrV2lkZ2V0
KiBtX2d0a0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtFbnRyeTsKLSAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtUcmVlVmlldzsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCog
bV9ndGtWU2NhbGU7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNjYWxlOwotICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1JhZGlvQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0
KiBtX2d0a0NoZWNrQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1Byb2dyZXNz
QmFyOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94OwotICAgIG11dGFibGUg
R3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94QnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBt
X2d0a0NvbWJvQm94QXJyb3c7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29tYm9Cb3hT
ZXBhcmF0b3I7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjcm9sbGJhcjsKLSAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtIU2Nyb2xsYmFyOwotICAgIG11dGFibGUgR3RrV2lkZ2V0
KiBtX2d0a1NwaW5CdXR0b247Ci0gICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFw
OwotICAgIGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OwotI2VuZGlmCi19Owot
Ci19Ci0KLSNlbmRpZiAvLyBSZW5kZXJUaGVtZUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4MjNhMDQ4NWU3Y2QxNjhlOWFhN2UyNTFmNThjNDExZDYzNzg1YjA3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTY0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLQotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0KLS8vIFdlIG5lZWQgdGhpcyB0byBhbGxvdyBidWlsZGluZyB3aGlsZSB1c2lu
ZyBHVEtfV0lER0VUX1NFVF9GTEFHUy4gSXQncyBkZXByZWNhdGVkCi0vLyBidXQgc29tZSB0aGVt
ZSBlbmdpbmVzIHJlcXVpcmUgaXQgdG8gZW5zdXJlIHByb3BlciByZW5kZXJpbmcgb2YgZm9jdXMg
aW5kaWNhdG9ycy4KLSN1bmRlZiBHVEtfRElTQUJMRV9ERVBSRUNBVEVECi0KLSNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIlBhaW50
SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlRleHREaXJlY3Rp
b24uaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgIldpZGdl
dFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRoaXMgaXMgdGhlIGRlZmF1bHQg
dmFsdWUgZGVmaW5lZCBieSBHVEsrLCB3aGVyZSBpdCB3YXMgZGVmaW5lZCBhcyBNSU5fQVJST1df
V0lEVEggaW4gZ3Rrc3BpbmJ1dHRvbi5jLgotc3RhdGljIGNvbnN0IGludCBtaW5TcGluQnV0dG9u
QXJyb3dTaXplID0gNjsKLQotLy8gVGhpcyBpcyBub3QgYSBzdGF0aWMgbWV0aG9kLCBiZWNhdXNl
IHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIEdUSysgaGVhZGVycyBpbiBSZW5kZXJUaGVtZUd0ay5o
LgotZXh0ZXJuIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9u
KTsKLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3RoZW1l
UGFydHNIYXZlUkdCQUNvbG9ybWFwID0gdHJ1ZTsKLSAgICBtX2d0a1dpbmRvdyA9IDA7Ci0gICAg
bV9ndGtDb250YWluZXIgPSAwOwotICAgIG1fZ3RrQnV0dG9uID0gMDsKLSAgICBtX2d0a0VudHJ5
ID0gMDsKLSAgICBtX2d0a1RyZWVWaWV3ID0gMDsKLSAgICBtX2d0a1ZTY2FsZSA9IDA7Ci0gICAg
bV9ndGtIU2NhbGUgPSAwOwotICAgIG1fZ3RrUmFkaW9CdXR0b24gPSAwOwotICAgIG1fZ3RrQ2hl
Y2tCdXR0b24gPSAwOwotICAgIG1fZ3RrUHJvZ3Jlc3NCYXIgPSAwOwotICAgIG1fZ3RrQ29tYm9C
b3ggPSAwOwotICAgIG1fZ3RrQ29tYm9Cb3hCdXR0b24gPSAwOwotICAgIG1fZ3RrQ29tYm9Cb3hB
cnJvdyA9IDA7Ci0gICAgbV9ndGtDb21ib0JveFNlcGFyYXRvciA9IDA7Ci0gICAgbV9ndGtWU2Ny
b2xsYmFyID0gMDsKLSAgICBtX2d0a0hTY3JvbGxiYXIgPSAwOwotICAgIG1fZ3RrU3BpbkJ1dHRv
biA9IDA7Ci0KLSAgICBtX2NvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChn
ZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIGlmICghbV9jb2xvcm1hcCkgewotICAgICAg
ICBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0gZmFsc2U7Ci0gICAgICAgIG1fY29sb3Jt
YXAgPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1
bHQoKSk7Ci0gICAgfQotfQotCi1SZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKCkKLXsK
LSAgICBpZiAobV9ndGtXaW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2d0a1dp
bmRvdyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0
TWVkaWFDb2xvcnMoKQotewotICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0
eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKLSAgICBtX3BhbmVsQ29sb3IgPSBzdHls
ZS0+YmdbR1RLX1NUQVRFX05PUk1BTF07Ci0gICAgbV9zbGlkZXJDb2xvciA9IHN0eWxlLT5iZ1tH
VEtfU1RBVEVfQUNUSVZFXTsKLSAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBzdHlsZS0+YmdbR1RL
X1NUQVRFX1NFTEVDVEVEXTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9y
Rm9jdXMoR3RrV2lkZ2V0KiB3aWRnZXQsIEludFJlY3QmIHJlY3QsIGJvb2wgaWdub3JlSW50ZXJp
b3JGb2N1c1Byb3BlcnR5ID0gZmFsc2UpCi17Ci0gICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1Bh
ZDsKLSAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzID0gMDsKLSAgICBndGtfd2lkZ2V0X3N0eWxl
X2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwg
JmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lk
dGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGlu
ZyIsICZmb2N1c1BhZCwgTlVMTCk7Ci0gICAgaWYgKCFpZ25vcmVJbnRlcmlvckZvY3VzUHJvcGVy
dHkgJiYgaW50ZXJpb3JGb2N1cykKLSAgICAgICAgcmV0dXJuOwotICAgIHJlY3QuaW5mbGF0ZShm
b2N1c1dpZHRoICsgZm9jdXNQYWQpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0g
ICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBpbnRlcmlvciBm
b2N1cyBwcm9wZXJ0eSBhbmQgYWx3YXlzIGV4cGFuZCB0aGUgZm9jdXMgcmVjdC4gSW4gR1RLKywg
dGhlCi0gICAgICAgIC8vIGZvY3VzIGluZGljYXRvciBpcyB1c3VhbGx5IG9uIHRoZSB0ZXh0IG5l
eHQgdG8gYSBjaGVja2JveCBvciByYWRpbyBidXR0b24sIGJ1dCB0aGF0IGRvZXNuJ3QKLSAgICAg
ICAgLy8gaGFwcGVuIGluIFdlYkNvcmUuIEJ5IGV4cGFuZGluZyB0aGUgZm9jdXMgcmVjdGFuZ2xl
IHVuY29uZGl0aW9uYWxseSB3ZSBpbmNyZWFzZSBpdHMgcHJvbWluZW5jZS4KLSAgICAgICAgYWRq
dXN0UmVjdEZvckZvY3VzKHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gZ3RrQ2hlY2tCdXR0b24oKSA6
IGd0a1JhZGlvQnV0dG9uKCksIHJlY3QsIHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKLSAgICAgICAgLy8gU2VlIHBhaW50SW5uZXJT
cGluQnV0dG9uIGZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgd2UgZXhwYW5kIHRoZSBwYWludGlu
ZyByZWN0LgotICAgICAgICByZWN0LmluZmxhdGVZKDIpOwotICAgICAgICByZWN0LnNldFdpZHRo
KHJlY3Qud2lkdGgoKSArIDIpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLXN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJlbmRlclRoZW1lR3Rr
KiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCF0aGVtZS0+aXNFbmFi
bGVkKG9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKG9iamVjdCkpCi0gICAgICAg
IHJldHVybiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQo
b2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgaWYgKHRoZW1l
LT5pc0hvdmVyZWQob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdIVDsK
LSAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKLX0KLQotc3RhdGljIHZvaWQgc2V0VG9nZ2xl
U2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgR3Rr
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGgg
c3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCi0gICAgaWYgKCFzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKLSAgICBndGtfd2lk
Z2V0X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBO
VUxMKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotICAgIGlm
IChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhaW50VG9nZ2xl
KFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQp
Ci17Ci0gICAgLy8gV2UgZG8gbm90IGNhbGwgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZSBo
ZXJlLCBiZWNhdXNlIHNvbWUgdGhlbWVzIGJlZ2luIGEgc2VyaWVzIG9mCi0gICAgLy8gYW5pbWF0
aW9uIGZyYW1lcyBpbiBhICJ0b2dnbGVkIiBzaWduYWwgaGFuZGxlci4gVGhpcyBwdXRzIHNvbWUg
Y2hlY2tib3hlcyBpbiBhIGhhbGYtd2F5Ci0gICAgLy8gY2hlY2tlZCBzdGF0ZS4gRXZlcnkgR1RL
KyB0aGVtZSBJIHRlc3RlZCBtZXJlbHkgbG9va3MgYXQgdGhlIHNoYWRvdyB0eXBlIChhbmQgbm90
IHRoZQotICAgIC8vICdhY3RpdmUnIHByb3BlcnR5KSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBu
b3QgdG8gZHJhdyB0aGUgY2hlY2suCi0gICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHdpZGdl
dCwgdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICF0aGVtZS0+aXNSZWFkT25seUNv
bnRyb2wocmVuZGVyT2JqZWN0KSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdl
dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7
Ci0KLSAgICBib29sIGluZGV0ZXJtaW5hdGUgPSB0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRl
ck9iamVjdCk7Ci0gICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2luY29uc2lzdGVudChHVEtfVE9H
R0xFX0JVVFRPTih3aWRnZXQpLCBpbmRldGVybWluYXRlKTsKLQotICAgIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VUOwotICAgIGlmIChpbmRldGVybWluYXRlKSAvLyBU
aGlzIG9yaWdpbmF0ZXMgZnJvbSB0aGUgTW96aWxsYSBjb2RlLgotICAgICAgICBzaGFkb3dUeXBl
ID0gR1RLX1NIQURPV19FVENIRURfSU47Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChy
ZW5kZXJPYmplY3QpKQotICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19JTjsKLQotICAg
IFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3Qp
OwotICAgIEludFJlY3QgYnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAg
R3RrU3RhdGVUeXBlIHRvZ2dsZVN0YXRlID0gZ2V0R3RrU3RhdGVUeXBlKHRoZW1lLCByZW5kZXJP
YmplY3QpOwotICAgIGNvbnN0IGNoYXIqIGRldGFpbCA9IDA7Ci0gICAgaWYgKEdUS19JU19SQURJ
T19CVVRUT04od2lkZ2V0KSkgewotICAgICAgICBkZXRhaWwgPSAicmFkaW9idXR0b24iOwotICAg
ICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50T3B0aW9uKGJ1dHRvblJlY3QsIHdpZGdldCwgdG9n
Z2xlU3RhdGUsIHNoYWRvd1R5cGUsIGRldGFpbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZGV0
YWlsID0gImNoZWNrYnV0dG9uIjsKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludENoZWNr
KGJ1dHRvblJlY3QsIHdpZGdldCwgdG9nZ2xlU3RhdGUsIHNoYWRvd1R5cGUsIGRldGFpbCk7Ci0g
ICAgfQotCi0gICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAg
ICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKLSAgICAgICAgYWRqdXN0UmVjdEZvckZv
Y3VzKHdpZGdldCwgZm9jdXNSZWN0LCB0cnVlKTsKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQ
YWludEZvY3VzKGZvY3VzUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgZGV0YWlsKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Ci17Ci0gICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tC
dXR0b24oKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBwYWludFRvZ2dsZSh0aGlzLCByZW5kZXJPYmplY3QsIGluZm8sIHJl
Y3QsIGd0a0NoZWNrQnV0dG9uKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICBzZXRUb2dnbGVTaXplKHRoaXMsIHN0eWxlLCBndGtSYWRpb0J1dHRvbigpKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHBhaW50
VG9nZ2xlKHRoaXMsIHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3RrUmFkaW9CdXR0b24oKSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBzZXRXaWRnZXRIYXNGb2N1cyhH
dGtXaWRnZXQqIHdpZGdldCwgZ2Jvb2xlYW4gaGFzRm9jdXMpCi17Ci0gICAgZ19vYmplY3Rfc2V0
KHdpZGdldCwgImhhcy1mb2N1cyIsIGhhc0ZvY3VzLCBOVUxMKTsKLQotICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBhcmUgZGVwcmVjYXRlZCBpbiBHVEsrIDIuMjIsIHlldCB0aGVtZSBlbmdpbmVzIHN0
aWxsIGxvb2sKLSAgICAvLyBhdCB0aGVzZSBmbGFncyB3aGVuIGRldGVybWluaW5nIGlmIGEgd2lk
Z2V0IGhhcyBmb2N1cywgc28gd2UgbXVzdCB1c2UgdGhlbS4KLSAgICBpZiAoaGFzRm9jdXMpCi0g
ICAgICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0gICAg
ZWxzZQotICAgICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NV
Uyk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0J1dHRvbigpOwotICAgIEludFJl
Y3QgYnV0dG9uUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAgSW50UmVjdCBmb2N1
c1JlY3QoYnV0dG9uUmVjdCk7Ci0KLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGUgPSBnZXRHdGtTdGF0
ZVR5cGUodGhpcywgb2JqZWN0KTsKLSAgICBndGtfd2lkZ2V0X3NldF9zdGF0ZSh3aWRnZXQsIHN0
YXRlKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0
aW9uKG9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIGlmIChpc0ZvY3VzZWQo
b2JqZWN0KSkgewotICAgICAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIFRSVUUpOwotCi0g
ICAgICAgIGdib29sZWFuIGludGVyaW9yRm9jdXMgPSAwLCBmb2N1c1dpZHRoID0gMCwgZm9jdXNQ
YWRkaW5nID0gMDsKLSAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNX
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9j
dXNQYWRkaW5nLCBOVUxMKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGV4dGVyaW9yIGZv
Y3VzLCB3ZSBzaHJpbmsgdGhlIGJ1dHRvbiByZWN0IGRvd24gYmVmb3JlCi0gICAgICAgIC8vIGRy
YXdpbmcuIElmIHdlIGFyZSB1c2luZyBpbnRlcmlvciBmb2N1cyB3ZSBzaHJpbmsgdGhlIGZvY3Vz
IHJlY3QuIFRoaXMKLSAgICAgICAgLy8gYXBwcm9hY2ggb3JpZ2luYXRlcyBmcm9tIHRoZSBNb3pp
bGxhIHRoZW1lIGRyYXdpbmcgY29kZSAoZ3RrMmRyYXdpbmcuYykuCi0gICAgICAgIGlmIChpbnRl
cmlvckZvY3VzKSB7Ci0gICAgICAgICAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dl
dF9zdHlsZSh3aWRnZXQpOwotICAgICAgICAgICAgZm9jdXNSZWN0LmluZmxhdGVYKC1zdHlsZS0+
eHRoaWNrbmVzcyAtIGZvY3VzUGFkZGluZyk7Ci0gICAgICAgICAgICBmb2N1c1JlY3QuaW5mbGF0
ZVkoLXN0eWxlLT55dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5nKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoLWZvY3VzV2lkdGggLSBmb2N1c1BhZGRp
bmcpOwotICAgICAgICAgICAgYnV0dG9uUmVjdC5pbmZsYXRlWSgtZm9jdXNQYWRkaW5nIC0gZm9j
dXNQYWRkaW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAgIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSA9IHN0YXRlID09IEdUS19TVEFURV9BQ1RJVkUgPyBHVEtfU0hBRE9XX0lOIDog
R1RLX1NIQURPV19PVVQ7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChidXR0b25SZWN0
LCB3aWRnZXQsIHN0YXRlLCBzaGFkb3dUeXBlLCAiYnV0dG9uIik7Ci0gICAgaWYgKGlzRm9jdXNl
ZChvYmplY3QpKQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0
LCB3aWRnZXQsIHN0YXRlLCAiYnV0dG9uIik7Ci0KLSAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRn
ZXQsIEZBTFNFKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6
Z2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiBzZXBh
cmF0b3IgPSBndGtDb21ib0JveFNlcGFyYXRvcigpOwotICAgIGlmICghc2VwYXJhdG9yKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGdib29sZWFuIGhhc1dpZGVTZXBhcmF0b3JzID0gRkFMU0U7
Ci0gICAgZ2ludCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQo
c2VwYXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAm
aGFzV2lkZVNlcGFyYXRvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFyYXRvci13
aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
LSAgICBpZiAoaGFzV2lkZVNlcGFyYXRvcnMpCi0gICAgICAgIHJldHVybiBzZXBhcmF0b3JXaWR0
aDsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUoc2VwYXJhdG9yKS0+eHRoaWNrbmVz
czsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVy
c2luZyB0aGUgRFBJIGNvbnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKLSAgICAvLyBHVEsrIHJlbmRl
cmluZyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLgotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNp
emUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBidXR0b24sIGludCYgbGVm
dCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQotewotICAgIEd0a1N0eWxlKiBz
dHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGJ1dHRvbik7Ci0gICAgaW50IG91dGVyQm9yZGVy
ID0gZ3RrX2NvbnRhaW5lcl9nZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoYnV0dG9uKSk7
Ci0gICAgc3RhdGljIEd0a0JvcmRlciBkZWZhdWx0SW5uZXJCb3JkZXIgPSB7MSwgMSwgMSwgMX07
Ci0gICAgR3RrQm9yZGVyKiBpbm5lckJvcmRlcjsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChi
dXR0b24sICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXIsIE5VTEwpOwotICAgIGlmICghaW5u
ZXJCb3JkZXIpCi0gICAgICAgIGlubmVyQm9yZGVyID0gJmRlZmF1bHRJbm5lckJvcmRlcjsKLQot
ICAgIGxlZnQgPSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT5sZWZ0ICsgc3R5bGUtPnh0aGlj
a25lc3M7Ci0gICAgcmlnaHQgPSBvdXRlckJvcmRlciArIGlubmVyQm9yZGVyLT5yaWdodCArIHN0
eWxlLT54dGhpY2tuZXNzOwotICAgIHRvcCA9IG91dGVyQm9yZGVyICsgaW5uZXJCb3JkZXItPnRv
cCArIHN0eWxlLT55dGhpY2tuZXNzOwotICAgIGJvdHRvbSA9IG91dGVyQm9yZGVyICsgaW5uZXJC
b3JkZXItPmJvdHRvbSArIHN0eWxlLT55dGhpY2tuZXNzOwotCi0gICAgaWYgKGlubmVyQm9yZGVy
ICE9ICZkZWZhdWx0SW5uZXJCb3JkZXIpCi0gICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJv
cmRlcik7Ci19Ci0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJl
bmRlclN0eWxlKiBzdHlsZSwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBi
b3R0b20pIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRy
YXduIHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCi0gICAgLy8gZG9uJ3QgYWRkIGFueSBleHRy
YSBwYWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEEgY29tYm8gYm94IGJ1dHRvbiBpcyBhIGJ1dHRvbiB3aXRoIHdpZGdldHMgcGFja2VkIGlu
dG8gaXQuCi0gICAgR3RrU3R5bGUqIGJ1dHRvbldpZGdldFN0eWxlID0gZ3RrX3dpZGdldF9nZXRf
c3R5bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7Ci0gICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoZ3Rr
Q29tYm9Cb3hCdXR0b24oKSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLQotICAgIC8vIEFk
ZCB4dGhpY2tuZXNzIGFtb3VudCBvZiBwYWRkaW5nIGZvciBlYWNoIHNpZGUgb2YgdGhlIHNlcGFy
YXRvci4gVGhpcyBlbnN1cmVzCi0gICAgLy8gdGhhdCB0aGUgdGV4dCBkb2VzIG5vdCBidW1wIHVw
IGFnYWluc3QgdGhlIHNlcGFyYXRvci4KLSAgICBpbnQgYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGgg
PSBjb21ib0JveEFycm93U2l6ZShzdHlsZSkgKwotICAgICAgICBnZXRDb21ib0JveFNlcGFyYXRv
cldpZHRoKCkgKyAoMyAqIGJ1dHRvbldpZGdldFN0eWxlLT54dGhpY2tuZXNzKTsKLQotICAgIGlm
IChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICBsZWZ0ICs9IGFycm93QW5kU2Vw
ZXJhdG9yTGVuZ3RoOwotICAgIGVsc2UKLSAgICAgICAgcmlnaHQgKz0gYXJyb3dBbmRTZXBlcmF0
b3JMZW5ndGg7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9
IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLWludCBS
ZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRv
bSA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwotICAgIHJldHVybiByaWdodDsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaW50
IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgZ2V0Q29tYm9C
b3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJldHVybiB0
b3A7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20o
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwg
cmlnaHQgPSAwLCBib3R0b20gPSAwOwotICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICByZXR1cm4gYm90dG9tOwotfQotCi1ib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50QnV0
dG9uKG9iamVjdCwgaW5mbywgcmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8g
TWVudSBsaXN0IGJ1dHRvbiBwYWludGluZyBzdHJhdGVneS4KLSAgICAvLyBGb3IgYnV0dG9ucyB3
aXRoIGFwcGVhcnMtYXMtbGlzdCBzZXQgdG8gZmFsc2UgKGhhdmluZyBhIHNlcGFyYXRvcik6Ci0g
ICAgLy8gfCBsZWZ0IGJvcmRlciB8IEJ1dHRvbiB0ZXh0IHwgeHRoaWNrbmVzcyB8IHZzZXBhcmF0
b3IgfCB4dGhpY2tuZXNzIHwgYXJyb3cgfCB4dGhpY2tuZXNzIHwgcmlnaHQgYm9yZGVyIHwKLSAg
ICAvLyBGb3IgYnV0dG9ucyB3aXRoIGFwcGVhcnMtYXMtbGlzdCBzZXQgdG8gdHJ1ZSAobm90IGhh
dmluZyBhIHNlcGFyYXRvcik6Ci0gICAgLy8gfCBsZWZ0IGJvcmRlciB8IEJ1dHRvbiB0ZXh0IHwg
YXJyb3cgfCB4dGhpY2tuZXNzIHwgcmlnaHQgYm9yZGVyIHwKLQotICAgIGludCBsZWZ0Qm9yZGVy
ID0gMCwgcmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3JkZXIgPSAwOwot
ICAgIGdldEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnRCb3JkZXIs
IHRvcEJvcmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOwotICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFy
cm93U2l6ZShzdHlsZSk7Ci0gICAgR3RrU3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9n
ZXRfc3R5bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7Ci0KLSAgICBJbnRSZWN0IGFycm93UmVjdCgw
LCAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7
Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0gICAgICAgIGFycm93UmVjdC5z
ZXRYKGxlZnRCb3JkZXIgKyBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyk7Ci0gICAgZWxzZQotICAg
ICAgICBhcnJvd1JlY3Quc2V0WChyZWN0LndpZHRoKCkgLSByaWdodEJvcmRlciAtIGJ1dHRvblN0
eWxlLT54dGhpY2tuZXNzIC0gYXJyb3dTaXplKTsKLSAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5
cGUgPSBpc1ByZXNzZWQob2JqZWN0KSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsK
LQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQs
IHJlY3QpOwotICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhp
cywgb2JqZWN0KTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCBn
dGtDb21ib0JveEFycm93KCksIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9XX0RPV04s
ICJhcnJvdyIpOwotCi0gICAgLy8gU29tZSBjb21ibyBib3hlcyBkbyBub3QgaGF2ZSBhIHNlcGFy
YXRvci4KLSAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2VwYXJhdG9yKCk7
Ci0gICAgaWYgKCFzZXBhcmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdl
IHdhbnQgdG8gZGVjcmVhc2UgdGhlIGhlaWdodCBvZiB0aGUgc2VwYXJhdG9yIGJhc2VkIG9uIHRo
ZSBmb2N1cyBwYWRkaW5nIG9mIHRoZSBidXR0b24uCi0gICAgZ2ludCBmb2N1c1BhZGRpbmcgPSAw
LCBmb2N1c1dpZHRoID0gMDsgCi0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoZ3RrQ29tYm9Cb3hC
dXR0b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZm
b2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZv
Y3VzUGFkZGluZywgTlVMTCk7Ci0gICAgdG9wQm9yZGVyICs9IGZvY3VzUGFkZGluZyArIGZvY3Vz
V2lkdGg7Ci0gICAgYm90dG9tQm9yZGVyICs9IGZvY3VzUGFkZGluZyArIGZvY3VzV2lkdGg7Ci0g
ICAgaW50IHNlcGFyYXRvcldpZHRoID0gZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpOwotICAg
IEludFJlY3Qgc2VwYXJhdG9yUmVjdCgwLCB0b3BCb3JkZXIsIHNlcGFyYXRvcldpZHRoLCByZWN0
LmhlaWdodCgpIC0gdG9wQm9yZGVyIC0gYm90dG9tQm9yZGVyKTsKLSAgICBpZiAoc3R5bGUtPmRp
cmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgc2VwYXJhdG9yUmVjdC5zZXRYKGFycm93UmVjdC54
KCkgKyBhcnJvd1JlY3Qud2lkdGgoKSArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzICsgc2VwYXJh
dG9yV2lkdGgpOwotICAgIGVsc2UKLSAgICAgICAgc2VwYXJhdG9yUmVjdC5zZXRYKGFycm93UmVj
dC54KCkgLSBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyAtIHNlcGFyYXRvcldpZHRoKTsKLQotICAg
IGdib29sZWFuIGhhc1dpZGVTZXBhcmF0b3JzID0gRkFMU0U7Ci0gICAgZ3RrX3dpZGdldF9zdHls
ZV9nZXQoc2VwYXJhdG9yLCAid2lkZS1zZXBhcmF0b3JzIiwgJmhhc1dpZGVTZXBhcmF0b3JzLCBO
VUxMKTsKLSAgICBpZiAoaGFzV2lkZVNlcGFyYXRvcnMpCi0gICAgICAgIHdpZGdldENvbnRleHQu
Z3RrUGFpbnRCb3goc2VwYXJhdG9yUmVjdCwgc2VwYXJhdG9yLCBHVEtfU1RBVEVfTk9STUFMLCBH
VEtfU0hBRE9XX0VUQ0hFRF9PVVQsICJ2c2VwYXJhdG9yIik7Ci0gICAgZWxzZQotICAgICAgICB3
aWRnZXRDb250ZXh0Lmd0a1BhaW50VkxpbmUoc2VwYXJhdG9yUmVjdCwgc2VwYXJhdG9yLCBHVEtf
U1RBVEVfTk9STUFMLCAidnNlcGFyYXRvciIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLQotICAgIGJvb2wgZW5hYmxlZCA9IGlz
RW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3Qp
OwotICAgIEd0a1N0YXRlVHlwZSBiYWNrZ3JvdW5kU3RhdGUgPSBlbmFibGVkID8gR1RLX1NUQVRF
X05PUk1BTCA6IEdUS19TVEFURV9JTlNFTlNJVElWRTsKLSAgICBndGtfd2lkZ2V0X3NldF9zZW5z
aXRpdmUod2lkZ2V0LCBlbmFibGVkKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lk
Z2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
KTsKLSAgICBzZXRXaWRnZXRIYXNGb2N1cyh3aWRnZXQsIGlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
KTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChpbmZvLmNvbnRl
eHQsIHJlY3QpOwotICAgIEludFJlY3QgdGV4dEZpZWxkUmVjdChJbnRQb2ludCgpLCByZWN0LnNp
emUoKSk7Ci0KLSAgICAvLyBUaGUgZW50cnkgYmFja2dyb3VuZCBpcyBvbmx5IHBhaW50ZWQgb3Zl
ciB0aGUgaW50ZXJpb3IgcGFydCBvZiB0aGUgR1RLKyBlbnRyeSwgbm90Ci0gICAgLy8gdGhlIGVu
dGlyZSBmcmFtZS4gVGhpcyBoYXBwZW5zIGluIHRoZSBNb3ppbGxhIHRoZW1lIGRyYXdpbmcgY29k
ZSBhcyB3ZWxsLgotICAgIEludFJlY3QgaW50ZXJpb3JSZWN0KHRleHRGaWVsZFJlY3QpOwotICAg
IEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0gICAgaW50
ZXJpb3JSZWN0LmluZmxhdGVYKC1zdHlsZS0+eHRoaWNrbmVzcyk7Ci0gICAgaW50ZXJpb3JSZWN0
LmluZmxhdGVZKC1zdHlsZS0+eXRoaWNrbmVzcyk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWlu
dEZsYXRCb3goaW50ZXJpb3JSZWN0LCB3aWRnZXQsIGJhY2tncm91bmRTdGF0ZSwgR1RLX1NIQURP
V19OT05FLCAiZW50cnlfYmciKTsKLQotICAgIC8vIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGRy
YXdpbmcgdGhlIGFjdHVhbCBmcmFtZS4KLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2hhZG93
KHRleHRGaWVsZFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwg
ImVudHJ5Iik7Ci0KLSAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOwotICAgIGdpbnQgZm9jdXNX
aWR0aDsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgIE5VTEwpOwotICAg
IGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSAmJiAhaW50ZXJpb3JGb2N1cykgewotICAgICAg
ICAvLyBXaGVuIEdUSysgcGFpbnRzIGEgdGV4dCBlbnRyeSB3aXRoIGZvY3VzLCBpdCBzaHJpbmtz
IHRoZSBzaXplIG9mIHRoZSBmcmFtZSBhcmVhIGJ5IHRoZQotICAgICAgICAvLyBmb2N1cyB3aWR0
aCBhbmQgcGFpbnRzIG92ZXIgdGhlIHByZXZpb3VzbHkgdW5mb2N1c2VkIHRleHQgZW50cnkuIFdl
IG5lZWQgdG8gZW11bGF0ZSB0aGF0Ci0gICAgICAgIC8vIGJ5IGRyYXdpbmcgYm90aCB0aGUgdW5m
b2N1c2VkIGZyYW1lIGFib3ZlIGFuZCB0aGUgZm9jdXNlZCBmcmFtZSBoZXJlLgotICAgICAgICBJ
bnRSZWN0IHNoYWRvd1JlY3QodGV4dEZpZWxkUmVjdCk7Ci0gICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZSgtZm9jdXNXaWR0aCk7Ci0gICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTaGFkb3co
c2hhZG93UmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50
cnkiKTsKLQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXModGV4dEZpZWxkUmVj
dCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCAiZW50cnkiKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVHJhY2soUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvYmplY3QtPnN0eWxl
KCktPmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFy
dCB8fCBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xp
ZGVyUGFydCk7Ci0KLSAgICAvLyBXZSBzaHJpbmsgdGhlIHRyb3VnaCByZWN0IHNsaWdodGx5IHRv
IG1ha2Ugcm9vbSBmb3IgdGhlIGZvY3VzIGluZGljYXRvci4KLSAgICBJbnRSZWN0IHRyb3VnaFJl
Y3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOyAvLyBUaGlzIGlzIHJlbGF0aXZlIHRvIHJlY3Qu
Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOwotICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6
b250YWxQYXJ0KSB7Ci0gICAgICAgIHdpZGdldCA9IGd0a0hTY2FsZSgpOwotICAgICAgICB0cm91
Z2hSZWN0LmluZmxhdGVYKC1ndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT54dGhpY2tuZXNz
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aWRnZXQgPSBndGtWU2NhbGUoKTsKLSAgICAgICAg
dHJvdWdoUmVjdC5pbmZsYXRlWSgtZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+eXRoaWNr
bmVzcyk7Ci0gICAgfQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1Rl
eHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotCi0gICAgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAg
d2lkZ2V0Q29udGV4dC5ndGtQYWludEJveCh0cm91Z2hSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9B
Q1RJVkUsIEdUS19TSEFET1dfT1VULCAidHJvdWdoIik7Ci0gICAgaWYgKGlzRm9jdXNlZChvYmpl
Y3QpKQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoSW50UmVjdChJbnRQb2lu
dCgpLCByZWN0LnNpemUoKSksIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCks
ICJ0cm91Z2giKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChpbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ29udHJvbFBh
cnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotICAgIEFTU0VSVChwYXJ0
ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLQotICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gMDsKLSAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAwOwotICAgIEd0
a09yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQpIHsKLSAgICAgICAgd2lkZ2V0ID0gZ3RrSFNjYWxlKCk7Ci0gICAgICAgIGRl
dGFpbCA9ICJoc2NhbGUiOwotICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9I
T1JJWk9OVEFMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IGd0a1ZTY2FsZSgpOwot
ICAgICAgICBkZXRhaWwgPSAidnNjYWxlIjsKLSAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJ
RU5UQVRJT05fVkVSVElDQUw7Ci0gICAgfQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3
aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwot
Ci0gICAgLy8gT25seSBzb21lIHRoZW1lcyBoYXZlIHNsaWRlciB0aHVtYnMgcmVzcG9uZCB0byBj
bGlja3MgYW5kIHNvbWUgZG9uJ3QuIFRoaXMgaW5mb3JtYXRpb24gaXMKLSAgICAvLyBnYXRoZXJl
ZCB2aWEgdGhlICdhY3RpdmF0ZS1zbGlkZXInIHByb3BlcnR5LCBidXQgaXQncyBkZXByZWNhdGVk
IGluIEdUSysgMi4yMiBhbmQgcmVtb3ZlZCBpbgotICAgIC8vIEdUSysgMy54LiBUaGUgZHJhd2Jh
Y2sgb2Ygbm90IGhvbm9yaW5nIGl0IGlzIHRoYXQgc2xpZGVyIHRodW1icyBjaGFuZ2UgY29sb3Ig
d2hlbiB5b3UgY2xpY2sKLSAgICAvLyBvbiB0aGVtLiAKLSAgICBJbnRSZWN0IHRodW1iUmVjdChJ
bnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRn
ZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWlu
dFNsaWRlcih0aHVtYlJlY3QsIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCks
IEdUS19TSEFET1dfT1VULCBkZXRhaWwsIG9yaWVudGF0aW9uKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBz
dHlsZS0+YXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQgPyBndGtIU2NhbGUoKSA6IGd0a1ZTY2FsZSgpOwotICAgIGludCBsZW5ndGggPSAwLCB3
aWR0aCA9IDA7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICJzbGlkZXJfbGVuZ3RoIiwgJmxlbmd0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAic2xpZGVyX3dpZHRoIiwgJndpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFy
dCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgs
IEZpeGVkKSk7Ci19Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ3RrUHJvZ3Jlc3NCYXIoKTsKLSAgICBndGtfd2lkZ2V0X3NldF9k
aXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4
dChwYWludEluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgSW50UmVjdCBmdWxsUHJvZ3Jlc3NCYXJS
ZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50
Qm94KGZ1bGxQcm9ncmVzc0JhclJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NI
QURPV19JTiwgInRyb3VnaCIpOwotCi0gICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9n
ZXRfc3R5bGUod2lkZ2V0KTsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsUHJvZ3Jlc3NC
YXJSZWN0KTsKLSAgICBwcm9ncmVzc1JlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzKTsK
LSAgICBwcm9ncmVzc1JlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tuZXNzKTsKLSAgICBwcm9n
cmVzc1JlY3QgPSBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KHJlbmRlck9i
amVjdCwgcHJvZ3Jlc3NSZWN0KTsKLQotICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChwcm9ncmVzc1JlY3QsIHdpZGdldCwg
R1RLX1NUQVRFX1BSRUxJR0hULCBHVEtfU0hBRE9XX09VVCwgImJhciIpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotI2VuZGlmCi0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAotewotICAgIEd0a1N0eWxlKiBndGtTdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxl
KGd0a1NwaW5CdXR0b24oKSk7Ci0gICAgY29uc3QgUGFuZ29Gb250RGVzY3JpcHRpb24qIGZvbnRE
ZXNjcmlwdGlvbiA9IGd0a1N0eWxlLT5mb250X2Rlc2M7Ci0gICAgZ2ludCBmb250U2l6ZSA9IHBh
bmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0aW9uKTsKLQotICAgIC8v
IEZvcmNlIGFuIG9kZCBhcnJvdyBzaXplIGhlcmUuIEdUSysgMy54IGZvcmNlcyBldmVuIGluIHRo
aXMgY2FzZSwgYnV0Ci0gICAgLy8gTm9kb2thLWJhc2VkIHRoZW1lcyBsb29rIGluY29ycmVjdCB3
aXRoIGFuIGV2ZW4gYXJyb3cgc2l6ZS4KLSAgICBpbnQgd2lkdGggPSBtYXgoUEFOR09fUElYRUxT
KGZvbnRTaXplKSwgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSk7Ci0gICAgd2lkdGggKz0gLSgod2lk
dGggJSAyKSAtIDEpICsgZ3RrU3R5bGUtPnh0aGlja25lc3M7Ci0KLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgo
d2lkdGgsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGlu
QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBXZSBleHBhbmQgdGhlIHBhaW50
ZWQgYXJlYSBieSAyIHBpeGVscyBvbiB0aGUgdG9wIGFuZCBib3R0b20gYW5kIDIgcGl4ZWxzIG9u
IHRoZSByaWdodC4gVGhpcwotICAgIC8vIGlzIGJlY2F1c2UgR1RLKyB0aGVtZXMgd2FudCB0byBk
cmF3IG92ZXIgdGhlIHRleHQgYm94IGJvcmRlcnMsIGJ1dCBXZWJDb3JlIHJlbmRlcnMgdGhlIGlu
bmVyCi0gICAgLy8gc3BpbiBidXR0b24gaW5zaWRlIHRoZSB0ZXh0IGJveC4KLSAgICBJbnRSZWN0
IGV4cGFuZGVkUmVjdChyZWN0KTsKLSAgICBleHBhbmRlZFJlY3QuaW5mbGF0ZVkoMik7Ci0gICAg
ZXhwYW5kZWRSZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSArIDIpOwotCi0gICAgV2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCBleHBhbmRlZFJl
Y3QpOwotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrU3BpbkJ1dHRvbigpOwotICAgIGd0a193
aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotCi0gICAgSW50UmVjdCBmdWxsU3BpbkJ1dHRvblJl
Y3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7Ci0gICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludEJveChmdWxsU3BpbkJ1dHRvblJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX05PUk1BTCwg
R1RLX1NIQURPV19JTiwgInNwaW5idXR0b24iKTsKLQotICAgIGJvb2wgdXBQcmVzc2VkID0gaXNT
cGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpOwotICAgIGJvb2wgdXBIb3ZlcmVk
ID0gaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpOwotICAgIGJvb2wgY29u
dHJvbEFjdGl2ZSA9IGlzRW5hYmxlZChyZW5kZXJPYmplY3QpICYmICFpc1JlYWRPbmx5Q29udHJv
bChyZW5kZXJPYmplY3QpOwotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IHVwUHJlc3Nl
ZCA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLQotICAgIEd0a1N0YXRlVHlwZSBz
dGF0ZVR5cGUgPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgaWYgKGNvbnRyb2xBY3RpdmUp
IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpICYmIHVwUHJlc3NlZCkKLSAg
ICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgICAgIGVsc2UgaWYg
KGlzSG92ZXJlZChyZW5kZXJPYmplY3QpICYmIHVwSG92ZXJlZCkKLSAgICAgICAgICAgIHN0YXRl
VHlwZSA9IEdUS19TVEFURV9QUkVMSUdIVDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Rh
dGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKLSAgICB9Ci0gICAgSW50UmVjdCB0b3BSZWN0KElu
dFBvaW50KCksIGV4cGFuZGVkUmVjdC5zaXplKCkpOwotICAgIHRvcFJlY3Quc2V0SGVpZ2h0KGV4
cGFuZGVkUmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3go
dG9wUmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX3VwIik7
Ci0KLSAgICAvLyBUaGUgYXJyb3cgc2l6ZS9wb3NpdGlvbiBjYWxjdWxhdGlvbiBoZXJlIGlzIGJh
c2VkIG9uIHRoZSBhcmJpdHJhcnkgZ3ltbmFzdGljcyB0aGF0IGhhcHBlbgotICAgIC8vIGluIGd0
a3NwaW5idXR0b24uYy4gSXQgaXNuJ3QgcHJldHR5IHRoZXJlIGFuZCBpdCBpc24ndCBwcmV0dHkg
aGVyZS4gVGhpcyBtYW5hZ2VzIHRvIG1ha2UKLSAgICAvLyB0aGUgYnV0dG9uIGxvb2sgbmF0aXZl
IGZvciBtYW55IHRoZW1lcyB0aG91Z2guCi0gICAgSW50UmVjdCBhcnJvd1JlY3Q7Ci0gICAgaW50
IGFycm93U2l6ZSA9IChleHBhbmRlZFJlY3Qud2lkdGgoKSAtIDMpIC8gMjsKLSAgICBhcnJvd1Np
emUgLT0gKGFycm93U2l6ZSAlIDIpIC0gMTsgLy8gRm9yY2Ugb2RkLgotICAgIGFycm93UmVjdC5z
ZXRXaWR0aChhcnJvd1NpemUpOwotICAgIGFycm93UmVjdC5zZXRIZWlnaHQoYXJyb3dTaXplKTsK
LSAgICBhcnJvd1JlY3QubW92ZSgoZXhwYW5kZWRSZWN0LndpZHRoKCkgLSBhcnJvd1JlY3Qud2lk
dGgoKSkgLyAyLAotICAgICAgICAgICAgICAgICAgICh0b3BSZWN0LmhlaWdodCgpIC0gYXJyb3dS
ZWN0LmhlaWdodCgpKSAvIDIgKyAxKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3co
YXJyb3dSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9XX1VQLCAi
c3BpbmJ1dHRvbiIpOwotCi0gICAgc2hhZG93VHlwZSA9IGlzUHJlc3NlZChyZW5kZXJPYmplY3Qp
ICYmICF1cFByZXNzZWQgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7Ci0gICAgaWYg
KGNvbnRyb2xBY3RpdmUpIHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpICYm
ICF1cFByZXNzZWQpCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfQUNUSVZFOwot
ICAgICAgICBlbHNlIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAmJiAhdXBIb3ZlcmVkKQot
ICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFMOwotICAgIH0KLSAgICBJ
bnRSZWN0IGJvdHRvbVJlY3QoSW50UG9pbnQoMCwgZXhwYW5kZWRSZWN0LmhlaWdodCgpIC8gMiks
IGV4cGFuZGVkUmVjdC5zaXplKCkpOwotICAgIGJvdHRvbVJlY3Quc2V0SGVpZ2h0KGV4cGFuZGVk
UmVjdC5oZWlnaHQoKSAtIGJvdHRvbVJlY3QueSgpKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1Bh
aW50Qm94KGJvdHRvbVJlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAic3BpbmJ1
dHRvbl9kb3duIik7Ci0KLSAgICBhcnJvd1JlY3Quc2V0WShhcnJvd1JlY3QueSgpICsgYm90dG9t
UmVjdC55KCkgLSAxKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0
LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgR1RLX0FSUk9XX0RPV04sICJzcGluYnV0
dG9uIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdSZWZQdHI8R2RrUGl4YnVmPiBnZXRT
dG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIGljb25O
YW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKLXsKLSAgICBB
U1NFUlQod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DT05UQUlORVIgfHwgd2lkZ2V0VHlwZSA9PSBH
VEtfVFlQRV9FTlRSWSk7Ci0KLSAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7Ci0g
ICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NPTlRBSU5FUiA/
IEdUS19XSURHRVQodGhlbWUtPmd0a0NvbnRhaW5lcigpKSA6IHRoZW1lLT5ndGtFbnRyeSgpOwot
Ci0gICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKLSAg
ICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2xvb2t1cF9pY29uX3NldChzdHlsZSwg
aWNvbk5hbWUpOwotICAgIHJldHVybiBhZG9wdEdSZWYoZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29u
KGljb25TZXQsIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVUeXBlPihzdGF0ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSwgMCwgMCkpOwotfQotCi1H
UmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBl
IHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIgKmZh
bGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNv
blNpemUpCi17Ci0gICAgcmV0dXJuIGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUod2lkZ2V0VHlw
ZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBkaXJlY3Rpb24sIHN0YXRlLCBpY29uU2l6ZSk7Ci19
Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtFbnRyeSgpOwot
ICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT5iYXNlW0dUS19TVEFURV9T
RUxFQ1RFRF07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9
IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJh
c2VbR1RLX1NUQVRFX0FDVElWRV07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0
KiB3aWRnZXQgPSBndGtFbnRyeSgpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3
aWRnZXQpLT50ZXh0W0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1l
R3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX0FDVElWRV07Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAgcmV0
dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVE
XTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtUcmVl
VmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT5iYXNlW0dU
S19TVEFURV9BQ1RJVkVdOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlzdEJv
eFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRn
ZXQgPSBndGtUcmVlVmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRn
ZXQpLT50ZXh0W0dUS19TVEFURV9TRUxFQ1RFRF07Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3Rr
OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAg
IEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4dFtHVEtfU1RBVEVfQUNUSVZFXTsKLX0KLQotQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAotewotICAg
IHN3aXRjaCAoY3NzVmFsdWVJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OgotICAg
ICAgICByZXR1cm4gQ29sb3IoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQnV0dG9uKCkpLT5mZ1tH
VEtfU1RBVEVfTk9STUFMXSk7Ci0gICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgotICAgICAg
ICByZXR1cm4gQ29sb3IoZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrRW50cnkoKSktPmZnW0dUS19T
VEFURV9OT1JNQUxdKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6
OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZ3RrU3R5
bGVTZXRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3R5bGUqIHByZXZpb3VzLCBSZW5k
ZXJUaGVtZSogcmVuZGVyVGhlbWUpCi17Ci0gICAgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGZ1
bmN0aW9uIGRvZXNuJ3QgZ2V0IGNhbGxlZCBtYW55IHRpbWVzIGZvciBhIHNpbmdsZSBHVEsrIHN0
eWxlIGNoYW5nZSBzaWduYWwuCi0gICAgcmVuZGVyVGhlbWUtPnBsYXRmb3JtQ29sb3JzRGlkQ2hh
bmdlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQot
ewotICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOwotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lOVF9UT19QT0lOVEVS
KFRSVUUpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0dXBXaWRnZXRBbmRBZGRUb0Nv
bnRhaW5lcihHdGtXaWRnZXQqIHdpZGdldCwgR3RrV2lkZ2V0KiB3aW5kb3cpIGNvbnN0Ci17Ci0g
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3aWRnZXQpOwotICAg
IHNldHVwV2lkZ2V0KHdpZGdldCk7Ci0KLSAgICAvLyBGSVhNRTogUGVyaGFwcyB0aGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBmb3IgdGhlIGNvbnRhaW5pbmcgd2luZG93IG9yIHBhcmVudCBjb250
YWluZXIuCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aWRnZXQsICJzdHlsZS1zZXQiLCBHX0NBTExC
QUNLKGd0a1N0eWxlU2V0Q2FsbGJhY2spLCBjb25zdF9jYXN0PFJlbmRlclRoZW1lR3RrKj4odGhp
cykpOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb250YWluZXIoKSBjb25z
dAotewotICAgIGlmIChtX2d0a0NvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrQ29udGFp
bmVyOwotCi0gICAgbV9ndGtXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQ
KTsKLSAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX2d0a1dpbmRvdywgbV9jb2xvcm1hcCk7
Ci0gICAgc2V0dXBXaWRnZXQobV9ndGtXaW5kb3cpOwotICAgIGd0a193aWRnZXRfc2V0X25hbWUo
bV9ndGtXaW5kb3csICJNb3ppbGxhR3RrV2lkZ2V0Iik7Ci0KLSAgICBtX2d0a0NvbnRhaW5lciA9
IGd0a19maXhlZF9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3Rr
Q29udGFpbmVyLCBtX2d0a1dpbmRvdyk7Ci0gICAgcmV0dXJuIG1fZ3RrQ29udGFpbmVyOwotfQot
Ci1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtCdXR0b24oKSBjb25zdAotewotICAgIGlm
IChtX2d0a0J1dHRvbikKLSAgICAgICAgcmV0dXJuIG1fZ3RrQnV0dG9uOwotICAgIG1fZ3RrQnV0
dG9uID0gZ3RrX2J1dHRvbl9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVy
KG1fZ3RrQnV0dG9uLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrQnV0dG9uOwot
fQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtFbnRyeSgpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fZ3RrRW50cnkpCi0gICAgICAgIHJldHVybiBtX2d0a0VudHJ5OwotICAgIG1fZ3RrRW50
cnkgPSBndGtfZW50cnlfbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lciht
X2d0a0VudHJ5LCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrRW50cnk7Ci19Ci0K
LUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1RyZWVWaWV3KCkgY29uc3QKLXsKLSAgICBp
ZiAobV9ndGtUcmVlVmlldykKLSAgICAgICAgcmV0dXJuIG1fZ3RrVHJlZVZpZXc7Ci0gICAgbV9n
dGtUcmVlVmlldyA9IGd0a190cmVlX3ZpZXdfbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRU
b0NvbnRhaW5lcihtX2d0a1RyZWVWaWV3LCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1f
Z3RrVHJlZVZpZXc7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1ZTY2FsZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrVlNjYWxlKQotICAgICAgICByZXR1cm4gbV9ndGtWU2Nh
bGU7Ci0gICAgbV9ndGtWU2NhbGUgPSBndGtfdnNjYWxlX25ldygwKTsKLSAgICBzZXR1cFdpZGdl
dEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjYWxlLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0
dXJuIG1fZ3RrVlNjYWxlOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtIU2Nh
bGUoKSBjb25zdAotewotICAgIGlmIChtX2d0a0hTY2FsZSkKLSAgICAgICAgcmV0dXJuIG1fZ3Rr
SFNjYWxlOwotICAgIG1fZ3RrSFNjYWxlID0gZ3RrX2hzY2FsZV9uZXcoMCk7Ci0gICAgc2V0dXBX
aWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0hTY2FsZSwgZ3RrQ29udGFpbmVyKCkpOwotICAg
IHJldHVybiBtX2d0a0hTY2FsZTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3Rr
UmFkaW9CdXR0b24oKSBjb25zdAotewotICAgIGlmIChtX2d0a1JhZGlvQnV0dG9uKQotICAgICAg
ICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKLSAgICBtX2d0a1JhZGlvQnV0dG9uID0gZ3RrX3Jh
ZGlvX2J1dHRvbl9uZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0
a1JhZGlvQnV0dG9uLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrUmFkaW9CdXR0
b247Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NoZWNrQnV0dG9uKCkgY29u
c3QKLXsKLSAgICBpZiAobV9ndGtDaGVja0J1dHRvbikKLSAgICAgICAgcmV0dXJuIG1fZ3RrQ2hl
Y2tCdXR0b247Ci0gICAgbV9ndGtDaGVja0J1dHRvbiA9IGd0a19jaGVja19idXR0b25fbmV3KCk7
Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0NoZWNrQnV0dG9uLCBndGtD
b250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrQ2hlY2tCdXR0b247Ci19Ci0KLUd0a1dpZGdl
dCogUmVuZGVyVGhlbWVHdGs6Omd0a1Byb2dyZXNzQmFyKCkgY29uc3QKLXsKLSAgICBpZiAobV9n
dGtQcm9ncmVzc0JhcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrUHJvZ3Jlc3NCYXI7Ci0gICAgbV9n
dGtQcm9ncmVzc0JhciA9IGd0a19wcm9ncmVzc19iYXJfbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRB
bmRBZGRUb0NvbnRhaW5lcihtX2d0a1Byb2dyZXNzQmFyLCBndGtDb250YWluZXIoKSk7Ci0gICAg
cmV0dXJuIG1fZ3RrUHJvZ3Jlc3NCYXI7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEd0a0NvbWJvQm94
QnV0dG9uKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciB0YXJnZXQpCi17Ci0gICAgaWYgKCFH
VEtfSVNfVE9HR0xFX0JVVFRPTih3aWRnZXQpKQotICAgICAgICByZXR1cm47Ci0gICAgR3RrV2lk
Z2V0Kiogd2lkZ2V0VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kio+KHRhcmdldCk7Ci0g
ICAgKndpZGdldFRhcmdldCA9IHdpZGdldDsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIEd0
a1dpZGdldCogYXJyb3c7Ci0gICAgR3RrV2lkZ2V0KiBzZXBhcmF0b3I7Ci19IENvbWJvQm94V2lk
Z2V0UGllY2VzOwotCi1zdGF0aWMgdm9pZCBnZXRHdGtDb21ib0JveFBpZWNlcyhHdGtXaWRnZXQq
IHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoR1RLX0lTX0FSUk9XKHdpZGdldCkp
IHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+YXJy
b3cgPSB3aWRnZXQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKEdUS19JU19TRVBB
UkFUT1Iod2lkZ2V0KSkgCi0gICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0UGllY2Vz
Kj4oZGF0YSktPnNlcGFyYXRvciA9IHdpZGdldDsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVt
ZUd0azo6Z3RrQ29tYm9Cb3goKSBjb25zdAotewotICAgIGlmIChtX2d0a0NvbWJvQm94KQotICAg
ICAgICByZXR1cm4gbV9ndGtDb21ib0JveDsKLSAgICBtX2d0a0NvbWJvQm94ID0gZ3RrX2NvbWJv
X2JveF9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrQ29tYm9C
b3gsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtDb21ib0JveDsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6cmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdAotewotICAg
IGd0a0NvbWJvQm94KCk7IC8vIEVuc3VyZSB0aGF0IHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBjb21i
byBib3guCi0KLSAgICAvLyBTb21lIHRoZW1lcyBsb29rIGF0IHdpZGdldCBhbmNlc3RyeSB0byBk
ZXRlcm1pbmUgaG93IHRvIHJlbmRlciB3aWRnZXRzLCBzbwotICAgIC8vIGdldCB0aGUgR3RrQnV0
dG9uIHRoYXQgaXMgdGhlIGFjdHVhbCBjaGlsZCBvZiB0aGUgY29tYm8gYm94LgotICAgIGd0a19j
b250YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIobV9ndGtDb21ib0JveCksIGdldEd0a0NvbWJv
Qm94QnV0dG9uLCAmbV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgQVNTRVJUKG1fZ3RrQ29tYm9C
b3hCdXR0b24pOwotICAgIHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hCdXR0b24pOwotICAgIGdf
b2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9ndGtDb21ib0JveEJ1dHRvbiksIHJl
aW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveEJ1dHRvbikpOwotCi0gICAg
Q29tYm9Cb3hXaWRnZXRQaWVjZXMgcGllY2VzID0geyAwLCAwIH07Ci0gICAgR3RrV2lkZ2V0KiBi
dXR0b25DaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oZ3RrQ29tYm9Cb3hCdXR0b24o
KSkpOwotICAgIGlmIChHVEtfSVNfSEJPWChidXR0b25DaGlsZCkpCi0gICAgICAgIGd0a19jb250
YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIoYnV0dG9uQ2hpbGQpLCBnZXRHdGtDb21ib0JveFBp
ZWNlcywgJnBpZWNlcyk7Ci0gICAgZWxzZSBpZiAoR1RLX0lTX0FSUk9XKGJ1dHRvbkNoaWxkKSkK
LSAgICAgICAgcGllY2VzLmFycm93ID0gYnV0dG9uQ2hpbGQ7Ci0KLSAgICBBU1NFUlQocGllY2Vz
LmFycm93KTsKLSAgICBtX2d0a0NvbWJvQm94QXJyb3cgPSBwaWVjZXMuYXJyb3c7Ci0gICAgc2V0
dXBXaWRnZXQobV9ndGtDb21ib0JveEFycm93KTsKLSAgICAvLyBXaGVuIHRoZSBzdHlsZSBjaGFu
Z2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4KLSAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fZ3RrQ29tYm9Cb3hBcnJvdyksIHJlaW50ZXJw
cmV0X2Nhc3Q8Z3BvaW50ZXIqPigmbV9ndGtDb21ib0JveEFycm93KSk7Ci0KLSAgICBtX2d0a0Nv
bWJvQm94U2VwYXJhdG9yID0gcGllY2VzLnNlcGFyYXRvcjsKLSAgICBpZiAobV9ndGtDb21ib0Jv
eFNlcGFyYXRvcikgewotICAgICAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94U2VwYXJhdG9y
KTsKLSAgICAgICAgLy8gV2hlbiB0aGUgc3R5bGUgY2hhbmdlcywgdGhlIGNvbWJvIGJveCBtYXkg
ZGVzdHJveSBpdHMgY2hpbGRyZW4uCi0gICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIo
R19PQkpFQ1QobV9ndGtDb21ib0JveFNlcGFyYXRvciksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50
ZXIqPigmbV9ndGtDb21ib0JveFNlcGFyYXRvcikpOwotICAgIH0KLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hCdXR0b24oKSBjb25zdAotewotICAgIGlmIChtX2d0
a0NvbWJvQm94QnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtDb21ib0JveEJ1dHRvbjsKLSAg
ICByZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpOwotICAgIEFTU0VSVChtX2d0a0NvbWJvQm94QnV0
dG9uKTsKLSAgICByZXR1cm4gbV9ndGtDb21ib0JveEJ1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hBcnJvdygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3Rr
Q29tYm9Cb3hBcnJvdykKLSAgICAgICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hBcnJvdzsKLSAgICBy
ZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpOwotICAgIEFTU0VSVChtX2d0a0NvbWJvQm94QXJyb3cp
OwotICAgIHJldHVybiBtX2d0a0NvbWJvQm94QXJyb3c7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVy
VGhlbWVHdGs6Omd0a0NvbWJvQm94U2VwYXJhdG9yKCkgY29uc3QKLXsKLSAgICAvLyBtX2d0a0Nv
bWJvQm94U2VwYXJhdG9yIG1heSBiZSBudWxsIGVpdGhlciBiZWNhdXNlIHdlIGhhdmVuJ3QgaW5p
dGlhbGl6ZWQgdGhlIGNvbWJvIGJveAotICAgIC8vIG9yIGJlY2F1c2UgdGhlIGNvbWJvIGJveGVz
IGluIHRoaXMgdGhlbWUgZG9uJ3QgaGF2ZSBzZXBhcmF0b3JzLiBJZiBtX2d0a0NvbWJvQm94QXJy
b3cKLSAgICAvLyBhcnJvdyBpc24ndCBudWxsLCB3ZSBkZWZpbml0ZWx5IGhhdmUgaW5pdGlhbGl6
ZWQgdGhlIGNvbWJvIGJveC4KLSAgICBpZiAobV9ndGtDb21ib0JveEFycm93IHx8IG1fZ3RrQ29t
Ym9Cb3hCdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94U2VwYXJhdG9yOwotICAg
IHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIG1fZ3RrQ29tYm9Cb3hTZXBh
cmF0b3I7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0hTY3JvbGxiYXIoKSBj
b25zdAotewotICAgIGlmIChtX2d0a0hTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX2d0a0hT
Y3JvbGxiYXI7Ci0gICAgbV9ndGtIU2Nyb2xsYmFyID0gZ3RrX2hzY3JvbGxiYXJfbmV3KDApOwot
ICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtIU2Nyb2xsYmFyLCBndGtDb250
YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrVlNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrVlNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrVlNjcm9sbGJhcjsKLSAgICBtX2d0a1ZTY3Jv
bGxiYXIgPSBndGtfdnNjcm9sbGJhcl9uZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0Nv
bnRhaW5lcihtX2d0a1ZTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9n
dGtWU2Nyb2xsYmFyOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtTcGluQnV0
dG9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtTcGluQnV0dG9uKQotICAgICAgICByZXR1cm4g
bV9ndGtTcGluQnV0dG9uOwotICAgIG1fZ3RrU3BpbkJ1dHRvbiA9IGd0a19zcGluX2J1dHRvbl9u
ZXdfd2l0aF9yYW5nZSgwLCAxMCwgMSk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5l
cihtX2d0a1NwaW5CdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtTcGlu
QnV0dG9uOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHVEtfQVBJ
X1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGszLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3ZjVhMmEyZDMwMDIwZDgy
MjQzY2UyYWFmOGIyMDU2MGZhZDUxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsz
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUaGVtZUd0ay5oIgotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUg
Ik1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBh
aW50SW5mby5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2luY2x1ZGUgIlVz
ZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Z2RrL2dk
ay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBU
aGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRl
ZmluZWQgYXMgTUlOX0FSUk9XX1NJWkUgaW4gZ3RrYXJyb3cuYy4KLXN0YXRpYyBjb25zdCBpbnQg
bWluQXJyb3dTaXplID0gMTU7Ci0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQg
YnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9XX1dJRFRIIGluIGd0a3Nw
aW5idXR0b24uYy4KLXN0YXRpYyBjb25zdCBpbnQgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDY7
Ci0KLXR5cGVkZWYgSGFzaE1hcDxHVHlwZSwgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+ID4gU3R5
bGVDb250ZXh0TWFwOwotc3RhdGljIFN0eWxlQ29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCk7
Ci0KLXN0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1T
cGVjKikKLXsKLSAgICBTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxl
Q29udGV4dE1hcCgpLmVuZCgpOwotICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gc3R5bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT52YWx1ZS5nZXQo
KSk7Ci0KLSAgICBQYWdlOjpzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRm9yQWxsUGFnZXMoKTsK
LX0KLQotc3RhdGljIFN0eWxlQ29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0eWxlQ29udGV4dE1hcCwgbWFwLCAoKSk7Ci0KLSAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAg
ICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7
Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6Omd0ay10aGVtZS1u
YW1lIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIDApOwotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstY29sb3Itc2NoZW1lIiwgR19D
QUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIDApOwotICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBHdGtTdHlsZUNv
bnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQotewotICAgIFN0eWxlQ29u
dGV4dE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgpLmFkZCh3aWRnZXRU
eXBlLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXR1cm4gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLQotICAgIEd0a1dpZGdldFBhdGgqIHBhdGggPSBn
dGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBh
dGgsIHdpZGdldFR5cGUpOwotCi0gICAgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0NST0xM
QkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RL
X1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtf
VFlQRV9FTlRSWSkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgs
IDAsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBH
VEtfVFlQRV9BUlJPVykKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBh
dGgsIDAsICJhcnJvdyIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQlVU
VE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RL
X1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQ
RV9TQ0FMRSkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAs
IEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtf
VFlQRV9TRVBBUkFUT1IpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0VQQVJBVE9SKTsKLSAgICBlbHNlIGlmICh3aWRnZXRU
eXBlID09IEdUS19UWVBFX1BST0dSRVNTX0JBUikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19QUk9HUkVTU0JBUik7Ci0gICAg
ZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TUElOX0JVVFRPTikKLSAgICAgICAgZ3Rr
X3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TUElO
QlVUVE9OKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1RSRUVfVklFVykK
LSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlM
RV9DTEFTU19WSUVXKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNL
X0JVVFRPTikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAs
IEdUS19TVFlMRV9DTEFTU19DSEVDSyk7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtf
VFlQRV9SQURJT19CVVRUT04pCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFz
cyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOwotCi0gICAgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwotICAg
IGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOwotCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IGNvbnRleHQ7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ2V0KCk7Ci19Ci0KLUd0a1N0eWxlQ29u
dGV4dCogUmVuZGVyVGhlbWVHdGs6Omd0a1Njcm9sbGJhclN0eWxlKCkKLXsKLSAgICByZXR1cm4g
Z2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDUk9MTEJBUik7Ci19Ci0KLS8vIFRoaXMgaXMgbm90
IGEgc3RhdGljIG1ldGhvZCwgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBHVEsrIGhl
YWRlcnMgaW4gUmVuZGVyVGhlbWVHdGsuaC4KLWV4dGVybiBHdGtUZXh0RGlyZWN0aW9uIGd0a1Rl
eHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbik7Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRm
b3JtSW5pdCgpCi17Ci19Ci0KLVJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQotewot
fQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29s
b3JzKCkKLXsKLSAgICBHZGtSR0JBIGNvbG9yOwotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGFp
bmVyQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT05UQUlORVIpOwotCi0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwg
R1RLX1NUQVRFX0ZMQUdfTk9STUFMLCAmY29sb3IpOwotICAgIG1fcGFuZWxDb2xvciA9IGNvbG9y
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNv
bnRleHQsIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmNvbG9yKTsKLSAgICBtX3NsaWRlckNvbG9y
ID0gY29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29u
dGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZjb2xvcik7Ci0gICAgbV9z
bGlkZXJUaHVtYkNvbG9yID0gY29sb3I7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgYWRqdXN0
UmVjdEZvckZvY3VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMt
bGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7Ci0gICAgcmVjdC5pbmZsYXRlKGZv
Y3VzV2lkdGggKyBmb2N1c1BhZCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0
KQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IDA7Ci0gICAgYm9vbCBjaGVja0lu
dGVyaW9yRm9jdXMgPSBmYWxzZTsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBD
aGVja2JveFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQocGFydCA9PSBDaGVja2JveFBhcnQgPyBHVEtfVFlQRV9DSEVDS19CVVRUT04g
OiBHVEtfVFlQRV9SQURJT19CVVRUT04pOwotCi0gICAgICAgIGdpbnQgaW5kaWNhdG9yU3BhY2lu
ZzsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0
b3Itc3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBOVUxMKTsKLSAgICAgICAgcmVjdC5pbmZs
YXRlKGluZGljYXRvclNwYWNpbmcpOwotCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNsaWRl
clZlcnRpY2FsUGFydDoKLSAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgotICAgICAgICBj
b250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAg
IGNhc2UgTWVudWxpc3RQYXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX0JVVFRPTik7Ci0gICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1cyA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFy
dDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSk7Ci0g
ICAgICAgIGNoZWNrSW50ZXJpb3JGb2N1cyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY29udGV4dCk7Ci0g
ICAgaWYgKGNoZWNrSW50ZXJpb3JGb2N1cykgewotICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZv
Y3VzOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImludGVy
aW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsIE5VTEwpOwotICAgICAgICBpZiAoaW50ZXJpb3JG
b2N1cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYWRqdXN0UmVjdEZvckZvY3Vz
KGNvbnRleHQsIHJlY3QpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxl
Q29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIC8vIFRoZSB3aWR0
aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0
aGVtLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPdGhlciBw
b3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMyB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IHZhbHVl
IGRlZmluZWQgYnkgR1RLKy4KLSAgICAvLyBHVEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5kIHRoZSBu
YXRpdmUgbG9vay4KLSAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRp
b24gdmFsdWVzIG90aGVyIHRoYW4gMTMgYWN0dWFsbHkgYnJlYWsgc2l0ZSBjb21wYXRpYmlsaXR5
LgotICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5
bGUoY29udGV4dCwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOwotCi0g
ICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKLQotICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGlu
ZGljYXRvclNpemUsIEZpeGVkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0
IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBm
dWxsUmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRl
eHQod2lkZ2V0VHlwZSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQot
ICAgIC8vIFNvbWUgdGhlbWVzIGRvIG5vdCByZW5kZXIgbGFyZ2UgdG9nZ2xlIGJ1dHRvbnMgcHJv
cGVybHksIHNvIHdlIHNpbXBseQotICAgIC8vIHNocmluayB0aGUgcmVjdGFuZ2xlIGJhY2sgZG93
biB0byB0aGUgZGVmYXVsdCBzaXplIGFuZCB0aGVuIGNlbnRlciBpdAotICAgIC8vIGluIHRoZSBm
dWxsIHRvZ2dsZSBidXR0b24gcmVnaW9uLiBUaGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IGZvcmNp
bmcgdG9nZ2xlCi0gICAgLy8gYnV0dG9ucyB0byBiZSBhIHNtYWxsZXIgc2l6ZSBpcyB0aGF0IHdl
IGRvbid0IHdhbnQgdG8gYnJlYWsgc2l0ZSBsYXlvdXRzLgotICAgIGdpbnQgaW5kaWNhdG9yU2l6
ZTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1z
aXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOwotICAgIEludFJlY3QgcmVjdChmdWxsUmVjdCk7
Ci0gICAgaWYgKHJlY3Qud2lkdGgoKSA+IGluZGljYXRvclNpemUpIHsKLSAgICAgICAgcmVjdC5p
bmZsYXRlWCgtKHJlY3Qud2lkdGgoKSAtIGluZGljYXRvclNpemUpIC8gMik7Ci0gICAgICAgIHJl
Y3Quc2V0V2lkdGgoaW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2UgcmVjdC53aWR0aCgpIHdhcyBl
cXVhbCB0byBpbmRpY2F0b3JTaXplICsgMS4KLSAgICB9Ci0KLSAgICBpZiAocmVjdC5oZWlnaHQo
KSA+IGluZGljYXRvclNpemUpIHsKLSAgICAgICAgcmVjdC5pbmZsYXRlWSgtKHJlY3QuaGVpZ2h0
KCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOwotICAgICAgICByZWN0LnNldEhlaWdodChpbmRpY2F0
b3JTaXplKTsgLy8gSW4gY2FzZSByZWN0LmhlaWdodCgpIHdhcyBlcXVhbCB0byBpbmRpY2F0b3JT
aXplICsgMS4KLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgd2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04g
PyBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0sgOiBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOwotCi0gICAg
Z3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3Qp
IHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFn
cyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNlIGlmICh0aGVtZS0+aXNI
b3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BS
RUxJR0hUOwotICAgIGlmICh0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRlck9iamVjdCkpCi0g
ICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOQ09OU0lTVEVOVDsKLSAgICBlbHNlIGlm
ICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19T
VEFURV9GTEFHX0FDVElWRTsKLSAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3Qp
KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRDsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4o
ZmxhZ3MpKTsKLQotICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTikK
LSAgICAgICAgZ3RrX3JlbmRlcl9jaGVjayhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19yZW5kZXJfb3B0aW9uKGNvbnRl
eHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRoZW1l
LT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBJbnRSZWN0IGluZGljYXRvclJl
Y3QocmVjdCk7Ci0gICAgICAgIGdpbnQgaW5kaWNhdG9yU3BhY2luZzsKLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc3BhY2luZyIsICZpbmRp
Y2F0b3JTcGFjaW5nLCBOVUxMKTsKLSAgICAgICAgaW5kaWNhdG9yUmVjdC5pbmZsYXRlKGluZGlj
YXRvclNwYWNpbmcpOwotICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaW5kaWNhdG9yUmVjdC54KCksIGlu
ZGljYXRvclJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvclJlY3Qu
d2lkdGgoKSwgaW5kaWNhdG9yUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0
Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBzZXRUb2dnbGVT
aXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIEdUS19UWVBFX0NIRUNLX0JVVFRPTiwgcmVuZGVyT2Jq
ZWN0LCBwYWludEluZm8sIHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9SQURJT19CVVRUT04pLCBz
dHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIEdUS19UWVBFX1JBRElPX0JVVFRPTiwg
cmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIHZvaWQgcmVuZGVyQnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBidXR0b25S
ZWN0KHJlY3QpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghdGhlbWUtPmlzRW5h
YmxlZChyZW5kZXJPYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmpl
Y3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBl
bHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9
IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRl
ck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVG
bGFncz4oZmxhZ3MpKTsKLQotICAgIGlmICh0aGVtZS0+aXNEZWZhdWx0KHJlbmRlck9iamVjdCkp
IHsKLSAgICAgICAgR3RrQm9yZGVyKiBib3JkZXJQdHIgPSAwOwotICAgICAgICBHdGtCb3JkZXIg
Ym9yZGVyID0geyAxLCAxLCAxLCAxIH07Ci0KLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKGNvbnRleHQsICJkZWZhdWx0LWJvcmRlciIsICZib3JkZXJQdHIsIE5VTEwpOwotICAg
ICAgICBpZiAoYm9yZGVyUHRyKSB7Ci0gICAgICAgICAgICBib3JkZXIgPSAqYm9yZGVyUHRyOwot
ICAgICAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGJvcmRlclB0cik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBidXR0b25SZWN0Lm1vdmUoYm9yZGVyLmxlZnQsIGJvcmRlci50b3ApOwotICAgICAgICBi
dXR0b25SZWN0LnNldFdpZHRoKGJ1dHRvblJlY3Qud2lkdGgoKSAtIChib3JkZXIubGVmdCArIGJv
cmRlci5yaWdodCkpOwotICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChidXR0b25SZWN0Lmhl
aWdodCgpIC0gKGJvcmRlci50b3AgKyBib3JkZXIuYm90dG9tKSk7Ci0KLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19ERUZBVUxUKTsK
LSAgICB9Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVj
dC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3Rr
X3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0
aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2VkKHJl
bmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICAg
ICAgZ2Jvb2xlYW4gZGlzcGxhY2VGb2N1cywgaW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJp
b3JGb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNwbGFjZS1m
b2N1cyIsICZkaXNwbGFjZUZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7Ci0KLSAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsKLSAgICAgICAgICAgIEd0
a0JvcmRlciBib3JkZXJXaWR0aDsKLSAgICAgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9i
b3JkZXIoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpLCAmYm9yZGVy
V2lkdGgpOwotCi0gICAgICAgICAgICBidXR0b25SZWN0ID0gSW50UmVjdChidXR0b25SZWN0Lngo
KSArIGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1BhZCwgYnV0dG9uUmVjdC55KCkgKyBib3JkZXJX
aWR0aC50b3AgKyBmb2N1c1BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1
dHRvblJlY3Qud2lkdGgoKSAtICgyICogZm9jdXNQYWQgKyBib3JkZXJXaWR0aC5sZWZ0ICsgYm9y
ZGVyV2lkdGgucmlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9u
UmVjdC5oZWlnaHQoKSAtICgyICogZm9jdXNQYWQgKyBib3JkZXJXaWR0aC50b3AgKyBib3JkZXJX
aWR0aC5ib3R0b20pKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBidXR0b25SZWN0Lmlu
ZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLQotICAgICAgICBpZiAoZGlzcGxhY2VGb2N1
cyAmJiB0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgICAgIGdpbnQg
Y2hpbGREaXNwbGFjZW1lbnRYOwotICAgICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFk7
Ci0gICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXgi
LCAmY2hpbGREaXNwbGFjZW1lbnRYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjaGlsZC1kaXNwbGFjZW1lbnQteSIsICZjaGlsZERpc3BsYWNlbWVudFksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgICAgICBi
dXR0b25SZWN0Lm1vdmUoY2hpbGREaXNwbGFjZW1lbnRYLCBjaGlsZERpc3BsYWNlbWVudFkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8u
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25S
ZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICB9
Ci19Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRp
cmVjdGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLQotICAgIHJlbmRlckJ1dHRvbih0aGlzLCBjb250ZXh0
LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9p
ZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtCb3JkZXImIGJvcmRl
ciwgaW50JiBmb2N1cywgaW50JiBzZXBhcmF0b3IpCi17Ci0gICAgLy8gSWYgdGhpcyBtZW51IGxp
c3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCi0gICAgLy8g
ZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1
c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9DT01CT19CT1gpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29u
dGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0
eWxlLT5kaXJlY3Rpb24oKSkpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIo
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXIpOwotCi0gICAg
Z2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9j
dXNQYWQsIE5VTEwpOwotICAgIGZvY3VzID0gaW50ZXJpb3JGb2N1cyA/IGZvY3VzV2lkdGggKyBm
b2N1c1BhZCA6IDA7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwot
Ci0gICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TRVBBUkFUT1IpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBHdGtUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rp
b24oc3R5bGUtPmRpcmVjdGlvbigpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVj
dGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCAic2VwYXJhdG9yIik7Ci0KLSAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsK
LSAgICBnaW50IHNlcGFyYXRvcldpZHRoOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0
b3JzIiwgJndpZGVTZXBhcmF0b3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKLQotICAgIC8vIEdUSysgYWx3YXlzIHVzZXMgYm9yZGVyLmxlZnQs
IHJlZ2FyZGxlc3Mgb2YgdGV4dCBkaXJlY3Rpb24uIFNlZSBndGtzZXBlcmF0b3IuYy4KLSAgICBp
ZiAoIXdpZGVTZXBhcmF0b3JzKQotICAgICAgICBzZXBhcmF0b3JXaWR0aCA9IGJvcmRlci5sZWZ0
OwotCi0gICAgc2VwYXJhdG9yID0gc2VwYXJhdG9yV2lkdGg7Ci0KLSAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKGNvbnRleHQpOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgR3RrQm9y
ZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAgaW50IGZvY3VzV2lkdGggPSAw
LCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3Jk
ZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwotICAgIGludCBsZWZ0ID0gYm9y
ZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGg7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9
PSBSVEwpCi0gICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJvd1NpemU7Ci0g
ICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgR3RrQm9yZGVyIGJv
cmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBh
cmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0
aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwotICAgIGludCByaWdodCA9IGJvcmRlcldp
ZHRoLnJpZ2h0ICsgZm9jdXNXaWR0aDsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IExU
UikKLSAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJvd1NpemU7Ci0gICAg
cmV0dXJuIHJpZ2h0OwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgYm9yZGVy
V2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKLSAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRv
cldpZHRoID0gMDsKLSAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBm
b2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7Ci0gICAgcmV0dXJuIGJvcmRlcldpZHRoLnRvcCAr
IGZvY3VzV2lkdGg7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIEd0a0JvcmRlciBib3Jk
ZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwotICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJh
dG9yV2lkdGggPSAwOwotICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgs
IGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKLSAgICByZXR1cm4gYm9yZGVyV2lkdGguYm90
dG9tICsgZm9jdXNXaWR0aDsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIEd0a1RleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0KLSAgICAvLyBQ
YWludCB0aGUgYnV0dG9uLgotICAgIEd0a1N0eWxlQ29udGV4dCogYnV0dG9uU3R5bGVDb250ZXh0
ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2F2ZShidXR0b25TdHlsZUNvbnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9k
aXJlY3Rpb24oYnV0dG9uU3R5bGVDb250ZXh0LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhidXR0b25TdHlsZUNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRU
T04pOwotICAgIHJlbmRlckJ1dHRvbih0aGlzLCBidXR0b25TdHlsZUNvbnRleHQsIHJlbmRlck9i
amVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLQotICAgIC8vIEdldCB0aGUgaW5uZXIgcmVjdGFuZ2xl
LgotICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgR3RrQm9yZGVyKiBpbm5lckJv
cmRlclB0ciA9IDA7Ci0gICAgR3RrQm9yZGVyIGlubmVyQm9yZGVyID0geyAxLCAxLCAxLCAxIH07
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRvblN0eWxlQ29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlubmVyLWJvcmRlciIsICZpbm5lckJvcmRl
clB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgi
LCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBh
ZGRpbmciLCAmZm9jdXNQYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OwotICAgIGlmIChpbm5lckJvcmRlclB0cikgewotICAgICAgICBpbm5lckJvcmRlciA9ICppbm5l
ckJvcmRlclB0cjsKLSAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyUHRyKTsKLSAg
ICB9Ci0KLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7Ci0gICAgR3RrU3RhdGVGbGFncyBzdGF0
ZSA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShidXR0b25TdHlsZUNvbnRleHQpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoYnV0dG9uU3R5bGVDb250ZXh0LCBzdGF0ZSwg
JmJvcmRlcldpZHRoKTsKLQotICAgIGZvY3VzV2lkdGggKz0gZm9jdXNQYWQ7Ci0gICAgSW50UmVj
dCBpbm5lclJlY3QocmVjdC54KCkgKyBpbm5lckJvcmRlci5sZWZ0ICsgYm9yZGVyV2lkdGgubGVm
dCArIGZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyBpbm5lckJv
cmRlci50b3AgKyBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAg
ICAgICAgIHJlY3Qud2lkdGgoKSAtIGJvcmRlcldpZHRoLmxlZnQgLSBib3JkZXJXaWR0aC5yaWdo
dCAtIGlubmVyQm9yZGVyLmxlZnQgLSBpbm5lckJvcmRlci5yaWdodCAtICgyICogZm9jdXNXaWR0
aCksCi0gICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIGJvcmRlcldpZHRoLnRv
cCAtIGJvcmRlcldpZHRoLmJvdHRvbSAtIGlubmVyQm9yZGVyLnRvcCAtIGlubmVyQm9yZGVyLmJv
dHRvbSAtICgyICogZm9jdXNXaWR0aCkpOwotCi0gICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmpl
Y3QpKSB7Ci0gICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOwotICAgICAgICBnaW50IGNo
aWxkRGlzcGxhY2VtZW50WTsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1
dHRvblN0eWxlQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
aGlsZC1kaXNwbGFjZW1lbnQteCIsICZjaGlsZERpc3BsYWNlbWVudFgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNw
bGFjZW1lbnRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0g
ICAgICAgIGlubmVyUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1l
bnRZKTsKLSAgICB9Ci0gICAgaW5uZXJSZWN0LnNldFdpZHRoKG1heCgxLCBpbm5lclJlY3Qud2lk
dGgoKSkpOwotICAgIGlubmVyUmVjdC5zZXRIZWlnaHQobWF4KDEsIGlubmVyUmVjdC5oZWlnaHQo
KSkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShidXR0b25TdHlsZUNvbnRleHQp
OwotCi0gICAgLy8gUGFpbnQgdGhlIGFycm93LgotICAgIEd0a1N0eWxlQ29udGV4dCogYXJyb3dT
dHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQVJST1cpOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NhdmUoYXJyb3dTdHlsZUNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihhcnJvd1N0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdyIpOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7Ci0KLSAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShhcnJvd1N0eWxlQ29udGV4dCwgImFycm93LXNjYWxpbmci
LCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKLQotICAgIEludFNpemUgYXJyb3dTaXplKG1pbkFycm93
U2l6ZSwgaW5uZXJSZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFBvaW50IGFycm93UG9zaXRpb24o
aW5uZXJSZWN0LmxvY2F0aW9uKCkpOwotICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElS
X0xUUikKLSAgICAgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKGlubmVyUmVjdC53aWR0aCgpIC0gYXJy
b3dTaXplLndpZHRoKCksIDApOwotCi0gICAgLy8gR1RLKyBhY3R1YWxseSBmZXRjaGVzIHRoZSB4
YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgZnJvbSB0aGUgd2lkZ2V0LCBidXQgc2luY2Ugd2UKLSAg
ICAvLyBkb24ndCBoYXZlIGEgd2lkZ2V0IGhlcmUsIHdlIGFyZSBqdXN0IHVzaW5nIHRoZSBkZWZh
dWx0IHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBvZiAwLjUuCi0gICAgZ2ludCBleHRlbnQgPSBz
dGQ6Om1pbihhcnJvd1NpemUud2lkdGgoKSwgYXJyb3dTaXplLmhlaWdodCgpKSAqIGFycm93U2Nh
bGluZzsKLSAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoKGFycm93U2l6ZS53aWR0aCgpIC0gZXh0ZW50
KSAvIDIsIChhcnJvd1NpemUuaGVpZ2h0KCkgLSBleHRlbnQpIC8gMik7Ci0KLSAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoYXJyb3dTdHlsZUNvbnRleHQsIHN0YXRlKTsKLSAgICBndGtf
cmVuZGVyX2Fycm93KGFycm93U3R5bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsIEdfUEksIGFycm93
UG9zaXRpb24ueCgpLCBhcnJvd1Bvc2l0aW9uLnkoKSwgZXh0ZW50KTsKLQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3Jlc3RvcmUoYXJyb3dTdHlsZUNvbnRleHQpOwotCi0gICAgLy8gUGFpbnQgdGhl
IHNlcGFyYXRvciBpZiBuZWVkZWQuCi0gICAgR3RrU3R5bGVDb250ZXh0KiBzZXBhcmF0b3JTdHls
ZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7Ci0KLSAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgZGlyZWN0aW9u
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc2VwYXJhdG9yU3R5bGVDb250ZXh0
LCAic2VwYXJhdG9yIik7Ci0KLSAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsKLSAgICBnaW50
IHNlcGFyYXRvcldpZHRoOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShzZXBhcmF0
b3JTdHlsZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlLXNl
cGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlmICh3aWRlU2VwYXJhdG9ycyAmJiAhc2VwYXJh
dG9yV2lkdGgpIHsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShzZXBhcmF0b3JT
dHlsZUNvbnRleHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUpOwotICAg
IEludFBvaW50IHNlcGFyYXRvclBvc2l0aW9uKGFycm93UG9zaXRpb24ueCgpLCBpbm5lclJlY3Qu
eSgpKTsKLSAgICBpZiAod2lkZVNlcGFyYXRvcnMpIHsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9
PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgt
c2VwYXJhdG9yV2lkdGgsIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXBhcmF0b3JQ
b3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKLQotICAgICAgICBndGtfcmVuZGVy
X2ZyYW1lKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcldpZHRoLCBpbm5lclJlY3QuaGVp
Z2h0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0
YXRlLCAmcGFkZGluZyk7Ci0gICAgICAgIEd0a0JvcmRlciBib3JkZXI7Ci0gICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9ib3JkZXIoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSwgJmJv
cmRlcik7Ci0KLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAg
ICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZSgtKHBhZGRpbmcubGVmdCArIGJvcmRlci5s
ZWZ0KSwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1v
dmUoYXJyb3dTaXplLndpZHRoKCksIDApOwotCi0gICAgICAgIGNhaXJvX3NhdmUoY2Fpcm9Db250
ZXh0KTsKLQotICAgICAgICAvLyBBbiBleHRyYSBjbGlwIHByZXZlbnRzIHRoZSBzZXBhcmF0b3Ig
YmxlZWRpbmcgb3V0c2lkZSBvZiB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZSBiZWNhdXNlIG9mIHN1
YnBpeGVsIHBvc2l0aW9uaW5nLgotICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0
LCBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwgYm9yZGVyLmxl
ZnQsIGlubmVyUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGNhaXJvX2NsaXAoY2Fpcm9Db250ZXh0
KTsKLSAgICAgICAgZ3RrX3JlbmRlcl9saW5lKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgY2Fpcm9D
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBz
ZXBhcmF0b3JQb3NpdGlvbi55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JQ
b3NpdGlvbi54KCksIGlubmVyUmVjdC5tYXhZKCkpOwotICAgICAgICBjYWlyb19yZXN0b3JlKGNh
aXJvQ29udGV4dCk7Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShzZXBh
cmF0b3JTdHlsZUNvbnRleHQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4o
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSkpOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1Nf
RU5UUlkpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRl
ck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxh
Z3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNGb2N1c2Vk
KHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQ7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0
a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9m
cmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCks
IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAg
IGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSAmJiBpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkg
ewotICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOwotICAgICAgICBnaW50IGZvY3VzV2lk
dGgsIGZvY3VzUGFkOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlvci1mb2N1cyIs
ICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZv
Y3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGlmICghaW50ZXJpb3JGb2N1cykgewot
ICAgICAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QocmVjdCk7Ci0gICAgICAgICAgICBmb2N1c1Jl
Y3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotICAgICAgICAgICAgZ3RrX3JlbmRl
cl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNy
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzUmVjdC54KCksIGZvY3VzUmVj
dC55KCksIGZvY3VzUmVjdC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRD
bGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgQ29udHJvbFBhcnQgcGFydCkKLXsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1ND
QUxFKTsKLSAgICBpZiAocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCk7Ci0gICAgZWxzZSBpZiAo
cGFydCA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19T
VFlMRV9DTEFTU19WRVJUSUNBTCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBy
ZW5kZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlRfVU5VU0VEKHBh
cnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0aWNh
bFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwotCi0gICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLSAgICBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMo
Y29udGV4dCwgcGFydCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQs
IEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotCi0gICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2Jq
ZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQotICAgICAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUp
OwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19y
ZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
KSB7Ci0gICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsK
LSAgICAgICAgSW50UmVjdCBmb2N1c1JlY3QocmVjdCk7Ci0gICAgICAgIGZvY3VzUmVjdC5pbmZs
YXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Ci0gICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29u
dGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvY3VzUmVjdC54KCksIGZvY3VzUmVjdC55KCksIGZvY3VzUmVj
dC53aWR0aCgpLCBmb2N1c1JlY3QuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGd0a19zdHlsZV9j
b250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7
Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVt
YlBhcnQpOwotCi0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0
KEdUS19UWVBFX1NDQUxFKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwot
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGly
ZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLSAgICBhcHBseVNs
aWRlclN0eWxlQ29udGV4dENsYXNzZXMoY29udGV4dCwgcGFydCk7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TTElERVIpOwotCi0gICAg
Z3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNS
ZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGlmIChpc1By
ZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNU
SVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3JlbmRlcl9zbGlkZXIoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgPyBHVEtfT1JJRU5UQVRJT05f
SE9SSVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0KLSAgICBndGtfc3R5bGVf
Y29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVh
cmFuY2UoKTsKLSAgICBpZiAocGFydCAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHBh
cnQgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdp
bnQgc2xpZGVyV2lkdGgsIHNsaWRlckxlbmd0aDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZzbGlkZXJXaWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBpZiAocGFydCA9PSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
c2xpZGVyTGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChz
bGlkZXJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQo
cGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQp
KTsKLX0KLQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZW5k
ZXJPYmplY3QtPmlzUHJvZ3Jlc3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHdGtT
dHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJPR1JFU1Nf
QkFSKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwot
Ci0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0
b3JlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1BS
T0dSRVNTQkFSKTsKLQotCi0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCks
ICZwYWRkaW5nKTsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChyZWN0LngoKSArIHBhZGRpbmcu
bGVmdCwgcmVjdC55KCkgKyBwYWRkaW5nLnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LndpZHRoKCkgLSAocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIChwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90
dG9tKSk7Ci0gICAgcHJvZ3Jlc3NSZWN0ID0gUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dy
ZXNzUmVjdChyZW5kZXJPYmplY3QsIHByb2dyZXNzUmVjdCk7Ci0KLSAgICBpZiAoIXByb2dyZXNz
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGd0a19yZW5kZXJfYWN0aXZpdHkoY29udGV4dCwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgp
LCBwcm9ncmVzc1JlY3QueSgpLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0Lmhl
aWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLXN0YXRpYyBnaW50IHNwaW5CdXR0b25BcnJvd1Np
emUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0KQotewotICAgIGNvbnN0IFBhbmdvRm9udERlc2Ny
aXB0aW9uKiBmb250RGVzY3JpcHRpb247Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0KGNvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAiZm9udCIsICZmb250RGVzY3JpcHRp
b24sIE5VTEwpOwotICAgIGdpbnQgZm9udFNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dl
dF9zaXplKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgZ2ludCBhcnJvd1NpemUgPSBtYXgoUEFOR09f
UElYRUxTKGZvbnRTaXplKSwgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSk7Ci0KLSAgICByZXR1cm4g
YXJyb3dTaXplIC0gYXJyb3dTaXplICUgMjsgLy8gRm9yY2UgZXZlbi4KLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKLQotICAg
IEd0a0JvcmRlciBwYWRkaW5nOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmcGFkZGluZyk7Ci0KLSAgICBp
bnQgd2lkdGggPSBzcGluQnV0dG9uQXJyb3dTaXplKGNvbnRleHQpICsgcGFkZGluZy5sZWZ0ICsg
cGFkZGluZy5yaWdodDsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5
bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlwZSBhcnJv
d1R5cGUpCi17Ci0gICAgQVNTRVJUKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVAgfHwgYXJyb3dU
eXBlID09IEdUS19BUlJPV19ET1dOKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29u
dGV4dCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlM
RV9DTEFTU19CVVRUT04pOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBndGtf
c3R5bGVfY29udGV4dF9nZXRfZGlyZWN0aW9uKGNvbnRleHQpOwotICAgIGd1aW50IHN0YXRlID0g
c3RhdGljX2Nhc3Q8Z3VpbnQ+KGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSk7
Ci0gICAgaWYgKCEoc3RhdGUgJiBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSkpIHsKLSAgICAg
ICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICAgICAgaWYg
KChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQICYmIHRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQ
cmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgICAgICAgICAgfHwgKGFycm93VHlwZSA9PSBH
VEtfQVJST1dfRE9XTiAmJiAhdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVy
T2JqZWN0KSkpCi0gICAgICAgICAgICAgICAgc3RhdGUgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZF
OwotICAgICAgICB9IGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkgewot
ICAgICAgICAgICAgaWYgKChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQICYmIHRoZW1lLT5pc1Nw
aW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgICAgICAgICAgfHwg
KGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTiAmJiAhdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFy
dEhvdmVyZWQocmVuZGVyT2JqZWN0KSkpCi0gICAgICAgICAgICAgICAgc3RhdGUgfD0gR1RLX1NU
QVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlKSk7
Ci0KLSAgICAvLyBQYWludCBidXR0b24uCi0gICAgSW50UmVjdCBidXR0b25SZWN0KHJlY3QpOwot
ICAgIGd1aW50IGp1bmN0aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2p1bmN0aW9uX3NpZGVz
KGNvbnRleHQpOwotICAgIGlmIChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKQotICAgICAgICBq
dW5jdGlvbiB8PSBHVEtfSlVOQ1RJT05fQk9UVE9NOwotICAgIGVsc2UgewotICAgICAgICBqdW5j
dGlvbiB8PSBHVEtfSlVOQ1RJT05fVE9QOwotICAgICAgICBidXR0b25SZWN0Lm1vdmUoMCwgcmVj
dC5oZWlnaHQoKSAvIDIpOwotICAgIH0KLSAgICBidXR0b25SZWN0LnNldEhlaWdodChyZWN0Lmhl
aWdodCgpIC8gMik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2p1bmN0aW9uX3NpZGVzKGNv
bnRleHQsIHN0YXRpY19jYXN0PEd0a0p1bmN0aW9uU2lkZXM+KGp1bmN0aW9uKSk7Ci0KLSAgICBn
dGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJl
Y3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShj
b250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRv
blJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0
LmhlaWdodCgpKTsKLQotICAgIC8vIFBhaW50IGFycm93IGNlbnRlcmVkIGluc2lkZSBidXR0b24u
Ci0gICAgLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGd0a3NwaW5idXR0b24uYyBjb2RlLgotICAg
IEludFJlY3QgYXJyb3dSZWN0OwotICAgIGdkb3VibGUgYW5nbGU7Ci0gICAgaWYgKGFycm93VHlw
ZSA9PSBHVEtfQVJST1dfVVApIHsKLSAgICAgICAgYW5nbGUgPSAwOwotICAgICAgICBhcnJvd1Jl
Y3Quc2V0WShyZWN0LnkoKSk7Ci0gICAgICAgIGFycm93UmVjdC5zZXRIZWlnaHQocmVjdC5oZWln
aHQoKSAvIDIgLSAyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhbmdsZSA9IEdfUEk7Ci0gICAg
ICAgIGFycm93UmVjdC5zZXRZKHJlY3QueSgpICsgYnV0dG9uUmVjdC55KCkpOwotICAgICAgICBh
cnJvd1JlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QueSgpIC0gMik7Ci0g
ICAgfQotICAgIGFycm93UmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgLSAzKTsKLSAgICBpZiAo
ZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgIGFycm93UmVjdC5zZXRYKHJl
Y3QueCgpICsgMSk7Ci0gICAgZWxzZQotICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0LngoKSAr
IDIpOwotCi0gICAgZ2ludCB3aWR0aCA9IGFycm93UmVjdC53aWR0aCgpIC8gMjsKLSAgICB3aWR0
aCAtPSB3aWR0aCAlIDIgLSAxOyAvLyBGb3JjZSBvZGQuCi0gICAgZ2ludCBoZWlnaHQgPSAod2lk
dGggKyAxKSAvIDI7Ci0KLSAgICBhcnJvd1JlY3QubW92ZSgoYXJyb3dSZWN0LndpZHRoKCkgLSB3
aWR0aCkgLyAyLCAoYXJyb3dSZWN0LmhlaWdodCgpIC0gaGVpZ2h0KSAvIDIpOwotICAgIGd0a19y
ZW5kZXJfYXJyb3coY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLCBhbmdsZSwgYXJyb3dSZWN0LngoKSwgYXJyb3dSZWN0LnkoKSwgd2lkdGgpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElO
X0JVVFRPTik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIEd0
a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4o
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOwot
Ci0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkg
fHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNGb2N1c2VkKHJlbmRlck9i
amVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQ7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxh
Z3M+KGZsYWdzKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVtb3ZlX2NsYXNzKGNvbnRleHQs
IEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0KLSAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlz
LCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX1VQKTsK
LSAgICBwYWludFNwaW5BcnJvd0J1dHRvbih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBh
aW50SW5mbywgcmVjdCwgR1RLX0FSUk9XX0RPV04pOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
cmVzdG9yZShjb250ZXh0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotR1JlZlB0cjxHZGtQ
aXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3Qg
Y2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXpl
KQotewotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRn
ZXRUeXBlKTsKLSAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2NvbnRleHRfbG9v
a3VwX2ljb25fc2V0KGNvbnRleHQsIGljb25OYW1lKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKHN0YXRlID09
IEdUS19TVEFURV9QUkVMSUdIVCkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJF
TElHSFQ7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Ci0gICAgR2RrUGl4YnVmKiBp
Y29uID0gZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29uU2V0LCBjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gYWRvcHRHUmVmKGljb24pOwotfQot
Ci1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdU
eXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIg
KmZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQg
aWNvblNpemUpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250
ZXh0KHdpZGdldFR5cGUpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsK
LQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX1BSRUxJ
R0hUKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBlbHNl
IGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfSU5TRU5TSVRJVkUpCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0
YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0
RGlyZWN0aW9uPihkaXJlY3Rpb24pKTsKLSAgICBHdGtJY29uSW5mbyogaW5mbyA9IGd0a19pY29u
X3RoZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksIHN5bWJvbGlj
SWNvbk5hbWUsIGljb25TaXplLAotICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29uTG9va3VwRmxh
Z3M+KEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TVkcgfCBHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU0la
RSkpOwotICAgIEdka1BpeGJ1ZiogaWNvbiA9IDA7Ci0gICAgaWYgKGluZm8pIHsKLSAgICAgICAg
aWNvbiA9IGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19mb3JfY29udGV4dChpbmZvLCBjb250
ZXh0LCAwLCAwKTsKLSAgICAgICAgZ3RrX2ljb25faW5mb19mcmVlKGluZm8pOwotICAgIH0KLQot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICBpZiAoIWljb24p
Ci0gICAgICAgIHJldHVybiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKHdpZGdldFR5cGUsIGZh
bGxiYWNrU3RvY2tJY29uTmFtZSwgZGlyZWN0aW9uLCBzdGF0ZSwgaWNvblNpemUpOwotCi0gICAg
cmV0dXJuIGFkb3B0R1JlZihpY29uKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JB
IGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xv
cihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RF
RCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSks
IEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JH
QkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOwotICAgIHJl
dHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdk
a1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9y
KTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2Rr
UkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRf
Y29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVfVklFVyksIEdUS19TVEFURV9GTEFH
X1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQot
Ci1Db2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
VFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICBy
ZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6YWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtS
R0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4
dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgJmdka1JHQkFD
b2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0g
ICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19BQ1RJ
VkUsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKLXsKLSAg
ICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLQotICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgewotICAg
IGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OgotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
Y29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0JVVFRPTiksIHN0YXRpY19jYXN0PEd0a1N0
YXRlRmxhZ3M+KDApLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICAgICAgcmV0dXJuIGdka1JHQkFDb2xv
cjsKLSAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPigwKSwgJmdka1JHQkFDb2xvcik7Ci0gICAgICAgIHJldHVybiBnZGtS
R0JBQ29sb3I7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0
ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vICFHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1J1bkxvb3BHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTBmMzVj
YTY2ZDIyMGI0MGQ0ZjYzZjdkOWY2Yzk4NDI3NTc3NzFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5M
b29wR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJ1bkxv
b3AuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJ1bkxvb3A6
OlJ1bkxvb3AoKQotewotICAgIC8vIGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSBkb2Vzbid0IGFk
ZCBhbiBleHRyYSByZWZlcmVuY2UuCi0gICAgbV9ydW5Mb29wQ29udGV4dCA9IGlzTWFpblRocmVh
ZCgpID8gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpIDogYWRvcHRHUmVmKGdfbWFpbl9jb250ZXh0
X25ldygpKTsKLSAgICBBU1NFUlQobV9ydW5Mb29wQ29udGV4dCk7Ci0gICAgR1JlZlB0cjxHTWFp
bkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fcnVuTG9v
cENvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJUKGlubmVybW9zdExvb3ApOwotICAg
IG1fcnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoaW5uZXJtb3N0TG9vcCk7Ci19Ci0KLVJ1bkxvb3A6
On5SdW5Mb29wKCkKLXsKLSAgICBmb3IgKGludCBpID0gbV9ydW5Mb29wTWFpbkxvb3BzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmlu
ZyhtX3J1bkxvb3BNYWluTG9vcHNbaV0uZ2V0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29wTWFpbkxvb3BzW2ldLmdldCgpKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUnVuTG9vcDo6cnVuKCkKLXsKLSAgICBSdW5Mb29wKiBtYWluUnVuTG9v
cCA9IFJ1bkxvb3A6OmN1cnJlbnQoKTsKLSAgICBHTWFpbkxvb3AqIGlubmVybW9zdExvb3AgPSBt
YWluUnVuTG9vcC0+aW5uZXJtb3N0TG9vcCgpOwotICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVu
bmluZyhpbm5lcm1vc3RMb29wKSkgewotICAgICAgICBnX21haW5fbG9vcF9ydW4oaW5uZXJtb3N0
TG9vcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYW5kIHJ1biBh
IG5lc3RlZCBsb29wIGlmIHRoZSBpbm5lcm1vc3Qgb25lIHdhcyBhbHJlYWR5IHJ1bm5pbmcuCi0g
ICAgR01haW5Mb29wKiBuZXN0ZWRNYWluTG9vcCA9IGdfbWFpbl9sb29wX25ldygwLCBGQUxTRSk7
Ci0gICAgbWFpblJ1bkxvb3AtPnB1c2hOZXN0ZWRNYWluTG9vcChuZXN0ZWRNYWluTG9vcCk7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKG5lc3RlZE1haW5Mb29wKTsKLSAgICBtYWluUnVuTG9vcC0+cG9w
TmVzdGVkTWFpbkxvb3AoKTsKLX0KLQotR01haW5Mb29wKiBSdW5Mb29wOjppbm5lcm1vc3RMb29w
KCkKLXsKLSAgICAvLyBUaGUgaW5uZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRo
ZXJlLgotICAgIEFTU0VSVCghbV9ydW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7Ci0gICAgcmV0
dXJuIG1fcnVuTG9vcE1haW5Mb29wc1swXS5nZXQoKTsKLX0KLQotdm9pZCBSdW5Mb29wOjpwdXNo
TmVzdGVkTWFpbkxvb3AoR01haW5Mb29wKiBuZXN0ZWRMb29wKQotewotICAgIC8vIFRoZSBpbm5l
cm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0gICAgQVNTRVJUKCFtX3J1
bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKLSAgICBtX3J1bkxvb3BNYWluTG9vcHMuYXBwZW5k
KGFkb3B0R1JlZihuZXN0ZWRMb29wKSk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6cG9wTmVzdGVkTWFp
bkxvb3AoKQotewotICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMg
YmUgdGhlcmUuCi0gICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKLSAg
ICBtX3J1bkxvb3BNYWluTG9vcHMucmVtb3ZlTGFzdCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OnN0
b3AoKQotewotICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUg
dGhlcmUuCi0gICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKLSAgICBH
UmVmUHRyPEdNYWluTG9vcD4gbGFzdE1haW5Mb29wID0gbV9ydW5Mb29wTWFpbkxvb3BzLmxhc3Qo
KTsKLSAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhsYXN0TWFpbkxvb3AuZ2V0KCkpKQot
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxhc3RNYWluTG9vcC5nZXQoKSk7Ci19Ci0KLWdib29s
ZWFuIFJ1bkxvb3A6OnF1ZXVlV29yayhSdW5Mb29wKiBydW5Mb29wKQotewotICAgIHJ1bkxvb3At
PnBlcmZvcm1Xb3JrKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi12b2lkIFJ1bkxvb3A6Ondh
a2VVcCgpCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxl
X3NvdXJjZV9uZXcoKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KHNvdXJjZS5nZXQoKSwg
R19QUklPUklUWV9ERUZBVUxUKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soc291cmNlLmdl
dCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6cXVldWVXb3JrKSwg
dGhpcywgMCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKHNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wQ29u
dGV4dC5nZXQoKSk7Ci0KLSAgICBnX21haW5fY29udGV4dF93YWtldXAobV9ydW5Mb29wQ29udGV4
dC5nZXQoKSk7Ci19Ci0KLVJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1
bkxvb3ApCi0gICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKLSAgICAsIG1fdGltZXJTb3VyY2UoMCkK
LXsKLX0KLQotUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKLXsKLSAgICBzdG9wKCk7
Ci19Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpjbGVhclRpbWVyU291cmNlKCkKLXsKLSAg
ICBtX3RpbWVyU291cmNlID0gMDsKLX0KLQotZ2Jvb2xlYW4gUnVuTG9vcDo6VGltZXJCYXNlOjp0
aW1lckZpcmVkQ2FsbGJhY2soUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1lcikKLXsKLSAgICBHU291
cmNlKiBjdXJyZW50VGltZXJTb3VyY2UgPSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKTsKLSAg
ICBib29sIGlzUmVwZWF0aW5nID0gdGltZXItPmlzUmVwZWF0aW5nKCk7Ci0gICAgLy8gVGhpcyBj
YW4gY2hhbmdlIHRoZSB0aW1lclNvdXJjZSBieSBzdGFydGluZyBhIG5ldyB0aW1lciB3aXRoaW4g
dGhlIGNhbGxiYWNrLgotICAgIHRpbWVyLT5maXJlZCgpOwotICAgIGlmICghaXNSZXBlYXRpbmcg
JiYgY3VycmVudFRpbWVyU291cmNlID09IHRpbWVyLT5tX3RpbWVyU291cmNlLmdldCgpKQotICAg
ICAgICB0aW1lci0+Y2xlYXJUaW1lclNvdXJjZSgpOwotICAgIHJldHVybiBpc1JlcGVhdGluZzsK
LX0KLQotdm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBmaXJlSW50ZXJ2YWws
IGJvb2wgcmVwZWF0KQotewotICAgIGlmIChtX3RpbWVyU291cmNlKQotICAgICAgICBzdG9wKCk7
Ci0KLSAgICBtX3RpbWVyU291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KHN0
YXRpY19jYXN0PGd1aW50PihmaXJlSW50ZXJ2YWwgKiAxMDAwKSkpOwotICAgIG1faXNSZXBlYXRp
bmcgPSByZXBlYXQ7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpUaW1lckJhc2U6OnRp
bWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVy
U291cmNlLmdldCgpLCBtX3J1bkxvb3AtPm1fcnVuTG9vcENvbnRleHQuZ2V0KCkpOwotfQotCi12
b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX3RpbWVyU291cmNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXJTb3VyY2Uu
Z2V0KCkpOwotICAgIGNsZWFyVGltZXJTb3VyY2UoKTsKLX0KLQotYm9vbCBSdW5Mb29wOjpUaW1l
ckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aW1lclNvdXJjZTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbFZpZXdHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA1YTU3
YjdkZTI5NGI2M2M4NmZkNTJlNzQ4ZjAwZjkxMjMyMDg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxWaWV3R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQ29sbGFib3JhIEx0ZC4K
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5j
bHVkZSAiTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCi17Ci0gICAgLy8gSW50ZXJpb3IgZnJh
bWUgU2Nyb2xsVmlld3MgbmV2ZXIgaGF2ZSBNYWluRnJhbWVTY3JvbGxiYXJzLgotICAgIGlmIChz
Y3JvbGxWaWV3LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYg
d2UgZG9uJ3QgaGF2ZSBhIGhvc3Qgd2luZG93IG9yIGEgY29udGFpbmluZyB3aWRnZXQgKGFsYSBX
ZWJLaXQyKS4KLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gc2Nyb2xsVmlldy0+aG9zdFdp
bmRvdygpOwotICAgIGlmICghaG9zdFdpbmRvdyB8fCAhaG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdl
Q2xpZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdib29sZWFuIHNlbGZTY3Jv
bGxpbmcgPSBGQUxTRTsKLSAgICBnX29iamVjdF9nZXQoaG9zdFdpbmRvdy0+cGxhdGZvcm1QYWdl
Q2xpZW50KCksICJzZWxmLXNjcm9sbGluZyIsICZzZWxmU2Nyb2xsaW5nLCBOVUxMKTsKLSAgICBy
ZXR1cm4gIXNlbGZTY3JvbGxpbmc7Ci19Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxW
aWV3OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17
Ci0gICAgaWYgKHNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcih0aGlzKSkKLSAgICAgICAg
cmV0dXJuIE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKHRoaXMsIG9yaWVudGF0aW9uKTsK
LSAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50
YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwotfQotCi1JbnRSZWN0IFNjcm9sbFZpZXc6OnZpc2li
bGVDb250ZW50UmVjdChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xs
YmFySW5jbHVzaW9uKSBjb25zdAotewotICAgIGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMgPSBzY3Jv
bGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnM7Ci0KLSAgICAvLyBJZiB3ZSBhcmUg
YW4gaW50ZXJpb3IgZnJhbWUgc2Nyb2xsYmFyIG9yIGFyZSBpbiBzb21lIHNvcnQgb2YgdHJhbnNp
dGlvbgotICAgIC8vIHN0YXRlLCBqdXN0IGNhbGN1bGF0ZSBvdXIgc2l6ZSBiYXNlZCBvbiB3aGF0
IHRoZSBHVEsrIHRoZW1lIHNheXMgdGhlCi0gICAgLy8gc2Nyb2xsYmFyIHdpZHRoIHNob3VsZCBi
ZS4KLSAgICBpZiAoIXNob3VsZENyZWF0ZU1haW5GcmFtZVNjcm9sbGJhcih0aGlzKSkgewotICAg
ICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgIEludFNpemUobWF4
KDAsIHdpZHRoKCkgLSAodmVydGljYWxTY3JvbGxiYXIoKSAmJiAhaW5jbHVkZVNjcm9sbGJhcnMg
PyB2ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpIDogMCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1heCgwLCBoZWlnaHQoKSAtIChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYg
IWluY2x1ZGVTY3JvbGxiYXJzID8gaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5oZWlnaHQoKSA6IDAp
KSkpOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBwYXJlbnQsIHNvIHdlIGFyZSB0
aGUgbWFpbiBmcmFtZSBhbmQgdGh1cyBoYXZlCi0gICAgLy8gYSBwYXJlbnQgd2lkZ2V0IHdoaWNo
IHdlIGNhbiB1c2UgdG8gbWVhc3VyZSB0aGUgdmlzaWJsZSByZWdpb24uCi0gICAgR3RrV2lkZ2V0
KiBtZWFzdXJlZFdpZGdldCA9IGhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0g
ICAgR3RrV2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQobWVhc3Vy
ZWRXaWRnZXQpOwotCi0gICAgLy8gV2UgbWF5IG5vdCBiZSBpbiBhIHdpZGdldCB0aGF0IGRpc3Bs
YXlzIHNjcm9sbGJhcnMsIGJ1dCB3ZSBtYXkKLSAgICAvLyBoYXZlIG90aGVyIGtpbmRzIG9mIGRl
Y29yYXRpb24gdGhhdCBtYWtlIHVzIHNtYWxsZXIuCi0gICAgaWYgKHBhcmVudFdpZGdldCAmJiBp
bmNsdWRlU2Nyb2xsYmFycykKLSAgICAgICAgbWVhc3VyZWRXaWRnZXQgPSBwYXJlbnRXaWRnZXQ7
Ci0KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxs
b2NhdGlvbihtZWFzdXJlZFdpZGdldCwgJmFsbG9jYXRpb24pOwotICAgIHJldHVybiBJbnRSZWN0
KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgp
KSwKLSAgICAgICAgICAgICAgICAgICBJbnRTaXplKGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRp
b24uaGVpZ2h0KSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMoU2Ny
b2xsYmFyTW9kZSBob3Jpem9udGFsTW9kZSwgU2Nyb2xsYmFyTW9kZSB2ZXJ0aWNhbE1vZGUsIGJv
b2wgaG9yaXpvbnRhbExvY2ssIGJvb2wgdmVydGljYWxMb2NrKQotewotICAgIC8vIEZJWE1FOiBS
ZXN0cnVjdHVyZSB0aGUgU2Nyb2xsVmlldyBhYnN0cmFjdGlvbiBzbyB0aGF0IHdlIGRvIG5vdCBo
YXZlIHRvCi0gICAgLy8gY29weSB0aGlzIHZlcmJhdGltIGZyb20gU2Nyb2xsVmlldy5jcHAuIFVu
dGlsIHRoZW4sIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcwotICAgIC8vIGlzIGtlcHQgaW4gc3lu
Yy4KLSAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7Ci0KLSAgICBpZiAoaG9yaXpvbnRhbE1v
ZGUgIT0gaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TG9jaykgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID0gaG9yaXpvbnRhbE1v
ZGU7Ci0gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodmVydGlj
YWxNb2RlICE9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFy
TG9jaykgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9IHZlcnRpY2FsTW9kZTsK
LSAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChob3Jpem9udGFs
TG9jaykKLSAgICAgICAgc2V0SG9yaXpvbnRhbFNjcm9sbGJhckxvY2soKTsKLQotICAgIGlmICh2
ZXJ0aWNhbExvY2spCi0gICAgICAgIHNldFZlcnRpY2FsU2Nyb2xsYmFyTG9jaygpOwotCi0gICAg
aWYgKG5lZWRzVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgp
KTsKLQotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwb3J0IHBvbGljeSBjaGFuZ2VzIG9uIFNj
cm9sbFZpZXcncyB1bmxlc3MgdGhpcwotICAgIC8vIG9uZSBoYXMgYW4gYWRqdXN0bWVudCBhdHRh
Y2hlZCBhbmQgaXQgaXMgYSBtYWluIGZyYW1lLgotICAgIGlmIChwYXJlbnQoKSB8fCAhaXNGcmFt
ZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIGZyYW1lcyB0aGF0IGRvIGhh
dmUgYWRqdXN0bWVudHMgYXR0YWNoZWQsIHdlIHdhbnQgdG8gcmVwb3J0Ci0gICAgLy8gcG9saWN5
IGNoYW5nZXMsIHNvIHRoYXQgdGhleSBtYXkgYmUgYXBwbGllZCB0byB0aGUgd2lkZ2V0IHRvCi0g
ICAgLy8gd2hpY2ggdGhlIFdlYlZpZXcncyBjb250YWluZXIgKGUuZy4gR3RrU2Nyb2xsZWRXaW5k
b3cpLgotICAgIGlmIChob3N0V2luZG93KCkpCi0gICAgICAgIGhvc3RXaW5kb3coKS0+c2Nyb2xs
YmFyc01vZGVEaWRDaGFuZ2UoKTsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTRlM2ZkNzZmN2ZmYzUyMzBmYzg0N2ZmOWZlY2FmNDNkYzQ2ZmEwNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCi0KLSNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgot
I2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+KiBn
U2Nyb2xsYmFyczsKLQotU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpCi17Ci0gICAgc3RhdGljIFNjcm9sbGJhclRoZW1lR3RrIHRoZW1lOwotICAgIHJldHVybiAm
dGhlbWU7Ci19Ci0KLVNjcm9sbGJhclRoZW1lR3RrOjp+U2Nyb2xsYmFyVGhlbWVHdGsoKQotewot
fQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIGlmICghZ1Njcm9sbGJhcnMpCi0gICAgICAg
IGdTY3JvbGxiYXJzID0gbmV3IEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPjsKLSAgICBn
U2Nyb2xsYmFycy0+YWRkKHNjcm9sbGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6
OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsK
LSAgICBnU2Nyb2xsYmFycy0+cmVtb3ZlKHNjcm9sbGJhcik7Ci0gICAgaWYgKGdTY3JvbGxiYXJz
LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRlIGdTY3JvbGxiYXJzOwotICAgICAgICBnU2Ny
b2xsYmFycyA9IDA7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVT
Y3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKQotewotICAgIGlmICghZ1Njcm9sbGJhcnMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFVwZGF0ZSB0aGUgdGhpY2tuZXNzIG9mIGV2ZXJ5IGludGVy
aW9yIGZyYW1lIHNjcm9sbGJhciB3aWRnZXQuIFRoZQotICAgIC8vIHBsYXRmb3JtLWluZGVwZW5k
ZW50IHNjcm9sbGJhciB0aGVtIGNvZGUgaXNuJ3QgeWV0IHNtYXJ0IGVub3VnaCB0byBnZXQKLSAg
ICAvLyB0aGlzIGluZm9ybWF0aW9uIHdoZW4gaXQgcGFpbnRzLgotICAgIEhhc2hTZXQ8U2Nyb2xs
YmFyVGhlbWVDbGllbnQqPjo6aXRlcmF0b3IgZW5kID0gZ1Njcm9sbGJhcnMtPmVuZCgpOwotICAg
IGZvciAoSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+OjppdGVyYXRvciBpdCA9IGdTY3Jv
bGxiYXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU2Nyb2xsYmFyVGhl
bWVDbGllbnQqIHNjcm9sbGJhciA9ICgqaXQpOwotCi0gICAgICAgIC8vIFRvcC1sZXZlbCBzY3Jv
bGxiYXIgaS5lLiBzY3JvbGxiYXJzIHdobyBoYXZlIGEgcGFyZW50IFNjcm9sbFZpZXcKLSAgICAg
ICAgLy8gd2l0aCBubyBwYXJlbnQgYXJlIG5hdGl2ZSwgYW5kIHRodXMgZG8gbm90IG5lZWQgdG8g
YmUgcmVzaXplZC4KLSAgICAgICAgaWYgKCFzY3JvbGxiYXItPnBhcmVudCgpIHx8ICFzY3JvbGxi
YXItPnBhcmVudCgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
bnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoMCwg
c2Nyb2xsYmFyLT5wYXJlbnQoKS0+aGVpZ2h0KCkgLSB0aGlja25lc3MsIHNjcm9sbGJhci0+d2lk
dGgoKSwgdGhpY2tuZXNzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGJhci0+
c2V0RnJhbWVSZWN0KEludFJlY3Qoc2Nyb2xsYmFyLT5wYXJlbnQoKS0+d2lkdGgoKSAtIHRoaWNr
bmVzcywgMCwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpKSk7Ci0gICAgfQotfQotCi1i
b29sIFNjcm9sbGJhclRoZW1lR3RrOjpoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGp1c3QgY2FsbGVkIGFzIGEgcGFpbnQt
dGltZSBvcHRpbWl6YXRpb24gdG8gc2VlIGlmCi0gICAgLy8gcGFpbnRpbmcgdGhlIHRodW1iIGNh
biBiZSBza2lwcGVkLiAgV2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFjdCBoZXJlLgotICAgIHJldHVy
biB0aHVtYkxlbmd0aChzY3JvbGxiYXIpID4gMDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVt
ZUd0azo6YmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Ny
b2xsYmFyUGFydCBwYXJ0LCBib29sKQotewotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQ
YXJ0ICYmICFtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgJiYgIW1faGFzQmFja0J1dHRv
blN0YXJ0UGFydCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGludCB4ID0gc2Ny
b2xsYmFyLT54KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGludCB5ID0gc2Nyb2xsYmFy
LT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNp
emUoc2Nyb2xsYmFyKTsKLSAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAg
ICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
Ci0gICAgLy8gQmFja0J1dHRvbkVuZFBhcnQgKGFsdGVybmF0ZSBidXR0b24pCi0gICAgaWYgKHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+d2lkdGgoKSAtIG1fdHJv
dWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUud2lkdGgoKSksIHksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhciBhbHRlcm5hdGUgYnV0dG9u
Ci0gICAgcmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdo
dCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCAtICgyICogc2l6ZS5oZWlnaHQoKSksIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZv
cndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJh
clBhcnQgcGFydCwgYm9vbCkKLXsKLSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQ
YXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7Ci0gICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgIW1faGFzRm9y
d2FyZEJ1dHRvbkVuZFBhcnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRT
aXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCB5ID0gc2Ny
b2xsYmFyLT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgICAgICBpZiAocGFydCA9PSBG
b3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJh
ci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gc2l6ZS53aWR0aCgpIC0gbV90cm91Z2hCb3Jk
ZXJXaWR0aCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgICAgICAvLyBG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQotICAgICAgICByZXR1cm4g
SW50UmVjdChzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGggKyBzaXplLndpZHRo
KCksIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgLy8gVmVy
dGljYWxTY3JvbGxiYXIKLSAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgpICsgbV90cm91Z2hCb3Jk
ZXJXaWR0aDsKLSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoeCwgc2Nyb2xsYmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0g
c2l6ZS5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IChhbHRlcm5hdGUgYnV0
dG9uKQotICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3Jk
ZXJXaWR0aCArIHNpemUuaGVpZ2h0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19
Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdChTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBib29sKQotewotICAgIC8vIFRoZSBwYWRkaW5nIGFsb25nIHRoZSB0
aHVtYiBtb3ZlbWVudCBheGlzIGluY2x1ZGVzIHRoZSB0cm91Z2ggYm9yZGVyCi0gICAgLy8gcGx1
cyB0aGUgc2l6ZSBvZiBzdGVwcGVyIHNwYWNpbmcgKHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBzdGVw
cGVyIGFuZAotICAgIC8vIHRoZSBwbGFjZSB3aGVyZSB0aGUgdGh1bWIgc3RvcHMpLiBUaGVyZSBp
cyBvZnRlbiBubyBzdGVwcGVyIHNwYWNpbmcuCi0gICAgaW50IG1vdmVtZW50QXhpc1BhZGRpbmcg
PSBtX3Ryb3VnaEJvcmRlcldpZHRoICsgbV9zdGVwcGVyU3BhY2luZzsKLQotICAgIC8vIFRoZSBm
YXRuZXNzIG9mIHRoZSBzY3JvbGxiYXIgb24gdGhlIG5vbi1tb3ZlbWVudCBheGlzLgotICAgIGlu
dCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
KTsKLQotICAgIGludCBzdGFydEJ1dHRvbnNPZmZzZXQgPSAwOwotICAgIGludCBidXR0b25zV2lk
dGggPSAwOwotICAgIGlmIChtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQpIHsKLSAgICAgICAg
c3RhcnRCdXR0b25zT2Zmc2V0ICs9IG1fc3RlcHBlclNpemU7Ci0gICAgICAgIGJ1dHRvbnNXaWR0
aCArPSBtX3N0ZXBwZXJTaXplOwotICAgIH0KLSAgICBpZiAobV9oYXNCYWNrQnV0dG9uU3RhcnRQ
YXJ0KSB7Ci0gICAgICAgIHN0YXJ0QnV0dG9uc09mZnNldCArPSBtX3N0ZXBwZXJTaXplOwotICAg
ICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKLSAgICB9Ci0gICAgaWYgKG1faGFz
QmFja0J1dHRvbkVuZFBhcnQpCi0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXpl
OwotICAgIGlmIChtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAgICAgICBidXR0b25zV2lk
dGggKz0gbV9zdGVwcGVyU2l6ZTsKLQotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICAvLyBPbmNlIHRoZSBzY3JvbGxiYXIg
YmVjb21lcyBzbWFsbGVyIHRoYW4gdGhlIG5hdHVyYWwgc2l6ZSBvZiB0aGUKLSAgICAgICAgLy8g
dHdvIGJ1dHRvbnMsIHRoZSB0cmFjayBkaXNhcHBlYXJzLgotICAgICAgICBpZiAoc2Nyb2xsYmFy
LT53aWR0aCgpIDwgMiAqIHRoaWNrbmVzcykKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsgbW92ZW1lbnRBeGlzUGFk
ZGluZyArIHN0YXJ0QnV0dG9uc09mZnNldCwgc2Nyb2xsYmFyLT55KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSAtICgyICogbW92ZW1lbnRBeGlzUGFkZGluZykg
LSBidXR0b25zV2lkdGgsIHRoaWNrbmVzcyk7Ci0gICAgfQotCi0gICAgaWYgKHNjcm9sbGJhci0+
aGVpZ2h0KCkgPCAyICogdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAg
IHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSArIG1vdmVtZW50
QXhpc1BhZGRpbmcgKyBzdGFydEJ1dHRvbnNPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgdGhp
Y2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gKDIgKiBtb3ZlbWVudEF4aXNQYWRkaW5nKSAt
IGJ1dHRvbnNXaWR0aCk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVj
dChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiB1bmNvbnN0
cmFpbmVkVHJhY2tSZWN0KQotewotICAgIEludFJlY3QgdHJhY2tSZWN0ID0gY29uc3RyYWluVHJh
Y2tSZWN0VG9UcmFja1BpZWNlcyhzY3JvbGxiYXIsIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwot
ICAgIGludCB0aHVtYlBvcyA9IHRodW1iUG9zaXRpb24oc2Nyb2xsYmFyKTsKLSAgICBpZiAoc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywgdHJhY2tSZWN0LnkoKSArICh0
cmFja1JlY3QuaGVpZ2h0KCkgLSBtX3RodW1iRmF0bmVzcykgLyAyLCB0aHVtYkxlbmd0aChzY3Jv
bGxiYXIpLCBtX3RodW1iRmF0bmVzcyk7IAotCi0gICAgLy8gVmVydGljYWxTY3JvbGxiYXIKLSAg
ICByZXR1cm4gSW50UmVjdCh0cmFja1JlY3QueCgpICsgKHRyYWNrUmVjdC53aWR0aCgpIC0gbV90
aHVtYkZhdG5lc3MpIC8gMiwgdHJhY2tSZWN0LnkoKSArIHRodW1iUG9zLCBtX3RodW1iRmF0bmVz
cywgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSk7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6
OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIGlmIChn
cmFwaGljc0NvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gQ3JlYXRlIHRoZSBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYmFzZWQgb24g
dGhlIGRhbWFnZVJlY3QKLSAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgc2Nyb2xsTWFzayA9
IE5vUGFydDsKLQotICAgIEludFJlY3QgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0OwotICAgIElu
dFJlY3QgYmFja0J1dHRvbkVuZFBhaW50UmVjdDsKLSAgICBJbnRSZWN0IGZvcndhcmRCdXR0b25T
dGFydFBhaW50UmVjdDsKLSAgICBJbnRSZWN0IGZvcndhcmRCdXR0b25FbmRQYWludFJlY3Q7Ci0g
ICAgaWYgKGhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkgewotICAgICAgICBiYWNrQnV0dG9uU3RhcnRQ
YWludFJlY3QgPSBiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25TdGFydFBhcnQs
IHRydWUpOwotICAgICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGJhY2tCdXR0b25TdGFy
dFBhaW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJhY2tCdXR0b25TdGFydFBh
cnQ7Ci0gICAgICAgIGJhY2tCdXR0b25FbmRQYWludFJlY3QgPSBiYWNrQnV0dG9uUmVjdChzY3Jv
bGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0LCB0cnVlKTsKLSAgICAgICAgaWYgKGRhbWFnZVJlY3Qu
aW50ZXJzZWN0cyhiYWNrQnV0dG9uRW5kUGFpbnRSZWN0KSkKLSAgICAgICAgICAgIHNjcm9sbE1h
c2sgfD0gQmFja0J1dHRvbkVuZFBhcnQ7Ci0gICAgICAgIGZvcndhcmRCdXR0b25TdGFydFBhaW50
UmVjdCA9IGZvcndhcmRCdXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoZm9yd2FyZEJ1dHRv
blN0YXJ0UGFpbnRSZWN0KSkKLSAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydDsKLSAgICAgICAgZm9yd2FyZEJ1dHRvbkVuZFBhaW50UmVjdCA9IGZvcndhcmRC
dXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQsIHRydWUpOwotICAgICAg
ICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QpKQot
ICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBGb3J3YXJkQnV0dG9uRW5kUGFydDsKLSAgICB9Ci0K
LSAgICBJbnRSZWN0IHRyYWNrUGFpbnRSZWN0ID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgdHJ1ZSk7
Ci0gICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0cyh0cmFja1BhaW50UmVjdCkpCi0gICAgICAg
IHNjcm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7Ci0KLSAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBw
ZXJzICYmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydAotICAgICAgICAgICAgfHwg
c2Nyb2xsTWFzayAmIEJhY2tCdXR0b25FbmRQYXJ0Ci0gICAgICAgICAgICB8fCBzY3JvbGxNYXNr
ICYgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydAotICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZv
cndhcmRCdXR0b25FbmRQYXJ0KSkKLSAgICAgICAgc2Nyb2xsTWFzayB8PSBUcmFja0JHUGFydDsK
LQotICAgIGJvb2wgdGh1bWJQcmVzZW50ID0gaGFzVGh1bWIoc2Nyb2xsYmFyKTsKLSAgICBJbnRS
ZWN0IGN1cnJlbnRUaHVtYlJlY3Q7Ci0gICAgaWYgKHRodW1iUHJlc2VudCkgewotICAgICAgICBJ
bnRSZWN0IHRyYWNrID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpOwotICAgICAgICBjdXJy
ZW50VGh1bWJSZWN0ID0gdGh1bWJSZWN0KHNjcm9sbGJhciwgdHJhY2spOwotICAgICAgICBpZiAo
ZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGN1cnJlbnRUaHVtYlJlY3QpKQotICAgICAgICAgICAgc2Ny
b2xsTWFzayB8PSBUaHVtYlBhcnQ7Ci0gICAgfQotCi0gICAgU2Nyb2xsYmFyQ29udHJvbFBhcnRN
YXNrIGFsbEJ1dHRvbnMgPSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHwgQmFja0J1dHRvbkVuZFBhcnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0IHwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0gICAgaWYgKHNjcm9sbE1hc2sgJiBU
cmFja0JHUGFydCB8fCBzY3JvbGxNYXNrICYgVGh1bWJQYXJ0IHx8IHNjcm9sbE1hc2sgJiBhbGxC
dXR0b25zKQotICAgICAgICBwYWludFNjcm9sbGJhckJhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0
LCBzY3JvbGxiYXIpOwotICAgICAgICBwYWludFRyYWNrQmFja2dyb3VuZChncmFwaGljc0NvbnRl
eHQsIHNjcm9sbGJhciwgdHJhY2tQYWludFJlY3QpOwotCi0gICAgLy8gUGFpbnQgdGhlIGJhY2sg
YW5kIGZvcndhcmQgYnV0dG9ucy4KLSAgICBpZiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0b25TdGFy
dFBhcnQpCi0gICAgICAgIHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBi
YWNrQnV0dG9uU3RhcnRQYWludFJlY3QsIEJhY2tCdXR0b25TdGFydFBhcnQpOwotICAgIGlmIChz
Y3JvbGxNYXNrICYgQmFja0J1dHRvbkVuZFBhcnQpCi0gICAgICAgIHBhaW50QnV0dG9uKGdyYXBo
aWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBiYWNrQnV0dG9uRW5kUGFpbnRSZWN0LCBCYWNrQnV0dG9u
RW5kUGFydCk7Ci0gICAgaWYgKHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KQot
ICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgZm9yd2FyZEJ1
dHRvblN0YXJ0UGFpbnRSZWN0LCBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KTsKLSAgICBpZiAoc2Ny
b2xsTWFzayAmIEZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAgICAgICBwYWludEJ1dHRvbihncmFw
aGljc0NvbnRleHQsIHNjcm9sbGJhciwgZm9yd2FyZEJ1dHRvbkVuZFBhaW50UmVjdCwgRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQpOwotCi0gICAgLy8gUGFpbnQgdGhlIHRodW1iLgotICAgIGlmIChzY3Jv
bGxNYXNrICYgVGh1bWJQYXJ0KQotICAgICAgICBwYWludFRodW1iKGdyYXBoaWNzQ29udGV4dCwg
c2Nyb2xsYmFyLCBjdXJyZW50VGh1bWJSZWN0KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFNjcm9sbGJhclRoZW1lR3RrOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICByZXR1cm4g
KGV2ZW50LnNoaWZ0S2V5KCkgJiYgZXZlbnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgfHwgKGV2
ZW50LmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbik7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUd0
azo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQotewotICAgIHJldHVy
biBtX3RodW1iRmF0bmVzcyArIChtX3Ryb3VnaEJvcmRlcldpZHRoICogMik7Ci19Ci0KLUludFNp
emUgU2Nyb2xsYmFyVGhlbWVHdGs6OmJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNj
cm9sbGJhcikKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50U2l6ZShtX3RodW1iRmF0bmVzcywgbV9zdGVw
cGVyU2l6ZSk7Ci0KLSAgICAvLyBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgcmV0dXJuIEludFNp
emUobV9zdGVwcGVyU2l6ZSwgbV90aHVtYkZhdG5lc3MpOwotfQotCi1pbnQgU2Nyb2xsYmFyVGhl
bWVHdGs6Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
KQotewotICAgIHJldHVybiBtX21pblRodW1iTGVuZ3RoOwotfQotCi19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU3M2RmMjg1NTAxYjU4MjZkYzA1OWI4M2JmYzNkOWE0MTcwZDRiYTEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVHdGtfaAotI2RlZmluZSBTY3JvbGxiYXJUaGVtZUd0
a19oCi0KLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xhc3MgU2Nyb2xsYmFyVGhlbWVHdGsg
OiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgewotcHVibGljOgotICAgIFNjcm9sbGJh
clRoZW1lR3RrKCk7Ci0gICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVHdGsoKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwot
ICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCos
IFNjcm9sbGJhclBhcnQsIGJvb2wpOwotICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9u
UmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wpOwotICAgIHZp
cnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBib29sKTsKLSAg
ICBJbnRSZWN0IHRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3Qm
IHVuY29uc3RyYWluZWRUcmFja1JlY3QpOwotICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAg
ICB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxi
YXJUaGVtZUNsaWVudCopOwotICAgIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3ND
b250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9p
ZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRl
eHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3JvbGxiYXJQYXJ0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgaW50IHNjcm9s
bGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7Ci0gICAgdmlydHVhbCBJbnRTaXpl
IGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGludCBtaW5p
bXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLQotICAgIC8vIFRPRE86IFRo
ZXNlIGFyZSB0aGUgZGVmYXVsdCBHVEsrIHZhbHVlcy4gQXQgc29tZSBwb2ludCB3ZSBzaG91bGQg
cHVsbCB0aGVzZSBmcm9tIHRoZSB0aGVtZSBpdHNlbGYuCi0gICAgdmlydHVhbCBkb3VibGUgaW5p
dGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4yMDsgfQotICAgIHZpcnR1YWwg
ZG91YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4wMjsgfQotICAgIHZvaWQg
dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzRnJhbWVU
aGlja25lc3MoKTsKLSAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xp
ZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50
Kik7Ci0KLXByb3RlY3RlZDoKLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtTdHls
ZUNvbnRleHQqIG1fY29udGV4dDsKLSNlbmRpZgotICAgIGludCBtX3RodW1iRmF0bmVzczsKLSAg
ICBpbnQgbV90cm91Z2hCb3JkZXJXaWR0aDsKLSAgICBpbnQgbV9zdGVwcGVyU2l6ZTsKLSAgICBp
bnQgbV9zdGVwcGVyU3BhY2luZzsKLSAgICBpbnQgbV9taW5UaHVtYkxlbmd0aDsKLSAgICBnYm9v
bGVhbiBtX3Ryb3VnaFVuZGVyU3RlcHBlcnM7Ci0gICAgZ2Jvb2xlYW4gbV9oYXNGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0OwotICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7Ci0g
ICAgZ2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0OwotICAgIGdib29sZWFuIG1faGFz
QmFja0J1dHRvbkVuZFBhcnQ7Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDg2NmJiOGExZDJmNzFhYTg2NGVhNTdlZDMwM2YxMzYwNzJjMWM0MjcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVHdGsuaCIK
LQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVH
dGsuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0j
aW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNr
KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFNjcm9sbGJhclRoZW1lR3Rr
KiBzY3JvbGxiYXJUaGVtZSkKLXsKLSAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhlbWVQcm9w
ZXJ0aWVzKCk7Ci19Ci0KLVNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCi17
Ci0gICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQo
KSktPmd0a0hTY3JvbGxiYXIoKSwKLSAgICAgICAgICJzdHlsZS1zZXQiLCBHX0NBTExCQUNLKGd0
a1N0eWxlU2V0Q2FsbGJhY2spLCB0aGlzKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6
dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKLXsKLSAgICBHdGtXaWRnZXQqIHNjcm9sbGJhciA9IHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdl
dCgpKS0+Z3RrSFNjcm9sbGJhcigpOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHNjcm9sbGJh
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyX3dpZHRoIiwgJm1fdGh1bWJGYXRu
ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2hfYm9yZGVyIiwgJm1fdHJvdWdo
Qm9yZGVyV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc2l6ZSIsICZt
X3N0ZXBwZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2gtdW5kZXItc3Rl
cHBlcnMiLCAmbV90cm91Z2hVbmRlclN0ZXBwZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICJoYXMtYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJk
QnV0dG9uRW5kUGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1m
b3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWJhY2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNC
YWNrQnV0dG9uRW5kUGFydCwgTlVMTCk7Ci0gICAgbV9taW5UaHVtYkxlbmd0aCA9IGd0a19yYW5n
ZV9nZXRfbWluX3NsaWRlcl9zaXplKEdUS19SQU5HRShzY3JvbGxiYXIpKTsKLSAgICB1cGRhdGVT
Y3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKTsKLX0KLQotc3RhdGljIEd0a1dpZGdldCogZ2V0V2lk
Z2V0Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAg
UmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOwotICAgIHJldHVybiBzY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyB0aGVtZS0+Z3RrVlNjcm9sbGJhcigp
IDogdGhlbWUtPmd0a0hTY3JvbGxiYXIoKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6
cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIFBh
aW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHBy
b3BlcnR5IGlzIHRydWUsIHRoaXMKLSAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0
aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQotICAg
IC8vIHRyYWNrIHJlY3QuCi0gICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKLSAg
ICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQotICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdCA9
IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRo
KCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwotCi0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3
aWRnZXRDb250ZXh0KGNvbnRleHQsIGZ1bGxTY3JvbGxiYXJSZWN0KTsKLSAgICBJbnRSZWN0IHBh
aW50UmVjdChJbnRQb2ludCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5zaXplKCkpOwotICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRCb3gocGFpbnRSZWN0LCBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVEFURV9BQ1RJVkUs
IEdUS19TSEFET1dfSU4sICJ0cm91Z2giKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6
cGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xs
YmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJS
ZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+
d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250
ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVsbFNjcm9sbGJhclJlY3QpOwotICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFNjcm9sbGJhclJlY3QsIGdldFdpZGdldEZvclNjcm9s
bGJhcihzY3JvbGxiYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUQVRF
X05PUk1BTCwgR1RLX1NIQURPV19JTiwgInNjcm9sbGVkX3dpbmRvdyIpOwotfQotCi12b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwot
ICAgIGdib29sZWFuIGFjdGl2YXRlU2xpZGVyOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdp
ZGdldCwgImFjdGl2YXRlLXNsaWRlciIsICZhY3RpdmF0ZVNsaWRlciwgTlVMTCk7Ci0KLSAgICBH
dGtTdGF0ZVR5cGUgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKLSAgICBHdGtTaGFkb3dU
eXBlIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX09VVDsKLSAgICBpZiAoYWN0aXZhdGVTbGlkZXIg
JiYgc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkgewotICAgICAgICBzdGF0
ZVR5cGUgPSBHVEtfU1RBVEVfQUNUSVZFOwotICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURP
V19JTjsKLSAgICB9IGVsc2UgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBh
cnQgfHwgc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgc3Rh
dGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hUOwotCi0gICAgLy8gVGhlIGFkanVzdG1lbnQgY29u
dHJvbHMgdGhlIHJlbmRlcmluZyBvZiB0aGUgc2Nyb2xsYmFyIHRodW1iLiBJZiBpdCdzIG5vdCBz
ZXQKLSAgICAvLyBwcm9wZXJseSB0aGUgdGhlbWUgbWF5IG5vdCBkcmF3IHRoZSB0aHVtYiBib3Jk
ZXJzIHByb3Blcmx5LgotICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBndGtfcmFuZ2Vf
Z2V0X2FkanVzdG1lbnQoR1RLX1JBTkdFKHdpZGdldCkpOwotICAgIGd0a19hZGp1c3RtZW50X3Nl
dF92YWx1ZShhZGp1c3RtZW50LCBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSk7Ci0gICAgZ3RrX2Fk
anVzdG1lbnRfc2V0X2xvd2VyKGFkanVzdG1lbnQsIDApOwotICAgIGd0a19hZGp1c3RtZW50X3Nl
dF91cHBlcihhZGp1c3RtZW50LCBzY3JvbGxiYXItPm1heGltdW0oKSk7Ci0KLSAgICBHdGtPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOwotICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAg
ICAgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50LCByZWN0LmhlaWdodCgp
KTsKLSAgICAgICAgb3JpZW50YXRpb24gPSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3NpemUoYWRqdXN0bWVudCwg
cmVjdC53aWR0aCgpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4
dChjb250ZXh0LCByZWN0KTsKLSAgICBJbnRSZWN0IHNsaWRlclJlY3QoSW50UG9pbnQoKSwgcmVj
dC5zaXplKCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTbGlkZXIoc2xpZGVyUmVjdCwg
d2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzbGlkZXIiLCBvcmllbnRhdGlvbik7Ci19
Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQotewotICAgIC8vIFRoZSBidXR0b25zIHdpbGwgYmUg
ZGlzYWJsZWQgaWYgdGhlIHRodW1iIGlzIGFzIHRoZSBhcHByb3ByaWF0ZSBleHRyZW1lLgotICAg
IEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfT1VUOwotICAgIEd0a1N0YXRl
VHlwZSBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgYm9vbCBwcmVzc2Vk
ID0gKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKTsKLQotICAgIGlmICgoQmFja0J1
dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQotICAgICAg
ICB8fCAoQmFja0J1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFy
LT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpCi0gICAgICAgIHx8IChGb3J3
YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0g
c2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7Ci0gICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9O
T1JNQUw7Ci0gICAgICAgIGlmIChwcmVzc2VkKSB7Ci0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBH
VEtfU1RBVEVfQUNUSVZFOwotICAgICAgICAgICAgc2hhZG93VHlwZSA9IEdUS19TSEFET1dfSU47
Ci0gICAgICAgIH0gZWxzZSBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCi0g
ICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgfQotCi0gICAg
Ly8gVGhlbWVzIGRldGVybWluZSBob3cgdG8gZHJhdyB0aGUgYnV0dG9uICh3aGljaCBidXR0b24g
dG8gZHJhdykgYmFzZWQgb24gdGhlIGFsbG9jYXRpb24KLSAgICAvLyBvZiB0aGUgd2lkZ2V0LiBX
aGVyZSB0aGUgdGFyZ2V0IHJlY3QgaXMgaW4gcmVsYXRpb24gdG8gdGhlIHRvdGFsIHdpZGdldCBh
bGxvY2F0aW9uCi0gICAgLy8gZGV0ZXJtaW5lcyB0aGUgYnV0dG9uLgotICAgIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOwotICAgIGlu
dCBidXR0b25TaXplID0gKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IHJlY3Qu
aGVpZ2h0KCkgOiByZWN0LndpZHRoKCk7Ci0gICAgaW50IHRvdGFsQWxsb2NhdGlvbiA9IGJ1dHRv
blNpemUgKiA1OyAvLyBPbmUgc3BhY2UgZm9yIGVhY2ggYnV0dG9uIGFuZCBvbmUgZXh0cmEuCi0g
ICAgaW50IGJ1dHRvbk9mZnNldCA9IDA7Ci0gICAgaWYgKEZvcndhcmRCdXR0b25TdGFydFBhcnQg
PT0gcGFydCkKLSAgICAgICAgYnV0dG9uT2Zmc2V0ID0gYnV0dG9uU2l6ZTsKLSAgICBlbHNlIGlm
IChCYWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0KQotICAgICAgICBidXR0b25PZmZzZXQgPSAzICog
YnV0dG9uU2l6ZTsKLSAgICBlbHNlIGlmIChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBwYXJ0KQot
ICAgICAgICBidXR0b25PZmZzZXQgPSA0ICogYnV0dG9uU2l6ZTsKLQotICAgIC8vIE5vdyB3ZSB3
YW50IHRoZSBhbGxvY2F0aW9uIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW4gb2YgdGhlIHBh
aW50ZWQgcmVjdC4KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGdldFdpZGdldEZvclNjcm9sbGJh
cihzY3JvbGxiYXIpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOwotICAgIGFsbG9jYXRpb24u
eCA9IGFsbG9jYXRpb24ueSA9IDA7Ci0gICAgYWxsb2NhdGlvbi53aWR0aCA9IHJlY3Qud2lkdGgo
KTsKLSAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBpZiAob3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgYWxsb2NhdGlvbi5oZWln
aHQgPSB0b3RhbEFsbG9jYXRpb247Ci0gICAgICAgIGFsbG9jYXRpb24ueSAtPSBidXR0b25PZmZz
ZXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWxsb2NhdGlvbi53aWR0aCA9IHRvdGFsQWxsb2Nh
dGlvbjsKLSAgICAgICAgYWxsb2NhdGlvbi54IC09IGJ1dHRvbk9mZnNldDsKLSAgICB9Ci0gICAg
Z3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLQotICAgIGNv
bnN0IGNoYXIqIGRldGFpbCA9IG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gInZz
Y3JvbGxiYXIiIDogImhzY3JvbGxiYXIiOwotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lk
Z2V0Q29udGV4dChjb250ZXh0LCByZWN0KTsKLQotICAgIEludFJlY3QgYnV0dG9uUmVjdChJbnRQ
b2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChidXR0
b25SZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKLQotICAgIGZs
b2F0IGFycm93U2NhbGluZzsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJhcnJv
dy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7Ci0gICAgSW50U2l6ZSBhcnJvd1NpemUg
PSByZWN0LnNpemUoKTsKLSAgICBhcnJvd1NpemUuc2NhbGUoYXJyb3dTY2FsaW5nKTsKLSAgICBJ
bnRSZWN0IGFycm93UmVjdChJbnRQb2ludChidXR0b25SZWN0LngoKSArIChidXR0b25SZWN0Lndp
ZHRoKCkgLSBhcnJvd1NpemUud2lkdGgoKSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1dHRvblJlY3QueSgpICsgKGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUu
aGVpZ2h0KCkpIC8gMiksCi0gICAgICAgICAgICAgICAgICAgICAgYXJyb3dTaXplKTsKLSAgICBp
ZiAocHJlc3NlZCkgewotICAgICAgICBpbnQgYXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3Bs
YWNlbWVudFk7Ci0gICAgICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC14IiwgJmFycm93RGlzcGxh
Y2VtZW50WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVu
dC15IiwgJmFycm93RGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7Ci0gICAgICAgIGFycm93UmVjdC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dE
aXNwbGFjZW1lbnRZKTsKLSAgICB9Ci0KLSAgICBHdGtBcnJvd1R5cGUgYXJyb3dUeXBlID0gR1RL
X0FSUk9XX0RPV047Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja0J1
dHRvblN0YXJ0UGFydCkKLSAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19VUDsKLSAg
ICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAg
ICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1JJR0hUOwotICAgICAgICBpZiAocGFydCA9PSBCYWNr
QnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgICAg
ICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfTEVGVDsKLSAgICB9Ci0gICAgd2lkZ2V0Q29udGV4dC5n
dGtQYWludEFycm93KGFycm93UmVjdCwgd2lkZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsIGFy
cm93VHlwZSwgZGV0YWlsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3
NDljNTQzZjNkZGY2YjMxNWVmZmI5OGE3NTlmZjViMDAyZDcwY2QuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVHdGsuaCIKLQotI2lmbmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgot
I2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgZ3RrU3R5
bGVDaGFuZ2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiwgU2Nyb2xsYmFyVGhlbWVHdGsqIHNjcm9sbGJh
clRoZW1lKQotewotICAgIHNjcm9sbGJhclRoZW1lLT51cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsK
LX0KLQotU2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKLSAgICA6IG1fY29u
dGV4dChzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS5nZXQoKSktPmd0a1Njcm9sbGJhclN0eWxlKCkpCi17Ci0gICAgdXBkYXRlVGhlbWVQcm9w
ZXJ0aWVzKCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQsICJjaGFuZ2VkIiwgR19D
QUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotfQotCi12b2lkIFNjcm9s
bGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQotewotICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJtaW4tc2xpZGVyLWxlbmd0aCIsICZtX21pblRodW1iTGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdpZHRoIiwgJm1fdGh1bWJGYXRuZXNzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoLWJvcmRlciIsICZtX3Ryb3VnaEJv
cmRlcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RlcHBlci1zaXpl
IiwgJm1fc3RlcHBlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGVw
cGVyLXNwYWNpbmciLCAmbV9zdGVwcGVyU3BhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3VnaFVuZGVyU3RlcHBlcnMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtYmFja3dhcmQtc3RlcHBlciIs
ICZtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoYXMtZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWJhY2t3YXJkLXN0
ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uRW5kUGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImhhcy1zZWNvbmRhcnktZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0g
ICAgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFw
cGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQs
IFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0NST0xMQkFSKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgb3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIgPyAgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMIDogR1RLX1NUWUxFX0NMQVNT
X0hPUklaT05UQUwpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gUGFpbnQgdGhlIHRyYWNr
IGJhY2tncm91bmQuIElmIHRoZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMgcHJvcGVydHkgaXMgdHJ1
ZSwgdGhpcwotICAgIC8vIHNob3VsZCBiZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBzY3JvbGxiYXIs
IGJ1dCBpZiBpcyBmYWxzZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlCi0gICAgLy8gdHJhY2sgcmVj
dC4KLSAgICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0KHJlY3QpOwotICAgIGlmIChtX3Ryb3Vn
aFVuZGVyU3RlcHBlcnMpCi0gICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3Jv
bGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFy
LT5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7Ci0K
LSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250ZXh0LCBzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2Nv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3Jv
dW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0LngoKSwgZnVsbFNjcm9sbGJhclJl
Y3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53aWR0aCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5oZWln
aHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgZnVsbFNjcm9sbGJhclJlY3Qu
eCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJSZWN0LndpZHRoKCksIGZ1
bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUobV9jb250ZXh0KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxi
YXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhcikKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7
Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250ZXh0LCBzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyht
X2NvbnRleHQsICJzY3JvbGxlZC13aW5kb3ciKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKG1fY29u
dGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNjcm9sbGJhci0+eCgpLCBz
Y3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKLX0KLQotdm9pZCBT
Y3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0gICAgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7Ci0gICAgYXBw
bHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgb3JpZW50YXRpb24pOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQsIEdUS19TVFlMRV9DTEFT
U19TTElERVIpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmIChzY3JvbGxiYXItPnBy
ZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19BQ1RJVkU7Ci0gICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+
KGZsYWdzKSk7Ci0KLSAgICBndGtfcmVuZGVyX3NsaWRlcihtX2NvbnRleHQsIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhciA/IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCA6IEdUS19PUklFTlRBVElP
Tl9IT1JJWk9OVEFMKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0
KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2F2ZShtX2NvbnRleHQpOwotCi0gICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24g
PSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7Ci0gICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRl
eHRDbGFzc2VzKG1fY29udGV4dCwgb3JpZW50YXRpb24pOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAw
OwotICAgIGlmICgoQmFja0J1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3Vy
cmVudFBvcygpKQotICAgICAgICB8fCAoQmFja0J1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3Jv
bGxiYXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09
IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkp
Ci0gICAgICAgIHx8IChGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFy
LT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7Ci0gICAgICAgIGlmIChw
YXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKLSAgICAgICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZF
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRleHQsIHN0YXRpY19jYXN0
PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xh
c3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICBndGtfcmVuZGVyX2Jh
Y2tncm91bmQobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19y
ZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAg
Z2Zsb2F0IGFycm93U2NhbGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUobV9j
b250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOwotCi0gICAgZG91
YmxlIGFycm93U2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkgKiBh
cnJvd1NjYWxpbmc7Ci0gICAgRmxvYXRQb2ludCBhcnJvd1BvaW50KHJlY3QueCgpICsgKHJlY3Qu
d2lkdGgoKSAtIGFycm93U2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0
LnkoKSArIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAvIDIpOwotCi0gICAgaWYgKGZsYWdz
ICYgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFKSB7Ci0gICAgICAgIGdpbnQgYXJyb3dEaXNwbGFjZW1l
bnRYLCBhcnJvd0Rpc3BsYWNlbWVudFk7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9z
dHlsZShtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJy
b3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC15IiwgJmFycm93RGlzcGxh
Y2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAg
ICAgICBhcnJvd1BvaW50Lm1vdmUoYXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVu
dFkpOwotICAgIH0KLQotICAgIGdkb3VibGUgYW5nbGU7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09
IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGFuZ2xlID0gKHBhcnQgPT0gRm9yd2FyZEJ1
dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSA/IEdfUEkgOiAw
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFuZ2xlID0gKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSA/IEdfUEkgLyAyIDogMyAq
IChHX1BJIC8gMik7Ci0gICAgfQotCi0gICAgZ3RrX3JlbmRlcl9hcnJvdyhtX2NvbnRleHQsIGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJyb3dQb2ludC54KCksIGFy
cm93UG9pbnQueSgpLCBhcnJvd1NpemUpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9y
ZShtX2NvbnRleHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAh
R1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nl
YXJjaFBvcHVwTWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MTM3
NzNlNThjNjA1YzQwODEzYTljMDdiODkwMDNkNjFmZDgxMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nl
YXJjaFBvcHVwTWVudUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVHdGsuaCIKLQotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2VhcmNoUG9wdXBNZW51
R3RrOjpTZWFyY2hQb3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0gICAgOiBt
X3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVHdGsoY2xpZW50KSkpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotUG9wdXBNZW51KiBTZWFyY2hQb3B1cE1lbnVHdGs6OnBvcHVwTWVu
dSgpCi17Ci0gICAgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7Ci19Ci0KLXZvaWQgU2VhcmNoUG9wdXBN
ZW51R3RrOjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgU2VhcmNo
UG9wdXBNZW51R3RrOjpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVj
dG9yPFN0cmluZz4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgU2VhcmNo
UG9wdXBNZW51R3RrOjplbmFibGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nl
YXJjaFBvcHVwTWVudUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTNjNjNk
N2MyYjdiODRlNDI2MzU2MjYzYTlkNmI5MjQ5MjExZThiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWFy
Y2hQb3B1cE1lbnVHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqCi0gKi8KLQotI2lmbmRlZiBTZWFyY2hQb3B1cE1lbnVHdGtfaAotI2RlZmluZSBTZWFyY2hQ
b3B1cE1lbnVHdGtfaAotCi0jaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgiCi0jaW5jbHVkZSAiU2Vh
cmNoUG9wdXBNZW51LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2VhcmNoUG9w
dXBNZW51R3RrIDogcHVibGljIFNlYXJjaFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0gICAgU2VhcmNo
UG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCopOwotCi0gICAgdmlydHVhbCBQb3B1cE1lbnUq
IHBvcHVwTWVudSgpOwotICAgIHZpcnR1YWwgdm9pZCBzYXZlUmVjZW50U2VhcmNoZXMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpOwotICAgIHZpcnR1YWwgYm9vbCBlbmFi
bGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFBvcHVwTWVudUd0az4gbV9wb3B1cDsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFNlYXJjaFBvcHVwTWVudUd0a19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjNzA0MGYyOGU5ZGY3MWU0ZWVkMGUxYTAxMjZlNjY1MGQzNWM2MzZhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdp
dGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQotewotICAgIGlmIChmaWxl
UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmluZyBmaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmaWxlUGF0aCk7Ci0gICAgZ2NoYXIqIGNvbnRl
bnRzOwotICAgIGdzaXplIHNpemU7Ci0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgaWYgKCFn
X2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVuYW1lLmRhdGEoKSwgJmNvbnRlbnRzLCAmc2l6ZSwgJmVy
cm9yKSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmdWxseSByZWFkIGNvbnRlbnRz
IG9mIGZpbGUgJXMgLSAlcyIsIGZpbGVuYW1lRm9yRGlzcGxheShmaWxlUGF0aCkudXRmOCgpLmRh
dGEoKSwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXN1bHQg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50cywgc2l6ZSk7Ci0gICAgZ19mcmVlKGNvbnRl
bnRzKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVk
VGltZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxYTM1MmY3MzNmMGViM2E3Njhm
OTgyMWE0MDI1NjQzMDMwNGY2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFy
ZWRUaW1lci5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBndWludCBzaGFyZWRUaW1lcjsKLXN0YXRp
YyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOwotCi12b2lkIHNldFNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBzaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24gPSBmOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlcikKLXsK
LSAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQotICAgICAgICBzaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXZvaWQgc2V0U2hhcmVkVGlt
ZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQotewotICAgIEFTU0VSVChzaGFyZWRUaW1l
ckZpcmVkRnVuY3Rpb24pOwotCi0gICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ+KGludGVydmFsICogMTAwMCk7Ci0KLSAgICBzdG9wU2hhcmVkVGltZXIoKTsKLSAgICBz
aGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfUkVEUkFXLCBpbnRl
cnZhbEluTVMsIHRpbWVvdXRfY2IsIDAsIDApOwotfQotCi12b2lkIHN0b3BTaGFyZWRUaW1lcigp
Ci17Ci0gICAgaWYgKHNoYXJlZFRpbWVyID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGdi
b29sZWFuIHJlbW92ZWRTb3VyY2UgPSBnX3NvdXJjZV9yZW1vdmUoc2hhcmVkVGltZXIpOwotICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZFNvdXJjZSwgcmVtb3ZlZFNvdXJjZSk7Ci0gICAgc2hhcmVk
VGltZXIgPSAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU291bmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3MzE2Y2FmZDJlY2VmN2I2MWU4YWRm
MTI5MzYyNjhhOTIyNGM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJTb3Vu
ZC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZv
aWQgc3lzdGVtQmVlcCgpCi17Ci0gICAgZ2RrX2JlZXAoKTsKLX0KLQotfQotCi0vLyB2aW06IHRz
PTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzNDQ0OTNkNWIz
MWQ4ZGQ4NTAzOTg5MzY4ZmFhYjAzNTRhMzM5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJDb29raWVTdG9yYWdlLmgiCi0jaW5j
bHVkZSAiRE5TLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlIDxmbG9hdC5oPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAo
bW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci12b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci1TdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2ln
bmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtV
UkwgJnVybCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLWZsb2F0IHVzZXJJZGxlVGltZSgpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEZMVF9NQVg7IH0gLy8gcmV0dXJuIGFuIGFyYml0cmFyaWx5
IGhpZ2ggdXNlcklkbGVUaW1lIHNvIHRoYXQgcmVsZWFzaW5nIHBhZ2VzIGZyb20gdGhlIHBhZ2Ug
Y2FjaGUgaXNuJ3QgcG9zdHBvbmVkCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1VzZXJBZ2VudEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYmM3MzMz
OGM5NDhlNjk3NzMyNzQ5OTRkMzVhMjFiZDIwNmUwZDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJB
Z2VudEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJVc2VyQWdlbnRHdGsuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmIE9TKFVO
SVgpCi0jaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVk
ZSAiU3lzdGVtSW5mby5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIHBsYXRmb3JtRm9yVUFTdHJpbmcoKQotewotI2lmIFBMQVRGT1JNKFgxMSkK
LSAgICByZXR1cm4gIlgxMSI7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiAiIjsKLSNl
bGlmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gIk1hY2ludG9zaCI7Ci0jZWxpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfRElSRUNURkIpCi0gICAgcmV0dXJuICJEaXJlY3RGQiI7Ci0jZWxzZQot
ICAgIHJldHVybiAiVW5rbm93biI7Ci0jZW5kaWYKLX0KLQotc3RhdGljIFN0cmluZyBwbGF0Zm9y
bVZlcnNpb25Gb3JVQVN0cmluZygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHVhT1NWZXJzaW9uLCAoU3RyaW5nKCkpKTsKLSAgICBpZiAoIXVhT1NWZXJzaW9uLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHVhT1NWZXJzaW9uOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICB1
YU9TVmVyc2lvbiA9IHdpbmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsKLSNlbGlmIE9TKERBUldJ
TikKLSNpZiBDUFUoWDg2KQotICAgIHVhT1NWZXJzaW9uID0gIkludGVsIE1hYyBPUyBYIjsKLSNl
bHNlCi0gICAgdWFPU1ZlcnNpb24gPSAiUFBDIE1hYyBPUyBYIjsKLSNlbmRpZgotI2VsaWYgT1Mo
VU5JWCkKLSAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOwotICAgIGlmICh1bmFtZSgmbmFtZSkgIT0g
LTEpCi0gICAgICAgIHVhT1NWZXJzaW9uID0gU3RyaW5nOjpmb3JtYXQoIiVzICVzIiwgbmFtZS5z
eXNuYW1lLCBuYW1lLm1hY2hpbmUpOwotICAgIGVsc2UKLSAgICAgICAgdWFPU1ZlcnNpb24gPSBT
dHJpbmcoIlVua25vd24iKTsKLSNlbHNlCi0gICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25v
d24iKTsKLSNlbmRpZgotICAgIHJldHVybiB1YU9TVmVyc2lvbjsKLX0KLQotU3RyaW5nIHN0YW5k
YXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lLCBjb25zdCBTdHJpbmcm
IGFwcGxpY2F0aW9uVmVyc2lvbikKLXsKLSAgICAvLyBDcmVhdGUgYSBkZWZhdWx0IHVzZXIgYWdl
bnQgc3RyaW5nIHdpdGggYSBsaWJlcmFsIGludGVycHJldGF0aW9uIG9mIAotICAgIC8vIGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVXNlcl9BZ2VudF9TdHJpbmdzX1Jl
ZmVyZW5jZQotICAgIC8vCi0gICAgLy8gRm9ybWluZyBhIGZ1bmN0aW9uYWwgdXNlciBhZ2VudCBp
cyByZWFsbHkgZGlmZmljdWx0LiBXZSBtdXN0IG1lbnRpb24gU2FmYXJpLCBiZWNhdXNlIHNvbWUK
LSAgICAvLyBzaXRlcyBjaGVjayBmb3IgdGhhdCB3aGVuIGRldGVjdGluZyBXZWJLaXQgYnJvd3Nl
cnMuIEFkZGl0aW9uYWxseSBzb21lIHNpdGVzIGFzc3VtZSB0aGF0Ci0gICAgLy8gYnJvd3NlcnMg
dGhhdCBhcmUgIlNhZmFyaSIgYnV0IG5vdCBydW5uaW5nIG9uIE9TIFggYXJlIHRoZSBTYWZhcmkg
aU9TIGJyb3dzZXIsIHNvIHdlCi0gICAgLy8gYWxzbyBjbGFpbSB0byBiZSAgQ2hyb21pdW0uIEdl
dHRpbmcgdGhpcyB3cm9uZyBjYW4gY2F1c2Ugc2l0ZXMgdG8gbG9hZCB0aGUgd3JvbmcgSmF2YVNj
cmlwdCwKLSAgICAvLyBDU1MsIG9yIGN1c3RvbSBmb250cy4gSW4gc29tZSBjYXNlcyBzaXRlcyB3
b24ndCBsb2FkIHJlc291cmNlcyBhdCBhbGwuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBDU3RyaW5nLCB1YVZlcnNpb24sIChTdHJpbmc6OmZvcm1hdCgiJWkuJWkiLCBXRUJLSVRfVVNF
Ul9BR0VOVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OKS51
dGY4KCkpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3RhdGljVUEs
IChTdHJpbmc6OmZvcm1hdCgiTW96aWxsYS81LjAgKCVzOyAlcykgQXBwbGVXZWJLaXQvJXMgKEtI
VE1MLCBsaWtlIEdlY2tvKSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNocm9taXVtLzI1LjAuMTM0OS4yIENocm9tZS8y
NS4wLjEzNDkuMiBTYWZhcmkvJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtRm9yVUFTdHJpbmcoKSwgcGxh
dGZvcm1WZXJzaW9uRm9yVUFTdHJpbmcoKS51dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhVmVyc2lv
bi5kYXRhKCksIHVhVmVyc2lvbi5kYXRhKCkpKSk7Ci0gICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNVQTsKLQotICAgIFN0cmluZyBmaW5hbEFw
cGxpY2F0aW9uVmVyc2lvbiA9IGFwcGxpY2F0aW9uVmVyc2lvbjsKLSAgICBpZiAoZmluYWxBcHBs
aWNhdGlvblZlcnNpb24uaXNFbXB0eSgpKQotICAgICAgICBmaW5hbEFwcGxpY2F0aW9uVmVyc2lv
biA9IHVhVmVyc2lvbi5kYXRhKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzICVz
LyVzIiwgc3RhdGljVUEudXRmOCgpLmRhdGEoKSwgYXBwbGljYXRpb25OYW1lLnV0ZjgoKS5kYXRh
KCksIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Vc2VyQWdlbnRHdGsuaC5pbiBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Vc2VyQWdl
bnRHdGsuaC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1MGI3YTMyZDI4ZjAy
MWU4NDYzNzY4N2Q3ZGQ5YjZjOTBjNzU3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3Rr
LmguaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBVc2VyQWdlbnRHdGtfaAotI2RlZmlu
ZSBVc2VyQWdlbnRHdGtfaAotCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jZGVmaW5lIFdFQktJVF9VU0VSX0FHRU5UX01B
Sk9SX1ZFUlNJT04gKEBXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OQCkKLSNkZWZpbmUg
V0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTiAoQFdFQktJVF9VU0VSX0FHRU5UX01JTk9S
X1ZFUlNJT05AKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBzdGFuZGFyZFVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSA9ICIiLCBjb25zdCBTdHJpbmcmIGFw
cGxpY2F0aW9uVmVyc2lvbiA9ICIiKTsKLQotfQotCi0jZW5kaWYgLy8gVXNlckFnZW50R3RrX2gK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjAzZjNjOWM3YzlhNmUyYzlhMzRjMDkxZWU5NGJjYjEzNzhjNmYz
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNp
bmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotI2luY2x1ZGUgPGdk
ay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
V2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQotewotICAgIGluaXQod2lkZ2V0
KTsKLX0KLQotV2lkZ2V0Ojp+V2lkZ2V0KCkKLXsKLSAgICBBU1NFUlQoIXBhcmVudCgpKTsKLQot
ICAgIHJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpOwotfQotCi12b2lkIFdpZGdldDo6c2V0Rm9jdXMo
Ym9vbCBmb2N1c2VkKQotewotfQotCi12b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNv
ciYgY3Vyc29yKQotewotICAgIFNjcm9sbFZpZXcqIHZpZXcgPSByb290KCk7Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3Io
Y3Vyc29yKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNob3coKQotewotICAgIHNldFNlbGZWaXNpYmxl
KHRydWUpOwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtV2lkZ2V0KCkp
Ci0gICAgICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotdm9pZCBX
aWRnZXQ6OmhpZGUoKQotewotICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKLQotICAgIGlmIChp
c1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICBndGtfd2lkZ2V0
X2hpZGUocGxhdGZvcm1XaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci19Ci0KLXZvaWQgV2lk
Z2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wgaXNTZWxlY3RlZCkKLXsKLSAgICBpZiAoIXBsYXRmb3Jt
V2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNlZSBpZiB0aGUgcGxhdGZvcm1X
aWRnZXQgaGFzIGEgd2Via2l0LXdpZGdldC1pcy1zZWxlY3RlZCBwcm9wZXJ0eQotICAgIC8vIGFu
ZCBzZXQgaXQgYWZ0ZXJ3YXJkcy4KLSAgICBHUGFyYW1TcGVjKiBzcGVjID0gZ19vYmplY3RfY2xh
c3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MocGxhdGZvcm1XaWRnZXQoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtp
dC13aWRnZXQtaXMtc2VsZWN0ZWQiKTsKLSAgICBpZiAoIXNwZWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdfb2JqZWN0X3NldChwbGF0Zm9ybVdpZGdldCgpLCAid2Via2l0LXdpZGdldC1pcy1z
ZWxlY3RlZCIsIGlzU2VsZWN0ZWQsIE5VTEwpOwotfQotCi1JbnRSZWN0IFdpZGdldDo6ZnJhbWVS
ZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNl
dEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpyZWxlYXNlUGxhdGZv
cm1XaWRnZXQoKQotewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgIHJldHVy
bjsKLSAgICBnX29iamVjdF91bnJlZihwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotdm9pZCBXaWRn
ZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKLXsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkp
Ci0gICAgICAgICByZXR1cm47Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsocGxhdGZvcm1XaWRnZXQo
KSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlm
NWRhNTQ2ODMwMzg1MzYzMTM3MWM0YzdlZjM2M2U3MTRmODExYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1l
R3RrLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgR2RrUGl4bWFwKiBnU2NyYXRjaEJ1ZmZlciA9IDA7Ci1zdGF0
aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKQotewotICAgIGlmIChnU2NyYXRjaEJ1ZmZlcikK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYoZ1NjcmF0Y2hCdWZmZXIpOwotICAgIGdTY3JhdGNoQnVm
ZmVyID0gMDsKLX0KLQotLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2Ug
YXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQotLy8gcmVuZGVyLiBJbnN0ZWFkIG9m
IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwK
LS8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2Vk
IHZpYSBhIHRpbWVyLgotY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIgOiBwdWJsaWMgVGlt
ZXJCYXNlIHsKLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNjcmF0
Y2hCdWZmZXIoKTsgfQotfTsKLQotc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVy
Z2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIs
IHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCAoKSk7Ci0gICAgaWYgKHB1cmdlU2NyYXRjaEJ1ZmZl
clRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0b3Ao
KTsKLSAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdGFydE9uZVNob3QoMik7Ci19Ci0KLVdp
ZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCi0gICAgOiBt
X2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCi0gICAgLCBtX3RhcmdldFJlY3QodGFy
Z2V0UmVjdCkKLSAgICAsIG1faGFkRXJyb3IoZmFsc2UpCi17Ci0gICAgUmVuZGVyVGhlbWVHdGsq
IHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVs
dFRoZW1lKCkuZ2V0KCkpOwotCi0gICAgLy8gRmFsbGJhY2s6IFdlIGZhaWxlZCB0byBjcmVhdGUg
YW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJvcGVybHkgcGFpbnQgCi0g
ICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUgdHJhbnNwYXJlbmN5LiBU
byBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKLSAgICAvLyBwYWludCBkaXJl
Y3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90IHJlbmRlciBDU1Mgcm90
YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgotICAgIGlmICghdGhlbWUtPm1fdGhlbWVQYXJ0
c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkgewotICAg
ICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBuZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNjcmF0Y2gg
YnVmZmVyIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG91ciB0YXJnZXQgR2RrRHJhd2FibGUuCi0g
ICAgLy8gVGhpcyBwcmV2ZW50cyBnaWFudCBwaXhtYXAgYWxsb2NhdGlvbnMgZm9yIHZlcnkgbGFy
Z2Ugd2lkZ2V0cyBpbiBzbWFsbGVyIHZpZXdzLgotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGlt
cGxlbWVudCB0aGlzIGNoZWNrIGZvciBXZWJLaXQyIGFzIHdlbGwuCi0gICAgaWYgKGdyYXBoaWNz
Q29udGV4dC0+Z2RrV2luZG93KCkpIHsKLSAgICAgICAgaW50IG1heFdpZHRoID0gMCwgbWF4SGVp
Z2h0ID0gMDsKLSAgICAgICAgZ2V0R2RrRHJhd2FibGVTaXplKGdyYXBoaWNzQ29udGV4dC0+Z2Rr
V2luZG93KCksICZtYXhXaWR0aCwgJm1heEhlaWdodCk7Ci0gICAgICAgIG1fdGFyZ2V0UmVjdC5z
ZXRTaXplKG1fdGFyZ2V0UmVjdC5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtYXhXaWR0aCwgbWF4
SGVpZ2h0KSkpOwotICAgIH0KLQotICAgIC8vIFdpZGdldHMgc29tZXRpbWVzIG5lZWQgdG8gZHJh
dyBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMgZm9yIHRoaW5ncyBzdWNoIGFzCi0gICAgLy8gZXh0
ZXJpb3IgZm9jdXMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzb21lIGV4dHJhIHBpeGVscyBpbiBv
dXIgc3VyZmFjZSBmb3IgdGhpcy4KLSAgICBzdGF0aWMgaW50IGV4dHJhU3BhY2UgPSAxNTsKLSAg
ICBtX3RhcmdldFJlY3QuaW5mbGF0ZShleHRyYVNwYWNlKTsKLQotICAgIC8vIFRoaXMgb2Zmc2V0
IHdpbGwgbWFwIGEgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSB3aWRnZXQg
dG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludGluZyBidWZmZXIuCi0gICAgbV9w
YWludE9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtIG1fdGFyZ2V0UmVjdC5sb2NhdGlv
bigpOwotCi0gICAgaW50IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRoKCkgKyAoZXh0cmFTcGFj
ZSAqIDIpOwotICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCkgKyAoZXh0cmFT
cGFjZSAqIDIpOwotICAgIGludCBzY3JhdGNoV2lkdGggPSAwOwotICAgIGludCBzY3JhdGNoSGVp
Z2h0ID0gMDsKLSAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCi0gICAgICAgIGdka19waXhtYXBfZ2V0
X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lkdGgsICZzY3JhdGNoSGVpZ2h0KTsKLQot
ICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGN1cnJl
bnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KLSAgICBpZiAoIWdTY3JhdGNoQnVmZmVyIHx8IHNj
cmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWlnaHQgPCBoZWlnaHQpIHsKLSAgICAgICAg
cHVyZ2VTY3JhdGNoQnVmZmVyKCk7Ci0gICAgICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMy
IHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBzaW1pbGFyIHNpemVkIHJl
cXVlc3RzLgotICAgICAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OwotICAgICAg
ICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAgICAgICAgZ1NjcmF0Y2hC
dWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwgaGVpZ2h0LCBnZGtfY29sb3JtYXBfZ2V0
X3Zpc3VhbCh0aGVtZS0+bV9jb2xvcm1hcCktPmRlcHRoKTsKLSAgICAgICAgZ2RrX2RyYXdhYmxl
X3NldF9jb2xvcm1hcChnU2NyYXRjaEJ1ZmZlciwgdGhlbWUtPm1fY29sb3JtYXApOwotICAgIH0K
LSAgICBtX3RhcmdldCA9IGdTY3JhdGNoQnVmZmVyOwotCi0gICAgLy8gQ2xlYXIgdGhlIHNjcmF0
Y2ggYnVmZmVyLgotICAgIFJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9IGFk
b3B0UmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsKLSAgICBjYWlyb19zZXRf
b3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFS
KTsKLSAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Ci19Ci0KLVdp
ZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAv
LyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdldCBpbiB0aGUgZmFsbGJh
Y2sgY2FzZS4gU2VlIGFib3ZlLgotICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsK
LSAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIG1fZ3JhcGhp
Y3NDb250ZXh0LT5nZGtXaW5kb3coKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3Qg
cGFpbnQgdGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCi0gICAgaWYgKG1f
aGFkRXJyb3IpIHsKLSAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgaXQgaXMg
bmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBoZXJlLgotICAgIGNhaXJv
X3QqIGNhaXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKTsKLSAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJjZShjYWlyb19n
ZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOwotCi0gICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4
bWFwKGNhaXJvQ29udGV4dCwgZ1NjcmF0Y2hCdWZmZXIsIG1fdGFyZ2V0UmVjdC54KCksIG1fdGFy
Z2V0UmVjdC55KCkpOwotICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRleHQsIG1fdGFyZ2V0
UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCksIG1fdGFyZ2V0UmVjdC53aWR0aCgpLCBtX3Rhcmdl
dFJlY3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250ZXh0KTsKLSAgICBjYWly
b19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2UuZ2V0KCkpOwotICAgIHNj
aGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dDo6Y2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgR2RrUmVjdGFuZ2xl
KiBjbGlwUmVjdCkKLXsKLSAgICBjbGlwUmVjdC0+eCA9IG1fcGFpbnRPZmZzZXQud2lkdGgoKSAr
IHJlY3QueCgpOwotICAgIGNsaXBSZWN0LT55ID0gbV9wYWludE9mZnNldC5oZWlnaHQoKSArIHJl
Y3QueSgpOwotICAgIGNsaXBSZWN0LT53aWR0aCA9IG1fdGFyZ2V0UmVjdC53aWR0aCgpOwotICAg
IGNsaXBSZWN0LT5oZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCk7Ci19Ci0KLXZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50UmVjdCYgcmVjdCwgR3Rr
V2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hh
ZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJl
Y3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKLQotICAgIC8vIFNv
bWUgd2lkZ2V0cyBhbHNvIG5lZWQgdGhlaXIgYWxsb2NhdGlvbiBhZGp1c3RlZCB0byBhY2NvdW50
IGZvciBleHRyYSBzcGFjZS4KLSAgICAvLyBSaWdodCBub3cgb25seSBzY3JvbGxiYXIgYnV0dG9u
cyBoYXZlIHNpZ25pZmljYW50IGFsbG9jYXRpb25zLgotICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24p
OwotICAgIGFsbG9jYXRpb24ueCArPSBjbGlwUmVjdC54OwotICAgIGFsbG9jYXRpb24ueSArPSBj
bGlwUmVjdC55OwotICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2Nh
dGlvbik7Ci0KLSAgICBndGtfcGFpbnRfYm94KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwKLSAgICAgICAgICAg
ICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0
a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
U3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hh
ciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVD
bGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9mbGF0X2JveChndGtfd2lk
Z2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAm
Y2xpcFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVj
dC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12b2lk
IFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYgcmVj
dCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFy
KiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNs
aXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0gICAgZ3RrX3BhaW50X2ZvY3VzKGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0
LAotICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29u
c3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgR2Rr
UmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVj
dCk7Ci0gICAgZ3RrX3BhaW50X3NsaWRlcihndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBt
X3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAg
ICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpLCBvcmllbnRhdGlvbik7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dDo6Z3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQq
IHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBl
LCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAg
ICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9jaGVj
ayhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBj
bGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQot
Ci12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0aW9uKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtT
aGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVj
dGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7
Ci0gICAgZ3RrX3BhaW50X29wdGlvbihndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rh
cmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAgICAg
ICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQ
YWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3Rh
dGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciog
ZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlw
UmVjdChyZWN0LCAmY2xpcFJlY3QpOwotICAgIGd0a19wYWludF9zaGFkb3coZ3RrX3dpZGdldF9n
ZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJmNsaXBS
ZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNs
aXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtX
aWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFk
b3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlw
UmVjdCk7Ci0gICAgZ3RrX3BhaW50X2Fycm93KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRh
aWwsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a0Fycm93VHlwZT4oYXJyb3dE
aXJlY3Rpb24pLCBUUlVFLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50
VkxpbmUoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIGNs
aXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0gICAgZ3Rr
X3BhaW50X3ZsaW5lKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0
ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWwsCi0gICAgICAgICAgICAgICAgICAgIGNs
aXBSZWN0LnksIGNsaXBSZWN0LnkgKyByZWN0LmhlaWdodCgpLCBjbGlwUmVjdC54KTsKLQotfQot
Ci19Ci0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDMxZjJjOGE3NzFjMGUxNjczMzc0OGRkNjRmNDRlY2FjMGUwY2Y5OTIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHRfaAotI2RlZmluZSBXaWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKLQotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLS8vIFVzdWFsbHkgdGhpcyBpcyB0
b28gZXhwZW5zaXZlIHRvIGhhdmUgaW4gaGVhZGVycywgYnV0IEd0a1N0YXRlVHlwZSBHdGtTaGFk
b3dUeXBlIGFyZQotLy8gZW51bXMgYW5kIGNhbm5vdCBiZSBmb3J3YXJkIGRlY2xhcmVkLiBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0LmggaXMgY3VycmVudGx5IG9ubHkKLS8vIGluY2x1ZGVkIGluIFJl
bmRlclRoZW1lR3RrMi5jcHAgYW5kIFNjcm9sbGJhclRoZW1lR3RrMi5jcHAuCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKLWNsYXNzIFJlbmRlclRoZW1lR3RrOwotCi1jbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0
IHsKLXB1YmxpYzoKLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKLSAgICB+V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCgpOwotCi0gICAg
dm9pZCBndGtQYWludEJveChjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBl
LCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQgZ3RrUGFpbnRGbGF0Qm94
KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUs
IGNvbnN0IGdjaGFyKik7Ci0gICAgdm9pZCBndGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmLCBH
dGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKik7Ci0gICAgdm9pZCBndGtQYWlu
dFNsaWRlcihjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFk
b3dUeXBlLCBjb25zdCBnY2hhciosIEd0a09yaWVudGF0aW9uKTsKLSAgICB2b2lkIGd0a1BhaW50
Q2hlY2soY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93
VHlwZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50T3B0aW9uKGNvbnN0IEludFJl
Y3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFy
Kik7Ci0gICAgdm9pZCBndGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0Kiwg
R3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAgIHZvaWQgZ3Rr
UGFpbnRBcnJvdyhjb25zdCBJbnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtT
aGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKik7Ci0gICAgdm9pZCBn
dGtQYWludFZMaW5lKGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIGNv
bnN0IGdjaGFyKik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjYWxjdWxhdGVDbGlwUmVjdChjb25z
dCBJbnRSZWN0JiwgR2RrUmVjdGFuZ2xlKik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3Jh
cGhpY3NDb250ZXh0OwotICAgIEludFJlY3QgbV90YXJnZXRSZWN0OwotICAgIEludFNpemUgbV9w
YWludE9mZnNldDsKLSAgICBib29sIG1faGFkRXJyb3I7Ci0gICAgR2RrRHJhd2FibGUqIG1fdGFy
Z2V0OwotCi19OwotCi19Ci0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgotI2VuZGlmIC8v
IFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQyM2ZhNWRlZDIyNmRlYjk3Y2U3MzNiMTdlZGMx
OWJiN2NkNjk0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0
b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBJR0FMSUEgUy5MLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNyZWRl
bnRpYWxCYWNraW5nU3RvcmUuaCIKLQotI2RlZmluZSBTRUNSRVRfV0lUSF9VTlNUQUJMRSAxCi0j
ZGVmaW5lIFNFQ1JFVF9BUElfU1VCSkVDVF9UT19DSEFOR0UgMQotI2luY2x1ZGUgIkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8bGlic2VjcmV0L3NlY3JldC5oPgotI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ3JlZGVu
dGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDcmVkZW50aWFsQmFja2luZ1N0b3JlLCBiYWNraW5nU3RvcmUsICgpKTsK
LSAgICByZXR1cm4gYmFja2luZ1N0b3JlOwotfQotCi1zdGF0aWMgR1JlZlB0cjxHSGFzaFRhYmxl
PiBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwgPSBD
cmVkZW50aWFsKCkpCi17Ci0gICAgU291cFVSSSogdXJpID0gc291cF9tZXNzYWdlX2dldF91cmko
Y2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOwotICAgIEdSZWZQdHI8R0hhc2hUYWJsZT4gYXR0cmli
dXRlcyA9IGFkb3B0R1JlZihzZWNyZXRfYXR0cmlidXRlc19idWlsZCgKLSAgICAgICAgU0VDUkVU
X1NDSEVNQV9DT01QQVRfTkVUV09SSywKLSAgICAgICAgImRvbWFpbiIsIHNvdXBfYXV0aF9nZXRf
cmVhbG0oY2hhbGxlbmdlLnNvdXBBdXRoKCkpLAotICAgICAgICAic2VydmVyIiwgdXJpLT5ob3N0
LAotICAgICAgICAicHJvdG9jb2wiLCB1cmktPnNjaGVtZSwKLSAgICAgICAgImF1dGh0eXBlIiwg
c291cF9hdXRoX2dldF9zY2hlbWVfbmFtZShjaGFsbGVuZ2Uuc291cEF1dGgoKSksCi0gICAgICAg
ICJwb3J0IiwgdXJpLT5wb3J0LAotICAgICAgICBOVUxMKSk7Ci0gICAgaWYgKGNyZWRlbnRpYWwu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKLQotICAgIGdfaGFzaF90YWJs
ZV9pbnNlcnQoYXR0cmlidXRlcy5nZXQoKSwgZ19zdHJkdXAoInVzZXIiKSwgZ19zdHJkdXAoY3Jl
ZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVzOwot
fQotCi1zdHJ1Y3QgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEg
ewotICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxs
YmFjayBjYWxsYmFjazsKLSAgICB2b2lkKiBkYXRhOwotfTsKLQotc3RhdGljIHZvaWQgY3JlZGVu
dGlhbEZvckNoYWxsZW5nZUFzeW5jUmVhZHlDYWxsYmFjayhTZWNyZXRTZXJ2aWNlKiBzZXJ2aWNl
LCBHQXN5bmNSZXN1bHQqIGFzeW5jUmVzdWx0LCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNS
ZWFkeUNhbGxiYWNrRGF0YSogY2FsbGJhY2tEYXRhKQotewotICAgIENyZWRlbnRpYWxCYWNraW5n
U3RvcmU6OkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjayA9IGNhbGxiYWNr
RGF0YS0+Y2FsbGJhY2s7Ci0gICAgdm9pZCogZGF0YSA9IGNhbGxiYWNrRGF0YS0+ZGF0YTsKLSAg
ICBkZWxldGUgY2FsbGJhY2tEYXRhOwotCi0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAg
IEdPd25QdHI8R0xpc3Q+IGVsZW1lbnRzKHNlY3JldF9zZXJ2aWNlX3NlYXJjaF9maW5pc2goc2Vy
dmljZSwgYXN5bmNSZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChlcnJvciB8fCAh
ZWxlbWVudHMgfHwgIWVsZW1lbnRzLT5kYXRhKSB7Ci0gICAgICAgIGNhbGxiYWNrKENyZWRlbnRp
YWwoKSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPFNlY3Jl
dEl0ZW0+IHNlY3JldEl0ZW0gPSBhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8U2VjcmV0SXRlbSo+KGVs
ZW1lbnRzLT5kYXRhKSk7Ci0gICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRv
cHRHUmVmKHNlY3JldF9pdGVtX2dldF9hdHRyaWJ1dGVzKHNlY3JldEl0ZW0uZ2V0KCkpKTsKLSAg
ICBTdHJpbmcgdXNlciA9IFN0cmluZzo6ZnJvbVVURjgoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5nZXQoKSwgInVzZXIiKSkpOwotICAgIGlm
ICh1c2VyLmlzRW1wdHkoKSkgewotICAgICAgICBjYWxsYmFjayhDcmVkZW50aWFsKCksIGRhdGEp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbmd0aDsKLSAgICBHUmVm
UHRyPFNlY3JldFZhbHVlPiBzZWNyZXRWYWx1ZSA9IGFkb3B0R1JlZihzZWNyZXRfaXRlbV9nZXRf
c2VjcmV0KHNlY3JldEl0ZW0uZ2V0KCkpKTsKLSAgICBjb25zdCBjaGFyKiBwYXNzd29yZERhdGEg
PSBzZWNyZXRfdmFsdWVfZ2V0KHNlY3JldFZhbHVlLmdldCgpLCAmbGVuZ3RoKTsKLSAgICBTdHJp
bmcgcGFzc3dvcmQgPSBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkRGF0YSwgbGVuZ3RoKTsKLQot
ICAgIGNhbGxiYWNrKENyZWRlbnRpYWwodXNlciwgcGFzc3dvcmQsIENyZWRlbnRpYWxQZXJzaXN0
ZW5jZVBlcm1hbmVudCksIGRhdGEpOwotfQotCi12b2lkIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6
OmNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNo
YWxsZW5nZSwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBk
YXRhKQotewotICAgIC8vIFRoZSBkZWZhdWx0IGZsYWcgb25seSByZXR1cm5zIHRoZSBtb3N0IHJl
Y2VudCBpdGVtLCBub3QgYWxsIG9mIHRoZW0uCi0gICAgU2VjcmV0U2VhcmNoRmxhZ3Mgc2VhcmNo
RmxhZ3MgPSBzdGF0aWNfY2FzdDxTZWNyZXRTZWFyY2hGbGFncz4oU0VDUkVUX1NFQVJDSF9VTkxP
Q0sgfCBTRUNSRVRfU0VBUkNIX0xPQURfU0VDUkVUUyk7Ci0gICAgQ3JlZGVudGlhbEZvckNoYWxs
ZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGEqIGNhbGxiYWNrRGF0YSA9IG5ldyBDcmVkZW50aWFs
Rm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YTsKLSAgICBjYWxsYmFja0RhdGEtPmNh
bGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgY2FsbGJhY2tEYXRhLT5kYXRhID0gZGF0YTsKLQotICAg
IHNlY3JldF9zZXJ2aWNlX3NlYXJjaCgKLSAgICAgICAgMCwgLy8gVGhlIGRlZmF1bHQgU2VjcmV0
U2VydmljZS4KLSAgICAgICAgU0VDUkVUX1NDSEVNQV9DT01QQVRfTkVUV09SSywKLSAgICAgICAg
Y3JlYXRlQXR0cmlidXRlSGFzaFRhYmxlRnJvbUNoYWxsZW5nZShjaGFsbGVuZ2UpLmdldCgpLAot
ICAgICAgICBzZWFyY2hGbGFncywKLSAgICAgICAgMCwgLy8gY2FuY2VsbGFibGUKLSAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjcmVkZW50aWFsRm9yQ2hhbGxl
bmdlQXN5bmNSZWFkeUNhbGxiYWNrKSwKLSAgICAgICAgY2FsbGJhY2tEYXRhKTsKLX0KLQotdm9p
ZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpzdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwm
IGNyZWRlbnRpYWwpCi17Ci0gICAgQ1N0cmluZyB1dGY4UGFzc3dvcmQgPSBjcmVkZW50aWFsLnBh
c3N3b3JkKCkudXRmOCgpOwotICAgIEdSZWZQdHI8U2VjcmV0VmFsdWU+IG5ld1NlY3JldFZhbHVl
ID0gYWRvcHRHUmVmKHNlY3JldF92YWx1ZV9uZXcodXRmOFBhc3N3b3JkLmRhdGEoKSwgdXRmOFBh
c3N3b3JkLmxlbmd0aCgpLCAidGV4dC9wbGFpbiIpKTsKLQotICAgIHNlY3JldF9zZXJ2aWNlX3N0
b3JlKAotICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNyZXRTZXJ2aWNlLgotICAgICAgICBT
RUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAotICAgICAgICBjcmVhdGVBdHRyaWJ1dGVIYXNo
VGFibGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSwgY3JlZGVudGlhbCkuZ2V0KCksCi0gICAgICAg
IFNFQ1JFVF9DT0xMRUNUSU9OX0RFRkFVTFQsCi0gICAgICAgIF8oIldlYktpdEdUSysgcGFzc3dv
cmQiKSwKLSAgICAgICAgbmV3U2VjcmV0VmFsdWUuZ2V0KCksCi0gICAgICAgIDAsIC8vIGNhbmNl
bGxhYmxlCi0gICAgICAgIDAsIC8vIGNhbGxiYWNrCi0gICAgICAgIDApOyAvLyBkYXRhCi19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjBkYTlhMTU3ZmJjMTk2ZTYyODcwNDIyYWNlOWVmZTg5NzQ4
ZWU2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBJR0FMSUEgUy5MLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBDcmVkZW50aWFsQmFja2luZ1N0b3JlX2gKLSNkZWZpbmUgQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZV9oCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Ci0KLWNsYXNz
IENyZWRlbnRpYWxCYWNraW5nU3RvcmUgewotV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3JlZGVudGlh
bEJhY2tpbmdTdG9yZSk7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIENyZWRlbnRpYWxCYWNraW5nU3Rv
cmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsKLSAgICB2aXJ0dWFsIH5DcmVkZW50aWFsQmFj
a2luZ1N0b3JlKCkgeyB9Ci0KLSAgICB0eXBlZGVmIHZvaWQgKCpDcmVkZW50aWFsRm9yQ2hhbGxl
bmdlQ2FsbGJhY2spKGNvbnN0IENyZWRlbnRpYWwmLCB2b2lkKiBkYXRhKTsKLQotICAgIHZvaWQg
Y3JlZGVudGlhbEZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENy
ZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjaywgdm9pZCogZGF0YSk7Ci0gICAgdm9pZCBzdG9y
ZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwg
Y29uc3QgQ3JlZGVudGlhbCYpOwotcHJpdmF0ZToKLSAgICBDcmVkZW50aWFsQmFja2luZ1N0b3Jl
KCkgeyB9Ci19OwotCi1DcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0
b3JlKCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENyZWRlbnRpYWxC
YWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVlNWEwNWZhNDkxOTVmYjMwYmY2OWRlZDU2MmQ1
NDNiOGI2MTAxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVy
bmFsSUNVR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFyKiBjdXJyZW50U2VhcmNoTG9jYWxlSUQoKQotewot
ICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIHN5c3RlbSBsb2NhbGUuCi0gICAgcmV0dXJuICIiOwot
fQotCi1jb25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKQotewotICAgIC8vIEZJ
WE1FOiBTaG91bGQgdXNlIHN5c3RlbSBsb2NhbGUuCi0gICAgcmV0dXJuICJlbl91cyI7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggZWNiOTliZWI0MGFmMzA1ZGIzYzgyMTY4
M2EyZThkZjAwZDI5YmM2Yi4uNjQyODM2ZDdiYjczOWQ0Mzk2ZjhhNWUyMmIzZTBmMmI3MDc3Nzdh
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTYyMSw5ICs2MjEsOCBAQCBQcm9ncmFt
c191bml0dGVzdHNfdGVzdGtleWV2ZW50c19MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQog
UHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3RrZXlldmVudHNfTERGTEFHUyA9ICQod2Via2l0X3Rlc3Rz
X2xkZmxhZ3MpCiAKIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29weWFuZHBhc3RlX1NPVVJDRVMg
PSBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0Y29weWFuZHBhc3RlLmMgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1ZlcnNpb25pbmcuYwogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfQ0ZM
QUdTID0gJCh3ZWJraXRfdGVzdHNfY2ZsYWdzKSBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZQogUHJvZ3JhbXNf
dW5pdHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfTERBREQgPSAkKHdlYmtpdF90ZXN0c19sZGFkZCkK
IFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0Y29weWFuZHBhc3RlX0xERkxBR1MgPSAkKHdlYmtpdF90
ZXN0c19sZGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvcG8vUE9URklMRVMu
aW4gYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgppbmRleCBiMTcwMDFhOGI0MWVl
ODlkZDJhYzc0NzQ3YzJiNTE0MWEzODY2NjNiLi42YjJiOGNjM2M0MmU0MmNiY2FmNWQ2NTJiNWQ3
ZDk2OWRmMDY1ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw4ICsxLDggQEAK
ICMgTGlzdCBvZiBzb3VyY2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5n
cy4KLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKLS4uLy4uL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuY3Bw
Ci0uLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
LS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisuLi8u
Li9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAK
Ky4uLy4uL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvR3Rr
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCisuLi8uLi9QbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3Ry
aW5nc0d0ay5jcHAKIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKIFdlYkNvcmVT
dXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAzMTVkZTljODNlYjEzZjFjMDMzN2E1Mzk0MDJjY2E1
OTExMmJjOGE2Li4wNGExNjRkMmM4M2UxYzA1OWZiOTYyYzI1ODgwMDQyMDE3ZWFjYzY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNDY4LDYgKzQ2OCw3IEBAIGxpYlBsYXRmb3JtR3RrMl9sYV9D
UFBGTEFHUyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJJChDT1ZFUkFHRV9DRkxBR1Mp
IFwKIAkkKEVOQ0hBTlRfQ0ZMQUdTKSBcCisJJChHQU1FUEFEX0NGTEFHUykgXAogCSQoR0VPQ0xV
RV9DRkxBR1MpIFwKIAkkKEZSRUVUWVBFX0NGTEFHUykgXAogCSQoR0xJQl9DRkxBR1MpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFk
ZXJzLnBsIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRl
cnMucGwKaW5kZXggNzJjZjYzZjIwYjI1ZjM1ZGVmODUyYmViZmEwZTJkODk1Nzk0MjdjYi4uYjc4
M2E1ODg5MGJkZTQ1N2IxMjcwNTczOWU1YzY0N2I5YmQzZWQ0NyAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKQEAgLTM2
LDcgKzM2LDcgQEAgdXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsKIG15ICRzcmNSb290ID0gcmVh
bHBhdGgoRmlsZTo6U3BlYy0+Y2F0ZmlsZShkaXJuYW1lKGFic19wYXRoKCQwKSksICIuLi8uLiIp
KTsKIG15ICRpbmNGcm9tUm9vdCA9IGFic19wYXRoKCRBUkdWWzBdKTsKIG15IEBwbGF0Zm9ybVBy
ZWZpeGVzID0gKCJibGFja2JlcnJ5IiwgImNmIiwgImNocm9taXVtIiwgImN1cmwiLCAiZWZsIiwg
Imd0ayIsICJtYWMiLCAicXQiLCAic291cCIsICJ2OCIsICJ3aW4iLCAid3giKTsKLW15IEBmcmFt
ZXdvcmtzID0gKCAiSmF2YVNjcmlwdENvcmUiLCAiV2ViQ29yZSIsICJXZWJLaXQyIik7CitteSBA
ZnJhbWV3b3JrcyA9ICgiSmF2YVNjcmlwdENvcmUiLCAiUGxhdGZvcm0iLCAiV2ViQ29yZSIsICJX
ZWJLaXQyIik7CiBteSBAc2tpcHBlZFByZWZpeGVzOwogbXkgQGZyYW1ld29ya0hlYWRlcnM7CiBt
eSAkZnJhbWV3b3JrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9E
b3dubG9hZHMvZ3RrL0Rvd25sb2FkU291cEVycm9yc0d0ay5jcHAKaW5kZXggMGQzZjlkM2VkZDE1
ZGJhYjI3Mjg0YmRmZmQ4ZDE3NmU4NDIyM2U5My4uOTZiOTFiYTEzNDY5Y2IyNWI4ZTQyZWY0YWQ1
ZjYwZjBjYTM1YjQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgi
CiAKLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0Vy
cm9yc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRp
dmVXZWJLZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oCmluZGV4IDk1ZDc2YWJkMDhiNzk2MDI1NmU2YThlY2RjZGQ2ZDJkMzg1NTE1
NzcuLjU1YjFiYmE0NzUwZjM4ODBiYzRhODcxNTVhN2M2ODljMTI2ZjAzZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtMzYsOSArMzYs
OSBAQCBPQkpDX0NMQVNTIE5TVmlldzsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFL
ZXlFdmVudD4KICNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDxHT3duUHRyR3RrLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblJlc3VsdHMuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25S
ZXN1bHRzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBs
YXRmb3JtL0d0a0lucHV0TWV0aG9kRmlsdGVyLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBH
ZGtFdmVudDsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViTW91c2VFdmVudC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaAppbmRleCBkZGU1YjM2MmUzZDI1
MWVmY2Y2MTU2ZGQ4NWU0ZDQyMDQ5Njk5ZThlLi5kNTg4ODIyY2I4ODE0YjUwMDFiMzYzZWY1NGY2
OWE2YWVmNWZhNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2Vi
TW91c2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2
ZW50LmgKQEAgLTM0LDcgKzM0LDcgQEAgT0JKQ19DTEFTUyBOU1ZpZXc7CiAjZWxpZiBQTEFURk9S
TShRVCkKICNpbmNsdWRlIDxxZXZlbnQuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRl
IDxHT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgogdHlwZWRl
ZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVk
ZSA8RXZhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYldo
ZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgK
aW5kZXggZmFlOWU5NmJlMmQ2ZDZiNjRhNGE1OGJjZGMwYzhjYzYwNjExNTUyNi4uOTFlODBhZGJk
ODI1YjlhODAxMjBjN2M3ZTBlMDVlY2YxNTU0Mjc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oCkBAIC0zNCw3ICszNCw3IEBAIE9CSkNfQ0xBU1MgTlNW
aWV3OwogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8cWV2ZW50Lmg+CiAjZWxpZiBQTEFU
Rk9STShHVEspCi0jaW5jbHVkZSA8R093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dP
d25QdHJHdGsuaD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2VsaWYgUExB
VEZPUk0oRUZMKQogI2luY2x1ZGUgPEV2YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKaW5kZXggMzk2OWUwYzg2NWVkZTAyMmJlYTU5YTE2
YmI2Mjg2ZTAxYWE4NDlmZS4uMDg3ZTc5NDhkNzc5ZWFiZGJlM2JmNzc0NDVlYzJmOWViYTQxMjUz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5j
cHAKQEAgLTI5LDEwICsyOSwxMCBAQAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9y
bS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVmVyc2lvbmluZy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5o
CmluZGV4IDA4NTgxNWM0MmQ0NzdiMTJlZGY5NmQxNTY4OTI2YTlmZjhhZmU2YzcuLjEyMzQyMDgw
ZDkyMjA0MDAzMzRjNWMyMjk3YTk0YjNkNDBkM2NiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBXZWJF
dmVudEZhY3RvcnlfaAogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0NvbXBvc2l0aW9uUmVzdWx0cy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0NvbXBvc2l0aW9uUmVz
dWx0cy5oPgogCiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4
IGJmNjE2MjQwYTAxZmJmMzg5ODAxNzEyNzhhOGI2NjdhY2M4YTZlODEuLjNiMTJjMzZhMDljNjQw
NzFjMTMyZTE0YmJlYWM0Y2Q3MjkwNjQyYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTM4LDkgKzM4LDkgQEAKICNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eUd0ay5oIgorI2luY2x1ZGUgPFBsYXRm
b3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKaW5kZXggOWZmMjE0
ZTkwMjZmZTcyNTQxYzAzMzRjYWViYWY5ZDkzZjkxOTBmZS4uODQ3NDI2ODE0M2I4OTAxZTBkM2Zk
MDlmOWY1ZjM3MmVmNjY2MGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgK
QEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFz
ZS5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREb3dubG9hZC5jcHAKaW5kZXggZThhNGRjN2M2ZGQzNWJiOTNhZDIxZjQ2OTZiNGU3
YmQ2ZDc2MWE3OC4uNGUzM2EwNTEyZWJhYWIxMTE3NzQzMDQyYWExMzU3ZjE1ODM3NDViYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2Fk
LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKICNpbmNs
dWRlICJXZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFVSSVJlc3Bv
bnNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3JzR3RrLmg+CisjaW5jbHVkZSA8
UGxhdGZvcm0vRXJyb3JzR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNl
Lmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRF
cnJvci5jcHAKaW5kZXggZGM0OGIxYzAxMWFjMDdkM2Q5MTIwZmFmMmE2YWI0OThjMmE4YTBkMC4u
M2Q0YmE2MDA1NDQxOGU3MTRjNzNlYWYzMDM1MzA5MmYzMTMxNDFiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcApAQCAtMjIsNyArMjIs
NyBAQAogI2luY2x1ZGUgIldlYktpdEVycm9yLmgiCiAKICNpbmNsdWRlICJXZWJLaXRQcml2YXRl
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9F
cnJvcnNHdGsuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uLmNw
cAppbmRleCAwNjhhMjhjZGRjNWIwNGEwY2YyNTRlZGFlZjg0MzkxZGQ0OWY0NjYyLi5jYWU2YmYz
YjY4ZjdjZDNmYjM0MTYxM2ZiNjJlMjZhNTBkZjBmMDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwCkBA
IC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRp
bGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUg
PGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3Bw
CmluZGV4IDBmMDkxNzU1NGVmN2Q1YmYyYzFlODA3YmJhMzBmNjBkNTk5NmI4ODYuLjQxMzlkMDlh
M2Y4MjJhMTBiOTdhYmIyZWE5NmU3OTAzMDE5NjNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKQEAgLTI3LDcgKzI3LDcg
QEAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdp
bmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGls
aXRpZXMuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCmluZGV4IDIzMjBlMWMzYzFlYmJlZjMzODIyOGRiYmY0NjE4YmQzMzZm
N2ZhZjEuLmY3Y2IzNjc1MzU2Mzg5OGIyMjE0NTYzYTRkZjdiZDU2ODk4MmQ0ZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBA
IC01Niw5ICs1Niw5IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0FQSUNhc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HT3duUHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMu
aD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9EcmFnSWNvbi5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dP
d25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggMjM0NGY4OTRk
ZjMzZTBkMzc1NGFhZjFhOTQzNjI2NDhhMjFjNWZiZC4uMDk5MDFmNmZmNzcwMWMxZWE3OGZkNTEw
NWQyMWFjNDAwM2M1NTBlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDEsMTggKzQxLDE4IEBACiAjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCiAjaW5jbHVkZSAiV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQ2xpcGJvYXJkR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRVdGls
aXRpZXNHdGsuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRl
IDxQbGF0Zm9ybS9DbGlwYm9hcmRHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9DbGlwYm9hcmRV
dGlsaXRpZXNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9EYXRhT2JqZWN0R3RrLmg+CisjaW5j
bHVkZSA8UGxhdGZvcm0vRHJhZ0ljb24uaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HT3duUHRyR3Rr
Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrQ2xpY2tDb3VudGVyLmg+CisjaW5jbHVkZSA8UGxh
dGZvcm0vR3RrRHJhZ0FuZERyb3BIZWxwZXIuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGls
aXRpZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CisjaW5jbHVkZSA8
UGxhdGZvcm0vUGFzdGVib2FyZEhlbHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3du
UHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtDbGlja0NvdW50ZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0d0a0RyYWdBbmREcm9wSGVscGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtV
dGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJk
SGVscGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgpAQCAtNjcsNyArNjcsNyBAQAog
I2VuZGlmCiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpCi0jaW5jbHVkZSA8V2ViQ29yZS9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5o
PgorI2luY2x1ZGUgPFBsYXRmb3JtL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg+CiAjZW5k
aWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRl
ci5jcHAKaW5kZXggOGI4N2MxNTIyMDJhNjI5ZWE0N2YwMWE0MmJmZGVkYjcxNDBiZTVkYS4uNDBh
NDA5MDEzOWY1YzZmNDE5YWRkMjllMGU2OGY2Zjk1NjA2NTg1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1
dE1ldGhvZEZpbHRlci5jcHAKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25S
ZXN1bHRzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
Q29tcG9zaXRpb25SZXN1bHRzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKaW5kZXggN2U3ZWIwMTY3NTgyMWE1YWIy
ZTNkYTQyY2MyNWU2MGFlMTcxOGI5YS4uZDgwZDI0NGYzYjExZWNjNjY1NTE1MTk5MGY2M2I5NWNk
NGRiNDY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIldlYlZp
ZXdUZXN0LmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJH
dGsuaD4KIAogV2ViVmlld1Rlc3Q6OldlYlZpZXdUZXN0KCkKICAgICA6IG1fd2ViVmlldyhXRUJL
SVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJv
eHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVBy
b3h5R3RrLmNwcAppbmRleCBlZDJiNGRmOGYwZGE0NTkwODg0MzU4MzlkYjZkMzhjYTljOTcwMDNm
Li41YWRmMjU4ZGE4YWM0NDIyYmE0ODdjYTBjNDUwYjA4MjI2NDZiNTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxQ
bGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCmluZGV4IGViYTNjYWI0MmZlOGExMDVlNjZj
OTY3ZWFjOGUyNGZjNTM3NWY4NGIuLjlmY2IxOGEwNmE4Y2E2MTMxNDM2NjVlNDQ1NjliZDc0ZmJj
NWRhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5z
cGVjdG9yUHJveHlHdGsuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNs
dWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1
ZGUgPGd0ay9ndGsuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUG9wdXBNZW51UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAKaW5kZXggYTQxODM5YTNlYjk3NjRlZDQ3MzRhZjJlOTc2
ODQ3N2U5MGVmMzQyNy4uNzlkMDE4YjIxZjMwMjY4YjE4YmJlYjBhODI3NWY3MThiMGRmZDhjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94
eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQ
cm94eUd0ay5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJXZWJQb3B1cEl0ZW0uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0
a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1
ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oCmluZGV4IDRiMzM1YmNkZTY1NDU5MDBiMDQyMzk3
NjVhMmFhMTIzM2RmN2RhMzQuLmUxNjc1ZDFlZDA3ZjgzMzM3MzczNzE3MTQyYmUzNDdiZTNkY2Nk
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51
UHJveHlHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVu
dVByb3h5R3RrLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgV2ViUG9wdXBNZW51UHJveHlH
dGtfaAogCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0d0a1BvcHVwTWVudS5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1BvcHVwTWVudS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAppbmRleCBhMTg0Njg3
OGIzMTA0NjE0YjdhMjZmYzI3Y2VhYjc5YTFhNGI5OGUwLi45M2QzNDZjZGM0Mzk1ZGI5ZTUxNjFh
ZWFlZDk0YmFkOGMwMjQ3ZjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDEx
LmNwcApAQCAtNDEsOCArNDEsOCBAQAogI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogI2luY2x1
ZGUgPGd0ay9ndGt4Lmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtWZXJzaW9uaW5n
Lmg+CiAjaW5jbHVkZSA8Z2RrL2dka3guaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25p
bmcuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkgJiYgZGVmaW5lZChIQVZFX0VDT1JFX1gpCiAjaW5j
bHVkZSA8RWNvcmVfWC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3Bw
CmluZGV4IGQ4MDhlZDQ0YmZhMTY4YWY1OGM4MTU3NTE3ZGE3Yjk4ZDIzMDBkMjguLjY2ODhhODBm
MTc2ZTI5YTdlY2UwYjYyODA1NTY1OTg2MDJhMTY3MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdD
bGllbnRHdGsuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFw
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9y
bS9DbGlwYm9hcmRHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q29udGV4dENhaXJvLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRl
eCA2N2ZkYzFmNDQ0ZWFkNmJhOGNhNzkxODg0ZmQ1ODE5ZjgyNGYwYzgxLi44OTJhYzFhMjc5MTBh
YzYwNTg3OWVhZGRjMThjYThiYjU0MTE5ZGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNs
aWVudEd0ay5jcHAKQEAgLTI2LDkgKzI2LDkgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRGF0
YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3Rl
Ym9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NLZXlib2FyZENvZGVzLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKaW5k
ZXggODM3NWQwNjdhZWIxMmQ4OTJhZWZhNjhlNjZlYTYzM2M5ODgyNjNjYy4uNWQwNWExNjAzZGRl
ZGFkNGNkN2YzOGQ4ZWIyYzZiZWY5MGViZDZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3Bw
CkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRXJy
b3JzLmgiCiAKLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRm
b3JtL0Vycm9yc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCA4YjBkYjZlY2MzZTM4NDIwNzlmZWRhOWE0MTlh
NzI5NGVjOTJmMmQyLi4zNjQ4N2IzZDY5ZDBlMTgzYzdkNTQxNjFlMzJhOTZiYjgzZThhZTA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFn
ZUd0ay5jcHAKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIldlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL1Bhc3RlYm9hcmRI
ZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxw
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCmluZGV4IDBmMDdkNzRiY2E1YThkNjQ0ZGE2OTA0
NzcwNDMxMTUyZWNhNGFmMzMuLjYxYWVlNDkyYzQ4ZWY3ZTYwOGY4MmNiOTNiZWNlNGMzOTlhZWEx
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UHJpbnRPcGVyYXRpb25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNH
dGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9FcnJvcnNHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZiYjI1MzkwMTc0YzU2MDdmMDZjMDI3OTdi
ZTVhMWFlNWVmMjZmOTYuLjBiOThhMWIyMjllODEyZjQ5NzMwM2MyNzQzNGU1OTFmYjEyZDMzNjQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxOSBAQAogMjAxMy0wMi0yNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CiAKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJv
bSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGp1c3QgcGF0aHMgdG8gZmlsZXMgb3Ig
ZGlyZWN0b3JpZXMgdGhhdCBhcmUgbm93IGxvY2F0ZWQgaW4gU291cmNlL1BsYXRmb3JtLgorICAg
ICAgICBBbHNvIGZpeCBhbiBpbmRlbnRhdGlvbiBwcm9ibGVtLiBBbHNvIGxpbmsgRHVtcFJlbmRl
clRyZWUgYWdhaW5zdCB0aGUgbGliUGxhdGZvcm0gbGlicmFyeS4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL0dOVW1ha2VmaWxlLmFtOiBBZGp1c3QgcGF0aHMgdG8gZmlsZXMgdGhhdCBhcmUgbm93
IGxvY2F0ZWQgaW4gU291cmNlL1BsYXRmb3JtLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3Rr
L1BsYXRmb3JtV2ViVmlld0d0ay5jcHA6IEluY2x1ZGUgdGhlIEdPd25QdHJHdGsgaGVhZGVyIHRo
cm91Z2ggYSBmb3J3YXJkaW5nCisgICAgICAgIGhlYWRlciB0aGF0J3Mgbm93IHBvaW50aW5nIGlu
dG8gU291cmNlL1BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0dOVW1h
a2VmaWxlLmFtOiBSZXBsYWNlIHRoZSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgcmVmZXJl
bmNlIHdpdGggU291cmNlL1BsYXRmb3JtL2d0ay4KKworMjAxMy0wMi0yNCAgWmFuIERvYmVyc2Vr
ICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gQnVpbGQgbGliV2ViQ29y
ZVBsYXRmb3JtLmxhIGFzIGxpYlBsYXRmb3JtLmxhLCBsaWJXZWJDb3JlR3RrLmxhIGFzIGxpYlBs
YXRmb3JtR3RrLmxhCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTA1NzkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9H
TlVtYWtlZmlsZS5hbQppbmRleCBjMDg4NmUyMDg0NmVjMzYxNTE5YjVmMDM3MjdhNDkwYmMzM2M3
Y2NkLi5lZTM5YmNkOTRkZjFhYzY4MzZlMmNlMWY3Zjc0NWNhMzczNjczZjU4IDEwMDY0NAotLS0g
YS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtMTA5
LDggKzEwOSw4IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZMQUdTID0gXAogCS1JJChz
cmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ayBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNkaXIpL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ayBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYktpdC9ndGsgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcyBcCiAJLUkkKHRvcF9i
dWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1NvdXJjZS9XZWJL
aXQvZ3RrIFwKQEAgLTEyNCw2ICsxMjQsNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DUFBG
TEFHUyArPSBcCiBlbmRpZgogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAor
CVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIFwKIAlUb29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZUNvbW1vbi5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlUHJl
Zml4LmggXApAQCAtMTQ4LDcgKzE0OSw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJD
RVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvY29uZmlnLmggXAogCVRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmggXAogCVRvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzQXRrLmNwcCBcCi0gICAgCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAorCVRvb2xzL0R1
bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBcCiAJVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcCBcCiAJVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmggXApAQCAtMTY3
LDggKzE2OCw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3LmggXAogCVRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmggXAogCVRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBcCi0JVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrVmVyc2lvbmluZy5jCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1
ZUl0ZW1HdGsuY3BwCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NYWEZMQUdTID0gXAogCSQo
Z2xvYmFsX2N4eGZsYWdzKSBcCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0dOVW1h
a2VmaWxlLmFtIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQppbmRleCA0ZjVk
ZmNhODc0MzUwYTczNDYxYTk0MmU4MzhlNWYxYjRkMWUxYTgzLi4xNmU4YjA2NzliZmI4N2IzMDU3
MDU2YmU5MmE5NTA0ZDNhYjU0ZmY3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KQEAg
LTkyLDEwICs5MiwxMCBAQCBQcm9ncmFtc19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfTERGTEFHUyA9
IFwKIAkkKFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdFdURl9MREZMQUdTKQogCiBQcm9ncmFt
c19UZXN0V2ViS2l0QVBJX1Rlc3RHdGtfU09VUkNFUyA9IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGlj
cy9JbnRSZWN0R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJl
Y3RDYWlyby5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbnRS
ZWN0R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9k
RmlsdGVyLmNwcCBcCiAJVG9vbHMvVGVzdFdlYktpdEFQSS9jb25maWcuaCBcCiAJVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3JtV2ViVmlld0d0ay5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCmluZGV4IGJhNmZhYjA0ODQw
YzEyNzdjNmZiMTMxNzdmMTIyNjY3NTY3NDdjMjEuLjEzOTZkYTlmOWFjZWVkY2ZlNmE5OGIxYWY2
OWFlNWFkMmQzODJlOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRm
b3JtV2ViVmlld0d0ay5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1X
ZWJWaWV3R3RrLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogCi0jaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3Rr
Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgogI2luY2x1ZGUgPGd0ay9ndGsu
aD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0dOVW1ha2VmaWxlLmFtCmluZGV4IDE4MTI1Njk2NzZhMmM4MTRkY2Y4ZWMyMmU0ZWRmZmUzZDAy
MDk2ZjQuLmYxZmIzMDg1MjhlZmE1NmJjZTQ1MTNkZDk4Yjk5NDZmN2ZjZmVmNTQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9HTlVtYWtlZmlsZS5hbQpAQCAtMzgsNyArMzgsNyBAQCBQcm9ncmFtc19X
ZWJLaXRUZXN0UnVubmVyX1NPVVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXRUZXN0UnVubmVyX0NQ
UEZMQUdTID0gXAogCS1pbmNsdWRlIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1
bm5lclByZWZpeC5oIFwKIAktSSQoc3JjZGlyKS9Ub29scy9XZWJLaXRUZXN0UnVubmVyIFwKLQkt
SSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorCS1JJChzcmNkaXIpL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvaW5jbHVkZSBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAkkKGphdmFzY3JpcHRjb3Jl
X2NwcGZsYWdzKSBcCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggN2My
NGVlNjdlYWM0Y2ZiOTExYjBiZDU4NzA2ZmJmMWRkZTg1ZTc5NS4uM2QxYjlkNGEwM2VlYjQxZjJk
ZmE3YmFhMmMwNjdlNTE0ZTk3NzBjNCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5n
ZUxvZwpAQCAtMSw1ICsxLDE0IEBACiAyMDEzLTAyLTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBNb3ZlIEdUSy1zcGVjaWZpYyBwbGF0Zm9y
bSBmaWxlcyBmcm9tIFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29uZmlndXJlLmFjOiBBZGp1c3QgdGhlIHBhdGgg
dG8gdGhlIFVzZXJBZ2VudEd0ay5oLmluIGZpbGUsIGl0J3Mgbm93IGluIFNvdXJjZS9QbGF0Zm9y
bS9ndGsuCisKKzIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29t
PgorCiAgICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVQbGF0Zm9ybS5sYSBhcyBsaWJQbGF0
Zm9ybS5sYSwgbGliV2ViQ29yZUd0ay5sYSBhcyBsaWJQbGF0Zm9ybUd0ay5sYQogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5CiAKZGlmZiAtLWdp
dCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA1ZWNmODJkY2MwZTFkODFiM2Uy
YmIwZGQ5MDI0MjgyNjQ2NWI0Yzc5Li5lMmU0NTlkMDc1NWUzMjRlZjBjZjcxYzNiYzRkYTk1Njc4
NTk1N2YyIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0z
Nyw3ICszNyw3IEBAIG00X2luY2x1ZGUoW1NvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRvbWFrZS5t
NF0pCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBBQ19DT05GSUdfRklMRVMoW0dO
VW1ha2VmaWxlXSkKLUFDX0NPTkZJR19GSUxFUyhbRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Vc2Vy
QWdlbnRHdGsuaDpTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW5d
KQorQUNfQ09ORklHX0ZJTEVTKFtEZXJpdmVkU291cmNlcy9XZWJDb3JlL1VzZXJBZ2VudEd0ay5o
OlNvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmguaW5dKQogQUNfQ09ORklHX0ZJTEVT
KAogICAgIFtTb3VyY2UvSmF2YVNjcmlwdENvcmUvamF2YXNjcmlwdGNvcmVndGstJHtXRUJLSVRH
VEtfQVBJX1ZFUlNJT059LnBjOlNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qYXZhc2NyaXB0Y29yZWd0
ay5wYy5pbgogICAgICAgICBTb3VyY2UvV2ViS2l0L2d0ay9KU0NvcmUtJHtXRUJLSVRHVEtfQVBJ
X1ZFUlNJT059LmdpcjpTb3VyY2UvV2ViS2l0L2d0ay9KU0NvcmUuZ2lyLmluXSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189982</attachid>
            <date>2013-02-24 11:40:38 -0800</date>
            <delta_ts>2013-03-13 05:11:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110330-20130224203653.patch</filename>
            <type>text/plain</type>
            <size>1260543</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBkNGFjNWYyOWI2MWNk
Yjc1ZGVkNjVhN2E0YzBlMjM1N2FiNjNkMTEyLi41ZDgyYTgwMDk5M2E5NjA4ZWMxNGU2ZDkzZjU3
MjFjNzYwM2Y2N2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNSBAQAogMjAxMy0wMi0yNCAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dUS10gTW92
ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJvbSBXZWJDb3JlIHRvIFBsYXRmb3JtCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzMzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEdUSy1z
cGVjaWZpYyBXZWJDb3JlIHNvdXJjZSBmaWxlcyBoZXJlLCBpbnRvIFNvdXJjZS9QbGF0Zm9ybS9n
dGsuIFRoZXNlIGZpbGVzCisgICAgICAgIGFyZSBidWlsdCBpbnRvIHRoZSBsaWJQbGF0Zm9ybSBz
dGF0aWMgbGlicmFyeS4gTm90ZSB0aGF0IHRoaXMgcGF0Y2ggb25seSBicmluZ3MgdGhlCisgICAg
ICAgIEdUSy1zcGVjaWZpYyBmaWxlcyBvdmVyIGZyb20gV2ViQ29yZSBpbnRvIFBsYXRmb3JtLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEluY2x1ZGUgdGhlIEdOVW1ha2VmaWxlLmxpc3Qu
YW0gZmlsZS4gQWRkIHRoZSBuZXcgc3ViZGlyZWN0b3JpZXMgdG8KKyAgICAgICAgdGhlIHBsYXRm
b3JtIGxpYnJhcnkgY3BwZmxhZ3MuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRk
ZWQuIExpc3RzIGFsbCB0aGUgYnVpbGQgdGFyZ2V0cyB0aGF0IGFyZSBub3cgdW5kZXIgU291cmNl
L1BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBndGsvOiBOb3cgY29udGFpbnMgYWxsIHRoZSBmaWxl
cyB0aGF0IHdlcmUgcHJldmlvdXNseSB1bmRlciBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsu
CisgICAgICAgICogZ3RrL2F1ZGlvLzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgdGhhdCB3
ZXJlIHByZXZpb3VzbHkgdW5kZXIgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrLgor
ICAgICAgICAqIGd0ay9ncmFwaGljcy86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRoYXQg
d2VyZSBwcmV2aW91c2x5IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay4KKyAgICAgICAgKiBndGsvbmV0d29yay86IE5vdyBjb250YWlucyBhbGwgdGhlIGZpbGVzIHRo
YXQgd2VyZSBwcmV2aW91c2x5IHVuZGVyIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Z3RrLgorICAgICAgICAqIGd0ay90ZXh0LzogTm93IGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgdGhh
dCB3ZXJlIHByZXZpb3VzbHkgdW5kZXIgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsu
CisKKzIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVQbGF0Zm9ybS5sYSBhcyBsaWJQbGF0Zm9ybS5s
YSwgbGliV2ViQ29yZUd0ay5sYSBhcyBsaWJQbGF0Zm9ybUd0ay5sYQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4
MTQ5YmYxZGQ0Y2NhNDE2NDllODc3OTBkY2FkZDE1MmI0YTI2MDk2Li4yODBlNTEzMmViNjY1Y2Vi
ZTExYmI1ZGI0YjRhNTlkNzkwOTA1MGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIw
MTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCisgICAgICAg
IFtHVEtdIE1vdmUgR1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQ
bGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIC0gbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbTogUmVtb3ZlIGRpcmVjdG9yaWVzIGZyb20gdmFyaW91cyBjcHBmbGFncyBsaXN0aW5n
cyB0aGF0IGFyZSBub3cgZW1wdHkuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogUmVt
b3ZlIGJ1aWxkIHRhcmdldHMgZm9yIHNvdXJjZSBmaWxlcyB0aGF0IHdlcmUgbW92ZWQgdG8gU291
cmNlL1BsYXRmb3JtL2d0ay4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvOiBNb3ZlZCBhbGwgdGhl
IHNvdXJjZSBmaWxlcyB0byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL2d0ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRvIFNvdXJjZS9QbGF0Zm9y
bS9ndGsvYXVkaW8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrLzogTW92ZWQgYWxs
IHRoZSBzb3VyY2UgZmlsZXMgdG8gU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2d0ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRv
IFNvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0
ay86IE1vdmVkIGFsbCB0aGUgc291cmNlIGZpbGVzIHRvIFNvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4
dC4KKworMjAxMy0wMi0yNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisK
ICAgICAgICAgW0dUS10gQnVpbGQgbGliV2ViQ29yZVBsYXRmb3JtLmxhIGFzIGxpYlBsYXRmb3Jt
LmxhLCBsaWJXZWJDb3JlR3RrLmxhIGFzIGxpYlBsYXRmb3JtR3RrLmxhCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1NzkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CmluZGV4IGZmNTMyMmJiOGM5YWY5ZGRiMTdiZGE3YTA4NzRkNzQ2ZmMzOTFhNzYuLmRlYjM3NjE3
MTA2OWFhMTI0OWExNGUzMDM3Nzc3NzBkMzllNWJkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNSBAQAogMjAxMy0wMi0yNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CiAKKyAgICAgICAgW0dUS10gTW92ZSBHVEstc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMgZnJv
bSBXZWJDb3JlIHRvIFBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTAzMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGp1c3QgdGhlIHBhdGggdG8gdGhlIEd0
a1ZlcnNpb25pbmcuYyBzb3VyY2UgZmlsZS4gUmVtb3ZlIGFuIHVubmVjZXNzYXJ5CisgICAgICAg
IHJlZmVyZW5jZSB0byB0aGUgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIGRpcmVjdG9yeSB3
aGljaCBpcyBub3cgZW1wdHkuCisKKzIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNl
a0BpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtdIEJ1aWxkIGxpYldlYkNvcmVQbGF0Zm9ybS5s
YSBhcyBsaWJQbGF0Zm9ybS5sYSwgbGliV2ViQ29yZUd0ay5sYSBhcyBsaWJQbGF0Zm9ybUd0ay5s
YQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNTc5
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3BvL0NoYW5nZUxvZwppbmRleCA4ZGQzZGQ4YTEwYjZlZTdmYmYwOWEyZWExNmFi
MmQ0ZTU2YWEwZTM4Li5jMTQyMzAxYWFlNTgzMzE2NTQ5YzQ1ZjhjMGIxZTE2NGU5ODUzMGVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvcG8vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMDItMjQgIFphbiBE
b2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR1RL
LXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZyb20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjog
QWRqdXN0IHBhdGhzIHRvIHZhcmlvdXMgZmlsZXMgdGhhdCB3ZXJlIG1vdmVkIHRvIFNvdXJjZS9Q
bGF0Zm9ybS9ndGsuCisKIDIwMTMtMDItMTkgIE1pyJl1IE1vbGRvdmFuICA8ZHVtb2xAZ25vbWUu
b3JnPgogCiAgICAgICAgIFJvbWFuaWFuIHRyYW5zbGF0aW9uIGZvciBXZWJLaXRHdGsrIEhFQUQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzZGQxZDY2YTk2ZjA3OWI3OTBiOWYxYjFkYmM0NWEwNWJmYzE4MTU4Li4y
ZTI5MGE1MWQwNjNkNzFlYTIzYTQyOWVmZTFiNDEyZjRjM2ZkYzk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsNDUgQEAKIDIwMTMtMDItMjQgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEu
Y29tPgogCisgICAgICAgIFtHVEtdIE1vdmUgR1RLLXNwZWNpZmljIHBsYXRmb3JtIGZpbGVzIGZy
b20gV2ViQ29yZSB0byBQbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhlIGZvcndhcmRpbmcgaGVhZGVyIGdlbmVyYXRpb24gdG9vbCBtdXN0
IG5vdyBhbHNvIHRha2UgdGhlIFBsYXRmb3JtIGZyYW1ld29yayBpbnRvCisgICAgICAgIGFjY291
bnQgYXMgdGhhdCdzIHdoZXJlIHRoZSBHVEstc3BlY2lmaWMgc291cmNlIGZpbGVzIGFyZSBwbGFj
ZWQgbm93LiBJbmNsdXNpb25zIG9mCisgICAgICAgIGhlYWRlcnMgdGhhdCBhcmUgbm93IGxvY2F0
ZWQgdGhlcmUgYXJlIGFkanVzdGVkIHRvIGluY2x1ZGUgZnJvbSBQbGF0Zm9ybSBpbnN0ZWFkIG9m
IFdlYkNvcmUuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGdhbWVwYWQgZGVwZW5k
ZW5jeSBDRkxBR1MgdG8gdGhlIGxpc3Qgb2YgQ1BQRkxBR1MgdGhlIGxpYlBsYXRmb3JtR3RrMi5s
YSBidWlsZHMgd2l0aC4KKyAgICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVh
ZGVycy5wbDoKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJv
cnNHdGsuY3BwOgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmg6Cisg
ICAgICAgICogU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaDoKKyAgICAgICAgKiBTaGFyZWQv
TmF0aXZlV2ViV2hlZWxFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2Rl
cnNHdGsuY3BwOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdDJHdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVJQ2xpZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhv
ZEZpbHRlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rl
c3QuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5j
cHA6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0
ay5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3Jz
R3RrLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsu
Y3BwOgorCisyMDEzLTAyLTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4K
KwogICAgICAgICBbR1RLXSBCdWlsZCBsaWJXZWJDb3JlUGxhdGZvcm0ubGEgYXMgbGliUGxhdGZv
cm0ubGEsIGxpYldlYkNvcmVHdGsubGEgYXMgbGliUGxhdGZvcm1HdGsubGEKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDU3OQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFr
ZWZpbGUuYW0KaW5kZXggNGZkOTYzYmMzYWRjMDlkNzc2MTE0MTRhMzFiMWY4ODUxNzk3Yjc1OC4u
MzI2MWRlOWNmMjAyNTYyNjBlOGZmODRhNDRjN2ZjOTFjNjRmMzk1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9HTlVtYWtl
ZmlsZS5hbQpAQCAtNCw2ICs0LDE1IEBACiAjIGFuZCB0aGUgb3RoZXIgKG5hbWVkIGxpYlBsYXRm
b3JtR3RrMi5sYSkgdXNpbmcgR1RLMi4gVGhlIGxhdHRlciBpcyByZXF1aXJlZCBieSB0aGUKICMg
V2ViS2l0UGx1Z2luUHJvY2VzcyBpbiBXZWJLaXQyIGFzIHNvbWUgcGx1Z2lucyAoc3VjaCBhcyBG
bGFzaCkgc3RpbGwgdXNlIEdUSzIuCiAKK2luY2x1ZGUgJChzcmNkaXIpL1NvdXJjZS9QbGF0Zm9y
bS9HTlVtYWtlZmlsZS5saXN0LmFtCisKK3BsYXRmb3JtX2NwcGZsYWdzICs9IFwKKwktSSQoc3Jj
ZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL2F1ZGlvIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzIFwK
KwktSSQoc3JjZGlyKS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsgXAorCS1JJChzcmNkaXIp
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvdGV4dAorCiBub2luc3RfTFRMSUJSQVJJRVMgKz0gXAogCWxp
YlBsYXRmb3JtLmxhIFwKIAlsaWJQbGF0Zm9ybUd0ay5sYQpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvUGxhdGZvcm0vR05VbWFrZWZpbGUu
bGlzdC5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMDMxMmQyZmQ1OGZjZGQxMzA3MzVmMzg5NjcwNTA5MGE3Mzc1
MDAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTAsMCArMSwxMDYgQEAKK3BsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNH
dGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VH
dGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuaCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0v
Z3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQXN5bmNG
aWxlU3lzdGVtR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCisJU291cmNlL1BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZFV0aWxpdGllc0d0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9u
UmVzdWx0cy5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0ZW1HdGsuY3BwIFwKKwlTb3VyY2UvUGxh
dGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3Rr
LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdE
YXRhR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgXAorCVNvdXJj
ZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSW1h
Z2VHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAgXAorCVNv
dXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9n
dGsvR3RrQ2xpY2tDb3VudGVyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtDbGlja0Nv
dW50ZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtV
dGlsaXRpZXMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwKKwlT
b3VyY2UvUGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0dPd25QdHJHdGsuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lk
Z2V0LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a1BvcHVwTWVudS5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYyBc
CisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmggXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL0tl
eUJpbmRpbmdUcmFuc2xhdG9yLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3Ry
aW5nc0d0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaCBcCisJ
U291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkSGVscGVyLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVdoZWVsRXZlbnRHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51
R3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIFwKKwlTb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsyLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azMuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIFwKKwlTb3VyY2Uv
UGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRo
ZW1lR3RrMi5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNw
cCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBcCisJU291cmNlL1Bs
YXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3Rr
L1NlYXJjaFBvcHVwTWVudUd0ay5oIFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL1NoYXJlZFRpbWVy
R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRS
ZW5kZXJpbmdDb250ZXh0LmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJp
bmdDb250ZXh0LmggXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvYXVkaW8vQXVkaW9CdXNHdGsuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0NvbG9yR3RrLmNwcCBcCisJU291cmNl
L1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvZ3JhcGhpY3MvR2RrQ2Fpcm9VdGlsaXRpZXMuaCBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcCBcCisJU291
cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgg
XAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNvbkd0ay5jcHAgXAorCVNvdXJjZS9Q
bGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJHdGsuY3BwIFwKKwlTb3VyY2UvUGxhdGZv
cm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9ncmFw
aGljcy9JbnRQb2ludEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50
UmVjdEd0ay5jcHAgXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVkZW50aWFsQmFj
a2luZ1N0b3JlLmNwcCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxC
YWNraW5nU3RvcmUuaCBcCisJU291cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VHdGsuY3BwCisKK2lmIFRBUkdFVF9YMTEKK3BsYXRmb3JtZ3RrX3NvdXJj
ZXMgKz0gXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNw
cAoraWYgVVNFX09QRU5HTAorcGxhdGZvcm1ndGtfc291cmNlcyArPSBcCisJU291cmNlL1BsYXRm
b3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAorCVNvdXJjZS9QbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorZW5kaWYgIyBFTkQgVVNFX09QRU5H
TAorZW5kaWYgIyBFTkQgVEFSR0VUX1gxMQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVT
eXN0ZW1HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwZmJkYTA4NzM0MGMwYmY2MWIxZGIxZDc3MGM4OWM3
ZWQ4MzAyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmls
ZVN5c3RlbUd0ay5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKwor
I2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUd0ay5oIgorCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBBc3luY0ZpbGVT
eXN0ZW06OmlzQXZhaWxhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5jRmlsZVN5c3Rl
bTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEFzeW5jRmlsZVN5c3RlbUd0
aygpKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW06Om9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0
cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZpZXIsIEZpbGVTeXN0
ZW1UeXBlLCBib29sLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY2FsbGJhY2tzLT5kaWRGYWlsKE5P
VF9TVVBQT1JURURfRVJSKTsKK30KKwordm9pZCBBc3luY0ZpbGVTeXN0ZW06OmRlbGV0ZUZpbGVT
eXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRp
ZmllciwgRmlsZVN5c3RlbVR5cGUgdHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNhbGxiYWNr
cy0+ZGlkRmFpbChOT1RfU1VQUE9SVEVEX0VSUik7Cit9CisKK0FzeW5jRmlsZVN5c3RlbUd0azo6
QXN5bmNGaWxlU3lzdGVtR3RrKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitBc3lu
Y0ZpbGVTeXN0ZW1HdGs6On5Bc3luY0ZpbGVTeXN0ZW1HdGsoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjptb3ZlKGNvbnN0IEtVUkwmIHNv
dXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y29weShjb25zdCBLVVJMJiBzb3VyY2VQYXRo
LCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OnJlbW92ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZW1vdmVSZWN1cnNpdmVseShj
b25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lz
dGVtR3RrOjpyZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlRmlsZShjb25zdCBLVVJMJiBwYXRo
LCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFzeW5jRmlsZVN5
c3RlbUd0azo6Y3JlYXRlRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZl
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpmaWxlRXhp
c3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBc3luY0Zp
bGVTeXN0ZW1HdGs6OmRpcmVjdG9yeUV4aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZWFkRGlyZWN0b3J5KGNvbnN0
IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2b2lkIEFzeW5jRmlsZVN5c3Rl
bUd0azo6Y3JlYXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVudCogY2xpZW50LCBjb25zdCBL
VVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tz
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3Rl
bUd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zOWY1NzM3MDgxY2E2ODRmMDExMzIxYzc1YmE4ZGZlNWRhNjU1YzcxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFt
aWRvd0BnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICog
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmICBBc3luY0Zp
bGVTeXN0ZW1HdGtfaAorI2RlZmluZSAgQXN5bmNGaWxlU3lzdGVtR3RrX2gKKworI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzOworCitjbGFzcyBBc3luY0ZpbGVTeXN0ZW1HdGsgOiBwdWJsaWMg
QXN5bmNGaWxlU3lzdGVtIHsKK3B1YmxpYzoKKyAgICBBc3luY0ZpbGVTeXN0ZW1HdGsoKTsKKyAg
ICB2aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1HdGsoKTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3Zl
KGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eShjb25zdCBLVVJMJiBzb3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
cz4pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVSZWN1cnNpdmVseShjb25zdCBLVVJMJiBwYXRo
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9p
ZCByZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRmlsZShjb25zdCBLVVJMJiBw
YXRoLCBib29sIGV4Y2x1c2l2ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIGJv
b2wgZXhjbHVzaXZlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworICAg
IHZpcnR1YWwgdm9pZCBmaWxlRXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGRpcmVjdG9yeUV4aXN0
cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
OworICAgIHZpcnR1YWwgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vICBBc3luY0ZpbGVTeXN0ZW1HdGtfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2M2I2Y2Y4ZjJlZGM1OTk4ZjE1
YTAxYWViYzU3MjJlMzU5NjY0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5jcHAKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRH
dGsuaCIKKworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIK
KyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRmls
ZUxpc3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgorI2luY2x1ZGUgIlJl
bmRlckltYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2VudW0gQ2xpcGJvYXJkRGF0YVR5cGUgeworICAgIENsaXBib2FyZERhdGFU
eXBlVGV4dCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCwKKyAgICBDbGlwYm9hcmREYXRh
VHlwZVVSSUxpc3QsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsCisgICAgQ2xpcGJvYXJkRGF0
YVR5cGVJbWFnZSwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVua25vd24KK307CisKK1Bhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBDbGlwYm9hcmRHdGs6
OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSwgZnJhbWUpOworfQorCitQ
YXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCit7CisgICAgcmV0
dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgp
LCBEcmFnQW5kRHJvcCwgZnJhbWUpOworfQorCitDbGlwYm9hcmRHdGs6OkNsaXBib2FyZEd0ayhD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJh
bWUqIGZyYW1lKQorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBhc3RlKQorICAgICwg
bV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpKQorICAg
ICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQorICAgICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKwor
Q2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwg
UGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBi
b2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIGNsaXBib2Fy
ZFR5cGUpCisgICAgLCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkKKyAgICAsIG1fY2xpcGJvYXJk
KDApCisgICAgLCBtX2ZyYW1lKGZyYW1lKQoreworfQorCitDbGlwYm9hcmRHdGs6On5DbGlwYm9h
cmRHdGsoKQoreworICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAgICAgbV9kcmFnSW1hZ2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKK30KKworc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGRhdGFPYmpl
Y3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3VHlwZSkKK3sKKyAg
ICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKKworICAgIC8vIFR3byBz
cGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5CisgICAgaWYgKHR5cGUgPT0gIlRleHQi
IHx8IHR5cGUgPT0gInRleHQiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0
OworICAgIGlmICh0eXBlID09ICJVUkwiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5
cGVVUkw7CisKKyAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFueSB0cmFpbGluZyBj
aGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKKyAgICAvLyBVbmljb2RlLCB3aGljaCBlbmNhcHN1bGF0
ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCisgICAgaWYgKHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5
cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlVGV4dDsKKyAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlLnN0YXJ0c1dp
dGgoInRleHQvaHRtbDsiKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTWFya3Vw
OworICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlzdCIgfHwg
dHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQorICAgICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVVUklMaXN0OworCisgICAgLy8gTm90IGEga25vd24gdHlwZSwgc28ganVzdCBk
ZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCisgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlVW5rbm93bjsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGVTdHJpbmcpCit7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRh
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0
YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CisgICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZVVSTDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclVSSUxpc3Qo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cDoKKyAg
ICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhck1hcmt1cCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlVGV4dDoKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclRl
eHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgor
ICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFySW1hZ2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246CisgICAgICAgIG1fZGF0YU9iamVjdC0+Y2xl
YXJBbGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1fY2xpcGJvYXJkKQor
ICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0
ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKK30KKworCit2b2lkIENsaXBib2FyZEd0
azo6Y2xlYXJBbGxEYXRhKCkKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvIG5vdCBjbGVhciBmaWxlbmFtZXMu
IEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QKKyAgICAvLyBk
b2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJh
Zywgc28gdGhlIHR5cGVzCisgICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBzdGlsbCBub3Qg
YmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQgCisgICAgLy8gc3Rp
bGwgY29udGFpbiB0aGUgIkZpbGVzIiBzdHJpbmcgaWYgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQg
aW4gdGhlIGRyYWcpLiIKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVz
KCk7CisKKyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9h
cmQpOworfQorCitTdHJpbmcgQ2xpcGJvYXJkR3RrOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZVN0cmluZykgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUg
fHwgIW1fZGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKG1f
Y2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CisKKyAgICBDbGlwYm9h
cmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlw
ZVN0cmluZyk7CisgICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0KQorICAg
ICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7CisgICAgaWYgKHR5cGUgPT0gQ2xp
cGJvYXJkRGF0YVR5cGVVUkwpCisgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVybCgpOwor
ICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlTWFya3VwKQorICAgICAgICByZXR1cm4g
bV9kYXRhT2JqZWN0LT5tYXJrdXAoKTsKKyAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlw
ZVRleHQpCisgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRleHQoKTsKKworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKKyAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5
cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7CisgICAgaWYgKHR5cGUgPT0gQ2xp
cGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsK
KyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOworICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAp
IHsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0YSk7CisgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQp
IHsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEpOworICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworTGlzdEhhc2hTZXQ8
U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJs
ZSkKKyAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKworICAgIGlmIChtX2Ns
aXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOworCisgICAgTGlzdEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlczsKKyAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKKyAg
ICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHR5cGVzLmFkZCgiVGV4dCIp
OworICAgICAgICB0eXBlcy5hZGQoInRleHQiKTsKKyAgICB9CisKKyAgICBpZiAobV9kYXRhT2Jq
ZWN0LT5oYXNNYXJrdXAoKSkKKyAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKKworICAg
IGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgeworICAgICAgICB0eXBlcy5hZGQoInRl
eHQvdXJpLWxpc3QiKTsKKyAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsKKyAgICB9CisKKyAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMoKSkKKyAgICAgICAgdHlwZXMuYWRkKCJGaWxl
cyIpOworCisgICAgcmV0dXJuIHR5cGVzOworfQorCitQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlw
Ym9hcmRHdGs6OmZpbGVzKCkgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
UmVhZGFibGUpCisgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CisKKyAgICBpZiAo
bV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKKworICAgIFJlZlB0
cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGZp
bGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lc1tpXSwgRmlsZTo6QWxsQ29udGVu
dFR5cGVzKSk7CisgICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKK30KKwordm9pZCBDbGlw
Ym9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50
JiBsb2NhdGlvbikKK3sKKyAgICBzZXREcmFnSW1hZ2UoaW1hZ2UsIDAsIGxvY2F0aW9uKTsKK30K
Kwordm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSogZWxlbWVudCwg
Y29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIHNldERyYWdJbWFnZSgwLCBlbGVtZW50
LCBsb2NhdGlvbik7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqIGltYWdlLCBOb2RlKiBlbGVtZW50LCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCit7
CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZEltYWdlV3JpdGFibGUgJiYgcG9saWN5KCkg
IT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2RyYWdJ
bWFnZSkKKyAgICAgICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBtX2Ry
YWdJbWFnZSA9IGltYWdlOworICAgIGlmIChtX2RyYWdJbWFnZSkKKyAgICAgICAgbV9kcmFnSW1h
Z2UtPmFkZENsaWVudCh0aGlzKTsKKworICAgIG1fZHJhZ0xvYyA9IGxvY2F0aW9uOworICAgIG1f
ZHJhZ0ltYWdlRWxlbWVudCA9IGVsZW1lbnQ7Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRH
dGs6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgbG9jYXRpb24pIGNvbnN0Cit7CisgICAgbG9j
YXRpb24gPSBtX2RyYWdMb2M7CisKKyAgICBpZiAobV9kcmFnSW1hZ2UpCisgICAgICAgIHJldHVy
biBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdlKCkpOworICAgIGlm
IChtX2RyYWdJbWFnZUVsZW1lbnQgJiYgbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWUt
Pm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOworCisgICAgcmV0dXJuIDA7IC8v
IFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBkcmFnIGltYWdl
LCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KK30KKworc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNo
ZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIEF0dGVtcHQgdG8gcHVsbCBDYWNo
ZWRJbWFnZSBmcm9tIGVsZW1lbnQKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJJ
bWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKKyAgICBp
ZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9j
Y3VycmVkKCkpCisgICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKworICAgIHJl
dHVybiAwOworfQorCit2b2lkIENsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdl
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwg
RnJhbWUqIGZyYW1lKQoreworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOwor
ICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRl
Tm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKKworICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGdl
dENhY2hlZEltYWdlKGVsZW1lbnQpOworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc0xvYWRl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0g
YWRvcHRHUmVmKGltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5n
ZXRHZGtQaXhidWYoKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKK30KKwordm9pZCBDbGlwYm9h
cmRHdGs6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJh
bWUqKQoreworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOworICAgIGlmICht
X2NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Cit9CisKK3ZvaWQg
Q2xpcGJvYXJkR3RrOjp3cml0ZVJhbmdlKFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lKQorewor
ICAgIEFTU0VSVChyYW5nZSk7CisKKyAgICBtX2RhdGFPYmplY3QtPnNldFRleHQoZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3RlZFRleHQoKSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3Jl
YXRlTWFya3VwKHJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2
ZU5vbkxvY2FsVVJMcykpOworCisgICAgaWYgKG1fY2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRl
bnRzKG1fY2xpcGJvYXJkKTsKK30KKwordm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBtX2RhdGFPYmplY3QtPnNldFRleHQodGV4dCk7
CisKKyAgICBpZiAobV9jbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQp
OworfQorCitib29sIENsaXBib2FyZEd0azo6aGFzRGF0YSgpCit7CisgICAgaWYgKG1fY2xpcGJv
YXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CisKKyAgICByZXR1cm4gbV9kYXRh
T2JqZWN0LT5oYXNUZXh0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKQorICAgICAgICB8
fCBtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSB8fCBtX2RhdGFPYmplY3QtPmhhc0ltYWdlKCk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlOWQ2M2Nl
NGYyY2U4YmMxMTJkMGYyMDkzZWU1ODgzOTMyMjhlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ2xpcGJvYXJkR3RrX2gKKyNkZWZpbmUgQ2xpcGJvYXJkR3RrX2gKKwor
I2luY2x1ZGUgIkNhY2hlZEltYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisj
aW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgQ2FjaGVkSW1hZ2U7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGFzdGVib2FyZEhl
bHBlcjsKKworICAgIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRy
YWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKKyAgICAvLyBDcmVhdGVkIGZyb20gdGhlIEV2ZW50
SGFuZGxlckd0ayB0byBiZSB1c2VkIGJ5IHRoZSBkb20KKyAgICBjbGFzcyBDbGlwYm9hcmRHdGsg
OiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgeworICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENsaXBib2FyZEd0az4gY3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ks
IEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkR3RrKHBvbGljeSwgY2xpcGJvYXJk
LCBmcmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkR3RrPiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgUGFzc1JlZlB0cjxE
YXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIEZy
YW1lKiBmcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
bGlwYm9hcmRHdGsocG9saWN5LCBkYXRhT2JqZWN0LCBjbGlwYm9hcmRUeXBlLCBmcmFtZSkpOwor
ICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfkNsaXBib2FyZEd0aygpOworCisgICAgICAgIHZv
aWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGNsZWFyQWxsRGF0YSgp
OworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIHZp
cnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRE
cmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIHNl
dERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBvaW50Jik7CisgICAgICAgIHZvaWQg
c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgTm9kZSosIGNvbnN0IEludFBvaW50Jik7CisKKyAg
ICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIHZpcnR1
YWwgYm9vbCBoYXNEYXRhKCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBk
YXRhT2JqZWN0KCkgeyByZXR1cm4gbV9kYXRhT2JqZWN0OyB9CisgICAgICAgIEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkKCkgeyByZXR1cm4gbV9jbGlwYm9hcmQ7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIENsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEd0a0NsaXBib2FyZCos
IEZyYW1lKik7CisgICAgICAgIENsaXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIFBh
c3NSZWZQdHI8RGF0YU9iamVjdEd0az4sIENsaXBib2FyZFR5cGUsIEZyYW1lKik7CisKKyAgICAg
ICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IG1fZGF0YU9iamVjdDsKKyAgICAgICAgR3RrQ2xpcGJv
YXJkKiBtX2NsaXBib2FyZDsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGll
c0d0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWZjMGU3NDQ2ZTBlZWRlMTI1YjEwY2E0YTgyZTY5YTdmNjVhMjU1MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3Rr
LmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEg
Uy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09w
ZXJhdGlvbiBjb3JlQWN0aW9uKQoreworICAgIEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uID0gc3Rh
dGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7CisgICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09w
ZXJhdGlvbk5vbmUpCisgICAgICAgIHJldHVybiBnZGtBY3Rpb247CisKKyAgICBpZiAoY29yZUFj
dGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2Fz
dDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBnZGtBY3Rpb24pOworICAgIGlmIChj
b3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAgICAgIGdka0FjdGlvbiA9IHN0YXRp
Y19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTU9WRSB8IGdka0FjdGlvbik7CisgICAg
aWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgZ2RrQWN0aW9uID0g
c3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9MSU5LIHwgZ2RrQWN0aW9uKTsK
KyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQorICAgICAgICBnZGtB
Y3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX1BSSVZBVEUgfCBn
ZGtBY3Rpb24pOworCisgICAgcmV0dXJuIGdka0FjdGlvbjsKK30KKworR2RrRHJhZ0FjdGlvbiBk
cmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlv
bikKK3sKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFj
dGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZ
OworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAgICAgIHJldHVy
biBHREtfQUNUSU9OX01PVkU7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGlu
aykKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKKyAgICBpZiAoY29yZUFjdGlvbiAm
IERyYWdPcGVyYXRpb25Qcml2YXRlKQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRF
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKK30KKworRHJhZ09w
ZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0
aW9uKQoreworICAgIC8vIFdlIGhhdmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRp
b25FdmVyeSBvdGhlciB0aGFuCisgICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUg
ZmxhZ3MgYXJlIG9uLgorICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkgJiYgZ2Rr
QWN0aW9uICYgR0RLX0FDVElPTl9NT1ZFCisgICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJ
T05fTElOSyAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZBVEUpCisgICAgICAgIHJldHVy
biBEcmFnT3BlcmF0aW9uRXZlcnk7CisKKyAgICB1bnNpZ25lZCBpbnQgYWN0aW9uID0gRHJhZ09w
ZXJhdGlvbk5vbmU7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWSkKKyAgICAg
ICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Db3B5OworICAgIGlmIChnZGtBY3Rpb24gJiBHREtf
QUNUSU9OX01PVkUpCisgICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uTW92ZTsKKyAgICBp
ZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LKQorICAgICAgICBhY3Rpb24gfD0gRHJhZ09w
ZXJhdGlvbkxpbms7CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKKyAg
ICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Qcml2YXRlOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxEcmFnT3BlcmF0aW9uPihhY3Rpb24pOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmY2MzQ2OWUyYjhkZTQ1YzAx
Nzc3NWYwYjQyOTJiZDZiYWM0NzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2lmbmRlZiBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAorI2RlZmluZSBDbGlwYm9hcmRV
dGlsaXRpZXNHdGtfaAorCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKKyNpbmNsdWRlIDxnZGsv
Z2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0
aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsKK0dka0RyYWdBY3Rpb24gZHJhZ09w
ZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9uKTsKK0RyYWdPcGVyYXRp
b24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFnQWN0aW9uKTsKKworfQorCisj
ZW5kaWYgLy8gQ2xpcGJvYXJkVXRpbGl0aWVzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbXBv
c2l0aW9uUmVzdWx0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0NWYyM2JiNTk2ZThjMmVhZWIzMjk3MTBkZjQ4
ZTQ3NGM3ZWM0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbXBv
c2l0aW9uUmVzdWx0cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb21wb3NpdGlvblJlc3VsdHNfaAorI2Rl
ZmluZSBDb21wb3NpdGlvblJlc3VsdHNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENvbXBvc2l0aW9uUmVzdWx0cyB7
CisgICAgQ29tcG9zaXRpb25SZXN1bHRzKCkKKyAgICAgICAgOiBhc3NvY2lhdGVkV2l0aFBlbmRp
bmdDb21wb3NpdGlvblVwZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgQ29tcG9zaXRp
b25SZXN1bHRzKFN0cmluZyBzaW1wbGVTdHJpbmcpCisgICAgICAgIDogc2ltcGxlU3RyaW5nKHNp
bXBsZVN0cmluZykKKyAgICAgICAgLCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVw
ZGF0ZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgZW51bSBSZXN1bHRzSW5kaWNhdG9yIHsg
V2lsbFNlbmRDb21wb3NpdGlvblJlc3VsdHNTb29uIH07CisgICAgQ29tcG9zaXRpb25SZXN1bHRz
KFJlc3VsdHNJbmRpY2F0b3IpCisgICAgICAgIDogYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9z
aXRpb25VcGRhdGUodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjb21wb3NpdGlvblVw
ZGF0ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc29jaWF0ZWRXaXRoUGVuZGlu
Z0NvbXBvc2l0aW9uVXBkYXRlOworICAgIH0KKworICAgIC8vIFNvbWUgc2ltcGxlIGlucHV0IG1l
dGhvZHMgcmV0dXJuIGEgc3RyaW5nIGZvciBhbGwga2V5Ym9hcmQgZXZlbnRzLiBUaGlzCisgICAg
Ly8gdmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiB0aGUga2V5Y29kZS4KKyAgICBTdHJpbmcgc2ltcGxlU3RyaW5nOworCisgICAgYm9vbCBhc3Nv
Y2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKK307CisKK30KKworI2VuZGlmIC8v
IENvbXBvc2l0aW9uUmVzdWx0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0Nv
bnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhjMDAyYzRkOWZkNzgyZjkyNzA0YzQ5NzZjNDM3ZWExZjllNWRkYjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcApA
QCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRleHRNZW51OjpDb250ZXh0
TWVudSgpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVf
bmV3KCkpOworfQorCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51
RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorewor
fQorCitDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pKTsKK30KKwordm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250
ZXh0TWVudUl0ZW0mIGl0ZW0pCit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7
CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gcGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChpdGVt
LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAgIEFTU0VSVChwbGF0Zm9ybUl0ZW0p
OworCisgICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBs
YXRmb3JtSXRlbS5nZXQoKSkpCisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIocGFyZW50KSwgcGxhdGZvcm1JdGVtLmdldCgpKTsKKworICAgIGd0a19tZW51X3NoZWxs
X2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBwbGF0Zm9ybUl0
ZW0uZ2V0KCkpOworICAgIGd0a193aWRnZXRfc2hvdyhwbGF0Zm9ybUl0ZW0uZ2V0KCkpOworfQor
Cit2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURl
c2NyaXB0aW9uIG1lbnUpCit7CisgICAgQVNTRVJUKG1lbnUpOworICAgIGlmIChtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPT0gbWVudSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikpOworCisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsK
K30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisK
K1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxlYXNlUGxhdGZvcm1EZXNj
cmlwdGlvbigpCit7CisgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBt
X3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gMDsKKwor
ICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKwordW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1D
b3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7CisKKyAg
ICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtf
Q09OVEFJTkVSKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpKTsKKyAgICByZXR1cm4gZ19saXN0X2xl
bmd0aChjaGlsZHJlbi5nZXQoKSk7Cit9CisKK1ZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IGNvbnRl
eHRNZW51SXRlbVZlY3Rvcihjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQorewor
ICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0+IG1lbnVJdGVtVmVjdG9yOworCisgICAgR093blB0
cjxHTGlzdD4gY2hpbGRyZW4oZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5F
UihtZW51KSkpOworICAgIGludCBpdGVtQ291bnQgPSBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdl
dCgpKTsKKyAgICBtZW51SXRlbVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoaXRlbUNvdW50KTsKKwor
ICAgIGZvciAoR0xpc3QqIGl0ZW0gPSBjaGlsZHJlbi5nZXQoKTsgaXRlbTsgaXRlbSA9IGdfbGlz
dF9uZXh0KGl0ZW0pKSB7CisgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8
R3RrV2lkZ2V0Kj4oaXRlbS0+ZGF0YSk7CisgICAgICAgIGlmICghR1RLX0lTX01FTlVfSVRFTSh3
aWRnZXQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1lbnVJdGVtVmVjdG9yLmFw
cGVuZChHVEtfTUVOVV9JVEVNKHdpZGdldCkpOworICAgIH0KKworICAgIHJldHVybiBtZW51SXRl
bVZlY3RvcjsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24oVmVjdG9yPENvbnRleHRNZW51SXRlbT4mIHN1Yk1lbnVJdGVtcykKK3sKKyAgICBHdGtN
ZW51KiBtZW51ID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3ViTWVudUl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEd0a1dpZGdldCog
cGxhdGZvcm1JdGVtID0gR1RLX1dJREdFVChzdWJNZW51SXRlbXNbaV0ucmVsZWFzZVBsYXRmb3Jt
RGVzY3JpcHRpb24oKSk7CisgICAgICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9T
SEVMTChtZW51KSwgcGxhdGZvcm1JdGVtKTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93KHBsYXRm
b3JtSXRlbSk7CisgICAgfQorICAgIHJldHVybiBtZW51OworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVJdGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVt
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNzBiNWJlNmJkZjBiZDljZmM3NzhjYTIwNWRiMjM4NzU1YzMx
ZTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUl0
ZW1HdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKKworI2lu
Y2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKKyNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04gIndlYmtpdC1jb250ZXh0
LW1lbnUiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0
b2NrSURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgQ29udGV4dE1lbnVBY3Rpb24mIGFjdGlv
bikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weUxpbmtUb0NsaXBib2FyZDoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFn
ZVRvQ2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1Rv
Q2xpcGJvYXJkOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19DT1BZOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJ
bk5ld1dpbmRvdzoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2lu
ZG93OgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Cisg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19PUEVOOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRMaW5rVG9EaXNrOgorICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRv
RGlzazoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TQVZFOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnR29CYWNrOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7CisgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfR09fRk9SV0FSRDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAg
IHJldHVybiBHVEtfU1RPQ0tfU1RPUDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9h
ZDoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOworICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ3V0OgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NVVDsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1Bhc3RlOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1BBU1RFOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX0RFTEVURTsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAg
ICAgcmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdJZ25vcmVTcGVsbGluZzoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19OTzsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgIHJldHVybiBH
VEtfU1RPQ0tfT0s7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKKyAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2VhcmNoSW5TcG90bGlnaHQ6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRklORDsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19GSU5EOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBw
bGljYXRpb246CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKKyAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVBERlpvb21JbjoKKyAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX0lOOwor
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19aT09NX09VVDsKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9TaXplOgorICAg
ICAgICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklUOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
UERGTmV4dFBhZ2U6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKKyAgICBj
YXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKKyAgICAgICAgcmV0dXJuIEdUS19T
VE9DS19HT19CQUNLOworICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkKKyAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09Q
RU47CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgorICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Rm9udE1lbnU6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7CisgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
U0VMRUNUX0ZPTlQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOgorICAgICAgICBy
ZXR1cm4gR1RLX1NUT0NLX0JPTEQ7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6
CisgICAgICAgIHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOworICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnVW5kZXJsaW5lOgorICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVSTElORTsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfU0VMRUNUX0NPTE9SOworICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9sczoKKyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoK
KyAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAg
ICAgICAvLyBObyBpY29uIGZvciB0aGlzLgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgorICAgICAgICByZXR1cm4gR1RL
X1NUT0NLX0ZVTExTQ1JFRU47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitzdGF0aWMgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGNyZWF0ZVBsYXRmb3Jt
TWVudUl0ZW1EZXNjcmlwdGlvbihDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51
QWN0aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNo
ZWNrZWQpCit7CisgICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKKyAgICAgICAgcmV0dXJu
IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOworCisgICAgR093
blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigiY29udGV4dC1tZW51LWFjdGlv
bi0lZCIsIGFjdGlvbikpOworICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBwbGF0Zm9ybUFjdGlvbjsK
KworICAgIGlmICh0eXBlID09IENoZWNrYWJsZUFjdGlvblR5cGUpIHsKKyAgICAgICAgcGxhdGZv
cm1BY3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoYWN0
aW9uTmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250
ZXh0TWVudUFjdGlvbihhY3Rpb24pKSkpOworICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRf
YWN0aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9uLmdldCgpKSwgY2hlY2tlZCk7
CisgICAgfSBlbHNlCisgICAgICAgIHBsYXRmb3JtQWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rp
b25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2Nr
SURGcm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpOworICAgIGd0a19hY3Rpb25fc2V0X3Nl
bnNpdGl2ZShwbGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5hYmxlZCk7CisKKyAgICBHdGtNZW51SXRl
bSogaXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKHBsYXRm
b3JtQWN0aW9uLmdldCgpKSk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoaXRlbSks
IFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7CisK
KyAgICByZXR1cm4gaXRlbTsKK30KKworLy8gRXh0cmFjdCB0aGUgQWN0aW9uVHlwZSBmcm9tIHRo
ZSBtZW51IGl0ZW0KK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVu
dUl0ZW1EZXNjcmlwdGlvbiBpdGVtKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKGl0ZW0p
Cit7CisgICAgLy8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJlbHMgaW4gY29udGV4dCBtZW51IGl0ZW1z
LgorICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKCFhY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3RrX2FjdGlvbl9nZXRfYWNjZWxfcGF0aChh
Y3Rpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIGNoaWxkID0gZ3RrX2Jp
bl9nZXRfY2hpbGQoR1RLX0JJTihpdGVtKSk7CisgICAgaWYgKEdUS19JU19BQ0NFTF9MQUJFTChj
aGlsZCkpCisgICAgICAgIGd0a19hY2NlbF9sYWJlbF9zZXRfYWNjZWxfY2xvc3VyZShHVEtfQUND
RUxfTEFCRUwoY2hpbGQpLCAwKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0
ZW0oQ29udGV4dE1lbnUqIHN1Yk1lbnUpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0g
R1RLX01FTlVfSVRFTShndGtfbWVudV9pdGVtX25ldygpKTsKKyAgICBpZiAoc3ViTWVudSkKKyAg
ICAgICAgc2V0U3ViTWVudShzdWJNZW51KTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0
TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQoreworICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbih0
eXBlLCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7CisgICAgaWYgKHN1Yk1lbnUpCisgICAg
ICAgIHNldFN1Yk1lbnUoc3ViTWVudSk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1l
bnVJdGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tlZCkKK3sKKyAg
ICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRp
b24odHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7Cit9CisKK0NvbnRleHRN
ZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQsIFZlY3RvcjxDb250ZXh0
TWVudUl0ZW0+JiBzdWJNZW51SXRlbXMpCit7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0g
Y3JlYXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKFN1Ym1lbnVUeXBlLCBhY3Rpb24sIHRp
dGxlLCBlbmFibGVkLCBjaGVja2VkKTsKKyAgICBzZXRTdWJNZW51KHN1Yk1lbnVJdGVtcyk7Cit9
CisKK0NvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCit7Cit9CisKK1BsYXRmb3Jt
TWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2Ny
aXB0aW9uKCkKK3sKKyAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSAwOworICAgIHJldHVybiBwbGF0Zm9ybURlc2NyaXB0aW9uOworfQorCitDb250ZXh0TWVu
dUl0ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKEdUS19J
U19TRVBBUkFUT1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAgIHJl
dHVybiBTZXBhcmF0b3JUeXBlOworICAgIGlmIChHVEtfSVNfQ0hFQ0tfTUVOVV9JVEVNKG1fcGxh
dGZvcm1EZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBDaGVja2FibGVBY3Rpb25UeXBlOwor
ICAgIGlmIChndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNjcmlwdGlvbikp
CisgICAgICAgIHJldHVybiBTdWJtZW51VHlwZTsKKyAgICByZXR1cm4gQWN0aW9uVHlwZTsKK30K
Kwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBl
KQoreworICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCisgICAgICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkp
OworfQorCitDb250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPihHUE9JTlRFUl9U
T19JTlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwg
V0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04pKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVt
OjpzZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQoreworICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJVF9DT05URVhUX01F
TlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Cit9CisKK1N0cmluZyBDb250ZXh0
TWVudUl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0Fj
dGlvbigpOworICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZyb21VVEY4KGd0a19hY3Rpb25f
Z2V0X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVt
OjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gZ3RrQWN0aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRf
bGFiZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKK30KKworUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAoreworICAg
IEd0a1dpZGdldCogc3ViTWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUobV9wbGF0Zm9y
bURlc2NyaXB0aW9uKTsKKyAgICByZXR1cm4gc3ViTWVudSA/IEdUS19NRU5VKHN1Yk1lbnUpIDog
MDsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dE1lbnUqIG1l
bnUpCit7CisgICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRp
b24sIEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSkpOworfQor
Cit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4dE1lbnVJdGVt
PiYgc3ViTWVudUl0ZW1zKQoreworICAgIENvbnRleHRNZW51IG1lbnUocGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24oc3ViTWVudUl0ZW1zKSk7CisgICAgc2V0U3ViTWVudSgmbWVudSk7Cit9CisKK3Zv
aWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2spCit7CisgICAg
R3RrQWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19J
U19UT0dHTEVfQUNUSU9OKGFjdGlvbikpCisgICAgICAgIGd0a190b2dnbGVfYWN0aW9uX3NldF9h
Y3RpdmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwgc2hvdWxkQ2hlY2spOworfQorCitib29s
IENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0Cit7CisgICAgR3RrQWN0aW9uKiBhY3Rp
b24gPSBndGtBY3Rpb24oKTsKKyAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dHTEVfQUNUSU9O
KGFjdGlvbikpCisgICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdU
S19UT0dHTEVfQUNUSU9OKGFjdGlvbikpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBD
b250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAoreworICAgIEd0a0FjdGlvbiogYWN0aW9u
ID0gZ3RrQWN0aW9uKCk7CisgICAgcmV0dXJuIGFjdGlvbiA/IGd0a19hY3Rpb25fZ2V0X3NlbnNp
dGl2ZShhY3Rpb24pIDogZmFsc2U7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFi
bGVkKGJvb2wgc2hvdWxkRW5hYmxlKQoreworICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0
aW9uKCk7CisgICAgaWYgKGFjdGlvbikKKyAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZl
KGFjdGlvbiwgc2hvdWxkRW5hYmxlKTsKK30KKworR3RrQWN0aW9uKiBDb250ZXh0TWVudUl0ZW06
Omd0a0FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGd0a19hY3RpdmF0YWJsZV9nZXRfcmVs
YXRlZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOworfQor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvQ3Vyc29y
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZmI5MDVhOTY0ZGU3NjIzNDIwOWMyZjVjOTFjNmNkZjc5MDU0
MjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3Bw
CkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4g
RHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
MiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vyc29yR3RrLmgiCisjaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1
ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vy
c29yVHlwZSBjdXJzb3JUeXBlKQoreworICAgIEN1c3RvbUN1cnNvciBjdXJzb3IgPSBDdXN0b21D
dXJzb3JzW2N1cnNvclR5cGVdOworICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjID0gYWRvcHRHUmVm
KGdka19jdXJzb3JfbmV3X2Zyb21fbmFtZShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBjdXJz
b3IubmFtZSkpOworICAgIGlmIChjKQorICAgICAgICByZXR1cm4gYzsKKworICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IHNvdXJjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX2Zvcl9kYXRhKGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGN1cnNvci5iaXRzKSwgQ0FJ
Uk9fRk9STUFUX0ExLCAzMiwgMzIsIDQpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBt
YXNrID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY29uc3Rf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oY3Vyc29yLm1hc2tfYml0cyksIENBSVJPX0ZPUk1BVF9BMSwg
MzIsIDMyLCA0KSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0
UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BMSwgMzIsIDMyKSk7
CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2Uu
Z2V0KCkpKTsKKworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc291cmNl
LmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19tYXNrX3N1cmZhY2UoY3IuZ2V0KCksIG1hc2suZ2V0
KCksIDAsIDApOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihn
ZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZS5nZXQoKSwgMCwgMCwgMzIsIDMyKSk7
CisgICAgcmV0dXJuIGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlz
cGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYuZ2V0KCksIGN1cnNvci5ob3RfeCwgY3Vyc29yLmhv
dF95KSk7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdka0N1cnNvcj4gY3JlYXRlQ3VzdG9tQ3Vyc29y
KEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCit7CisgICAgSW50UG9pbnQg
ZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNwb3QoaW1hZ2UsIGhvdFNwb3QpOworICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1
ZigpKTsKKyAgICByZXR1cm4gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1Zi5nZXQoKSwgZWZmZWN0aXZlSG90U3BvdC54
KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgpKSk7Cit9CisKK3ZvaWQgQ3Vyc29yOjplbnN1cmVQbGF0
Zm9ybUN1cnNvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1DdXJzb3IgfHwgbV90eXBl
ID09IEN1cnNvcjo6UG9pbnRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChtX3R5
cGUpIHsKKyAgICBjYXNlIEN1cnNvcjo6UG9pbnRlcjoKKyAgICAgICAgLy8gQSBudWxsIEdka0N1
cnNvciBpcyB0aGUgZGVmYXVsdCBjdXJzb3IgZm9yIHRoZSB3aW5kb3cuCisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q3Jvc3M6
CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RL
X0NST1NTKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgorICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19IQU5EMikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1hURVJNKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpXYWl0OgorICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19XQVRDSCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEN1cnNvcjo6SGVscDoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFk
b3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJST1cpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDdXJzb3I6Ok1vdmU6CisgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5p
bmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXco
R0RLX0ZMRVVSKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpFYXN0UmVzaXpl
OgorICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUklHSFRfU0lERSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoUGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vy
c29yX25ldyhHREtfVE9QX1NJREUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6
Ok5vcnRoRWFzdFJlc2l6ZToKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfVE9Q
X1JJR0hUX0NPUk5FUikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Tm9ydGhX
ZXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nOgorICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19UT1BfTEVGVF9D
T1JORVIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgor
ICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9TSURFKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6
OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYo
Z2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9SSUdIVF9DT1JORVIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAgICBjYXNlIEN1cnNvcjo6U291
dGhXZXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ldyhHREtfQk9UVE9NX0xFRlRfQ09STkVSKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRv
cHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDdXJzb3I6Ok5vcnRoU291dGhSZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9URUUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgorICAgIGNhc2UgQ3Vyc29yOjpX
ZXN0UGFubmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vy
c29yX25ldyhHREtfTEVGVF9TSURFKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29y
OjpOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemU6CisgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFNv
dXRoRWFzdFJlc2l6ZToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ldyhHREtfU0laSU5HKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ3Vyc29y
OjpDb2x1bW5SZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2Rr
X2N1cnNvcl9uZXcoR0RLX1NCX0hfRE9VQkxFX0FSUk9XKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9w
dEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NCX1ZfRE9VQkxFX0FSUk9XKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ3Vyc29yOjpWZXJ0aWNhbFRleHQ6CisgICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JWZXJ0aWNhbFRleHQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEN1cnNvcjo6Q2VsbDoKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfUExVUykpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEN1cnNvcjo6Q29udGV4dE1lbnU6CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JDb250ZXh0TWVudSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ3Vyc29yOjpBbGlhczoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckFsaWFzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDdXJzb3I6OlByb2dyZXNzOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
Y3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3MpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEN1cnNvcjo6Tm9Ecm9wOgorICAgIGNhc2UgQ3Vyc29yOjpOb3RBbGxvd2VkOgor
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29y
Tm9Ecm9wKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6OkNvcHk6CisgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JDb3B5KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JOb25lKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDdXJzb3I6Olpvb21JbjoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclpvb21Jbik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
Y3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yWm9vbU91dCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ3Vyc29yOjpHcmFiOgorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRl
TmFtZWRDdXJzb3IoQ3VzdG9tQ3Vyc29yR3JhYik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q3Vyc29yOjpHcmFiYmluZzoKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVk
Q3Vyc29yKEN1c3RvbUN1cnNvckdyYWJiaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
dXJzb3I6OkN1c3RvbToKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZUN1c3RvbUN1
cnNvcihtX2ltYWdlLmdldCgpLCBtX2hvdFNwb3QpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBtX3R5cGUob3Ro
ZXIubV90eXBlKQorICAgICwgbV9pbWFnZShvdGhlci5tX2ltYWdlKQorICAgICwgbV9ob3RTcG90
KG90aGVyLm1faG90U3BvdCkKKyAgICAsIG1fcGxhdGZvcm1DdXJzb3Iob3RoZXIubV9wbGF0Zm9y
bUN1cnNvcikKK3sKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3Im
IG90aGVyKQoreworICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZTsKKyAgICBtX2ltYWdlID0gb3Ro
ZXIubV9pbWFnZTsKKyAgICBtX2hvdFNwb3QgPSBvdGhlci5tX2hvdFNwb3Q7CisgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitDdXJzb3I6On5DdXJzb3IoKQoreworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0N1cnNvckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41Njg5MTliYTMzNWEyYWU1NGYyOGE0NjE5MDU4M2IzYTRiYTI0NjYwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaApAQCAtMCwwICsx
LDM4MyBAQAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjog
TVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmls
ZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAx
LjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNv
ZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBM
aWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNvZGUuCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBU
aW0gQ29wcGVyZmllbGQuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVs
b3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAxCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgIFRpbSBDb3Bw
ZXJmaWVsZCA8dGltZWNvcEBuZXR3b3JrLmVtYWlsLm5lLmpwPgorICogICBDaHJpc3RpYW4gRHl3
YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVp
dGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0
aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAor
ICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQ
TCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5
b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWly
ZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBw
cm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwg
b3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKwor
I2lmbmRlZiBDdXJzb3JHdGtfaAorI2RlZmluZSBDdXJzb3JHdGtfaAorCisjaW5jbHVkZSAiQ3Vy
c29yLmgiCisKKy8qCisgVGhlc2UgY3Vyc29ycyBhcmUgY29waWVkIGZyb20gTW96aWxsYSBjb2Rl
OgorICBodHRwOi8vbHhyLm1vemlsbGEub3JnL21vemlsbGExLjgvc291cmNlL3dpZGdldC9zcmMv
Z3RrMi9uc0d0a0N1cnNvcnMuaAorKi8KKworLyogTU9aX0NVUlNPUl9WRVJUSUNBTF9URVhUICov
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4dF9iaXRzW10gPSB7
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDIs
IDB4NDAsIDB4MDAsIDB4MDAsCisgIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2Ys
IDB4MDAsIDB4MDAsIDB4MDYsIDB4NjAsIDB4MDAsIDB4MDAsCisgIDB4MDIsIDB4NDAsIDB4MDAs
IDB4MDAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3ZlcnRpY2FsX3RleHRfbWFz
a19iaXRzW10gPSB7CisgIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAs
IDB4MDAsIDB4MGYsIDB4ZjAsIDB4MDAsIDB4MDAsCisgIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAs
IDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisgIDB4MGYs
IDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAgfTsKKworLyogTU9aX0NVUlNPUl9DT05URVhUX01FTlUgKi8KK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgz
YywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgw
MCwgMHgwMCwgMHgwMCwgMHhmYywgMHhmZCwgMHgwMCwgMHgwMCwKKyAgMHhmYywgMHhmZiwgMHgw
MCwgMHgwMCwgMHg3YywgMHg4NCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmYywgMHgwMCwgMHgwMCwK
KyAgMHhjNCwgMHg4NCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmYywgMHgwMCwgMHgwMCwgMHg4MCwg
MHg4NSwgMHgwMCwgMHgwMCwKKyAgMHg4MCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBtb3pfbWVudV9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwg
MHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwg
MHhmZCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwKKyAgMHhmZSwgMHhmZiwg
MHgwMSwgMHgwMCwgMHhmZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMSwgMHgw
MCwKKyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhj
MCwgMHhmZiwgMHgwMSwgMHgwMCwKKyAgMHhjMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhm
ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBN
T1pfQ1VSU09SX0NPUFkgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5X2Jp
dHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgx
YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHg3YywgMHgw
MCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwgMHgwMCwg
MHgwMCwKKyAgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHg3YywgMHgzMCwgMHgwMCwgMHgwMCwg
MHg2YywgMHgzMCwgMHgwMCwgMHgwMCwKKyAgMHhjNCwgMHhmYywgMHgwMCwgMHgwMCwgMHhjMCwg
MHhmYywgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwKKyAgMHg4MCwgMHgzMSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfY29weV9tYXNr
X2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwg
MHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgw
MCwgMHgwMCwKKyAgMHhmZSwgMHgzNywgMHgwMCwgMHgwMCwgMHhmZSwgMHg3YiwgMHgwMCwgMHgw
MCwgMHhmZSwgMHhmYywgMHgwMCwgMHgwMCwKKyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgwMCwgMHhl
NCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHg3
YiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0FMSUFTICovCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBtb3pfYWxpYXNfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAw
eDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAw
LCAweDAwLCAweDAwLAorICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAw
LCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAwLAorICAweGZjLCAweDAzLCAweDAwLCAweDAw
LCAweDdjLCAweGYwLCAweDAwLCAweDAwLCAweDZjLCAweGUwLCAweDAwLCAweDAwLAorICAweGM0
LCAweGYwLCAweDAwLCAweDAwLCAweGMwLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDE5LCAw
eDAwLCAweDAwLAorICAweDgwLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBjaGFyIG1vel9hbGlhc19tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwg
MHgwMCwgMHgwMCwgMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHhmNywgMHgwMCwg
MHgwMCwgMHhmZSwgMHhmYiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhmMCwgMHgwMSwgMHgwMCwKKyAg
MHhlZSwgMHhmOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHhmOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhi
ZiwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOSwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VS
U09SX1pPT01fSU4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX2luX2Jp
dHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgw
MCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwKKyAgMHg2MiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2
MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwOSwgMHgwMCwgMHgwMCwKKyAgMHhmOSwgMHgw
OSwgMHgwMCwgMHgwMCwgMHg2MSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwNCwgMHgwMCwg
MHgwMCwKKyAgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwZiwgMHgwMCwgMHgwMCwg
MHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHg0MCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9pbl9t
YXNrX2JpdHNbXSA9IHsKKyAgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgw
MCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgw
MCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKKyAgMHhm
ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywg
MHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwg
MHgwMCwgMHhmMCwgMHgxYywgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX1pPT01fT1VUICovCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBtb3pfem9vbV9vdXRfYml0c1tdID0geworICAweGYwLCAweDAw
LCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAw
eDAwLAorICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAw
eGY5LCAweDA5LCAweDAwLCAweDAwLAorICAweGY5LCAweDA5LCAweDAwLCAweDAwLCAweDAxLCAw
eDA4LCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLAorICAweDAyLCAweDA0LCAw
eDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAweDAw
LAorICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAw
LCAweGUwLCAweDAwLCAweDAwLAorICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAor
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9tYXNrX2JpdHNbXSA9IHsKKyAgMHhm
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgwMywgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywg
MHgwMCwgMHgwMCwKKyAgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwg
MHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwKKyAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwg
MHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwNywgMHgwMCwgMHgwMCwKKyAgMHhmZSwg
MHgwNywgMHgwMCwgMHgwMCwgMHhmYywgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYywgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Owor
CisvKiBNT1pfQ1VSU09SX05PVF9BTExPV0VEICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh
ciBtb3pfbm90X2FsbG93ZWRfYml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDgwLCAweDFmLCAweDAwLCAweDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLAorICAweGYwLCAw
eGYwLCAweDAwLCAweDAwLCAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAz
LCAweDAwLAorICAweGVjLCAweDAwLCAweDAzLCAweDAwLCAweGNlLCAweDAxLCAweDA3LCAweDAw
LCAweDg2LCAweDAzLCAweDA2LCAweDAwLAorICAweDA2LCAweDA3LCAweDA2LCAweDAwLCAweDA2
LCAweDBlLCAweDA2LCAweDAwLCAweDA2LCAweDFjLCAweDA2LCAweDAwLAorICAweDBlLCAweDM4
LCAweDA3LCAweDAwLCAweDBjLCAweDcwLCAweDAzLCAweDAwLCAweDFjLCAweGUwLCAweDAzLCAw
eDAwLAorICAweDM4LCAweGMwLCAweDAxLCAweDAwLCAweGYwLCAweGYwLCAweDAwLCAweDAwLCAw
eGUwLCAweDdmLCAweDAwLCAweDAwLAorICAweDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1vel9ub3RfYWxsb3dlZF9tYXNrX2JpdHNbXSA9IHsKKyAgMHg4MCwgMHgxZiwgMHgw
MCwgMHgwMCwgMHhlMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwK
KyAgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmZSwg
MHhjMCwgMHgwNywgMHgwMCwKKyAgMHhmZSwgMHg4MSwgMHgwNywgMHgwMCwgMHhmZiwgMHg4Mywg
MHgwZiwgMHgwMCwgMHhjZiwgMHgwNywgMHgwZiwgMHgwMCwKKyAgMHg4ZiwgMHgwZiwgMHgwZiwg
MHgwMCwgMHgwZiwgMHgxZiwgMHgwZiwgMHgwMCwgMHgwZiwgMHgzZSwgMHgwZiwgMHgwMCwKKyAg
MHgxZiwgMHhmYywgMHgwZiwgMHgwMCwgMHgxZSwgMHhmOCwgMHgwNywgMHgwMCwgMHgzZSwgMHhm
MCwgMHgwNywgMHgwMCwKKyAgMHhmYywgMHhmMCwgMHgwMywgMHgwMCwgMHhmOCwgMHhmZiwgMHgw
MSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwKKyAgMHhlMCwgMHg3ZiwgMHgwMCwgMHgw
MCwgMHg4MCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VS
U09SX1NQSU5OSU5HICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfc3Bpbm5pbmdf
Yml0c1tdID0geworICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAw
eDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAorICAweDdjLCAw
eDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAw
LCAweDAwLAorICAweGZjLCAweDNiLCAweDAwLCAweDAwLCAweDdjLCAweDM4LCAweDAwLCAweDAw
LCAweDZjLCAweDU0LCAweDAwLCAweDAwLAorICAweGM0LCAweGRjLCAweDAwLCAweDAwLCAweGMw
LCAweDQ0LCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLAorICAweDgwLCAweDM5
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmlu
Z19tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgxZSwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmZSwgMHgz
YiwgMHgwMCwgMHgwMCwKKyAgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgw
MCwgMHgwMCwgMHhmZSwgMHhmZSwgMHgwMCwgMHgwMCwKKyAgMHhlZSwgMHhmZiwgMHgwMSwgMHgw
MCwgMHhlNCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHg3ZiwgMHgwMCwgMHgwMCwKKyAgMHhj
MCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX05PTkUgKi8KK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIG1vel9ub25lX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBtb3pfbm9uZV9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pf
Q1VSU09SX0hBTkRfR1JBQiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRf
Z3JhYl9iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisgIDB4NjAsIDB4MzksIDB4MDAsIDB4
MDAsIDB4OTAsIDB4NDksIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDksIDB4MDEsIDB4MDAsCisgIDB4
MjAsIDB4YzksIDB4MDIsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDIsIDB4MDAsIDB4NTgsIDB4NDAs
IDB4MDIsIDB4MDAsCisgIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDEs
IDB4MDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsCisgIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAs
IDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsCisgIDB4NDAs
IDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hh
bmRfZ3JhYl9tYXNrX2JpdHNbXSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwNiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgzZiwgMHgwMCwgMHgwMCwKKyAgMHhmMCwgMHg3Ziwg
MHgwMCwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgw
MCwKKyAgMHhmMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwNywgMHgwMCwgMHhm
YywgMHhmZiwgMHgwNywgMHgwMCwKKyAgMHhmZSwgMHhmZiwgMHgwNywgMHgwMCwgMHhmZSwgMHhm
ZiwgMHgwMywgMHgwMCwgMHhmYywgMHhmZiwgMHgwMywgMHgwMCwKKyAgMHhmOCwgMHhmZiwgMHgw
MywgMHgwMCwgMHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwK
KyAgMHhlMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwg
MHhmZiwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisvKiBNT1pfQ1VSU09SX0hBTkRfR1JBQkJJ
TkcgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9oYW5kX2dyYWJiaW5nX2JpdHNb
XSA9IHsKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHhjMCwgMHgzNiwg
MHgwMCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHgwMSwgMHgw
MCwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgx
MCwgMHgwMCwgMHgwMSwgMHgwMCwKKyAgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4
MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKKyAgMHg0MCwgMHg0MCwgMHgw
MCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwK
KyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCB9OworCitzdGF0aWMgY29uc3QgIHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJp
bmdfbWFza19iaXRzW10gPSB7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MzYsIDB4MDAsIDB4MDAsCisg
IDB4ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4
ZmYsIDB4MDMsIDB4MDAsCisgIDB4ZTAsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4
MDMsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4MDAsCisgIDB4ZjgsIDB4ZmYsIDB4MDMsIDB4
MDAsIDB4ZjgsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDEsIDB4MDAsCisgIDB4
ZTAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4N2Ys
IDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworZW51bSBDdXN0b21DdXJzb3JUeXBlIHsKKyAgICBD
dXN0b21DdXJzb3JDb3B5ID0gMCwKKyAgICBDdXN0b21DdXJzb3JBbGlhcywKKyAgICBDdXN0b21D
dXJzb3JDb250ZXh0TWVudSwKKyAgICBDdXN0b21DdXJzb3Jab29tSW4sCisgICAgQ3VzdG9tQ3Vy
c29yWm9vbU91dCwKKyAgICBDdXN0b21DdXJzb3JWZXJ0aWNhbFRleHQsCisgICAgQ3VzdG9tQ3Vy
c29yTm9Ecm9wLAorICAgIEN1c3RvbUN1cnNvclByb2dyZXNzLAorICAgIEN1c3RvbUN1cnNvck5v
bmUsCisgICAgQ3VzdG9tQ3Vyc29yR3JhYiwKKyAgICBDdXN0b21DdXJzb3JHcmFiYmluZywKK307
CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGJpdHM7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogbWFza19iaXRzOwor
ICAgIGludCBob3RfeDsKKyAgICBpbnQgaG90X3k7Cit9IEN1c3RvbUN1cnNvcjsKKworLy8gY3Jl
YXRlIGN1c3RvbSBwaXhtYXAgY3Vyc29yIGZyb20gY3Vyc29ycyBpbiBuc0dUS0N1cnNvckRhdGEu
aAorc3RhdGljIGNvbnN0IEN1c3RvbUN1cnNvciBDdXN0b21DdXJzb3JzW10gPSB7CisgICAgeyAi
Y29weSIsIG1vel9jb3B5X2JpdHMsIG1vel9jb3B5X21hc2tfYml0cywgMiwgMiB9LAorICAgIHsg
ImFsaWFzIiwgbW96X2FsaWFzX2JpdHMsIG1vel9hbGlhc19tYXNrX2JpdHMsIDIsIDIgfSwKKyAg
ICB7ICJjb250ZXh0LW1lbnUiLCBtb3pfbWVudV9iaXRzLCBtb3pfbWVudV9tYXNrX2JpdHMsIDIs
IDIgfSwKKyAgICB7ICJ6b29tLWluIiwgbW96X3pvb21faW5fYml0cywgbW96X3pvb21faW5fbWFz
a19iaXRzLCA2LCA2IH0sCisgICAgeyAiem9vbS1vdXQiLCBtb3pfem9vbV9vdXRfYml0cywgbW96
X3pvb21fb3V0X21hc2tfYml0cywgNiwgNiB9LAorICAgIHsgInZlcnRpY2FsLXRleHQiLCBtb3pf
dmVydGljYWxfdGV4dF9iaXRzLCBtb3pfdmVydGljYWxfdGV4dF9tYXNrX2JpdHMsIDgsIDQgfSwK
KyAgICB7ICJkbmQtbm8tZHJvcCIsIG1vel9ub3RfYWxsb3dlZF9iaXRzLCBtb3pfbm90X2FsbG93
ZWRfbWFza19iaXRzLCA5LCAgOSB9LAorICAgIHsgImxlZnRfcHRyX3dhdGNoIiwgbW96X3NwaW5u
aW5nX2JpdHMsIG1vel9zcGlubmluZ19tYXNrX2JpdHMsIDIsICAyfSwKKyAgICB7ICJub25lIiwg
bW96X25vbmVfYml0cywgbW96X25vbmVfbWFza19iaXRzLCAwLCAwIH0sCisgICAgeyAiZ3JhYiIs
IG1vel9oYW5kX2dyYWJfYml0cywgbW96X2hhbmRfZ3JhYl9tYXNrX2JpdHMsIDEwLCAxMCB9LAor
ICAgIHsgImdyYWJiaW5nIiwgbW96X2hhbmRfZ3JhYmJpbmdfYml0cywgbW96X2hhbmRfZ3JhYmJp
bmdfbWFza19iaXRzLCAxMCwgMTAgfQorfTsKKworI2VuZGlmIC8vIEN1cnNvckd0a19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGZjNjZlMDE1ZTUwMjI2
Nzg4YzIxNDc2OGExNWIyOTEzNjg0M2I4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgTWFydGluIFJvYmluc29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgor
CisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgcmVwbGFjZU5vbkJyZWFraW5n
U3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCit7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIE5v
bkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBT
cGFjZUNoYXJhY3RlciA9ICcgJzsKKyAgICBzdHIucmVwbGFjZShOb25CcmVha2luZ1NwYWNlQ2hh
cmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7Cit9CisKK1N0cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0
KCkgY29uc3QKK3sKKyAgICBpZiAobV9yYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2UtPnRl
eHQoKTsKKyAgICByZXR1cm4gbV90ZXh0OworfQorCitTdHJpbmcgRGF0YU9iamVjdEd0azo6bWFy
a3VwKCkgY29uc3QKK3sKKyAgICBpZiAobV9yYW5nZSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU1h
cmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVz
b2x2ZU5vbkxvY2FsVVJMcyk7CisgICAgcmV0dXJuIG1fbWFya3VwOworfQorCit2b2lkIERhdGFP
YmplY3RHdGs6OnNldFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0KQoreworICAgIG1fcmFuZ2Ug
PSAwOworICAgIG1fdGV4dCA9IG5ld1RleHQ7CisgICAgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VX
aXRoU3BhY2UobV90ZXh0KTsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRNYXJrdXAoY29u
c3QgU3RyaW5nJiBuZXdNYXJrdXApCit7CisgICAgbV9yYW5nZSA9IDA7CisgICAgbV9tYXJrdXAg
PSBuZXdNYXJrdXA7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJJTGlzdChjb25zdCBT
dHJpbmcmIHVyaUxpc3RTdHJpbmcpCit7CisgICAgbV91cmlMaXN0ID0gdXJpTGlzdFN0cmluZzsK
KworICAgIC8vIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZyb206IHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5jcHAuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRo
aXMgY29kZSBjcm9zcy1wbGF0Zm9ybSBldmVudHVhbGx5LgorCisgICAgLy8gTGluZSBzZXBhcmF0
b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eQorICAg
IC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCisgICAgVmVjdG9yPFN0cmlu
Zz4gdXJpTGlzdDsKKyAgICB1cmlMaXN0U3RyaW5nLnNwbGl0KCdcbicsIHVyaUxpc3QpOworCisg
ICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRv
IHRoZSB1cmwgbWVtYmVyLgorICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1
YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKKyAgICAvLyB3aWxsIGdldCBhbiBlbXB0
eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKKyAgICAv
LyAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4gQWxzbyBleHRy
YWN0IGFsbCBmaWxlbmFtZXMKKyAgICAvLyBmcm9tIHRoZSBVUkkgbGlzdC4KKyAgICBib29sIHNl
dFVSTCA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7
ICsraSkgeworICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0W2ldOworICAgICAgICBsaW5l
ID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEtVUkwgdXJsID0gS1VSTChLVVJMKCksIGxpbmUp
OworICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKCFzZXRVUkwp
IHsKKyAgICAgICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgICAgICAgICBzZXRVUkwg
PSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX2ZpbGVuYW1lX2Zyb21f
dXJpKGxpbmUudXRmOCgpLmRhdGEoKSwgMCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgICAgICAg
ICBpZiAoIWVycm9yICYmIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIG1fZmlsZW5hbWVzLmFw
cGVuZChTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBsYWJlbCkKK3sKKyAgICBtX3VybCA9IHVybDsKKyAgICBtX3VyaUxpc3QgPSB1cmw7
CisgICAgc2V0VGV4dCh1cmwuc3RyaW5nKCkpOworCisgICAgU3RyaW5nIGFjdHVhbExhYmVsKGxh
YmVsKTsKKyAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQorICAgICAgICBhY3R1YWxMYWJl
bCA9IHVybDsKKworICAgIFN0cmluZ0J1aWxkZXIgbWFya3VwOworICAgIG1hcmt1cC5hcHBlbmQo
IjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBwZW5kKHVybC5zdHJpbmcoKSk7CisgICAgbWFy
a3VwLmFwcGVuZCgiXCI+Iik7CisgICAgR093blB0cjxnY2hhcj4gZXNjYXBlZChnX21hcmt1cF9l
c2NhcGVfdGV4dChhY3R1YWxMYWJlbC51dGY4KCkuZGF0YSgpLCAtMSkpOworICAgIG1hcmt1cC5h
cHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdldCgpKSk7CisgICAgbWFya3VwLmFwcGVu
ZCgiPC9hPiIpOworICAgIHNldE1hcmt1cChtYXJrdXAudG9TdHJpbmcoKSk7Cit9CisKK3ZvaWQg
RGF0YU9iamVjdEd0azo6Y2xlYXJUZXh0KCkKK3sKKyAgICBtX3JhbmdlID0gMDsKKyAgICBtX3Rl
eHQgPSAiIjsKK30KKwordm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCit7CisgICAg
bV9yYW5nZSA9IDA7CisgICAgbV9tYXJrdXAgPSAiIjsKK30KKworU3RyaW5nIERhdGFPYmplY3RH
dGs6OnVybExhYmVsKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzVGV4dCgpKQorICAgICAgICByZXR1
cm4gdGV4dCgpOworCisgICAgaWYgKGhhc1VSTCgpKQorICAgICAgICByZXR1cm4gdXJsKCk7CisK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJBbGxF
eGNlcHRGaWxlbmFtZXMoKQoreworICAgIG1fdGV4dCA9ICIiOworICAgIG1fbWFya3VwID0gIiI7
CisgICAgbV91cmlMaXN0ID0gIiI7CisgICAgbV91cmwgPSBLVVJMKCk7CisgICAgbV9pbWFnZSA9
IDA7CisgICAgbV9yYW5nZSA9IDA7Cit9CisKK3ZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJBbGwo
KQoreworICAgIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7CisgICAgbV9maWxlbmFtZXMuY2xl
YXIoKTsKK30KKworRGF0YU9iamVjdEd0ayogRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0
a0NsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAgIHN0YXRpYyBIYXNoTWFwPEd0a0NsaXBib2Fy
ZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+IG9iamVjdE1hcDsKKworICAgIGlmICghb2JqZWN0
TWFwLmNvbnRhaW5zKGNsaXBib2FyZCkpIHsKKyAgICAgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+
IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKTsKKyAgICAgICAgb2JqZWN0TWFw
LnNldChjbGlwYm9hcmQsIGRhdGFPYmplY3QpOworICAgICAgICByZXR1cm4gZGF0YU9iamVjdC5n
ZXQoKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2Jq
ZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1hcC5maW5kKGNsaXBib2FyZCk7CisgICAg
cmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RH
dGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41MjgxYjFlMTc4YmY5NDdkYTJjMDgwZDM4M2VhYTUwNmI2YTYzOTgw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgK
QEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydGluIFJvYmlu
c29uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIERhdGFPYmplY3RH
dGtfaAorI2RlZmluZSBEYXRhT2JqZWN0R3RrX2gKKworI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisj
aW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEYXRhT2JqZWN0R3RrIDogcHVibGljIFJlZkNvdW50
ZWQ8RGF0YU9iamVjdEd0az4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFP
YmplY3RHdGs+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERh
dGFPYmplY3RHdGsoKSk7CisgICAgfQorCisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyBy
ZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVyaUxpc3QoKSBjb25zdCB7IHJldHVy
biBtX3VyaUxpc3Q7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKCkgY29u
c3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KKyAgICBHZGtQaXhidWYqIGltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxS
YW5nZT4gbmV3UmFuZ2UpIHsgbV9yYW5nZSA9IG5ld1JhbmdlOyB9CisgICAgdm9pZCBzZXRJbWFn
ZShHZGtQaXhidWYqIG5ld0ltYWdlKSB7IG1faW1hZ2UgPSBuZXdJbWFnZTsgfQorICAgIHZvaWQg
c2V0VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGhhc1RleHQoKSBj
b25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX3RleHQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBo
YXNNYXJrdXAoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX21hcmt1cC5pc0VtcHR5KCk7
IH0KKyAgICBib29sIGhhc1VSSUxpc3QoKSBjb25zdCB7IHJldHVybiAhbV91cmlMaXN0LmlzRW1w
dHkoKTsgfQorICAgIGJvb2wgaGFzVVJMKCkgY29uc3QgeyByZXR1cm4gIW1fdXJsLmlzRW1wdHko
KSAmJiBtX3VybC5pc1ZhbGlkKCk7IH0KKyAgICBib29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0IHsg
cmV0dXJuICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0ltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJVUklMaXN0KCkgeyBtX3VyaUxp
c3QgPSAiIjsgfQorICAgIHZvaWQgY2xlYXJVUkwoKSB7IG1fdXJsID0gS1VSTCgpOyB9CisgICAg
dm9pZCBjbGVhckltYWdlKCkgeyBtX2ltYWdlID0gMDsgfQorCisgICAgU3RyaW5nIHRleHQoKSBj
b25zdDsKKyAgICBTdHJpbmcgbWFya3VwKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgc2V0TWFya3VwKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
c2V0VVJJTGlzdChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdXJsTGFiZWwoKSBjb25zdDsK
KworICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKTsKKyAgICB2b2lkIGNsZWFyQWxs
KCk7CisgICAgdm9pZCBjbGVhclRleHQoKTsKKyAgICB2b2lkIGNsZWFyTWFya3VwKCk7CisKKyAg
ICBzdGF0aWMgRGF0YU9iamVjdEd0ayogZm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCopOworCitw
cml2YXRlOgorICAgIFN0cmluZyBtX3RleHQ7CisgICAgU3RyaW5nIG1fbWFya3VwOworICAgIEtV
UkwgbV91cmw7CisgICAgU3RyaW5nIG1fdXJpTGlzdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2Zp
bGVuYW1lczsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFnZTsKKyAgICBSZWZQdHI8UmFu
Z2U+IG1fcmFuZ2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBEYXRhT2JqZWN0R3RrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJhNDc0OWQzM2NiYjI5OWM4ZGQ2
NmUzNWMwMDkxYWIyOGYxMGFlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvRHJhZ0RhdGFHdGsuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIK
KworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzRmlsZW5hbWVzKCk7Cit9CisK
K3Vuc2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZpbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKS5zaXplKCk7Cit9CisKK3ZvaWQgRHJhZ0Rh
dGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmVz
dWx0ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKTsKK30KKworYm9vbCBEcmFnRGF0
YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRHJh
Z0RhdGEtPmhhc1RleHQoKTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dChGcmFt
ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dCgpOworfQor
CitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKCk7
Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAor
eworICAgIHJldHVybiBjb250YWluc1BsYWluVGV4dCgpIHx8IGNvbnRhaW5zVVJMKDApIHx8IG1f
cGxhdGZvcm1EcmFnRGF0YS0+aGFzTWFya3VwKCkgfHwgY29udGFpbnNDb2xvcigpIHx8IGNvbnRh
aW5zRmlsZXMoKTsKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRnJhbWUqIGZyYW1l
LCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFhc1VSTChmcmFtZSwgZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKK30KKworU3Ry
aW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxl
bmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxhdGZvcm1E
cmFnRGF0YS0+aGFzVVJMKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoZmls
ZW5hbWVQb2xpY3kgIT0gQ29udmVydEZpbGVuYW1lcykgeworICAgICAgICBLVVJMIHVybChLVVJM
KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOworICAgICAgICBpZiAodXJsLmlzTG9jYWxG
aWxlKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgU3RyaW5n
IHVybChtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybCgpKTsKKyAgICBpZiAodGl0bGUpCisgICAgICAg
ICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsTGFiZWwoKTsKKyAgICByZXR1cm4gdXJs
OworfQorCisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21l
bnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc01hcmt1cCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3Vt
ZW50KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+bWFya3VwKCksICIiKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0RyYWdJY29uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODE4NzcxYzgyOTlkMDExNTQ5NWVmY2NjNTAx
MTJhY2Q4NGVkNzYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9EcmFn
SWNvbi5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJ
Y29uLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
K3N0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdl
dCosIEdka0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24qIGljb24pCit7CisgICAgUmVmUHRy
PGNhaXJvX3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT53aW5k
b3cpKTsKKyAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBUUlVFOwor
fQorI2Vsc2UKK3N0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNr
KEd0a1dpZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJY29uKiBpY29uKQoreworICAgIGlm
ICghZ2RrX2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250ZXh0LCAwKSkKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworICAgIGljb24tPmRyYXcoY29udGV4dCk7CisgICAgcmV0dXJuIFRSVUU7Cit9
CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKKworRHJhZ0ljb246OkRyYWdJY29uKCkKKyAg
ICA6IGlzQ29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBvc2l0ZWQoZ2RrX3NjcmVlbl9nZXRf
ZGVmYXVsdCgpKSkKKyAgICAsIG1fd2luZG93KDApCit7CisgICAgaWYgKCFpc0NvbXBvc2l0ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19QT1BVUCk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fd2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0Ry
YXdFdmVudENhbGxiYWNrKSwgdGhpcyk7CisjZWxzZQorICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93
aW5kb3csICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNr
KSwgdGhpcyk7CisjZW5kaWYKKworICAgIC8vIFRoaXMgc3RyYXRlZ3kgb3JpZ2luYWxseSBjb21l
cyBmcm9tIENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIvZ3RrL3RhYl9jb250ZW50c19kcmFn
X3NvdXJjZS5jYworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVu
KG1fd2luZG93KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEdka0NvbG9ybWFwKiBy
Z2JhID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChzY3JlZW4pOworICAgIGlmIChyZ2Jh
KQorICAgICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX3dpbmRvdywgcmdiYSk7CisjZWxz
ZQorICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV92aXN1YWwoc2Ny
ZWVuKTsKKyAgICBpZiAoIXZpc3VhbCkKKyAgICAgICAgdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRf
c3lzdGVtX3Zpc3VhbChzY3JlZW4pOworICAgIGd0a193aWRnZXRfc2V0X3Zpc3VhbChtX3dpbmRv
dywgdmlzdWFsKTsKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorfQorCitEcmFnSWNvbjo6
fkRyYWdJY29uKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgRHJhZ0ljb246OmRyYXcoY2Fpcm9fdCogY29udGV4
dCkKK3sKKyAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9pbWFnZS5nZXQoKSksCisgICAg
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2ltYWdlLmdl
dCgpKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQsIENBSVJPX09QRVJBVE9SX1NP
VVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQsIG1faW1hZ2UuZ2V0
KCksIDAsIDApOworICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Cit9CisKK3ZvaWQgRHJhZ0ljb246
OnNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlKTsK
KyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9pbWFnZVNpemUgPSBJbnRTaXplKGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KGltYWdlKSk7CisgICAgaWYgKGlzQ29tcG9zaXRlZCkgeworICAgICAgICBndGtfd2luZG93
X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFnZVNpemUud2lkdGgoKSwgbV9pbWFn
ZVNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKKyAgICBtX3BpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb0ltYWdlU3VyZmFjZVRv
R2RrUGl4YnVmKGltYWdlKSk7CisjZW5kaWYKK30KKwordm9pZCBEcmFnSWNvbjo6dXNlRm9yRHJh
ZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBJbnRQb2ludCBob3RzcG90KG1faW1h
Z2VTaXplKTsKKyAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41KTsKKyAgICB1c2VGb3JEcmFnKGNv
bnRleHQsIGhvdHNwb3QpOworfQorCit2b2lkIERyYWdJY29uOjp1c2VGb3JEcmFnKEdka0RyYWdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKK3sKKyAgICBpZiAoaXND
b21wb3NpdGVkKSB7CisgICAgICAgIGd0a19kcmFnX3NldF9pY29uX3dpZGdldChjb250ZXh0LCBt
X3dpbmRvdywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGd0a19kcmFnX3NldF9pY29uX3BpeGJ1
Zihjb250ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKKyNl
bHNlCisgICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBtX2ltYWdlLmdldCgp
KTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJY29u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmJlNDM1ZGNiZGEyMGUyZWRkN2JmYzI2ZjdiMGZmMDlhMjhiODg1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaApAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRHJhZ0ljb25faAorI2RlZmluZSBEcmFnSWNvbl9oCisKKyNpbmNsdWRlICJJ
bnRQb2ludC5oIgorI2luY2x1ZGUgPFJlZlB0ckNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERyYWdJY29uIHsK
K3B1YmxpYzoKKyAgICBEcmFnSWNvbigpOworICAgIHZpcnR1YWwgfkRyYWdJY29uKCk7CisKKyAg
ICB2b2lkIGRyYXcoY2Fpcm9fdCopOworICAgIHZvaWQgc2V0SW1hZ2UoY2Fpcm9fc3VyZmFjZV90
Kik7CisgICAgdm9pZCB1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0Kik7CisgICAgdm9pZCB1c2VG
b3JEcmFnKEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpOworCitwcml2
YXRlOgorICAgIGJvb2wgaXNDb21wb3NpdGVkOworICAgIEd0a1dpZGdldCogbV93aW5kb3c7Cisg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFnZTsKKyAgICBJbnRTaXplIG1faW1hZ2VT
aXplOworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IG1f
cGl4YnVmOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZiAvLyBEcmFnSWNvbl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2I3YzRjMTQyZTFjZWYzOWQyNGYz
YmVlOWYzNGNiMmVhZDJiZDdlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvRHJhZ0ltYWdlR3RrLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogMjAxMCBJZ2FsaWEg
Uy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWly
by5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRT
aXplIGRyYWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmIGltYWdlKQoreworICAgIGlmIChpbWFnZSkK
KyAgICAgICAgcmV0dXJuIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1h
Z2UpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2UpKTsKKworICAgIHJldHVy
biBJbnRTaXplKDAsIDApOworfQorCit2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYg
aW1hZ2UpCit7CisgICAgaWYgKGltYWdlKQorICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3ko
aW1hZ2UpOworfQorCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGlt
YWdlLCBGbG9hdFNpemUgc2NhbGUpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpbnQgbmV3V2lkdGggPSBzY2FsZS53aWR0aCgpICogY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgoaW1hZ2UpOworICAgIGludCBuZXdIZWlnaHQgPSBzY2FsZS5oZWlnaHQo
KSAqIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSk7CisgICAgY2Fpcm9fc3Vy
ZmFjZV90KiBzY2FsZWRTdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcihpbWFn
ZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzY2FsZWRT
dXJmYWNlKSk7CisgICAgY2Fpcm9fc2NhbGUoY29udGV4dC5nZXQoKSwgc2NhbGUud2lkdGgoKSwg
c2NhbGUuaGVpZ2h0KCkpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRf
c291cmNlKGNvbnRleHQuZ2V0KCkpLCBDQUlST19FWFRFTkRfUEFEKTsKKyAgICBjYWlyb19wYXR0
ZXJuX3NldF9maWx0ZXIoY2Fpcm9fZ2V0X3NvdXJjZShjb250ZXh0LmdldCgpKSwgQ0FJUk9fRklM
VEVSX0JFU1QpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LmdldCgpLCBDQUlST19P
UEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0Lmdl
dCgpLCBpbWFnZSwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7CisKKyAg
ICBkZWxldGVEcmFnSW1hZ2UoaW1hZ2UpOworICAgIHJldHVybiBzY2FsZWRTdXJmYWNlOworfQor
CitEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBp
bWFnZSwgZmxvYXQgZnJhY3Rpb24pCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoIWdka19zY3JlZW5faXNfY29tcG9zaXRlZChnZGtfc2NyZWVuX2dldF9k
ZWZhdWx0KCkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShpbWFnZSkpOworICAgIGNhaXJvX3NldF9v
cGVyYXRvcihjb250ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9ERVNUX0lOKTsKKyAgICBjYWly
b19zZXRfc291cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMCwgMCwgMCwgZnJhY3Rpb24pOworICAg
IGNhaXJvX3BhaW50KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBpbWFnZTsKK30KKworRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uRW51bSkKK3sKKyAgICBOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFn
ZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHJldHVybiBuYXRp
dmVJbWFnZSA/IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG5hdGl2ZUltYWdlLT5zdXJmYWNlKCkp
IDogMDsKK30KKworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFn
ZShDYWNoZWRJbWFnZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJy
b3JzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTRkNTVlNzY5MTUxZWRjMWQ0MTE1NmE0MzJjYTc1OTc4
MTRiYWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9FcnJvcnNHdGsu
Y3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFcnJvcnNHdGsuaCIKKworI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQcmlu
dENvbnRleHQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVzb3VyY2VFcnJvciBj
YW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JDYW5jZWxs
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygi
TG9hZCByZXF1ZXN0IGNhbmNlbGxlZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQ
b3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8o
Ik5vdCBhbGxvd2VkIHRvIHVzZSByZXN0cmljdGVkIG5ldHdvcmsgcG9ydCIpKTsKK30KKworUmVz
b3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xp
Y3lFcnJvckNhbm5vdFNob3dVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKSwgXygiVVJMIGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3VyY2VF
cnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGlj
eSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIkZyYW1lIGxvYWQg
d2FzIGludGVycnVwdGVkIikpOworfQorCitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlw
ZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1l
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwg
XygiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIp
KTsKK30KKworUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJGaWxlIGRvZXMgbm90IGV4
aXN0IikpOworfQorCitSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5QbHVnaW4sIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIF8oIlBsdWdpbiB3aWxs
IGhhbmRsZSBsb2FkIikpOworfQorCitSZXNvdXJjZUVycm9yIGRvd25sb2FkTmV0d29ya0Vycm9y
KGNvbnN0IFJlc291cmNlRXJyb3ImIG5ldHdvcmtFcnJvcikKK3sKKyAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yTmV0d29yaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRXJyb3IuZmFpbGluZ1VSTCgpLCBuZXR3b3JrRXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWRD
YW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sK
KyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVy
cm9yQ2FuY2VsbGVkQnlVc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVy
bCgpLnN0cmluZygpLCBfKCJVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxvYWQiKSk7Cit9CisKK1Jl
c291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yRGVzdGluYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIGVy
cm9yTWVzc2FnZSk7Cit9CisKK1Jlc291cmNlRXJyb3IgcHJpbnRFcnJvcihjb25zdCBQcmludENv
bnRleHQqIHByaW50Q29udGV4dCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAg
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJv
ckRvbWFpblByaW50LCBQcmludEVycm9yR2VuZXJhbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51cmwoKSA6IEtVUkwoKSwgZXJyb3JN
ZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQ
cmludENvbnRleHQqIHByaW50Q29udGV4dCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJy
b3JQcmludGVyTm90Rm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCksIF8oIlByaW50ZXIgbm90IGZvdW5k
IikpOworfQorCitSZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFuZ2VUb1ByaW50KGNvbnN0IFBy
aW50Q29udGV4dCogcHJpbnRDb250ZXh0KQoreworICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJv
ckludmFsaWRQYWdlUmFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCksIF8oIkludmFsaWQgcGFnZSByYW5n
ZSIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2d0ay9FcnJvcnNHdGsuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTgyY2M5OWZiZjI5MmU0Y2JjZDczZDZlZjA5Y2ZjNGMyYzk0ODZjZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmgKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEVy
cm9yc0d0a19oCisjZGVmaW5lIEVycm9yc0d0a19oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQcmludENvbnRleHQ7Citj
bGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3Vy
Y2VSZXNwb25zZTsKKworY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5OZXR3b3JrID0gIldl
YktpdE5ldHdvcmtFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblBvbGljeSA9
ICJXZWJLaXRQb2xpY3lFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblBsdWdp
biA9ICJXZWJLaXRQbHVnaW5FcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkRv
d25sb2FkID0gIldlYktpdERvd25sb2FkRXJyb3IiOworY29uc3QgY2hhciogY29uc3QgZXJyb3JE
b21haW5QcmludCA9ICJXZWJLaXRQcmludEVycm9yIjsKKworZW51bSBOZXR3b3JrRXJyb3Igewor
ICAgIE5ldHdvcmtFcnJvckZhaWxlZCA9IDM5OSwKKyAgICBOZXR3b3JrRXJyb3JUcmFuc3BvcnQg
PSAzMDAsCisgICAgTmV0d29ya0Vycm9yVW5rbm93blByb3RvY29sID0gMzAxLAorICAgIE5ldHdv
cmtFcnJvckNhbmNlbGxlZCA9IDMwMiwKKyAgICBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0
ID0gMzAzCit9OworCisvLyBTeW5jJ2Qgd2l0aCBNYWMncyBXZWJLaXQgRXJyb3JzLgorZW51bSBQ
b2xpY3lFcnJvciB7CisgICAgUG9saWN5RXJyb3JGYWlsZWQgPSAxOTksCisgICAgUG9saWN5RXJy
b3JDYW5ub3RTaG93TWltZVR5cGUgPSAxMDAsCisgICAgUG9saWN5RXJyb3JDYW5ub3RTaG93VVJM
ID0gMTAxLAorICAgIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5n
ZSA9IDEwMiwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0ID0gMTAzCit9
OworCitlbnVtIFBsdWdpbkVycm9yIHsKKyAgICBQbHVnaW5FcnJvckZhaWxlZCA9IDI5OSwKKyAg
ICBQbHVnaW5FcnJvckNhbm5vdEZpbmRQbHVnaW4gPSAyMDAsCisgICAgUGx1Z2luRXJyb3JDYW5u
b3RMb2FkUGx1Z2luID0gMjAxLAorICAgIFBsdWdpbkVycm9ySmF2YVVuYXZhaWxhYmxlID0gMjAy
LAorICAgIFBsdWdpbkVycm9yQ29ubmVjdGlvbkNhbmNlbGxlZCA9IDIwMywKKyAgICBQbHVnaW5F
cnJvcldpbGxIYW5kbGVMb2FkID0gMjA0Cit9OworCitlbnVtIERvd25sb2FkRXJyb3IgeworICAg
IERvd25sb2FkRXJyb3JOZXR3b3JrID0gNDk5LAorICAgIERvd25sb2FkRXJyb3JDYW5jZWxsZWRC
eVVzZXIgPSA0MDAsCisgICAgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9uID0gNDAxCit9OworCitl
bnVtIFByaW50RXJyb3IgeworICAgIFByaW50RXJyb3JHZW5lcmFsID0gNTk5LAorICAgIFByaW50
RXJyb3JQcmludGVyTm90Rm91bmQgPSA1MDAsCisgICAgUHJpbnRFcnJvckludmFsaWRQYWdlUmFu
Z2UgPSA1MDEKK307CisKK1Jlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5
cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGZpbGVEb2Vz
Tm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIHBs
dWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3Vy
Y2VFcnJvciBkb3dubG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJik7CitSZXNv
dXJjZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNlRXJy
b3IgcHJpbnRFcnJvcihjb25zdCBQcmludENvbnRleHQqLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSk7CitSZXNvdXJjZUVycm9yIHByaW50ZXJOb3RGb3VuZEVycm9yKGNvbnN0IFByaW50Q29u
dGV4dCopOworUmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJhbmdlVG9QcmludChjb25zdCBQcmlu
dENvbnRleHQqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvRXZlbnRMb29wR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRXZlbnRMb29wR3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40ZWY3YjVjYjc3Yjk0NGZiZTA1ODE4NGY4NjE0NDA1MmFlNmE1MjJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwCkBA
IC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorCisjaW5jbHVkZSA8Z2xp
Yi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCit7
CisgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9GaWxlU3lz
dGVtR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmEyMDcyOTZjNmE2Y2I0NjYyOGY3NzA5NjM0ZTI0ZTcyZjg4N2M5ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKQEAgLTAsMCAr
MSwzNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0
aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVk
ZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dzdGRpby5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBPbiBsaW51eCBmaWxlIG5hbWVzIGFyZSBq
dXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29kZWQgaW4g
YW55IHdheQorICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdlIGNhbm5v
dCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCisgKiBidXQgd2UgaGF2
ZSB0byBlc2NhcGUgaXQuCisgKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBlbmNvZGlu
ZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8KK1N0cmlu
ZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQoreworICAgIGlmICghZmls
ZW5hbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOworI2Vsc2UKKyAgICBHT3duUHRyPGdj
aGFyPiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZW5hbWUsICIvOiIsIGZh
bHNlKSk7CisgICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7CisjZW5kaWYKK30KKworQ1N0
cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworI2lm
IE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHBhdGgudXRmOCgpOworI2Vsc2UKKyAgICBHT3duUHRy
PGdjaGFyPiBmaWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmcocGF0aC51dGY4KCkuZGF0YSgp
LCAwKSk7CisgICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOworI2VuZGlmCit9CisKKy8vIENvbnZl
cnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhl
IHVzZXIuCitTdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworI2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHN0cmluZzsKKyNlbHNlCisgICAgQ1N0cmlu
ZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzdHJpbmcpOworICAgIEdPd25Q
dHI8Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZpbGVuYW1lLmRhdGEoKSwgMCwg
MCwgMCwgMCkpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKwor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0KCkpOworI2VuZGlmCit9CisK
K2Jvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHBhdGgpOworCisgICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmVzdWx0ID0g
Z19maWxlX3Rlc3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgp
KQorICAgICAgICByZXN1bHQgPSBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpID09IDA7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmls
ZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVu
YW1lLmlzTnVsbCgpKQorICAgICAgICByZXN1bHQgPSBnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkg
PT0gMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZ2V0RmlsZVNpemUoY29uc3Qg
U3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCit7CisgICAgQ1N0cmluZyBmaWxl
bmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1
bHQ7CisgICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3Vs
dCk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXN1bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiBt
b2RpZmllZFRpbWUpCit7CisgICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7CisgICAgZ2ludCByZXN1bHQgPSBn
X3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7CisgICAgaWYgKHJlc3VsdCAhPSAw
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0
LnN0X210aW1lOworICAgIHJldHVybiB0cnVlOworCit9CisKK2Jvb2wgZ2V0RmlsZU1ldGFkYXRh
KGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3sKKyAgICBDU3Ry
aW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChm
aWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RydWN0IHN0
YXQgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCks
ICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKKyAg
ICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7CisgICAgbWV0YWRhdGEudHlw
ZSA9IFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVj
dG9yeSA6IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7CisgICAgcmV0dXJuIHRydWU7CisKK30KKwor
U3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KQoreworICAgIGlmIChwYXRoLmVuZHNXaXRoKEdfRElSX1NFUEFS
QVRPUl9TKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsgY29tcG9uZW50OworfQorCiti
b29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQ1N0cmlu
ZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKyAgICBpZiAoZmls
ZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdpbnQgcmVzdWx0
ID0gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKTsKKworICAg
IHJldHVybiByZXN1bHQgPT0gMDsKK30KKworU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKK3sK
KyAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21lX2RpcigpKTsKK30KKworU3Ry
aW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhOYW1lKQoreworICAgIGlmIChw
YXRoTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBwYXRoTmFtZTsKKworICAgIENTdHJp
bmcgdG1wRmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aE5hbWUpOworICAg
IEdPd25QdHI8Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFzZW5hbWUodG1wRmlsZW5hbWUu
ZGF0YSgpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwor
fQorCitDU3RyaW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpCit7CisgICAgQ1N0cmluZyBw
YXRoID0gZ2V0Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7CisgICAgaWYgKCFwYXRoLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gcGF0aDsKKworICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywgY2hl
Y2sgdGhlIFBBVEggZW52IHZhcmlhYmxlLgorICAgIEdPd25QdHI8Y2hhcj4gY3VycmVudEV4ZVBh
dGgoZ19maW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1lKCkpKTsKKyAgICBpZiAoIWN1
cnJlbnRFeGVQYXRoLmdldCgpKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgR093
blB0cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5nZXQo
KSkpOworICAgIHJldHVybiBkaXJuYW1lLmdldCgpOworfQorCitDU3RyaW5nIHNoYXJlZFJlc291
cmNlc1BhdGgoKQoreworICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hlZFBhdGg7CisgICAgaWYgKCFj
YWNoZWRQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkUGF0aDsKKworI2lmIE9T
KFdJTkRPV1MpCisgICAgSE1PRFVMRSBobW9kdWxlID0gMDsKKyAgICBHZXRNb2R1bGVIYW5kbGVF
eEEoR0VUX01PRFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJFU1MsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVsZSk7CisKKyAgICBHT3duUHRy
PGdjaGFyPiBydW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVj
dG9yeV9vZl9tb2R1bGUoaG1vZHVsZSkpOworICAgIEdPd25QdHI8Z2NoYXI+IGRhdGFQYXRoKGdf
YnVpbGRfZmlsZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJlIiwgIndlYmtpdGd0ay0iV0VC
S0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORywgTlVMTCkpOworI2Vsc2UKKyAgICBHT3duUHRyPGdj
aGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0Z3RrLSJXRUJL
SVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7CisjZW5kaWYKKworICAgIGNhY2hlZFBh
dGggPSBkYXRhUGF0aC5nZXQoKTsKKyAgICByZXR1cm4gY2FjaGVkUGF0aDsKK30KKwordWludDY0
X3QgZ2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgpKTsK
KyAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5
X2ZpbGVzeXN0ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1f
RlJFRSwgMCwgMCkpOworICAgIGlmICghZmlsZUluZm8pCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgp
LCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Cit9CisKK1N0cmluZyBkaXJlY3Rv
cnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvKiBObyBudWxsIGNoZWNraW5nIG5l
ZWRlZCAqLworICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KGRpcm5hbWUuZ2V0KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gZW50cmllczsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFt
ZS5kYXRhKCksIDAsIDApOworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm4gZW50cmllczsK
KworICAgIEdQYXR0ZXJuU3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51
dGY4KCkpLmRhdGEoKSk7CisgICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFk
X25hbWUoZGlyKSkgeworICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMs
IG5hbWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgR093blB0cjxnY2hhcj4g
ZW50cnkoZ19idWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKKyAg
ICAgICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOworICAg
IH0KKyAgICBnX3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKKyAgICBnX2Rpcl9jbG9zZShkaXIp
OworCisgICAgcmV0dXJuIGVudHJpZXM7Cit9CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShj
b25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAg
R093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0
ZjgoKS5kYXRhKCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7
CisgICAgR093blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBf
ZGlyKCksIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9
IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBo
YW5kbGUgPSBnX2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRF
X05PTkUsIDAsIDApOworICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0
KCkpOworfQorCitQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBGaWxlT3Blbk1vZGUgbW9kZSkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmc1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxl
ID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7CisgICAgR0Zp
bGVJT1N0cmVhbSogaW9TdHJlYW0gPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQor
ICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAw
KTsKKyAgICBlbHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkgeworICAgICAgICBpZiAoZ19m
aWxlX3Rlc3QoZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNU
X0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIGlvU3RyZWFt
ID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0
KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGlvU3Ry
ZWFtOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sK
KyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7CisgICAgZ19vYmpl
Y3RfdW5yZWYoaGFuZGxlKTsKKyAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
OworfQorCitsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9u
ZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIEdTZWVrVHlwZSBz
ZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgc3dpdGNoIChvcmlnaW4pIHsKKyAgICBjYXNlIFNl
ZWtGcm9tQmVnaW5uaW5nOgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgorICAgICAgICBzZWVrVHlwZSA9IEdf
U0VFS19DVVI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAg
IHNlZWtUeXBlID0gR19TRUVLX0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFnX3NlZWthYmxl
X3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFN
KGhhbmRsZSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHNlZWtUeXBlLCAw
LCAwKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBnX3NlZWthYmxlX3RlbGwoR19T
RUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkp
KSk7Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKKyAg
ICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFt
KEdfSU9fU1RSRUFNKGhhbmRsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKKyAgICByZXR1cm4gYnl0ZXNXcml0dGVu
OworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGRv
IHsKKyAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19z
dHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAwLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICBy
ZXR1cm4gYnl0ZXNSZWFkOworICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdf
RklMRV9FUlJPUl9JTlRSKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxl
KFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyNpZiBPUyhXSU5ET1dTKQorICAgIHJldHVybiA6
OkZyZWVMaWJyYXJ5KG1vZHVsZSk7CisjZWxzZQorICAgIHJldHVybiBnX21vZHVsZV9jbG9zZSht
b2R1bGUpOworI2VuZGlmCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dP
d25QdHJHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YjY5M2Y0MTVlOTc4MjQ3ZmQzYzkzODRkNGVkMjUxZWUwNDliOGYwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcApAQCAtMCwwICsxLDM4
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdPd25Q
dHJHdGsuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHZGtFdmVudD4oR2RrRXZlbnQqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnZGtfZXZlbnRfZnJlZShwdHIpOworfQorCit0ZW1wbGF0
ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25JbmZvKiBpbmZvKQor
eworICAgIGlmIChpbmZvKQorICAgICAgICBndGtfaWNvbl9pbmZvX2ZyZWUoaW5mbyk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ1ZTgzNzFlZDM2OGY0MTVk
ODk3NDMyNGVlNjJkNzFmZWI3YTJkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR093blB0ckd0ay5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR093blB0ckd0a19oCisjZGVm
aW5lIEdPd25QdHJHdGtfaAorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdka0V2ZW50
PihHZGtFdmVudCopOwordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEd0a0ljb25JbmZv
PihHdGtJY29uSW5mbyopOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmE1MDZkZjkwMDdkMjRjYzA3Njc3NjhkZWZkMTA1NjYyZmMzOWIzZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAKQEAg
LTAsMCArMSw3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0
ay5oIgorCisjZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEKKyNkZWZpbmUgU0VDUkVUX0FQ
SV9TVUJKRUNUX1RPX0NIQU5HRSAxCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlIDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlzdCogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9yZWYocHRyKTsKKyAg
ICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHdGtUYXJnZXRM
aXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X3VucmVm
KHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiByZWZHUHRyKFNlY3JldFZhbHVl
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgc2VjcmV0X3ZhbHVlX3JlZihwdHIpOwor
ICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKFNlY3JldFZh
bHVlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgc2VjcmV0X3ZhbHVlX3VucmVmKHB0
cik7Cit9CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgordGVtcGxhdGUgPD4gR2RrQ3Vyc29y
KiByZWZHUHRyKEdka0N1cnNvciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdka19j
dXJzb3JfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ2RrX2N1
cnNvcl91bnJlZihwdHIpOworfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTE5Mjg2NGE5MjI5ZGFiODgzYmVmYTU2MmIyMzVhZDhhYzM5NmRjOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA5IE1hcnRpbiBSb2JpbnNvbgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdS
ZWZQdHJHdGtfaAorI2RlZmluZSBHUmVmUHRyR3RrX2gKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1NlY3JldFZhbHVlIFNlY3JldFZhbHVlOwor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmR1B0cihH
dGtUYXJnZXRMaXN0KiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR3RrVGFyZ2V0
TGlzdCogcHRyKTsKKwordGVtcGxhdGUgPD4gU2VjcmV0VmFsdWUqIHJlZkdQdHIoU2VjcmV0VmFs
dWUqIHB0cik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihTZWNyZXRWYWx1ZSogcHRyKTsK
KworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCit0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZkdQ
dHIoR2RrQ3Vyc29yKiBwdHIpOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2RrQ3Vyc29y
KiBwdHIpOworI2VuZGlmCisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFmOTYwOWRkMDg3MTJkMTI4NTIzNjRiZjIwZTZkYmMzZjRhZmZhZjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcApA
QCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsg
PHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdhbWVwYWRzLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUg
IkdhbWVwYWREZXZpY2VMaW51eC5oIgorI2luY2x1ZGUgIkdhbWVwYWRMaXN0LmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPGdpby9ndW5peGlucHV0c3RyZWFtLmg+CisjaW5jbHVk
ZSA8Z3VkZXYvZ3VkZXYuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdhbWVwYWREZXZpY2VHdGsgOiBwdWJsaWMgR2FtZXBhZERldmljZUxpbnV4IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxHYW1lcGFkRGV2aWNlR3RrPiBjcmVhdGUo
U3RyaW5nIGRldmljZUZpbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdh
bWVwYWREZXZpY2VHdGsoZGV2aWNlRmlsZSkpOworICAgIH0KKyAgICB+R2FtZXBhZERldmljZUd0
aygpOworCitwcml2YXRlOgorICAgIEdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUp
OworCisgICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0
cmVhbSwgZ3BvaW50ZXIgZGF0YSk7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRT
dHJlYW07CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKK307CisKK0dhbWVwYWREZXZp
Y2VHdGs6OkdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUpCisgICAgOiBHYW1lcGFk
RGV2aWNlTGludXgoZGV2aWNlRmlsZSkKK3sKKyAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAt
MSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX3Vu
aXhfaW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOworICAgIG1fc291
cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UoR19Q
T0xMQUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsKKyAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOworICAgIGdfc291cmNlX2F0dGFjaChtX3Nv
dXJjZS5nZXQoKSwgMCk7Cit9CisKK0dhbWVwYWREZXZpY2VHdGs6On5HYW1lcGFkRGV2aWNlR3Rr
KCkKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIGdfc291cmNlX2Rlc3Ryb3kobV9zb3Vy
Y2UuZ2V0KCkpOworfQorCitnYm9vbGVhbiBHYW1lcGFkRGV2aWNlR3RrOjpyZWFkQ2FsbGJhY2so
R09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCit7CisgICAgR2FtZXBhZERl
dmljZUd0ayogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZERldmljZUd0
ayo+KGRhdGEpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBzdHJ1Y3QganNfZXZl
bnQgZXZlbnQ7CisKKyAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fcmVh
ZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShwb2xsYWJsZVN0cmVhbSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgLy8gRklY
TUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgR19JT19F
UlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGlsCisgICAgLy8g
dGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhlcndpc2UuCisg
ICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgp
LCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKKworICAgIEFTU0VSVF9VTlVT
RUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7CisgICAgZ2FtZXBhZERldmljZS0+dXBkYXRl
Rm9yRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBUUlVFOworfQorCitjbGFzcyBHYW1lcGFkc0d0
ayB7CitwdWJsaWM6CisgICAgR2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKTsKKworICAgIHZv
aWQgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOworICAgIHZvaWQgdW5yZWdpc3Rl
ckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7CisKKyAgICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0
KEdhbWVwYWRMaXN0Kik7CisKK3ByaXZhdGU6CisgICAgfkdhbWVwYWRzR3RrKCk7CisgICAgc3Rh
dGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdV
ZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3RhdGljIGdib29sZWFuIGlzR2FtZXBh
ZERldmljZShHVWRldkRldmljZSopOworCisgICAgVmVjdG9yPE93blB0cjxHYW1lcGFkRGV2aWNl
R3RrPiA+IG1fc2xvdHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VHdGsqPiBt
X2RldmljZU1hcDsKKworICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1fZ3VkZXZDbGllbnQ7Cit9
OworCitHYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9z
bG90cyhsZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsg
ImlucHV0IiwgMCB9OworICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVu
dF9uZXcoc3Vic3lzdGVtcykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndWRldkNsaWVudC5n
ZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxsYmFjayksIHRoaXMpOworCisg
ICAgR093blB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJz
eXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1swXSkpOworICAgIGZvciAoR0xp
c3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdf
bGlzdF9uZXh0KGxpc3RJdGVtKSkgeworICAgICAgICBHVWRldkRldmljZSogZGV2aWNlID0gR19V
REVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7CisgICAgICAgIFN0cmluZyBkZXZpY2VGaWxlID0g
U3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsK
KyAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQorICAgICAgICAgICAgcmVnaXN0
ZXJEZXZpY2UoZGV2aWNlRmlsZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRldmljZSk7Cisg
ICAgfQorfQorCitHYW1lcGFkc0d0azo6fkdhbWVwYWRzR3RrKCkKK3sKKyAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVudC5nZXQoKSwgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Cit9CisKK3ZvaWQgR2FtZXBhZHNHdGs6OnJl
Z2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQoreworICAgIExPRyhHYW1lcGFkLCAiR2Ft
ZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNpemUoKTsgaW5kZXgrKykg
eworICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7CisgICAgICAgICAgICBtX3Nsb3RzW2lu
ZGV4XSA9IEdhbWVwYWREZXZpY2VHdGs6OmNyZWF0ZShkZXZpY2VGaWxlKTsKKyAgICAgICAgICAg
IG1fZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2luZGV4XS5nZXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHYW1lcGFkc0d0azo6
dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKK3sKKyAgICBMT0coR2FtZXBhZCwg
IkdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKKwor
ICAgIEdhbWVwYWREZXZpY2VHdGsqIGdhbWVwYWREZXZpY2UgPSBtX2RldmljZU1hcC50YWtlKGRl
dmljZUZpbGUpOworICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmluZChnYW1lcGFkRGV2aWNl
KTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworCisgICAgbV9zbG90c1tpbmRleF0u
Y2xlYXIoKTsKK30KKwordm9pZCBHYW1lcGFkc0d0azo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBh
ZExpc3QqIGludG8pCit7CisgICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0
aCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsr
KSB7CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3Rl
ZCgpKSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gbV9z
bG90c1tpXS5nZXQoKTsKKyAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50
by0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAgICAgICAgICBn
YW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4
KGkpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERldmljZS0+aWQoKSk7CisgICAg
ICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwor
ICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2Ft
ZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT5idXR0b25zKGdh
bWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5idXR0b25zRGF0YSgp
KTsKKworICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgR2FtZXBhZHNH
dGs6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqIHVkZXZDbGllbnQsIGdjaGFyKiBhY3Rp
b24sIEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKCFpc0dh
bWVwYWREZXZpY2UoZGV2aWNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2FtZXBhZHNHdGsq
IGdhbWVwYWRzR3RrID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkc0d0ayo+KGRhdGEpOworICAg
IFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9k
ZXZpY2VfZmlsZShkZXZpY2UpKTsKKworICAgIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgImFkZCIp
KQorICAgICAgICBnYW1lcGFkc0d0ay0+cmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7CisgICAg
ZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkKKyAgICAgICAgZ2FtZXBhZHNH
dGstPnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Cit9CisKK2dib29sZWFuIEdhbWVwYWRz
R3RrOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmljZSkKK3sKKyAgICBjb25zdCBn
Y2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSk7
CisgICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3Bh
dGgoZGV2aWNlKTsKKyAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5c2ZzUGF0aCkKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZp
Y2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJ
RF9JTlBVVF9KT1lTVElDSyIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4g
Z19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1dC9qcyIpOworfQorCit2b2lk
IHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAoaW50by0+bGVuZ3RoKCkpKTsKKyAgICBn
YW1lcGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0YTJlYWIxMjk2
MzM0ZDRhMDA2MDVhNDIxYjAyZmVhZTQ4MmQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMCwwICsxLDI2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCIKKworI2luY2x1
ZGUgIkNyZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBpbnQgZ0xheW91dENvbHVtblNwYWNpbmcgPSAxMjsKK3N0YXRpYyBjb25zdCBp
bnQgZ0xheW91dFJvd1NwYWNpbmcgPSA2Oworc3RhdGljIGNvbnN0IGludCBnQnV0dG9uU3BhY2lu
ZyA9IDU7CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zyhjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3Rv
cmFnZU1vZGUgbW9kZSkKKyAgICA6IG1fZGlhbG9nKDApCisgICAgLCBtX2xvZ2luRW50cnkoMCkK
KyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDAp
CisgICAgLCBtX2NoYWxsZW5nZShjaGFsbGVuZ2UpCisgICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdl
TW9kZShtb2RlKQoreworfQorCitHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGlj
YXRpb25EaWFsb2coR3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQorICAgIDog
bV9kaWFsb2coZ3RrX2RpYWxvZ19uZXcoKSkKKyAgICAsIG1fbG9naW5FbnRyeSgwKQorICAgICwg
bV9wYXNzd29yZEVudHJ5KDApCisgICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKKyAgICAs
IG1fY2hhbGxlbmdlKGNoYWxsZW5nZSkKKyAgICAsIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1v
ZGUpCit7CisgICAgR3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRl
bnRfYXJlYShHVEtfRElBTE9HKG1fZGlhbG9nKSk7CisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9y
ZGVyX3dpZHRoKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhtX2RpYWxvZykpLCA1KTsKKyAgICBn
dGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAy
ID0gMTIgKi8KKworICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7
CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFMU0UpOworICAgIGd0a193
aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFt
ZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04pOworCisgICAgaWYgKHBh
cmVudFdpbmRvdykKKyAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2Zvcih3aW5kb3cs
IHBhcmVudFdpbmRvdyk7CisKKyAgICBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKGNvbnRlbnRB
cmVhKTsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgdm9pZCBwYWNrVHdv
Q29sdW1uTGF5b3V0SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKK3sKKyAgICB2YV9saXN0IGFy
Z3VtZW50TGlzdDsKKyAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7CisKKyAgICBHdGtX
aWRnZXQqIHRhYmxlID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxl
X3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcp
OworICAgIGd0a190YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlv
dXRSb3dTcGFjaW5nKTsKKworICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9h
cmcoYXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICBpbnQgcm93TnVtYmVyID0gMDsKKyAg
ICB3aGlsZSAoZmlyc3RDb2x1bW5XaWRnZXQpIHsKKyAgICAgICAgaWYgKHJvd051bWJlcikKKyAg
ICAgICAgICAgIGd0a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsg
MSwgMik7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmco
YXJndW1lbnRMaXN0LCBHdGtXaWRnZXQqKTsKKyAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRh
Y2hPcHRpb25zID0gc3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdU
S19GSUxMKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJz
dENvbHVtbldpZGdldCwKKyAgICAgICAgICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAy
LAorICAgICAgICAgICAgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxLAorICAgICAgICAgICAgYXR0
YWNoT3B0aW9ucywgYXR0YWNoT3B0aW9ucywKKyAgICAgICAgICAgIDAsIDApOworCisgICAgICAg
IGlmIChzZWNvbmRDb2x1bW5XaWRnZXQpCisgICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2Rl
ZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVt
YmVyLCByb3dOdW1iZXIgKyAxKTsKKworICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2Fy
Zyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICByb3dOdW1iZXIrKzsKKyAgICB9
CisKKyAgICB2YV9lbmQoYXJndW1lbnRMaXN0KTsKKworICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGJveCksIHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOworfQorI2Vsc2UKK3N0YXRpYyB2
b2lkIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQoreworICAg
IHZhX2xpc3QgYXJndW1lbnRMaXN0OworICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsK
KworICAgIEd0a1dpZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOworICAgIGd0a19ncmlkX3Nl
dF9jb2x1bW5fc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOworICAg
IGd0a19ncmlkX3NldF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNp
bmcpOworICAgIGd0a19ncmlkX3NldF9jb2x1bW5faG9tb2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCks
IFRSVUUpOworCisgICAgR3RrV2lkZ2V0KiBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1
bWVudExpc3QsIEd0a1dpZGdldCopOworICAgIGludCByb3dOdW1iZXIgPSAwOworICAgIHdoaWxl
IChmaXJzdENvbHVtbldpZGdldCkgeworICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVtbldp
ZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOworICAgICAgICBpbnQgZmly
c3RXaWRnZXRXaWR0aCA9IHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyOworCisgICAgICAgIGd0
a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwgZmlyc3RDb2x1bW5XaWRnZXQsIDAsIHJvd051
bWJlciwgZmlyc3RXaWRnZXRXaWR0aCwgMSk7CisgICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBh
bmQoZmlyc3RDb2x1bW5XaWRnZXQsIFRSVUUpOworICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhw
YW5kKGZpcnN0Q29sdW1uV2lkZ2V0LCBUUlVFKTsKKworICAgICAgICBpZiAoc2Vjb25kQ29sdW1u
V2lkZ2V0KSB7CisgICAgICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNl
Y29uZENvbHVtbldpZGdldCwgMSwgcm93TnVtYmVyLCAxLCAxKTsKKyAgICAgICAgICAgIGd0a193
aWRnZXRfc2V0X2hleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAgICAgICAg
IGd0a193aWRnZXRfc2V0X3ZleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwg
R3RrV2lkZ2V0Kik7CisgICAgICAgIHJvd051bWJlcisrOworICAgIH0KKworICAgIHZhX2VuZChh
cmd1bWVudExpc3QpOworCisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3Jp
ZCwgRkFMU0UsIEZBTFNFLCAwKTsKK30KKyNlbmRpZgorCitzdGF0aWMgR3RrV2lkZ2V0KiBjcmVh
dGVEaWFsb2dMYWJlbChjb25zdCBjaGFyKiBsYWJlbFN0cmluZywgaW50IGhvcml6b250YWxQYWRk
aW5nID0gMCkKK3sKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0
cmluZyk7CisgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAsIDAu
NSk7CisgICAgaWYgKGhvcml6b250YWxQYWRkaW5nKQorICAgICAgICBndGtfbWlzY19zZXRfcGFk
ZGluZyhHVEtfTUlTQyhsYWJlbCksIDAsIGhvcml6b250YWxQYWRkaW5nKTsKKyAgICByZXR1cm4g
bGFiZWw7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdl
dCoqIG1lbWJlcikKK3sKKyAgICAqbWVtYmVyID0gZ3RrX2VudHJ5X25ldygpOworICAgIGd0a19l
bnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKCptZW1iZXIpLCBUUlVFKTsKKyAg
ICByZXR1cm4gKm1lbWJlcjsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6Y3Jl
YXRlQ29udGVudHNJbkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcikKK3sKKyNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxT
RSwgZ0xheW91dENvbHVtblNwYWNpbmcpOworI2Vsc2UKKyAgICBHdGtXaWRnZXQqIGhCb3ggPSBn
dGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgZ0xheW91dENvbHVtblNwYWNp
bmcpOworI2VuZGlmCisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05U
QUlORVIoaEJveCksIGdCdXR0b25TcGFjaW5nKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKGNvbnRhaW5lciksIGhCb3gpOworCisgICAgR3RrV2lkZ2V0KiBpY29uID0gZ3Rr
X2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdU
S19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVND
KGljb24pLCAwLjUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBp
Y29uLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgR093blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJk
dXBfcHJpbnRmKAorICAgICAgICBfKCJUaGUgc2l0ZSAlczolaSByZXF1ZXN0cyBhIHVzZXJuYW1l
IGFuZCBwYXNzd29yZCIpLAorICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5o
b3N0KCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCkucG9ydCgpKSk7CisKKyAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0
dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsKKyAgICBndGtf
bGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTiht
X3JlbWVtYmVyQ2hlY2tCdXR0b24pKSksIFRSVUUpOworICAgIGd0a193aWRnZXRfc2V0X25vX3No
b3dfYWxsKG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0g
RGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZSk7CisKKworICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhl
IGJ1dHRvbiBib3ggaGVyZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWFkeS1tYWRl
IEd0a0RpYWxvZyBidXR0b25zLgorICAgIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gc2hhcmUg
dGhlIGNvZGUgd2l0aCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgdXNlIEd0a0RpYWxvZy4K
KyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3Rr
X2hidXR0b25fYm94X25ldygpOworI2Vsc2UKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0
a19idXR0b25fYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisjZW5kaWYKKyAg
ICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcp
OworICAgIGd0a19idXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94
KSwgR1RLX0JVVFRPTkJPWF9FTkQpOworCisgICAgbV9va2F5QnV0dG9uID0gZ3RrX2J1dHRvbl9u
ZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfT0spOworICAgIG1fY2FuY2VsQnV0dG9uID0gZ3RrX2J1
dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKKyAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChidXR0b25Cb3gpLCBtX2NhbmNlbEJ1dHRvbiwgRkFMU0UsIFRSVUUsIDAp
OworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fb2theUJ1dHRv
biwgRkFMU0UsIFRSVUUsIDApOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9va2F5QnV0dG9uLCAi
Y2xpY2tlZCIsIEdfQ0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdChtX2NhbmNlbEJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1
dHRvbkNsaWNrZWRDYWxsYmFjayksIHRoaXMpOworCisgICAgU3RyaW5nIHJlYWxtID0gbV9jaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucmVhbG0oKTsKKyAgICBpZiAoIXJlYWxtLmlzRW1wdHko
KSkgeworICAgICAgICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJveCwKKyAgICAgICAgICAg
IGNyZWF0ZURpYWxvZ0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxM
LAorICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBj
cmVhdGVEaWFsb2dMYWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgIGNyZWF0
ZURpYWxvZ0xhYmVsKF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5F
bnRyeSksCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNy
ZWF0ZURpYWxvZ0VudHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAorICAgICAgICAgICAgbV9yZW1lbWJl
ckNoZWNrQnV0dG9uLCBOVUxMLAorICAgICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxMKTsK
KworICAgIH0gZWxzZSB7CisgICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChoQm94LAor
ICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3Bh
Y2luZyksIE5VTEwsCisgICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToi
KSksIGNyZWF0ZURpYWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAorICAgICAgICAgICAgY3JlYXRl
RGlhbG9nTGFiZWwoXygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29y
ZEVudHJ5KSwKKyAgICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwK
KyAgICAgICAgICAgIGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7CisgICAgfQorCisgICAgZ3RrX2Vu
dHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7Cisg
ICAgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IG1f
Y2hhbGxlbmdlLnByb3Bvc2VkQ3JlZGVudGlhbCgpOworICAgIGlmICghY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0
KEdUS19FTlRSWShtX2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdl
LnVzZXIoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19F
TlRSWShtX3Bhc3N3b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnBh
c3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9h
Y3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7Cisg
ICAgfQorfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKK3sKKyAgICBn
dGtfd2lkZ2V0X3NldF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24sIFRSVUUpOworICAgIGd0a193
aWRnZXRfZ3JhYl9kZWZhdWx0KG1fb2theUJ1dHRvbik7CisgICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKG1fbG9naW5FbnRyeSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsK
K30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCit7CisgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNy
ZWRlbnRpYWwpCit7CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBtX2No
YWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwobV9jaGFsbGVuZ2UpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGFs
bGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxl
bmdlLCBjcmVkZW50aWFsKTsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YnV0
dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyogZGlhbG9nKQoreworICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICBpZiAoYnV0
dG9uID09IGRpYWxvZy0+bV9va2F5QnV0dG9uKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKnVzZXJu
YW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRyeSkp
OworICAgICAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtf
RU5UUlkoZGlhbG9nLT5tX3Bhc3N3b3JkRW50cnkpKTsKKyAgICAgICAgYm9vbCByZW1lbWJlclBh
c3N3b3JkID0gZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihk
aWFsb2ctPm1fcmVtZW1iZXJDaGVja0J1dHRvbikpOworICAgICAgICBDcmVkZW50aWFsUGVyc2lz
dGVuY2UgcGVyc2lzdGVuY2U7CisKKyAgICAgICAgaWYgKHJlbWVtYmVyUGFzc3dvcmQgJiYgZGlh
bG9nLT5tX2NyZWRlbnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlKQor
ICAgICAgICAgICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlRm9yU2Vzc2lvbjsKKworICAgICAgICBjcmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJp
bmc6OmZyb21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNp
c3RlbmNlKTsKKyAgICB9CisKKyAgICBkaWFsb2ctPmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsK
KyAgICBkaWFsb2ctPmRlc3Ryb3koKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM3N2M4MWFkZmVmYmQxOTI2OTc1OWE5ODcxNjYxZWY0ODE1YmEzNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKKyNkZWZpbmUgR3RrQXV0aGVudGljYXRp
b25EaWFsb2dfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNs
dWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3RrQXV0aGVudGljYXRpb25EaWFsb2cgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVi
bGljOgorICAgIGVudW0gQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIHsKKyAgICAgICAgQWxsb3dQZXJz
aXN0ZW50U3RvcmFnZSwgLy8gVGhlIHVzZXIgaXMgYXNrZWQgd2hldGhlciB0byBzdG9yZSBjcmVk
ZW50aWFsIGluZm9ybWF0aW9uLgorICAgICAgICBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlIC8v
IENyZWRlbnRpYWwgaW5mb3JtYXRpb24gaXMgb25seSBrZXB0IGluIHRoZSBzZXNzaW9uLgorICAg
IH07CisKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgR3RrQXV0aGVudGljYXRpb25E
aWFsb2coR3RrV2luZG93KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50
aWFsU3RvcmFnZU1vZGUpOworICAgIHZpcnR1YWwgfkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCkg
eyB9CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGNyZWF0ZUNvbnRlbnRzSW5Db250YWluZXIoR3RrV2lkZ2V0KiBjb250YWluZXIp
OworICAgIHZpcnR1YWwgdm9pZCBhdXRoZW50aWNhdGUoY29uc3QgQ3JlZGVudGlhbCYpOworICAg
IEd0a1dpZGdldCogbV9kaWFsb2c7CisgICAgR3RrV2lkZ2V0KiBtX2xvZ2luRW50cnk7CisgICAg
R3RrV2lkZ2V0KiBtX3Bhc3N3b3JkRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hl
Y2tCdXR0b247CisgICAgR3RrV2lkZ2V0KiBtX29rYXlCdXR0b247CisgICAgR3RrV2lkZ2V0KiBt
X2NhbmNlbEJ1dHRvbjsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBidXR0b25DbGlja2Vk
Q2FsbGJhY2soR3RrV2lkZ2V0KiwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqKTsKKyAgICBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKKyAgICBDcmVkZW50aWFsU3RvcmFnZU1v
ZGUgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a0NsaWNrQ291bnRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNjOGEzMmMwMjY1ZWQxMTVkOGQ3NjFl
ZDdhNGZmZDIxM2VhZGQzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrQ2xpY2tDb3VudGVyLmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a0NsaWNrQ291bnRlci5oIgorCisj
aW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitHdGtDbGlja0NvdW50ZXI6Okd0a0NsaWNrQ291bnRlcigpCisgICAgOiBt
X2N1cnJlbnRDbGlja0NvdW50KDApCisgICAgLCBtX3ByZXZpb3VzQ2xpY2tCdXR0b24oMCkKKyAg
ICAsIG1fcHJldmlvdXNDbGlja1RpbWUoMCkKK3sKK30KKwordm9pZCBHdGtDbGlja0NvdW50ZXI6
OnJlc2V0KCkKK3sKKyAgICBtX2N1cnJlbnRDbGlja0NvdW50ID0gMDsKKyAgICBtX3ByZXZpb3Vz
Q2xpY2tQb2ludCA9IEludFBvaW50KCk7CisgICAgbV9wcmV2aW91c0NsaWNrVGltZSA9IDA7Cisg
ICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gMDsKK30KKworYm9vbCBHdGtDbGlja0NvdW50ZXI6
OnNob3VsZFByb2Nlc3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCit7
CisgICAgLy8gRm9yIGRvdWJsZSBhbmQgdHJpcGxlIGNsaWNrcyBHREsgc2VuZHMgYm90aCBhIG5v
cm1hbCBidXR0b24gcHJlc3MgZXZlbnQKKyAgICAvLyBhbmQgYSBzcGVjaWZpYyB0eXBlIChsaWtl
IEdES18yQlVUVE9OX1BSRVNTKS4gSWYgd2UgZGV0ZWN0IGEgc3BlY2lhbCBwcmVzcworICAgIC8v
IGNvbWluZyB1cCwgaWdub3JlIHRoaXMgZXZlbnQgYXMgaXQgY2VydGFpbmx5IGdlbmVyYXRlZCB0
aGUgZG91YmxlIG9yIHRyaXBsZQorICAgIC8vIGNsaWNrLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90
IGVhdGluZyB0aGlzIGV2ZW50IGlzIHR3byBET00gYnV0dG9uIHByZXNzIGV2ZW50cworICAgIC8v
IGFyZSBnZW5lcmF0ZWQuCisgICAgR093blB0cjxHZGtFdmVudD4gbmV4dEV2ZW50KGdka19ldmVu
dF9wZWVrKCkpOworICAgIGlmICghbmV4dEV2ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0RXZl
bnQtPmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBndWludDMyIGdldEV2ZW50VGltZShHZGtF
dmVudCogZXZlbnQpCit7CisgICAgZ3VpbnQzMiB0aW1lID0gZ2RrX2V2ZW50X2dldF90aW1lKGV2
ZW50KTsKKyAgICBpZiAodGltZSkKKyAgICAgICAgcmV0dXJuIHRpbWU7CisKKyAgICAvLyBSZWFs
IGV2ZW50cyBhbHdheXMgaGF2ZSBhIG5vbi16ZXJvIHRpbWUsIGJ1dCBldmVudHMgc3ludGhlc2l6
ZWQKKyAgICAvLyBieSB0aGUgRFJUIGRvIG5vdCBhbmQgd2UgbXVzdCBjYWxjdWxhdGUgYSB0aW1l
IG1hbnVhbGx5LiBUaGlzIHRpbWUKKyAgICAvLyBpcyBub3QgY2FsY3VsYXRlZCBpbiB0aGUgRFJU
LCBiZWNhdXNlIEdUSysgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGgKKyAgICAvLyBhbnl0aGluZyBv
dGhlciB0aGFuIEdES19DVVJSRU5UX1RJTUUgb24gc3ludGhlc2l6ZWQgZXZlbnRzLgorICAgIEdU
aW1lVmFsIHRpbWVWYWx1ZTsKKyAgICBnX2dldF9jdXJyZW50X3RpbWUoJnRpbWVWYWx1ZSk7Cisg
ICAgcmV0dXJuICh0aW1lVmFsdWUudHZfc2VjICogMTAwMCkgKyAodGltZVZhbHVlLnR2X3VzZWMg
LyAxMDAwKTsKK30KKworaW50IEd0a0NsaWNrQ291bnRlcjo6Y2xpY2tDb3VudEZvckdka0J1dHRv
bkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogYnV0dG9uRXZlbnQpCit7
CisgICAgZ2ludCBkb3VibGVDbGlja0Rpc3RhbmNlID0gMjUwOworICAgIGdpbnQgZG91YmxlQ2xp
Y2tUaW1lID0gNTsKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0
X2Zvcl9zY3JlZW4oZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdpZGdldCkpOworICAgIGdfb2JqZWN0
X2dldChzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUtY2xpY2stZGlzdGFu
Y2UiLCAmZG91YmxlQ2xpY2tEaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgImd0ay1kb3VibGUt
Y2xpY2stdGltZSIsICZkb3VibGVDbGlja1RpbWUsIE5VTEwpOworCisgICAgLy8gR1RLKyBvbmx5
IGNvdW50cyB1cCB0byB0cmlwbGUgY2xpY2tzLCBidXQgV2ViQ29yZSB3YW50cyB0byBrbm93IGFi
b3V0CisgICAgLy8gcXVhZHJ1cGxlIGNsaWNrcywgcXVpbnR1cGxlIGNsaWNrcywgYWQgaW5maW5p
dHVtLiBIZXJlLCB3ZSByZXBsaWNhdGUgdGhlCisgICAgLy8gR0RLIGxvZ2ljIGZvciBjb3VudGlu
ZyBjbGlja3MuCisgICAgR2RrRXZlbnQqIGV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQq
PihidXR0b25FdmVudCkpOworICAgIGd1aW50MzIgZXZlbnRUaW1lID0gZ2V0RXZlbnRUaW1lKGV2
ZW50KTsKKworICAgIGlmICgoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MgfHwgZXZl
bnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCisgICAgICAgIHx8ICgoYWJzKGJ1dHRvbkV2
ZW50LT54IC0gbV9wcmV2aW91c0NsaWNrUG9pbnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2Up
CisgICAgICAgICAgICAmJiAoYWJzKGJ1dHRvbkV2ZW50LT55IC0gbV9wcmV2aW91c0NsaWNrUG9p
bnQueSgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAgICAgICAmJiAoZXZlbnRUaW1l
IC0gbV9wcmV2aW91c0NsaWNrVGltZSA8IHN0YXRpY19jYXN0PGd1aW50Pihkb3VibGVDbGlja1Rp
bWUpKQorICAgICAgICAgICAgJiYgKGJ1dHRvbkV2ZW50LT5idXR0b24gPT0gbV9wcmV2aW91c0Ns
aWNrQnV0dG9uKSkpCisgICAgICAgIG1fY3VycmVudENsaWNrQ291bnQrKzsKKyAgICBlbHNlCisg
ICAgICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAxOworCisgICAgZ2RvdWJsZSB4LCB5OworICAg
IGdka19ldmVudF9nZXRfY29vcmRzKGV2ZW50LCAmeCwgJnkpOworICAgIG1fcHJldmlvdXNDbGlj
a1BvaW50ID0gSW50UG9pbnQoeCwgeSk7CisgICAgbV9wcmV2aW91c0NsaWNrQnV0dG9uID0gYnV0
dG9uRXZlbnQtPmJ1dHRvbjsKKyAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gZXZlbnRUaW1lOwor
CisgICAgcmV0dXJuIG1fY3VycmVudENsaWNrQ291bnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2Y2Ex
ZGVjOTE4MDc5NGYyZjc1MTliOGJjNTJiNjc5NGIxZjk3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3RrQ2xpY2tDb3VudGVyX2gKKyNkZWZpbmUgR3Rr
Q2xpY2tDb3VudGVyX2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisKK3R5cGVkZWYgc3RydWN0
IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHdGtDbGlja0NvdW50ZXIgeworcHVibGljOgorICAgIEd0a0NsaWNrQ291bnRlcigp
OworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIHNob3VsZFByb2Nlc3NCdXR0b25FdmVudChH
ZGtFdmVudEJ1dHRvbiopOworICAgIGludCBjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3Rr
V2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qKTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9jdXJyZW50
Q2xpY2tDb3VudDsKKyAgICBJbnRQb2ludCBtX3ByZXZpb3VzQ2xpY2tQb2ludDsKKyAgICB1bnNp
Z25lZCBpbnQgbV9wcmV2aW91c0NsaWNrQnV0dG9uOworICAgIGludCBtX3ByZXZpb3VzQ2xpY2tU
aW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTdhNjA3
YTE4OWI1NGI4NjRhNTk4ZmZiODU4NTNhNThkN2IzNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKQEAgLTAsMCArMSwxOTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrRHJh
Z0FuZERyb3BIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgor
I2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERyb3BwaW5n
Q29udGV4dCB7CisgICAgRHJvcHBpbmdDb250ZXh0KEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCisgICAgICAgIDogZ2RrQ29udGV4dChnZGtDb250
ZXh0KQorICAgICAgICAsIGRhdGFPYmplY3QoRGF0YU9iamVjdEd0azo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbGFzdE1vdGlvblBvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAsIGRyb3BIYXBwZW5l
ZChmYWxzZSkKKyAgICAgICAgLCBleGl0ZWRDYWxsYmFjaygwKQorICAgIHsKKyAgICB9CisKKyAg
ICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9i
amVjdEd0az4gZGF0YU9iamVjdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBsYXN0TW90aW9uUG9z
aXRpb247CisgICAgaW50IHBlbmRpbmdEYXRhUmVxdWVzdHM7CisgICAgYm9vbCBkcm9wSGFwcGVu
ZWQ7CisgICAgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrOworfTsKKwordHlwZWRl
ZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gRHJvcHBpbmdDb250
ZXh0TWFwOwordHlwZWRlZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgUmVmUHRyPERhdGFPYmpl
Y3RHdGs+ID4gRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDsKKworR3RrRHJhZ0FuZERyb3BIZWxwZXI6
On5HdGtEcmFnQW5kRHJvcEhlbHBlcigpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fZHJvcHBp
bmdDb250ZXh0cyk7Cit9CisKK2Jvb2wgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdF
bmQoR2RrRHJhZ0NvbnRleHQqIGRyYWdDb250ZXh0KQoreworICAgIERyYWdnaW5nRGF0YU9iamVj
dHNNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoZHJh
Z0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5k
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5y
ZW1vdmUoaXRlcmF0b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEd0a0RyYWdBbmRE
cm9wSGVscGVyOjpoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCogY29udGV4dCwgR3Rr
U2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbykKK3sKKyAgICBEcmFnZ2lu
Z0RhdGFPYmplY3RzTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0
cy5maW5kKGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVj
dHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZv
LCBpdGVyYXRvci0+dmFsdWUuZ2V0KCkpOworfQorCitzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0
YSB7CisgICAgRHJvcHBpbmdDb250ZXh0KiBjb250ZXh0OworICAgIEd0a0RyYWdBbmREcm9wSGVs
cGVyKiBnbHVlOworfTsKKworc3RhdGljIGdib29sZWFuIGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2Fs
bGJhY2soSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSkKK3sKKyAgICBkYXRhLT5nbHVlLT5oYW5k
bGVEcmFnTGVhdmVMYXRlcihkYXRhLT5jb250ZXh0KTsKKyAgICBkZWxldGUgZGF0YTsKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdM
ZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBEcm9wcGluZ0NvbnRl
eHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4
dC0+Z2RrQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIHZpZXcgZG9lc24ndCBrbm93
IGFib3V0IHRoZSBkcmFnIHlldCAodGhlcmUgYXJlIHN0aWxsIHBlbmRpbmcgZGF0YSkKKyAgICAv
LyByZXF1ZXN0cywgZG9uJ3QgdXBkYXRlIGl0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRy
YWcuCisgICAgaWYgKGNvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9IGNvbnRleHQtPmxhc3RNb3Rpb25Q
b3NpdGlvbjsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShjb250ZXh0LT5kYXRhT2JqZWN0LmdldCgp
LCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1Nj
cmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgRHJh
Z09wZXJhdGlvbk5vbmUpOworICAgIGNvbnRleHQtPmV4aXRlZENhbGxiYWNrKG1fd2lkZ2V0LCAm
ZHJhZ0RhdGEsIGNvbnRleHQtPmRyb3BIYXBwZW5lZCk7CisKKyAgICBtX2Ryb3BwaW5nQ29udGV4
dHMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICBkZWxldGUgY29udGV4dDsKK30KKwordm9pZCBHdGtE
cmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBnZGtDb250
ZXh0LCBEcmFnRXhpdGVkQ2FsbGJhY2sgZXhpdGVkQ2FsbGJhY2spCit7CisgICAgRHJvcHBpbmdD
b250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGdk
a0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIER1cmluZyBhIGRyb3AgR1RLKyB3aWxsIGZpcmUg
YSBkcmFnLWxlYXZlIHNpZ25hbCByaWdodCBiZWZvcmUgZmlyaW5nCisgICAgLy8gdGhlIGRyYWct
ZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9yIGRyYWctbGVhdmUgdG8gaGFwcGVu
IGFmdGVyCisgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJvcCwgc28gc2NoZWR1bGUgdGhlbSB0byBo
YXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KKyAgICBIYW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRh
ID0gbmV3IEhhbmRsZURyYWdMYXRlckRhdGE7CisgICAgZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9y
LT52YWx1ZTsKKyAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRDYWxsYmFjayA9IGV4aXRlZENhbGxi
YWNrOworICAgIGRhdGEtPmdsdWUgPSB0aGlzOworICAgIGdfdGltZW91dF9hZGQoMCwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxsYmFjayksIGRh
dGEpOworfQorCitzdGF0aWMgdm9pZCBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShEcm9wcGluZ0Nv
bnRleHQqIGRyb3BDb250ZXh0LCBHdGtXaWRnZXQqIHdpZGdldCwgZ3VpbnQgdGltZSkKK3sKKyAg
ICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCA9IGRyb3BDb250ZXh0LT5nZGtDb250ZXh0Owor
ICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNGb3JDb250ZXh0KHdpZGdldCwgZ2Rr
Q29udGV4dCkpOworICAgIGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID0gYWNjZXB0
YWJsZVRhcmdldHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWNjZXB0YWJs
ZVRhcmdldHMuc2l6ZSgpOyBpKyspCisgICAgICAgIGd0a19kcmFnX2dldF9kYXRhKHdpZGdldCwg
Z2RrQ29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSksIHRpbWUpOworfQorCitEYXRhT2Jq
ZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ01vdGlvbihHZGtEcmFnQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCB1bnNpZ25lZCB0aW1lKQor
eworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gMDsKKyAgICBEcm9wcGlu
Z0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQo
Y29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkg
eworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBuZXcgRHJvcHBpbmdDb250ZXh0KGNvbnRleHQs
IHBvc2l0aW9uKTsKKyAgICAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9w
cGluZ0NvbnRleHQpOworICAgICAgICBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShkcm9wcGluZ0Nv
bnRleHQsIG1fd2lkZ2V0LCB0aW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkcm9wcGluZ0Nv
bnRleHQgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1v
dGlvblBvc2l0aW9uID0gcG9zaXRpb247CisgICAgfQorCisgICAgLy8gRG9uJ3Qgc2VuZCBhbnkg
ZHJhZyBpbmZvcm1hdGlvbiB0byBXZWJDb3JlIHVudGlsIHdlJ3ZlIHJldHJpZXZlZCBhbGwKKyAg
ICAvLyB0aGUgZGF0YSBmb3IgdGhpcyBkcmFnIG9wZXJhdGlvbi4gT3RoZXJ3aXNlIHdlJ2QgaGF2
ZSB0byBibG9jayB0byB3YWl0CisgICAgLy8gZm9yIHRoZSBkcmFnJ3MgZGF0YS4KKyAgICBBU1NF
UlQoZHJvcHBpbmdDb250ZXh0KTsKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzID4gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZHJvcHBpbmdD
b250ZXh0LT5kYXRhT2JqZWN0LmdldCgpOworfQorCitEYXRhT2JqZWN0R3RrKiBHdGtEcmFnQW5k
RHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChHZGtEcmFnQ29udGV4dCogY29udGV4
dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgdW5zaWduZWQgaW5mbywgSW50UG9p
bnQmIHBvc2l0aW9uKQoreworICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0
b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERy
b3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGRy
b3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0tOworICAgIFBhc3RlYm9hcmRIZWxw
ZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRh
KHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7
CisKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIFRoZSBjb29yZGluYXRlcyBwYXNzZWQgdG8gZHJhZy1kYXRh
LXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCisgICAgLy8gaW5hY2N1cmF0ZSBpbiBEUlQs
IHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90aW9uIGV2ZW50LgorICAgIHBv
c2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247CisKKyAgICAvLyBJ
ZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdn
aW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5kYXRhT2Jq
ZWN0LmdldCgpOworfQorCitEYXRhT2JqZWN0R3RrKiBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgRHJvcHBpbmdDb250
ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRl
eHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBp
dGVyYXRvci0+dmFsdWU7CisgICAgZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFwcGVuZWQgPSB0cnVl
OworCisgICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKK30KKwor
dm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6c3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQsIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7CisgICAgbV9kcmFnZ2luZ0RhdGFP
YmplY3RzLnNldChjb250ZXh0LCBkYXRhT2JqZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE1NGIwMmM0YjdhM2Y4NzMwMTM1Y2RmNjE2NGFlMDY5ZmFlM2Q1OTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdhbGlhIFMuTC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgR3RrRHJhZ0FuZERyb3BIZWxwZXJf
aAorI2RlZmluZSBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCisKKyNpbmNsdWRlICJEYXRhT2JqZWN0
R3RrLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RydWN0IERyb3BwaW5nQ29udGV4dDsKK2NsYXNzIERyYWdEYXRhOworCit0
eXBlZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dpZGdldCosIERyYWdEYXRhKiwg
Ym9vbCBkcm9wSGFwcGVuZWQpOworCitjbGFzcyBHdGtEcmFnQW5kRHJvcEhlbHBlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxwZXIpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgR3RrRHJhZ0FuZERyb3BIZWxwZXIoKQor
ICAgICAgICA6IG1fd2lkZ2V0KDApCisgICAgeworICAgIH0KKyAgICB+R3RrRHJhZ0FuZERyb3BI
ZWxwZXIoKTsKKworICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KSB7IG1fd2lk
Z2V0ID0gd2lkZ2V0OyB9CisgICAgYm9vbCBoYW5kbGVEcmFnRW5kKEdka0RyYWdDb250ZXh0Kik7
CisgICAgdm9pZCBoYW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCosIEd0a1NlbGVjdGlv
bkRhdGEqLCBndWludCBpbmZvKTsKKyAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29u
dGV4dCosIERyYWdFeGl0ZWRDYWxsYmFjayk7CisgICAgdm9pZCBoYW5kbGVEcmFnTGVhdmVMYXRl
cihEcm9wcGluZ0NvbnRleHQqKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnTW90aW9u
KEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCB1bnNpZ25lZCB0aW1lKTsKKyAgICBE
YXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiwgR3Rr
U2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8sIEludFBvaW50Jik7CisgICAgRGF0YU9iamVj
dEd0ayogaGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqKTsKKyAgICB2b2lkIHN0YXJ0ZWRE
cmFnKEdka0RyYWdDb250ZXh0KiwgRGF0YU9iamVjdEd0ayopOworCitwcml2YXRlOgorICAgIEd0
a1dpZGdldCogbV93aWRnZXQ7CisgICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5n
Q29udGV4dCo+IG1fZHJvcHBpbmdDb250ZXh0czsKKyAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0
KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gbV9kcmFnZ2luZ0RhdGFPYmplY3RzOworfTsKKwor
fQorCisjZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3Rr
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5OTgwYjU0NmEyYTQ5YzY0NjA1NDUx
MTVlMDQ2YTEzNjViYzQyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtJbnB1dE1ldGhvZEZpbHRlci5o
IgorCisjaW5jbHVkZSAiR093blB0ckd0ay5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIK
KyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisvLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBrZXkg
ZXZlbnQgY29kZSBpcyAyOTkgb3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bworLy8gZW1pdCB0
aGlzIGNvZGUgZm9yIHdlYiBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRzIHRy
aWdnZXIKKy8vIGNvbXBvc2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1aXZh
bGVudCwgc28gd2Ugc2VuZCBWb2lkU3ltYm9sCisvLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3Jt
S2V5RXZlbnQga25vd3MgdG8gY29udmVydCB0aGlzIGNvZGUgaW50bworLy8gVktfUFJPQ0VTU0tF
WS4KK2NvbnN0IGludCBnQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtfS0VZX1ZvaWRTeW1i
b2w7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0Q2Fs
bGJhY2soR3RrSU1Db250ZXh0KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcsIEd0a0lu
cHV0TWV0aG9kRmlsdGVyKiBmaWx0ZXIpCit7CisgICAgZmlsdGVyLT5oYW5kbGVDb21taXQoY29t
cG9zaXRpb25TdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnRDYWxs
YmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAg
IGZpbHRlci0+aGFuZGxlUHJlZWRpdFN0YXJ0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZVBy
ZWVkaXRDaGFuZ2VkQ2FsbGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIq
IGZpbHRlcikKK3sKKyAgICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Cit9CisKK3N0
YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1
dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgp
OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQoreworICAgIEdka1dpbmRvdyogd2luZG93
ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7CisgICAgQVNTRVJUKHdpbmRvdyk7Cisg
ICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5jb250ZXh0KCksIHdp
bmRvdyk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHdGtXaWRn
ZXQqIHdpZGdldCkKK3sKKyAgICBBU1NFUlQoIW1fd2lkZ2V0KTsKKworICAgIG1fd2lkZ2V0ID0g
d2lkZ2V0OworICAgIGlmIChndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRnZXQpKQorICAgICAg
ICBoYW5kbGVXaWRnZXRSZWFsaXplKG1fd2lkZ2V0LCB0aGlzKTsKKyAgICBlbHNlCisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0soaGFu
ZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVy
OjpzZXRDdXJzb3JSZWN0KGNvbnN0IEludFJlY3QmIGN1cnNvclJlY3QpCit7CisgICAgLy8gRG9u
J3QgbW92ZSB0aGUgd2luZG93IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1vcmUg
dGhhbiAxMAorICAgIC8vIHBpeGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0aGUg
d2luZG93IGZsYXNoIGR1cmluZyBtaW5vcgorICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4KKyAg
ICBzdGF0aWMgY29uc3QgaW50IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsKKyAg
ICBpZiAoY3Vyc29yUmVjdC5sb2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9sYXN0
Q2FyZUxvY2F0aW9uKSA8IHdpbmRvd01vdmVtZW50VGhyZXNob2xkKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2xhc3RDYXJlTG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7CisgICAg
SW50UmVjdCB0cmFuc2xhdGVkUmVjdCA9IGN1cnNvclJlY3Q7CisKKyAgICBBU1NFUlQobV93aWRn
ZXQpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9h
bGxvY2F0aW9uKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgdHJhbnNsYXRlZFJlY3QubW92
ZShhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisKKyAgICBHZGtSZWN0YW5nbGUgZ2RrQ3Vy
c29yUmVjdCA9IGN1cnNvclJlY3Q7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2N1cnNvcl9sb2Nh
dGlvbihtX2NvbnRleHQuZ2V0KCksICZnZGtDdXJzb3JSZWN0KTsKK30KKworR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6Okd0a0lucHV0TWV0aG9kRmlsdGVyKCkKKyAgICA6IG1fY3Vyc29yT2Zmc2V0KDAp
CisgICAgLCBtX2NvbnRleHQoYWRvcHRHUmVmKGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCkpKQor
ICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fZW5hYmxlZChmYWxzZSkKKyAgICAsIG1fY29tcG9z
aW5nVGV4dEN1cnJlbnRseShmYWxzZSkKKyAgICAsIG1fZmlsdGVyaW5nS2V5RXZlbnQoZmFsc2Up
CisgICAgLCBtX3ByZWVkaXRDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9wcmV2ZW50TmV4dENvbW1p
dChmYWxzZSkKKyAgICAsIG1fanVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCisgICAgLCBtX2xhc3RG
aWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lkU3ltYm9sKQorewor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19DQUxMQkFD
SyhoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9j
b250ZXh0LmdldCgpLCAicHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdFN0
YXJ0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQo
KSwgInByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJl
ZWRpdC1lbmQiLCBHX0NBTExCQUNLKGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOwor
fQorCitHdGtJbnB1dE1ldGhvZEZpbHRlcjo6fkd0a0lucHV0TWV0aG9kRmlsdGVyKCkKK3sKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOworICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayks
IHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRl
eHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRFbmRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3dp
ZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMp
OworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBtX2VuYWJsZWQgPSBlbmFibGVkOworICAgIGlmIChlbmFibGVkKQorICAgICAg
ICBndGtfaW1fY29udGV4dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOworICAgIGVsc2UKKyAg
ICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Cit9CisKK2Jv
b2wgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCkKK3sKKyAgICBpZiAoIWNhbkVkaXQoKSB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm4g
c2VuZFNpbXBsZUtleUV2ZW50KGV2ZW50KTsKKworICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxz
ZTsKKyAgICBtX2ZpbHRlcmluZ0tleUV2ZW50ID0gdHJ1ZTsKKworICAgIHVuc2lnbmVkIGludCBs
YXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQ
cmVzc0NvZGVXaXRoTm9SZXN1bHRzOworICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0
aE5vUmVzdWx0cyA9IEdES19LRVlfVm9pZFN5bWJvbDsKKworICAgIGJvb2wgZmlsdGVyZWQgPSBn
dGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7Cisg
ICAgbV9maWx0ZXJpbmdLZXlFdmVudCA9IGZhbHNlOworCisgICAgYm9vbCBqdXN0U2VudEZha2VL
ZXlVcCA9IG1fanVzdFNlbnRGYWtlS2V5VXA7CisgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZh
bHNlOworICAgIGlmIChqdXN0U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZ
X1JFTEVBU0UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gU2ltcGxlIGlucHV0IG1l
dGhvZHMgd29yayBzdWNoIHRoYXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZQorICAg
IC8vIGNvbW1pdCBzaWduYWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25zIGFuZCB0cmVhdCB0
aGVtIGFzIG5vcm1hbAorICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0IHN0
cmluZyBhcyB0aGUga2V5IGNoYXJhY3Rlci4KKyAgICBpZiAoZmlsdGVyZWQgJiYgIW1fY29tcG9z
aW5nVGV4dEN1cnJlbnRseSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBv
c2l0aW9uLmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kU2ltcGxl
S2V5RXZlbnQoZXZlbnQsIG1fY29uZmlybWVkQ29tcG9zaXRpb24pOworICAgICAgICBtX2NvbmZp
cm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgaWYgKGZpbHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1MpIHsK
KyAgICAgICAgaWYgKCFtX3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24u
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRydWU7
CisgICAgICAgICAgICBtX2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBl
dmVudC0+a2V5dmFsOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHJlc3VsdCA9IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoZXZl
bnQpOworICAgICAgICBpZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICAgICAgICAg
IG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZmlsdGVyZWQg
YSBrZXkgcHJlc3MgZXZlbnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3VwcHJlc3MKKyAg
ICAvLyB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9pZCBjb25mdXNp
bmcgdGhlIHdlYiBjb250ZW50LgorICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVB
U0UgJiYgbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBldmVudC0+a2V5
dmFsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBrZXlz
dHJva2Ugd2FzIGVpdGhlcjoKKyAgICAvLyAxLiBVbmZpbHRlcmVkCisgICAgLy8gMi4gQSBmaWx0
ZXJlZCBrZXl1cCBldmVudC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRvZXNu
J3QKKyAgICAvLyAgICBldmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBjb21w
b3NpdGlvbiByZXN1bHRzIGJlZm9yZQorICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCisgICAgLy8g
Qm90aCBtaWdodCBoYXZlIGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgorICAgIC8vCisgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUg
dGhlIGV2ZW50CisgICAgLy8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0IHdh
eS4gRm9yIGV4YW1wbGUgKHRha2VuIGZyb20KKyAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNlKSwg
dGhlIGxhdGluLXBvc3QgaW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKKyAgICAvLyB3
aGVuIHlvdSBwcmVzcyAnYScgYW5kIHRoZW4gYmFja3NwYWNlOgorICAgIC8vICAxLiBrZXlkb3du
ICdhJyAoZmlsdGVyZWQpCisgICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKKyAgICAv
LyAgMy4ga2V5dXAgJ2EnICh1bmZpbHRlcmVkKQorICAgIC8vICA0LiBrZXlkb3duIEJhY2tzcGFj
ZSAodW5maWx0ZXJlZCkKKyAgICAvLyAgNS4gY29tbWl0ICJhIgorICAgIC8vICA2LiBwcmVlZGl0
IGVuZAorICAgIGlmICghbV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAg
IGNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQorICAgICAg
ICB1cGRhdGVQcmVlZGl0KCk7CisgICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7
Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJlc3Mo
KQoreworICAgIC8vIENvbmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEgc2Vs
ZWN0aW9uIGNoYW5nZSwgd2hpY2gKKyAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53YW50
ZWQgYWN0aW9ucyBvbiB0aGUgY29udGV4dCwgc28gd2UgcHJldmVudAorICAgIC8vIHRoYXQgYnkg
c2V0dGluZyBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCisgICAgaWYgKG1fY29t
cG9zaW5nVGV4dEN1cnJlbnRseSkKKyAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigp
OworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOworICAgIGNhbmNlbENvbnRl
eHRDb21wb3NpdGlvbigpOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNldENv
bnRleHQoKQoreworCisgICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJDb3Jl
IGNvbXBvc2l0aW9uIGhlcmUsIGluIGNhc2UgdGhlCisgICAgLy8gY29tcG9zaXRpb24gd2FzIHNl
dCBvdXRzaWRlIHRoZSBHVEsrIElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgorICAgIC8vIGlu
c3RhbmNlKSBhbmQgd2UgYXJlbid0IHRyYWNraW5nIGl0LgorICAgIGNhbmNlbEN1cnJlbnRDb21w
b3NpdGlvbigpOworCisgICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKKyAgICBjYW5j
ZWxDb250ZXh0Q29tcG9zaXRpb24oKTsKK30KKwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6
Y2FuY2VsQ29udGV4dENvbXBvc2l0aW9uKCkKK3sKKyAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0g
IW1fcHJlZWRpdC5pc0VtcHR5KCk7CisKKyAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2NvbnRl
eHQuZ2V0KCkpOworCisgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisgICAg
bV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOworICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOwor
ICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBTdHJpbmcoKTsKK30KKwordm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6bm90aWZ5Rm9jdXNlZEluKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0cnVl
OworICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Cit9CisKK3Zv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQoreworICAgIGlmICgh
bV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb21wb3NpbmdUZXh0Q3Vy
cmVudGx5KQorICAgICAgICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgY2FuY2Vs
Q29udGV4dENvbXBvc2l0aW9uKCk7CisgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29u
dGV4dC5nZXQoKSk7CisgICAgbV9lbmFibGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3RrSW5wdXRN
ZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7CisgICAgY29uZmlybUNvbXBvc2l0
aW9uVGV4dChtX2NvbmZpcm1lZENvbXBvc2l0aW9uKTsKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0
aW9uID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVBy
ZWVkaXQoKQoreworICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7Cisg
ICAgbV9wcmVlZGl0Q2hhbmdlZCA9IGZhbHNlOworfQorCit2b2lkIEd0a0lucHV0TWV0aG9kRmls
dGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1Rv
U2VuZCByZXN1bHRzVG9TZW5kKQoreworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19l
dmVudF9uZXcoR0RLX0tFWV9QUkVTUykpOworICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJS
RU5UX1RJTUU7CisgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNv
ZGU7CisgICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwg
cmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CisKKyAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9u
ID0gU3RyaW5nKCk7CisgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikKKyAgICAg
ICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CisKKyAgICBldmVudC0+dHlwZSA9
IEdES19LRVlfUkVMRUFTRTsKKyAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXksIFN0
cmluZygpLCBFdmVudEZha2VkKTsKKyAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gdHJ1ZTsKK30K
Kwordm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNv
bXBvc2l0aW9uU3RyaW5nKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAg
ICAgIG1fcHJldmVudE5leHRDb21taXQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbmZpcm1l
ZENvbXBvc2l0aW9uLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5nKSk7
CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtleSBl
dmVudCwganVzdCBzZW5kCisgICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBoYW5k
bGluZyBhIGtleSBldmVudCwgd2UnbGwgZGVjaWRlCisgICAgLy8gbGF0ZXIgaG93IHRvIGhhbmRs
ZSB0aGlzLgorICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgc2VuZENvbXBv
c2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKK30KKwordm9p
ZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKK3sKKyAgICBpZiAo
bV9wcmV2ZW50TmV4dENvbW1pdCB8fCAhbV9lbmFibGVkKQorICAgICAgICByZXR1cm47CisgICAg
bV9wcmVlZGl0Q2hhbmdlZCA9IHRydWU7CisgICAgbV9wcmVlZGl0ID0gIiI7Cit9CisKK3ZvaWQg
R3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
IW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR093blB0cjxnY2hhcj4gbmV3UHJl
ZWRpdDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0Lmdl
dCgpLCAmbmV3UHJlZWRpdC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKKworICAgIGlm
IChtX3ByZXZlbnROZXh0Q29tbWl0KSB7CisgICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRpdC5n
ZXQoKSkgPiAwKQorICAgICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wcmVlZGl0ID0g
U3RyaW5nOjpmcm9tVVRGOChuZXdQcmVlZGl0LmdldCgpKTsKKyAgICBtX2N1cnNvck9mZnNldCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50Piht
X3ByZWVkaXQubGVuZ3RoKCkpKTsKKworICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9ICFt
X3ByZWVkaXQuaXNFbXB0eSgpOworICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOworCisgICAg
aWYgKCFtX2ZpbHRlcmluZ0tleUV2ZW50KQorICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVl
ZGl0V2l0aEZha2VLZXlFdmVudHMoUHJlZWRpdCk7Cit9CisKK3ZvaWQgR3RrSW5wdXRNZXRob2RG
aWx0ZXI6OmhhbmRsZVByZWVkaXRFbmQoKQoreworICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0
IHx8ICFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJlZWRpdCA9IFN0cmlu
ZygpOworICAgIG1fY3Vyc29yT2Zmc2V0ID0gMDsKKyAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1
ZTsKKworICAgIGlmICghbV9maWx0ZXJpbmdLZXlFdmVudCkKKyAgICAgICAgdXBkYXRlUHJlZWRp
dCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0
aG9kRmlsdGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGU0ODI1MzQ4OGQxMDRlODU0M2JhMGYxMjhhYTYzMzQxZWNhN2I2NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIu
aApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAorI2RlZmluZSBHdGtJbnB1dE1ldGhvZEZp
bHRlcl9oCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
dHlwZWRlZiBzdHJ1Y3QgX0d0a0lNQ29udGV4dCBHdGtJTUNvbnRleHQ7Cit0eXBlZGVmIHN0cnVj
dCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
dGtJbnB1dE1ldGhvZEZpbHRlciB7CitwdWJsaWM6CisgICAgR3RrSW5wdXRNZXRob2RGaWx0ZXIo
KTsKKyAgICB+R3RrSW5wdXRNZXRob2RGaWx0ZXIoKTsKKworICAgIGJvb2wgZmlsdGVyS2V5RXZl
bnQoR2RrRXZlbnRLZXkqKTsKKyAgICB2b2lkIG5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsKKyAg
ICB2b2lkIG5vdGlmeUZvY3VzZWRJbigpOworICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOwor
ICAgIHZvaWQgcmVzZXRDb250ZXh0KCk7CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisg
ICAgdm9pZCBoYW5kbGVDb21taXQoY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcpOworICAg
IHZvaWQgaGFuZGxlUHJlZWRpdENoYW5nZWQoKTsKKyAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFy
dCgpOworICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOworCisgICAgdm9pZCBjb25maXJtQ29t
cG9zaXRpb24oKTsKKyAgICB2b2lkIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigpOworICAgIHZv
aWQgdXBkYXRlUHJlZWRpdCgpOworICAgIHZvaWQgc2V0Q3Vyc29yUmVjdChjb25zdCBJbnRSZWN0
JiBsb2NhdGlvbik7CisKKyAgICBHdGtJTUNvbnRleHQqIGNvbnRleHQoKSB7IHJldHVybiBtX2Nv
bnRleHQuZ2V0KCk7IH0KKworICAgIGVudW0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIHsKKyAg
ICAgICAgRXZlbnRGYWtlZCwKKyAgICAgICAgRXZlbnROb3RGYWtlZAorICAgIH07CisKK3Byb3Rl
Y3RlZDoKKyAgICBlbnVtIFJlc3VsdHNUb1NlbmQgeworICAgICAgICBQcmVlZGl0ID0gMSA8PCAx
LAorICAgICAgICBDb21wb3NpdGlvbiA9IDEgPDwgMiwKKyAgICAgICAgUHJlZWRpdEFuZENvbXBv
c2l0aW9uID0gUHJlZWRpdCArIENvbXBvc2l0aW9uCisgICAgfTsKKworICAgIHZvaWQgc2V0V2lk
Z2V0KEd0a1dpZGdldCopOworICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0cmluZyBl
dmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5v
dEZha2VkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlv
blJlc3VsdHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0
aW9uLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nIGNvbXBvc2l0aW9uKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JPZmZzZXQpID0gMDsKKworICAg
IFdURjo6U3RyaW5nIG1fY29uZmlybWVkQ29tcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9w
cmVlZGl0OworICAgIGludCBtX2N1cnNvck9mZnNldDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNl
bmRDb21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsK
KworICAgIEdSZWZQdHI8R3RrSU1Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgR3RrV2lkZ2V0KiBt
X3dpZGdldDsKKyAgICBib29sIG1fZW5hYmxlZDsKKyAgICBib29sIG1fY29tcG9zaW5nVGV4dEN1
cnJlbnRseTsKKyAgICBib29sIG1fZmlsdGVyaW5nS2V5RXZlbnQ7CisgICAgYm9vbCBtX3ByZWVk
aXRDaGFuZ2VkOworICAgIGJvb2wgbV9wcmV2ZW50TmV4dENvbW1pdDsKKyAgICBib29sIG1fanVz
dFNlbnRGYWtlS2V5VXA7CisgICAgdW5zaWduZWQgaW50IG1fbGFzdEZpbHRlcmVkS2V5UHJlc3ND
b2RlV2l0aE5vUmVzdWx0czsKKyAgICBJbnRQb2ludCBtX2xhc3RDYXJlTG9jYXRpb247Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHdGtJbnB1dE1ldGhvZEZpbHRl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNm
MWI2ODBkYmFiYTM2MWZkMWM1MDNkNGI2NmZjOWExYTljZTI5OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHdGtQbHVnaW5XaWRnZXQuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3RrUGx1Z2luV2lk
Z2V0OjpHdGtQbHVnaW5XaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCisgICAgOiBXaWRnZXQod2lk
Z2V0KQoreworICAgIGd0a193aWRnZXRfaGlkZSh3aWRnZXQpOworfQorCitHdGtQbHVnaW5XaWRn
ZXQ6On5HdGtQbHVnaW5XaWRnZXQoKQoreworICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19D
T05UQUlORVIoZ3RrX3dpZGdldF9nZXRfcGFyZW50KHBsYXRmb3JtV2lkZ2V0KCkpKSwgcGxhdGZv
cm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgR3RrUGx1Z2luV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiBjb3JlUmVjdCkKK3sKKyAgICAvKiBubyBuZWVkIHRvICovCisgICAgaWYg
KCFndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhw
bGF0Zm9ybVdpZGdldCgpKTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSBjb3JlUmVjdDsKKyAgICBnZGtfd2luZG93X2ludmFsaWRh
dGVfcmVjdCh3aW5kb3csICZyZWN0LCBGQUxTRSk7Cit9CisKK3ZvaWQgR3RrUGx1Z2luV2lkZ2V0
OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCit7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWVSZWN0KCk7
CisgICAgSW50UG9pbnQgbG9jID0gcGFyZW50KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2Nh
dGlvbigpKTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworCisgICAgZ3RrX3dpZGdldF9zZXRf
c2l6ZV9yZXF1ZXN0KHBsYXRmb3JtV2lkZ2V0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHBsYXRmb3JtV2lkZ2V0KCksICZhbGxv
Y2F0aW9uKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNzNlYzU5MGIy
ZjIyMWUzYmI5ODE3ZDBkMzM3ZWUxZjQzM2Q3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHdGtQbHVnaW5XaWRnZXRfaAorI2RlZmluZSBH
dGtQbHVnaW5XaWRnZXRfaAorCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICBjbGFzcyBHdGtQbHVnaW5XaWRnZXQgOiBwdWJsaWMgV2lkZ2V0IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIEd0a1BsdWdpbldpZGdldChHdGtXaWRnZXQqKTsKKyAgICAgICAgdmly
dHVhbCB+R3RrUGx1Z2luV2lkZ2V0KCk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYpOworICAgICAgICB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7CisgICAgfTsK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVu
dS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmY1N2ExN2RjMzIzYmNmN2IzNTdiMjc3ZjA4MGFkZWYwOTEzNTJmNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcApAQCAtMCwwICsxLDI0MiBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0
aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgY29uc3QgdWludDMyX3QgZ1NlYXJjaFRpbWVvdXRNcyA9IDEwMDA7CisKK0d0a1BvcHVwTWVu
dTo6R3RrUG9wdXBNZW51KCkKKyAgICA6IG1fcG9wdXAoZ3RrX21lbnVfbmV3KCkpCisgICAgLCBt
X3ByZXZpb3VzS2V5RXZlbnRDaGFyYWN0ZXIoMCkKKyAgICAsIG1fY3VycmVudGx5U2VsZWN0ZWRN
ZW51SXRlbSgwKQoreworICAgIG1fa2V5UHJlc3NIYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0
KG1fcG9wdXAuZ2V0KCksICJrZXktcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKEd0a1BvcHVwTWVu
dTo6a2V5UHJlc3NFdmVudENhbGxiYWNrKSwgdGhpcyk7Cit9CisKK0d0a1BvcHVwTWVudTo6fkd0
a1BvcHVwTWVudSgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fcG9wdXAu
Z2V0KCksIG1fa2V5UHJlc3NIYW5kbGVySUQpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6Y2xl
YXIoKQoreworICAgIGd0a19jb250YWluZXJfZm9yZWFjaChHVEtfQ09OVEFJTkVSKG1fcG9wdXAu
Z2V0KCkpLCByZWludGVycHJldF9jYXN0PEd0a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRlbSksIHRo
aXMpOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6YXBwZW5kU2VwYXJhdG9yKCkKK3sKKyAgICBH
dGtXaWRnZXQqIG1lbnVJdGVtID0gZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCk7CisgICAg
Z3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcG9wdXAuZ2V0KCkpLCBtZW51
SXRlbSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJdGVtKTsKK30KKwordm9pZCBHdGtQb3B1
cE1lbnU6OmFwcGVuZEl0ZW0oR3RrQWN0aW9uKiBhY3Rpb24pCit7CisgICAgR3RrV2lkZ2V0KiBt
ZW51SXRlbSA9IGd0a19hY3Rpb25fY3JlYXRlX21lbnVfaXRlbShhY3Rpb24pOworICAgIGd0a193
aWRnZXRfc2V0X3Rvb2x0aXBfdGV4dChtZW51SXRlbSwgZ3RrX2FjdGlvbl9nZXRfdG9vbHRpcChh
Y3Rpb24pKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1lbnVJdGVtLCAic2VsZWN0IiwgR19DQUxM
QkFDSyhHdGtQb3B1cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayksIHRoaXMpOworICAgIGd0a19t
ZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgbWVudUl0ZW0p
OworCisgICAgaWYgKGd0a19hY3Rpb25faXNfdmlzaWJsZShhY3Rpb24pKQorICAgICAgICBndGtf
d2lkZ2V0X3Nob3cobWVudUl0ZW0pOworfQorCit2b2lkIEd0a1BvcHVwTWVudTo6cG9wVXAoY29u
c3QgSW50U2l6ZSYgbWVudVNpemUsIGNvbnN0IEludFBvaW50JiBtZW51UG9zaXRpb24sIGludCBp
dGVtQ291bnQsIGludCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2ZW50KiBldmVudCkKK3sKKyAg
ICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOworICAgIG1fbWVudVBvc2l0aW9uID0gbWVudVBv
c2l0aW9uOworICAgIGd0a19tZW51X3NldF9hY3RpdmUoR1RLX01FTlUobV9wb3B1cC5nZXQoKSks
IHNlbGVjdGVkSXRlbSk7CisKKyAgICAvLyBUaGlzIGFwcHJvYWNoIGZvbGxvd3MgdGhlIG9uZSBp
biBndGtjb21ib2JveC5jLgorICAgIEd0a1JlcXVpc2l0aW9uIHJlcXVpc2l0aW9uOworICAgIGd0
a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChtX3BvcHVwLmdldCgpLCAtMSwgLTEpOworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCisgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QobV9wb3B1cC5n
ZXQoKSwgJnJlcXVpc2l0aW9uKTsKKyNlbHNlCisgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVk
X3NpemUobV9wb3B1cC5nZXQoKSwgJnJlcXVpc2l0aW9uLCAwKTsKKyNlbmRpZgorCisgICAgZ3Rr
X3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCksIHN0ZDo6bWF4KG1lbnVTaXpl
LndpZHRoKCksIHJlcXVpc2l0aW9uLndpZHRoKSwgLTEpOworCisgICAgR0xpc3QqIGNoaWxkcmVu
ID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgp
KSk7CisgICAgR0xpc3QqIHAgPSBjaGlsZHJlbjsKKyAgICBpZiAoaXRlbUNvdW50KSB7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlbUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlm
IChpID4gc2VsZWN0ZWRJdGVtKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBHdGtXaWRnZXQqIGl0ZW0gPSByZWludGVycHJldF9jYXN0PEd0a1dpZGdldCo+KHAtPmRhdGEp
OworICAgICAgICAgICAgR3RrUmVxdWlzaXRpb24gaXRlbVJlcXVpc2l0aW9uOworI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCisgICAgICAgICAgICBndGtfd2lkZ2V0X2dldF9jaGlsZF9yZXF1aXNp
dGlvbihpdGVtLCAmaXRlbVJlcXVpc2l0aW9uKTsKKyNlbHNlCisgICAgICAgICAgICBndGtfd2lk
Z2V0X2dldF9wcmVmZXJyZWRfc2l6ZShpdGVtLCAmaXRlbVJlcXVpc2l0aW9uLCAwKTsKKyNlbmRp
ZgorICAgICAgICAgICAgbV9tZW51UG9zaXRpb24uc2V0WShtX21lbnVQb3NpdGlvbi55KCkgLSBp
dGVtUmVxdWlzaXRpb24uaGVpZ2h0KTsKKworICAgICAgICAgICAgcCA9IGdfbGlzdF9uZXh0KHAp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkg
dGhlIGVtcHR5IHBvcHVwIGluIHRoZSBjb21ibyBib3ggYXJlYS4KKyAgICAgICAgbV9tZW51UG9z
aXRpb24uc2V0WShtX21lbnVQb3NpdGlvbi55KCkgLSBtZW51U2l6ZS5oZWlnaHQoKSAvIDIpOwor
ICAgIH0KKyAgICBnX2xpc3RfZnJlZShjaGlsZHJlbik7CisKKyAgICBndWludCBidXR0b247Cisg
ICAgZ3VpbnQzMiBhY3RpdmF0ZVRpbWU7CisgICAgaWYgKGV2ZW50KSB7CisgICAgICAgIGJ1dHRv
biA9IGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MgPyBldmVudC0+YnV0dG9uLmJ1dHRv
biA6IDE7CisgICAgICAgIGFjdGl2YXRlVGltZSA9IGdka19ldmVudF9nZXRfdGltZShldmVudCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnV0dG9uID0gMTsKKyAgICAgICAgYWN0aXZhdGVUaW1l
ID0gR0RLX0NVUlJFTlRfVElNRTsKKyAgICB9CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgor
ICAgIGd0a19tZW51X3BvcHVwKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCAwLCAwLCByZWludGVy
cHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhp
cywgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOworI2Vsc2UKKyAgICBndGtfbWVudV9wb3B1cF9mb3Jf
ZGV2aWNlKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBldmVudCA/IGdka19ldmVudF9nZXRfZGV2
aWNlKGV2ZW50KSA6IDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwg
dGhpcywgMCwgYnV0dG9uLCBhY3RpdmF0ZVRpbWUpOworI2VuZGlmCit9CisKK3ZvaWQgR3RrUG9w
dXBNZW51Ojpwb3BEb3duKCkKK3sKKyAgICBndGtfbWVudV9wb3Bkb3duKEdUS19NRU5VKG1fcG9w
dXAuZ2V0KCkpKTsKKyAgICByZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgpOworfQorCit2b2lkIEd0
a1BvcHVwTWVudTo6bWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1BvcHVwTWVu
dSogcG9wdXBNZW51KQoreworICAgIEFTU0VSVChwb3B1cE1lbnUtPm1fcG9wdXApOworICAgIGd0
a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocG9wdXBNZW51LT5tX3BvcHVwLmdldCgp
KSwgd2lkZ2V0KTsKK30KKwordm9pZCBHdGtQb3B1cE1lbnU6Om1lbnVQb3NpdGlvbkZ1bmN0aW9u
KEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBHdGtQb3B1cE1l
bnUqIHBvcHVwTWVudSkKK3sKKyAgICAqeCA9IHBvcHVwTWVudS0+bV9tZW51UG9zaXRpb24ueCgp
OworICAgICp5ID0gcG9wdXBNZW51LT5tX21lbnVQb3NpdGlvbi55KCk7CisgICAgKnB1c2hJbiA9
IHRydWU7Cit9CisKK3ZvaWQgR3RrUG9wdXBNZW51OjpyZXNldFR5cGVBaGVhZEZpbmRTdGF0ZSgp
Cit7CisgICAgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtID0gMDsKKyAgICBtX3ByZXZpb3Vz
S2V5RXZlbnRDaGFyYWN0ZXIgPSAwOworICAgIG1fY3VycmVudFNlYXJjaFN0cmluZyA9ICIiOwor
fQorCitib29sIEd0a1BvcHVwTWVudTo6dHlwZUFoZWFkRmluZChHZGtFdmVudEtleSogZXZlbnQp
Cit7CisgICAgLy8gSWYgd2Ugd2VyZSBnaXZlbiBhIG5vbi1wcmludGFibGUgY2hhcmFjdGVyIGp1
c3Qgc2tpcCBpdC4KKyAgICBndW5pY2hhciB1bmljb2RlQ2hhcmFjdGVyID0gZ2RrX2tleXZhbF90
b191bmljb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGlmICghZ191bmljaGFyX2lzcHJpbnQodW5p
Y29kZUNoYXJhY3RlcikpIHsKKyAgICAgICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGdsb25nIGNoYXJhY3RlcnNXcml0dGVu
OworICAgIEdPd25QdHI8Z3VuaWNoYXIyPiB1dGYxNlN0cmluZyhnX3VjczRfdG9fdXRmMTYoJnVu
aWNvZGVDaGFyYWN0ZXIsIDEsIDAsICZjaGFyYWN0ZXJzV3JpdHRlbiwgMCkpOworICAgIGlmICgh
dXRmMTZTdHJpbmcpIHsKKyAgICAgICAgcmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgdGhl
IHNhbWUgYXMgdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGUgdXNlciBpcyBwcm9iYWJseSB0cnlpbmcg
dG8KKyAgICAvLyBjeWNsZSB0aHJvdWdoIHRoZSBtZW51bGlzdCBlbnRyaWVzLiBUaGlzIG1hdGNo
ZXMgdGhlIFdlYkNvcmUgYmVoYXZpb3IgZm9yIGNvbGxhcHNlZAorICAgIC8vIG1lbnVsaXN0cy4K
KyAgICBib29sIHJlcGVhdGluZ0NoYXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXIgIT0gbV9wcmV2
aW91c0tleUV2ZW50Q2hhcmFjdGVyOworICAgIGlmIChldmVudC0+dGltZSAtIG1fcHJldmlvdXNL
ZXlFdmVudFRpbWVzdGFtcCA+IGdTZWFyY2hUaW1lb3V0TXMpCisgICAgICAgIG1fY3VycmVudFNl
YXJjaFN0cmluZyA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJpbmcu
Z2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbik7CisgICAgZWxzZSBpZiAocmVwZWF0aW5nQ2hhcmFj
dGVyKQorICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcuYXBwZW5kKFN0cmluZyhyZWludGVy
cHJldF9jYXN0PFVDaGFyKj4odXRmMTZTdHJpbmcuZ2V0KCkpLCBjaGFyYWN0ZXJzV3JpdHRlbikp
OworCisgICAgbV9wcmV2aW91c0tleUV2ZW50VGltZXN0YW1wID0gZXZlbnQtPnRpbWU7CisgICAg
bV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyID0gdW5pY29kZUNoYXJhY3RlcjsKKworICAgIC8v
IExpa2UgdGhlIENocm9taXVtIHBvcnQsIHdlIGNhc2UgZm9sZCBiZWZvcmUgc2VhcmNoaW5nLCBi
ZWNhdXNlIAorICAgIC8vIHN0cm5jbXAgZG9lcyBub3QgaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0
ZXJzLgorICAgIEdPd25QdHI8Z2NoYXI+IHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVkKGdfdXRm
OF9jYXNlZm9sZChtX2N1cnJlbnRTZWFyY2hTdHJpbmcudXRmOCgpLmRhdGEoKSwgLTEpKTsKKyAg
ICBzaXplX3QgcHJlZml4TGVuZ3RoID0gc3RybGVuKHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVk
LmdldCgpKTsKKworICAgIEdMaXN0KiBjaGlsZHJlbiA9IGd0a19jb250YWluZXJfZ2V0X2NoaWxk
cmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSkpOworICAgIGlmICghY2hpbGRyZW4pCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gSWYgYSBtZW51IGl0ZW0gaGFzIGFscmVhZHkg
YmVlbiBzZWxlY3RlZCwgc3RhcnQgc2VhcmNoaW5nIGZyb20gdGhlIGN1cnJlbnQKKyAgICAvLyBp
dGVtIGRvd24gdGhlIGxpc3QuIFRoaXMgd2lsbCBtYWtlIG11bHRpcGxlIGtleSBwcmVzc2VzIG9m
IHRoZSBzYW1lIGNoYXJhY3RlcgorICAgIC8vIGFkdmFuY2UgdGhlIHNlbGVjdGlvbi4KKyAgICBH
TGlzdCogY3VycmVudENoaWxkID0gY2hpbGRyZW47CisgICAgaWYgKG1fY3VycmVudGx5U2VsZWN0
ZWRNZW51SXRlbSkgeworICAgICAgICBjdXJyZW50Q2hpbGQgPSBnX2xpc3RfZmluZChjaGlsZHJl
biwgbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtKTsKKyAgICAgICAgaWYgKCFjdXJyZW50Q2hp
bGQpIHsKKyAgICAgICAgICAgIG1fY3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7CisgICAg
ICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGlsZHJlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFJlcGVhdGluZyBjaGFyYWN0ZXJzIHNob3VsZCBpdGVyYXRlLgorICAgICAgICBpZiAocmVwZWF0
aW5nQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICBpZiAoR0xpc3QqIG5leHRDaGlsZCA9IGdfbGlz
dF9uZXh0KGN1cnJlbnRDaGlsZCkpCisgICAgICAgICAgICAgICAgY3VycmVudENoaWxkID0gbmV4
dENoaWxkOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpc3QqIGZpcnN0Q2hpbGQgPSBjdXJy
ZW50Q2hpbGQ7CisgICAgZG8geworICAgICAgICBjdXJyZW50Q2hpbGQgPSBnX2xpc3RfbmV4dChj
dXJyZW50Q2hpbGQpOworICAgICAgICBpZiAoIWN1cnJlbnRDaGlsZCkKKyAgICAgICAgICAgIGN1
cnJlbnRDaGlsZCA9IGNoaWxkcmVuOworCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IGl0ZW1UZXh0
KGdfdXRmOF9jYXNlZm9sZChndGtfbWVudV9pdGVtX2dldF9sYWJlbChHVEtfTUVOVV9JVEVNKGN1
cnJlbnRDaGlsZC0+ZGF0YSkpLCAtMSkpOworICAgICAgICBpZiAoIXN0cm5jbXAoc2VhcmNoU3Ry
aW5nV2l0aENhc2VGb2xkZWQuZ2V0KCksIGl0ZW1UZXh0LmdldCgpLCBwcmVmaXhMZW5ndGgpKSB7
CisgICAgICAgICAgICBndGtfbWVudV9zaGVsbF9zZWxlY3RfaXRlbShHVEtfTUVOVV9TSEVMTCht
X3BvcHVwLmdldCgpKSwgR1RLX1dJREdFVChjdXJyZW50Q2hpbGQtPmRhdGEpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3VycmVudENoaWxkICE9IGZpcnN0
Q2hpbGQpOworCisgICAgZ19saXN0X2ZyZWUoY2hpbGRyZW4pOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEd0a1BvcHVwTWVudTo6c2VsZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiBp
dGVtLCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKK3sKKyAgICBwb3B1cE1lbnUtPm1fY3VycmVu
dGx5U2VsZWN0ZWRNZW51SXRlbSA9IEdUS19XSURHRVQoaXRlbSk7Cit9CisKK2dib29sZWFuIEd0
a1BvcHVwTWVudTo6a2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEtleSogZXZlbnQsIEd0a1BvcHVwTWVudSogcG9wdXBNZW51KQoreworICAgIHJldHVybiBw
b3B1cE1lbnUtPnR5cGVBaGVhZEZpbmQoZXZlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIGIvU291
cmNlL1BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzZhZDQ0ZjdkZDE2
NjQwYzQyZjU5ZjJiYWIwNDBiMzZlZjgzNzMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0a1BvcHVwTWVu
dV9oCisjZGVmaW5lIEd0a1BvcHVwTWVudV9oCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0
eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3RrUG9wdXBNZW51IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShH
dGtQb3B1cE1lbnUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8R3RrUG9wdXBNZW51PiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHdGtQb3B1cE1lbnUoKSk7CisgICAgfQorCisgICAgfkd0
a1BvcHVwTWVudSgpOworCisgICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybU1lbnUoKSBjb25zdCB7IHJl
dHVybiBtX3BvcHVwLmdldCgpOyB9CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgYXBwZW5k
U2VwYXJhdG9yKCk7CisgICAgdm9pZCBhcHBlbmRJdGVtKEd0a0FjdGlvbiopOworICAgIHZvaWQg
cG9wVXAoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFBvaW50JiwgaW50IGl0ZW1zQ291bnQsIGlu
dCBzZWxlY3RlZEl0ZW0sIGNvbnN0IEdka0V2ZW50Kik7CisgICAgdm9pZCBwb3BEb3duKCk7CisK
K3ByaXZhdGU6CisgICAgR3RrUG9wdXBNZW51KCk7CisKKyAgICB2b2lkIHJlc2V0VHlwZUFoZWFk
RmluZFN0YXRlKCk7CisgICAgYm9vbCB0eXBlQWhlYWRGaW5kKEdka0V2ZW50S2V5Kik7CisKKyAg
ICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlbSosIEd0a1BvcHVwTWVu
dSopOworICAgIHN0YXRpYyB2b2lkIG1lbnVQb3NpdGlvbkZ1bmN0aW9uKEd0a01lbnUqLCBnaW50
KiwgZ2ludCosIGdib29sZWFuKiwgR3RrUG9wdXBNZW51Kik7CisgICAgc3RhdGljIHZvaWQgbWVu
dVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiwgR3RrUG9wdXBNZW51Kik7CisgICAgc3RhdGljIHZvaWQg
c2VsZWN0SXRlbUNhbGxiYWNrKEd0a01lbnVJdGVtKiwgR3RrUG9wdXBNZW51Kik7CisgICAgc3Rh
dGljIGdib29sZWFuIGtleVByZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVudEtl
eSosIEd0a1BvcHVwTWVudSopOworCisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fcG9wdXA7Cisg
ICAgSW50UG9pbnQgbV9tZW51UG9zaXRpb247CisgICAgU3RyaW5nIG1fY3VycmVudFNlYXJjaFN0
cmluZzsKKyAgICB1aW50MzJfdCBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXA7CisgICAgdW5z
aWduZWQgaW50IG1fcHJldmlvdXNLZXlFdmVudENoYXJhY3RlcjsKKyAgICBHdGtXaWRnZXQqIG1f
Y3VycmVudGx5U2VsZWN0ZWRNZW51SXRlbTsKKyAgICB1bnNpZ25lZCBpbnQgbV9rZXlQcmVzc0hh
bmRsZXJJRDsKK307CisKK30KKworI2VuZGlmIC8vIEd0a1BvcHVwTWVudV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0d0a1V0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk4YjViYTM2Mjg0ZDhjMTc5YWRmNDFj
ZDQ2MjBlMzlkZWRhOTgwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
R3RrVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSW50
UG9pbnQuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqIHdpZGdl
dCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFjdHVh
bGx5IGEgdmVyeSB0cmlja3kgb3BlcmF0aW9uIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0
aW9uIHNob3VsZAorICAgIC8vIG9ubHkgYmUgdGhvdWdodCBvZiBhcyBhIGd1ZXNzLiBGb3IgaW5z
dGFuY2UsIHNvbWV0aW1lcyBpdCBtYXkgbm90IGNvcnJlY3RseSB0YWtlIGludG8KKyAgICAvLyBh
Y2NvdW50IHdpbmRvdyBkZWNvcmF0aW9ucy4KKworICAgIEd0a1dpZGdldCogdG9wbGV2ZWxXaWRn
ZXQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOworICAgIGlmICghdG9wbGV2ZWxX
aWRnZXQgfHwgIWd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWxXaWRnZXQpIHx8ICFHVEtf
SVNfV0lORE9XKHRvcGxldmVsV2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworCisgICAg
R2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codG9wbGV2ZWxXaWRn
ZXQpOworICAgIGlmICghZ2RrV2luZG93KQorICAgICAgICByZXR1cm4gcG9pbnQ7CisKKyAgICBp
bnQgeEluV2luZG93LCB5SW5XaW5kb3c7CisgICAgZ3RrX3dpZGdldF90cmFuc2xhdGVfY29vcmRp
bmF0ZXMod2lkZ2V0LCB0b3BsZXZlbFdpZGdldCwgcG9pbnQueCgpLCBwb2ludC55KCksICZ4SW5X
aW5kb3csICZ5SW5XaW5kb3cpOworCisgICAgaW50IHdpbmRvd09yaWdpblgsIHdpbmRvd09yaWdp
blk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGdka1dpbmRvdywgJndpbmRvd09yaWdpblgs
ICZ3aW5kb3dPcmlnaW5ZKTsKKworICAgIHJldHVybiBJbnRQb2ludCh3aW5kb3dPcmlnaW5YICsg
eEluV2luZG93LCB3aW5kb3dPcmlnaW5ZICsgeUluV2luZG93KTsKK30KKworYm9vbCB3aWRnZXRJ
c09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgcmV0dXJu
IGd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2lkZ2V0KSAmJiBHVEtfSVNfV0lORE9XKHdpZGdldCkg
JiYgIUdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpZGdldCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5YmRkZTY1
OThmMDJkMzM1N2EwMGE3MTMzODk2YmFjNTRjMmRhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpZm5kZWYgR3RrVXRpbGl0aWVzX2ggCisjZGVmaW5lIEd0a1V0aWxpdGll
c19oIAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFBvaW50OworCitJbnRQb2lu
dCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEd0a1dpZGdldCosIGNvbnN0IEludFBv
aW50Jik7Citib29sIHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhHdGtXaWRnZXQqKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3RrVXRpbGl0aWVzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMyZjg0YzJlZjg4NjZjMDNj
MDZmMTZkYzIxNTlmZmVhOTk3Y2RjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvR3RrVmVyc2lvbmluZy5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBT
LkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorI2luY2x1ZGUgPFgxMS9YYXRv
bS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKworI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxNCwgMCkKK3ZvaWQgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKEd0a0FkanVzdG1l
bnQqIGFkanVzbWVudCwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyAgICAgICAgbV9hZGp1c3RtZW50LT52
YWx1ZSA9IG1fY3VycmVudFBvczsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdl
ZChtX2FkanVzdG1lbnQpOworfQorCit2b2lkIGd0a19hZGp1c3RtZW50X2NvbmZpZ3VyZShHdGtB
ZGp1c3RtZW50KiBhZGp1c3RtZW50LCBnZG91YmxlIHZhbHVlLCBnZG91YmxlIGxvd2VyLCBnZG91
YmxlIHVwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBzdGVwSW5j
cmVtZW50LCBnZG91YmxlIHBhZ2VJbmNyZW1lbnQsIGdkb3VibGUgcGFnZVNpemUpCit7CisgICAg
Z19vYmplY3RfZnJlZXplX25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50KSk7CisKKyAgICBnX29i
amVjdF9zZXQoYWRqdXN0bWVudCwKKyAgICAgICAgICAgICAgICAgImxvd2VyIiwgbG93ZXIsCisg
ICAgICAgICAgICAgICAgICJ1cHBlciIsIHVwcGVyLAorICAgICAgICAgICAgICAgICAic3RlcC1p
bmNyZW1lbnQiLCBzdGVwSW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAicGFnZS1pbmNyZW1l
bnQiLCBwYWdlSW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAicGFnZS1zaXplIiwgcGFnZVNp
emUsCisgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgZ19vYmplY3RfdGhhd19ub3RpZnko
R19PQkpFQ1QoYWRqdXN0bWVudCkpOworCisgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChhZGp1
c3RtZW50KTsKKyAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKGFkanVzdG1lbnQpOwor
fQorI2VuZGlmCisKK0dka0RldmljZSAqZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoR2RrV2lu
ZG93KiB3aW5kb3cpCit7CisjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgR2RrRGV2aWNl
TWFuYWdlciAqbWFuYWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dp
bmRvd19nZXRfZGlzcGxheSh3aW5kb3cpKTsKKyAgICByZXR1cm4gZ2RrX2RldmljZV9tYW5hZ2Vy
X2dldF9jbGllbnRfcG9pbnRlcihtYW5hZ2VyKTsKKyNlbHNlCisgICAgcmV0dXJuIGdka19kZXZp
Y2VfZ2V0X2NvcmVfcG9pbnRlcigpOworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCit9CisK
KyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTcsIDMpCit2b2lkIGdka193aW5kb3dfZ2V0X3Jv
b3RfY29vcmRzKEdka1dpbmRvdyogd2luZG93LCBnaW50IHgsIGdpbnQgeSwgZ2ludCogcm9vdFgs
IGdpbnQqIHJvb3RZKQoreworICAgIGdka193aW5kb3dfZ2V0X3Jvb3Rfb3JpZ2luKHdpbmRvdywg
cm9vdFgsIHJvb3RZKTsKKyAgICAqcm9vdFggPSAqcm9vdFggKyB4OworICAgICpyb290WSA9ICpy
b290WSArIHk7Cit9CisjZW5kaWYKKworR2RrQ3Vyc29yICogYmxhbmtDdXJzb3IoKQoreworI2lm
IEdUS19DSEVDS19WRVJTSU9OKDIsIDE2LCAwKQorICAgIHJldHVybiBnZGtfY3Vyc29yX25ldyhH
REtfQkxBTktfQ1VSU09SKTsKKyNlbHNlCisgICAgR2RrQ3Vyc29yICogY3Vyc29yOworICAgIEdk
a1BpeG1hcCAqIHNvdXJjZTsKKyAgICBHZGtQaXhtYXAgKiBtYXNrOworICAgIEdka0NvbG9yIGZv
cmVncm91bmQgPSB7IDAsIDY1NTM1LCAwLCAwIH07IC8vIFJlZC4KKyAgICBHZGtDb2xvciBiYWNr
Z3JvdW5kID0geyAwLCAwLCAwLCA2NTUzNSB9OyAvLyBCbHVlLgorICAgIHN0YXRpYyBnY2hhciBj
dXJzb3JCaXRzW10gPSB7MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDB9Owor
CisgICAgc291cmNlID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKDAsIGN1cnNvckJpdHMs
IDgsIDgpOworICAgIG1hc2sgPSBnZGtfYml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29y
Qml0cywgOCwgOCk7CisgICAgY3Vyc29yID0gZ2RrX2N1cnNvcl9uZXdfZnJvbV9waXhtYXAoc291
cmNlLCBtYXNrLCAmZm9yZWdyb3VuZCwgJmJhY2tncm91bmQsIDgsIDgpOworICAgIGdka19waXht
YXBfdW5yZWYoc291cmNlKTsKKyAgICBnZGtfcGl4bWFwX3VucmVmKG1hc2spOworICAgIHJldHVy
biBjdXJzb3I7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCit9CisKKyNp
ZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCitjb25zdCBnY2hhciogZ3RrX21lbnVfaXRl
bV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qIG1lbnVJdGVtKQoreworICAgIEd0a1dpZGdldCAqIGxh
YmVsID0gZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtZW51SXRlbSkpOworICAgIGlmIChHVEtf
SVNfTEFCRUwobGFiZWwpKQorICAgICAgICByZXR1cm4gZ3RrX2xhYmVsX2dldF90ZXh0KEdUS19M
QUJFTChsYWJlbCkpOworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE2LCAwKQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBjYWlyb19m
b3JtYXRfdAorZ2RrX2NhaXJvX2Zvcm1hdF9mb3JfY29udGVudChjYWlyb19jb250ZW50X3QgY29u
dGVudCkKK3sKKyAgICBzd2l0Y2ggKGNvbnRlbnQpIHsKKyAgICBjYXNlIENBSVJPX0NPTlRFTlRf
Q09MT1I6CisgICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfUkdCMjQ7CisgICAgY2FzZSBDQUlS
T19DT05URU5UX0FMUEhBOgorICAgICAgICByZXR1cm4gQ0FJUk9fRk9STUFUX0E4OworICAgIGNh
c2UgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQToKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gQ0FJUk9fRk9STUFUX0FSR0IzMjsKKyAgICB9Cit9CisKK3N0YXRpYyBjYWlyb19zdXJmYWNl
X3QqCitnZGtfY2Fpcm9fc3VyZmFjZV9jb2VyY2VfdG9faW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2NvbnRlbnRf
dCBjb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KQoreworICAgIGNh
aXJvX3N1cmZhY2VfdCAqIGNvcHk7CisgICAgY2Fpcm9fdCAqIGNyOworCisgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCisg
ICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gY29udGVudAor
ICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSA+PSB3aWR0
aAorICAgICAgICAmJiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkgPj0g
aGVpZ2h0KQorICAgICAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSk7
CisKKyAgICBjb3B5ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoZ2RrX2NhaXJvX2Zvcm1h
dF9mb3JfY29udGVudChjb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dCk7CisKKyAgICBjciA9IGNhaXJvX2NyZWF0ZShjb3B5KTsKKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKGNyLCBzdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19wYWludChjcik7CisgICAgY2Fpcm9f
ZGVzdHJveShjcik7CisKKyAgICByZXR1cm4gY29weTsKK30KKworc3RhdGljIHZvaWQKK2NvbnZl
cnRfYWxwaGEoZ3VjaGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLAorICAgICAgICAgICAg
ICBndWNoYXIgKiBzcmNEYXRhLCBpbnQgc3JjU3RyaWRlLAorICAgICAgICAgICAgICBpbnQgc3Jj
WCwgaW50IHNyY1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpbnQgeCwgeTsKKwor
ICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1kgKiA0OworCisgICAgZm9yICh5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQz
MiAqKSBzcmNEYXRhOworCisgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Cisg
ICAgICAgICAgICBndWludCBhbHBoYSA9IHNyY1t4XSA+PiAyNDsKKworICAgICAgICAgICAgaWYg
KCFhbHBoYSkgeworICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMF0gPSAwOworICAg
ICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAwOworICAgICAgICAgICAgICAgIGRl
c3REYXRhW3ggKiA0ICsgMl0gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBkZXN0RGF0YVt4ICogNCArIDBdID0gKCgoc3JjW3hdICYgMHhmZjAwMDApID4+IDE2KSAq
IDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICog
NCArIDFdID0gKCgoc3JjW3hdICYgMHgwMGZmMDApID4+ICA4KSAqIDI1NSArIGFscGhhIC8gMikg
LyBhbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0RGF0YVt4ICogNCArIDJdID0gKCgoc3JjW3hd
ICYgMHgwMDAwZmYpID4+ICAwKSAqIDI1NSArIGFscGhhIC8gMikgLyBhbHBoYTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgM10gPSBhbHBoYTsKKyAgICAgICAg
fQorCisgICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOworICAgICAgICBkZXN0RGF0YSArPSBk
ZXN0U3RyaWRlOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2NvbnZlcnRfbm9fYWxwaGEoZ3Vj
aGFyICogZGVzdERhdGEsIGludCBkZXN0U3RyaWRlLCBndWNoYXIgKiBzcmNEYXRhLAorICAgICAg
ICAgICAgICAgICBpbnQgc3JjU3RyaWRlLCBpbnQgc3JjWCwgaW50IHNyY1ksCisgICAgICAgICAg
ICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIHNy
Y0RhdGEgKz0gc3JjU3RyaWRlICogc3JjWSArIHNyY1ggKiA0OworCisgICAgZm9yICh5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgIGd1aW50MzIgKiBzcmMgPSAoZ3VpbnQzMiAqKSBz
cmNEYXRhOworCisgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAg
ICAgICBkZXN0RGF0YVt4ICogMyArIDBdID0gc3JjW3hdID4+IDE2OworICAgICAgICAgICAgZGVz
dERhdGFbeCAqIDMgKyAxXSA9IHNyY1t4XSA+PiAgODsKKyAgICAgICAgICAgIGRlc3REYXRhW3gg
KiAzICsgMl0gPSBzcmNbeF07CisgICAgICAgIH0KKworICAgICAgICBzcmNEYXRhICs9IHNyY1N0
cmlkZTsKKyAgICAgICAgZGVzdERhdGEgKz0gZGVzdFN0cmlkZTsKKyAgICB9Cit9CisKKy8qKgor
ICogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlOgorICogQHN1cmZhY2U6IHN1cmZhY2UgdG8g
Y29weSBmcm9tCisgKiBAc3JjX3g6IFNvdXJjZSBYIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNl
CisgKiBAc3JjX3k6IFNvdXJjZSBZIGNvb3JkaW5hdGUgd2l0aGluIEBzdXJmYWNlCisgKiBAd2lk
dGg6IFdpZHRoIGluIHBpeGVscyBvZiByZWdpb24gdG8gZ2V0CisgKiBAaGVpZ2h0OiBIZWlnaHQg
aW4gcGl4ZWxzIG9mIHJlZ2lvbiB0byBnZXQKKyAqCisgKiBUcmFuc2ZlcnMgaW1hZ2UgZGF0YSBm
cm9tIGEgI2NhaXJvX3N1cmZhY2VfdCBhbmQgY29udmVydHMgaXQgdG8gYW4gUkdCKEEpCisgKiBy
ZXByZXNlbnRhdGlvbiBpbnNpZGUgYSAjR2RrUGl4YnVmLiBUaGlzIGFsbG93cyB5b3UgdG8gZWZm
aWNpZW50bHkgcmVhZAorICogaW5kaXZpZHVhbCBwaXhlbHMgZnJvbSBjYWlybyBzdXJmYWNlcy4g
Rm9yICNHZGtXaW5kb3dzLCB1c2UKKyAqIGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KCkgaW5z
dGVhZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGFuIFJHQiBwaXhidWYgd2l0
aCA4IGJpdHMgcGVyIGNoYW5uZWwuIFRoZSBwaXhidWYKKyAqIHdpbGwgY29udGFpbiBhbiBhbHBo
YSBjaGFubmVsIGlmIHRoZSBAc3VyZmFjZSBjb250YWlucyBvbmUuCisgKgorICogUmV0dXJuIHZh
bHVlOiAodHJhbnNmZXIgZnVsbCk6IEEgbmV3bHktY3JlYXRlZCBwaXhidWYgd2l0aCBhIHJlZmVy
ZW5jZSBjb3VudAorICogb2YgMSwgb3IgJU5VTEwgb24gZXJyb3IKKyAqKi8KK0dka1BpeGJ1ZioK
K2dka19waXhidWZfZ2V0X2Zyb21fc3VyZmFjZShjYWlyb19zdXJmYWNlX3QgKiBzdXJmYWNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgY2Fpcm9f
Y29udGVudF90IGNvbnRlbnQ7CisgICAgR2RrUGl4YnVmICogZGVzdDsKKworICAgIC8qIEdlbmVy
YWwgc2FuaXR5IGNoZWNrcyAqLworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN1cmZhY2UsIE5V
TEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNyY1ggPj0gMCAmJiBzcmNZID49IDAsIE5V
TEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBO
VUxMKTsKKworICAgIGNvbnRlbnQgPSBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2Up
IHwgQ0FJUk9fQ09OVEVOVF9DT0xPUjsKKyAgICBkZXN0ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NP
TE9SU1BBQ0VfUkdCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAhIShjb250ZW50ICYgQ0FJ
Uk9fQ09OVEVOVF9BTFBIQSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOworCisgICAgc3VyZmFjZSA9IGdka19j
YWlyb19zdXJmYWNlX2NvZXJjZV90b19pbWFnZShzdXJmYWNlLCBjb250ZW50LCBzcmNYICsgd2lk
dGgsIHNyY1kgKyBoZWlnaHQpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7Cisg
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpIHx8ICFkZXN0KSB7CisgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorCisgICAgaWYgKGdka19waXhidWZfZ2V0X2hhc19hbHBoYShkZXN0KSkKKyAgICAgICAg
Y29udmVydF9hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMoZGVzdCksCisgICAgICAgICAgICAg
ICAgICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShkZXN0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAor
ICAgICAgICAgICAgICAgICAgICAgICBzcmNYLCBzcmNZLAorICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCwgaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnZlcnRfbm9fYWxwaGEoZ2Rr
X3BpeGJ1Zl9nZXRfcGl4ZWxzKGRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtf
cGl4YnVmX2dldF9yb3dzdHJpZGUoZGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjWCwgc3JjWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGgsIGhlaWdodCk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7Cisg
ICAgcmV0dXJuIGRlc3Q7Cit9CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKK3Zv
aWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0RyYXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwg
aW50ICpoZWlnaHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChHREtfSVNfUElYTUFQKGRyYXdh
YmxlKSB8fCBHREtfSVNfV0lORE9XKGRyYXdhYmxlKSk7CisKKyAgICBpZiAoR0RLX0lTX1BJWE1B
UChkcmF3YWJsZSkpIHsKKyAgICAgICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShHREtfUElYTUFQKGRy
YXdhYmxlKSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
ZGtXaW5kb3cgKndpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOworICAgICp3aWR0aCA9IGdk
a193aW5kb3dfZ2V0X3dpZHRoKHdpbmRvdyk7CisgICAgKmhlaWdodCA9IGdka193aW5kb3dfZ2V0
X2hlaWdodCh3aW5kb3cpOworfQorI2Vsc2UKK3ZvaWQgZ2V0R2RrRHJhd2FibGVTaXplKEdka0Ry
YXdhYmxlICpkcmF3YWJsZSwgaW50ICp3aWR0aCwgaW50ICpoZWlnaHQpCit7CisgICAgZ2RrX2Ry
YXdhYmxlX2dldF9zaXplKGRyYXdhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRpZiAvLyBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAyNCwgMCkKKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8y
CisKKyNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQorZ2Jvb2xlYW4gZ19zaWduYWxf
YWNjdW11bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQgKmludm9jYXRpb25I
aW50LCBHVmFsdWUgKnJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUgKmhhbmRsZXJSZXR1
cm4sIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ192YWx1ZV9jb3B5KGhhbmRsZXJSZXR1cm4sIHJl
dHVybkFjY3VtdWxhdG9yKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKworI2lmICFH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAyMiwgMCkKK2NhaXJvX3N1cmZhY2VfdCAqZ2RrX3dpbmRvd19j
cmVhdGVfc2ltaWxhcl9zdXJmYWNlKEdka1dpbmRvdyAqd2luZG93LCBjYWlyb19jb250ZW50X3Qg
Y29udGVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGNhaXJvX3QgKmNhaXJvQ29u
dGV4dCA9IGdka19jYWlyb19jcmVhdGUod2luZG93KTsKKyAgICBjYWlyb19zdXJmYWNlX3QgKmNh
aXJvU3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY2Fpcm9Db250ZXh0KTsKKyAgICBjYWlyb19z
dXJmYWNlX3QgKm5ld1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFyKGNhaXJv
U3VyZmFjZSwgY29udGVudCwgd2lkdGgsIGhlaWdodCk7CisgICAgY2Fpcm9fZGVzdHJveShjYWly
b0NvbnRleHQpOworICAgIHJldHVybiBuZXdTdXJmYWNlOworfQorI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDIsIDIyLCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDMsIDYpCisj
aWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKK3N0YXRpYyBpbnQgZ2V0U2NyZWVuQ3VycmVudERlc2t0
b3AoR2RrU2NyZWVuICpzY3JlZW4pCit7CisgICAgRGlzcGxheSAqZGlzcGxheSA9IEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXkoc2NyZWVuKSk7CisgICAgV2luZG93
IHJvb3RXaW5kb3cgPSBYUm9vdFdpbmRvdyhkaXNwbGF5LCBHREtfU0NSRUVOX1hOVU1CRVIoc2Ny
ZWVuKSk7CisgICAgQXRvbSBjdXJyZW50RGVza3RvcCA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJf
TkVUX0NVUlJFTlRfREVTS1RPUCIsIFRydWUpOworCisgICAgQXRvbSB0eXBlOworICAgIGludCBm
b3JtYXQ7CisgICAgdW5zaWduZWQgbG9uZyBpdGVtc0NvdW50LCBieXRlc0FmdGVyOworICAgIHVu
c2lnbmVkIGNoYXIgKnJldHVybmVkRGF0YSA9IE5VTEw7CisgICAgWEdldFdpbmRvd1Byb3BlcnR5
KGRpc3BsYXksIHJvb3RXaW5kb3csIGN1cnJlbnREZXNrdG9wLCAwLCBHX01BWExPTkcsIEZhbHNl
LCBYQV9DQVJESU5BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgJnR5cGUsICZmb3JtYXQsICZp
dGVtc0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7CisKKyAgICBpbnQgd29ya3Nw
YWNlID0gMDsKKyAgICBpZiAodHlwZSA9PSBYQV9DQVJESU5BTCAmJiBmb3JtYXQgPT0gMzIgJiYg
aXRlbXNDb3VudCA+IDApCisgICAgICAgIHdvcmtzcGFjZSA9IChpbnQpcmV0dXJuZWREYXRhWzBd
OworCisgICAgaWYgKHJldHVybmVkRGF0YSkKKyAgICAgICAgWEZyZWUocmV0dXJuZWREYXRhKTsK
KworICAgIHJldHVybiB3b3Jrc3BhY2U7Cit9CisKK3N0YXRpYyB2b2lkIGdldFNjcmVlbldvcmtB
cmVhKEdka1NjcmVlbiAqc2NyZWVuLCBHZGtSZWN0YW5nbGUgKmFyZWEpCit7CisgICAgRGlzcGxh
eSAqZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19zY3JlZW5fZ2V0X2Rpc3BsYXko
c2NyZWVuKSk7CisgICAgQXRvbSB3b3JrQXJlYSA9IFhJbnRlcm5BdG9tKGRpc3BsYXksICJfTkVU
X1dPUktBUkVBIiwgVHJ1ZSk7CisKKyAgICAvKiBEZWZhdWx0cyBpbiBjYXNlIG9mIGVycm9yLiAq
LworICAgIGFyZWEtPnggPSAwOworICAgIGFyZWEtPnkgPSAwOworICAgIGFyZWEtPndpZHRoID0g
Z2RrX3NjcmVlbl9nZXRfd2lkdGgoc2NyZWVuKTsKKyAgICBhcmVhLT5oZWlnaHQgPSBnZGtfc2Ny
ZWVuX2dldF9oZWlnaHQoc2NyZWVuKTsKKworICAgIGlmICh3b3JrQXJlYSA9PSBOb25lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290V2luZG93KGRpc3Bs
YXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKKyAgICBBdG9tIHR5cGU7CisgICAgaW50
IGZvcm1hdDsKKyAgICB1bnNpZ25lZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7CisgICAg
dW5zaWduZWQgY2hhciAqcmV0dXJuZWREYXRhID0gMDsKKyAgICBpbnQgcmVzdWx0ID0gWEdldFdp
bmRvd1Byb3BlcnR5KGRpc3BsYXksIHJvb3RXaW5kb3csIHdvcmtBcmVhLCAwLCA0ICogMzIgLyog
TWF4IGxlbmd0aCAqLywgRmFsc2UsIEFueVByb3BlcnR5VHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZ0eXBlLCAmZm9ybWF0LCAmaXRlbXNDb3VudCwgJmJ5dGVzQWZ0
ZXIsICZyZXR1cm5lZERhdGEpOworICAgIGlmIChyZXN1bHQgIT0gU3VjY2VzcyB8fCB0eXBlID09
IE5vbmUgfHwgIWZvcm1hdCB8fCBieXRlc0FmdGVyIHx8IGl0ZW1zQ291bnQgJSA0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnQgZGVza3RvcCA9IGdldFNjcmVlbkN1cnJlbnREZXNrdG9wKHNj
cmVlbik7CisgICAgbG9uZyAqd29ya0FyZWFzID0gKGxvbmcgKilyZXR1cm5lZERhdGE7CisgICAg
YXJlYS0+eCA9IHdvcmtBcmVhc1tkZXNrdG9wICogNF07CisgICAgYXJlYS0+eSA9IHdvcmtBcmVh
c1tkZXNrdG9wICogNCArIDFdOworICAgIGFyZWEtPndpZHRoID0gd29ya0FyZWFzW2Rlc2t0b3Ag
KiA0ICsgMl07CisgICAgYXJlYS0+aGVpZ2h0ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgM107
CisKKyAgICBYRnJlZShyZXR1cm5lZERhdGEpOworfQorI2VuZGlmIC8vIEdES19XSU5ET1dJTkdf
WDExCisKK3ZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKnNj
cmVlbiwgaW50IG1vbml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAgICBnZGtfc2NyZWVu
X2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgYXJlYSk7CisKKyNpZmRlZiBH
REtfV0lORE9XSU5HX1gxMQorICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBnZXRTY3Jl
ZW5Xb3JrQXJlYShzY3JlZW4sICZ3b3JrQXJlYSk7CisgICAgZ2RrX3JlY3RhbmdsZV9pbnRlcnNl
Y3QoJndvcmtBcmVhLCBhcmVhLCBhcmVhKTsKKyNlbmRpZgorfQorI2VuZGlmIC8vIEdUS19DSEVD
S19WRVJTSU9OKDMsIDMsIDYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1Zl
cnNpb25pbmcuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUzY2FjNjMzYTBkMTViZDk3ODAzZDA1YjE2ZTVmNjM0MTI1M2E4YTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuaApAQCAtMCwwICsxLDEy
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0a1ZlcnNpb25p
bmdfaAorI2RlZmluZSBHdGtWZXJzaW9uaW5nX2gKKworI2luY2x1ZGUgImF1dG90b29sc2NvbmZp
Zy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgor
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLWNvbXBhdC5oPgorI2VuZGlmCisKK0dfQkVHSU5fREVD
TFMKKworLy8gTWFjcm9zIHRvIGF2b2lkIGRlcHJlY2F0aW9uIGNoZWNraW5nIGNodXJuCisjaWZu
ZGVmIEdUS19BUElfVkVSU0lPTl8yCisjZGVmaW5lIEdES19XSU5ET1dfWFdJTkRPVyh3aW5kb3cp
IChnZGtfeDExX3dpbmRvd19nZXRfeGlkKHdpbmRvdykpCisjZWxzZQorR2RrUGl4YnVmKiBnZGtf
cGl4YnVmX2dldF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBpbnQgc3Jj
WCwgaW50IHNyY1ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwordm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUq
IGRyYXdhYmxlLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7CisjZW5kaWYKKworI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAyMywgNCkKKyNkZWZpbmUgZ2RrX3BpeG1hcF9nZXRfc2l6ZSBnZGtf
ZHJhd2FibGVfZ2V0X3NpemUKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgNCkK
KworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKKyNkZWZpbmUgZ2RrX3dpbmRvd19n
ZXRfZGlzcGxheSh3aW5kb3cpIGdka19kcmF3YWJsZV9nZXRfZGlzcGxheSh3aW5kb3cpCisjZGVm
aW5lIGdka193aW5kb3dfZ2V0X3Zpc3VhbCBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbAorI2VuZGlm
IC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDIsIDIyLCAwKQorY2Fpcm9fc3VyZmFjZV90KiBnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1
cmZhY2UoR2RrV2luZG93KiB3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpOworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIyLCAwKQor
CisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQorI2RlZmluZSBnZGtfdmlzdWFsX2dl
dF9kZXB0aCh2aXN1YWwpICh2aXN1YWwpLT5kZXB0aAorI2RlZmluZSBnZGtfdmlzdWFsX2dldF9i
aXRzX3Blcl9yZ2IodmlzdWFsKSAodmlzdWFsKS0+Yml0c19wZXJfcmdiCisjZGVmaW5lIGdka19k
cmFnX2NvbnRleHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSAoY29udGV4dCktPmFjdGlv
bgorI2RlZmluZSBnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpIChjb250ZXh0
KS0+YWN0aW9ucworI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQorCisjaWYg
IUdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFs
aXplZCh3aWRnZXQpIEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQorI2RlZmluZSBndGtfd2lk
Z2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZMQUdTKCh3aWRn
ZXQpLCBHVEtfUkVBTElaRUQpCisjZGVmaW5lIGd0a19yYW5nZV9nZXRfbWluX3NsaWRlcl9zaXpl
KHJhbmdlKSAocmFuZ2UpLT5taW5fc2xpZGVyX3NpemUKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAyMCwgMCkKKworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKKyNkZWZp
bmUgZ3RrX3dpZGdldF9pc190b3BsZXZlbCh3aWRnZXQpIEdUS19XSURHRVRfVE9QTEVWRUwod2lk
Z2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpIEdUS19XSURHRVRf
UkVBTElaRUQod2lkZ2V0KQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF9oYXNfd2luZG93KHdpZGdl
dCkgIUdUS19XSURHRVRfTk9fV0lORE9XKHdpZGdldCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRf
Y2FuX2ZvY3VzKHdpZGdldCkgR1RLX1dJREdFVF9DQU5fRk9DVVMod2lkZ2V0KQorI2RlZmluZSBn
dGtfd2lkZ2V0X2lzX3NlbnNpdGl2ZSh3aWRnZXQpIEdUS19XSURHRVRfSVNfU0VOU0lUSVZFKHdp
ZGdldCkKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKKworI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKKyNkZWZpbmUgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZSh3
aWRnZXQsIEZBTFNFKSBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfVklTSUJM
RSkKKyNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3aWRnZXQpIChHVEtfV0lER0VUX0ZM
QUdTKHdpZGdldCkgJiBHVEtfVklTSUJMRSkKKworI2RlZmluZSBndGtfd2lkZ2V0X3NldF93aW5k
b3cod2lkZ2V0LCBuZXdfd2luZG93KSAod2lkZ2V0KS0+d2luZG93ID0gKG5ld193aW5kb3cpCisj
ZGVmaW5lIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRf
U0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfQ0FOX0ZPQ1VTKQorI2RlZmluZSBndGtfd2lkZ2V0X2dl
dF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgqKGFsbG9jKSA9ICh3aWRnZXQpLT5hbGxvY2F0
aW9uKQorI2RlZmluZSBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgo
d2lkZ2V0KS0+YWxsb2NhdGlvbiA9ICooYWxsb2MpKQorI2VuZGlmIC8vIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE4LCAwKQorCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAzKQordm9pZCBn
ZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2ludCB4LCBnaW50
IHksIGdpbnQqIHJvb3RYLCBnaW50KiByb290WSk7CisjZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJ
T04oMiwgMTcsIDMpCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCitjb25zdCBn
Y2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKKyNlbmRpZiAvLyBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKKworCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDIs
IDE0LCAwKQorI2RlZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAod2lkZ2V0KS0+
d2luZG93CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChhZGopLT52YWx1
ZQorI2RlZmluZSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAoZGlhbG9nKS0+
dmJveAorI2RlZmluZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpIChkaWFsb2cp
LT5hY3Rpb25fYXJlYQorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRh
KSAoZGF0YSktPmxlbmd0aAorI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0
YSkgKGRhdGEpLT5kYXRhCisjZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdGFyZ2V0KGRh
dGEpIChkYXRhKS0+dGFyZ2V0CisjZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9wYWdlX3NpemUo
YWRqLCBuZXdWYWx1ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3Rr
X2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFsdWUgPSBuZXdW
YWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3VmFsdWUpICgo
YWRqKS0+bG93ZXIgPSBuZXdWYWx1ZSkKKyNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVy
KGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKKwordm9pZCBndGtfYWRq
dXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2RvdWJsZSB2YWx1
ZSwgZ2RvdWJsZSBsb3dlciwgZ2RvdWJsZSB1cHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdkb3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVtZW50LCBnZG91
YmxlIHBhZ2VTaXplKTsKKwordm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0
bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKTsKKyNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxNCwgMCkKKworR2RrRGV2aWNlKiBnZXREZWZhdWx0R0RLUG9pbnRlckRldmljZShH
ZGtXaW5kb3cqIHdpbmRvdyk7CitHZGtDdXJzb3IqIGJsYW5rQ3Vyc29yKCk7CisKKyNpZiAhR0xJ
Ql9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQorZ2Jvb2xlYW4gZ19zaWduYWxfYWNjdW11bGF0b3Jf
Zmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQqIGludm9jYXRpb25IaW50LCBHVmFsdWUq
IHJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdwb2ludGVy
IGRhdGEpOworI2VuZGlmCisKKyNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKK3ZvaWQg
Z2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKiwgaW50IG1vbml0b3Is
IEdka1JlY3RhbmdsZSAqYXJlYSk7CisjZW5kaWYKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8v
IEd0a1ZlcnNpb25pbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRn
ZXRCYWNraW5nU3RvcmVYMTEuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNr
aW5nU3RvcmVYMTEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMzc2YmM3NzE0YjM5NTQ5MDAxMmI5Nzc5NmEx
OTk3ZmNhM2MwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0d0a1dp
ZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0QmFja2luZ1N0b3JlLmgiCisK
KyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNp
bmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxj
YWlyby5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisKK3B1YmxpYzoKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7CisgICAgUGl4bWFwIG1fcGl4
bWFwOworICAgIEdDIG1fZ2M7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNl
OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZT4gY3Jl
YXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKHdpZGdldCwg
c2l6ZSkpOworICAgIH0KKworICAgIH5XaWRnZXRCYWNraW5nU3RvcmVQcml2YXRlKCkKKyAgICB7
CisgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV9waXhtYXApOworICAgICAgICBYRnJl
ZUdDKG1fZGlzcGxheSwgbV9nYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFdlIGtlZXAg
dHdvIGNvcGllcyBvZiB0aGUgc3VyZmFjZSBoZXJlLCB3aGljaCB3aWxsIGRvdWJsZSB0aGUgbWVt
b3J5IHVzYWdlLCBidXQgaW5jcmVhc2UKKyAgICAvLyBzY3JvbGxpbmcgcGVyZm9ybWFuY2Ugc2lu
Y2Ugd2UgZG8gbm90IGhhdmUgdG8ga2VlcCByZWFsbG9jYXRpbmcgYSBtZW1vcnkgcmVnaW9uIGR1
cmluZworICAgIC8vIHF1aWNrIHNjcm9sbGluZyByZXF1ZXN0cy4KKyAgICBXaWRnZXRCYWNraW5n
U3RvcmVQcml2YXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQorICAg
IHsKKyAgICAgICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwod2lk
Z2V0KTsKKyAgICAgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfdmlzdWFsX2dldF9zY3JlZW4o
dmlzdWFsKTsKKyAgICAgICAgbV9kaXNwbGF5ID0gR0RLX1NDUkVFTl9YRElTUExBWShzY3JlZW4p
OworICAgICAgICBtX3BpeG1hcCA9IFhDcmVhdGVQaXhtYXAobV9kaXNwbGF5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0RLX1dJTkRPV19YSUQoZ2RrX3NjcmVlbl9nZXRfcm9v
dF93aW5kb3coc2NyZWVuKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZGtfdmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpKTsKKyAgICAgICAgbV9nYyA9IFhDcmVhdGVH
QyhtX2Rpc3BsYXksIG1fcGl4bWFwLCAwLCAwKTsKKworICAgICAgICBtX3N1cmZhY2UgPSBhZG9w
dFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG1fZGlzcGxheSwgbV9waXhtYXAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX1ZJ
U1VBTF9YVklTVUFMKHZpc3VhbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAg
fQorfTsKKworUGFzc093blB0cjxXaWRnZXRCYWNraW5nU3RvcmU+IFdpZGdldEJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgV2lkZ2V0QmFja2luZ1N0b3JlKHdpZGdldCwgc2l6ZSkpOwor
fQorCitXaWRnZXRCYWNraW5nU3RvcmU6OldpZGdldEJhY2tpbmdTdG9yZShHdGtXaWRnZXQqIHdp
ZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fcHJpdmF0ZShXaWRnZXRCYWNraW5n
U3RvcmVQcml2YXRlOjpjcmVhdGUod2lkZ2V0LCBzaXplKSkKKyAgICAsIG1fc2l6ZShzaXplKQor
eworfQorCitXaWRnZXRCYWNraW5nU3RvcmU6On5XaWRnZXRCYWNraW5nU3RvcmUoKQoreworfQor
CitjYWlyb19zdXJmYWNlX3QqIFdpZGdldEJhY2tpbmdTdG9yZTo6Y2Fpcm9TdXJmYWNlKCkKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3N1cmZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgV2lkZ2V0
QmFja2luZ1N0b3JlOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIEludFJlY3QgdGFyZ2V0UmVjdChzY3JvbGxSZWN0
KTsKKyAgICB0YXJnZXRSZWN0Lm1vdmUoc2Nyb2xsT2Zmc2V0KTsKKyAgICB0YXJnZXRSZWN0Lmlu
dGVyc2VjdChzY3JvbGxSZWN0KTsKKyAgICBpZiAodGFyZ2V0UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9wcml2YXRlLT5tX3N1cmZh
Y2UuZ2V0KCkpOworICAgIFhDb3B5QXJlYShtX3ByaXZhdGUtPm1fZGlzcGxheSwgbV9wcml2YXRl
LT5tX3BpeG1hcCwgbV9wcml2YXRlLT5tX3BpeG1hcCwgbV9wcml2YXRlLT5tX2djLCAKKyAgICAg
ICAgICAgICAgdGFyZ2V0UmVjdC54KCkgLSBzY3JvbGxPZmZzZXQud2lkdGgoKSwgdGFyZ2V0UmVj
dC55KCkgLSBzY3JvbGxPZmZzZXQuaGVpZ2h0KCksCisgICAgICAgICAgICAgIHRhcmdldFJlY3Qu
d2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54
KCksIHRhcmdldFJlY3QueSgpKTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VS
TEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQxZmVhY2E5NmE0YTA5ZjRiYmQwNzA4MDliNjhlMTg1NDQx
NjhmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRk
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDxn
aW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
bmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEtVUkw6OmZp
bGVTeXN0ZW1QYXRoKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSB8fCAhaXNMb2NhbEZp
bGUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgoKS51dGY4KCkuZGF0YSgpKSk7
CisgICAgR093blB0cjxjaGFyPiBmaWxlbmFtZShnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkp
OworICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGZpbGVuYW1lLmdldCgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlC
aW5kaW5nVHJhbnNsYXRvci5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFu
c2xhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMzViYmQ2MjYzZmY1OTU4MGNhYjA3YjU2ZmNkMzk0NGZl
MDA5YTBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9LZXlCaW5kaW5n
VHJhbnNsYXRvci5jcHAKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgorCisj
aW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVm
IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4gSW50Q29uc3RDaGFySGFzaE1hcDsKKworc3RhdGlj
IHZvaWQgYmFja3NwYWNlQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFu
c2xhdG9yKiB0cmFuc2xhdG9yKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFt
ZSh3aWRnZXQsICJiYWNrc3BhY2UiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCgiRGVsZXRlQmFja3dhcmQiKTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2Fs
bGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIGdib29sZWFuIHNlbGVjdCwgS2V5QmluZGluZ1RyYW5z
bGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgInNlbGVjdC1hbGwiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZChzZWxlY3QgPyAiU2VsZWN0QWxsIiA6ICJVbnNlbGVjdCIpOworfQorCitzdGF0aWMg
dm9pZCBjdXRDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1Ry
YW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9u
YW1lKHdpZGdldCwgImN1dC1jbGlwYm9hcmQiKTsKKyAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5n
RWRpdG9yQ29tbWFuZCgiQ3V0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxs
YmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3Ip
Cit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImNvcHktY2xp
cGJvYXJkIik7CisgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHki
KTsKK30KKworc3RhdGljIHZvaWQgcGFzdGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdp
ZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxf
c3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInBhc3RlLWNsaXBib2FyZCIpOworICAgIHRy
YW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJQYXN0ZSIpOworfQorCitzdGF0aWMg
dm9pZCB0b2dnbGVPdmVyd3JpdGVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGlu
Z1RyYW5zbGF0b3IqKQoreworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdG9nZ2xpbmcgdGhlIG92
ZXJ3cml0ZSBtb2RlLCBidXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZXhwZWN0cworICAgIC8vIHRo
ZSBHdGtUZXh0VmlldyB0byBoYXZlIGEgbGF5b3V0LCBzbyB3ZSBoYW5kbGUgdGhpcyBzaWduYWwg
anVzdCB0byBzdG9wIGl0LgorICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRn
ZXQsICJ0b2dnbGUtb3ZlcndyaXRlIik7Cit9CisKKy8vIEdUSysgd2lsbCBzdGlsbCBzZW5kIHRo
ZXNlIHNpZ25hbHMgdG8gdGhlIHdlYiB2aWV3LiBTbyB3ZSBjYW4gc2FmZWx5IHN0b3Agc2lnbmFs
CisvLyBlbWlzc2lvbiB3aXRob3V0IGJyZWFraW5nIGFjY2Vzc2liaWxpdHkuCitzdGF0aWMgdm9p
ZCBwb3B1cE1lbnVDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0
b3IqKQoreworICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwb3B1
cC1tZW51Iik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dIZWxwQ2FsbGJhY2soR3RrV2lkZ2V0KiB3
aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNz
aW9uX2J5X25hbWUod2lkZ2V0LCAic2hvdy1oZWxwIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBndGtEZWxldGVDb21tYW5kc1tdWzJdID0geworICAgIHsgIkRlbGV0ZUJhY2t3YXJk
IiwgICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9
LCAvLyBDaGFyYWN0ZXJzCisgICAgeyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJE
ZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcworICAg
IHsgIkRlbGV0ZVdvcmRCYWNrd2FyZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAg
ICAgICAgICAgICAgICAgICB9LCAvLyBXb3JkcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZM
aW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBM
aW5lcworICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRP
ZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lIGVuZHMKKyAgICB7ICJEZWxldGVU
b0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAg
ICAgICAgfSwgLy8gUGFyYWdyYXBoIGVuZHMKKyAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFy
YWdyYXBoIiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFy
YWdyYXBocworICAgIHsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFj
cykKK307CisKK3N0YXRpYyB2b2lkIGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQq
IHdpZGdldCwgR3RrRGVsZXRlVHlwZSBkZWxldGVUeXBlLCBnaW50IGNvdW50LCBLZXlCaW5kaW5n
VHJhbnNsYXRvciogdHJhbnNsYXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5
X25hbWUod2lkZ2V0LCAiZGVsZXRlLWZyb20tY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9
IGNvdW50ID4gMCA/IDEgOiAwOworCisgICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9
IEdfTl9FTEVNRU5UUyBoZXJlIHJlc3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nCisgICAgLy8g
dGhhdCB0aGUgY29uZGl0aW9uIGlzIGFsd2F5cyB0cnVlLgorCisgICAgaWYgKGRlbGV0ZVR5cGUg
PT0gR1RLX0RFTEVURV9XT1JEUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikgeworICAgICAg
ICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2Fy
ZCIpOworICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1v
dmVXb3JkQmFja3dhcmQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYW5zbGF0
b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7CisgICAgICAg
ICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJk
Iik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9E
SVNQTEFZX0xJTkVTKSB7CisgICAgICAgIGlmICghZGlyZWN0aW9uKQorICAgICAgICAgICAgdHJh
bnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGluZSIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9y
Q29tbWFuZCgiTW92ZVRvRW5kT2ZMaW5lIik7CisgICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09
IEdUS19ERUxFVEVfUEFSQUdSQVBIUykgeworICAgICAgICBpZiAoIWRpcmVjdGlvbikKKyAgICAg
ICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5p
bmdPZlBhcmFncmFwaCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2xhdG9yLT5h
ZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKKyAgICB9CisK
KyAgICBjb25zdCBjaGFyKiByYXdDb21tYW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlw
ZV1bZGlyZWN0aW9uXTsKKyAgICBpZiAoIXJhd0NvbW1hbmQpCisgICAgICByZXR1cm47CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhjb3VudCk7IGkrKykKKyAgICAgICAgdHJhbnNsYXRv
ci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQocmF3Q29tbWFuZCk7Cit9CisKK3N0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBndGtNb3ZlQ29tbWFuZHNbXVs0XSA9IHsKKyAgICB7ICJNb3ZlQmFja3dh
cmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKKyAg
ICAgICJNb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1v
dmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2Jh
Y2t3YXJkIGdyYXBoZW1lCisgICAgeyAiTW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiLAorICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlm
eVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICAgIH0sIC8vIExlZnQvcmlnaHQgZ3JhcGhlbWUKKyAgICB7ICJNb3ZlV29y
ZEJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2Fy
ZCIsCisgICAgICAiTW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAg
ICAgICJNb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9y
d2FyZC9iYWNrd2FyZCB3b3JkCisgICAgeyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIsCisgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiwgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlv
biIgICAgICAgICAgICAgICAgfSwgLy8gVXAvZG93biBsaW5lCisgICAgeyAiTW92ZVRvQmVnaW5u
aW5nT2ZMaW5lIiwgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAor
ICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAi
TW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24g
bGluZSBlbmRzCisgICAgeyAiTW92ZVBhcmFncmFwaEJhY2t3YXJkIiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZCIsCisgICAgICAiTW92ZVBhcmFncmFwaEJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCisgICAgeyAiTW92
ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRP
ZlBhcmFncmFwaCIsCisgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlT
ZWxlY3Rpb24iLCAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAg
fSwgLy8gVXAvZG93biBwYXJhZ3JhcGggZW5kcy4KKyAgICB7ICJNb3ZlUGFnZVVwIiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIsCisgICAgICAiTW92
ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURv
d25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCisgICAg
eyAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
VG9FbmRPZkRvY3VtZW50IiwKKyAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9k
aWZ5U2VsZWN0aW9uIiwgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICB9LCAvLyBCZWdpbi9lbmQgb2YgYnVmZmVyCisgICAgeyAwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAwLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKK307CisK
K3N0YXRpYyB2b2lkIG1vdmVDdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92
ZW1lbnRTdGVwIHN0ZXAsIGdpbnQgY291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgS2V5
QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCit7CisgICAgZ19zaWduYWxfc3RvcF9lbWlz
c2lvbl9ieV9uYW1lKHdpZGdldCwgIm1vdmUtY3Vyc29yIik7CisgICAgaW50IGRpcmVjdGlvbiA9
IGNvdW50ID4gMCA/IDEgOiAwOworICAgIGlmIChleHRlbmRTZWxlY3Rpb24pCisgICAgICAgIGRp
cmVjdGlvbiArPSAyOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBH
X05fRUxFTUVOVFMoZ3RrTW92ZUNvbW1hbmRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgY2hhciogcmF3Q29tbWFuZCA9IGd0a01vdmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOwor
ICAgIGlmICghcmF3Q29tbWFuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhYnMoY291bnQpOyBpKyspCisgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdF
ZGl0b3JDb21tYW5kKHJhd0NvbW1hbmQpOworfQorCitLZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5
QmluZGluZ1RyYW5zbGF0b3IoKQorICAgIDogbV9uYXRpdmVXaWRnZXQoZ3RrX3RleHRfdmlld19u
ZXcoKSkKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFj
a3NwYWNlIiwgR19DQUxMQkFDSyhiYWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxM
QkFDSyhjdXRDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNs
aXBib2FyZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdp
ZGdldC5nZXQoKSwgInBhc3RlLWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0
KCksICJzZWxlY3QtYWxsIiwgR19DQUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIs
IEdfQ0FMTEJBQ0sobW92ZUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29u
bmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJB
Q0soZGVsZXRlRnJvbUN1cnNvckNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRv
Z2dsZU92ZXJ3cml0ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25h
dGl2ZVdpZGdldC5nZXQoKSwgInBvcHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwg
InNob3ctaGVscCIsIEdfQ0FMTEJBQ0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOworfQorCitz
dHJ1Y3QgS2V5Q29tYmluYXRpb25FbnRyeSB7CisgICAgdW5zaWduZWQgZ2RrS2V5Q29kZTsKKyAg
ICB1bnNpZ25lZCBzdGF0ZTsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RhdGljIGNv
bnN0IEtleUNvbWJpbmF0aW9uRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7IEdES19i
LCAgICAgICAgIEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAg
IH0sCisgICAgeyBHREtfaSwgICAgICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAg
ICJUb2dnbGVJdGFsaWMiICB9LAorICAgIHsgR0RLX0VzY2FwZSwgICAgMCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiQ2FuY2VsIiAgICAgICAgfSwKKyAgICB7IEdES19ncmVhdGVyLCAg
IEdES19DT05UUk9MX01BU0ssICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCit9Owor
CisvLyBUaGVzZSBjb21tYW5kcyBhcmUgdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIHNvIHNob3Vs
ZCB0YWtlIHBsYWNlCisvLyB3aGlsZSBoYW5kbGluZyB0aGUgS2V5UHJlc3MgZXZlbnQuCitzdGF0
aWMgY29uc3QgS2V5Q29tYmluYXRpb25FbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7
IEdES19UYWIsICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc2VydFRh
YiIgICAgIH0sCisgICAgeyBHREtfVGFiLCAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAg
ICAgICAgICJJbnNlcnRCYWNrdGFiIiB9LAorfTsKKwordm9pZCBLZXlCaW5kaW5nVHJhbnNsYXRv
cjo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIEV2ZW50
VHlwZSB0eXBlLCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBjb21tYW5kTGlzdCkKK3sKKyAgICBtX3Bl
bmRpbmdFZGl0b3JDb21tYW5kcy5jbGVhcigpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
KyAgICBndGtfYmluZGluZ3NfYWN0aXZhdGVfZXZlbnQoR1RLX09CSkVDVChtX25hdGl2ZVdpZGdl
dC5nZXQoKSksIGV2ZW50KTsKKyNlbHNlCisgICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50
KEdfT0JKRUNUKG1fbmF0aXZlV2lkZ2V0LmdldCgpKSwgZXZlbnQpOworI2VuZGlmCisKKyAgICBp
ZiAoIW1fcGVuZGluZ0VkaXRvckNvbW1hbmRzLmlzRW1wdHkoKSkgeworICAgICAgICBjb21tYW5k
TGlzdC5hcHBlbmQobV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlE
b3duQ29tbWFuZHNNYXAsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hh
ckhhc2hNYXAsIGtleVByZXNzQ29tbWFuZHNNYXAsICgpKTsKKworICAgIGlmIChrZXlEb3duQ29t
bWFuZHNNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
X05fRUxFTUVOVFMoa2V5RG93bkVudHJpZXMpOyBpKyspCisgICAgICAgICAgICBrZXlEb3duQ29t
bWFuZHNNYXAuc2V0KGtleURvd25FbnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5RG93bkVudHJp
ZXNbaV0uZ2RrS2V5Q29kZSwga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKysp
CisgICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0u
c3RhdGUgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uZ2RrS2V5Q29kZSwga2V5UHJlc3NFbnRy
aWVzW2ldLm5hbWUpOworICAgIH0KKworICAgIC8vIFNwZWNpYWwtY2FzZSBlbnRlciBrZXlzIGZv
ciB3ZSB3YW50IHRoZW0gdG8gd29yayByZWdhcmRsZXNzIG9mIG1vZGlmaWVyLgorICAgIGlmICgo
ZXZlbnQtPmtleXZhbCA9PSBHREtfUmV0dXJuIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0tQX0Vu
dGVyIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0lTT19FbnRlcikgJiYgdHlwZSA9PSBLZXlQcmVz
cykgeworICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQoIkluc2VydE5ld0xpbmUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdhbnQg
Y2hhckNvZGUoKSwgYnV0IGtleUNvZGUoKSBkb2VzIHRoYXQuCisgICAgaW50IG1hcEtleSA9IGV2
ZW50LT5zdGF0ZSA8PCAxNiB8IGV2ZW50LT5rZXl2YWw7CisgICAgaWYgKG1hcEtleSkgeworICAg
ICAgICBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBjb21tYW5kTWFwID0gdHlwZSA9PSBLZXlE
b3duID8gICZrZXlEb3duQ29tbWFuZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKKyAgICAg
ICAgaWYgKGNvbnN0IGNoYXIqIGNvbW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5
KSkgeworICAgICAgICAgICAgY29tbWFuZExpc3QuYXBwZW5kKGNvbW1hbmRTdHJpbmcpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xh
dG9yLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzY0MzZkZTZjYjg2M2Q5YTM2MWI3NzQyOGMxNDk3NDdmMzM0YmM4NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaApAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIElnYWxpYSBTLkwu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEtleUJpbmRpbmdUcmFu
c2xhdG9yX2gKKyNkZWZpbmUgS2V5QmluZGluZ1RyYW5zbGF0b3JfaAorCisjaW5jbHVkZSAiR1Jl
ZlB0ckd0ay5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5Owor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtleUJpbmRpbmdUcmFuc2xhdG9yIHsKK3B1
YmxpYzoKKyAgICBLZXlCaW5kaW5nVHJhbnNsYXRvcigpOworCisgICAgZW51bSBFdmVudFR5cGUg
eyBLZXlEb3duLCBLZXlQcmVzcyB9OworICAgIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlF
dmVudChHZGtFdmVudEtleSosIEV2ZW50VHlwZSwgVmVjdG9yPFdURjo6U3RyaW5nPiYpOworICAg
IHZvaWQgYWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoY29uc3QgY2hhciogY29tbWFuZCkgeyBtX3Bl
bmRpbmdFZGl0b3JDb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7IH0KKworcHJpdmF0ZToKKyAgICBH
UmVmUHRyPEd0a1dpZGdldD4gbV9uYXRpdmVXaWRnZXQ7CisgICAgVmVjdG9yPFdURjo6U3RyaW5n
PiBtX3BlbmRpbmdFZGl0b3JDb21tYW5kczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0
ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
N2E3MWU1NjFjNTM0NGMwNWVmMDNiZjEyODMzNTZmYzUyYTQyZmRmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFVzaW5nIHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkgaGVyZSBpcyBub3QgYW4g
b3B0aW9uLCBiZWNhdXNlCisvLyBpdCBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxvY2Fs
ZSBpbiBydW50aW1lLCBzbyBpdCByZXR1cm5zCisvLyBhbHdheXMgdGhlIHNhbWUgdmFsdWUuCitz
dGF0aWMgU3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQoreworICAgIGNoYXIqIGxvY2FsZURlZmF1
bHQgPSBzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpOworCisgICAgaWYgKCFsb2NhbGVEZWZhdWx0
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCJjIik7CisKKyAgICBHT3duUHRyPGdjaGFyPiBub3Jt
YWxpemVkRGVmYXVsdChnX2FzY2lpX3N0cmRvd24obG9jYWxlRGVmYXVsdCwgLTEpKTsKKyAgICBj
aGFyKiBwdHIgPSBzdHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICdfJyk7CisKKyAgICBp
ZiAocHRyKQorICAgICAgICAqcHRyID0gJy0nOworCisgICAgcHRyID0gc3RyY2hyKG5vcm1hbGl6
ZWREZWZhdWx0LmdldCgpLCAnLicpOworCisgICAgaWYgKHB0cikKKyAgICAgICAgKnB0ciA9ICdc
MCc7CisKKyAgICByZXR1cm4gU3RyaW5nKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpKTsKK30KKwor
VmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworICAgIHVzZXJQcmVmZXJyZWRM
YW5ndWFnZXMuYXBwZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7CisgICAgcmV0dXJuIHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXM7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2NhbGl6
ZWRTdHJpbmdzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDJjYWEyZjlkZjI1MmY2OTI1YmEyMDM0ZTRj
YTQ1OTFiYzE1YjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Mb2Nh
bGl6ZWRTdHJpbmdzR3RrLmNwcApAQCAtMCwwICsxLDc4NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmlu
Z3MuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogZ3Rr
U3RvY2tMYWJlbChjb25zdCBjaGFyKiBzdG9ja0lEKQoreworICAgIEd0a1N0b2NrSXRlbSBpdGVt
OworICAgIGlmICghZ3RrX3N0b2NrX2xvb2t1cChzdG9ja0lELCAmaXRlbSkpCisgICAgICAgIHJl
dHVybiBzdG9ja0lEOworICAgIHJldHVybiBpdGVtLmxhYmVsOworfQorCitTdHJpbmcgc3VibWl0
QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJT
dWJtaXQiKSk7Cit9CisKK1N0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJTdWJtaXQiKSk7Cit9CisKK1N0cmluZyByZXNldEJ1dHRv
bkRlZmF1bHRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUmVzZXQi
KSk7Cit9CisKK1N0cmluZyBkZWZhdWx0RGV0YWlsc1N1bW1hcnlUZXh0KCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJEZXRhaWxzIikpOworfQorCitTdHJpbmcgc2VhcmNoYWJs
ZUluZGV4SW50cm9kdWN0aW9uKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJU
aGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAiKSk7Cit9
CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJDaG9vc2UgRmlsZSIpKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25D
aG9vc2VNdWx0aXBsZUZpbGVzTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIkNob29zZSBGaWxlcyIpKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3Rl
ZExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSkiKSk7Cit9
CisKK1N0cmluZyBmaWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIihOb25lKSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIk9wZW4gTGluayBpbiBOZXcgX1dpbmRvdyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiX0Rvd25sb2FkIExpbmtlZCBGaWxlIikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygiQ29weSBMaW5rIExvY19hdGlvbiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJPcGVuIF9JbWFnZSBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiU2FfdmUgSW1hZ2UgQXMiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiQ29wX3kgSW1hZ2UiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5
SW1hZ2VVcmxUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
Q29weSBJbWFnZSBfQWRkcmVzcyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09w
ZW5WaWRlb0luTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJP
cGVuIF9WaWRlbyBpbiBOZXcgV2luZG93IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIk9wZW4gX0F1ZGlvIGluIE5ldyBXaW5kb3ciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdDb3B5VmlkZW9MaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIkNvcF95IFZpZGVvIExpbmsgTG9jYXRpb24iKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdDb3B5QXVkaW9MaW5rVG9DbGlwYm9hcmQoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcF95IEF1ZGlvIExpbmsgTG9jYXRpb24iKSk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfVG9nZ2xlIE1lZGlhIENvbnRyb2xzIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJUb2dnbGUgTWVkaWEgX0xvb3AgUGxheWJhY2siKSk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3dpdGNoIFZpZGVvIHRvIF9GdWxsc2NyZWVu
IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUGxheSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGF1c2UoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8o
Il9QYXVzZSIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX011dGUiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tM
YWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ09QWSkpOwor
ICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVs
ZXRlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4
KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0RFTEVURSkpOworICAgIHJldHVybiBzdG9ja0xhYmVs
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCkKK3sKKyAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RL
X1NUT0NLX1NFTEVDVF9BTEwpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIl9JbnNlcnQgVW5pY29kZSBDb250cm9sIENoYXJhY3RlciIpKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kcygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiSW5wdXQgX01ldGhvZHMiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdHb0JhY2soKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6
ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfR09fQkFDSykpOworICAgIHJldHVybiBz
dG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkKK3sK
KyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2Nr
TGFiZWwoR1RLX1NUT0NLX0dPX0ZPUldBUkQpKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKQoreworICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfU1RP
UCkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnUmVsb2FkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUmVsb2FkIikp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkKK3sKKyAgICBzdGF0aWMgU3Ry
aW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NL
X0NVVCkpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnUGFzdGUoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6
ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfUEFTVEUpKTsKKyAgICByZXR1cm4gc3Rv
Y2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJObyBHdWVzc2VzIEZvdW5kIikpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9JZ25vcmUgU3BlbGxpbmciKSk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJfTGVhcm4gU3BlbGxpbmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdTZWFyY2hXZWIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9T
ZWFyY2ggdGhlIFdlYiIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcElu
RGljdGlvbmFyeShjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIl9Mb29rIFVwIGluIERpY3Rpb25hcnkiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdPcGVuTGluaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX09wZW4g
TGluayIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIklnbm9yZSBfR3JhbW1hciIpKTsKK30K
KworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiU3BlbGxpbmcgYW5kIF9HcmFtbWFyIikpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoYm9vbCBzaG93KQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNob3cgPyBfKCJfU2hvdyBTcGVsbGluZyBhbmQgR3Jh
bW1hciIpIDogXygiX0hpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJfQ2hlY2sgRG9jdW1lbnQgTm93IikpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJDaGVjayBTcGVsbGluZyBXaGlsZSBfVHlwaW5nIikpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxsaW5nIikp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIl9Gb250IikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJ
dGVtVGFnQm9sZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpm
cm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19CT0xEKSk7CisgICAgcmV0dXJuIHN0b2Nr
TGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQoreworICAgIHN0
YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChH
VEtfU1RPQ0tfSVRBTElDKSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tM
YWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfVU5ERVJMSU5F
KSk7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdPdXRsaW5lKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3V0bGluZSIp
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJbnNwZWN0IF9FbGVtZW50IikpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmsoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSTSBfTGVmdC10by1yaWdodCBtYXJrIikpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKQoreworICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMTSBfUmlnaHQtdG8tbGVmdCBtYXJrIikpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcmsoKQorewor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9lbWJlZGRp
bmciKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0UkxFTWFy
aygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxFIFJpZ2h0LXRvLWxlZnQg
ZV9tYmVkZGluZyIpKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNl
cnRMUk9NYXJrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk8gTGVmdC10
by1yaWdodCBfb3ZlcnJpZGUiKSk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmlj
b2RlSW5zZXJ0UkxPTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxP
IFJpZ2h0LXRvLWxlZnQgb192ZXJyaWRlIikpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnVW5pY29kZUluc2VydFBERk1hcmsoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIlBERiBfUG9wIGRpcmVjdGlvbmFsIGZvcm1hdHRpbmciKSk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldTTWFyaygpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiWldTIF9aZXJvIHdpZHRoIHNwYWNlIikpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXSk1hcmsoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oIlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpKTsKK30KKwor
U3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiTm8gcmVjZW50IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgc2Vh
cmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiUmVjZW50IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgc2VhcmNoTWVudUNsZWFyUmVj
ZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfQ2xl
YXIgcmVjZW50IHNlYXJjaGVzIikpOworfQorCitTdHJpbmcgQVhEZWZpbml0aW9uVGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZGVmaW5pdGlvbiIpKTsKK30KKworU3Ry
aW5nIEFYRGVzY3JpcHRpb25MaXN0VGVybVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oInRlcm0iKSk7Cit9CisKK1N0cmluZyBBWERlc2NyaXB0aW9uTGlzdERldGFpbFRl
eHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlc2NyaXB0aW9uIikpOwor
fQorCitTdHJpbmcgQVhGb290ZXJSb2xlRGVzY3JpcHRpb25UZXh0KCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJmb290ZXIiKSk7Cit9CisKK1N0cmluZyBBWEJ1dHRvbkFjdGlv
blZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInByZXNzIikpOworfQor
CitTdHJpbmcgQVhSYWRpb0J1dHRvbkFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oInNlbGVjdCIpKTsKK30KKworU3RyaW5nIEFYVGV4dEZpZWxkQWN0aW9uVmVy
YigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYWN0aXZhdGUiKSk7Cit9CisK
K1N0cmluZyBBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInVuY2hlY2siKSk7Cit9CisKK1N0cmluZyBBWFVuY2hlY2tlZENoZWNr
Qm94QWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiY2hlY2si
KSk7Cit9CisKK1N0cmluZyBBWExpbmtBY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJqdW1wIikpOworfQorCitTdHJpbmcgQVhNZW51TGlzdFBvcHVwQWN0aW9u
VmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgQVhNZW51TGlzdEFj
dGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK1N0cmluZyBtaXNz
aW5nUGx1Z2luVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTWlzc2lu
ZyBQbHVnLWluIikpOworfQorCitTdHJpbmcgY3Jhc2hlZFBsdWdpblRleHQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGx1Zy1pbiBG
YWlsdXJlIikpOworfQorCitTdHJpbmcgYmxvY2tlZFBsdWdpbkJ5Q29udGVudFNlY3VyaXR5UG9s
aWN5VGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBpbnNlY3VyZVBsdWdpblZlcnNpb25UZXh0KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGluYWN0aXZlUGx1
Z2luVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBtdWx0aXBsZUZpbGVVcGxvYWRUZXh0KHVuc2lnbmVkIG51bWJlck9mRmls
ZXMpCit7CisgICAgLy8gRklYTUU6IElmIHRoaXMgZmlsZSBnZXRzIGxvY2FsaXplZCwgdGhpcyBz
aG91bGQgcmVhbGx5IGJlIGxvY2FsaXplZCBhcyBvbmUgc3RyaW5nIHdpdGggYSB3aWxkY2FyZCBm
b3IgdGhlIG51bWJlci4KKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyT2ZGaWxlcykg
KyBTdHJpbmc6OmZyb21VVEY4KF8oIiBmaWxlcyIpKTsKK30KKworU3RyaW5nIHVua25vd25GaWxl
U2l6ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlVua25vd24iKSk7
Cit9CisKK1N0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IElu
dFNpemUmIHNpemUpCit7CisgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50
ZihDXygiVGl0bGUgc3RyaW5nIGZvciBpbWFnZXMiLCAiJXMgICglZHglZCBwaXhlbHMpIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZS51dGY4KCku
ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChz
dHJpbmcuZ2V0KCkpOworfQorCisKKyNpZiBFTkFCTEUoVklERU8pCisKK1N0cmluZyBtZWRpYUVs
ZW1lbnRMb2FkaW5nU3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJMb2FkaW5nLi4uIikpOworfQorCitTdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2FkY2FzdFN0
YXRlVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTGl2ZSBCcm9hZGNh
c3QiKSk7Cit9CisKK1N0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3RyaW5nKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBjb250cm9sbGVy
IikpOworICAgIGlmIChuYW1lID09ICJWaWRlb0VsZW1lbnQiKQorICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJ2aWRlbyBlbGVtZW50IGNvbnRyb2xsZXIiKSk7CisgICAgaWYgKG5h
bWUgPT0gIk11dGVCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJt
dXRlIikpOworICAgIGlmIChuYW1lID09ICJVbk11dGVCdXR0b24iKQorICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJ1bm11dGUiKSk7CisgICAgaWYgKG5hbWUgPT0gIlBsYXlCdXR0
b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwbGF5IikpOworICAgIGlm
IChuYW1lID09ICJQYXVzZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInBhdXNlIikpOworICAgIGlmIChuYW1lID09ICJTbGlkZXIiKQorICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIikpOworICAgIGlmIChuYW1lID09ICJTbGlk
ZXJUaHVtYiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRpbWVsaW5lIHNs
aWRlciB0aHVtYiIpKTsKKyAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKKyAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYmFjayAzMCBzZWNvbmRzIikpOworICAgIGlmIChu
YW1lID09ICJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygicmV0dXJuIHRvIHJlYWx0aW1lIikpOworICAgIGlmIChuYW1lID09ICJDdXJy
ZW50VGltZURpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJlbGFw
c2VkIHRpbWUiKSk7CisgICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5IikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmVtYWluaW5nIHRpbWUiKSk7CisgICAg
aWYgKG5hbWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJzdGF0dXMiKSk7CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRv
biIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImVudGVyIGZ1bGxzY3JlZW4i
KSk7CisgICAgaWYgKG5hbWUgPT0gIkV4aXRGdWxsc2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZXhpdCBmdWxsc2NyZWVuIikpOworICAgIGlmIChuYW1l
ID09ICJTZWVrRm9yd2FyZEJ1dHRvbiIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oImZhc3QgZm9yd2FyZCIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0b24iKQor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmYXN0IHJldmVyc2UiKSk7CisgICAg
aWYgKG5hbWUgPT0gIlNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCisgICAgICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInNob3cgY2xvc2VkIGNhcHRpb25zIikpOworICAgIGlmIChuYW1l
ID09ICJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJoaWRlIGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBpZiAobmFtZSA9PSAiQ29u
dHJvbHNQYW5lbCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1lZGlhIGNv
bnRyb2xzIikpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCitTdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50IikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBwbGF5YmFjayBj
b250cm9scyBhbmQgc3RhdHVzIGRpc3BsYXkiKSk7CisgICAgaWYgKG5hbWUgPT0gIlZpZGVvRWxl
bWVudCIpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZpZGVvIGVsZW1lbnQg
cGxheWJhY2sgY29udHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOworICAgIGlmIChuYW1lID09
ICJNdXRlQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygibXV0ZSBh
dWRpbyB0cmFja3MiKSk7CisgICAgaWYgKG5hbWUgPT0gIlVuTXV0ZUJ1dHRvbiIpCisgICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInVubXV0ZSBhdWRpbyB0cmFja3MiKSk7CisgICAg
aWYgKG5hbWUgPT0gIlBsYXlCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJiZWdpbiBwbGF5YmFjayIpKTsKKyAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0b24iKQor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXVzZSBwbGF5YmFjayIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiU2xpZGVyIikKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygibW92aWUgdGltZSBzY3J1YmJlciIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2xpZGVyVGh1bWIi
KQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIHNjcnViYmVy
IHRodW1iIikpOworICAgIGlmIChuYW1lID09ICJSZXdpbmRCdXR0b24iKQorICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIG1vdmllIGJhY2sgMzAgc2Vjb25kcyIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCisgICAgICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInJldHVybiBzdHJlYW1pbmcgbW92aWUgdG8gcmVhbCB0aW1lIikp
OworICAgIGlmIChuYW1lID09ICJDdXJyZW50VGltZURpc3BsYXkiKQorICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJjdXJyZW50IG1vdmllIHRpbWUgaW4gc2Vjb25kcyIpKTsKKyAg
ICBpZiAobmFtZSA9PSAiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJudW1iZXIgb2Ygc2Vjb25kcyBvZiBtb3ZpZSByZW1haW5pbmciKSk7
CisgICAgaWYgKG5hbWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJjdXJyZW50IG1vdmllIHN0YXR1cyIpKTsKKyAgICBpZiAobmFtZSA9PSAi
U2Vla0JhY2tCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVr
IHF1aWNrbHkgYmFjayIpKTsKKyAgICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0b24iKQor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgZm9yd2FyZCIp
KTsKKyAgICBpZiAobmFtZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGxheSBtb3ZpZSBpbiBmdWxsc2NyZWVuIG1vZGUiKSk7
CisgICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCisgICAgICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIkV4aXQgZnVsbHNjcmVlbiBtb2RlIikpOworICAgIGlmIChu
YW1lID09ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQorICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJzdGFydCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKyAgICBp
ZiAobmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygic3RvcCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0aW9uKGZsb2F0IHRpbWUpCit7CisgICAgaWYg
KCFzdGQ6OmlzZmluaXRlKHRpbWUpKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJpbmRlZmluaXRlIHRpbWUiKSk7CisKKyAgICBpbnQgc2Vjb25kcyA9IHN0YXRpY19jYXN0PGlu
dD4oYWJzKHRpbWUpKTsKKyAgICBpbnQgZGF5cyA9IHNlY29uZHMgLyAoNjAgKiA2MCAqIDI0KTsK
KyAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOworICAgIGludCBtaW51dGVzID0g
KHNlY29uZHMgLyA2MCkgJSA2MDsKKyAgICBzZWNvbmRzICU9IDYwOworCisgICAgaWYgKGRheXMp
IHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50ZigiJWQgZGF5
cyAlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29uZHMiLCBkYXlzLCBob3VycywgbWludXRlcywg
c2Vjb25kcykpOworICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuZ2V0KCkp
OworICAgIH0KKworICAgIGlmIChob3VycykgeworICAgICAgICBHT3duUHRyPGdjaGFyPiBzdHJp
bmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29uZHMiLCBob3Vy
cywgbWludXRlcywgc2Vjb25kcykpOworICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChz
dHJpbmcuZ2V0KCkpOworICAgIH0KKworICAgIGlmIChtaW51dGVzKSB7CisgICAgICAgIEdPd25Q
dHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIs
IG1pbnV0ZXMsIHNlY29uZHMpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoc3Ry
aW5nLmdldCgpKTsKKyAgICB9CisKKyAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19zdHJkdXBf
cHJpbnRmKCIlZCBzZWNvbmRzIiwgc2Vjb25kcykpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KHN0cmluZy5nZXQoKSk7Cit9CisjZW5kaWYgIC8vIEVOQUJMRShWSURFTykKKworU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygidmFsdWUgbWlzc2luZyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25N
ZXNzYWdlVmFsdWVNaXNzaW5nRm9yQ2hlY2tib3hUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30K
KworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yRmlsZVRleHQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVN
aXNzaW5nVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdG
b3JNdWx0aXBsZUZpbGVUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKK30KKworU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yUmFkaW9UZXh0KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsK
K30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yU2VsZWN0VGV4dCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VW
YWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNt
YXRjaFRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygidHlwZSBtaXNtYXRjaCIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNz
YWdlVHlwZU1pc21hdGNoRm9yRW1haWxUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yTXVsdGlwbGVFbWFpbFRleHQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlw
ZU1pc21hdGNoVGV4dCgpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0
Y2hGb3JVUkxUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxp
ZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25N
ZXNzYWdlUGF0dGVybk1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygicGF0dGVybiBtaXNtYXRjaCIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
VG9vTG9uZ1RleHQoaW50LCBpbnQpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
dG9vIGxvbmciKSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93
VGV4dChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJh
bmdlIHVuZGVyZmxvdyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVy
Zmxvd1RleHQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJyYW5nZSBvdmVyZmxvdyIpKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlU3RlcE1p
c21hdGNoVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInN0ZXAgbWlzbWF0Y2giKSk7Cit9CisKK1N0cmluZyB1bmFjY2Vw
dGFibGVUTFNDZXJ0aWZpY2F0ZSgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
VW5hY2NlcHRhYmxlIFRMUyBjZXJ0aWZpY2F0ZSIpKTsKK30KKworU3RyaW5nIGxvY2FsaXplZFN0
cmluZyhjb25zdCBjaGFyKiBrZXkpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoa2V5
LCBzdHJsZW4oa2V5KSk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZUJhZElucHV0Rm9y
TnVtYmVyVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRh
dGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCitTdHJpbmcgdGV4dFRyYWNrQ2xvc2VkQ2FwdGlvbnNUZXh0KCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChDXygiQ2xvc2VkIENhcHRpb25zIiwgIk1lbnUgc2VjdGlvbiBoZWFk
aW5nIGZvciBjbG9zZWQgY2FwdGlvbnMiKSk7Cit9CisKK1N0cmluZyB0ZXh0VHJhY2tTdWJ0aXRs
ZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiU3VidGl0bGVzIiwg
Ik1lbnUgc2VjdGlvbiBoZWFkaW5nIGZvciBzdWJ0aXRsZXMiKSk7Cit9CisKK1N0cmluZyB0ZXh0
VHJhY2tPZmZUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiT2ZmIiwg
Ik1lbnUgaXRlbSBsYWJlbCBmb3IgdGhlIHRyYWNrIHRoYXQgcmVwcmVzZW50cyBkaXNhYmxpbmcg
Y2xvc2VkIGNhcHRpb25zIikpOworfQorCitTdHJpbmcgdGV4dFRyYWNrTm9MYWJlbFRleHQoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJObyBsYWJlbCIsICJNZW51IGl0ZW0g
bGFiZWwgZm9yIGEgY2xvc2VkIGNhcHRpb25zIHRyYWNrIHRoYXQgaGFzIG5vIG90aGVyIG5hbWUi
KSk7Cit9CisjZW5kaWYKKworU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxUaXRsZSgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIlNuYXBzaG90dGVkIFBsdWctSW4iLCAi
VGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluIikpOwor
fQorCitTdHJpbmcgc25hcHNob3R0ZWRQbHVnSW5MYWJlbFN1YnRpdGxlKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiQ2xpY2sgdG8gcmVzdGFydCIsICJTdWJ0aXRsZSBvZiB0
aGUgbGFiZWwgdG8gc2hvdyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4OThhZjdkOGJlYmNiZTA1Yzlh
YmU3ZmY0YTQxZTE3YzkwOGNmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL0xvZ2dpbmdHdGsuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbml0aWFsaXplTG9nZ2luZy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwor
I2lmICFMT0dfRElTQUJMRUQKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBJbnNwaXJlZCBieSB0aGUgY29kZSB1c2VkIGJ5IHRoZSBRdCBwb3J0CisKK3ZvaWQg
aW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9v
bCBkaWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzID0gZmFsc2U7CisgICAgaWYgKGRpZEluaXRp
YWxpemVMb2dnaW5nQ2hhbm5lbHMpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZEluaXRpYWxp
emVMb2dnaW5nQ2hhbm5lbHMgPSB0cnVlOworCisgICAgY2hhciogbG9nRW52ID0gZ2V0ZW52KCJX
RUJLSVRfREVCVUciKTsKKyAgICBpZiAoIWxvZ0VudikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gd2Ugc2V0IHVwIHRoZSBsb2dzIGFueXdheSBiZWNhdXNlIHNvbWUgb2Ygb3VyIGxvZ2dpbmcs
IHN1Y2ggYXMKKyAgICAvLyBzb3VwJ3MgaXMgYXZhaWxhYmxlIGluIHJlbGVhc2UgYnVpbGRzCisj
aWYgZGVmaW5lZChOREVCVUcpCisgICAgZ193YXJuaW5nKCJXRUJLSVRfREVCVUcgaXMgbm90IGVt
cHR5LCBidXQgdGhpcyBpcyBhIHJlbGVhc2UgYnVpbGQuIE5vdGljZSB0aGF0IG1hbnkgbG9nIG1l
c3NhZ2VzIHdpbGwgb25seSBhcHBlYXIgaW4gYSBkZWJ1ZyBidWlsZC4iKTsKKyNlbmRpZgorCisg
ICAgY2hhcioqIGxvZ3YgPSBnX3N0cnNwbGl0KGxvZ0VudiwgIiAiLCAtMSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgbG9ndltpXTsgaSsrKSB7CisgICAgICAgIGlmIChXVEZMb2dDaGFubmVsKiBj
aGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKGxvZ3ZbaV0pKQorICAgICAgICAgICAgY2hhbm5l
bC0+c3RhdGUgPSBXVEZMb2dDaGFubmVsT247CisgICAgfQorCisgICAgZ19zdHJmcmVldihsb2d2
KTsKKworICAgIC8vIHRvIGRpc2FibGUgbG9nZ2luZyBub3RJbXBsZW1lbnRlZCBzZXQgdGhlIERJ
U0FCTEVfTklfV0FSTklORworICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIDEKKyAgICBM
b2dOb3RZZXRJbXBsZW1lbnRlZC5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY3ZjE0Y2Q4ZGY3
YTU2MmIwMmVjMzJiOGRmYTJmNGNmOTZmYjJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXh0ZW5z
aW9uTWFwIHsKKyAgICBjb25zdCBjaGFyKiBleHRlbnNpb247CisgICAgY29uc3QgY2hhciogbWlt
ZVR5cGU7Cit9OworCitzdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9
IHsKKyAgICB7ICJibXAiLCAiaW1hZ2UvYm1wIiB9LAorICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIg
fSwKKyAgICB7ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAorICAgIHsgImh0bSIsICJ0ZXh0L2h0bWwi
IH0sCisgICAgeyAiaHRtbCIsICJ0ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gt
aWNvbiIgfSwKKyAgICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImlt
YWdlL2pwZWciIH0sCisgICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAor
ICAgIHsgInBkZiIsICJhcHBsaWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3Bu
ZyIgfSwKKyAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmci
LCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAg
eyAidHh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIg
fSwKKyAgICB7ICJ4bWwiLCAidGV4dC94bWwiIH0sCisgICAgeyAieHNsIiwgInRleHQveHNsIiB9
LAorICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7ICJ3bWwi
LCAidGV4dC92bmQud2FwLndtbCIgfSwKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53
YXAud21sYyIgfSwKKyAgICB7IDAsIDAgfQorfTsKKworU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOworICAgIGNv
bnN0IEV4dGVuc2lvbk1hcCAqZSA9IGV4dGVuc2lvbk1hcDsKKyAgICB3aGlsZSAoZS0+ZXh0ZW5z
aW9uKSB7CisgICAgICAgIGlmIChzID09IGUtPmV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVy
biBlLT5taW1lVHlwZTsKKyAgICAgICAgKytlOworICAgIH0KKworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5
cGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWMx
Y2M4M2EwMjM0OThjMWFiMmI4NGRjMTA5ZTlhOWM1Zjg1MGM0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyIHplY2tlQHNlbGZpc2gub3JnCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEd1c3Rh
dm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAg
Q29sbGFib3JhIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJNYWluRnJhbWVTY3JvbGxiYXJHdGsuaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitQYXNz
UmVmUHRyPE1haW5GcmFtZVNjcm9sbGJhckd0az4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVh
dGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1haW5GcmFtZVNjcm9sbGJh
ckd0ayhzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24pKTsKK30KKworLy8gQSBNYWluRnJhbWVT
Y3JvbGxiYXIgaXMganVzdCBhIG5vbi1wYWludGluZyBzY3JvbGxiYXIuIE90aGVyd2lzZSBpdCBp
cyBmdWxseQorLy8gZnVuY3Rpb25hbC4gQSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyIGFsbG93cyBh
IG1haW4tZnJhbWUgU2Nyb2xsVmlldyB0byB1c2UKKy8vIGEgY29udGFpbmluZyBHdGtTY3JvbGxl
ZFdpbmRvdyBhcyBpdHMgdXNlciBpbnRlcmZhY2UuIFRoZSBDaHJvbWVDbGllbnQgaW4gdGhlCisv
LyBXZWJLaXQgbGF5ZXIganVzdCBsaXN0ZW5zIGZvciBzY3JvbGxpbmcgYW5kIHNpemluZyBjaGFu
Z2VzIGFuZCB1cGRhdGVzIGl0cworLy8gY29udGFpbmVyICh0aGUgR3RrU2Nyb2xsZWRXaW5kb3cp
IGFjY29yZGluZ2x5LiBUaGUgU2Nyb2xsVmlldyBpcyByZXNwb25zaWJsZQorLy8gZm9yIGRlY2lk
aW5nIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBhIE1haW5GcmFtZVNjcm9sbGJhciBvciBuYXRp
dmUgc2Nyb2xsYmFyLgorTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpNYWluRnJhbWVTY3JvbGxiYXJH
dGsoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKKyAgICA6IFNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24s
IFJlZ3VsYXJTY3JvbGxiYXIpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0YWtlIHVwIGFu
eSBzcGFjZS4KKyAgICByZXNpemUoMCwgMCk7Cit9CisKK3ZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFy
R3RrOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgLy8gTWFpbiBmcmFtZSBzY3JvbGxiYXJzIGFyZSBub3QgcGFpbnRlZCBieSBXZWJD
b3JlLgorICAgIHJldHVybjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvTWFp
bkZyYW1lU2Nyb2xsYmFyR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9s
bGJhckd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiOGNiNjM4ZmRhY2M5YjBjMjVjNjA0ODE4NWQ3NTBhNzBm
NTQwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL01haW5GcmFtZVNj
cm9sbGJhckd0ay5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisKKyNpZm5kZWYg
TWFpbkZyYW1lU2Nyb2xsYmFyR3RrX2gKKyNkZWZpbmUgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrX2gK
KworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrIDogcHVi
bGljIFNjcm9sbGJhciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWFpbkZyYW1l
U2Nyb2xsYmFyR3RrPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlv
bik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmKTsKKworcHJpdmF0ZToKKyAgICBNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJsZUFy
ZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7Cit9OworCit9CisKKyNlbmRpZiAvLyBTY3JvbGxi
YXJHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E3
YTNmOTc5OTUwYWZkOGE2OGRhNGMwMTVmMzE4OTQ5NGMzMWI5OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTAsMCArMSwyMTIgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGFzdGVib2FyZC5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCisjaW5jbHVkZSAiRGF0
YU9iamVjdEd0ay5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgor
I2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJt
YXJrdXAuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
KyNpbmNsdWRlICJYTGlua05hbWVzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAgc3Rh
dGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAgIHJldHVy
biBwYXN0ZWJvYXJkOworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3sKK30KKwordm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBj
YW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIFBhc3RlYm9hcmRIZWxw
ZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7
CisgICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9h
cmQoZnJhbWUpOworCisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RH
dGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOworICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7
CisKKyAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0
KCkpOworICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5n
ZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMp
KTsKKyAgICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkLCBjYW5TbWFy
dENvcHlPckRlbGV0ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFz
dGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7Cit9CisKK3ZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRp
b24gc21hcnRSZXBsYWNlT3B0aW9uKQoreworICAgIEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0g
Z3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwg
R0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3Qg
PSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBkYXRhT2JqZWN0
LT5jbGVhckFsbCgpOworCisgICAgZGF0YU9iamVjdC0+c2V0VGV4dCh0ZXh0KTsKKyAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKGNsaXBib2FyZCwKKyAgICAgICAgKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFy
dFJlcGxhY2UpID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJv
YXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKK30KKwordm9pZCBQYXN0ZWJvYXJk
Ojp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKiBm
cmFtZSkKK3sKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKTsKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBlci0+Z2V0
Q3VycmVudENsaXBib2FyZChmcmFtZSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0
ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgZGF0YU9iamVj
dC0+Y2xlYXJBbGwoKTsKKworICAgIGRhdGFPYmplY3QtPnNldFVSTCh1cmwsIGxhYmVsKTsKKyAg
ICBoZWxwZXItPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKK30KKworc3RhdGlj
IEtVUkwgZ2V0VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgLy8gRklYTUU6IExh
dGVyIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hh
bmNlcyBhcmUgYWxsIHBsYXRmb3JtcyB3YW50IGl0LgorICAgIEF0b21pY1N0cmluZyB1cmxTdHJp
bmc7CisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAgICAgIHVybFN0cmluZyA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0
cik7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05h
bWVzOjppbWFnZVRhZykpCisgICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKS0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyNlbmRpZgorICAg
IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpIHsKKyAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgdXJsU3RyaW5nID0g
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgp
KTsKKyAgICB9CisgICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2Rl
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXModXJsU3RyaW5nKSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBu
b2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBBU1NFUlQobm9k
ZSk7CisKKyAgICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
SW1hZ2UoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9
IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSB8
fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisgICAgSW1h
Z2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAg
IEFTU0VSVChpbWFnZSk7CisKKyAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGd0a19jbGlw
Ym9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxF
Q1RJT05fQ0xJUEJPQVJEKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9i
amVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CisgICAgZGF0YU9iamVjdC0+Y2xlYXJB
bGwoKTsKKworICAgIEtVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VOb2RlKG5vZGUpOworICAgIGlm
ICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRs
ZSk7CisKKyAgICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwor
ICAgIH0KKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2Ut
PmdldEdka1BpeGJ1ZigpKTsKKyAgICBkYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkp
OworCisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlQ2xpcGJvYXJkKENsaXBib2FyZCogY2xpcGJvYXJkKQoreworICAgIEd0a0NsaXBib2FyZCog
Z3RrQ2xpcGJvYXJkID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+Y2xp
cGJvYXJkKCk7CisgICAgaWYgKGd0a0NsaXBib2FyZCkKKyAgICAgICAgUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhndGtD
bGlwYm9hcmQpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKK3sKKyAgICBndGtfY2xp
cGJvYXJkX2NsZWFyKGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSk7Cit9CisKK2Jvb2wgUGFzdGVi
b2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKK3sKKyAgICByZXR1cm4gUGFzdGVib2FyZEhlbHBlcjo6
ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Y2xpcGJvYXJkQ29udGVudFN1cHBvcnRzU21hcnRS
ZXBsYWNlKAorICAgICAgICBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCkpOworfQorCitQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRleHQs
IGJvb2wmIGNob3NlUGxhaW5UZXh0KQoreworICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7CisgICAgR3RrQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwor
ICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9h
cmQoY2xpcGJvYXJkKTsKKyAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRzKGNsaXBib2Fy
ZCk7CisKKyAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOworCisgICAgaWYgKGRhdGFPYmplY3Qt
Pmhhc01hcmt1cCgpKSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVj
dC0+bWFya3VwKCksICIiLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRl
ZCk7CisgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAgICAgIGNob3Nl
UGxhaW5UZXh0ID0gdHJ1ZTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBkYXRhT2JqZWN0LT50
ZXh0KCkpOworICAgICAgICBpZiAoZnJhZ21lbnQpCisgICAgICAgICAgICByZXR1cm4gZnJhZ21l
bnQucmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgUGFzdGVi
b2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBQYXN0ZWJvYXJkSGVscGVyKiBo
ZWxwZXIgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOworICAg
IEd0a0NsaXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZy
YW1lKTsKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKGNsaXBib2FyZCk7CisKKyAgICBoZWxwZXItPmdldENsaXBib2FyZENvbnRlbnRz
KGNsaXBib2FyZCk7CisgICAgcmV0dXJuIGRhdGFPYmplY3QtPnRleHQoKTsKK30KKworYm9vbCBQ
YXN0ZWJvYXJkOjppc1NlbGVjdGlvbk1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT51c2VQcmltYXJ5U2VsZWN0aW9u
Q2xpcGJvYXJkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6c2V0U2VsZWN0aW9uTW9kZShib29s
IHNlbGVjdGlvbk1vZGUpCit7CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+c2V0VXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChzZWxlY3Rpb25Nb2Rl
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVs
cGVyLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzZhOTc1NDM3MDc4Y2JlYjY4MTExOTlmMWRlYzI1MDkxOGJhODMxOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKQEAgLTAs
MCArMSwzMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29uIDxt
cm9iaW5zb25Ad2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgSWdhbGlhIFMuTC4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3Rl
Ym9hcmRIZWxwZXIuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkRhdGFPYmpl
Y3RHdGsuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHZGtB
dG9tIHRleHRQbGFpbkF0b207CitzdGF0aWMgR2RrQXRvbSBtYXJrdXBBdG9tOworc3RhdGljIEdk
a0F0b20gbmV0c2NhcGVVUkxBdG9tOworc3RhdGljIEdka0F0b20gdXJpTGlzdEF0b207CitzdGF0
aWMgR2RrQXRvbSBzbWFydFBhc3RlQXRvbTsKK3N0YXRpYyBTdHJpbmcgZ01hcmt1cFByZWZpeDsK
Kworc3RhdGljIHZvaWQgcmVtb3ZlTWFya3VwUHJlZml4KFN0cmluZyYgbWFya3VwKQoreworICAg
IC8vIFRoZSBtYXJrdXAgcHJlZml4IGlzIG5vdCBoYXJtZnVsLCBidXQgd2UgcmVtb3ZlIGl0IGZy
b20gdGhlIHN0cmluZyBhbnl3YXksIHNvIHRoYXQKKyAgICAvLyB3ZSBjYW4gaGF2ZSBjb25zaXN0
ZW50IHJlc3VsdHMgd2l0aCBvdGhlciBwb3J0cyBkdXJpbmcgdGhlIGxheW91dCB0ZXN0cy4KKyAg
ICBpZiAobWFya3VwLnN0YXJ0c1dpdGgoZ01hcmt1cFByZWZpeCkpCisgICAgICAgIG1hcmt1cC5y
ZW1vdmUoMCwgZ01hcmt1cFByZWZpeC5sZW5ndGgoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRH
ZGtBdG9tcygpCit7CisgICAgc3RhdGljIGdib29sZWFuIGluaXRpYWxpemVkID0gRkFMU0U7CisK
KyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluaXRpYWxpemVk
ID0gVFJVRTsKKworICAgIHRleHRQbGFpbkF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvcGxh
aW47Y2hhcnNldD11dGYtOCIsIEZBTFNFKTsKKyAgICBtYXJrdXBBdG9tID0gZ2RrX2F0b21faW50
ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSk7CisgICAgbmV0c2NhcGVVUkxBdG9tID0gZ2RrX2F0b21f
aW50ZXJuKCJfTkVUU0NBUEVfVVJMIiwgRkFMU0UpOworICAgIHVyaUxpc3RBdG9tID0gZ2RrX2F0
b21faW50ZXJuKCJ0ZXh0L3VyaS1saXN0IiwgRkFMU0UpOworICAgIHNtYXJ0UGFzdGVBdG9tID0g
Z2RrX2F0b21faW50ZXJuKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUiLCBG
QUxTRSk7CisgICAgZ01hcmt1cFByZWZpeCA9ICI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10
eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiI7Cit9CisKK1Bhc3Rl
Ym9hcmRIZWxwZXIqIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhc3RlYm9hcmRIZWxwZXIsIGRlZmF1bHRIZWxw
ZXIsICgpKTsKKyAgICByZXR1cm4gJmRlZmF1bHRIZWxwZXI7Cit9CisKK1Bhc3RlYm9hcmRIZWxw
ZXI6OlBhc3RlYm9hcmRIZWxwZXIoKQorICAgIDogbV90YXJnZXRMaXN0KGd0a190YXJnZXRfbGlz
dF9uZXcoMCwgMCkpCisgICAgLCBtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoZmFsc2Up
Cit7CisgICAgaW5pdEdka0F0b21zKCk7CisKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3RleHRf
dGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVUZXh0KTsK
KyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbWFya3VwQXRvbSwgMCwgUGFz
dGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU1hcmt1cCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2Fk
ZF91cmlfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVV
UklMaXN0KTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbmV0c2NhcGVV
UkxBdG9tLCAwLCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlTmV0c2NhcGVVUkwpOworICAg
IGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9h
cmRIZWxwZXI6OlRhcmdldFR5cGVJbWFnZSwgVFJVRSk7Cit9CisKK1Bhc3RlYm9hcmRIZWxwZXI6
On5QYXN0ZWJvYXJkSGVscGVyKCkKK3sKKyAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYobV90YXJn
ZXRMaXN0KTsKK30KKworc3RhdGljIGlubGluZSBHZGtEaXNwbGF5KiBkaXNwbGF5RnJvbUZyYW1l
KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZS0+cGFnZSgpOworICAgIEFTU0VSVChwYWdlKTsKKyAgICBDaHJvbWUqIGNocm9tZSA9IHBh
Z2UtPmNocm9tZSgpOworICAgIEFTU0VSVChjaHJvbWUpOworICAgIFBsYXRmb3JtUGFnZUNsaWVu
dCBjbGllbnQgPSBjaHJvbWUtPnBsYXRmb3JtUGFnZUNsaWVudCgpOworICAgIHJldHVybiBjbGll
bnQgPyBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KGNsaWVudCkgOiBnZGtfZGlzcGxheV9nZXRfZGVm
YXVsdCgpOworfQorCitHdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxwZXI6OmdldEN1cnJlbnRD
bGlwYm9hcmQoRnJhbWUqIGZyYW1lKQoreworICAgIGlmIChtX3VzZVByaW1hcnlTZWxlY3Rpb25D
bGlwYm9hcmQpCisgICAgICAgIHJldHVybiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZy
YW1lKTsKKyAgICByZXR1cm4gZ2V0Q2xpcGJvYXJkKGZyYW1lKTsKK30KKworR3RrQ2xpcGJvYXJk
KiBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9hcmQoRnJhbWUqIGZyYW1lKSBjb25zdAorewor
ICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNwbGF5RnJvbUZyYW1l
KGZyYW1lKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOworfQorCitHdGtDbGlwYm9hcmQqIFBh
c3RlYm9hcmRIZWxwZXI6OmdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoRnJhbWUqIGZyYW1l
KSBjb25zdAoreworICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNw
bGF5RnJvbUZyYW1lKGZyYW1lKSwgR0RLX1NFTEVDVElPTl9QUklNQVJZKTsKK30KKworR3RrVGFy
Z2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdGFyZ2V0TGlzdDsKK30KKworc3RhdGljIFN0cmluZyBzZWxlY3Rpb25EYXRhVG9VVEY4
U3RyaW5nKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEpCit7CisgICAgLy8gZ19zdHJuZHVwIGd1YXJk
cyBhZ2FpbnN0IHNlbGVjdGlvbiBkYXRhIHRoYXQgaXMgbm90IG51bGwtdGVybWluYXRlZC4KKyAg
ICBHT3duUHRyPGdjaGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19zZWxl
Y3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgobWFya3VwU3RyaW5nLmdldCgpKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpnZXRD
bGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3sKKyAgICBEYXRhT2Jq
ZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2Fy
ZCk7CisgICAgQVNTRVJUKGRhdGFPYmplY3QpOworCisgICAgaWYgKGd0a19jbGlwYm9hcmRfd2Fp
dF9pc190ZXh0X2F2YWlsYWJsZShjbGlwYm9hcmQpKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+
IHRleHREYXRhKGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKTsKKyAgICAg
ICAgaWYgKHRleHREYXRhKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChTdHJpbmc6
OmZyb21VVEY4KHRleHREYXRhLmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKGd0a19jbGlwYm9h
cmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKKyAg
ICAgICAgaWYgKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9y
X2NvbnRlbnRzKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBt
YXJrdXAoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgICAgICAgICByZW1v
dmVNYXJrdXBQcmVmaXgobWFya3VwKTsKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1
cChtYXJrdXApOworICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0YSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9h
dmFpbGFibGUoY2xpcGJvYXJkLCB1cmlMaXN0QXRvbSkpIHsKKyAgICAgICAgaWYgKEd0a1NlbGVj
dGlvbkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2Fy
ZCwgdXJpTGlzdEF0b20pKSB7CisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHNl
bGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworICAgICAgICAgICAgZ3RrX3NlbGVjdGlv
bl9kYXRhX2ZyZWUoZGF0YSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUGFzdGVib2Fy
ZEhlbHBlcjo6ZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0
YSwgZ3VpbnQgaW5mbywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBpZiAoaW5m
byA9PSBUYXJnZXRUeXBlVGV4dCkKKyAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0
KHNlbGVjdGlvbkRhdGEsIGRhdGFPYmplY3QtPnRleHQoKS51dGY4KCkuZGF0YSgpLCAtMSk7CisK
KyAgICBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVNYXJrdXApIHsKKyAgICAgICAgLy8gU29t
ZSBMaW51eCBhcHBsaWNhdGlvbnMgcmVmdXNlIHRvIGFjY2VwdCBwYXN0ZWQgbWFya3VwIHVubGVz
cyBpdCBpcworICAgICAgICAvLyBwcmVmaXhlZCBieSBhIGNvbnRlbnQtdHlwZSBtZXRhIHRhZy4K
KyAgICAgICAgQ1N0cmluZyBtYXJrdXAgPSBTdHJpbmcoZ01hcmt1cFByZWZpeCArIGRhdGFPYmpl
Y3QtPm1hcmt1cCgpKS51dGY4KCk7CisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2Vs
ZWN0aW9uRGF0YSwgbWFya3VwQXRvbSwgOCwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZ3VjaGFyKj4obWFya3VwLmRhdGEoKSksIG1hcmt1cC5sZW5ndGgoKSArIDEpOworCisg
ICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVVUklMaXN0KSB7CisgICAgICAgIENTdHJp
bmcgdXJpTGlzdCA9IGRhdGFPYmplY3QtPnVyaUxpc3QoKS51dGY4KCk7CisgICAgICAgIGd0a19z
ZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwgdXJpTGlzdEF0b20sIDgsCisgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KHVyaUxpc3QuZGF0YSgpKSwgdXJp
TGlzdC5sZW5ndGgoKSArIDEpOworCisgICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVO
ZXRzY2FwZVVSTCAmJiBkYXRhT2JqZWN0LT5oYXNVUkwoKSkgeworICAgICAgICBTdHJpbmcgdXJs
KGRhdGFPYmplY3QtPnVybCgpKTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCh1cmwpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKCJcbiIpOworCisgICAgICAgIGlmIChkYXRhT2JqZWN0LT5oYXNUZXh0
KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGFPYmplY3QtPnRleHQoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXJsKTsKKworICAgICAgICBHT3du
UHRyPGdjaGFyPiByZXN1bHREYXRhKGdfc3RyZHVwKHJlc3VsdC51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwgbmV0c2NhcGVVUkxB
dG9tLCA4LAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihyZXN1
bHREYXRhLmdldCgpKSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpICsgMSk7CisKKyAgICB9IGVs
c2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZUltYWdlKQorICAgICAgICBndGtfc2VsZWN0aW9uX2Rh
dGFfc2V0X3BpeGJ1ZihzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKKworICAg
IGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZVNtYXJ0UGFzdGUpCisgICAgICAgIGd0a19zZWxl
Y3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rpb25EYXRhLCAiIiwgLTEpOworfQorCitHdGtUYXJn
ZXRMaXN0KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2Jq
ZWN0R3RrKiBkYXRhT2JqZWN0LCBTbWFydFBhc3RlSW5jbHVzaW9uIHNob3VsZElubHVkZVNtYXJ0
UGFzdGUpCit7CisgICAgR3RrVGFyZ2V0TGlzdCogbGlzdCA9IGd0a190YXJnZXRfbGlzdF9uZXco
MCwgMCk7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQorICAgICAgICBndGtfdGFy
Z2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlVGV4dCk7CisKKyAgICBp
ZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQo
bGlzdCwgbWFya3VwQXRvbSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7CisKKyAgICBpZiAoZGF0YU9i
amVjdC0+aGFzVVJJTGlzdCgpKSB7CisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3Rh
cmdldHMobGlzdCwgVGFyZ2V0VHlwZVVSSUxpc3QpOworICAgICAgICBndGtfdGFyZ2V0X2xpc3Rf
YWRkKGxpc3QsIG5ldHNjYXBlVVJMQXRvbSwgMCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKKyAg
ICB9CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzSW1hZ2UoKSkKKyAgICAgICAgZ3RrX3Rhcmdl
dF9saXN0X2FkZF9pbWFnZV90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7CisK
KyAgICBpZiAoc2hvdWxkSW5sdWRlU21hcnRQYXN0ZSA9PSBJbmNsdWRlU21hcnRQYXN0ZSkKKyAg
ICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCBzbWFydFBhc3RlQXRvbSwgMCwgVGFyZ2V0
VHlwZVNtYXJ0UGFzdGUpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3ZvaWQgUGFzdGVib2Fy
ZEhlbHBlcjo6ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSogZGF0
YSwgZ3VpbnQgaW5mbywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBpZiAoIWd0
a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R2RrQXRvbSB0YXJnZXQgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3RhcmdldChkYXRhKTsKKyAg
ICBpZiAodGFyZ2V0ID09IHRleHRQbGFpbkF0b20pCisgICAgICAgIGRhdGFPYmplY3QtPnNldFRl
eHQoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgZWxzZSBpZiAodGFyZ2V0
ID09IG1hcmt1cEF0b20pIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxlY3Rpb25EYXRhVG9V
VEY4U3RyaW5nKGRhdGEpKTsKKyAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7Cisg
ICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChtYXJrdXApOworICAgIH0gZWxzZSBpZiAodGFy
Z2V0ID09IHVyaUxpc3RBdG9tKSB7CisgICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3Qoc2Vs
ZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0g
bmV0c2NhcGVVUkxBdG9tKSB7CisgICAgICAgIFN0cmluZyB1cmxXaXRoTGFiZWwoc2VsZWN0aW9u
RGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBpZWNlczsK
KyAgICAgICAgdXJsV2l0aExhYmVsLnNwbGl0KCJcbiIsIHBpZWNlcyk7CisKKyAgICAgICAgLy8g
R2l2ZSBwcmVmZXJlbmNlIHRvIHRleHQvdXJpLWxpc3QgaGVyZSwgYXMgaXQgY2FuIGhvbGQgbW9y
ZQorICAgICAgICAvLyB0aGFuIG9uZSBVUkkgYnV0IHN0aWxsIHRha2UgIHRoZSBsYWJlbCBpZiB0
aGVyZSBpcyBvbmUuCisgICAgICAgIGlmICghZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKQorICAg
ICAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdChwaWVjZXNbMF0pOworICAgICAgICBpZiAo
cGllY2VzLnNpemUoKSA+IDEpCisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHBpZWNl
c1sxXSk7CisgICAgfQorfQorCitWZWN0b3I8R2RrQXRvbT4gUGFzdGVib2FyZEhlbHBlcjo6ZHJv
cEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgLy8gQWx3YXlzIHNlYXJjaCBmb3IgdGhlc2UgY29tbW9uIGF0b21zLgorICAg
IFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXM7CisgICAgZHJvcEF0b21zLmFwcGVuZCh0ZXh0UGxh
aW5BdG9tKTsKKyAgICBkcm9wQXRvbXMuYXBwZW5kKG1hcmt1cEF0b20pOworICAgIGRyb3BBdG9t
cy5hcHBlbmQodXJpTGlzdEF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQobmV0c2NhcGVVUkxB
dG9tKTsKKworICAgIC8vIEZvciBpbWFnZXMsIHRyeSB0byBmaW5kIHRoZSBtb3N0IGFwcGxpY2Fi
bGUgaW1hZ2UgdHlwZS4KKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QgPSBhZG9wdEdS
ZWYoZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKSk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF9p
bWFnZV90YXJnZXRzKGxpc3QuZ2V0KCksIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7CisgICAgR2Rr
QXRvbSBhdG9tID0gZ3RrX2RyYWdfZGVzdF9maW5kX3RhcmdldCh3aWRnZXQsIGNvbnRleHQsIGxp
c3QuZ2V0KCkpOworICAgIGlmIChhdG9tICE9IEdES19OT05FKQorICAgICAgICBkcm9wQXRvbXMu
YXBwZW5kKGF0b20pOworCisgICAgcmV0dXJuIGRyb3BBdG9tczsKK30KKworc3RhdGljIERhdGFP
YmplY3RHdGsqIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0gMDsKKworc3RhdGljIHZvaWQg
Z2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgR3Rr
U2VsZWN0aW9uRGF0YSAqc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xp
cGJvYXJkKGNsaXBib2FyZCk7CisgICAgQVNTRVJUKGRhdGFPYmplY3QpOworICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNl
bGVjdGlvbkRhdGEsIGluZm8sIGRhdGFPYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBjbGVhckNs
aXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2ludGVy
IGRhdGEpCit7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6
OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOworICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKKworICAg
IC8vIE9ubHkgY2xlYXIgdGhlIERhdGFPYmplY3QgZm9yIHRoaXMgY2xpcGJvYXJkIGlmIHdlIGFy
ZSBub3QgY3VycmVudGx5IHNldHRpbmcgaXQuCisgICAgaWYgKGRhdGFPYmplY3QgIT0gc2V0dGlu
Z0NsaXBib2FyZERhdGFPYmplY3QpCisgICAgICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisK
KyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEdDbG9zdXJlKiBjYWxsYmFj
ayA9IHN0YXRpY19jYXN0PEdDbG9zdXJlKj4oZGF0YSk7CisgICAgR1ZhbHVlIGZpcnN0QXJndW1l
bnQgPSB7MCwge3swfX19OworICAgIGdfdmFsdWVfaW5pdCgmZmlyc3RBcmd1bWVudCwgR19UWVBF
X1BPSU5URVIpOworICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIoJmZpcnN0QXJndW1lbnQsIGNsaXBi
b2FyZCk7CisgICAgZ19jbG9zdXJlX2ludm9rZShjYWxsYmFjaywgMCwgMSwgJmZpcnN0QXJndW1l
bnQsIDApOworICAgIGdfY2xvc3VyZV91bnJlZihjYWxsYmFjayk7Cit9CisKK3ZvaWQgUGFzdGVi
b2FyZEhlbHBlcjo6d3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCwgU21hcnRQYXN0ZUluY2x1c2lvbiBpbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqIGNhbGxi
YWNrKQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpm
b3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKKyAgICBHdGtUYXJnZXRMaXN0KiBsaXN0ID0gdGFyZ2V0
TGlzdEZvckRhdGFPYmplY3QoZGF0YU9iamVjdCwgaW5jbHVkZVNtYXJ0UGFzdGUpOworCisgICAg
aW50IG51bWJlck9mVGFyZ2V0czsKKyAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBndGtfdGFy
Z2V0X3RhYmxlX25ld19mcm9tX2xpc3QobGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7CisKKyAgICBp
ZiAobnVtYmVyT2ZUYXJnZXRzID4gMCAmJiB0YWJsZSkgeworICAgICAgICBzZXR0aW5nQ2xpcGJv
YXJkRGF0YU9iamVjdCA9IGRhdGFPYmplY3Q7CisKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRf
d2l0aF9kYXRhKGNsaXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywKKyAgICAgICAgICAg
IGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxs
YmFjaywgY2FsbGJhY2spOworICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5fc3RvcmUoY2xp
cGJvYXJkLCAwLCAwKTsKKworICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7
CisKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihjbGlwYm9hcmQpOwor
CisgICAgaWYgKHRhYmxlKQorICAgICAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFibGUsIG51
bWJlck9mVGFyZ2V0cyk7CisgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKGxpc3QpOworfQorCiti
b29sIFBhc3RlYm9hcmRIZWxwZXI6OmNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFj
ZShHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3sKKyAgICByZXR1cm4gZ3RrX2NsaXBib2FyZF93
YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBzbWFydFBhc3RlQXRvbSk7Cit9CisK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MjM4
ZjgwZGQ4MWZjZTZmNzRmOWVkMjU2NzQxYzQ2YmY4N2Q4OTViCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBMdWNhIEJydW5vIDxsZXRoYWxtYW44OEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBQYXN0ZWJvYXJkSGVscGVyX2gKKyNkZWZpbmUgUGFzdGVib2FyZEhl
bHBlcl9oCisKKyNpbmNsdWRlICJGcmFtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERhdGFPYmplY3RHdGs7CisKK2NsYXNzIFBhc3RlYm9hcmRIZWxwZXIgeworcHVibGljOgor
ICAgIFBhc3RlYm9hcmRIZWxwZXIoKTsKKyAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkSGVscGVyKCk7
CisgICAgc3RhdGljIFBhc3RlYm9hcmRIZWxwZXIqIGRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7
CisKKyAgICB2b2lkIHNldFVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoYm9vbCB1c2VQcmlt
YXJ5KSB7IG1fdXNlUHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZCA9IHVzZVByaW1hcnk7IH0KKyAg
ICBib29sIHVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKSB7IHJldHVybiBtX3VzZVByaW1h
cnlTZWxlY3Rpb25DbGlwYm9hcmQ7IH0KKworICAgIGVudW0gU21hcnRQYXN0ZUluY2x1c2lvbiB7
IEluY2x1ZGVTbWFydFBhc3RlLCBEb05vdEluY2x1ZGVTbWFydFBhc3RlIH07CisKKyAgICBHdGtD
bGlwYm9hcmQqIGdldEN1cnJlbnRDbGlwYm9hcmQoRnJhbWUqKTsKKyAgICBHdGtDbGlwYm9hcmQq
IGdldENsaXBib2FyZChGcmFtZSopIGNvbnN0OworICAgIEd0a0NsaXBib2FyZCogZ2V0UHJpbWFy
eVNlbGVjdGlvbkNsaXBib2FyZChGcmFtZSopIGNvbnN0OworICAgIEd0a1RhcmdldExpc3QqIHRh
cmdldExpc3QoKSBjb25zdDsKKyAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9yRGF0YU9i
amVjdChEYXRhT2JqZWN0R3RrKiwgU21hcnRQYXN0ZUluY2x1c2lvbiA9IERvTm90SW5jbHVkZVNt
YXJ0UGFzdGUpOworICAgIHZvaWQgZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSos
IGd1aW50LCBEYXRhT2JqZWN0R3RrKik7CisgICAgdm9pZCBmaWxsRGF0YU9iamVjdEZyb21Ecm9w
RGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKKyAgICBWZWN0
b3I8R2RrQXRvbT4gZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4
dCopOworICAgIHZvaWQgd3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqLCBTbWFy
dFBhc3RlSW5jbHVzaW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqID0gMCk7
CisgICAgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqKTsKKworICAgIGVu
dW0gUGFzdGVib2FyZFRhcmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRUeXBlVGV4
dCwgVGFyZ2V0VHlwZUltYWdlLCBUYXJnZXRUeXBlVVJJTGlzdCwgVGFyZ2V0VHlwZU5ldHNjYXBl
VVJMLCBUYXJnZXRUeXBlU21hcnRQYXN0ZSwgVGFyZ2V0VHlwZVVua25vd24gfTsKKyAgICBib29s
IGNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVwbGFjZShHdGtDbGlwYm9hcmQqKTsKKwor
cHJpdmF0ZToKKyAgICBHdGtUYXJnZXRMaXN0KiBtX3RhcmdldExpc3Q7CisgICAgYm9vbCBtX3Vz
ZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBQYXN0ZWJv
YXJkSGVscGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXli
b2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2
ZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDZkNmUyNWM5OTAwNWEyNDIwMGNhOWQ0ZjA1MDI1NWZl
MjJmNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnRHdGsuY3BwCkBAIC0wLDAgKzEsNjMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRl
ICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1
ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNo
b3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKKy8vIG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9l
cywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCisvLyBhdCBidWlsZCB0aW1l
LgorU3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNv
ZGUodW5zaWduZWQga2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAgICAgICAg
Y2FzZSBHREtfTWVudToKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6CisgICAgICAgIGNhc2UgR0RL
X0FsdF9SOgorICAgICAgICAgICAgcmV0dXJuICJBbHQiOworICAgICAgICBjYXNlIEdES19DbGVh
cjoKKyAgICAgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIEdES19Eb3duOgor
ICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKKyAgICAgICAgICAgIC8vICJFbmQiCisgICAgICAg
IGNhc2UgR0RLX0VuZDoKKyAgICAgICAgICAgIHJldHVybiAiRW5kIjsKKyAgICAgICAgICAgIC8v
ICJFbnRlciIKKyAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgICAgICBjYXNlIEdES19L
UF9FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICAgICAgcmV0dXJuICJF
bnRlciI7CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgICAgICByZXR1cm4gIkV4
ZWN1dGUiOworICAgICAgICBjYXNlIEdES19GMToKKyAgICAgICAgICAgIHJldHVybiAiRjEiOwor
ICAgICAgICBjYXNlIEdES19GMjoKKyAgICAgICAgICAgIHJldHVybiAiRjIiOworICAgICAgICBj
YXNlIEdES19GMzoKKyAgICAgICAgICAgIHJldHVybiAiRjMiOworICAgICAgICBjYXNlIEdES19G
NDoKKyAgICAgICAgICAgIHJldHVybiAiRjQiOworICAgICAgICBjYXNlIEdES19GNToKKyAgICAg
ICAgICAgIHJldHVybiAiRjUiOworICAgICAgICBjYXNlIEdES19GNjoKKyAgICAgICAgICAgIHJl
dHVybiAiRjYiOworICAgICAgICBjYXNlIEdES19GNzoKKyAgICAgICAgICAgIHJldHVybiAiRjci
OworICAgICAgICBjYXNlIEdES19GODoKKyAgICAgICAgICAgIHJldHVybiAiRjgiOworICAgICAg
ICBjYXNlIEdES19GOToKKyAgICAgICAgICAgIHJldHVybiAiRjkiOworICAgICAgICBjYXNlIEdE
S19GMTA6CisgICAgICAgICAgICByZXR1cm4gIkYxMCI7CisgICAgICAgIGNhc2UgR0RLX0YxMToK
KyAgICAgICAgICAgIHJldHVybiAiRjExIjsKKyAgICAgICAgY2FzZSBHREtfRjEyOgorICAgICAg
ICAgICAgcmV0dXJuICJGMTIiOworICAgICAgICBjYXNlIEdES19GMTM6CisgICAgICAgICAgICBy
ZXR1cm4gIkYxMyI7CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgICAgIHJldHVybiAi
RjE0IjsKKyAgICAgICAgY2FzZSBHREtfRjE1OgorICAgICAgICAgICAgcmV0dXJuICJGMTUiOwor
ICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgICAgICByZXR1cm4gIkYxNiI7CisgICAgICAg
IGNhc2UgR0RLX0YxNzoKKyAgICAgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICAgICAgY2FzZSBH
REtfRjE4OgorICAgICAgICAgICAgcmV0dXJuICJGMTgiOworICAgICAgICBjYXNlIEdES19GMTk6
CisgICAgICAgICAgICByZXR1cm4gIkYxOSI7CisgICAgICAgIGNhc2UgR0RLX0YyMDoKKyAgICAg
ICAgICAgIHJldHVybiAiRjIwIjsKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICAgICAg
cmV0dXJuICJGMjEiOworICAgICAgICBjYXNlIEdES19GMjI6CisgICAgICAgICAgICByZXR1cm4g
IkYyMiI7CisgICAgICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgICAgIHJldHVybiAiRjIzIjsK
KyAgICAgICAgY2FzZSBHREtfRjI0OgorICAgICAgICAgICAgcmV0dXJuICJGMjQiOworICAgICAg
ICBjYXNlIEdES19IZWxwOgorICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKKyAgICAgICAgY2Fz
ZSBHREtfSG9tZToKKyAgICAgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgICAgIGNhc2UgR0RL
X0luc2VydDoKKyAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICAgICAgY2FzZSBHREtf
TGVmdDoKKyAgICAgICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgICAgIGNhc2UgR0RLX1BhZ2Vf
RG93bjoKKyAgICAgICAgICAgIHJldHVybiAiUGFnZURvd24iOworICAgICAgICBjYXNlIEdES19Q
YWdlX1VwOgorICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAiOworICAgICAgICBjYXNlIEdES19Q
YXVzZToKKyAgICAgICAgICAgIHJldHVybiAiUGF1c2UiOworICAgICAgICBjYXNlIEdES18zMjcw
X1ByaW50U2NyZWVuOgorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVy
biAiUHJpbnRTY3JlZW4iOworICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgICAgIHJl
dHVybiAiUmlnaHQiOworICAgICAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgICAgICByZXR1
cm4gIlNlbGVjdCI7CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAgICAgICAgICAgcmV0dXJuICJV
cCI7CisgICAgICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdG
LgorICAgICAgICBjYXNlIEdES19EZWxldGU6CisgICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7
CisgICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA4
IjsKKyAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgorICAgICAgICBjYXNlIEdES18zMjcw
X0JhY2tUYWI6CisgICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgICAgIHJldHVybiAiVSsw
MDA5IjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBwZXIoa2V5
Q29kZSkpKTsKKyAgICB9Cit9CisKK2ludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NL
ZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBrZXljb2RlKQoreworICAgIHN3aXRjaCAoa2V5
Y29kZSkgeworICAgICAgICBjYXNlIEdES19LUF8wOgorICAgICAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgICAgICBjYXNlIEdES19LUF8x
OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAx
IGtleQorICAgICAgICBjYXNlIEdES19LUF8yOgorICAgICAgICAgICAgcmV0dXJuICBWS19OVU1Q
QUQyOyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzM6
CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAz
IGtleQorICAgICAgICBjYXNlIEdES19LUF80OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfNToK
KyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBr
ZXkKKyAgICAgICAgY2FzZSBHREtfS1BfNjoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2
OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzc6Cisg
ICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtl
eQorICAgICAgICBjYXNlIEdES19LUF84OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7
IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfOToKKyAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5
CisgICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgorICAgICAgICAgICAgcmV0dXJuIFZLX01V
TFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQorICAgICAgICBjYXNlIEdES19LUF9BZGQ6Cisg
ICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKKyAgICAgICAgY2FzZSBH
REtfS1BfU3VidHJhY3Q6CisgICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkg
U3VidHJhY3Qga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6CisgICAgICAgICAgICBy
ZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQorICAgICAgICBjYXNlIEdES19L
UF9EaXZpZGU6CisgICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBr
ZXkKKworICAgICAgICBjYXNlIEdES19LUF9QYWdlX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93
bjoKKyAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAg
ICAgICAgY2FzZSBHREtfS1BfRW5kOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIz
KSBFTkQga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX0hvbWU6CisgICAgICAgICAgICByZXR1cm4g
VktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgICAgICBjYXNlIEdES19LUF9MZWZ0OgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICAgICAg
Y2FzZSBHREtfS1BfVXA6CisgICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJS
T1cga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX1JpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZL
X1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19LUF9Eb3du
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKKwor
ICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfQkFDSzsg
Ly8gKDA4KSBCQUNLU1BBQ0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKKyAg
ICAgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgorICAgICAgICBjYXNlIEdES19UYWI6CisgICAg
ICAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKKyAgICAgICAgY2FzZSBHREtf
Q2xlYXI6CisgICAgICAgICAgICByZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5Cisg
ICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Cisg
ICAgICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8v
KDBEKSBSZXR1cm4ga2V5CisKKyAgICAgICAgICAgIC8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5
CisgICAgICAgICAgICAvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKKworICAgICAgICBjYXNl
IEdES19NZW51OgorICAgICAgICAgICAgcmV0dXJuIFZLX0FQUFM7ICAvLyAoNUQpIEFwcGxpY2F0
aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisKKyAgICAgICAgICAgIC8vIFZLX01FTlUgKDEy
KSBBTFQga2V5CisKKyAgICAgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgICAgICByZXR1cm4g
VktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5CisgICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoK
KyAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKKyAg
ICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgorICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0Ogor
ICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAo
SU1FKSBLYW5hIG1vZGUKKyAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgICAg
ICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgICAgICAvLyBWS19G
SU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCisgICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToK
KyAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQorICAg
ICAgICBjYXNlIEdES19LYW5qaToKKyAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5
KSBJTUUgS2FuamkgbW9kZQorICAgICAgICBjYXNlIEdES19Fc2NhcGU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NPTlZF
UlQgKDFDKSBJTUUgY29udmVydAorICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElN
RSBub25jb252ZXJ0CisgICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Cisg
ICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QK
KyAgICAgICAgY2FzZSBHREtfc3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8v
ICgyMCkgU1BBQ0VCQVIKKyAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgICAgICBjYXNlIEdES19QYWdl
X0Rvd246CisgICAgICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5
CisgICAgICAgIGNhc2UgR0RLX0VuZDoKKyAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgy
MykgRU5EIGtleQorICAgICAgICBjYXNlIEdES19Ib21lOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAgICAgIGNhc2Ug
R0RLX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQor
ICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8g
KDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgICAg
IHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgICAgIGNhc2UgR0RL
X1NlbGVjdDoKKyAgICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtl
eQorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAgICAgICAgIHJldHVybiBWS19TTkFQU0hP
VDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4ga2V5CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6Cisg
ICAgICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5CisgICAgICAg
IGNhc2UgR0RLX0luc2VydDoKKyAgICAgICAgY2FzZSBHREtfS1BfSW5zZXJ0OgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAgICAgIGNhc2UgR0RLX0Rl
bGV0ZToKKyAgICAgICAgY2FzZSBHREtfS1BfRGVsZXRlOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0RFTEVURTsgLy8gKDJFKSBERUwga2V5CisgICAgICAgIGNhc2UgR0RLX0hlbHA6CisgICAgICAg
ICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgICAgICBjYXNlIEdES18w
OgorICAgICAgICBjYXNlIEdES19wYXJlbnJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzA7
ICAgIC8vICAoMzApIDApIGtleQorICAgICAgICBjYXNlIEdES18xOgorICAgICAgICBjYXNlIEdE
S19leGNsYW06CisgICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQorICAg
ICAgICBjYXNlIEdES18yOgorICAgICAgICBjYXNlIEdES19hdDoKKyAgICAgICAgICAgIHJldHVy
biBWS18yOyAvLyAgKDMyKSAyICYga2V5CisgICAgICAgIGNhc2UgR0RLXzM6CisgICAgICAgIGNh
c2UgR0RLX251bWJlcnNpZ246CisgICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzog
Y2FzZSAnIyc7CisgICAgICAgIGNhc2UgR0RLXzQ6CisgICAgICAgIGNhc2UgR0RLX2RvbGxhcjog
Ly8gICgzNCkgNCBrZXkgJyQnOworICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgICAgIGNh
c2UgR0RLXzU6CisgICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6CisgICAgICAgICAgICByZXR1cm4g
VktfNTsgLy8gICgzNSkgNSBrZXkgICclJworICAgICAgICBjYXNlIEdES182OgorICAgICAgICBj
YXNlIEdES19hc2NpaWNpcmN1bToKKyAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2
IGtleSAgJ14nCisgICAgICAgIGNhc2UgR0RLXzc6CisgICAgICAgIGNhc2UgR0RLX2FtcGVyc2Fu
ZDoKKyAgICAgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAg
ICAgICAgY2FzZSBHREtfODoKKyAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAgICAgICAg
ICByZXR1cm4gVktfODsgLy8gICgzOCkgOCBrZXkgICcqJworICAgICAgICBjYXNlIEdES185Ogor
ICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfOTsgLy8g
ICgzOSkgOSBrZXkgJygnCisgICAgICAgIGNhc2UgR0RLX2E6CisgICAgICAgIGNhc2UgR0RLX0E6
CisgICAgICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2Ug
J0EnOiByZXR1cm4gMHg0MTsKKyAgICAgICAgY2FzZSBHREtfYjoKKyAgICAgICAgY2FzZSBHREtf
QjoKKyAgICAgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2Fz
ZSAnQic6IHJldHVybiAweDQyOworICAgICAgICBjYXNlIEdES19jOgorICAgICAgICBjYXNlIEdE
S19DOgorICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBj
YXNlICdDJzogcmV0dXJuIDB4NDM7CisgICAgICAgIGNhc2UgR0RLX2Q6CisgICAgICAgIGNhc2Ug
R0RLX0Q6CisgICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6
IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKKyAgICAgICAgY2FzZSBHREtfZToKKyAgICAgICAgY2Fz
ZSBHREtfRToKKyAgICAgICAgICAgIHJldHVybiBWS19FOyAvLyAgKDQ1KSBFIGtleSBjYXNlICdl
JzogY2FzZSAnRSc6IHJldHVybiAweDQ1OworICAgICAgICBjYXNlIEdES19mOgorICAgICAgICBj
YXNlIEdES19GOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5IGNhc2Ug
J2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7CisgICAgICAgIGNhc2UgR0RLX2c6CisgICAgICAg
IGNhc2UgR0RLX0c6CisgICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2Fz
ZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKKyAgICAgICAgY2FzZSBHREtfaDoKKyAgICAg
ICAgY2FzZSBHREtfSDoKKyAgICAgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBj
YXNlICdoJzogY2FzZSAnSCc6IHJldHVybiAweDQ4OworICAgICAgICBjYXNlIEdES19pOgorICAg
ICAgICBjYXNlIEdES19JOgorICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5
IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7CisgICAgICAgIGNhc2UgR0RLX2o6Cisg
ICAgICAgIGNhc2UgR0RLX0o6CisgICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0QSkgSiBr
ZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKKyAgICAgICAgY2FzZSBHREtfazoK
KyAgICAgICAgY2FzZSBHREtfSzoKKyAgICAgICAgICAgIHJldHVybiBWS19LOyAvLyAgKDRCKSBL
IGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOworICAgICAgICBjYXNlIEdES19s
OgorICAgICAgICBjYXNlIEdES19MOgorICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMp
IEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAgICAgIGNhc2UgR0RL
X206CisgICAgICAgIGNhc2UgR0RLX006CisgICAgICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0
RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKKyAgICAgICAgY2FzZSBH
REtfbjoKKyAgICAgICAgY2FzZSBHREtfTjoKKyAgICAgICAgICAgIHJldHVybiBWS19OOyAvLyAg
KDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJldHVybiAweDRFOworICAgICAgICBjYXNl
IEdES19vOgorICAgICAgICBjYXNlIEdES19POgorICAgICAgICAgICAgcmV0dXJuIFZLX087IC8v
ICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7CisgICAgICAgIGNh
c2UgR0RLX3A6CisgICAgICAgIGNhc2UgR0RLX1A6CisgICAgICAgICAgICByZXR1cm4gVktfUDsg
Ly8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKKyAgICAgICAg
Y2FzZSBHREtfcToKKyAgICAgICAgY2FzZSBHREtfUToKKyAgICAgICAgICAgIHJldHVybiBWS19R
OyAvLyAgKDUxKSBRIGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOworICAgICAg
ICBjYXNlIEdES19yOgorICAgICAgICBjYXNlIEdES19SOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7CisgICAg
ICAgIGNhc2UgR0RLX3M6CisgICAgICAgIGNhc2UgR0RLX1M6CisgICAgICAgICAgICByZXR1cm4g
VktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2UgJ1MnOiByZXR1cm4gMHg1MzsKKyAg
ICAgICAgY2FzZSBHREtfdDoKKyAgICAgICAgY2FzZSBHREtfVDoKKyAgICAgICAgICAgIHJldHVy
biBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVybiAweDU0Owor
ICAgICAgICBjYXNlIEdES191OgorICAgICAgICBjYXNlIEdES19VOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7
CisgICAgICAgIGNhc2UgR0RLX3Y6CisgICAgICAgIGNhc2UgR0RLX1Y6CisgICAgICAgICAgICBy
ZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1
NjsKKyAgICAgICAgY2FzZSBHREtfdzoKKyAgICAgICAgY2FzZSBHREtfVzoKKyAgICAgICAgICAg
IHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtleSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAw
eDU3OworICAgICAgICBjYXNlIEdES194OgorICAgICAgICBjYXNlIEdES19YOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJu
IDB4NTg7CisgICAgICAgIGNhc2UgR0RLX3k6CisgICAgICAgIGNhc2UgR0RLX1k6CisgICAgICAg
ICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1
cm4gMHg1OTsKKyAgICAgICAgY2FzZSBHREtfejoKKyAgICAgICAgY2FzZSBHREtfWjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJl
dHVybiAweDVBOworICAgICAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgICAgICByZXR1cm4g
VktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXli
b2FyZCkKKyAgICAgICAgY2FzZSBHREtfTWV0YV9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1JX
SU47IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAg
ICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAgICAgLy8g
VktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAgICAgLy8gVktfU1VCVFJB
Q1QgKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNp
bWFsIGtleQorICAgICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAgICAg
ICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQorCisgICAgICAgIGNhc2UgR0RLX051
bV9Mb2NrOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sg
a2V5CisKKyAgICAgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgICAgICByZXR1cm4g
VktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAgIGNhc2UgR0RLX1No
aWZ0X0w6CisgICAgICAgICAgICByZXR1cm4gVktfTFNISUZUOyAvLyAoQTApIExlZnQgU0hJRlQg
a2V5CisgICAgICAgIGNhc2UgR0RLX1NoaWZ0X1I6CisgICAgICAgICAgICByZXR1cm4gVktfUlNI
SUZUOyAvLyAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAgICAgICBjYXNlIEdES19Db250cm9sX0w6
CisgICAgICAgICAgICByZXR1cm4gVktfTENPTlRST0w7IC8vIChBMikgTGVmdCBDT05UUk9MIGtl
eQorICAgICAgICBjYXNlIEdES19Db250cm9sX1I6CisgICAgICAgICAgICByZXR1cm4gVktfUkNP
TlRST0w7IC8vIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAgY2FzZSBHREtfQWx0X0w6
CisgICAgICAgICAgICByZXR1cm4gVktfTE1FTlU7IC8vIChBNCkgTGVmdCBNRU5VIGtleQorICAg
ICAgICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19STUVOVTsgLy8gKEE1
KSBSaWdodCBNRU5VIGtleQorCisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dT
RVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtleQorICAg
ICAgICAgICAgLy8gVktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93
c2VyIFJlZnJlc2gga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJf
U0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2Vy
IEZhdm9yaXRlcyBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRv
d3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBhbmQgSG9tZSBrZXkKKyAgICAgICAgICAgIC8vIFZL
X1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKKyAgICAg
ICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93
biBrZXkKKyAgICAgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDog
Vm9sdW1lIFVwIGtleQorICAgICAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdp
bmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX1BS
RVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorICAgICAg
ICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3RvcCBNZWRpYSBr
ZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAv
WFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAo
QjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xB
VU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkK
KyAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFy
dCBBcHBsaWNhdGlvbiAxIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBX
aW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisKKyAgICAgICAgICAgIC8v
IFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4g
dmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtl
eWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICAgICAgY2FzZSBHREtfc2VtaWNvbG9uOgorICAgICAg
ICBjYXNlIEdES19jb2xvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7
JzogY2FzZSAnOic6IHJldHVybiAweEJBOworICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJC
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Cisg
ICAgICAgIGNhc2UgR0RLX3BsdXM6CisgICAgICAgIGNhc2UgR0RLX2VxdWFsOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV9QTFVTOyAvL2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7
CisgICAgICAgICAgICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBh
bnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5CisgICAgICAgIGNhc2UgR0RLX2NvbW1hOgor
ICAgICAgICBjYXNlIEdES19sZXNzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsg
Ly9jYXNlICcsJzogY2FzZSAnPCc6IHJldHVybiAweEJDOworICAgICAgICAgICAgLy8gVktfT0VN
X01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUg
Jy0nIGtleQorICAgICAgICBjYXNlIEdES19taW51czoKKyAgICAgICAgY2FzZSBHREtfdW5kZXJz
Y29yZToKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2Ug
J18nOiByZXR1cm4gMHhCRDsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAgICAg
IGNhc2UgR0RLX3BlcmlvZDoKKyAgICAgICAgY2FzZSBHREtfZ3JlYXRlcjoKKyAgICAgICAgICAg
IHJldHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7
CisgICAgICAgICAgICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcvPycga2V5CisgICAgICAgIGNhc2UgR0RLX3Ns
YXNoOgorICAgICAgICBjYXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19P
RU1fMjsgLy9jYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgICAgICAgICAgLy8g
VktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2
YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5
Ym9hcmQsIHRoZSAnYH4nIGtleQorICAgICAgICBjYXNlIEdES19hc2NpaXRpbGRlOgorICAgICAg
ICBjYXNlIEdES19xdW90ZWxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vY2Fz
ZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsKKyAgICAgICAgICAgIC8vIFZLX09FTV80IChE
QikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
J1t7JyBrZXkKKyAgICAgICAgY2FzZSBHREtfYnJhY2tldGxlZnQ6CisgICAgICAgIGNhc2UgR0RL
X2JyYWNlbGVmdDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsgLy9jYXNlICdbJzogY2Fz
ZSAneyc6IHJldHVybiAweERCOworICAgICAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZv
ciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5k
b3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQor
ICAgICAgICBjYXNlIEdES19iYWNrc2xhc2g6CisgICAgICAgIGNhc2UgR0RLX2JhcjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fNTsgLy9jYXNlICdcXCc6IGNhc2UgJ3wnOiByZXR1cm4gMHhE
QzsKKyAgICAgICAgICAgIC8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBj
aGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3Ig
dGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKKyAgICAgICAgY2FzZSBHREtf
YnJhY2tldHJpZ2h0OgorICAgICAgICBjYXNlIEdES19icmFjZXJpZ2h0OgorICAgICAgICAgICAg
cmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOworICAg
ICAgICAgICAgLy8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3Rl
cnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMg
c3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Cisg
ICAgICAgIGNhc2UgR0RLX3F1b3RlcmlnaHQ6CisgICAgICAgIGNhc2UgR0RLX3F1b3RlZGJsOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX09FTV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1
cm4gMHhERTsKKyAgICAgICAgICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KKyAgICAgICAgICAgIC8v
IFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tl
dCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAg
ICAgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1Lzk4L01lLCBXaW5kb3dz
IE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkKKyAgICAgICAgICAgIC8v
IFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hh
cmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMg
dGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1r
ZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBp
biBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCisgICAgICAg
ICAgICAvLyBWS19BVFROIChGNikgQXR0biBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NSU0VMIChG
NykgQ3JTZWwga2V5CisgICAgICAgICAgICAvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQorICAg
ICAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5CisgICAgICAgICAgICAvLyBW
S19QTEFZIChGQSkgUGxheSBrZXkKKyAgICAgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29tIGtl
eQorICAgICAgICAgICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UK
KyAgICAgICAgICAgIC8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAgICAgICAgICAgIC8vIFZLX09F
TV9DTEVBUiAoRkUpIENsZWFyIGtleQorICAgICAgICBjYXNlIEdES19GMToKKyAgICAgICAgY2Fz
ZSBHREtfRjI6CisgICAgICAgIGNhc2UgR0RLX0YzOgorICAgICAgICBjYXNlIEdES19GNDoKKyAg
ICAgICAgY2FzZSBHREtfRjU6CisgICAgICAgIGNhc2UgR0RLX0Y2OgorICAgICAgICBjYXNlIEdE
S19GNzoKKyAgICAgICAgY2FzZSBHREtfRjg6CisgICAgICAgIGNhc2UgR0RLX0Y5OgorICAgICAg
ICBjYXNlIEdES19GMTA6CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgY2FzZSBHREtf
RjEyOgorICAgICAgICBjYXNlIEdES19GMTM6CisgICAgICAgIGNhc2UgR0RLX0YxNDoKKyAgICAg
ICAgY2FzZSBHREtfRjE1OgorICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgIGNhc2UgR0RL
X0YxNzoKKyAgICAgICAgY2FzZSBHREtfRjE4OgorICAgICAgICBjYXNlIEdES19GMTk6CisgICAg
ICAgIGNhc2UgR0RLX0YyMDoKKyAgICAgICAgY2FzZSBHREtfRjIxOgorICAgICAgICBjYXNlIEdE
S19GMjI6CisgICAgICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgY2FzZSBHREtfRjI0OgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOworICAgICAgICBjYXNl
IEdES19LRVlfVm9pZFN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUk9DRVNTS0VZOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9CisKK1N0
cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh1bnNpZ25l
ZCB2YWwpCit7CisgICAgc3dpdGNoICh2YWwpIHsKKyAgICAgICAgY2FzZSBHREtfSVNPX0VudGVy
OgorICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoKKyAgICAgICAgY2FzZSBHREtfUmV0dXJuOgor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHIiKTsKKyAgICAgICAgY2FzZSBHREtfQmFja1Nw
YWNlOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHg4Iik7CisgICAgICAgIGNhc2UgR0RL
X1RhYjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlx0Iik7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7Cisg
ICAgICAgICAgICBnbG9uZyBud2M7CisgICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBn
X3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2MsIDApOworCisgICAgICAgICAgICBTdHJpbmcg
cmV0VmFsOworICAgICAgICAgICAgaWYgKHVjaGFyMTYpCisgICAgICAgICAgICAgICAgcmV0VmFs
ID0gU3RyaW5nKChVQ2hhciopdWNoYXIxNiwgbndjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXRWYWwgPSBTdHJpbmcoKTsKKworICAgICAgICAgICAgZ19mcmVlKHVjaGFy
MTYpOworCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KK30KKworc3RhdGljIFBs
YXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2
ZW50KQoreworICAgIHJldHVybiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0
Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Cit9CisKK3N0YXRpYyBQ
bGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqIGV2ZW50KQoreworICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMgPSAwOworICAgIGlmIChl
dmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8fCBldmVudC0+a2V5dmFsID09IEdES18zMjcw
X0JhY2tUYWIpCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleTsK
KyAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdE
S19NT0QxX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBQbGF0Zm9ybUV2ZW50OjpBbHRLZXk7
CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVy
cyB8PSBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0
Zm9ybUV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKKy8vIEtlZXAgdGhpcyBpbiBz
eW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycworUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBj
b25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKKyAgICA6IFBsYXRm
b3JtRXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtL
ZXlFdmVudChldmVudCksIGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX3RleHQoY29tcG9zaXRpb25S
ZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVT
dHJpbmcgOiBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX3Vu
bW9kaWZpZWRUZXh0KG1fdGV4dCkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVy
Rm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlD
b2RlKHdpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1f
bmF0aXZlVmlydHVhbEtleUNvZGUoZXZlbnQtPmtleXZhbCkKKyAgICAsIG1fbWFjQ2hhckNvZGUo
MCkKKyAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKKyAgICAsIG1faXNLZXlwYWQoZXZlbnQtPmtl
eXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8PSBHREtfS1BfOSkKKyAgICAs
IG1faXNTeXN0ZW1LZXkoZmFsc2UpCisgICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQorICAgICwg
bV9jb21wb3NpdGlvblJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQoreworICAgIC8vIFRvIG1h
dGNoIHRoZSBiZWhhdmlvciBvZiBJRSwgd2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMg
dGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRpb24gcmVzdWx0cy4KKyAgICBpZiAoY29tcG9zaXRpb25S
ZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKQorICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9IFZLX1BST0NFU1NLRVk7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojpk
aXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJp
bGl0eU1vZGUpCit7CisgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRv
IFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29u
dmVyc2lvbnMuCisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBtX3R5cGUgPSB0
eXBlOworCisgICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKKyAgICAg
ICAgbV90ZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmco
KTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBv
c2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSkgeworICAgICAgICAvLyBIYXZpbmcg
ZW1wdHkgdGV4dCwgcHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBhIERPTSBrZXlwcmVzcykg
ZXZlbnQKKyAgICAgICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBLZXlzIHRoYXQgdHJpZ2dl
ciBjb21wb3NpdGlvbiBldmVudHMgc2hvdWxkIG5vdAorICAgICAgICAvLyBmaXJlIGtleXByZXNz
LgorICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9
IFN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmlu
ZygpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQorfQorCiti
b29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAg
IHJldHVybiBnZGtfa2V5bWFwX2dldF9jYXBzX2xvY2tfc3RhdGUoZ2RrX2tleW1hcF9nZXRfZGVm
YXVsdCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmdldEN1cnJlbnRNb2Rp
ZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29sJiBhbHRLZXksIGJv
b2wmIG1ldGFLZXkpCit7CisgICAgR2RrTW9kaWZpZXJUeXBlIHN0YXRlOworICAgIGd0a19nZXRf
Y3VycmVudF9ldmVudF9zdGF0ZSgmc3RhdGUpOworCisgICAgc2hpZnRLZXkgPSBzdGF0ZSAmIEdE
S19TSElGVF9NQVNLOworICAgIGN0cmxLZXkgPSBzdGF0ZSAmIEdES19DT05UUk9MX01BU0s7Cisg
ICAgYWx0S2V5ID0gc3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1ldGFLZXkgPSBzdGF0ZSAm
IEdES19NRVRBX01BU0s7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
UGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1N
b3VzZUV2ZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDEwMWMxZmEzZDcyODY2Y2JjOTUzZjg0YjU3
Mjg1OTM3ZjMyMTNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0
Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorCisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJl
IG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01P
RDFfTUFTSy4KKworLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0g
ZXZlbnQgY29uc3RydWN0b3JzCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgbV90aW1lc3RhbXAgPSBldmVudC0+dGlt
ZTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eCwgKGludClldmVudC0+
eSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnhfcm9vdCwg
KGludClldmVudC0+eV9yb290KTsKKworICAgIG1fbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZl
bnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0
S2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBt
X21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9N
QVNLKQorICAgICAgICBtX21vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0
ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7CisKKyAg
ICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAg
IGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAg
ICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVu
dDo6TW91c2VQcmVzc2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9S
RUxFQVNFKSB7CisgICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVh
c2VkOworICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChl
dmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50
ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1Mp
CisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOworICAgICAgICBlbHNlIGlmIChldmVudC0+
dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7
CisKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9u
ID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAg
ICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGV2ZW50
LT5idXR0b24gPT0gMykKKyAgICAgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAg
ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfTsKK30KKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2Rr
RXZlbnRNb3Rpb24qIG1vdGlvbikKK3sKKyAgICBtX3RpbWVzdGFtcCA9IG1vdGlvbi0+dGltZTsK
KyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55
KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwg
KGludCltb3Rpb24tPnlfcm9vdCk7CisKKyAgICBtX21vZGlmaWVycyA9IDA7CisgICAgaWYgKG1v
dGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hp
ZnRLZXk7CisgICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAg
ICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX01P
RDFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gQWx0S2V5OworICAgIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsK
KworICAgIHN3aXRjaCAobW90aW9uLT50eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElG
WToKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZDsKKyAgICAgICAg
bV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fTsKKworICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAg
bV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtf
QlVUVE9OMl9NQVNLKQorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAgICBlbHNl
IGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgbV9idXR0b24g
PSBSaWdodEJ1dHRvbjsKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxh
dGZvcm1TY3JlZW5HdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTJjNzg4MjJlNjNjOTBkYWEzMjExYmE2MTcyMzI0YTBjNWY5MTZj
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5H
dGsuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorCisjaW5jbHVkZSAi
R3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJXaWRnZXQu
aCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgR3RrV2lkZ2V0KiBnZXRUb3BsZXZlbChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtX
aWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsKKyAgICBy
ZXR1cm4gZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgPyB0b3BsZXZlbCA6IDA7Cit9
CisKK3N0YXRpYyBHZGtWaXN1YWwqIGdldFZpc3VhbChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBH
dGtXaWRnZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoIWNvbnRh
aW5lcikgeworICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1
bHQoKTsKKyAgICAgICAgcmV0dXJuIHNjcmVlbiA/IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1
YWwoc2NyZWVuKSA6IDA7CisgICAgfQorCisgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9yZWFsaXpl
ZChjb250YWluZXIpKQorICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIp
OworICAgIHJldHVybiBjb250YWluZXIgPyBnZGtfd2luZG93X2dldF92aXN1YWwoZ3RrX3dpZGdl
dF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKK30KKworaW50IHNjcmVlbkRlcHRoKFdpZGdl
dCogd2lkZ2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdpZGdldCk7
CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiAyNDsKKyAgICByZXR1cm4gZ2RrX3Zp
c3VhbF9nZXRfZGVwdGgodmlzdWFsKTsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50
KFdpZGdldCogd2lkZ2V0KQoreworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2V0VmlzdWFsKHdp
ZGdldCk7CisgICAgaWYgKCF2aXN1YWwpCisgICAgICAgIHJldHVybiA4OworCisgICAgcmV0dXJu
IGdka192aXN1YWxfZ2V0X2JpdHNfcGVyX3JnYih2aXN1YWwpOworfQorCitib29sIHNjcmVlbklz
TW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKK3sKKyAgICByZXR1cm4gc2NyZWVuRGVwdGgod2lk
Z2V0KSA8IDI7Cit9CisKKworc3RhdGljIEdka1NjcmVlbiogZ2V0U2NyZWVuKEd0a1dpZGdldCog
d2lkZ2V0KQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2hhc19zY3JlZW4od2lkZ2V0KSA/IGd0
a193aWRnZXRfZ2V0X3NjcmVlbih3aWRnZXQpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpOwor
fQorCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHdGtXaWRn
ZXQqIGNvbnRhaW5lciA9IHdpZGdldCA/IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpIDogMDsKKyAgICBpZiAoY29udGFpbmVyKQor
ICAgICAgICBjb250YWluZXIgPSBnZXRUb3BsZXZlbChjb250YWluZXIpOworCisgICAgR2RrU2Ny
ZWVuKiBzY3JlZW4gPSBjb250YWluZXIgPyBnZXRTY3JlZW4oY29udGFpbmVyKSA6IGdka19zY3Jl
ZW5fZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNjcmVlbikKKyAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworCisgICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2RrX3NjcmVlbl9nZXRf
bW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5kb3coY29udGFpbmVy
KSkgOiAwOworCisgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OworICAgIGdka19zY3JlZW5fZ2V0
X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0cnkpOworCisgICAgcmV0
dXJuIEZsb2F0UmVjdChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2Vv
bWV0cnkuaGVpZ2h0KTsKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgR3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBHVEtfV0lE
R0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSA6
IDA7CisgICAgaWYgKGNvbnRhaW5lciAmJiAhZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQoY29udGFp
bmVyKSkKKyAgICAgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0KTsKKworICAgIEdka1NjcmVl
biogc2NyZWVuID0gY29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtfc2NyZWVu
X2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFzY3JlZW4pCisgICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKworICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5fZ2V0X21v
bml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikp
IDogMDsKKworICAgIEdka1JlY3RhbmdsZSB3b3JrQXJlYTsKKyAgICBnZGtfc2NyZWVuX2dldF9t
b25pdG9yX3dvcmthcmVhKHNjcmVlbiwgbW9uaXRvciwgJndvcmtBcmVhKTsKKworICAgIHJldHVy
biBGbG9hdFJlY3Qod29ya0FyZWEueCwgd29ya0FyZWEueSwgd29ya0FyZWEud2lkdGgsIHdvcmtB
cmVhLmhlaWdodCk7CisKK30KKwordm9pZCBzY3JlZW5Db2xvclByb2ZpbGUoQ29sb3JQcm9maWxl
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5j
cHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTIwYmY5YTg5ZDc2ZDA1ZjUyOGVkMzQ5ZGUwNTM2NzI3MTJkZjhhNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2ZW50R3RrLmNwcApA
QCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9y
bSBldmVudCBjb25zdHJ1Y3RvcnMKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2
ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGVs
dGEgPSAxOworCisgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7CisgICAgbV90aW1l
c3RhbXAgPSBjdXJyZW50VGltZSgpOworCisgICAgbV9tb2RpZmllcnMgPSAwOworICAgIGlmIChl
dmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hp
ZnRLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisgICAgICAg
IG1fbW9kaWZpZXJzIHw9IEN0cmxLZXk7CisgICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NT0Qx
X01BU0spCisgICAgICAgIG1fbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAgICBpZiAoZXZlbnQtPnN0
YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKKwor
ICAgIG1fZGVsdGFYID0gMDsKKyAgICBtX2RlbHRhWSA9IDA7CisKKyAgICAvLyBEb2NzIHNheSBh
biB1cHdhcmRzIHNjcm9sbCAoYXdheSBmcm9tIHRoZSB1c2VyKSBoYXMgYSBwb3NpdGl2ZSBkZWx0
YQorICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEdES19TQ1JP
TExfVVA6CisgICAgICAgICAgICBtX2RlbHRhWSA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dOOgorICAgICAgICAgICAgbV9kZWx0YVkgPSAt
ZGVsdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6
CisgICAgICAgICAgICBtX2RlbHRhWCA9IGRlbHRhOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKKyAgICAgICAgICAgIG1fZGVsdGFYID0gLWRlbHRh
OworICAgICAgICAgICAgYnJlYWs7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgMTgpCisg
ICAgICAgIGNhc2UgR0RLX1NDUk9MTF9TTU9PVEg6IHsKKyAgICAgICAgICAgICAgICBnZG91Ymxl
IGRlbHRhWCwgZGVsdGFZOworICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfc2Nyb2xsX2Rl
bHRhcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmZGVsdGFYLCAmZGVsdGFZ
KTsKKyAgICAgICAgICAgICAgICBtX2RlbHRhWCA9IC1kZWx0YVg7CisgICAgICAgICAgICAgICAg
bV9kZWx0YVkgPSAtZGVsdGFZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisj
ZW5kaWYKKyAgICB9CisgICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOworICAgIG1fd2hlZWxU
aWNrc1kgPSBtX2RlbHRhWTsKKworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2Fz
dDxpbnQ+KGV2ZW50LT54KSwgc3RhdGljX2Nhc3Q8aW50PihldmVudC0+eSkpOworICAgIG1fZ2xv
YmFsUG9zaXRpb24gPSBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT54X3Jvb3QpLCBz
dGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT55X3Jvb3QpKTsKKyAgICBtX2dyYW51bGFyaXR5ID0gU2Ny
b2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2Ug
PSBmYWxzZTsKKworICAgIC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgdXNlciBzZXR0aW5nIGZvciB0
aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCBvbiBlYWNoIHdoZWVsIGV2ZW50CisgICAgbV9k
ZWx0YVggKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSk7CisgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
UG9wdXBNZW51R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZjUxN2IwMWVjNTI5YzVkZmE1MDJiN2FhNTBiN2VmODA0ODBlNmZjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCkBAIC0w
LDAgKzEsMTI3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUg
aW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQb3B1cE1lbnVHdGsuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgdWludDMyX3QgZ1NlYXJjaFRpbWVvdXRNcyA9IDEwMDA7CisKK1BvcHVwTWVudUd0azo6
UG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCogY2xpZW50KQorICAgIDogbV9wb3B1cENsaWVu
dChjbGllbnQpCit7Cit9CisKK1BvcHVwTWVudUd0azo6flBvcHVwTWVudUd0aygpCit7CisgICAg
aWYgKG1fcG9wdXApIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fcG9wdXAtPnBsYXRmb3JtTWVudSgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKKyAgICAgICAgaGlkZSgpOworICAgIH0KK30KKworR3RrQWN0aW9uKiBQb3B1
cE1lbnVHdGs6OmNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGludCBpdGVtSW5kZXgpCit7Cisg
ICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigicG9wdXAtbWVudS1h
Y3Rpb24tJWQiLCBpdGVtSW5kZXgpKTsKKyAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3Rp
b25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIGNsaWVudCgpLT5pdGVtVGV4dChpdGVtSW5kZXgpLnV0
ZjgoKS5kYXRhKCksIGNsaWVudCgpLT5pdGVtVG9vbFRpcChpdGVtSW5kZXgpLnV0ZjgoKS5kYXRh
KCksIDApOworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksICJwb3B1cC1t
ZW51LWFjdGlvbi1pbmRleCIsIEdJTlRfVE9fUE9JTlRFUihpdGVtSW5kZXgpKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhtZW51SXRlbUFjdGl2
YXRlZCksIHRoaXMpOworICAgIC8vIEZJWE1FOiBBcHBseSB0aGUgUG9wdXBNZW51U3R5bGUgZnJv
bSBjbGllbnQoKS0+aXRlbVN0eWxlKGkpCisgICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rp
b24sICFjbGllbnQoKS0+aXRlbVN0eWxlKGl0ZW1JbmRleCkuaXNEaXNwbGF5Tm9uZSgpKTsKKyAg
ICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLCBjbGllbnQoKS0+aXRlbUlzRW5hYmxl
ZChpdGVtSW5kZXgpKTsKKworICAgIHJldHVybiBhY3Rpb247Cit9CisKK3ZvaWQgUG9wdXBNZW51
R3RrOjpzaG93KGNvbnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4
KQoreworICAgIEFTU0VSVChjbGllbnQoKSk7CisKKyAgICBpZiAoIW1fcG9wdXApIHsKKyAgICAg
ICAgbV9wb3B1cCA9IEd0a1BvcHVwTWVudTo6Y3JlYXRlKCk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9wb3B1cC0+cGxhdGZvcm1NZW51KCksICJ1bm1hcCIsIEdfQ0FMTEJBQ0soUG9wdXBN
ZW51R3RrOjptZW51VW5tYXBwZWQpLCB0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wb3B1
cC0+Y2xlYXIoKTsKKworICAgIGNvbnN0IGludCBzaXplID0gY2xpZW50KCktPmxpc3RTaXplKCk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKGNsaWVu
dCgpLT5pdGVtSXNTZXBhcmF0b3IoaSkpCisgICAgICAgICAgICBtX3BvcHVwLT5hcHBlbmRTZXBh
cmF0b3IoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4g
YWN0aW9uID0gYWRvcHRHUmVmKGNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGkpKTsKKyAgICAg
ICAgICAgIG1fcG9wdXAtPmFwcGVuZEl0ZW0oYWN0aW9uLmdldCgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEludFBvaW50IG1lbnVQb3NpdGlvbiA9IGNvbnZlcnRXaWRnZXRQb2ludFRvU2Ny
ZWVuUG9pbnQoR1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSwgdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKKyAgICBtZW51
UG9zaXRpb24ubW92ZSgwLCByZWN0LmhlaWdodCgpKTsKKworICAgIG1fcG9wdXAtPnBvcFVwKHJl
Y3Quc2l6ZSgpLCBtZW51UG9zaXRpb24sIHNpemUsIGluZGV4LCBndGtfZ2V0X2N1cnJlbnRfZXZl
bnQoKSk7CisKKyAgICAvLyBHVEsgY2FuIHJlZnVzZSB0byBhY3R1YWxseSBvcGVuIHRoZSBtZW51
IHdoZW4gbW91c2UgZ3JhYnMgZmFpbHMuCisgICAgLy8gRW5zdXJlIFdlYkNvcmUgZG9lcyBub3Qg
Z28gaW50byBzb21lIHBlc2t5IHN0YXRlLgorICAgIGlmICghZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSkpCisgICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKK30KKwordm9pZCBQb3B1cE1lbnVHdGs6OmhpZGUoKQoreworICAgIEFTU0VSVChtX3Bv
cHVwKTsKKyAgICBtX3BvcHVwLT5wb3BEb3duKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51R3RrOjp1
cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgY2xpZW50KCktPnNldFRleHRGcm9tSXRlbShjbGll
bnQoKS0+c2VsZWN0ZWRJbmRleCgpKTsKK30KKwordm9pZCBQb3B1cE1lbnVHdGs6OmRpc2Nvbm5l
Y3RDbGllbnQoKQoreworICAgIG1fcG9wdXBDbGllbnQgPSAwOworfQorCit2b2lkIFBvcHVwTWVu
dUd0azo6bWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIFBvcHVwTWVudUd0ayog
dGhhdCkKK3sKKyAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOworICAgIHRoYXQtPmNsaWVudCgp
LT52YWx1ZUNoYW5nZWQoR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNU
KGFjdGlvbiksICJwb3B1cC1tZW51LWFjdGlvbi1pbmRleCIpKSk7Cit9CisKK3ZvaWQgUG9wdXBN
ZW51R3RrOjptZW51VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51R3RrKiB0aGF0KQorewor
ICAgIEFTU0VSVCh0aGF0LT5jbGllbnQoKSk7CisgICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlk
SGlkZSgpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUG9wdXBN
ZW51R3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJkODExZmJmNWZlMzlmN2Q0ZjRjMmMyY2IwYjgwMzUyYTZkOTA4OWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5oCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFBvcHVwTWVudUd0a19oCisjZGVmaW5lIFBvcHVwTWVu
dUd0a19oCisKKyNpbmNsdWRlICJHdGtQb3B1cE1lbnUuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiUG9wdXBNZW51LmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgU2Nyb2xsYmFy
OworCitjbGFzcyBQb3B1cE1lbnVHdGsgOiBwdWJsaWMgUG9wdXBNZW51IHsKK3B1YmxpYzoKKyAg
ICBQb3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50Kik7CisgICAgflBvcHVwTWVudUd0aygpOwor
CisgICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCBp
bmRleCk7CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
RnJvbUVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVudCgpOworCitw
cml2YXRlOgorICAgIFBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9w
b3B1cENsaWVudDsgfQorICAgIEd0a0FjdGlvbiogY3JlYXRlR3RrQWN0aW9uRm9yTWVudUl0ZW0o
aW50IGl0ZW1JbmRleCk7CisKKyAgICBzdGF0aWMgdm9pZCBtZW51VW5tYXBwZWQoR3RrV2lkZ2V0
KiwgUG9wdXBNZW51R3RrKik7CisgICAgc3RhdGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3Rr
QWN0aW9uKiwgUG9wdXBNZW51R3RrKik7CisKKyAgICBQb3B1cE1lbnVDbGllbnQqIG1fcG9wdXBD
bGllbnQ7CisgICAgT3duUHRyPEd0a1BvcHVwTWVudT4gbV9wb3B1cDsKK307CisKK30KKworI2Vu
ZGlmIC8vIFBvcHVwTWVudUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0NTI1OGYzNmFjZjc0MzczZGYx
MDAyNmZkOGM5ODk0NjBmZjZjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cuaCIKKworI2lmIFVTRShHTFgpCisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9u
cy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGRhbWFnZS5oPgorI2lu
Y2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGds
aWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8V2luZG93LCBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdyo+IFdpbmRvd0hhc2hNYXA7CitzdGF0aWMgV2luZG93SGFzaE1hcCYg
Z2V0V2luZG93SGFzaE1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXaW5kb3dIYXNo
TWFwLCB3aW5kb3dIYXNoTWFwLCAoKSk7CisgICAgcmV0dXJuIHdpbmRvd0hhc2hNYXA7Cit9CisK
K3N0YXRpYyBpbnQgZ0RhbWFnZUV2ZW50QmFzZTsKK3N0YXRpYyBHZGtGaWx0ZXJSZXR1cm4gZmls
dGVyWERhbWFnZUV2ZW50KEdka1hFdmVudCogZ2RrWEV2ZW50LCBHZGtFdmVudCogZXZlbnQsIHZv
aWQqKQoreworICAgIFhFdmVudCogeEV2ZW50ID0gc3RhdGljX2Nhc3Q8WEV2ZW50Kj4oZ2RrWEV2
ZW50KTsKKyAgICBpZiAoeEV2ZW50LT50eXBlICE9IGdEYW1hZ2VFdmVudEJhc2UgKyBYRGFtYWdl
Tm90aWZ5KQorICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKworICAgIFhEYW1h
Z2VOb3RpZnlFdmVudCogZGFtYWdlRXZlbnQgPSByZWludGVycHJldF9jYXN0PFhEYW1hZ2VOb3Rp
ZnlFdmVudCo+KHhFdmVudCk7CisgICAgV2luZG93SGFzaE1hcCYgd2luZG93SGFzaE1hcCA9IGdl
dFdpbmRvd0hhc2hNYXAoKTsKKyAgICBXaW5kb3dIYXNoTWFwOjppdGVyYXRvciBpID0gd2luZG93
SGFzaE1hcC5maW5kKGRhbWFnZUV2ZW50LT5kcmF3YWJsZSk7CisgICAgaWYgKGkgPT0gd2luZG93
SGFzaE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisKKyAg
ICBpLT52YWx1ZS0+Y2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7CisgICAgWERhbWFnZVN1YnRy
YWN0KEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpLCBkYW1h
Z2VFdmVudC0+ZGFtYWdlLCBOb25lLCBOb25lKTsKKyAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1P
VkU7Cit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzWERhbWFnZUFuZFhDb21wb3NpdGUoKQorewor
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaGFz
RXh0ZW5zaW9ucyA9IGZhbHNlOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1
cm4gaGFzRXh0ZW5zaW9uczsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGludCBl
cnJvckJhc2U7CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdk
a19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIGlmICghWERhbWFnZVF1ZXJ5RXh0ZW5zaW9u
KGRpc3BsYXksICZnRGFtYWdlRXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW50IGV2ZW50QmFzZTsKKyAgICBpZiAoIVhDb21wb3NpdGVRdWVyeUV4
dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlLCAmZXJyb3JCYXNlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IFhDb21wb3NpdGUgdmVyc2lvbiAw
LjIuCisgICAgaW50IG1ham9yLCBtaW5vcjsKKyAgICBYQ29tcG9zaXRlUXVlcnlWZXJzaW9uKGRp
c3BsYXksICZtYWpvciwgJm1pbm9yKTsKKyAgICBpZiAobWFqb3IgPCAwIHx8ICghbWFqb3IgJiYg
bWlub3IgPCAyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFzRXh0ZW5zaW9ucyA9
IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKK3sKKyAgICByZXR1cm4g
c3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpID8gYWRvcHRQdHIobmV3IFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93KHNpemUsIG5lZWRzQ29udGV4dCkpIDogbnVsbHB0cjsKK30KKworUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0
IEludFNpemUmIHNpemUsIEdMQ29udGV4dE5lZWRlZCBuZWVkc0NvbnRleHQpCisgICAgOiBtX3Np
emUoc2l6ZSkKKyAgICAsIG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAg
ICwgbV9waXhtYXAoMCkKKyAgICAsIG1fbmVlZHNDb250ZXh0KG5lZWRzQ29udGV4dCkKKyAgICAs
IG1fc3VyZmFjZSgwKQorICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplKGZhbHNlKQor
ICAgICwgbV9kYW1hZ2UoMCkKKyAgICAsIG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2soMCkKKyAgICAs
IG1fZGFtYWdlTm90aWZ5RGF0YSgwKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHREtfRElT
UExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBTY3JlZW4qIHNj
cmVlbiA9IERlZmF1bHRTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSk7CisKKyAgICAvLyBUaGlzIGlz
IGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFn
ZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdp
bmRvd0F0dHJpYnV0ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9
IFRydWU7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisgICAg
ICAgIFJvb3RXaW5kb3dPZlNjcmVlbihzY3JlZW4pLAorICAgICAgICBXaWR0aE9mU2NyZWVuKHNj
cmVlbikgKyAxLCAwLCAxLCAxLAorICAgICAgICAwLAorICAgICAgICBDb3B5RnJvbVBhcmVudCwK
KyAgICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICBD
V092ZXJyaWRlUmVkaXJlY3QsCisgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFw
V2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJpYnV0ZXMu
ZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmlidXRlcy5v
dmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhk
aXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5kb3coZGlz
cGxheSwgbV93aW5kb3cpOworCisgICAgaWYgKGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkp
CisgICAgICAgIGdka193aW5kb3dfYWRkX2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0Zp
bHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VFdmVudCksIDApOworICAgIGdldFdpbmRvd0hhc2hNYXAo
KS5hZGQobV93aW5kb3csIHRoaXMpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50
IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVy
ZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlm
eSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsK
KyAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0
ZVJlZGlyZWN0TWFudWFsKTsKKyAgICBtX2RhbWFnZSA9IFhEYW1hZ2VDcmVhdGUoZGlzcGxheSwg
bV93aW5kb3csIFhEYW1hZ2VSZXBvcnROb25FbXB0eSk7Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQoreworICAgIEFTU0VSVCht
X2RhbWFnZSk7CisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBBU1NFUlQobV9wYXJlbnRXaW5k
b3cpOworCisgICAgZ2V0V2luZG93SGFzaE1hcCgpLnJlbW92ZShtX3dpbmRvdyk7CisgICAgaWYg
KGdldFdpbmRvd0hhc2hNYXAoKS5pc0VtcHR5KCkpCisgICAgICAgIGdka193aW5kb3dfcmVtb3Zl
X2ZpbHRlcigwLCByZWludGVycHJldF9jYXN0PEdka0ZpbHRlckZ1bmM+KGZpbHRlclhEYW1hZ2VF
dmVudCksIDApOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZ
KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworICAgIFhEYW1hZ2VEZXN0cm95KGRpc3BsYXks
IG1fZGFtYWdlKTsKKyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisgICAg
WERlc3Ryb3lXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOworICAgIGNsZWFudXBQaXht
YXBBbmRQaXhtYXBTdXJmYWNlKCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkg
PSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpKTsKKyAgICBY
UmVzaXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworCisgICAgWEZsdXNoKGRpc3BsYXkpOworCisgICAgaWYgKG1fbmVlZHNDb250ZXh0ID09
IENyZWF0ZUdMQ29udGV4dCkgeworICAgICAgICBjb250ZXh0KCktPndhaXROYXRpdmUoKTsKKyAg
ICAgICAgLy8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVz
IHRvIHdvcmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCisgICAgICAgIC8vIHdo
ZXJlIGEgc3dhcCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmcm9udCBhbmQgYmFjayBidWZm
ZXJzIGFyZSBwcm9wZXJseSByZXNpemVkLgorICAgICAgICBpZiAoY29udGV4dCgpID09IEdMQ29u
dGV4dDo6Z2V0Q3VycmVudCgpKQorICAgICAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygp
OworICAgIH0KKworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVy
UmVzaXplID0gdHJ1ZTsKK30KKworR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6Y29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fbmVlZHNDb250ZXh0ID09IENyZWF0ZUdMQ29u
dGV4dCk7CisKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0Lmdl
dCgpOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6
OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRl
eHQoKSk7CisgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKK30KKwordm9pZCBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQoreworICAg
IGlmICghbV9waXhtYXApCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4bWFwKGNhaXJv
X3hsaWJfc3VyZmFjZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7Cisg
ICAgbV9waXhtYXAgPSAwOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Cit9CisKK2NhaXJvX3N1
cmZhY2VfdCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdl
dChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZSAmJiBtX3N1cmZhY2UpCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CisKKyAg
ICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKKworICAgIC8vIEl0J3MgaW1w
b3J0YW50IHRoYXQgdGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3Bs
YXkgcG9pbnRlciBhcyB0aGUgdGFyZ2V0CisgICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBz
cGVlZCBjYW4gYmUgMTAweCBzbG93ZXIuCisgICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9
IEdES19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7Cisg
ICAgUGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1h
cERpc3BsYXksIG1fd2luZG93KTsKKyAgICBpZiAoIW5ld1BpeG1hcCkgeworICAgICAgICBjbGVh
bnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIGlmICghWEdldFdp
bmRvd0F0dHJpYnV0ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1
dGVzKSkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAg
ICBYRnJlZVBpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0g
YWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQ
aXhtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAg
Ly8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93
IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8vIG9m
IGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6
aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4bWFw
IHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRv
IHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAgdG8g
dGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJmYWNl
KSB7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShu
ZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgp
LCAxLCAxLCAxKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Cisg
ICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4bWFw
QW5kUGl4bWFwU3VyZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1fc3Vy
ZmFjZSA9IG5ld1N1cmZhY2U7CisKKyAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworfQorCit2
b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2so
KQoreworICAgIGlmIChtX2RhbWFnZU5vdGlmeUNhbGxiYWNrKQorICAgICAgICBtX2RhbWFnZU5v
dGlmeUNhbGxiYWNrKG1fZGFtYWdlTm90aWZ5RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShHTFgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Jl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYyYTQ4YjJlYTVjNGFmNjYw
MTQzN2Q5ZjVjOTIxOGE2MjQ0MGQ5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsxLDg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5l
ICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisKKyNpZiBVU0UoR0xYKQorCisjaW5jbHVk
ZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNh
aXJvLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgV2luZG93OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIERhbWFnZTsKK3R5cGVkZWYgdm9p
ZCAoKkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2b2lkKik7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworcHVibGljOgorICAgIGVudW0g
R0xDb250ZXh0TmVlZGVkIHsgQ3JlYXRlR0xDb250ZXh0LCBEb05vdENyZWF0ZUdMQ29udGV4dCB9
OworICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVh
dGUoY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5lZWRlZCA9IENyZWF0ZUdMQ29udGV4dCk7Cisg
ICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKTsKKyAgICBjb25zdCBJbnRT
aXplJiBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBJ
bnRTaXplJiBuZXdTaXplKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQoKTsKKyAgICBjYWlyb19z
dXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqKTsKKyAgICBXaW5kb3cg
d2luZG93SWQoKSB7IHJldHVybiBtX3dpbmRvdzsgfQorICAgIHZvaWQgY2FsbERhbWFnZU5vdGlm
eUNhbGxiYWNrKCk7CisKKyAgICB2b2lkIHNldERhbWFnZU5vdGlmeUNhbGxiYWNrKERhbWFnZU5v
dGlmeUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgbV9kYW1h
Z2VOb3RpZnlDYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgICBtX2RhbWFnZU5vdGlmeURhdGEg
PSBkYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyhjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0TmVlZGVkKTsKKyAgICB2b2lkIGNsZWFudXBQaXht
YXBBbmRQaXhtYXBTdXJmYWNlKCk7CisKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBXaW5kb3cg
bV93aW5kb3c7CisgICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBtX3BpeG1h
cDsKKyAgICBHTENvbnRleHROZWVkZWQgbV9uZWVkc0NvbnRleHQ7CisgICAgT3duUHRyPEdMQ29u
dGV4dD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsK
KyAgICB1bnNpZ25lZCBpbnQgbV9wZW5kaW5nUmVzaXplU291cmNlSWQ7CisgICAgYm9vbCBtX25l
ZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemU7CisKKyAgICBEYW1hZ2UgbV9kYW1hZ2U7CisgICAgRGFt
YWdlTm90aWZ5Q2FsbGJhY2sgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjazsKKyAgICB2b2lkKiBtX2Rh
bWFnZU5vdGlmeURhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoR0xYKQorCisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmYyNzI3ZWFlMmMx
YWVlYzM3ZGE4YWE5YjBiOWUwNGM2OWY5OGVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTAsMCArMSw3MzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJGaWxl
TGlzdC5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSAiR3JhZGll
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9u
aW5nLmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRy
b2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCisjaW5jbHVkZSAiVGltZVJh
bmdlcy5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSA8Y21h
dGg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFBS
T0dSRVNTX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgd291bGQgYmUgYSBzdGF0aWMgbWV0aG9kLCBl
eGNlcHQgdGhhdCBmb3J3YXJkIGRlY2xhcmluZyBHVHlwZSBpcyB0cmlja3ksIHNpbmNlIGl0cwor
Ly8gZGVmaW5pdGlvbiBkZXBlbmRzIG9uIGluY2x1ZGluZyBnbGliLmgsIG5lZ2F0aW5nIHRoZSBi
ZW5lZml0IG9mIHVzaW5nIGEgZm9yd2FyZCBkZWNsYXJhdGlvbi4KK2V4dGVybiBHUmVmUHRyPEdk
a1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSwgY29uc3QgY2hhciogaWNv
bk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25TaXplKTsKK2V4dGVy
biBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdU
eXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIg
KmZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQg
aWNvblNpemUpOworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisjaWYgRU5BQkxFKFZJ
REVPKQorc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJP
YmplY3QoUmVuZGVyT2JqZWN0KiBvKQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Cisg
ICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0hvc3QoKSA6IDA7CisgICAg
aWYgKCFtZWRpYU5vZGUpCisgICAgICAgIG1lZGlhTm9kZSA9IG5vZGU7CisgICAgaWYgKCFtZWRp
YU5vZGUgfHwgIW1lZGlhTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8ICFzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obWVkaWFOb2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUJ1dHRvbnMoKQoreworICAgIHN0YXRp
YyBib29sIGljb25zSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgIGlmIChpY29uc0luaXRpYWxp
emVkKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a0ljb25GYWN0b3J5PiBpY29u
RmFjdG9yeSA9IGFkb3B0R1JlZihndGtfaWNvbl9mYWN0b3J5X25ldygpKTsKKyAgICBHdGtJY29u
U291cmNlKiBpY29uU291cmNlID0gZ3RrX2ljb25fc291cmNlX25ldygpOworICAgIGNvbnN0IGNo
YXIqIGljb25zW10gPSB7ICJhdWRpby12b2x1bWUtaGlnaCIsICJhdWRpby12b2x1bWUtbXV0ZWQi
IH07CisKKyAgICBndGtfaWNvbl9mYWN0b3J5X2FkZF9kZWZhdWx0KGljb25GYWN0b3J5LmdldCgp
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGljb25zKTsgKytp
KSB7CisgICAgICAgIGd0a19pY29uX3NvdXJjZV9zZXRfaWNvbl9uYW1lKGljb25Tb3VyY2UsIGlj
b25zW2ldKTsKKyAgICAgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19pY29uX3NldF9uZXco
KTsKKyAgICAgICAgZ3RrX2ljb25fc2V0X2FkZF9zb3VyY2UoaWNvblNldCwgaWNvblNvdXJjZSk7
CisgICAgICAgIGd0a19pY29uX2ZhY3RvcnlfYWRkKGljb25GYWN0b3J5LmdldCgpLCBpY29uc1tp
XSwgaWNvblNldCk7CisgICAgICAgIGd0a19pY29uX3NldF91bnJlZihpY29uU2V0KTsKKyAgICB9
CisKKyAgICBndGtfaWNvbl9zb3VyY2VfZnJlZShpY29uU291cmNlKTsKKworICAgIGljb25zSW5p
dGlhbGl6ZWQgPSB0cnVlOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJl
bmRlclRoZW1lR3RrOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVy
VGhlbWVHdGsoKSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0
aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0g
UmVuZGVyVGhlbWVHdGs6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gcnQ7Cit9CisK
K1JlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCisgICAgOiBtX3BhbmVsQ29sb3IoQ29s
b3I6OndoaXRlKQorICAgICwgbV9zbGlkZXJDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3Ns
aWRlclRodW1iQ29sb3IoQ29sb3I6OndoaXRlKQorICAgICwgbV9tZWRpYUljb25TaXplKDE2KQor
ICAgICwgbV9tZWRpYVNsaWRlckhlaWdodCgxNCkKK3sKKyAgICBwbGF0Zm9ybUluaXQoKTsKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgaW5pdE1lZGlhQ29sb3JzKCk7CisgICAgaW5pdE1lZGlhQnV0
dG9ucygpOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBh
cnQgYXBwZWFyYW5jZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Cisg
ICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVj
a2JveFBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRl
clZlcnRpY2FsUGFydDoKKyAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CisgICAgY2FzZSBN
ZWRpYVZvbHVtZVNsaWRlclBhcnQ6CisgICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0OgorICAg
IGNhc2UgTWVkaWFFbnRlckZ1bGxzY3JlZW5CdXR0b25QYXJ0OgorICAgIGNhc2UgTWVkaWFTbGlk
ZXJQYXJ0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3Vz
UmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBv
cnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNFbmFibGVkKG8pOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OmJhc2VsaW5l
UG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmICghby0+aXNC
b3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVGhpcyBzdHJhdGVneSBp
cyBwb3NzaWJseSBpbmNvcnJlY3QgZm9yIHRoZSBHVEsrIHBvcnQuCisgICAgaWYgKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQKKyAgICAgICAgfHwgby0+c3R5bGUoKS0+
YXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgeworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KG8pOworICAgICAgICByZXR1cm4gYm94LT5tYXJnaW5Ub3AoKSArIGJv
eC0+aGVpZ2h0KCkgLSAyOworICAgIH0KKworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxp
bmVQb3NpdGlvbihvKTsKK30KKworLy8gVGhpcyBpcyB1c2VkIGluIFJlbmRlclRoZW1lR3RrMiBh
bmQgUmVuZGVyVGhlbWVHdGszLiBOb3JtYWxseSwgaXQgd291bGQgYmUgaW4KKy8vIHRoZSBSZW5k
ZXJUaGVtZUd0ayBoZWFkZXIgKHBlcmhhcHMgYXMgYSBzdGF0aWMgbWV0aG9kKSwgYnV0IHdlIHdh
bnQgdG8gYXZvaWQKKy8vIGhhdmluZyB0byBpbmNsdWRlIEdUSysgaGVhZGVycyBvbmx5IGZvciB0
aGUgR3RrVGV4dERpcmVjdGlvbiBlbnVtLgorR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0
aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBSVEw6CisgICAgICAgIHJldHVybiBHVEtfVEVYVF9ESVJfUlRMOworICAgIGNh
c2UgTFRSOgorICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX0xUUjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX05PTkU7CisgICAgfQorfQorCitzdGF0aWMgR3Rr
U3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0KQoreworICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3Qp
KQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAgIGlmICh0aGVtZS0+
aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZF
OworICAgIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIHJldHVy
biBHVEtfU1RBVEVfUFJFTElHSFQ7CisKKyAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8g
U29tZSBsYXlvdXQgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IGJ1dHRvbnMgaWdub3JlIGxp
bmUtaGVpZ2h0LgorICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0
KQorICAgICAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7Cisg
ICAgLy8gVGhlIHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBidXR0b25z
IGlnbm9yZSBsaW5lIGhlaWdodC4KKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisKKyAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3Bl
ciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4K
KyAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0TWVu
dUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcGFpbnRN
ZW51TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwor
c3RhdGljIHZvaWQgcGFpbnRHZGtQaXhidWYoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBHZGtQaXhidWYqIGljb24sIGNvbnN0IEludFJlY3QmIGljb25SZWN0KQoreworICAgIEludFNp
emUgaWNvblNpemUoZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoaWNvbiksIGdka19waXhidWZfZ2V0X2hl
aWdodChpY29uKSk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHNjYWxlZEljb247CisgICAgaWYg
KGljb25SZWN0LnNpemUoKSAhPSBpY29uU2l6ZSkgeworICAgICAgICAvLyBXZSBjb3VsZCB1c2Ug
Y2Fpcm9fc2NhbGUoKSBoZXJlIGJ1dCBjYWlyby9waXhtYW4gZG93bnNjYWxlIHF1YWxpdHkgaXMg
cXVpdGUgYmFkLgorICAgICAgICBzY2FsZWRJY29uID0gYWRvcHRHUmVmKGdka19waXhidWZfc2Nh
bGVfc2ltcGxlKGljb24sIGljb25SZWN0LndpZHRoKCksIGljb25SZWN0LmhlaWdodCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19J
TlRFUlBfQklMSU5FQVIpKTsKKyAgICAgICAgaWNvbiA9IHNjYWxlZEljb24uZ2V0KCk7CisgICAg
fQorCisgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsK
KyAgICBjYWlyb19zYXZlKGNyKTsKKyAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhidWYoY3Is
IGljb24sIGljb25SZWN0LngoKSwgaWNvblJlY3QueSgpKTsKKyAgICBjYWlyb19wYWludChjcik7
CisgICAgY2Fpcm9fcmVzdG9yZShjcik7Cit9CisKKy8vIERlZmluZWQgaW4gR1RLKyAoZ3RrL2d0
a2ljb25mYWN0b3J5LmMpCitzdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZU1lbnUgPSAxNjsK
K3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXplU21hbGxUb29sYmFyID0gMTg7CitzdGF0aWMg
Y29uc3QgZ2ludCBndGtJY29uU2l6ZUJ1dHRvbiA9IDIwOworc3RhdGljIGNvbnN0IGdpbnQgZ3Rr
SWNvblNpemVMYXJnZVRvb2xiYXIgPSAyNDsKK3N0YXRpYyBjb25zdCBnaW50IGd0a0ljb25TaXpl
RG5kID0gMzI7CitzdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURpYWxvZyA9IDQ4OworCitz
dGF0aWMgR3RrSWNvblNpemUgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZ2ludCBwaXhlbFNpemUp
Cit7CisgICAgaWYgKHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplU21hbGxUb29sYmFyKQorICAgICAg
ICByZXR1cm4gR1RLX0lDT05fU0laRV9NRU5VOworICAgIGlmIChwaXhlbFNpemUgPj0gZ3RrSWNv
blNpemVTbWFsbFRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVCdXR0b24pCisgICAg
ICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX1NNQUxMX1RPT0xCQVI7CisgICAgaWYgKHBpeGVsU2l6
ZSA+PSBndGtJY29uU2l6ZUJ1dHRvbiAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6ZUxhcmdlVG9v
bGJhcikKKyAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOworICAgIGlmIChwaXhl
bFNpemUgPj0gZ3RrSWNvblNpemVMYXJnZVRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNp
emVEbmQpCisgICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RPT0xCQVI7CisgICAg
aWYgKHBpeGVsU2l6ZSA+PSBndGtJY29uU2l6ZURuZCAmJiBwaXhlbFNpemUgPCBndGtJY29uU2l6
ZURpYWxvZykKKyAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRE5EOworCisgICAgcmV0dXJu
IEdUS19JQ09OX1NJWkVfRElBTE9HOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgaSwgcmVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxl
KiBzdHlsZSkKK3sKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQ
YWRkaW5nKCk7CisKKyAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBz
aXplLgorICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlmIChmb250
U2l6ZSA8IGd0a0ljb25TaXplTWVudSkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGZvbnRTaXplLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250
U2l6ZSwgRml4ZWQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBnaW50IHdpZHRoID0g
MCwgaGVpZ2h0ID0gMDsKKyAgICBndGtfaWNvbl9zaXplX2xvb2t1cChnZXRJY29uU2l6ZUZvclBp
eGVsU2l6ZShmb250U2l6ZSksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChoZWln
aHQsIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHls
ZSk7Cit9CisKK3N0YXRpYyBJbnRSZWN0IGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1
dEVsZW1lbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVsZW1lbnQuCisgICAgTm9k
ZSogaW5wdXQgPSByZW5kZXJPYmplY3QtPm5vZGUoKS0+c2hhZG93SG9zdCgpOworICAgIGlmICgh
aW5wdXQpCisgICAgICAgIGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgaWYgKCFp
bnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKwor
ICAgIC8vIElmIHBvc3NpYmxlIGNlbnRlciB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSByZWN0IHZl
cnRpY2FsbHkgaW4gdGhlIHBhcmVudCBpbnB1dCBlbGVtZW50LgorICAgIC8vIFdlIGFsc28gYWRk
IG9uZSBwaXhlbCBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSB5IGNvb3JkaW5hdGUgaXMgcm91bmRl
ZCB1cCBmb3IgYm94IGhlaWdodHMKKyAgICAvLyB0aGF0IGFyZSBldmVuLCB3aGljaCBsb29rcyBp
biByZWxhdGlvbiB0byB0aGUgYm94IHRleHQuCisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3gg
PSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSktPmFic29sdXRlQ29udGVudEJveCgpOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5k
IHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCisgICAgaW50IGljb25TaXplID0gc3RkOjpt
aW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWln
aHQoKSwgcmVjdC5oZWlnaHQoKSkpOworICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0LngoKSwg
aW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBpY29uU2l6
ZSArIDEpIC8gMiwgaWNvblNpemUsIGljb25TaXplKTsKKyAgICByZXR1cm4gc2NhbGVkUmVjdDsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVy
UmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOwor
ICAgIGlmIChpY29uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtf
VFlQRV9FTlRSWSwgR1RLX1NUT0NLX0ZJTkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3Qp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7CisgICAgcGFpbnRHZGtQ
aXhidWYocGFpbnRJbmZvLmNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUpOworfQor
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGljb25SZWN0ID0gY2VudGVyUmVjdFZlcnRp
Y2FsbHlJblBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpOworICAgIGlmIChp
Y29uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8
R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9FTlRS
WSwgR1RLX1NUT0NLX0NMRUFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWNv
blNpemVGb3JQaXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOworICAgIHBhaW50R2RrUGl4YnVmKHBh
aW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8v
IFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMg
YWN0aXZlLCB1bmZvcnR1bmF0ZWx5LgorICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOwor
ICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBy
ZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8v
IFRoZSBvdGhlciBwYWludCBtZXRob2RzIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBwYWlu
dGluZyBpcyBkaXNhYmxlZCBiZWNhdXNlIFJlbmRlclRoZW1lIGFscmVhZHkgY2hlY2tzIGl0Cisg
ICAgLy8gYmVmb3JlIGNhbGxpbmcgdGhlbSwgYnV0IHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoKSBp
cyBjYWxsZWQgYnkgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIHdoaWNoIGRvZXNuJ3QgY2hl
Y2sgaXQuCisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IGljb25TaXplID0gc3RkOjptaW4ocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdl
dFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9DS19DQVBTX0xP
Q0tfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoaWNvblNpemUpKTsKKworICAgIC8v
IE9ubHkgcmUtc2NhbGUgdGhlIGljb24gd2hlbiBpdCdzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11
bSBpY29uIHNpemUuCisgICAgaWYgKGljb25TaXplID49IGd0a0ljb25TaXplTWVudSkKKyAgICAg
ICAgaWNvblNpemUgPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoaWNvbi5nZXQoKSk7CisKKyAgICAv
LyBHVEsrIGxvY2F0ZXMgdGhlIGljb24gcmlnaHQgYWxpZ25lZCBpbiB0aGUgZW50cnkuIFRoZSBn
aXZlbiByZWN0YW5nbGUgaXMgYWxyZWFkeQorICAgIC8vIGNlbnRlcmVkIHZlcnRpY2FsbHkgYnkg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54
KCkgKyByZWN0LndpZHRoKCkgLSBpY29uU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
eSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpY29uU2l6ZSkgLyAyLAorICAgICAgICAgICAgICAgICAg
ICAgaWNvblNpemUsIGljb25TaXplKTsKKyAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29u
dGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0
QmxpbmtJbnRlcnZhbCgpIGNvbnN0Cit7CisgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3Rr
X3NldHRpbmdzX2dldF9kZWZhdWx0KCk7CisKKyAgICBnYm9vbGVhbiBzaG91bGRCbGluazsKKyAg
ICBnaW50IHRpbWU7CisKKyAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsICJndGstY3Vyc29yLWJs
aW5rIiwgJnNob3VsZEJsaW5rLCAiZ3RrLWN1cnNvci1ibGluay10aW1lIiwgJnRpbWUsIE5VTEwp
OworCisgICAgaWYgKCFzaG91bGRCbGluaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gdGltZSAvIDIwMDAuOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQ
SSgpCit7CisgICAgLy8gRklYTUU6IFJlYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgd2lkZ2V0J3Mg
c2NyZWVuLgorICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgp
OworICAgIGlmICghc2NyZWVuKQorICAgICAgICByZXR1cm4gOTY7IC8vIERlZmF1bHQgdG8gOTYg
RFBJLgorCisgICAgZmxvYXQgZHBpID0gZ2RrX3NjcmVlbl9nZXRfcmVzb2x1dGlvbihzY3JlZW4p
OworICAgIGlmIChkcGkgPD0gMCkKKyAgICAgICAgcmV0dXJuIDk2OworICAgIHJldHVybiBkcGk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUZvbnQoaW50LCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3Mg
PSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBmb250IHNlbGVjdGlvbiBzdHJpbmcg
bGlrZSAiU2FucyAxMCIgc28gd2UgY2Fubm90IHVzZSBpdCBhcyB0aGUgZmFtaWx5IG5hbWUuCisg
ICAgR093blB0cjxnY2hhcj4gZm9udE5hbWU7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAi
Z3RrLWZvbnQtbmFtZSIsICZmb250TmFtZS5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICBQYW5nb0Zv
bnREZXNjcmlwdGlvbiogcGFuZ29EZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25f
ZnJvbV9zdHJpbmcoZm9udE5hbWUuZ2V0KCkpOworICAgIGlmICghcGFuZ29EZXNjcmlwdGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0
RmFtaWx5KHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShwYW5nb0Rlc2NyaXB0aW9u
KSk7CisKKyAgICBpbnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUocGFu
Z29EZXNjcmlwdGlvbikgLyBQQU5HT19TQ0FMRTsKKyAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUg
Zm9udCBpcyBpbiBwb2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMuCisgICAg
aWYgKCFwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29sdXRlKHBhbmdvRGVz
Y3JpcHRpb24pKQorICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5EUEkoKSAvIDcyLjAp
OworCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldEl0YWxpYyhmYWxzZSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKHBh
bmdvRGVzY3JpcHRpb24pOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIGluaXRNZWRpYUNvbG9ycygp
OworI2VuZGlmCisgICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7Cit9
CisKKyNpZiBFTkFCTEUoVklERU8pCitTdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhTWVkaWFD
b250cm9sc1N0eWxlU2hlZXQoKQoreworICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0d0
a1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5
bGVTaGVldCkpOworfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorU3RyaW5nIFJlbmRl
clRoZW1lR3RrOjpleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBj
aGFyKiBmYWxsYmFja1N0b2NrSWNvbk5hbWUpCit7CisgICAgSW50UmVjdCBpY29uUmVjdChyZWN0
LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKKyAgICAgICAgICAg
ICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUpIC8g
MiwKKyAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXpl
KTsKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9y
V2lkZ2V0VHlwZShHVEtfVFlQRV9DT05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNr
U3RvY2tJY29uTmFtZSwKKyAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0
eWxlKCktPmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksIGlj
b25SZWN0LndpZHRoKCkpOworICAgIHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCks
IGljb25SZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6
Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAor
eworICAgIHJldHVybiAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QsICJ2aWV3LWZ1bGxzY3JlZW4tc3ltYm9saWMiLCBHVEtfU1RPQ0tf
RlVMTFNDUkVFTik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0
dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCk7Cisg
ICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wg
bXV0ZWQgPSBtZWRpYUVsZW1lbnQtPm11dGVkKCk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0
b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwKKyAgICAgICAgbXV0ZWQg
PyAiYXVkaW8tdm9sdW1lLW11dGVkLXN5bWJvbGljIiA6ICJhdWRpby12b2x1bWUtaGlnaC1zeW1i
b2xpYyIsCisgICAgICAgIG11dGVkID8gImF1ZGlvLXZvbHVtZS1tdXRlZCIgOiAiYXVkaW8tdm9s
dW1lLWhpZ2giKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVBsYXlCdXR0
b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIE5vZGUqIG5vZGUgPSByZW5kZXJPYmplY3Qt
Pm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IW5vZGUtPmlzTWVkaWFDb250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIHBsYXkgPSBtZWRpYUNvbnRyb2xFbGVtZW50VHlwZShub2RlKSA9PSBNZWRpYVBs
YXlCdXR0b247CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWlu
dEluZm8uY29udGV4dCwgcmVjdCwKKyAgICAgICAgcGxheSA/ICJtZWRpYS1wbGF5YmFjay1zdGFy
dC1zeW1ib2xpYyIgOiAibWVkaWEtcGxheWJhY2stcGF1c2Utc3ltYm9saWMiLAorICAgICAgICBw
bGF5ID8gR1RLX1NUT0NLX01FRElBX1BMQVkgOiBHVEtfU1RPQ0tfTUVESUFfUEFVU0UpOworfQor
Citib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsICJtZWRpYS1zZWVrLWJhY2t3YXJkLXN5bWJvbGljIiwg
R1RLX1NUT0NLX01FRElBX1JFV0lORCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJu
IHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCwgcmVjdCwg
Im1lZGlhLXNlZWstZm9yd2FyZC1zeW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9GT1JXQVJEKTsK
K30KKworc3RhdGljIFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5k
ZXJTdHlsZSogc3R5bGUpCit7CisgICAgcmV0dXJuIFJvdW5kZWRSZWN0OjpSYWRpaSgKKyAgICAg
ICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUo
KSwgc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAg
ICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZh
bHVlKCksIHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkp
LAorICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgo
KS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmlu
dFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1
cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCku
aGVpZ2h0KCkuaW50VmFsdWUoKSkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQ7CisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPnNldFN0
cm9rZVN0eWxlKE5vU3Ryb2tlKTsKKworICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCk7CisgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgp
OworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgUmVmUHRyPFRpbWVS
YW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChpbmRleCwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGZsb2F0IHN0YXJ0UmF0aW8gPSBzdGFydCAvIG1l
ZGlhRHVyYXRpb247CisgICAgICAgIGZsb2F0IGxlbmd0aFJhdGlvID0gKGVuZCAtIHN0YXJ0KSAv
IG1lZGlhRHVyYXRpb247CisgICAgICAgIGlmICghbGVuZ3RoUmF0aW8pCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBJbnRSZWN0IHJhbmdlUmVjdChyKTsKKyAgICAgICAgcmFuZ2VS
ZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlvICogdG90YWxUcmFja1dpZHRoKTsKKyAgICAgICAgaWYg
KGluZGV4KQorICAgICAgICAgICAgcmFuZ2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJh
Y2tXaWR0aCwgMCk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChSb3VuZGVkUmVj
dChyYW5nZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOwor
ICAgIH0KKworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmZpbGxSb3VuZGVkUmVjdChSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHls
ZSkpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHls
ZS0+Y29sb3JTcGFjZSgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVk
aWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAo
IW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmbG9hdCB2b2x1bWUg
PSBtZWRpYUVsZW1lbnQtPnZvbHVtZSgpOworICAgIGlmICghdm9sdW1lKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0OworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShO
b1N0cm9rZSk7CisKKyAgICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgZmxv
YXQgdHJhY2tIZWlnaHQgPSByZWN0SGVpZ2h0ICogdm9sdW1lOworICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHJlbmRlck9iamVjdC0+c3R5bGUoKTsKKyAgICBJbnRSZWN0IHZvbHVtZVJlY3QocmVj
dCk7CisgICAgdm9sdW1lUmVjdC5tb3ZlKDAsIHJlY3RIZWlnaHQgLSB0cmFja0hlaWdodCk7Cisg
ICAgdm9sdW1lUmVjdC5zZXRIZWlnaHQoY2VpbCh0cmFja0hlaWdodCkpOworCisgICAgY29udGV4
dC0+ZmlsbFJvdW5kZWRSZWN0KFJvdW5kZWRSZWN0KHZvbHVtZVJlY3QsIGJvcmRlclJhZGlpRnJv
bVN0eWxlKHN0eWxlKSksCisgICAgICAgIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1
cm4gcGFpbnRNZWRpYVNsaWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsK
K30KKworU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRp
bWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVy
biBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZvcm1hdE1l
ZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQordm9pZCBSZW5k
ZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworfQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAorc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2
aXR5QmxvY2tzID0gNTsKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMg
PSAxMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAu
MTI1OworZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NB
bmltYXRpb25JbnRlcnZhbDsKK30KKworZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK3sKKyAgICByZXR1
cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICog
MjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKK30KKworSW50UmVjdCBSZW5kZXJUaGVtZUd0
azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKK3sKKyAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxs
QmFyUmVjdCk7CisgICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQ
cm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1p
bmF0ZSgpKSB7CisgICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRo
KCkgKiByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKTsKKyAgICAgICAgaWYgKHJlbmRlck9iamVj
dC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0
LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJvZ3Jlc3NX
aWR0aCk7CisgICAgICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRoKTsKKyAg
ICAgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKKyAgICB9CisKKyAgICBkb3VibGUgYW5pbWF0aW9u
UHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKKworICAgIC8v
IE5ldmVyIGxldCB0aGUgcHJvZ3Jlc3MgcmVjdCBzaHJpbmsgc21hbGxlciB0aGFuIDIgcGl4ZWxz
LgorICAgIGludCBuZXdXaWR0aCA9IG1heCgyLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSAvIHByb2dy
ZXNzQWN0aXZpdHlCbG9ja3MpOworICAgIGludCBtb3ZhYmxlV2lkdGggPSBwcm9ncmVzc1JlY3Qu
d2lkdGgoKSAtIG5ld1dpZHRoOworICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChuZXdXaWR0aCk7
CisKKyAgICAvLyBXZSB3YW50IHRoZSBmaXJzdCAwLjUgdW5pdHMgb2YgdGhlIGFuaW1hdGlvbiBw
cm9ncmVzcyB0byByZXByZXNlbnQgdGhlCisgICAgLy8gZm9yd2FyZCBtb3Rpb24gYW5kIHRoZSBz
ZWNvbmQgMC41IHVuaXRzIHRvIHJlcHJlc2VudCB0aGUgYmFja3dhcmQgbW90aW9uLAorICAgIC8v
IHRodXMgd2UgbXVsdGlwbHkgYnkgdHdvIGhlcmUgdG8gZ2V0IHRoZSBmdWxsIHN3ZWVwIG9mIHRo
ZSBwcm9ncmVzcyBiYXIgd2l0aAorICAgIC8vIGVhY2ggZGlyZWN0aW9uLgorICAgIGlmIChhbmlt
YXRpb25Qcm9ncmVzcyA8IDAuNSkKKyAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NS
ZWN0LngoKSArIChhbmltYXRpb25Qcm9ncmVzcyAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKKyAgICBl
bHNlCisgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoKDEuMCAt
IGFuaW1hdGlvblByb2dyZXNzKSAqIDIgKiBtb3ZhYmxlV2lkdGgpKTsKKyAgICByZXR1cm4gcHJv
Z3Jlc3NSZWN0OworfQorI2VuZGlmCisKK1N0cmluZyBSZW5kZXJUaGVtZUd0azo6ZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgRmlsZUxpc3QqIGZpbGVMaXN0LCBjb25zdCBGb250JiBmb250LCBp
bnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Cit7CisgICAgaWYgKHdp
ZHRoIDw9IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmIChmaWxlTGlzdC0+
bGVuZ3RoKCkgPiAxKQorICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5j
YXRlKG11bHRpcGxlRmlsZVVwbG9hZFRleHQoZmlsZUxpc3QtPmxlbmd0aCgpKSwgd2lkdGgsIGZv
bnQsIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcyk7CisKKyAgICBTdHJpbmcg
c3RyaW5nOworICAgIGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkpCisgICAgICAgIHN0cmluZyA9IHBh
dGhHZXRGaWxlTmFtZShmaWxlTGlzdC0+aXRlbSgwKS0+cGF0aCgpKTsKKyAgICBlbHNlIGlmICht
dWx0aXBsZUZpbGVzQWxsb3dlZCkKKyAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZXNT
ZWxlY3RlZExhYmVsKCk7CisgICAgZWxzZQorICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9G
aWxlU2VsZWN0ZWRMYWJlbCgpOworCisgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6Y2VudGVy
VHJ1bmNhdGUoc3RyaW5nLCB3aWR0aCwgZm9udCwgU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3Vu
ZGluZ0hhY2tzKTsKK30KKworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorSW50U2l6ZSBS
ZW5kZXJUaGVtZUd0azo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIHNldCB0aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1hcmsuCisgICAgcmV0
dXJuIEludFNpemUoMCwgMCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUd0azo6c2xpZGVyVGlja09m
ZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
c2V0IHRoaXMgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSB0aWNrIG1hcmtzLgorICAgIHJldHVybiAw
OworfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YTU4MDgwMTU3OWYxZjI0ZjBjNzZlODRlYTYxZGQzN2QzN2M3OTYyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBAIC0wLDAgKzEs
MjU2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0Lgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJlbmRlclRo
ZW1lR3RrX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVHdGtfaAorCisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK3R5cGVkZWYgc3RydWN0
IF9HZGtDb2xvcm1hcCBHZGtDb2xvcm1hcDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZW5kZXJUaGVtZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Citwcml2YXRlOgorICAgIFJl
bmRlclRoZW1lR3RrKCk7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKKworICAgIC8v
IEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFi
b3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9j
dXMgcmluZy4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBj
aGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgIHZp
cnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25z
dDsKKworICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRp
bmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9s
VGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOworCisgICAgLy8gQSBt
ZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJv
bC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQorICAgIC8vIHBvc2l0aW9u
IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2Jv
eGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgorICAgIC8vIGNvbnRyb2xzIHRo
YXQgbmVlZCB0byBkbyB0aGlzLgorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29u
c3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9u
IGNvbG9yLgorICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAg
ICAvLyBMaXN0IEJveCBzZWxlY3Rpb24gY29sb3IKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9y
IGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworCisg
ICAgLy8gU3lzdGVtIGZvbnRzIGFuZCBjb2xvcnMuCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZv
bnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wg
cG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9
CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpOworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHND
dXJyZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OworCisj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRnVsbFNj
cmVlblN0eWxlU2hlZXQoKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoREFUQUxJU1Rf
RUxFTUVOVCkKKyAgICAvLyBSZXR1cm5zIHNpemUgb2Ygb25lIHNsaWRlciB0aWNrIG1hcmsgZm9y
IGEgaG9yaXpvbnRhbCB0cmFjay4KKyAgICAvLyBGb3IgdmVydGljYWwgdHJhY2tzIHdlIHJvdGF0
ZSBpdCBhbmQgdXNlIGl0LiBpLmUuIFdpZHRoIGlzIGFsd2F5cyBsZW5ndGggYWxvbmcgdGhlIHRy
YWNrLgorICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0OworICAgIC8v
IFJldHVybnMgdGhlIGRpc3RhbmNlIG9mIHNsaWRlciB0aWNrIG9yaWdpbiBmcm9tIHRoZSBzbGlk
ZXIgdHJhY2sgY2VudGVyLgorICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJh
Y2tDZW50ZXIoKSBjb25zdDsKKyNlbmRpZgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAg
ICBHdGtXaWRnZXQqIGd0a0NvbnRhaW5lcigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrRW50
cnkoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1ZTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBH
dGtXaWRnZXQqIGd0a0hTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBnZXRJbmRp
Y2F0b3JNZXRyaWNzKENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNh
dG9yU3BhY2luZyk7CisjZWxzZQorICAgIEd0a1N0eWxlQ29udGV4dCogZ3RrU2Nyb2xsYmFyU3R5
bGUoKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2ti
b3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdS
aWdodChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1Rv
cChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgLy8gVGhlIE1hYyBwb3J0IGRpZmZlcmVudGlh
dGVzIGJldHdlZW4gdGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBidXR0b24uIgor
ICAgIC8vIFRoZSBmb3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRvbiBoYXMgYmVl
biBzdHlsZWQuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUKKyAgICAvLyBBcXVhIHRoZW1lZCBjb250
cm9scyB3aGVuZXZlciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdUSysgdGhlbWlu
Zywgc28KKyAgICAvLyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlhdGlvbi4KKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlz
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgaW5pdE1lZGlhQ29sb3Jz
KCk7CisgICAgdm9pZCBpbml0TWVkaWFCdXR0b25zKCk7CisgICAgdmlydHVhbCBib29sIGhhc093
bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBs
YXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAg
dmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2Nr
SW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5h
bWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wg
bXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0IE9WRVJSSURFOworCisgICAgdm9pZCBwbGF0Zm9y
bUluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxl
Kik7CisgICAgc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKKworI2lmIEVOQUJMRShWSURF
TykKKyAgICBib29sIHBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0
IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQorICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChS
ZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIG11dGFibGUgQ29s
b3IgbV9wYW5lbENvbG9yOworICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJDb2xvcjsKKyAgICBt
dXRhYmxlIENvbG9yIG1fc2xpZGVyVGh1bWJDb2xvcjsKKyAgICBjb25zdCBpbnQgbV9tZWRpYUlj
b25TaXplOworICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVpZ2h0OworCisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyAgICB2b2lkIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIoR3Rr
V2lkZ2V0KiwgR3RrV2lkZ2V0KikgY29uc3Q7CisgICAgdm9pZCByZWZyZXNoQ29tYm9Cb3hDaGls
ZHJlbigpIGNvbnN0OworICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiwg
aW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0OworICAg
IGludCBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3Q7CisgICAgaW50IGNvbWJvQm94
QXJyb3dTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICBHdGtXaWRnZXQqIGd0a0J1dHRv
bigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsKKyAgICBHdGtX
aWRnZXQqIGd0a1ZTY2FsZSgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrSFNjYWxlKCkgY29u
c3Q7CisgICAgR3RrV2lkZ2V0KiBndGtSYWRpb0J1dHRvbigpIGNvbnN0OworICAgIEd0a1dpZGdl
dCogZ3RrQ2hlY2tCdXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1Byb2dyZXNzQmFy
KCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveCgpIGNvbnN0OworICAgIEd0a1dp
ZGdldCogZ3RrQ29tYm9Cb3hCdXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJv
Qm94QXJyb3coKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0NvbWJvQm94U2VwYXJhdG9yKCkg
Y29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtTcGluQnV0dG9uKCkgY29uc3Q7CisKKyAgICBHZGtD
b2xvcm1hcCogbV9jb2xvcm1hcDsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtXaW5kb3c7
CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29udGFpbmVyOworICAgIG11dGFibGUgR3Rr
V2lkZ2V0KiBtX2d0a0J1dHRvbjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtFbnRyeTsK
KyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtUcmVlVmlldzsKKyAgICBtdXRhYmxlIEd0a1dp
ZGdldCogbV9ndGtWU2NhbGU7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrSFNjYWxlOwor
ICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1JhZGlvQnV0dG9uOworICAgIG11dGFibGUgR3Rr
V2lkZ2V0KiBtX2d0a0NoZWNrQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1By
b2dyZXNzQmFyOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94OworICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0NvbWJvQm94QnV0dG9uOworICAgIG11dGFibGUgR3RrV2lk
Z2V0KiBtX2d0a0NvbWJvQm94QXJyb3c7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29t
Ym9Cb3hTZXBhcmF0b3I7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNjcm9sbGJhcjsK
KyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtIU2Nyb2xsYmFyOworICAgIG11dGFibGUgR3Rr
V2lkZ2V0KiBtX2d0a1NwaW5CdXR0b247CisgICAgYm9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNv
bG9ybWFwOworICAgIGZyaWVuZCBjbGFzcyBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OworI2VuZGlm
Cit9OworCit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUd0a19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIzYTA0ODVlN2NkMTY4ZTlhYTdlMjUx
ZjU4YzQxMWQ2Mzc4NWIwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsyLmNwcApAQCAtMCwwICsxLDk2NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUaGVtZUd0ay5oIgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworLy8gV2UgbmVl
ZCB0aGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VUX0ZMQUdT
LiBJdCdzIGRlcHJlY2F0ZWQKKy8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWlyZSBpdCB0
byBlbnN1cmUgcHJvcGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgorI3VuZGVmIEdU
S19ESVNBQkxFX0RFUFJFQ0FURUQKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
R3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1lZGlh
Q29udHJvbEVsZW1lbnRzLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlVzZXJB
Z2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyss
IHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9u
LmMuCitzdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OworCisvLyBU
aGlzIGlzIG5vdCBhIHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZp
bmcgR1RLKyBoZWFkZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVj
dGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1l
R3RrOjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAg
PSB0cnVlOworICAgIG1fZ3RrV2luZG93ID0gMDsKKyAgICBtX2d0a0NvbnRhaW5lciA9IDA7Cisg
ICAgbV9ndGtCdXR0b24gPSAwOworICAgIG1fZ3RrRW50cnkgPSAwOworICAgIG1fZ3RrVHJlZVZp
ZXcgPSAwOworICAgIG1fZ3RrVlNjYWxlID0gMDsKKyAgICBtX2d0a0hTY2FsZSA9IDA7CisgICAg
bV9ndGtSYWRpb0J1dHRvbiA9IDA7CisgICAgbV9ndGtDaGVja0J1dHRvbiA9IDA7CisgICAgbV9n
dGtQcm9ncmVzc0JhciA9IDA7CisgICAgbV9ndGtDb21ib0JveCA9IDA7CisgICAgbV9ndGtDb21i
b0JveEJ1dHRvbiA9IDA7CisgICAgbV9ndGtDb21ib0JveEFycm93ID0gMDsKKyAgICBtX2d0a0Nv
bWJvQm94U2VwYXJhdG9yID0gMDsKKyAgICBtX2d0a1ZTY3JvbGxiYXIgPSAwOworICAgIG1fZ3Rr
SFNjcm9sbGJhciA9IDA7CisgICAgbV9ndGtTcGluQnV0dG9uID0gMDsKKworICAgIG1fY29sb3Jt
YXAgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KSk7CisgICAgaWYgKCFtX2NvbG9ybWFwKSB7CisgICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JB
Q29sb3JtYXAgPSBmYWxzZTsKKyAgICAgICAgbV9jb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2Rl
ZmF1bHRfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICB9Cit9CisKK1Jl
bmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQoreworICAgIGlmIChtX2d0a1dpbmRvdykK
KyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsKK30KKworI2lmIEVOQUJM
RShWSURFTykKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCit7CisgICAg
R3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250
YWluZXIoKSkpOworICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFM
XTsKKyAgICBtX3NsaWRlckNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVdOworICAg
IG1fc2xpZGVyVGh1bWJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfU0VMRUNURURdOworfQor
I2VuZGlmCisKK3N0YXRpYyB2b2lkIGFkanVzdFJlY3RGb3JGb2N1cyhHdGtXaWRnZXQqIHdpZGdl
dCwgSW50UmVjdCYgcmVjdCwgYm9vbCBpZ25vcmVJbnRlcmlvckZvY3VzUHJvcGVydHkgPSBmYWxz
ZSkKK3sKKyAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIGdib29sZWFuIGludGVy
aW9yRm9jdXMgPSAwOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsK
KyAgICBpZiAoIWlnbm9yZUludGVyaW9yRm9jdXNQcm9wZXJ0eSAmJiBpbnRlcmlvckZvY3VzKQor
ICAgICAgICByZXR1cm47CisgICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0KQoreworICAgIENvbnRyb2xQYXJ0
IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBzd2l0Y2gg
KHBhcnQpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDogewor
ICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGludGVyaW9yIGZvY3VzIHByb3BlcnR5IGFuZCBhbHdh
eXMgZXhwYW5kIHRoZSBmb2N1cyByZWN0LiBJbiBHVEsrLCB0aGUKKyAgICAgICAgLy8gZm9jdXMg
aW5kaWNhdG9yIGlzIHVzdWFsbHkgb24gdGhlIHRleHQgbmV4dCB0byBhIGNoZWNrYm94IG9yIHJh
ZGlvIGJ1dHRvbiwgYnV0IHRoYXQgZG9lc24ndAorICAgICAgICAvLyBoYXBwZW4gaW4gV2ViQ29y
ZS4gQnkgZXhwYW5kaW5nIHRoZSBmb2N1cyByZWN0YW5nbGUgdW5jb25kaXRpb25hbGx5IHdlIGlu
Y3JlYXNlIGl0cyBwcm9taW5lbmNlLgorICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMocGFydCA9
PSBDaGVja2JveFBhcnQgPyBndGtDaGVja0J1dHRvbigpIDogZ3RrUmFkaW9CdXR0b24oKSwgcmVj
dCwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJbm5lclNwaW5CdXR0
b25QYXJ0OgorICAgICAgICAvLyBTZWUgcGFpbnRJbm5lclNwaW5CdXR0b24gZm9yIGFuIGV4cGxh
bmF0aW9uIG9mIHdoeSB3ZSBleHBhbmQgdGhlIHBhaW50aW5nIHJlY3QuCisgICAgICAgIHJlY3Qu
aW5mbGF0ZVkoMik7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpICsgMik7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGljIEd0a1N0YXRl
VHlwZSBnZXRHdGtTdGF0ZVR5cGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQob2JqZWN0KSB8fCB0aGVtZS0+
aXNSZWFkT25seUNvbnRyb2wob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNF
TlNJVElWRTsKKyAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChvYmplY3QpKQorICAgICAgICByZXR1
cm4gR1RLX1NUQVRFX0FDVElWRTsKKyAgICBpZiAodGhlbWUtPmlzSG92ZXJlZChvYmplY3QpKQor
ICAgICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgIHJldHVybiBHVEtfU1RBVEVf
Tk9STUFMOworfQorCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1l
R3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3Vs
ZG4ndCBjaGFuZ2UgdGhlbS4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2ludCBpbmRpY2F0b3JTaXplOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwg
ImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOworICAgIGlmIChzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4
ZWQpKTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1l
LCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBXZSBkbyBub3Qg
Y2FsbCBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlIGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVt
ZXMgYmVnaW4gYSBzZXJpZXMgb2YKKyAgICAvLyBhbmltYXRpb24gZnJhbWVzIGluIGEgInRvZ2ds
ZWQiIHNpZ25hbCBoYW5kbGVyLiBUaGlzIHB1dHMgc29tZSBjaGVja2JveGVzIGluIGEgaGFsZi13
YXkKKyAgICAvLyBjaGVja2VkIHN0YXRlLiBFdmVyeSBHVEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVs
eSBsb29rcyBhdCB0aGUgc2hhZG93IHR5cGUgKGFuZCBub3QgdGhlCisgICAgLy8gJ2FjdGl2ZScg
cHJvcGVydHkpIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBjaGVjay4K
KyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCB0aGVtZS0+aXNFbmFibGVkKHJl
bmRlck9iamVjdCkgJiYgIXRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKTsK
KyAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKKworICAgIGJvb2wgaW5kZXRlcm1p
bmF0ZSA9IHRoZW1lLT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKKyAgICBndGtfdG9n
Z2xlX2J1dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGlu
ZGV0ZXJtaW5hdGUpOworCisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURP
V19PVVQ7CisgICAgaWYgKGluZGV0ZXJtaW5hdGUpIC8vIFRoaXMgb3JpZ2luYXRlcyBmcm9tIHRo
ZSBNb3ppbGxhIGNvZGUuCisgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hFRF9J
TjsKKyAgICBlbHNlIGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCisgICAgICAg
IHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOworCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVjdCBidXR0b25S
ZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBHdGtTdGF0ZVR5cGUgdG9nZ2xlU3Rh
dGUgPSBnZXRHdGtTdGF0ZVR5cGUodGhlbWUsIHJlbmRlck9iamVjdCk7CisgICAgY29uc3QgY2hh
ciogZGV0YWlsID0gMDsKKyAgICBpZiAoR1RLX0lTX1JBRElPX0JVVFRPTih3aWRnZXQpKSB7Cisg
ICAgICAgIGRldGFpbCA9ICJyYWRpb2J1dHRvbiI7CisgICAgICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRPcHRpb24oYnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwg
ZGV0YWlsKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXRhaWwgPSAiY2hlY2tidXR0b24iOwor
ICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Q2hlY2soYnV0dG9uUmVjdCwgd2lkZ2V0LCB0
b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKKyAgICB9CisKKyAgICBpZiAodGhlbWUt
PmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KGJ1
dHRvblJlY3QpOworICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMod2lkZ2V0LCBmb2N1c1JlY3Qs
IHRydWUpOworICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0LCB3
aWRnZXQsIHRvZ2dsZVN0YXRlLCBkZXRhaWwpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVt
ZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBz
ZXRUb2dnbGVTaXplKHRoaXMsIHN0eWxlLCBndGtDaGVja0J1dHRvbigpKTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBhaW50
VG9nZ2xlKHRoaXMsIHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3RrQ2hlY2tCdXR0b24oKSk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1Np
emUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUodGhpcywg
c3R5bGUsIGd0a1JhZGlvQnV0dG9uKCkpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dFJhZGlvKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2Jq
ZWN0LCBpbmZvLCByZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3N0YXRpYyB2b2lkIHNldFdpZGdldEhhc0ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9v
bGVhbiBoYXNGb2N1cykKK3sKKyAgICBnX29iamVjdF9zZXQod2lkZ2V0LCAiaGFzLWZvY3VzIiwg
aGFzRm9jdXMsIE5VTEwpOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVk
IGluIEdUSysgMi4yMiwgeWV0IHRoZW1lIGVuZ2luZXMgc3RpbGwgbG9vaworICAgIC8vIGF0IHRo
ZXNlIGZsYWdzIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSB3aWRnZXQgaGFzIGZvY3VzLCBzbyB3ZSBt
dXN0IHVzZSB0aGVtLgorICAgIGlmIChoYXNGb2N1cykKKyAgICAgICAgR1RLX1dJREdFVF9TRVRf
RkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKKyAgICBlbHNlCisgICAgICAgIEdUS19XSURH
RVRfVU5TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoaW5mby5jb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gZ3RrQnV0dG9uKCk7CisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50
KCksIHJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKKwor
ICAgIEd0a1N0YXRlVHlwZSBzdGF0ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOwor
ICAgIGd0a193aWRnZXRfc2V0X3N0YXRlKHdpZGdldCwgc3RhdGUpOworICAgIGd0a193aWRnZXRf
c2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSkpOworCisgICAgaWYgKGlzRm9jdXNlZChvYmplY3QpKSB7CisgICAgICAgIHNl
dFdpZGdldEhhc0ZvY3VzKHdpZGdldCwgVFJVRSk7CisKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJp
b3JGb2N1cyA9IDAsIGZvY3VzV2lkdGggPSAwLCBmb2N1c1BhZGRpbmcgPSAwOworICAgICAgICBn
dGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIE5VTEwpOworICAg
ICAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgZXh0ZXJpb3IgZm9jdXMsIHdlIHNocmluayB0aGUgYnV0
dG9uIHJlY3QgZG93biBiZWZvcmUKKyAgICAgICAgLy8gZHJhd2luZy4gSWYgd2UgYXJlIHVzaW5n
IGludGVyaW9yIGZvY3VzIHdlIHNocmluayB0aGUgZm9jdXMgcmVjdC4gVGhpcworICAgICAgICAv
LyBhcHByb2FjaCBvcmlnaW5hdGVzIGZyb20gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2Rl
IChndGsyZHJhd2luZy5jKS4KKyAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsKKyAgICAgICAg
ICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAg
ICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzIC0gZm9jdXNQYWRk
aW5nKTsKKyAgICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3Mg
LSBmb2N1c1BhZGRpbmcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnV0dG9uUmVj
dC5pbmZsYXRlWCgtZm9jdXNXaWR0aCAtIGZvY3VzUGFkZGluZyk7CisgICAgICAgICAgICBidXR0
b25SZWN0LmluZmxhdGVZKC1mb2N1c1BhZGRpbmcgLSBmb2N1c1BhZGRpbmcpOworICAgICAgICB9
CisgICAgfQorCisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8u
Y29udGV4dCwgcmVjdCk7CisgICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gc3RhdGUgPT0g
R1RLX1NUQVRFX0FDVElWRSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKyAgICB3
aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGUsIHNoYWRv
d1R5cGUsICJidXR0b24iKTsKKyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdp
ZGdldENvbnRleHQuZ3RrUGFpbnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgc3RhdGUsICJidXR0
b24iKTsKKworICAgIHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwgRkFMU0UpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcldp
ZHRoKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2Vw
YXJhdG9yKCk7CisgICAgaWYgKCFzZXBhcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Z2Jvb2xlYW4gaGFzV2lkZVNlcGFyYXRvcnMgPSBGQUxTRTsKKyAgICBnaW50IHNlcGFyYXRvcldp
ZHRoID0gMDsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIsICZoYXNXaWRlU2VwYXJhdG9ycywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChoYXNXaWRlU2VwYXJh
dG9ycykKKyAgICAgICAgcmV0dXJuIHNlcGFyYXRvcldpZHRoOworICAgIHJldHVybiBndGtfd2lk
Z2V0X2dldF9zdHlsZShzZXBhcmF0b3IpLT54dGhpY2tuZXNzOworfQorCitpbnQgUmVuZGVyVGhl
bWVHdGs6OmNvbWJvQm94QXJyb3dTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAg
ICAvLyBUYWtpbmcgdGhlIGZvbnQgc2l6ZSBhbmQgcmV2ZXJzaW5nIHRoZSBEUEkgY29udmVyc2lv
biBzZWVtcyB0byBtYXRjaAorICAgIC8vIEdUSysgcmVuZGVyaW5nIGFzIGNsb3NlbHkgYXMgcG9z
c2libGUuCisgICAgcmV0dXJuIHN0eWxlLT5mb250KCkuc2l6ZSgpICogKDcyLjAgLyBSZW5kZXJU
aGVtZUd0azo6Z2V0U2NyZWVuRFBJKCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRCdXR0b25Jbm5l
ckJvcmRlcihHdGtXaWRnZXQqIGJ1dHRvbiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdo
dCwgaW50JiBib3R0b20pCit7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRf
c3R5bGUoYnV0dG9uKTsKKyAgICBpbnQgb3V0ZXJCb3JkZXIgPSBndGtfY29udGFpbmVyX2dldF9i
b3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihidXR0b24pKTsKKyAgICBzdGF0aWMgR3RrQm9yZGVy
IGRlZmF1bHRJbm5lckJvcmRlciA9IHsxLCAxLCAxLCAxfTsKKyAgICBHdGtCb3JkZXIqIGlubmVy
Qm9yZGVyOworICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KGJ1dHRvbiwgImlubmVyLWJvcmRlciIs
ICZpbm5lckJvcmRlciwgTlVMTCk7CisgICAgaWYgKCFpbm5lckJvcmRlcikKKyAgICAgICAgaW5u
ZXJCb3JkZXIgPSAmZGVmYXVsdElubmVyQm9yZGVyOworCisgICAgbGVmdCA9IG91dGVyQm9yZGVy
ICsgaW5uZXJCb3JkZXItPmxlZnQgKyBzdHlsZS0+eHRoaWNrbmVzczsKKyAgICByaWdodCA9IG91
dGVyQm9yZGVyICsgaW5uZXJCb3JkZXItPnJpZ2h0ICsgc3R5bGUtPnh0aGlja25lc3M7CisgICAg
dG9wID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+dG9wICsgc3R5bGUtPnl0aGlja25lc3M7
CisgICAgYm90dG9tID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+Ym90dG9tICsgc3R5bGUt
Pnl0aGlja25lc3M7CisKKyAgICBpZiAoaW5uZXJCb3JkZXIgIT0gJmRlZmF1bHRJbm5lckJvcmRl
cikKKyAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyKTsKK30KKworCit2b2lkIFJl
bmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQm
IGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKK3sKKyAgICAv
LyBJZiB0aGlzIG1lbnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0
aGVtZSwgd2UKKyAgICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQg
V2ViQ29yZSBhbHJlYWR5IHVzZXMuCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9D
b250cm9sUGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBjb21ibyBib3ggYnV0dG9u
IGlzIGEgYnV0dG9uIHdpdGggd2lkZ2V0cyBwYWNrZWQgaW50byBpdC4KKyAgICBHdGtTdHlsZSog
YnV0dG9uV2lkZ2V0U3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRv
bigpKTsKKyAgICBnZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgLy8gQWRkIHh0aGlja25lc3MgYW1vdW50IG9m
IHBhZGRpbmcgZm9yIGVhY2ggc2lkZSBvZiB0aGUgc2VwYXJhdG9yLiBUaGlzIGVuc3VyZXMKKyAg
ICAvLyB0aGF0IHRoZSB0ZXh0IGRvZXMgbm90IGJ1bXAgdXAgYWdhaW5zdCB0aGUgc2VwYXJhdG9y
LgorICAgIGludCBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0
eWxlKSArCisgICAgICAgIGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9u
V2lkZ2V0U3R5bGUtPnh0aGlja25lc3MpOworCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9
PSBSVEwpCisgICAgICAgIGxlZnQgKz0gYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7CisgICAgZWxz
ZQorICAgICAgICByaWdodCArPSBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKK30KKworaW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20g
PSAwOworICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tKTsKKyAgICByZXR1cm4gbGVmdDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQg
bGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKKyAgICBnZXRDb21ib0Jv
eFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIHJp
Z2h0OworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJp
Z2h0ID0gMCwgYm90dG9tID0gMDsKKyAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgcmV0dXJuIHRvcDsKK30KKworaW50IFJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Cit7CisgICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7
CisgICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OworICAgIHJldHVybiBib3R0b207Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVu
dUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBNZW51IGxpc3QgYnV0dG9uIHBhaW50
aW5nIHN0cmF0ZWd5LgorICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1saXN0IHNl
dCB0byBmYWxzZSAoaGF2aW5nIGEgc2VwYXJhdG9yKToKKyAgICAvLyB8IGxlZnQgYm9yZGVyIHwg
QnV0dG9uIHRleHQgfCB4dGhpY2tuZXNzIHwgdnNlcGFyYXRvciB8IHh0aGlja25lc3MgfCBhcnJv
dyB8IHh0aGlja25lc3MgfCByaWdodCBib3JkZXIgfAorICAgIC8vIEZvciBidXR0b25zIHdpdGgg
YXBwZWFycy1hcy1saXN0IHNldCB0byB0cnVlIChub3QgaGF2aW5nIGEgc2VwYXJhdG9yKToKKyAg
ICAvLyB8IGxlZnQgYm9yZGVyIHwgQnV0dG9uIHRleHQgfCBhcnJvdyB8IHh0aGlja25lc3MgfCBy
aWdodCBib3JkZXIgfAorCisgICAgaW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAs
IGJvdHRvbUJvcmRlciA9IDAsIHRvcEJvcmRlciA9IDA7CisgICAgZ2V0QnV0dG9uSW5uZXJCb3Jk
ZXIoZ3RrQ29tYm9Cb3hCdXR0b24oKSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRl
ciwgYm90dG9tQm9yZGVyKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxl
KCk7CisgICAgaW50IGFycm93U2l6ZSA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKTsKKyAgICBH
dGtTdHlsZSogYnV0dG9uU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1
dHRvbigpKTsKKworICAgIEludFJlY3QgYXJyb3dSZWN0KDAsIChyZWN0LmhlaWdodCgpIC0gYXJy
b3dTaXplKSAvIDIsIGFycm93U2l6ZSwgYXJyb3dTaXplKTsKKyAgICBpZiAoc3R5bGUtPmRpcmVj
dGlvbigpID09IFJUTCkKKyAgICAgICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRv
blN0eWxlLT54dGhpY2tuZXNzKTsKKyAgICBlbHNlCisgICAgICAgIGFycm93UmVjdC5zZXRYKHJl
Y3Qud2lkdGgoKSAtIHJpZ2h0Qm9yZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJv
d1NpemUpOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IGlzUHJlc3NlZChvYmplY3Qp
ID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOworCisgICAgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgR3RrU3RhdGVU
eXBlIHN0YXRlVHlwZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOworICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIGd0a0NvbWJvQm94QXJyb3coKSwgc3Rh
dGVUeXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgImFycm93Iik7CisKKyAgICAvLyBT
b21lIGNvbWJvIGJveGVzIGRvIG5vdCBoYXZlIGEgc2VwYXJhdG9yLgorICAgIEd0a1dpZGdldCog
c2VwYXJhdG9yID0gZ3RrQ29tYm9Cb3hTZXBhcmF0b3IoKTsKKyAgICBpZiAoIXNlcGFyYXRvcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ugd2FudCB0byBkZWNyZWFzZSB0aGUg
aGVpZ2h0IG9mIHRoZSBzZXBhcmF0b3IgYmFzZWQgb24gdGhlIGZvY3VzIHBhZGRpbmcgb2YgdGhl
IGJ1dHRvbi4KKyAgICBnaW50IGZvY3VzUGFkZGluZyA9IDAsIGZvY3VzV2lkdGggPSAwOyAKKyAg
ICBndGtfd2lkZ2V0X3N0eWxlX2dldChndGtDb21ib0JveEJ1dHRvbigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWRkaW5nLCBOVUxMKTsKKyAg
ICB0b3BCb3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKKyAgICBib3R0b21Cb3Jk
ZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKKyAgICBpbnQgc2VwYXJhdG9yV2lkdGgg
PSBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7CisgICAgSW50UmVjdCBzZXBhcmF0b3JSZWN0
KDAsIHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BCb3JkZXIg
LSBib3R0b21Cb3JkZXIpOworICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAg
ICAgICBzZXBhcmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSArIGFycm93UmVjdC53aWR0aCgp
ICsgYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgKyBzZXBhcmF0b3JXaWR0aCk7CisgICAgZWxzZQor
ICAgICAgICBzZXBhcmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSAtIGJ1dHRvblN0eWxlLT54
dGhpY2tuZXNzIC0gc2VwYXJhdG9yV2lkdGgpOworCisgICAgZ2Jvb2xlYW4gaGFzV2lkZVNlcGFy
YXRvcnMgPSBGQUxTRTsKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsICJ3aWRl
LXNlcGFyYXRvcnMiLCAmaGFzV2lkZVNlcGFyYXRvcnMsIE5VTEwpOworICAgIGlmIChoYXNXaWRl
U2VwYXJhdG9ycykKKyAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChzZXBhcmF0b3JS
ZWN0LCBzZXBhcmF0b3IsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfRVRDSEVEX09VVCwg
InZzZXBhcmF0b3IiKTsKKyAgICBlbHNlCisgICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRW
TGluZShzZXBhcmF0b3JSZWN0LCBzZXBhcmF0b3IsIEdUS19TVEFURV9OT1JNQUwsICJ2c2VwYXJh
dG9yIik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBn
dGtFbnRyeSgpOworCisgICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKHJlbmRlck9iamVjdCkg
JiYgIWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7CisgICAgR3RrU3RhdGVUeXBlIGJh
Y2tncm91bmRTdGF0ZSA9IGVuYWJsZWQgPyBHVEtfU1RBVEVfTk9STUFMIDogR1RLX1NUQVRFX0lO
U0VOU0lUSVZFOworICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsIGVuYWJsZWQp
OworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24o
cmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworICAgIHNldFdpZGdldEhhc0Zv
Y3VzKHdpZGdldCwgaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpOworCisgICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7CisgICAgSW50UmVj
dCB0ZXh0RmllbGRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKKworICAgIC8vIFRoZSBl
bnRyeSBiYWNrZ3JvdW5kIGlzIG9ubHkgcGFpbnRlZCBvdmVyIHRoZSBpbnRlcmlvciBwYXJ0IG9m
IHRoZSBHVEsrIGVudHJ5LCBub3QKKyAgICAvLyB0aGUgZW50aXJlIGZyYW1lLiBUaGlzIGhhcHBl
bnMgaW4gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIGFzIHdlbGwuCisgICAgSW50UmVj
dCBpbnRlcmlvclJlY3QodGV4dEZpZWxkUmVjdCk7CisgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3Rr
X3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKKyAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVgoLXN0
eWxlLT54dGhpY2tuZXNzKTsKKyAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhp
Y2tuZXNzKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50RmxhdEJveChpbnRlcmlvclJlY3Qs
IHdpZGdldCwgYmFja2dyb3VuZFN0YXRlLCBHVEtfU0hBRE9XX05PTkUsICJlbnRyeV9iZyIpOwor
CisgICAgLy8gVGhpcyBpcyByZXNwb25zaWJsZSBmb3IgZHJhd2luZyB0aGUgYWN0dWFsIGZyYW1l
LgorICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTaGFkb3codGV4dEZpZWxkUmVjdCwgd2lkZ2V0
LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50cnkiKTsKKworICAgIGdib29s
ZWFuIGludGVyaW9yRm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoOworICAgIGd0a193aWRnZXRf
c3R5bGVfZ2V0KHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9j
dXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGlu
ZS13aWR0aCIsICZmb2N1c1dpZHRoLCAgTlVMTCk7CisgICAgaWYgKGlzRm9jdXNlZChyZW5kZXJP
YmplY3QpICYmICFpbnRlcmlvckZvY3VzKSB7CisgICAgICAgIC8vIFdoZW4gR1RLKyBwYWludHMg
YSB0ZXh0IGVudHJ5IHdpdGggZm9jdXMsIGl0IHNocmlua3MgdGhlIHNpemUgb2YgdGhlIGZyYW1l
IGFyZWEgYnkgdGhlCisgICAgICAgIC8vIGZvY3VzIHdpZHRoIGFuZCBwYWludHMgb3ZlciB0aGUg
cHJldmlvdXNseSB1bmZvY3VzZWQgdGV4dCBlbnRyeS4gV2UgbmVlZCB0byBlbXVsYXRlIHRoYXQK
KyAgICAgICAgLy8gYnkgZHJhd2luZyBib3RoIHRoZSB1bmZvY3VzZWQgZnJhbWUgYWJvdmUgYW5k
IHRoZSBmb2N1c2VkIGZyYW1lIGhlcmUuCisgICAgICAgIEludFJlY3Qgc2hhZG93UmVjdCh0ZXh0
RmllbGRSZWN0KTsKKyAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1mb2N1c1dpZHRoKTsKKyAg
ICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNoYWRvdyhzaGFkb3dSZWN0LCB3aWRnZXQsIEdU
S19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOworCisgICAgICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRGb2N1cyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9O
T1JNQUwsICJlbnRyeSIpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChpbmZv
LmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQ29udHJvbFBhcnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAg
IEFTU0VSVChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKKworICAgIC8vIFdl
IHNocmluayB0aGUgdHJvdWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9j
dXMgaW5kaWNhdG9yLgorICAgIEludFJlY3QgdHJvdWdoUmVjdChJbnRQb2ludCgpLCByZWN0LnNp
emUoKSk7IC8vIFRoaXMgaXMgcmVsYXRpdmUgdG8gcmVjdC4KKyAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IDA7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKKyAgICAgICAg
d2lkZ2V0ID0gZ3RrSFNjYWxlKCk7CisgICAgICAgIHRyb3VnaFJlY3QuaW5mbGF0ZVgoLWd0a193
aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnh0aGlja25lc3MpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHdpZGdldCA9IGd0a1ZTY2FsZSgpOworICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZKC1n
dGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKKyAgICB9CisgICAgZ3Rr
X3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0
eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdl
dENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50
Qm94KHRyb3VnaFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19PVVQs
ICJ0cm91Z2giKTsKKyAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCisgICAgICAgIHdpZGdldENv
bnRleHQuZ3RrUGFpbnRGb2N1cyhJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgd2lk
Z2V0LCBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgInRyb3VnaCIpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHls
ZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVk
aWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOworCisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOwor
ICAgIGNvbnN0IGNoYXIqIGRldGFpbCA9IDA7CisgICAgR3RrT3JpZW50YXRpb24gb3JpZW50YXRp
b247CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAgICAg
ICB3aWRnZXQgPSBndGtIU2NhbGUoKTsKKyAgICAgICAgZGV0YWlsID0gImhzY2FsZSI7CisgICAg
ICAgIG9yaWVudGF0aW9uID0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgd2lkZ2V0ID0gZ3RrVlNjYWxlKCk7CisgICAgICAgIGRldGFpbCA9ICJ2c2Nh
bGUiOworICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsKKyAg
ICB9CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlv
bihvYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisKKyAgICAvLyBPbmx5IHNvbWUgdGhl
bWVzIGhhdmUgc2xpZGVyIHRodW1icyByZXNwb25kIHRvIGNsaWNrcyBhbmQgc29tZSBkb24ndC4g
VGhpcyBpbmZvcm1hdGlvbiBpcworICAgIC8vIGdhdGhlcmVkIHZpYSB0aGUgJ2FjdGl2YXRlLXNs
aWRlcicgcHJvcGVydHksIGJ1dCBpdCdzIGRlcHJlY2F0ZWQgaW4gR1RLKyAyLjIyIGFuZCByZW1v
dmVkIGluCisgICAgLy8gR1RLKyAzLnguIFRoZSBkcmF3YmFjayBvZiBub3QgaG9ub3JpbmcgaXQg
aXMgdGhhdCBzbGlkZXIgdGh1bWJzIGNoYW5nZSBjb2xvciB3aGVuIHlvdSBjbGljaworICAgIC8v
IG9uIHRoZW0uIAorICAgIEludFJlY3QgdGh1bWJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgp
KTsKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0
LCByZWN0KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2xpZGVyKHRodW1iUmVjdCwgd2lk
Z2V0LCBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgR1RLX1NIQURPV19PVVQsIGRldGFp
bCwgb3JpZW50YXRpb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Cisg
ICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHdp
ZGdldCA9IHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IGd0a0hTY2FsZSgpIDog
Z3RrVlNjYWxlKCk7CisgICAgaW50IGxlbmd0aCA9IDAsIHdpZHRoID0gMDsKKyAgICBndGtfd2lk
Z2V0X3N0eWxlX2dldCh3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl9s
ZW5ndGgiLCAmbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfd2lkdGgi
LCAmd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aCh3aWR0aCwgRml4ZWQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQocGFy
dCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWJQYXJ0KTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwor
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKK30KKworI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVz
c0JhcihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtQ
cm9ncmVzc0JhcigpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1Rl
eHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisgICAg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCBy
ZWN0KTsKKyAgICBJbnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5z
aXplKCkpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFByb2dyZXNzQmFyUmVj
dCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAidHJvdWdoIik7CisK
KyAgICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOworICAg
IEludFJlY3QgcHJvZ3Jlc3NSZWN0KGZ1bGxQcm9ncmVzc0JhclJlY3QpOworICAgIHByb2dyZXNz
UmVjdC5pbmZsYXRlWCgtc3R5bGUtPnh0aGlja25lc3MpOworICAgIHByb2dyZXNzUmVjdC5pbmZs
YXRlWSgtc3R5bGUtPnl0aGlja25lc3MpOworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1l
R3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOwor
CisgICAgaWYgKCFwcm9ncmVzc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICB3aWRnZXRDb250ZXh0
Lmd0a1BhaW50Qm94KHByb2dyZXNzUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfUFJFTElHSFQsIEdU
S19TSEFET1dfT1VULCAiYmFyIik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwor
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgR3RrU3R5
bGUqIGd0a1N0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrU3BpbkJ1dHRvbigpKTsKKyAg
ICBjb25zdCBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uID0gZ3RrU3R5bGUt
PmZvbnRfZGVzYzsKKyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9n
ZXRfc2l6ZShmb250RGVzY3JpcHRpb24pOworCisgICAgLy8gRm9yY2UgYW4gb2RkIGFycm93IHNp
emUgaGVyZS4gR1RLKyAzLnggZm9yY2VzIGV2ZW4gaW4gdGhpcyBjYXNlLCBidXQKKyAgICAvLyBO
b2Rva2EtYmFzZWQgdGhlbWVzIGxvb2sgaW5jb3JyZWN0IHdpdGggYW4gZXZlbiBhcnJvdyBzaXpl
LgorICAgIGludCB3aWR0aCA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0
dG9uQXJyb3dTaXplKTsKKyAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHls
ZS0+eHRoaWNrbmVzczsKKworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxzIG9u
IHRoZSB0b3AgYW5kIGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCisgICAg
Ly8gaXMgYmVjYXVzZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBib3gg
Ym9yZGVycywgYnV0IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKKyAgICAvLyBzcGluIGJ1dHRv
biBpbnNpZGUgdGhlIHRleHQgYm94LgorICAgIEludFJlY3QgZXhwYW5kZWRSZWN0KHJlY3QpOwor
ICAgIGV4cGFuZGVkUmVjdC5pbmZsYXRlWSgyKTsKKyAgICBleHBhbmRlZFJlY3Quc2V0V2lkdGgo
cmVjdC53aWR0aCgpICsgMik7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENv
bnRleHQocGFpbnRJbmZvLmNvbnRleHQsIGV4cGFuZGVkUmVjdCk7CisgICAgR3RrV2lkZ2V0KiB3
aWRnZXQgPSBndGtTcGluQnV0dG9uKCk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdp
ZGdldCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigp
KSk7CisKKyAgICBJbnRSZWN0IGZ1bGxTcGluQnV0dG9uUmVjdChJbnRQb2ludCgpLCBleHBhbmRl
ZFJlY3Quc2l6ZSgpKTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxTcGluQnV0
dG9uUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic3BpbmJ1
dHRvbiIpOworCisgICAgYm9vbCB1cFByZXNzZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KHJlbmRlck9iamVjdCk7CisgICAgYm9vbCB1cEhvdmVyZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRI
b3ZlcmVkKHJlbmRlck9iamVjdCk7CisgICAgYm9vbCBjb250cm9sQWN0aXZlID0gaXNFbmFibGVk
KHJlbmRlck9iamVjdCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7CisgICAg
R3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gdXBQcmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdU
S19TSEFET1dfT1VUOworCisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9J
TlNFTlNJVElWRTsKKyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAgICAgICBpZiAoaXNQcmVz
c2VkKHJlbmRlck9iamVjdCkgJiYgdXBQcmVzc2VkKQorICAgICAgICAgICAgc3RhdGVUeXBlID0g
R1RLX1NUQVRFX0FDVElWRTsKKyAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVj
dCkgJiYgdXBIb3ZlcmVkKQorICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJ
R0hUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9S
TUFMOworICAgIH0KKyAgICBJbnRSZWN0IHRvcFJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0
LnNpemUoKSk7CisgICAgdG9wUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC8g
Mik7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveCh0b3BSZWN0LCB3aWRnZXQsIHN0YXRl
VHlwZSwgc2hhZG93VHlwZSwgInNwaW5idXR0b25fdXAiKTsKKworICAgIC8vIFRoZSBhcnJvdyBz
aXplL3Bvc2l0aW9uIGNhbGN1bGF0aW9uIGhlcmUgaXMgYmFzZWQgb24gdGhlIGFyYml0cmFyeSBn
eW1uYXN0aWNzIHRoYXQgaGFwcGVuCisgICAgLy8gaW4gZ3Rrc3BpbmJ1dHRvbi5jLiBJdCBpc24n
dCBwcmV0dHkgdGhlcmUgYW5kIGl0IGlzbid0IHByZXR0eSBoZXJlLiBUaGlzIG1hbmFnZXMgdG8g
bWFrZQorICAgIC8vIHRoZSBidXR0b24gbG9vayBuYXRpdmUgZm9yIG1hbnkgdGhlbWVzIHRob3Vn
aC4KKyAgICBJbnRSZWN0IGFycm93UmVjdDsKKyAgICBpbnQgYXJyb3dTaXplID0gKGV4cGFuZGVk
UmVjdC53aWR0aCgpIC0gMykgLyAyOworICAgIGFycm93U2l6ZSAtPSAoYXJyb3dTaXplICUgMikg
LSAxOyAvLyBGb3JjZSBvZGQuCisgICAgYXJyb3dSZWN0LnNldFdpZHRoKGFycm93U2l6ZSk7Cisg
ICAgYXJyb3dSZWN0LnNldEhlaWdodChhcnJvd1NpemUpOworICAgIGFycm93UmVjdC5tb3ZlKChl
eHBhbmRlZFJlY3Qud2lkdGgoKSAtIGFycm93UmVjdC53aWR0aCgpKSAvIDIsCisgICAgICAgICAg
ICAgICAgICAgKHRvcFJlY3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QuaGVpZ2h0KCkpIC8gMiArIDEp
OworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3Rh
dGVUeXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1dfVVAsICJzcGluYnV0dG9uIik7CisKKyAgICBz
aGFkb3dUeXBlID0gaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCA/IEdUS19T
SEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKyAgICBpZiAoY29udHJvbEFjdGl2ZSkgeworICAg
ICAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCkKKyAgICAgICAg
ICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgIGVsc2UgaWYgKGlzSG92
ZXJlZChyZW5kZXJPYmplY3QpICYmICF1cEhvdmVyZWQpCisgICAgICAgICAgICBzdGF0ZVR5cGUg
PSBHVEtfU1RBVEVfUFJFTElHSFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9OT1JNQUw7CisgICAgfQorICAgIEludFJlY3QgYm90dG9tUmVjdChJbnRQ
b2ludCgwLCBleHBhbmRlZFJlY3QuaGVpZ2h0KCkgLyAyKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7
CisgICAgYm90dG9tUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC0gYm90dG9t
UmVjdC55KCkpOworICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYm90dG9tUmVjdCwgd2lk
Z2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX2Rvd24iKTsKKworICAgIGFy
cm93UmVjdC5zZXRZKGFycm93UmVjdC55KCkgKyBib3R0b21SZWN0LnkoKSAtIDEpOworICAgIHdp
ZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBz
aGFkb3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgInNwaW5idXR0b24iKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUo
R1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBn
aW50IHN0YXRlLCBnaW50IGljb25TaXplKQoreworICAgIEFTU0VSVCh3aWRnZXRUeXBlID09IEdU
S19UWVBFX0NPTlRBSU5FUiB8fCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKTsKKworICAg
IFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVu
ZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9
IHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ09OVEFJTkVSID8gR1RLX1dJREdFVCh0aGVtZS0+Z3Rr
Q29udGFpbmVyKCkpIDogdGhlbWUtPmd0a0VudHJ5KCk7CisKKyAgICBHdGtTdHlsZSogc3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOworICAgIEd0a0ljb25TZXQqIGljb25TZXQg
PSBndGtfc3R5bGVfbG9va3VwX2ljb25fc2V0KHN0eWxlLCBpY29uTmFtZSk7CisgICAgcmV0dXJu
IGFkb3B0R1JlZihndGtfaWNvbl9zZXRfcmVuZGVyX2ljb24oaWNvblNldCwgc3R5bGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtTdGF0ZVR5cGU+KHN0YXRlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtJ
Y29uU2l6ZT4oaWNvblNpemUpLCAwLCAwKSk7Cit9CisKK0dSZWZQdHI8R2RrUGl4YnVmPiBnZXRT
dG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hh
ciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBn
aW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKK3sKKyAgICByZXR1cm4g
Z2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFja1N0b2NrSWNvbk5h
bWUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVH
dGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAg
ICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7CisgICAgcmV0dXJuIGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsKK30KKworQ29sb3Ig
UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1
cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7
CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRF
X1NFTEVDVEVEXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdldCogd2lkZ2V0
ID0gZ3RrRW50cnkoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+
dGV4dFtHVEtfU1RBVEVfQUNUSVZFXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5
bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOworfQorCitDb2xvciBSZW5kZXJU
aGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7CisgICAgcmV0dXJuIGd0
a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Cit9CisK
K0NvbG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKK3sKKyAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Cisg
ICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NF
TEVDVEVEXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBn
dGtUcmVlVmlldygpOworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT50
ZXh0W0dUS19TVEFURV9BQ1RJVkVdOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVt
Q29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7
CisgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtf
d2lkZ2V0X2dldF9zdHlsZShndGtCdXR0b24oKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsKKyAg
ICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6CisgICAgICAgIHJldHVybiBDb2xvcihndGtfd2lk
Z2V0X2dldF9zdHlsZShndGtFbnRyeSgpKS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJ
ZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdl
dCogd2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkK
K3sKKyAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2Fs
bGVkIG1hbnkgdGltZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KKyAg
ICByZW5kZXJUaGVtZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKworc3RhdGljIHZv
aWQgc2V0dXBXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9yZWFs
aXplKHdpZGdldCk7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRy
YW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOworfQorCit2b2lkIFJl
bmRlclRoZW1lR3RrOjpzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtXaWRnZXQqIHdpbmRvdykgY29uc3QKK3sKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIHdpZGdldCk7CisgICAgc2V0dXBXaWRnZXQod2lkZ2V0KTsK
KworICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB0
aGUgY29udGFpbmluZyB3aW5kb3cgb3IgcGFyZW50IGNvbnRhaW5lci4KKyAgICBnX3NpZ25hbF9j
b25uZWN0KHdpZGdldCwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFj
ayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Cit9CisKK0d0a1dpZGdldCog
UmVuZGVyVGhlbWVHdGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29u
dGFpbmVyKQorICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7CisKKyAgICBtX2d0a1dpbmRv
dyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOworICAgIGd0a193aWRnZXRfc2V0
X2NvbG9ybWFwKG1fZ3RrV2luZG93LCBtX2NvbG9ybWFwKTsKKyAgICBzZXR1cFdpZGdldChtX2d0
a1dpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemlsbGFH
dGtXaWRnZXQiKTsKKworICAgIG1fZ3RrQ29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOworICAg
IHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2luZG93
KTsKKyAgICByZXR1cm4gbV9ndGtDb250YWluZXI7Cit9CisKK0d0a1dpZGdldCogUmVuZGVyVGhl
bWVHdGs6Omd0a0J1dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQnV0dG9uKQorICAgICAg
ICByZXR1cm4gbV9ndGtCdXR0b247CisgICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygp
OworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0NvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtCdXR0b247Cit9CisKK0d0a1dpZGdldCogUmVuZGVy
VGhlbWVHdGs6Omd0a0VudHJ5KCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtFbnRyeSkKKyAgICAg
ICAgcmV0dXJuIG1fZ3RrRW50cnk7CisgICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsK
KyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5l
cigpKTsKKyAgICByZXR1cm4gbV9ndGtFbnRyeTsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVt
ZUd0azo6Z3RrVHJlZVZpZXcoKSBjb25zdAoreworICAgIGlmIChtX2d0a1RyZWVWaWV3KQorICAg
ICAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKKyAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3RyZWVf
dmlld19uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJlZVZp
ZXcsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKK30KKworR3Rr
V2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVlNjYWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9n
dGtWU2NhbGUpCisgICAgICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKKyAgICBtX2d0a1ZTY2FsZSA9
IGd0a192c2NhbGVfbmV3KDApOworICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9n
dGtWU2NhbGUsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtWU2NhbGU7Cit9CisK
K0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0hTY2FsZSgpIGNvbnN0Cit7CisgICAgaWYg
KG1fZ3RrSFNjYWxlKQorICAgICAgICByZXR1cm4gbV9ndGtIU2NhbGU7CisgICAgbV9ndGtIU2Nh
bGUgPSBndGtfaHNjYWxlX25ldygwKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVy
KG1fZ3RrSFNjYWxlLCBndGtDb250YWluZXIoKSk7CisgICAgcmV0dXJuIG1fZ3RrSFNjYWxlOwor
fQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNvbnN0Cit7
CisgICAgaWYgKG1fZ3RrUmFkaW9CdXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a1JhZGlvQnV0
dG9uOworICAgIG1fZ3RrUmFkaW9CdXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldygwKTsKKyAg
ICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUmFkaW9CdXR0b24sIGd0a0NvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrQ2hlY2tCdXR0b24oKSBjb25zdAoreworICAgIGlmIChtX2d0a0No
ZWNrQnV0dG9uKQorICAgICAgICByZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKKyAgICBtX2d0a0No
ZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFk
ZFRvQ29udGFpbmVyKG1fZ3RrQ2hlY2tCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1
cm4gbV9ndGtDaGVja0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3Rr
UHJvZ3Jlc3NCYXIoKSBjb25zdAoreworICAgIGlmIChtX2d0a1Byb2dyZXNzQmFyKQorICAgICAg
ICByZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsKKyAgICBtX2d0a1Byb2dyZXNzQmFyID0gZ3RrX3By
b2dyZXNzX2Jhcl9uZXcoKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3Rr
UHJvZ3Jlc3NCYXIsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0Jh
cjsKK30KKworc3RhdGljIHZvaWQgZ2V0R3RrQ29tYm9Cb3hCdXR0b24oR3RrV2lkZ2V0KiB3aWRn
ZXQsIGdwb2ludGVyIHRhcmdldCkKK3sKKyAgICBpZiAoIUdUS19JU19UT0dHTEVfQlVUVE9OKHdp
ZGdldCkpCisgICAgICAgIHJldHVybjsKKyAgICBHdGtXaWRnZXQqKiB3aWRnZXRUYXJnZXQgPSBz
dGF0aWNfY2FzdDxHdGtXaWRnZXQqKj4odGFyZ2V0KTsKKyAgICAqd2lkZ2V0VGFyZ2V0ID0gd2lk
Z2V0OworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3RrV2lkZ2V0KiBhcnJvdzsKKyAgICBH
dGtXaWRnZXQqIHNlcGFyYXRvcjsKK30gQ29tYm9Cb3hXaWRnZXRQaWVjZXM7CisKK3N0YXRpYyB2
b2lkIGdldEd0a0NvbWJvQm94UGllY2VzKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRh
KQoreworICAgIGlmIChHVEtfSVNfQVJST1cod2lkZ2V0KSkgeworICAgICAgICBzdGF0aWNfY2Fz
dDxDb21ib0JveFdpZGdldFBpZWNlcyo+KGRhdGEpLT5hcnJvdyA9IHdpZGdldDsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSAKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+c2VwYXJhdG9yID0g
d2lkZ2V0OworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgpIGNv
bnN0Cit7CisgICAgaWYgKG1fZ3RrQ29tYm9Cb3gpCisgICAgICAgIHJldHVybiBtX2d0a0NvbWJv
Qm94OworICAgIG1fZ3RrQ29tYm9Cb3ggPSBndGtfY29tYm9fYm94X25ldygpOworICAgIHNldHVw
V2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtDb21ib0JveCwgZ3RrQ29udGFpbmVyKCkpOwor
ICAgIHJldHVybiBtX2d0a0NvbWJvQm94OworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpyZWZy
ZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0Cit7CisgICAgZ3RrQ29tYm9Cb3goKTsgLy8gRW5z
dXJlIHRoYXQgd2UndmUgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveC4KKworICAgIC8vIFNvbWUg
dGhlbWVzIGxvb2sgYXQgd2lkZ2V0IGFuY2VzdHJ5IHRvIGRldGVybWluZSBob3cgdG8gcmVuZGVy
IHdpZGdldHMsIHNvCisgICAgLy8gZ2V0IHRoZSBHdGtCdXR0b24gdGhhdCBpcyB0aGUgYWN0dWFs
IGNoaWxkIG9mIHRoZSBjb21ibyBib3guCisgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NP
TlRBSU5FUihtX2d0a0NvbWJvQm94KSwgZ2V0R3RrQ29tYm9Cb3hCdXR0b24sICZtX2d0a0NvbWJv
Qm94QnV0dG9uKTsKKyAgICBBU1NFUlQobV9ndGtDb21ib0JveEJ1dHRvbik7CisgICAgc2V0dXBX
aWRnZXQobV9ndGtDb21ib0JveEJ1dHRvbik7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRl
cihHX09CSkVDVChtX2d0a0NvbWJvQm94QnV0dG9uKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRl
cio+KCZtX2d0a0NvbWJvQm94QnV0dG9uKSk7CisKKyAgICBDb21ib0JveFdpZGdldFBpZWNlcyBw
aWVjZXMgPSB7IDAsIDAgfTsKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbkNoaWxkID0gZ3RrX2Jpbl9n
ZXRfY2hpbGQoR1RLX0JJTihndGtDb21ib0JveEJ1dHRvbigpKSk7CisgICAgaWYgKEdUS19JU19I
Qk9YKGJ1dHRvbkNoaWxkKSkKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRB
SU5FUihidXR0b25DaGlsZCksIGdldEd0a0NvbWJvQm94UGllY2VzLCAmcGllY2VzKTsKKyAgICBl
bHNlIGlmIChHVEtfSVNfQVJST1coYnV0dG9uQ2hpbGQpKQorICAgICAgICBwaWVjZXMuYXJyb3cg
PSBidXR0b25DaGlsZDsKKworICAgIEFTU0VSVChwaWVjZXMuYXJyb3cpOworICAgIG1fZ3RrQ29t
Ym9Cb3hBcnJvdyA9IHBpZWNlcy5hcnJvdzsKKyAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94
QXJyb3cpOworICAgIC8vIFdoZW4gdGhlIHN0eWxlIGNoYW5nZXMsIHRoZSBjb21ibyBib3ggbWF5
IGRlc3Ryb3kgaXRzIGNoaWxkcmVuLgorICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19P
QkpFQ1QobV9ndGtDb21ib0JveEFycm93KSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZt
X2d0a0NvbWJvQm94QXJyb3cpKTsKKworICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSBwaWVj
ZXMuc2VwYXJhdG9yOworICAgIGlmIChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSB7CisgICAgICAg
IHNldHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpOworICAgICAgICAvLyBXaGVuIHRo
ZSBzdHlsZSBjaGFuZ2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4K
KyAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94
U2VwYXJhdG9yKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94U2Vw
YXJhdG9yKSk7CisgICAgfQorfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21i
b0JveEJ1dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3RrQ29tYm9Cb3hCdXR0b24pCisgICAg
ICAgIHJldHVybiBtX2d0a0NvbWJvQm94QnV0dG9uOworICAgIHJlZnJlc2hDb21ib0JveENoaWxk
cmVuKCk7CisgICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hCdXR0b24pOworICAgIHJldHVybiBtX2d0
a0NvbWJvQm94QnV0dG9uOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21i
b0JveEFycm93KCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtDb21ib0JveEFycm93KQorICAgICAg
ICByZXR1cm4gbV9ndGtDb21ib0JveEFycm93OworICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVu
KCk7CisgICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hBcnJvdyk7CisgICAgcmV0dXJuIG1fZ3RrQ29t
Ym9Cb3hBcnJvdzsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hT
ZXBhcmF0b3IoKSBjb25zdAoreworICAgIC8vIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgbWF5IGJl
IG51bGwgZWl0aGVyIGJlY2F1c2Ugd2UgaGF2ZW4ndCBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94
CisgICAgLy8gb3IgYmVjYXVzZSB0aGUgY29tYm8gYm94ZXMgaW4gdGhpcyB0aGVtZSBkb24ndCBo
YXZlIHNlcGFyYXRvcnMuIElmIG1fZ3RrQ29tYm9Cb3hBcnJvdworICAgIC8vIGFycm93IGlzbid0
IG51bGwsIHdlIGRlZmluaXRlbHkgaGF2ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94LgorICAg
IGlmIChtX2d0a0NvbWJvQm94QXJyb3cgfHwgbV9ndGtDb21ib0JveEJ1dHRvbikKKyAgICAgICAg
cmV0dXJuIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3I7CisgICAgcmVmcmVzaENvbWJvQm94Q2hpbGRy
ZW4oKTsKKyAgICByZXR1cm4gbV9ndGtDb21ib0JveFNlcGFyYXRvcjsKK30KKworR3RrV2lkZ2V0
KiBSZW5kZXJUaGVtZUd0azo6Z3RrSFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fZ3Rr
SFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKKyAgICBtX2d0a0hT
Y3JvbGxiYXIgPSBndGtfaHNjcm9sbGJhcl9uZXcoMCk7CisgICAgc2V0dXBXaWRnZXRBbmRBZGRU
b0NvbnRhaW5lcihtX2d0a0hTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKKyAgICByZXR1cm4g
bV9ndGtIU2Nyb2xsYmFyOworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtWU2Ny
b2xsYmFyKCkgY29uc3QKK3sKKyAgICBpZiAobV9ndGtWU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gbV9ndGtWU2Nyb2xsYmFyOworICAgIG1fZ3RrVlNjcm9sbGJhciA9IGd0a192c2Nyb2xsYmFy
X25ldygwKTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjcm9sbGJh
ciwgZ3RrQ29udGFpbmVyKCkpOworICAgIHJldHVybiBtX2d0a1ZTY3JvbGxiYXI7Cit9CisKK0d0
a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1NwaW5CdXR0b24oKSBjb25zdAoreworICAgIGlm
IChtX2d0a1NwaW5CdXR0b24pCisgICAgICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247CisgICAg
bV9ndGtTcGluQnV0dG9uID0gZ3RrX3NwaW5fYnV0dG9uX25ld193aXRoX3JhbmdlKDAsIDEwLCAx
KTsKKyAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrU3BpbkJ1dHRvbiwgZ3Rr
Q29udGFpbmVyKCkpOworICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAgYi9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE3ZjVhMmEyZDMwMDIwZDgy
MjQzY2UyYWFmOGIyMDU2MGZhZDUxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcApAQCAtMCwwICsxLDEwMDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKworI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorCisj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNs
dWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUg
PGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0
IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19TSVpFIGluIGd0a2Fycm93LmMuCitzdGF0aWMgY29u
c3QgaW50IG1pbkFycm93U2l6ZSA9IDE1OworLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBk
ZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBp
biBndGtzcGluYnV0dG9uLmMuCitzdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1Np
emUgPSA2OworCit0eXBlZGVmIEhhc2hNYXA8R1R5cGUsIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiA+IFN0eWxlQ29udGV4dE1hcDsKK3N0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4
dE1hcCgpOworCitzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0Kiwg
R1BhcmFtU3BlYyopCit7CisgICAgU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBzdHlsZUNvbnRleHRNYXAoKS5lbmQoKTsKKyAgICBmb3IgKFN0eWxlQ29udGV4dE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlQ29udGV4dE1hcCgpLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2ludmFsaWRhdGUoaXRlci0+dmFs
dWUuZ2V0KCkpOworCisgICAgUGFnZTo6c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsY0ZvckFsbFBh
Z2VzKCk7Cit9CisKK3N0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHlsZUNvbnRleHRNYXAsIG1hcCwgKCkpOworCisg
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWluaXRpYWxpemVk
KSB7CisgICAgICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZGVm
YXVsdCgpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGst
dGhlbWUtbmFtZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChzZXR0aW5ncywgIm5vdGlmeTo6Z3RrLWNvbG9yLXNjaGVt
ZSIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCAwKTsKKyAgICAgICAgaW5p
dGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgR3Rr
U3R5bGVDb250ZXh0KiBnZXRTdHlsZUNvbnRleHQoR1R5cGUgd2lkZ2V0VHlwZSkKK3sKKyAgICBT
dHlsZUNvbnRleHRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzdHlsZUNvbnRleHRNYXAoKS5hZGQo
d2lkZ2V0VHlwZSwgMCk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisKKyAgICBHdGtXaWRnZXRQYXRoKiBw
YXRoID0gZ3RrX3dpZGdldF9wYXRoX25ldygpOworICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRf
dHlwZShwYXRoLCB3aWRnZXRUeXBlKTsKKworICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBF
X1NDUk9MTEJBUikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgs
IDAsIEdUS19TVFlMRV9DTEFTU19TQ1JPTExCQVIpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfRU5UUlkpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFz
cyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOworICAgIGVsc2UgaWYgKHdpZGdldFR5
cGUgPT0gR1RLX1RZUEVfQVJST1cpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLCAwLCAiYXJyb3ciKTsKKyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19U
WVBFX0JVVFRPTikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgs
IDAsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0g
R1RLX1RZUEVfU0NBTEUpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0NBTEUpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfU0VQQVJBVE9SKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRf
Y2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NFUEFSQVRPUik7CisgICAgZWxzZSBpZiAo
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9QUk9HUkVTU19CQVIpCisgICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIp
OworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU1BJTl9CVVRUT04pCisgICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xB
U1NfU1BJTkJVVFRPTik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9UUkVF
X1ZJRVcpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBH
VEtfU1RZTEVfQ0xBU1NfVklFVyk7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQ
RV9DSEVDS19CVVRUT04pCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0spOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfUkFESU9fQlVUVE9OKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsKKworICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0X25l
dygpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRo
KTsKKyAgICBndGtfd2lkZ2V0X3BhdGhfZnJlZShwYXRoKTsKKworICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBjb250ZXh0OworICAgIHJldHVybiBjb250ZXh0LmdldCgpOworfQorCitHdGtT
dHlsZUNvbnRleHQqIFJlbmRlclRoZW1lR3RrOjpndGtTY3JvbGxiYXJTdHlsZSgpCit7CisgICAg
cmV0dXJuIGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ1JPTExCQVIpOworfQorCisvLyBUaGlz
IGlzIG5vdCBhIHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcg
R1RLKyBoZWFkZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCitleHRlcm4gR3RrVGV4dERpcmVjdGlv
biBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOworCit2b2lkIFJlbmRlclRoZW1lR3Rr
OjpwbGF0Zm9ybUluaXQoKQoreworfQorCitSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3Rr
KCkKK3sKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRN
ZWRpYUNvbG9ycygpCit7CisgICAgR2RrUkdCQSBjb2xvcjsKKyAgICBHdGtTdHlsZUNvbnRleHQq
IGNvbnRhaW5lckNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJTkVSKTsK
KworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNv
bnRleHQsIEdUS19TVEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKKyAgICBtX3BhbmVsQ29sb3Ig
PSBjb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250
YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZjb2xvcik7CisgICAgbV9zbGlk
ZXJDb2xvciA9IGNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2Nv
bG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmY29sb3IpOwor
ICAgIG1fc2xpZGVyVGh1bWJDb2xvciA9IGNvbG9yOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lk
IGFkanVzdFJlY3RGb3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJl
Y3QpCit7CisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOworICAgIHJlY3QuaW5m
bGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSAwOworICAgIGJvb2wg
Y2hlY2tJbnRlcmlvckZvY3VzID0gZmFsc2U7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIHN3aXRjaCAocGFydCkgeworICAg
IGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICBjb250ZXh0
ID0gZ2V0U3R5bGVDb250ZXh0KHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tf
QlVUVE9OIDogR1RLX1RZUEVfUkFESU9fQlVUVE9OKTsKKworICAgICAgICBnaW50IGluZGljYXRv
clNwYWNpbmc7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAi
aW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7CisgICAgICAgIHJl
Y3QuaW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5nKTsKKworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAg
ICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFy
dDoKKyAgICBjYXNlIE1lbnVsaXN0UGFydDoKKyAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9CVVRUT04pOworICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0
QXJlYVBhcnQ6CisgICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5U
UlkpOworICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNvbnRl
eHQpOworICAgIGlmIChjaGVja0ludGVyaW9yRm9jdXMpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaW50
ZXJpb3JGb2N1czsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQs
ICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLCBOVUxMKTsKKyAgICAgICAgaWYgKGlu
dGVyaW9yRm9jdXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFJlY3RG
b3JGb2N1cyhjb250ZXh0LCByZWN0KTsKK30KKworc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShH
dGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICAvLyBU
aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBj
aGFuZ2UgdGhlbS4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
T3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUgZGVmYXVs
dCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCisgICAgLy8gR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFu
ZCB0aGUgbmF0aXZlIGxvb2suCisgICAgLy8gSXQgY291bGQgYmUgbWFkZSBhIGNvbmZpZ3VyYXRp
b24gb3B0aW9uIHZhbHVlcyBvdGhlciB0aGFuIDEzIGFjdHVhbGx5IGJyZWFrIHNpdGUgY29tcGF0
aWJpbGl0eS4KKyAgICBnaW50IGluZGljYXRvclNpemU7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxM
KTsKKworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisKKyAgICBp
ZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworfQorCitzdGF0aWMgdm9pZCBwYWludFRvZ2ds
ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgZnVsbFJlY3QpCit7CisgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5
bGVDb250ZXh0KHdpZGdldFR5cGUpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4
dCk7CisKKyAgICAvLyBTb21lIHRoZW1lcyBkbyBub3QgcmVuZGVyIGxhcmdlIHRvZ2dsZSBidXR0
b25zIHByb3Blcmx5LCBzbyB3ZSBzaW1wbHkKKyAgICAvLyBzaHJpbmsgdGhlIHJlY3RhbmdsZSBi
YWNrIGRvd24gdG8gdGhlIGRlZmF1bHQgc2l6ZSBhbmQgdGhlbiBjZW50ZXIgaXQKKyAgICAvLyBp
biB0aGUgZnVsbCB0b2dnbGUgYnV0dG9uIHJlZ2lvbi4gVGhlIHJlYXNvbiBmb3Igbm90IHNpbXBs
eSBmb3JjaW5nIHRvZ2dsZQorICAgIC8vIGJ1dHRvbnMgdG8gYmUgYSBzbWFsbGVyIHNpemUgaXMg
dGhhdCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHNpdGUgbGF5b3V0cy4KKyAgICBnaW50IGluZGlj
YXRvclNpemU7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRp
Y2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKKyAgICBJbnRSZWN0IHJlY3QoZnVs
bFJlY3QpOworICAgIGlmIChyZWN0LndpZHRoKCkgPiBpbmRpY2F0b3JTaXplKSB7CisgICAgICAg
IHJlY3QuaW5mbGF0ZVgoLShyZWN0LndpZHRoKCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOworICAg
ICAgICByZWN0LnNldFdpZHRoKGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3Qud2lkdGgo
KSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6ZSArIDEuCisgICAgfQorCisgICAgaWYgKHJlY3Qu
aGVpZ2h0KCkgPiBpbmRpY2F0b3JTaXplKSB7CisgICAgICAgIHJlY3QuaW5mbGF0ZVkoLShyZWN0
LmhlaWdodCgpIC0gaW5kaWNhdG9yU2l6ZSkgLyAyKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQo
aW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2UgcmVjdC5oZWlnaHQoKSB3YXMgZXF1YWwgdG8gaW5k
aWNhdG9yU2l6ZSArIDEuCisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVj
dGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0
aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tf
QlVUVE9OID8gR1RLX1NUWUxFX0NMQVNTX0NIRUNLIDogR1RLX1NUWUxFX0NMQVNTX1JBRElPKTsK
KworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVy
T2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAg
ICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBpZiAodGhl
bWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19QUkVMSUdIVDsKKyAgICBpZiAodGhlbWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5kZXJPYmpl
Y3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTkNPTlNJU1RFTlQ7CisgICAg
ZWxzZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8
PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7CisgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVy
T2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KGZsYWdzKSk7CisKKyAgICBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19C
VVRUT04pCisgICAgICAgIGd0a19yZW5kZXJfY2hlY2soY29udGV4dCwgcGFpbnRJbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZWxzZQorICAgICAgICBndGtfcmVuZGVyX29wdGlv
bihjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGlm
ICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAgSW50UmVjdCBpbmRp
Y2F0b3JSZWN0KHJlY3QpOworICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7CisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmci
LCAmaW5kaWNhdG9yU3BhY2luZywgTlVMTCk7CisgICAgICAgIGluZGljYXRvclJlY3QuaW5mbGF0
ZShpbmRpY2F0b3JTcGFjaW5nKTsKKyAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGluZGljYXRvclJlY3Qu
eCgpLCBpbmRpY2F0b3JSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0
b3JSZWN0LndpZHRoKCksIGluZGljYXRvclJlY3QuaGVpZ2h0KCkpOworICAgIH0KKworICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc2V0
VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKSwgc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCog
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9DSEVDS19CVVRUT04sIHJl
bmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit7CisgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUkFESU9fQlVU
VE9OKSwgc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9SQURJT19C
VVRUT04sIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlckJ1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3Qg
YnV0dG9uUmVjdChyZWN0KTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIXRoZW1l
LT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNSZWFkT25seUNvbnRyb2wocmVu
ZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7
CisgICAgZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBpZiAodGhlbWUtPmlzUHJlc3Nl
ZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0
a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisKKyAgICBpZiAodGhlbWUtPmlzRGVmYXVsdChyZW5kZXJP
YmplY3QpKSB7CisgICAgICAgIEd0a0JvcmRlciogYm9yZGVyUHRyID0gMDsKKyAgICAgICAgR3Rr
Qm9yZGVyIGJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OworCisgICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiZGVmYXVsdC1ib3JkZXIiLCAmYm9yZGVyUHRyLCBOVUxM
KTsKKyAgICAgICAgaWYgKGJvcmRlclB0cikgeworICAgICAgICAgICAgYm9yZGVyID0gKmJvcmRl
clB0cjsKKyAgICAgICAgICAgIGd0a19ib3JkZXJfZnJlZShib3JkZXJQdHIpOworICAgICAgICB9
CisKKyAgICAgICAgYnV0dG9uUmVjdC5tb3ZlKGJvcmRlci5sZWZ0LCBib3JkZXIudG9wKTsKKyAg
ICAgICAgYnV0dG9uUmVjdC5zZXRXaWR0aChidXR0b25SZWN0LndpZHRoKCkgLSAoYm9yZGVyLmxl
ZnQgKyBib3JkZXIucmlnaHQpKTsKKyAgICAgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQoYnV0dG9u
UmVjdC5oZWlnaHQoKSAtIChib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSkpOworCisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfREVG
QVVMVCk7CisgICAgfQorCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1
dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwor
ICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJl
Y3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisKKyAgICBpZiAodGhlbWUtPmlzRm9j
dXNlZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7
CisgICAgICAgIGdib29sZWFuIGRpc3BsYWNlRm9jdXMsIGludGVyaW9yRm9jdXM7CisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwg
JmludGVyaW9yRm9jdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlz
cGxhY2UtZm9jdXMiLCAmZGlzcGxhY2VGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7CisgICAgICAg
ICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGg7CisgICAgICAgICAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSwg
JmJvcmRlcldpZHRoKTsKKworICAgICAgICAgICAgYnV0dG9uUmVjdCA9IEludFJlY3QoYnV0dG9u
UmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNQYWQsIGJ1dHRvblJlY3QueSgpICsg
Ym9yZGVyV2lkdGgudG9wICsgZm9jdXNQYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBidXR0b25SZWN0LndpZHRoKCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgubGVm
dCArIGJvcmRlcldpZHRoLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoMiAqIGZvY3VzUGFkICsgYm9yZGVyV2lkdGgudG9wICsg
Ym9yZGVyV2lkdGguYm90dG9tKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnV0dG9u
UmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7CisKKyAgICAgICAgaWYgKGRpc3Bs
YWNlRm9jdXMgJiYgdGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKSB7CisgICAgICAgICAg
ICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKKyAgICAgICAgICAgIGdpbnQgY2hpbGREaXNwbGFj
ZW1lbnRZOworICAgICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNl
bWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXkiLCAmY2hpbGREaXNwbGFjZW1lbnRZ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAg
ICAgICAgYnV0dG9uUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFjZW1l
bnRZKTsKKyAgICAgICAgfQorCisgICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwg
YnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7
CisgICAgfQorfQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4
dChHVEtfVFlQRV9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisKKyAgICByZW5kZXJCdXR0b24odGhpcywg
Y29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworCisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9yZGVy
JiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQoreworICAgIC8vIElmIHRoaXMg
bWVudSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQor
ICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFs
cmVhZHkgdXNlcy4KKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0
KQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRT
dHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9YKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQs
IEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJl
Y3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVj
dGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
Ym9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsK
KworICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7CisgICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1
c1BhZDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZv
Y3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5n
IiwgJmZvY3VzUGFkLCBOVUxMKTsKKyAgICBmb2N1cyA9IGludGVyaW9yRm9jdXMgPyBmb2N1c1dp
ZHRoICsgZm9jdXNQYWQgOiAwOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250
ZXh0KTsKKworICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9S
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgR3RrVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0
RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFy
YXRvcnM7CisgICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUt
c2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAvLyBHVEsrIGFsd2F5cyB1c2VzIGJvcmRl
ci5sZWZ0LCByZWdhcmRsZXNzIG9mIHRleHQgZGlyZWN0aW9uLiBTZWUgZ3Rrc2VwZXJhdG9yLmMu
CisgICAgaWYgKCF3aWRlU2VwYXJhdG9ycykKKyAgICAgICAgc2VwYXJhdG9yV2lkdGggPSBib3Jk
ZXIubGVmdDsKKworICAgIHNlcGFyYXRvciA9IHNlcGFyYXRvcldpZHRoOworCisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpw
b3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAg
IEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dp
ZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHls
ZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgbGVm
dCA9IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoOworICAgIGlmIChzdHlsZS0+ZGlyZWN0
aW9uKCkgPT0gUlRMKQorICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dT
aXplOworICAgIHJldHVybiBsZWZ0OworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIEd0a0Jv
cmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGludCBmb2N1c1dpZHRoID0g
MCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9y
ZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAgICBpbnQgcmlnaHQgPSBi
b3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7CisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24o
KSA9PSBMVFIpCisgICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXpl
OworICAgIHJldHVybiByaWdodDsKK30KKworaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgR3RrQm9yZGVy
IGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAgaW50IGZvY3VzV2lkdGggPSAwLCBz
ZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJX
aWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIHJldHVybiBib3JkZXJXaWR0
aC50b3AgKyBmb2N1c1dpZHRoOworfQorCitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBHdGtCb3Jk
ZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9IDAs
IHNlcGFyYXRvcldpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRl
cldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CisgICAgcmV0dXJuIGJvcmRlcldp
ZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBHdGtU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0
a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOworCisg
ICAgLy8gUGFpbnQgdGhlIGJ1dHRvbi4KKyAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxl
Q29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NhdmUoYnV0dG9uU3R5bGVDb250ZXh0KTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfZGlyZWN0aW9uKGJ1dHRvblN0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xB
U1NfQlVUVE9OKTsKKyAgICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0LCBy
ZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisKKyAgICAvLyBHZXQgdGhlIGlubmVyIHJl
Y3RhbmdsZS4KKyAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgIEd0a0JvcmRlciog
aW5uZXJCb3JkZXJQdHIgPSAwOworICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwg
MSwgMSB9OworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbm5lci1ib3JkZXIiLCAmaW5u
ZXJCb3JkZXJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5l
LXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJm
b2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKKyAgICBpZiAoaW5uZXJCb3JkZXJQdHIpIHsKKyAgICAgICAgaW5uZXJCb3JkZXIg
PSAqaW5uZXJCb3JkZXJQdHI7CisgICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJvcmRlclB0
cik7CisgICAgfQorCisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOworICAgIEd0a1N0YXRlRmxh
Z3Mgc3RhdGUgPSBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVDb250ZXh0
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGJ1dHRvblN0eWxlQ29udGV4dCwg
c3RhdGUsICZib3JkZXJXaWR0aCk7CisKKyAgICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOworICAg
IEludFJlY3QgaW5uZXJSZWN0KHJlY3QueCgpICsgaW5uZXJCb3JkZXIubGVmdCArIGJvcmRlcldp
ZHRoLmxlZnQgKyBmb2N1c1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsg
aW5uZXJCb3JkZXIudG9wICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSBib3JkZXJXaWR0aC5sZWZ0IC0gYm9yZGVyV2lk
dGgucmlnaHQgLSBpbm5lckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIucmlnaHQgLSAoMiAqIGZv
Y3VzV2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBib3JkZXJX
aWR0aC50b3AgLSBib3JkZXJXaWR0aC5ib3R0b20gLSBpbm5lckJvcmRlci50b3AgLSBpbm5lckJv
cmRlci5ib3R0b20gLSAoMiAqIGZvY3VzV2lkdGgpKTsKKworICAgIGlmIChpc1ByZXNzZWQocmVu
ZGVyT2JqZWN0KSkgeworICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKKyAgICAgICAg
Z2ludCBjaGlsZERpc3BsYWNlbWVudFk7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9z
dHlsZShidXR0b25TdHlsZUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiY2hpbGQtZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNo
aWxkRGlzcGxhY2VtZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworICAgICAgICBpbm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlz
cGxhY2VtZW50WSk7CisgICAgfQorICAgIGlubmVyUmVjdC5zZXRXaWR0aChtYXgoMSwgaW5uZXJS
ZWN0LndpZHRoKCkpKTsKKyAgICBpbm5lclJlY3Quc2V0SGVpZ2h0KG1heCgxLCBpbm5lclJlY3Qu
aGVpZ2h0KCkpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYnV0dG9uU3R5bGVD
b250ZXh0KTsKKworICAgIC8vIFBhaW50IHRoZSBhcnJvdy4KKyAgICBHdGtTdHlsZUNvbnRleHQq
IGFycm93U3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0FSUk9XKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCAiYXJy
b3ciKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQs
IEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHlsZUNvbnRleHQsICJhcnJvdy1z
Y2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7CisKKyAgICBJbnRTaXplIGFycm93U2l6ZSht
aW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRQb2ludCBhcnJvd1Bv
c2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigpKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEdUS19U
RVhUX0RJUl9MVFIpCisgICAgICAgIGFycm93UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lkdGgo
KSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgIC8vIEdUSysgYWN0dWFsbHkgZmV0Y2hl
cyB0aGUgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIGZyb20gdGhlIHdpZGdldCwgYnV0IHNpbmNl
IHdlCisgICAgLy8gZG9uJ3QgaGF2ZSBhIHdpZGdldCBoZXJlLCB3ZSBhcmUganVzdCB1c2luZyB0
aGUgZGVmYXVsdCB4YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgb2YgMC41LgorICAgIGdpbnQgZXh0
ZW50ID0gc3RkOjptaW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6ZS5oZWlnaHQoKSkgKiBh
cnJvd1NjYWxpbmc7CisgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJvd1NpemUud2lkdGgoKSAt
IGV4dGVudCkgLyAyLCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIpOworCisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250ZXh0LCBzdGF0ZSk7Cisg
ICAgZ3RrX3JlbmRlcl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0LCBHX1BJ
LCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4dGVudCk7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAgIC8vIFBh
aW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVkLgorICAgIEd0a1N0eWxlQ29udGV4dCogc2VwYXJh
dG9yU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQpOworCisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGRp
cmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHNlcGFyYXRvclN0eWxl
Q29udGV4dCwgInNlcGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7Cisg
ICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
c2VwYXJhdG9yU3R5bGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
d2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAod2lkZVNlcGFyYXRvcnMgJiYg
IXNlcGFyYXRvcldpZHRoKSB7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2Vw
YXJhdG9yU3R5bGVDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRl
KTsKKyAgICBJbnRQb2ludCBzZXBhcmF0b3JQb3NpdGlvbihhcnJvd1Bvc2l0aW9uLngoKSwgaW5u
ZXJSZWN0LnkoKSk7CisgICAgaWYgKHdpZGVTZXBhcmF0b3JzKSB7CisgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9u
Lm1vdmUoLXNlcGFyYXRvcldpZHRoLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Vw
YXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7CisKKyAgICAgICAgZ3Rr
X3JlbmRlcl9mcmFtZShzZXBhcmF0b3JTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0
aW9uLnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JXaWR0aCwgaW5uZXJS
ZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHdGtCb3JkZXIgcGFkZGluZzsK
KyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVDb250
ZXh0LCBzdGF0ZSwgJnBhZGRpbmcpOworICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOworICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3Rh
dGUsICZib3JkZXIpOworCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xU
UikKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQgKyBi
b3JkZXIubGVmdCksIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXBhcmF0b3JQb3Np
dGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgICAgICBjYWlyb19zYXZlKGNh
aXJvQ29udGV4dCk7CisKKyAgICAgICAgLy8gQW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0aGUgc2Vw
YXJhdG9yIGJsZWVkaW5nIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgYmVjYXVz
ZSBvZiBzdWJwaXhlbCBwb3NpdGlvbmluZy4KKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhaXJv
Q29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksIGJv
cmRlci5sZWZ0LCBpbm5lclJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19jbGlwKGNhaXJv
Q29udGV4dCk7CisgICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRleHQs
IGNhaXJvQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9u
LngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vw
YXJhdG9yUG9zaXRpb24ueCgpLCBpbm5lclJlY3QubWF4WSgpKTsKKyAgICAgICAgY2Fpcm9fcmVz
dG9yZShjYWlyb0NvbnRleHQpOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3Rv
cmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5U
UlkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJl
Y3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24o
KSkpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxF
X0NMQVNTX0VOVFJZKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxl
ZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAg
ICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlz
Rm9jdXNlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19G
T0NVU0VEOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5k
KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19y
ZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisKKyAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkgJiYgaXNFbmFibGVkKHJlbmRlck9i
amVjdCkpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKKyAgICAgICAgZ2ludCBm
b2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxl
KGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3It
Zm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICBpZiAoIWludGVyaW9yRm9j
dXMpIHsKKyAgICAgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICAgICAg
Zm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKKyAgICAgICAgICAgIGd0
a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBm
b2N1c1JlY3QueSgpLCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5U2xpZGVyU3R5bGVD
b250ZXh0Q2xhc3NlcyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIENvbnRyb2xQYXJ0IHBhcnQp
Cit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19TQ0FMRSk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFy
dCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KQorICAgICAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOworICAgIGVs
c2UgaWYgKHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQpCisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0
LCBHVEtfU1RZTEVfQ0xBU1NfVkVSVElDQUwpOworfQorCitib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBDb250cm9sUGFydCBw
YXJ0ID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgQVNTRVJUX1VO
VVNFRChwYXJ0LCBwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVy
VmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKKworICAgIEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmpl
Y3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRD
bGFzc2VzKGNvbnRleHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhj
b250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGlmICghaXNFbmFibGVkKHJl
bmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdUS19TVEFURV9GTEFHX0lOU0VO
U0lUSVZFKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8u
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGlmIChpc0ZvY3VzZWQocmVuZGVy
T2JqZWN0KSkgeworICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwg
TlVMTCk7CisgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICBmb2N1c1Jl
Y3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOworICAgICAgICBndGtfcmVuZGVyX2Zv
Y3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgpLCBm
b2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBndGtf
c3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpOworICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwg
cGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJQYXJ0KTsKKworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxl
Q29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250
ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZ3Rr
VGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CisgICAg
YXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOworICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0xJREVSKTsK
KworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3Qp
IHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzSG92ZXJlZChyZW5kZXJP
YmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAgICBp
ZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9G
TEFHX0FDVElWRTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGd0a19yZW5kZXJfc2xpZGVy
KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgcGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gR1RLX09SSUVO
VEFUSU9OX0hPUklaT05UQUwgOiBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOworCisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxl
LT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1cm47CisK
KyAgICBnaW50IHNsaWRlcldpZHRoLCBzbGlkZXJMZW5ndGg7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3N0eWxlKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRlckxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
QVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZv
bHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJX
aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJMZW5ndGgs
IEZpeGVkKSk7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKK2Jvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghcmVuZGVyT2JqZWN0LT5pc1Byb2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1BS
T0dSRVNTX0JBUik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJP
VUdIKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfcmVzdG9yZShjb250ZXh0KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4
dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19QUk9HUkVTU0JBUik7CisKKworICAgIEd0a0JvcmRlciBwYWRkaW5nOworICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxh
Z3M+KDApLCAmcGFkZGluZyk7CisgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QocmVjdC54KCkgKyBw
YWRkaW5nLmxlZnQsIHJlY3QueSgpICsgcGFkZGluZy50b3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC53aWR0aCgpIC0gKHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSAocGFkZGluZy50b3AgKyBwYWRk
aW5nLmJvdHRvbSkpOworICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3RrOjpjYWxjdWxh
dGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOworCisgICAgaWYgKCFw
cm9ncmVzc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICBndGtfcmVuZGVyX2FjdGl2aXR5KGNvbnRl
eHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcHJvZ3Jlc3NS
ZWN0LngoKSwgcHJvZ3Jlc3NSZWN0LnkoKSwgcHJvZ3Jlc3NSZWN0LndpZHRoKCksIHByb2dyZXNz
UmVjdC5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQp
OworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitzdGF0aWMgZ2ludCBzcGluQnV0dG9u
QXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb25zdCBQYW5nb0Zv
bnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dChjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgImZvbnQiLCAmZm9udERl
c2NyaXB0aW9uLCBOVUxMKTsKKyAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlw
dGlvbl9nZXRfc2l6ZShmb250RGVzY3JpcHRpb24pOworICAgIGdpbnQgYXJyb3dTaXplID0gbWF4
KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUpOworCisgICAg
cmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4uCit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEd0a1N0eWxl
Q29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7
CisKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFk
ZGluZyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwor
CisgICAgaW50IHdpZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcu
bGVmdCArIHBhZGRpbmcucmlnaHQ7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwor
fQorCitzdGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUs
IEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5
cGUgYXJyb3dUeXBlKQoreworICAgIEFTU0VSVChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQIHx8
IGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTik7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
YXZlKGNvbnRleHQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2RpcmVjdGlvbihjb250ZXh0KTsKKyAgICBndWludCBz
dGF0ZSA9IHN0YXRpY19jYXN0PGd1aW50PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29u
dGV4dCkpOworICAgIGlmICghKHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUpKSB7
CisgICAgICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKKyAgICAgICAg
ICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBCdXR0
b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAgICAgIHx8IChhcnJvd1R5
cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KHJlbmRlck9iamVjdCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9GTEFH
X0FDVElWRTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGVtZS0+aXNIb3ZlcmVkKHJlbmRlck9iamVj
dCkpIHsKKyAgICAgICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAmJiB0aGVt
ZS0+aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICAgICAg
ICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1NwaW5VcEJ1
dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpKQorICAgICAgICAgICAgICAgIHN0YXRlIHw9
IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgICAgICB9CisgICAgfQorICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihz
dGF0ZSkpOworCisgICAgLy8gUGFpbnQgYnV0dG9uLgorICAgIEludFJlY3QgYnV0dG9uUmVjdChy
ZWN0KTsKKyAgICBndWludCBqdW5jdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9qdW5jdGlv
bl9zaWRlcyhjb250ZXh0KTsKKyAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkKKyAg
ICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX0JPVFRPTTsKKyAgICBlbHNlIHsKKyAgICAg
ICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX1RPUDsKKyAgICAgICAgYnV0dG9uUmVjdC5tb3Zl
KDAsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICB9CisgICAgYnV0dG9uUmVjdC5zZXRIZWlnaHQo
cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9qdW5jdGlvbl9z
aWRlcyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlvblNpZGVzPihqdW5jdGlvbikpOwor
CisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBi
dXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJf
ZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0
dG9uUmVjdC5oZWlnaHQoKSk7CisKKyAgICAvLyBQYWludCBhcnJvdyBjZW50ZXJlZCBpbnNpZGUg
YnV0dG9uLgorICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBndGtzcGluYnV0dG9uLmMgY29k
ZS4KKyAgICBJbnRSZWN0IGFycm93UmVjdDsKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChh
cnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKSB7CisgICAgICAgIGFuZ2xlID0gMDsKKyAgICAgICAg
YXJyb3dSZWN0LnNldFkocmVjdC55KCkpOworICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0KHJl
Y3QuaGVpZ2h0KCkgLyAyIC0gMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYW5nbGUgPSBHX1BJ
OworICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSArIGJ1dHRvblJlY3QueSgpKTsKKyAg
ICAgICAgYXJyb3dSZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gYXJyb3dSZWN0LnkoKSAt
IDIpOworICAgIH0KKyAgICBhcnJvd1JlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0gMyk7Cisg
ICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICBhcnJvd1JlY3Qu
c2V0WChyZWN0LngoKSArIDEpOworICAgIGVsc2UKKyAgICAgICAgYXJyb3dSZWN0LnNldFgocmVj
dC54KCkgKyAyKTsKKworICAgIGdpbnQgd2lkdGggPSBhcnJvd1JlY3Qud2lkdGgoKSAvIDI7Cisg
ICAgd2lkdGggLT0gd2lkdGggJSAyIC0gMTsgLy8gRm9yY2Ugb2RkLgorICAgIGdpbnQgaGVpZ2h0
ID0gKHdpZHRoICsgMSkgLyAyOworCisgICAgYXJyb3dSZWN0Lm1vdmUoKGFycm93UmVjdC53aWR0
aCgpIC0gd2lkdGgpIC8gMiwgKGFycm93UmVjdC5oZWlnaHQoKSAtIGhlaWdodCkgLyAyKTsKKyAg
ICBndGtfcmVuZGVyX2Fycm93KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UmVjdC54KCksIGFycm93UmVjdC55KCksIHdpZHRo
KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfU1BJTl9CVVRUT04pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisK
KyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJl
Y3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24o
KSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0
aW9uKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJP
YmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdz
IHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChy
ZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtT
dGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9jbGFzcyhj
b250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfRU5UUlkpOworCisgICAgcGFpbnRTcGluQXJyb3dCdXR0
b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJP
V19VUCk7CisgICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2Jq
ZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19ET1dOKTsKKworICAgIGd0a19zdHlsZV9j
b250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dSZWZQ
dHI8R2RrUGl4YnVmPiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUs
IGNvbnN0IGNoYXIqIGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBp
Y29uU2l6ZSkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRl
eHQod2lkZ2V0VHlwZSk7CisgICAgR3RrSWNvblNldCogaWNvblNldCA9IGd0a19zdHlsZV9jb250
ZXh0X2xvb2t1cF9pY29uX3NldChjb250ZXh0LCBpY29uTmFtZSk7CisKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmIChz
dGF0ZSA9PSBHVEtfU1RBVEVfUFJFTElHSFQpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9G
TEFHX1BSRUxJR0hUOworICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJVElW
RSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVG
bGFncz4oZmxhZ3MpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOworICAgIEdka1Bp
eGJ1ZiogaWNvbiA9IGd0a19pY29uX3NldF9yZW5kZXJfaWNvbl9waXhidWYoaWNvblNldCwgY29u
dGV4dCwgc3RhdGljX2Nhc3Q8R3RrSWNvblNpemU+KGljb25TaXplKSk7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGFkb3B0R1JlZihpY29u
KTsKK30KKworR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0
VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25z
dCBjaGFyICpmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRl
LCBnaW50IGljb25TaXplKQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0
eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29u
dGV4dCk7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKHN0YXRlID09IEdUS19TVEFU
RV9QUkVMSUdIVCkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Cisg
ICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQorICAgICAgICBmbGFn
cyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7CisgICAgR3RrSWNvbkluZm8qIGluZm8gPSBn
dGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBz
eW1ib2xpY0ljb25OYW1lLCBpY29uU2l6ZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3RrSWNvbkxv
b2t1cEZsYWdzPihHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHIHwgR1RLX0lDT05fTE9PS1VQX0ZP
UkNFX1NJWkUpKTsKKyAgICBHZGtQaXhidWYqIGljb24gPSAwOworICAgIGlmIChpbmZvKSB7Cisg
ICAgICAgIGljb24gPSBndGtfaWNvbl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaW5m
bywgY29udGV4dCwgMCwgMCk7CisgICAgICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZvKTsKKyAg
ICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgaWYg
KCFpY29uKQorICAgICAgICByZXR1cm4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3aWRnZXRU
eXBlLCBmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplKTsK
KworICAgIHJldHVybiBhZG9wdEdSZWYoaWNvbik7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3Rr
OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAg
R2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91
bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdf
U0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisK
K0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
RU5UUlkpLCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOworICAgIHJldHVy
biBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JB
Q29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsK
KyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2Rr
UkdCQSBnZGtSR0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JH
QkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhl
bWVHdGs6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNr
Z3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RB
VEVfRkxBR19TRUxFQ1RFRCwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xv
cjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX1RSRUVfVklFVyksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7
CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JH
QkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZn
ZGtSR0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRl
clRoZW1lR3RrOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZM
QUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQor
CitDb2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0
Cit7CisgICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7CisKKyAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQp
IHsKKyAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pLCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPigwKSwgJmdka1JHQkFDb2xvcik7CisgICAgICAgIHJldHVybiBnZGtS
R0JBQ29sb3I7CisgICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZnZGtSR0JBQ29sb3IpOworICAgICAgICByZXR1
cm4gZ2RrUkdCQUNvbG9yOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxv
b3BHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5MGYzNWNhNjZkMjIwYjQwZDRmNjNmN2Q5ZjZjOTg0Mjc1
Nzc3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsu
Y3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2luY2x1ZGUgPGdk
ay9nZGsuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1J1bkxvb3A6OlJ1bkxvb3AoKQoreworICAgIC8v
IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSBkb2Vzbid0IGFkZCBhbiBleHRyYSByZWZlcmVuY2Uu
CisgICAgbV9ydW5Mb29wQ29udGV4dCA9IGlzTWFpblRocmVhZCgpID8gZ19tYWluX2NvbnRleHRf
ZGVmYXVsdCgpIDogYWRvcHRHUmVmKGdfbWFpbl9jb250ZXh0X25ldygpKTsKKyAgICBBU1NFUlQo
bV9ydW5Mb29wQ29udGV4dCk7CisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3Ag
PSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fcnVuTG9vcENvbnRleHQuZ2V0KCksIEZBTFNF
KSk7CisgICAgQVNTRVJUKGlubmVybW9zdExvb3ApOworICAgIG1fcnVuTG9vcE1haW5Mb29wcy5h
cHBlbmQoaW5uZXJtb3N0TG9vcCk7Cit9CisKK1J1bkxvb3A6On5SdW5Mb29wKCkKK3sKKyAgICBm
b3IgKGludCBpID0gbV9ydW5Mb29wTWFpbkxvb3BzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX3J1bkxvb3BNYWluTG9vcHNb
aV0uZ2V0KCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9ydW5Mb29wTWFpbkxvb3BzW2ldLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgUnVuTG9v
cDo6cnVuKCkKK3sKKyAgICBSdW5Mb29wKiBtYWluUnVuTG9vcCA9IFJ1bkxvb3A6OmN1cnJlbnQo
KTsKKyAgICBHTWFpbkxvb3AqIGlubmVybW9zdExvb3AgPSBtYWluUnVuTG9vcC0+aW5uZXJtb3N0
TG9vcCgpOworICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhpbm5lcm1vc3RMb29wKSkg
eworICAgICAgICBnX21haW5fbG9vcF9ydW4oaW5uZXJtb3N0TG9vcCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgYW5kIHJ1biBhIG5lc3RlZCBsb29wIGlmIHRoZSBp
bm5lcm1vc3Qgb25lIHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisgICAgR01haW5Mb29wKiBuZXN0ZWRN
YWluTG9vcCA9IGdfbWFpbl9sb29wX25ldygwLCBGQUxTRSk7CisgICAgbWFpblJ1bkxvb3AtPnB1
c2hOZXN0ZWRNYWluTG9vcChuZXN0ZWRNYWluTG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKG5l
c3RlZE1haW5Mb29wKTsKKyAgICBtYWluUnVuTG9vcC0+cG9wTmVzdGVkTWFpbkxvb3AoKTsKK30K
KworR01haW5Mb29wKiBSdW5Mb29wOjppbm5lcm1vc3RMb29wKCkKK3sKKyAgICAvLyBUaGUgaW5u
ZXJtb3N0IG1haW4gbG9vcCBzaG91bGQgYWx3YXlzIGJlIHRoZXJlLgorICAgIEFTU0VSVCghbV9y
dW5Mb29wTWFpbkxvb3BzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fcnVuTG9vcE1haW5Mb29w
c1swXS5nZXQoKTsKK30KKwordm9pZCBSdW5Mb29wOjpwdXNoTmVzdGVkTWFpbkxvb3AoR01haW5M
b29wKiBuZXN0ZWRMb29wKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3Vs
ZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0
eSgpKTsKKyAgICBtX3J1bkxvb3BNYWluTG9vcHMuYXBwZW5kKGFkb3B0R1JlZihuZXN0ZWRMb29w
KSk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6cG9wTmVzdGVkTWFpbkxvb3AoKQoreworICAgIC8vIFRo
ZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJU
KCFtX3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKKyAgICBtX3J1bkxvb3BNYWluTG9vcHMu
cmVtb3ZlTGFzdCgpOworfQorCit2b2lkIFJ1bkxvb3A6OnN0b3AoKQoreworICAgIC8vIFRoZSBp
bm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFt
X3J1bkxvb3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKKyAgICBHUmVmUHRyPEdNYWluTG9vcD4gbGFz
dE1haW5Mb29wID0gbV9ydW5Mb29wTWFpbkxvb3BzLmxhc3QoKTsKKyAgICBpZiAoZ19tYWluX2xv
b3BfaXNfcnVubmluZyhsYXN0TWFpbkxvb3AuZ2V0KCkpKQorICAgICAgICBnX21haW5fbG9vcF9x
dWl0KGxhc3RNYWluTG9vcC5nZXQoKSk7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OnF1ZXVlV29y
ayhSdW5Mb29wKiBydW5Mb29wKQoreworICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7CisgICAg
cmV0dXJuIEZBTFNFOworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAgR1JlZlB0
cjxHU291cmNlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAg
Z19zb3VyY2Vfc2V0X3ByaW9yaXR5KHNvdXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsK
KyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6cXVldWVXb3JrKSwgdGhpcywgMCk7CisgICAgZ19zb3Vy
Y2VfYXR0YWNoKHNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7CisKKyAgICBn
X21haW5fY29udGV4dF93YWtldXAobV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Cit9CisKK1J1bkxv
b3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCisgICAgOiBtX3J1bkxv
b3AocnVuTG9vcCkKKyAgICAsIG1fdGltZXJTb3VyY2UoMCkKK3sKK30KKworUnVuTG9vcDo6VGlt
ZXJCYXNlOjp+VGltZXJCYXNlKCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6
VGltZXJCYXNlOjpjbGVhclRpbWVyU291cmNlKCkKK3sKKyAgICBtX3RpbWVyU291cmNlID0gMDsK
K30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2soUnVu
TG9vcDo6VGltZXJCYXNlKiB0aW1lcikKK3sKKyAgICBHU291cmNlKiBjdXJyZW50VGltZXJTb3Vy
Y2UgPSB0aW1lci0+bV90aW1lclNvdXJjZS5nZXQoKTsKKyAgICBib29sIGlzUmVwZWF0aW5nID0g
dGltZXItPmlzUmVwZWF0aW5nKCk7CisgICAgLy8gVGhpcyBjYW4gY2hhbmdlIHRoZSB0aW1lclNv
dXJjZSBieSBzdGFydGluZyBhIG5ldyB0aW1lciB3aXRoaW4gdGhlIGNhbGxiYWNrLgorICAgIHRp
bWVyLT5maXJlZCgpOworICAgIGlmICghaXNSZXBlYXRpbmcgJiYgY3VycmVudFRpbWVyU291cmNl
ID09IHRpbWVyLT5tX3RpbWVyU291cmNlLmdldCgpKQorICAgICAgICB0aW1lci0+Y2xlYXJUaW1l
clNvdXJjZSgpOworICAgIHJldHVybiBpc1JlcGVhdGluZzsKK30KKwordm9pZCBSdW5Mb29wOjpU
aW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBmaXJlSW50ZXJ2YWwsIGJvb2wgcmVwZWF0KQoreworICAg
IGlmIChtX3RpbWVyU291cmNlKQorICAgICAgICBzdG9wKCk7CisKKyAgICBtX3RpbWVyU291cmNl
ID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihmaXJl
SW50ZXJ2YWwgKiAxMDAwKSkpOworICAgIG1faXNSZXBlYXRpbmcgPSByZXBlYXQ7CisgICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayksIHRo
aXMsIDApOworICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyU291cmNlLmdldCgpLCBtX3J1bkxv
b3AtPm1fcnVuTG9vcENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6c3RvcCgpCit7CisgICAgaWYgKCFtX3RpbWVyU291cmNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXJTb3VyY2UuZ2V0KCkpOworICAgIGNsZWFyVGlt
ZXJTb3VyY2UoKTsKK30KKworYm9vbCBSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90aW1lclNvdXJjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIwNWE1
N2I3ZGUyOTRiNjNjODZmZDUyZTc0OGYwMGY5MTIzMjA4OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBDb2xsYWJv
cmEgTHRkLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkhvc3RXaW5kb3cu
aCIKKyNpbmNsdWRlICJNYWluRnJhbWVTY3JvbGxiYXJHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVNYWluRnJh
bWVTY3JvbGxiYXIoY29uc3QgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sKKyAgICAvLyBJbnRl
cmlvciBmcmFtZSBTY3JvbGxWaWV3cyBuZXZlciBoYXZlIE1haW5GcmFtZVNjcm9sbGJhcnMuCisg
ICAgaWYgKHNjcm9sbFZpZXctPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgaG9zdCB3aW5kb3cgb3IgYSBjb250YWluaW5nIHdpZGdl
dCAoYWxhIFdlYktpdDIpLgorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBzY3JvbGxWaWV3
LT5ob3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93IHx8ICFob3N0V2luZG93LT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2Jvb2xlYW4g
c2VsZlNjcm9sbGluZyA9IEZBTFNFOworICAgIGdfb2JqZWN0X2dldChob3N0V2luZG93LT5wbGF0
Zm9ybVBhZ2VDbGllbnQoKSwgInNlbGYtc2Nyb2xsaW5nIiwgJnNlbGZTY3JvbGxpbmcsIE5VTEwp
OworICAgIHJldHVybiAhc2VsZlNjcm9sbGluZzsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IFNjcm9sbFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKK3sKKyAgICBpZiAoc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMpKQor
ICAgICAgICByZXR1cm4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVhdGUodGhpcywgb3JpZW50
YXRpb24pOworICAgIHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlz
LCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmll
dzo6dmlzaWJsZUNvbnRlbnRSZWN0KFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFy
cyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0Cit7CisgICAgYm9vbCBpbmNsdWRlU2Nyb2xsYmFy
cyA9IHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFyczsKKworICAgIC8vIElm
IHdlIGFyZSBhbiBpbnRlcmlvciBmcmFtZSBzY3JvbGxiYXIgb3IgYXJlIGluIHNvbWUgc29ydCBv
ZiB0cmFuc2l0aW9uCisgICAgLy8gc3RhdGUsIGp1c3QgY2FsY3VsYXRlIG91ciBzaXplIGJhc2Vk
IG9uIHdoYXQgdGhlIEdUSysgdGhlbWUgc2F5cyB0aGUKKyAgICAvLyBzY3JvbGxiYXIgd2lkdGgg
c2hvdWxkIGJlLgorICAgIGlmICghc2hvdWxkQ3JlYXRlTWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMp
KSB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRo
KCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50
U2l6ZShtYXgoMCwgd2lkdGgoKSAtICh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFpbmNsdWRlU2Ny
b2xsYmFycyA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndpZHRoKCkgOiAwKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4KDAsIGhlaWdodCgpIC0gKGhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiAhaW5jbHVkZVNjcm9sbGJhcnMgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdo
dCgpIDogMCkpKSk7CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHBhcmVudCwgc28g
d2UgYXJlIHRoZSBtYWluIGZyYW1lIGFuZCB0aHVzIGhhdmUKKyAgICAvLyBhIHBhcmVudCB3aWRn
ZXQgd2hpY2ggd2UgY2FuIHVzZSB0byBtZWFzdXJlIHRoZSB2aXNpYmxlIHJlZ2lvbi4KKyAgICBH
dGtXaWRnZXQqIG1lYXN1cmVkV2lkZ2V0ID0gaG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKTsKKyAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9IGd0a193aWRnZXRfZ2V0X3BhcmVu
dChtZWFzdXJlZFdpZGdldCk7CisKKyAgICAvLyBXZSBtYXkgbm90IGJlIGluIGEgd2lkZ2V0IHRo
YXQgZGlzcGxheXMgc2Nyb2xsYmFycywgYnV0IHdlIG1heQorICAgIC8vIGhhdmUgb3RoZXIga2lu
ZHMgb2YgZGVjb3JhdGlvbiB0aGF0IG1ha2UgdXMgc21hbGxlci4KKyAgICBpZiAocGFyZW50V2lk
Z2V0ICYmIGluY2x1ZGVTY3JvbGxiYXJzKQorICAgICAgICBtZWFzdXJlZFdpZGdldCA9IHBhcmVu
dFdpZGdldDsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0
X2dldF9hbGxvY2F0aW9uKG1lYXN1cmVkV2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgcmV0dXJu
IEludFJlY3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQu
aGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwg
YWxsb2NhdGlvbi5oZWlnaHQpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJN
b2RlcyhTY3JvbGxiYXJNb2RlIGhvcml6b250YWxNb2RlLCBTY3JvbGxiYXJNb2RlIHZlcnRpY2Fs
TW9kZSwgYm9vbCBob3Jpem9udGFsTG9jaywgYm9vbCB2ZXJ0aWNhbExvY2spCit7CisgICAgLy8g
RklYTUU6IFJlc3RydWN0dXJlIHRoZSBTY3JvbGxWaWV3IGFic3RyYWN0aW9uIHNvIHRoYXQgd2Ug
ZG8gbm90IGhhdmUgdG8KKyAgICAvLyBjb3B5IHRoaXMgdmVyYmF0aW0gZnJvbSBTY3JvbGxWaWV3
LmNwcC4gVW50aWwgdGhlbiwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlzCisgICAgLy8gaXMga2Vw
dCBpbiBzeW5jLgorICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKworICAgIGlmIChob3Jp
em9udGFsTW9kZSAhPSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpICYmICFtX2hvcml6b250YWxT
Y3JvbGxiYXJMb2NrKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBob3Jp
em9udGFsTW9kZTsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgIH0KKworICAgIGlm
ICh2ZXJ0aWNhbE1vZGUgIT0gdmVydGljYWxTY3JvbGxiYXJNb2RlKCkgJiYgIW1fdmVydGljYWxT
Y3JvbGxiYXJMb2NrKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJNb2RlID0gdmVydGlj
YWxNb2RlOworICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGhv
cml6b250YWxMb2NrKQorICAgICAgICBzZXRIb3Jpem9udGFsU2Nyb2xsYmFyTG9jaygpOworCisg
ICAgaWYgKHZlcnRpY2FsTG9jaykKKyAgICAgICAgc2V0VmVydGljYWxTY3JvbGxiYXJMb2NrKCk7
CisKKyAgICBpZiAobmVlZHNVcGRhdGUpCisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xs
T2Zmc2V0KCkpOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBvcnQgcG9saWN5IGNoYW5n
ZXMgb24gU2Nyb2xsVmlldydzIHVubGVzcyB0aGlzCisgICAgLy8gb25lIGhhcyBhbiBhZGp1c3Rt
ZW50IGF0dGFjaGVkIGFuZCBpdCBpcyBhIG1haW4gZnJhbWUuCisgICAgaWYgKHBhcmVudCgpIHx8
ICFpc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3IgZnJhbWVzIHRo
YXQgZG8gaGF2ZSBhZGp1c3RtZW50cyBhdHRhY2hlZCwgd2Ugd2FudCB0byByZXBvcnQKKyAgICAv
LyBwb2xpY3kgY2hhbmdlcywgc28gdGhhdCB0aGV5IG1heSBiZSBhcHBsaWVkIHRvIHRoZSB3aWRn
ZXQgdG8KKyAgICAvLyB3aGljaCB0aGUgV2ViVmlldydzIGNvbnRhaW5lciAoZS5nLiBHdGtTY3Jv
bGxlZFdpbmRvdykuCisgICAgaWYgKGhvc3RXaW5kb3coKSkKKyAgICAgICAgaG9zdFdpbmRvdygp
LT5zY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlM2ZkNzZmN2ZmYzUyMzBmYzg0
N2ZmOWZlY2FmNDNkYzQ2ZmEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPiogZ1Njcm9sbGJhcnM7CisKK1Njcm9s
bGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBT
Y3JvbGxiYXJUaGVtZUd0ayB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCitTY3JvbGxi
YXJUaGVtZUd0azo6flNjcm9sbGJhclRoZW1lR3RrKCkKK3sKK30KKwordm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
cikKK3sKKyAgICBpZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICBnU2Nyb2xsYmFycyA9IG5ldyBI
YXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj47CisgICAgZ1Njcm9sbGJhcnMtPmFkZChzY3Jv
bGxiYXIpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgZ1Njcm9sbGJhcnMtPnJl
bW92ZShzY3JvbGxiYXIpOworICAgIGlmIChnU2Nyb2xsYmFycy0+aXNFbXB0eSgpKSB7CisgICAg
ICAgIGRlbGV0ZSBnU2Nyb2xsYmFyczsKKyAgICAgICAgZ1Njcm9sbGJhcnMgPSAwOworICAgIH0K
K30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tu
ZXNzKCkKK3sKKyAgICBpZiAoIWdTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBVcGRhdGUgdGhlIHRoaWNrbmVzcyBvZiBldmVyeSBpbnRlcmlvciBmcmFtZSBzY3JvbGxiYXIg
d2lkZ2V0LiBUaGUKKyAgICAvLyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBzY3JvbGxiYXIgdGhlbSBj
b2RlIGlzbid0IHlldCBzbWFydCBlbm91Z2ggdG8gZ2V0CisgICAgLy8gdGhpcyBpbmZvcm1hdGlv
biB3aGVuIGl0IHBhaW50cy4KKyAgICBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj46Oml0
ZXJhdG9yIGVuZCA9IGdTY3JvbGxiYXJzLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xs
YmFyVGhlbWVDbGllbnQqPjo6aXRlcmF0b3IgaXQgPSBnU2Nyb2xsYmFycy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIg
PSAoKml0KTsKKworICAgICAgICAvLyBUb3AtbGV2ZWwgc2Nyb2xsYmFyIGkuZS4gc2Nyb2xsYmFy
cyB3aG8gaGF2ZSBhIHBhcmVudCBTY3JvbGxWaWV3CisgICAgICAgIC8vIHdpdGggbm8gcGFyZW50
IGFyZSBuYXRpdmUsIGFuZCB0aHVzIGRvIG5vdCBuZWVkIHRvIGJlIHJlc2l6ZWQuCisgICAgICAg
IGlmICghc2Nyb2xsYmFyLT5wYXJlbnQoKSB8fCAhc2Nyb2xsYmFyLT5wYXJlbnQoKS0+cGFyZW50
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IHNjcm9s
bGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgICAgICBpZiAoc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAg
ICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIHNjcm9sbGJhci0+cGFyZW50KCkt
PmhlaWdodCgpIC0gdGhpY2tuZXNzLCBzY3JvbGxiYXItPndpZHRoKCksIHRoaWNrbmVzcykpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0
KHNjcm9sbGJhci0+cGFyZW50KCktPndpZHRoKCkgLSB0aGlja25lc3MsIDAsIHRoaWNrbmVzcywg
c2Nyb2xsYmFyLT5oZWlnaHQoKSkpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0
azo6aGFzVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICAvLyBU
aGlzIG1ldGhvZCBpcyBqdXN0IGNhbGxlZCBhcyBhIHBhaW50LXRpbWUgb3B0aW1pemF0aW9uIHRv
IHNlZSBpZgorICAgIC8vIHBhaW50aW5nIHRoZSB0aHVtYiBjYW4gYmUgc2tpcHBlZC4gIFdlIGRv
bid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KKyAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Nyb2xs
YmFyKSA+IDA7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9v
bCkKK3sKKyAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNCYWNrQnV0
dG9uRW5kUGFydCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAocGFydCA9PSBC
YWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgpICsgbV90cm91
Z2hCb3JkZXJXaWR0aDsKKyAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91Z2hCb3Jk
ZXJXaWR0aDsKKyAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJhcik7CisgICAg
aWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcmV0dXJuIEludFJlY3Qo
eCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIEJhY2tCdXR0b25F
bmRQYXJ0IChhbHRlcm5hdGUgYnV0dG9uKQorICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xs
YmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoIC0gKDIg
KiBzaXplLndpZHRoKCkpLCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAg
Ly8gVmVydGljYWxTY3JvbGxiYXIgYWx0ZXJuYXRlIGJ1dHRvbgorICAgIHJldHVybiBJbnRSZWN0
KHgsIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVy
V2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpmb3J3YXJkQnV0dG9uUmVjdChTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCit7
CisgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChwYXJ0
ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0KQor
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6
ZShzY3JvbGxiYXIpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikgeworICAgICAgICBpbnQgeSA9IHNjcm9sbGJhci0+eSgpICsgbV90cm91
Z2hCb3JkZXJXaWR0aDsKKyAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQp
CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSArIHNjcm9sbGJhci0+
d2lkdGgoKSAtIHNpemUud2lkdGgoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGgsIHksIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dCAoYWx0ZXJuYXRlIGJ1dHRvbikKKyAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54
KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoICsgc2l6ZS53aWR0aCgpLCB5LCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFyCisgICAg
aW50IHggPSBzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGg7CisgICAgaWYgKHBh
cnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHNj
cm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCkgLSBtX3Ry
b3VnaEJvcmRlcldpZHRoLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgLy8g
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKKyAgICByZXR1cm4gSW50
UmVjdCh4LCBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGggKyBzaXplLmhlaWdo
dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitJbnRSZWN0IFNjcm9sbGJh
clRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgYm9v
bCkKK3sKKyAgICAvLyBUaGUgcGFkZGluZyBhbG9uZyB0aGUgdGh1bWIgbW92ZW1lbnQgYXhpcyBp
bmNsdWRlcyB0aGUgdHJvdWdoIGJvcmRlcgorICAgIC8vIHBsdXMgdGhlIHNpemUgb2Ygc3RlcHBl
ciBzcGFjaW5nICh0aGUgc3BhY2UgYmV0d2VlbiB0aGUgc3RlcHBlciBhbmQKKyAgICAvLyB0aGUg
cGxhY2Ugd2hlcmUgdGhlIHRodW1iIHN0b3BzKS4gVGhlcmUgaXMgb2Z0ZW4gbm8gc3RlcHBlciBz
cGFjaW5nLgorICAgIGludCBtb3ZlbWVudEF4aXNQYWRkaW5nID0gbV90cm91Z2hCb3JkZXJXaWR0
aCArIG1fc3RlcHBlclNwYWNpbmc7CisKKyAgICAvLyBUaGUgZmF0bmVzcyBvZiB0aGUgc2Nyb2xs
YmFyIG9uIHRoZSBub24tbW92ZW1lbnQgYXhpcy4KKyAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xs
YmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisKKyAgICBpbnQgc3RhcnRC
dXR0b25zT2Zmc2V0ID0gMDsKKyAgICBpbnQgYnV0dG9uc1dpZHRoID0gMDsKKyAgICBpZiAobV9o
YXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSB7CisgICAgICAgIHN0YXJ0QnV0dG9uc09mZnNldCAr
PSBtX3N0ZXBwZXJTaXplOworICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsK
KyAgICB9CisgICAgaWYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCkgeworICAgICAgICBzdGFy
dEJ1dHRvbnNPZmZzZXQgKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICAgICAgYnV0dG9uc1dpZHRoICs9
IG1fc3RlcHBlclNpemU7CisgICAgfQorICAgIGlmIChtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KQor
ICAgICAgICBidXR0b25zV2lkdGggKz0gbV9zdGVwcGVyU2l6ZTsKKyAgICBpZiAobV9oYXNGb3J3
YXJkQnV0dG9uRW5kUGFydCkKKyAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7
CisKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpIHsKKyAgICAgICAgLy8gT25jZSB0aGUgc2Nyb2xsYmFyIGJlY29tZXMgc21hbGxlciB0aGFu
IHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlCisgICAgICAgIC8vIHR3byBidXR0b25zLCB0aGUgdHJh
Y2sgZGlzYXBwZWFycy4KKyAgICAgICAgaWYgKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiB0aGlj
a25lc3MpCisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gSW50
UmVjdChzY3JvbGxiYXItPngoKSArIG1vdmVtZW50QXhpc1BhZGRpbmcgKyBzdGFydEJ1dHRvbnNP
ZmZzZXQsIHNjcm9sbGJhci0+eSgpLAorICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXIt
PndpZHRoKCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoLCB0aGlj
a25lc3MpOworICAgIH0KKworICAgIGlmIChzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAqIHRoaWNr
bmVzcykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChzY3Jv
bGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsgc3RhcnRC
dXR0b25zT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSAtICgyICogbW92ZW1lbnRBeGlzUGFkZGluZykgLSBidXR0b25zV2lkdGgpOworfQor
CitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0aHVtYlJlY3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCkKK3sK
KyAgICBJbnRSZWN0IHRyYWNrUmVjdCA9IGNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMo
c2Nyb2xsYmFyLCB1bmNvbnN0cmFpbmVkVHJhY2tSZWN0KTsKKyAgICBpbnQgdGh1bWJQb3MgPSB0
aHVtYlBvc2l0aW9uKHNjcm9sbGJhcik7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50UmVjdCh0cmFja1Jl
Y3QueCgpICsgdGh1bWJQb3MsIHRyYWNrUmVjdC55KCkgKyAodHJhY2tSZWN0LmhlaWdodCgpIC0g
bV90aHVtYkZhdG5lc3MpIC8gMiwgdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSwgbV90aHVtYkZhdG5l
c3MpOyAKKworICAgIC8vIFZlcnRpY2FsU2Nyb2xsYmFyCisgICAgcmV0dXJuIEludFJlY3QodHJh
Y2tSZWN0LngoKSArICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fdGh1bWJGYXRuZXNzKSAvIDIsIHRy
YWNrUmVjdC55KCkgKyB0aHVtYlBvcywgbV90aHVtYkZhdG5lc3MsIHRodW1iTGVuZ3RoKHNjcm9s
bGJhcikpOworfQorCitib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSB0
aGUgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIGJhc2VkIG9uIHRoZSBkYW1hZ2VSZWN0CisgICAg
U2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIHNjcm9sbE1hc2sgPSBOb1BhcnQ7CisKKyAgICBJbnRS
ZWN0IGJhY2tCdXR0b25TdGFydFBhaW50UmVjdDsKKyAgICBJbnRSZWN0IGJhY2tCdXR0b25FbmRQ
YWludFJlY3Q7CisgICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3Q7CisgICAg
SW50UmVjdCBmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0OworICAgIGlmIChoYXNCdXR0b25zKHNj
cm9sbGJhcikpIHsKKyAgICAgICAgYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0ID0gYmFja0J1dHRv
blJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYg
KGRhbWFnZVJlY3QuaW50ZXJzZWN0cyhiYWNrQnV0dG9uU3RhcnRQYWludFJlY3QpKQorICAgICAg
ICAgICAgc2Nyb2xsTWFzayB8PSBCYWNrQnV0dG9uU3RhcnRQYXJ0OworICAgICAgICBiYWNrQnV0
dG9uRW5kUGFpbnRSZWN0ID0gYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5k
UGFydCwgdHJ1ZSk7CisgICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoYmFja0J1dHRv
bkVuZFBhaW50UmVjdCkpCisgICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEJhY2tCdXR0b25FbmRQ
YXJ0OworICAgICAgICBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9u
UmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQsIHRydWUpOworICAgICAgICBp
ZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCkpCisg
ICAgICAgICAgICBzY3JvbGxNYXNrIHw9IEZvcndhcmRCdXR0b25TdGFydFBhcnQ7CisgICAgICAg
IGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QgPSBmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIs
IEZvcndhcmRCdXR0b25FbmRQYXJ0LCB0cnVlKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50
ZXJzZWN0cyhmb3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1h
c2sgfD0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQ7CisgICAgfQorCisgICAgSW50UmVjdCB0cmFja1Bh
aW50UmVjdCA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIHRydWUpOworICAgIGlmIChkYW1hZ2VSZWN0
LmludGVyc2VjdHModHJhY2tQYWludFJlY3QpKQorICAgICAgICBzY3JvbGxNYXNrIHw9IFRyYWNr
QkdQYXJ0OworCisgICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycyAmJiAoc2Nyb2xsTWFzayAm
IEJhY2tCdXR0b25TdGFydFBhcnQKKyAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBCYWNrQnV0
dG9uRW5kUGFydAorICAgICAgICAgICAgfHwgc2Nyb2xsTWFzayAmIEZvcndhcmRCdXR0b25TdGFy
dFBhcnQKKyAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uRW5kUGFydCkp
CisgICAgICAgIHNjcm9sbE1hc2sgfD0gVHJhY2tCR1BhcnQ7CisKKyAgICBib29sIHRodW1iUHJl
c2VudCA9IGhhc1RodW1iKHNjcm9sbGJhcik7CisgICAgSW50UmVjdCBjdXJyZW50VGh1bWJSZWN0
OworICAgIGlmICh0aHVtYlByZXNlbnQpIHsKKyAgICAgICAgSW50UmVjdCB0cmFjayA9IHRyYWNr
UmVjdChzY3JvbGxiYXIsIGZhbHNlKTsKKyAgICAgICAgY3VycmVudFRodW1iUmVjdCA9IHRodW1i
UmVjdChzY3JvbGxiYXIsIHRyYWNrKTsKKyAgICAgICAgaWYgKGRhbWFnZVJlY3QuaW50ZXJzZWN0
cyhjdXJyZW50VGh1bWJSZWN0KSkKKyAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0gVGh1bWJQYXJ0
OworICAgIH0KKworICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxCdXR0b25zID0gQmFj
a0J1dHRvblN0YXJ0UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8IEZvcndhcmRC
dXR0b25FbmRQYXJ0OworICAgIGlmIChzY3JvbGxNYXNrICYgVHJhY2tCR1BhcnQgfHwgc2Nyb2xs
TWFzayAmIFRodW1iUGFydCB8fCBzY3JvbGxNYXNrICYgYWxsQnV0dG9ucykKKyAgICAgICAgcGFp
bnRTY3JvbGxiYXJCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyKTsKKyAgICAg
ICAgcGFpbnRUcmFja0JhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIHRyYWNr
UGFpbnRSZWN0KTsKKworICAgIC8vIFBhaW50IHRoZSBiYWNrIGFuZCBmb3J3YXJkIGJ1dHRvbnMu
CisgICAgaWYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICBwYWlu
dEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgYmFja0J1dHRvblN0YXJ0UGFpbnRS
ZWN0LCBCYWNrQnV0dG9uU3RhcnRQYXJ0KTsKKyAgICBpZiAoc2Nyb2xsTWFzayAmIEJhY2tCdXR0
b25FbmRQYXJ0KQorICAgICAgICBwYWludEJ1dHRvbihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJh
ciwgYmFja0J1dHRvbkVuZFBhaW50UmVjdCwgQmFja0J1dHRvbkVuZFBhcnQpOworICAgIGlmIChz
Y3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgcGFpbnRCdXR0b24o
Z3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGZvcndhcmRCdXR0b25TdGFydFBhaW50UmVjdCwg
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCk7CisgICAgaWYgKHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0
dG9uRW5kUGFydCkKKyAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxi
YXIsIGZvcndhcmRCdXR0b25FbmRQYWludFJlY3QsIEZvcndhcmRCdXR0b25FbmRQYXJ0KTsKKwor
ICAgIC8vIFBhaW50IHRoZSB0aHVtYi4KKyAgICBpZiAoc2Nyb2xsTWFzayAmIFRodW1iUGFydCkK
KyAgICAgICAgcGFpbnRUaHVtYihncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhciwgY3VycmVudFRo
dW1iUmVjdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUd0
azo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJuIChldmVudC5zaGlmdEtleSgpICYm
IGV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHx8IChldmVudC5idXR0b24oKSA9PSBNaWRk
bGVCdXR0b24pOworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNjcm9sbGJhclRoaWNrbmVz
cyhTY3JvbGxiYXJDb250cm9sU2l6ZSkKK3sKKyAgICByZXR1cm4gbV90aHVtYkZhdG5lc3MgKyAo
bV90cm91Z2hCb3JkZXJXaWR0aCAqIDIpOworfQorCitJbnRTaXplIFNjcm9sbGJhclRoZW1lR3Rr
OjpidXR0b25TaXplKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuIEludFNpemUobV90aHVtYkZhdG5lc3MsIG1fc3RlcHBlclNpemUpOworCisgICAgLy8g
SG9yaXpvbnRhbFNjcm9sbGJhcgorICAgIHJldHVybiBJbnRTaXplKG1fc3RlcHBlclNpemUsIG1f
dGh1bWJGYXRuZXNzKTsKK30KKworaW50IFNjcm9sbGJhclRoZW1lR3RrOjptaW5pbXVtVGh1bWJM
ZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gbV9t
aW5UaHVtYkxlbmd0aDsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrLmggYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1l
R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTczZGYyODU1MDFiNTgyNmRjMDU5YjgzYmZjM2Q5YTQxNzBkNGJh
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVHdGtfaAorI2RlZmluZSBTY3JvbGxi
YXJUaGVtZUd0a19oCisKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3MgU2Nyb2xsYmFy
VGhlbWVHdGsgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworcHVibGljOgorICAg
IFNjcm9sbGJhclRoZW1lR3RrKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyVGhlbWVHdGsoKTsK
KworICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNs
aWVudCopOworICAgIHZpcnR1YWwgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVt
ZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wpOworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3
YXJkQnV0dG9uUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIFNjcm9sbGJhclBhcnQsIGJvb2wp
OworICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBi
b29sKTsKKyAgICBJbnRSZWN0IHRodW1iUmVjdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0
IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpOworICAgIGJvb2wgcGFpbnQoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQq
LCBTY3JvbGxiYXJUaGVtZUNsaWVudCopOworICAgIHZvaWQgcGFpbnRUcmFja0JhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdm9pZCBwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xp
ZW50KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihHcmFw
aGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFJlY3QmLCBTY3Jv
bGxiYXJQYXJ0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwg
aW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgdmlydHVh
bCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKKworICAgIC8v
IFRPRE86IFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBHVEsrIHZhbHVlcy4gQXQgc29tZSBwb2ludCB3
ZSBzaG91bGQgcHVsbCB0aGVzZSBmcm9tIHRoZSB0aGVtZSBpdHNlbGYuCisgICAgdmlydHVhbCBk
b3VibGUgaW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4yMDsgfQorICAg
IHZpcnR1YWwgZG91YmxlIGF1dG9zY3JvbGxUaW1lckRlbGF5KCkgeyByZXR1cm4gMC4wMjsgfQor
ICAgIHZvaWQgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxi
YXJzRnJhbWVUaGlja25lc3MoKTsKKyAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJh
clRoZW1lQ2xpZW50Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50Kik7CisKK3Byb3RlY3RlZDoKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAg
ICBHdGtTdHlsZUNvbnRleHQqIG1fY29udGV4dDsKKyNlbmRpZgorICAgIGludCBtX3RodW1iRmF0
bmVzczsKKyAgICBpbnQgbV90cm91Z2hCb3JkZXJXaWR0aDsKKyAgICBpbnQgbV9zdGVwcGVyU2l6
ZTsKKyAgICBpbnQgbV9zdGVwcGVyU3BhY2luZzsKKyAgICBpbnQgbV9taW5UaHVtYkxlbmd0aDsK
KyAgICBnYm9vbGVhbiBtX3Ryb3VnaFVuZGVyU3RlcHBlcnM7CisgICAgZ2Jvb2xlYW4gbV9oYXNG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0OworICAgIGdib29sZWFuIG1faGFzRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQ7CisgICAgZ2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0OworICAgIGdib29s
ZWFuIG1faGFzQmFja0J1dHRvbkVuZFBhcnQ7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcCBiL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjZiYjhhMWQyZjcx
YWE4NjRlYTU3ZWQzMDNmMTM2MDcyYzFjNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgorI2luY2x1ZGUgIlNj
cm9sbFZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyB2b2lkIGd0a1N0eWxlU2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a1N0eWxlKiBwcmV2aW91cywgU2Nyb2xsYmFyVGhlbWVHdGsqIHNjcm9sbGJhclRoZW1lKQor
eworICAgIHNjcm9sbGJhclRoZW1lLT51cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKK30KKworU2Ny
b2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKK3sKKyAgICB1cGRhdGVUaGVtZVBy
b3BlcnRpZXMoKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHN0YXRpY19jYXN0PFJlbmRlclRoZW1l
R3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrSFNjcm9sbGJhcigp
LAorICAgICAgICAgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayks
IHRoaXMpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRp
ZXMoKQoreworICAgIEd0a1dpZGdldCogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtIU2Nyb2xsYmFy
KCk7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoc2Nyb2xsYmFyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICJzbGlkZXJfd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgInRyb3VnaF9ib3JkZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAic3RlcHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3VnaFVu
ZGVyU3RlcHBlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVw
cGVyIiwgJm1faGFzQmFja0J1dHRvblN0YXJ0UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAiaGFzLWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZt
X2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhh
cy1zZWNvbmRhcnktYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25FbmRQYXJ0LCBO
VUxMKTsKKyAgICBtX21pblRodW1iTGVuZ3RoID0gZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3Np
emUoR1RLX1JBTkdFKHNjcm9sbGJhcikpOworICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNr
bmVzcygpOworfQorCitzdGF0aWMgR3RrV2lkZ2V0KiBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhcikKK3sKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhl
bWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS5nZXQoKSk7CisgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbFNjcm9sbGJhciA/IHRoZW1lLT5ndGtWU2Nyb2xsYmFyKCkgOiB0aGVtZS0+Z3RrSFNjcm9s
bGJhcigpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gUGFpbnQgdGhlIHRyYWNrIGJhY2tn
cm91bmQuIElmIHRoZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMgcHJvcGVydHkgaXMgdHJ1ZSwgdGhp
cworICAgIC8vIHNob3VsZCBiZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBzY3JvbGxiYXIsIGJ1dCBp
ZiBpcyBmYWxzZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlCisgICAgLy8gdHJhY2sgcmVjdC4KKyAg
ICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0KHJlY3QpOworICAgIGlmIChtX3Ryb3VnaFVuZGVy
U3RlcHBlcnMpCisgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXIt
PngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWln
aHQoKSk7CisKKyAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4
dCwgZnVsbFNjcm9sbGJhclJlY3QpOworICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCks
IGZ1bGxTY3JvbGxiYXJSZWN0LnNpemUoKSk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJv
eChwYWludFJlY3QsIGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19JTiwgInRy
b3VnaCIpOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyKQoreworICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9s
bGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXIt
PmhlaWdodCgpKTsKKworICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChj
b250ZXh0LCBmdWxsU2Nyb2xsYmFyUmVjdCk7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJv
eChmdWxsU2Nyb2xsYmFyUmVjdCwgZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9X
X0lOLCAic2Nyb2xsZWRfd2luZG93Iik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBh
aW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0a1dpZGdldCogd2lkZ2V0
ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgZ2Jvb2xlYW4gYWN0aXZh
dGVTbGlkZXI7CisgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiYWN0aXZhdGUtc2xp
ZGVyIiwgJmFjdGl2YXRlU2xpZGVyLCBOVUxMKTsKKworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5
cGUgPSBHVEtfU1RBVEVfTk9STUFMOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdU
S19TSEFET1dfT1VUOworICAgIGlmIChhY3RpdmF0ZVNsaWRlciAmJiBzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KSB7CisgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9B
Q1RJVkU7CisgICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOworICAgIH0gZWxzZSBp
ZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCB8fCBzY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQorICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVf
UFJFTElHSFQ7CisKKyAgICAvLyBUaGUgYWRqdXN0bWVudCBjb250cm9scyB0aGUgcmVuZGVyaW5n
IG9mIHRoZSBzY3JvbGxiYXIgdGh1bWIuIElmIGl0J3Mgbm90IHNldAorICAgIC8vIHByb3Blcmx5
IHRoZSB0aGVtZSBtYXkgbm90IGRyYXcgdGhlIHRodW1iIGJvcmRlcnMgcHJvcGVybHkuCisgICAg
R3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtf
UkFOR0Uod2lkZ2V0KSk7CisgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQs
IHNjcm9sbGJhci0+Y3VycmVudFBvcygpKTsKKyAgICBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIo
YWRqdXN0bWVudCwgMCk7CisgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVyKGFkanVzdG1lbnQs
IHNjcm9sbGJhci0+bWF4aW11bSgpKTsKKworICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9u
ID0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBndGtfYWRqdXN0bWVudF9z
ZXRfcGFnZV9zaXplKGFkanVzdG1lbnQsIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBvcmllbnRh
dGlvbiA9IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3Rr
X2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50LCByZWN0LndpZHRoKCkpOworCisg
ICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOwor
ICAgIEludFJlY3Qgc2xpZGVyUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7CisgICAgd2lk
Z2V0Q29udGV4dC5ndGtQYWludFNsaWRlcihzbGlkZXJSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwg
c2hhZG93VHlwZSwgInNsaWRlciIsIG9yaWVudGF0aW9uKTsKK30KKwordm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJU
aGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0
IHBhcnQpCit7CisgICAgLy8gVGhlIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCBpZiB0aGUgdGh1
bWIgaXMgYXMgdGhlIGFwcHJvcHJpYXRlIGV4dHJlbWUuCisgICAgR3RrU2hhZG93VHlwZSBzaGFk
b3dUeXBlID0gR1RLX1NIQURPV19PVVQ7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdU
S19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBib29sIHByZXNzZWQgPSAocGFydCA9PSBzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkpOworCisgICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBh
cnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChCYWNrQnV0dG9uRW5k
UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQorICAgICAgICB8fCAoRm9y
d2FyZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBz
Y3JvbGxiYXItPm1heGltdW0oKSkKKyAgICAgICAgfHwgKEZvcndhcmRCdXR0b25TdGFydFBhcnQg
PT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0o
KSkpIHsKKyAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKKyAgICAgICAgaWYg
KHByZXNzZWQpIHsKKyAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7Cisg
ICAgICAgICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19JTjsKKyAgICAgICAgfSBlbHNlIGlm
IChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKKyAgICAgICAgICAgIHN0YXRlVHlw
ZSA9IEdUS19TVEFURV9QUkVMSUdIVDsKKyAgICB9CisKKyAgICAvLyBUaGVtZXMgZGV0ZXJtaW5l
IGhvdyB0byBkcmF3IHRoZSBidXR0b24gKHdoaWNoIGJ1dHRvbiB0byBkcmF3KSBiYXNlZCBvbiB0
aGUgYWxsb2NhdGlvbgorICAgIC8vIG9mIHRoZSB3aWRnZXQuIFdoZXJlIHRoZSB0YXJnZXQgcmVj
dCBpcyBpbiByZWxhdGlvbiB0byB0aGUgdG90YWwgd2lkZ2V0IGFsbG9jYXRpb24KKyAgICAvLyBk
ZXRlcm1pbmVzIHRoZSBidXR0b24uCisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7CisgICAgaW50IGJ1dHRvblNpemUgPSAob3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8gcmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lk
dGgoKTsKKyAgICBpbnQgdG90YWxBbGxvY2F0aW9uID0gYnV0dG9uU2l6ZSAqIDU7IC8vIE9uZSBz
cGFjZSBmb3IgZWFjaCBidXR0b24gYW5kIG9uZSBleHRyYS4KKyAgICBpbnQgYnV0dG9uT2Zmc2V0
ID0gMDsKKyAgICBpZiAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0KQorICAgICAgICBi
dXR0b25PZmZzZXQgPSBidXR0b25TaXplOworICAgIGVsc2UgaWYgKEJhY2tCdXR0b25FbmRQYXJ0
ID09IHBhcnQpCisgICAgICAgIGJ1dHRvbk9mZnNldCA9IDMgKiBidXR0b25TaXplOworICAgIGVs
c2UgaWYgKEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBhcnQpCisgICAgICAgIGJ1dHRvbk9mZnNl
dCA9IDQgKiBidXR0b25TaXplOworCisgICAgLy8gTm93IHdlIHdhbnQgdGhlIGFsbG9jYXRpb24g
dG8gYmUgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcGFpbnRlZCByZWN0LgorICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24o
d2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgYWxsb2NhdGlvbi54ID0gYWxsb2NhdGlvbi55ID0g
MDsKKyAgICBhbGxvY2F0aW9uLndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGFsbG9jYXRpb24u
aGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgeworICAgICAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHRvdGFsQWxsb2NhdGlv
bjsKKyAgICAgICAgYWxsb2NhdGlvbi55IC09IGJ1dHRvbk9mZnNldDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0gdG90YWxBbGxvY2F0aW9uOworICAgICAgICBhbGxv
Y2F0aW9uLnggLT0gYnV0dG9uT2Zmc2V0OworICAgIH0KKyAgICBndGtfd2lkZ2V0X3NldF9hbGxv
Y2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisgICAgY29uc3QgY2hhciogZGV0YWlsID0g
b3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyAidnNjcm9sbGJhciIgOiAiaHNjcm9s
bGJhciI7CisgICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQs
IHJlY3QpOworCisgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgp
KTsKKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3Rh
dGVUeXBlLCBzaGFkb3dUeXBlLCBkZXRhaWwpOworCisgICAgZmxvYXQgYXJyb3dTY2FsaW5nOwor
ICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dT
Y2FsaW5nLCBOVUxMKTsKKyAgICBJbnRTaXplIGFycm93U2l6ZSA9IHJlY3Quc2l6ZSgpOworICAg
IGFycm93U2l6ZS5zY2FsZShhcnJvd1NjYWxpbmcpOworICAgIEludFJlY3QgYXJyb3dSZWN0KElu
dFBvaW50KGJ1dHRvblJlY3QueCgpICsgKGJ1dHRvblJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53
aWR0aCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC55
KCkgKyAoYnV0dG9uUmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZS5oZWlnaHQoKSkgLyAyKSwKKyAg
ICAgICAgICAgICAgICAgICAgICBhcnJvd1NpemUpOworICAgIGlmIChwcmVzc2VkKSB7CisgICAg
ICAgIGludCBhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKKyAgICAgICAg
Z3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiYXJyb3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFj
ZW1lbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgYXJy
b3dSZWN0Lm1vdmUoYXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVudFkpOworICAg
IH0KKworICAgIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUgPSBHVEtfQVJST1dfRE9XTjsKKyAgICBp
ZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKHBhcnQg
PT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQorICAg
ICAgICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1VQOworICAgIH0gZWxzZSBpZiAob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBhcnJvd1R5cGUgPSBHVEtf
QVJST1dfUklHSFQ7CisgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBh
cnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkKKyAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19B
UlJPV19MRUZUOworICAgIH0KKyAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dS
ZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgYXJyb3dUeXBlLCBkZXRhaWwpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05f
MgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3Bw
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk3NDljNTQzZjNkZGY2YjMxNWVmZmI5OGE3NTlmZjViMDAyZDcwY2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKQEAgLTAsMCAr
MSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCisKKyNp
Zm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWVHdGsuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgi
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2
b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEd0a1dpZGdldCosIFNjcm9sbGJhclRoZW1lR3Rr
KiBzY3JvbGxiYXJUaGVtZSkKK3sKKyAgICBzY3JvbGxiYXJUaGVtZS0+dXBkYXRlVGhlbWVQcm9w
ZXJ0aWVzKCk7Cit9CisKK1Njcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCisg
ICAgOiBtX2NvbnRleHQoc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtTY3JvbGxiYXJTdHlsZSgpKQoreworICAgIHVwZGF0
ZVRoZW1lUHJvcGVydGllcygpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LCAiY2hh
bmdlZCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK30KKwor
dm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCkKK3sKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAibWluLXNsaWRlci1sZW5ndGgiLCAmbV9taW5UaHVtYkxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlci13aWR0aCIsICZtX3RodW1iRmF0
bmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyb3VnaC1ib3JkZXIiLCAm
bV90cm91Z2hCb3JkZXJXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0
ZXBwZXItc2l6ZSIsICZtX3N0ZXBwZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAic3RlcHBlci1zcGFjaW5nIiwgJm1fc3RlcHBlclNwYWNpbmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0cm91Z2gtdW5kZXItc3RlcHBlcnMiLCAmbV90cm91Z2hVbmRl
clN0ZXBwZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLWJhY2t3YXJk
LXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaGFzLWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25F
bmRQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1i
YWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvbkVuZFBhcnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hh
c0ZvcndhcmRCdXR0b25TdGFydFBhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOworICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOworfQorCitzdGF0
aWMgdm9pZCBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJB
Uik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIG9yaWVudGF0aW9u
ID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gIEdUS19TVFlMRV9DTEFTU19WRVJUSUNBTCA6IEdUS19T
VFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVt
ZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIFBhaW50
IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3Bl
cnR5IGlzIHRydWUsIHRoaXMKKyAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUg
c2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2UsIGl0IHNob3VsZCBvbmx5IGJlIHRoZQorICAgIC8v
IHRyYWNrIHJlY3QuCisgICAgSW50UmVjdCBmdWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKKyAgICBp
ZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQorICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCks
IHNjcm9sbGJhci0+aGVpZ2h0KCkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2Nv
bnRleHQpOworCisgICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4
dCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRf
Y2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGd0a19yZW5k
ZXJfYmFja2dyb3VuZChtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1bGxT
Y3JvbGxiYXJSZWN0LnkoKSwgZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9sbGJh
clJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKKyAgICAgICAgICAgICAgICAgICAgIGZ1bGxTY3Jv
bGxiYXJSZWN0LngoKSwgZnVsbFNjcm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53
aWR0aCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC5oZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBh
aW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZSht
X2NvbnRleHQpOworCisgICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29u
dGV4dCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MobV9jb250ZXh0LCAic2Nyb2xsZWQtd2luZG93Iik7CisgICAgZ3RrX3JlbmRlcl9m
cmFtZShtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzY3JvbGxi
YXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
OworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVu
dGF0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfU0xJREVSKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoc2Ny
b2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfQUNUSVZFOworICAgIGlmIChzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
VGh1bWJQYXJ0KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtT
dGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3JlbmRlcl9zbGlkZXIobV9jb250ZXh0LCBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3Jl
KG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQoreworICAgIGd0a19zdHls
ZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpOworICAgIGFwcGx5U2Nyb2xsYmFy
U3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9yaWVudGF0aW9uKTsKKworICAgIGd1aW50
IGZsYWdzID0gMDsKKyAgICBpZiAoKEJhY2tCdXR0b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3Jv
bGxiYXItPmN1cnJlbnRQb3MoKSkKKyAgICAgICAgfHwgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBh
cnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAgIHx8IChGb3J3YXJkQnV0dG9u
RW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+
bWF4aW11bSgpKQorICAgICAgICB8fCAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYm
IHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgeworICAg
ICAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpCisgICAgICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7CisgICAgICAgIGlmIChwYXJ0ID09IHNjcm9s
bGJhci0+aG92ZXJlZFBhcnQoKSkKKyAgICAgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X1BSRUxJR0hUOworICAgIH0gZWxzZQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19J
TlNFTlNJVElWRTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUobV9jb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworCisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfYWRkX2NsYXNzKG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAgZ3Rr
X3JlbmRlcl9iYWNrZ3JvdW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
KyAgICBndGtfcmVuZGVyX2ZyYW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKKworICAgIGdmbG9hdCBhcnJvd1NjYWxpbmc7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKG1fY29udGV4dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsK
KworICAgIGRvdWJsZSBhcnJvd1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpICogYXJyb3dTY2FsaW5nOworICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0Lngo
KSArIChyZWN0LndpZHRoKCkgLSBhcnJvd1NpemUpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyKTsKKworICAg
IGlmIChmbGFncyAmIEdUS19TVEFURV9GTEFHX0FDVElWRSkgeworICAgICAgICBnaW50IGFycm93
RGlzcGxhY2VtZW50WCwgYXJyb3dEaXNwbGFjZW1lbnRZOworICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImFycm93LWRpc3BsYWNlbWVudC14IiwgJmFycm93RGlzcGxhY2VtZW50WCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteSIsICZh
cnJvd0Rpc3BsYWNlbWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMKTsKKyAgICAgICAgYXJyb3dQb2ludC5tb3ZlKGFycm93RGlzcGxhY2VtZW50WCwgYXJyb3dE
aXNwbGFjZW1lbnRZKTsKKyAgICB9CisKKyAgICBnZG91YmxlIGFuZ2xlOworICAgIGlmIChvcmll
bnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBhbmdsZSA9IChwYXJ0ID09
IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkg
PyBHX1BJIDogMDsKKyAgICB9IGVsc2UgeworICAgICAgICBhbmdsZSA9IChwYXJ0ID09IEZvcndh
cmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgPyBHX1BJ
IC8gMiA6IDMgKiAoR19QSSAvIDIpOworICAgIH0KKworICAgIGd0a19yZW5kZXJfYXJyb3cobV9j
b250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UG9p
bnQueCgpLCBhcnJvd1BvaW50LnkoKSwgYXJyb3dTaXplKTsKKworICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gIUdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NlYXJjaFBv
cHVwTWVudUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQxMzc3M2U1OGM2MDVjNDA4MTNhOWMwN2I4OTAw
M2Q2MWZkODEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNo
UG9wdXBNZW51R3RrLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTZWFyY2hQb3B1cE1lbnVHdGsuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2VhcmNoUG9wdXBNZW51R3RrOjpTZWFyY2hQb3B1cE1l
bnVHdGsoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5l
dyBQb3B1cE1lbnVHdGsoY2xpZW50KSkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
UG9wdXBNZW51KiBTZWFyY2hQb3B1cE1lbnVHdGs6OnBvcHVwTWVudSgpCit7CisgICAgcmV0dXJu
IG1fcG9wdXAuZ2V0KCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpzYXZlUmVjZW50
U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51R3RrOjpsb2Fk
UmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9wdXBNZW51R3RrOjplbmFi
bGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TZWFyY2hQb3B1cE1lbnVHdGsuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUz
YzYzZDdjMmI3Yjg0ZTQyNjM1NjI2M2E5ZDZiOTI0OTIxMWU4YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFNlYXJjaFBvcHVwTWVudUd0a19oCisjZGVm
aW5lIFNlYXJjaFBvcHVwTWVudUd0a19oCisKKyNpbmNsdWRlICJQb3B1cE1lbnVHdGsuaCIKKyNp
bmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTZWFyY2hQb3B1cE1lbnVHdGsgOiBwdWJsaWMgU2VhcmNoUG9wdXBNZW51IHsKK3B1YmxpYzoK
KyAgICBTZWFyY2hQb3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xpZW50Kik7CisKKyAgICB2aXJ0dWFs
IFBvcHVwTWVudSogcG9wdXBNZW51KCk7CisgICAgdmlydHVhbCB2b2lkIHNhdmVSZWNlbnRTZWFy
Y2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFy
Y2hJdGVtcyk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7CisgICAgdmlydHVh
bCBib29sIGVuYWJsZWQoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8UG9wdXBNZW51R3RrPiBt
X3BvcHVwOworfTsKKworfQorCisjZW5kaWYgLy8gU2VhcmNoUG9wdXBNZW51R3RrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzA0MGYyOGU5ZGY3
MWU0ZWVkMGUxYTAxMjZlNjY1MGQzNWM2MzZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oZmlsZVBhdGgpOworICAgIGdjaGFyKiBjb250ZW50czsKKyAgICBnc2l6ZSBz
aXplOworICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50
cyhmaWxlbmFtZS5kYXRhKCksICZjb250ZW50cywgJnNpemUsICZlcnJvcikpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMi
LCBmaWxlbmFtZUZvckRpc3BsYXkoZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNz
YWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoY29udGVudHMsIHNpemUpOworICAgIGdfZnJlZShjb250ZW50cyk7CisKKyAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1NoYXJlZFRpbWVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzFhMzUyZjczM2YwZWIz
YTc2OGY5ODIxYTQwMjU2NDMwMzA0ZjYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaGFyZWRUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVk
ZSA8Z2xpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBndWludCBzaGFyZWRU
aW1lcjsKK3N0YXRpYyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOworCit2b2lk
IHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBzaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24gPSBmOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihn
cG9pbnRlcikKK3sKKyAgICBpZiAoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKQorICAgICAgICBz
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQg
c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKQoreworICAgIEFTU0VS
VChzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOworCisgICAgZ3VpbnQgaW50ZXJ2YWxJbk1TID0g
c3RhdGljX2Nhc3Q8Z3VpbnQ+KGludGVydmFsICogMTAwMCk7CisKKyAgICBzdG9wU2hhcmVkVGlt
ZXIoKTsKKyAgICBzaGFyZWRUaW1lciA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlf
UkVEUkFXLCBpbnRlcnZhbEluTVMsIHRpbWVvdXRfY2IsIDAsIDApOworfQorCit2b2lkIHN0b3BT
aGFyZWRUaW1lcigpCit7CisgICAgaWYgKHNoYXJlZFRpbWVyID09IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIGdib29sZWFuIHJlbW92ZWRTb3VyY2UgPSBnX3NvdXJjZV9yZW1vdmUoc2hhcmVk
VGltZXIpOworICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZFNvdXJjZSwgcmVtb3ZlZFNvdXJjZSk7
CisgICAgc2hhcmVkVGltZXIgPSAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vZ3RrL1NvdW5kR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJmNzMxNmNhZmQyZWNlZjdiNjFlOGFkZjEyOTM2MjY4YTkyMjRjNGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcApAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNpbmNsdWRl
IDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBzeXN0ZW1CZWVwKCkK
K3sKKyAgICBnZGtfYmVlcCgpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2IzNDQ0
OTNkNWIzMWQ4ZGQ4NTAzOTg5MzY4ZmFhYjAzNTRhMzM5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQ29va2llU3Rv
cmFnZS5oIgorI2luY2x1ZGUgIkROUy5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSA8
ZmxvYXQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXBsZXRlbHkg
ZW1wdHkgc3R1YnMgKG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbmFtZXNw
YWNlIFdlYkNvcmUgewordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQorU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxlbmdlU3Ry
aW5nLCBjb25zdCBLVVJMICZ1cmwpIHsgcmV0dXJuIFN0cmluZygpOyB9CitmbG9hdCB1c2VySWRs
ZVRpbWUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGTFRfTUFYOyB9IC8vIHJldHVybiBh
biBhcmJpdHJhcmlseSBoaWdoIHVzZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2luZyBwYWdlcyBm
cm9tIHRoZSBwYWdlIGNhY2hlIGlzbid0IHBvc3Rwb25lZAorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1Vz
ZXJBZ2VudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRiNjc2MTUwOTBlMTk5ZjdiY2QzNmNiNWJmODIx
ZjVhZTUyNjAxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFn
ZW50R3RrLmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVc2VyQWdl
bnRHdGsuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lmIE9TKFVOSVgpCisjaW5jbHVkZSA8
c3lzL3V0c25hbWUuaD4KKyNlbGlmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiU3lzdGVtSW5mby5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIHBs
YXRmb3JtRm9yVUFTdHJpbmcoKQoreworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICByZXR1cm4gIlgx
MSI7CisjZWxpZiBPUyhXSU5ET1dTKQorICAgIHJldHVybiAiIjsKKyNlbGlmIFBMQVRGT1JNKE1B
QykKKyAgICByZXR1cm4gIk1hY2ludG9zaCI7CisjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
RElSRUNURkIpCisgICAgcmV0dXJuICJEaXJlY3RGQiI7CisjZWxzZQorICAgIHJldHVybiAiVW5r
bm93biI7CisjZW5kaWYKK30KKworc3RhdGljIFN0cmluZyBwbGF0Zm9ybVZlcnNpb25Gb3JVQVN0
cmluZygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVhT1NWZXJzaW9uLCAo
U3RyaW5nKCkpKTsKKyAgICBpZiAoIXVhT1NWZXJzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHVhT1NWZXJzaW9uOworCisjaWYgT1MoV0lORE9XUykKKyAgICB1YU9TVmVyc2lvbiA9IHdp
bmRvd3NWZXJzaW9uRm9yVUFTdHJpbmcoKTsKKyNlbGlmIE9TKERBUldJTikKKyNpZiBDUFUoWDg2
KQorICAgIHVhT1NWZXJzaW9uID0gIkludGVsIE1hYyBPUyBYIjsKKyNlbHNlCisgICAgdWFPU1Zl
cnNpb24gPSAiUFBDIE1hYyBPUyBYIjsKKyNlbmRpZgorI2VsaWYgT1MoVU5JWCkKKyAgICBzdHJ1
Y3QgdXRzbmFtZSBuYW1lOworICAgIGlmICh1bmFtZSgmbmFtZSkgIT0gLTEpCisgICAgICAgIHVh
T1NWZXJzaW9uID0gU3RyaW5nOjpmb3JtYXQoIiVzICVzIiwgbmFtZS5zeXNuYW1lLCBuYW1lLm1h
Y2hpbmUpOworICAgIGVsc2UKKyAgICAgICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24i
KTsKKyNlbHNlCisgICAgdWFPU1ZlcnNpb24gPSBTdHJpbmcoIlVua25vd24iKTsKKyNlbmRpZgor
ICAgIHJldHVybiB1YU9TVmVyc2lvbjsKK30KKworU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50KGNv
bnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lLCBjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uVmVy
c2lvbikKK3sKKyAgICAvLyBDcmVhdGUgYSBkZWZhdWx0IHVzZXIgYWdlbnQgc3RyaW5nIHdpdGgg
YSBsaWJlcmFsIGludGVycHJldGF0aW9uIG9mIAorICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvVXNlcl9BZ2VudF9TdHJpbmdzX1JlZmVyZW5jZQorICAgIC8v
CisgICAgLy8gRm9ybWluZyBhIGZ1bmN0aW9uYWwgdXNlciBhZ2VudCBpcyByZWFsbHkgZGlmZmlj
dWx0LiBXZSBtdXN0IG1lbnRpb24gU2FmYXJpLCBiZWNhdXNlIHNvbWUKKyAgICAvLyBzaXRlcyBj
aGVjayBmb3IgdGhhdCB3aGVuIGRldGVjdGluZyBXZWJLaXQgYnJvd3NlcnMuIEFkZGl0aW9uYWxs
eSBzb21lIHNpdGVzIGFzc3VtZSB0aGF0CisgICAgLy8gYnJvd3NlcnMgdGhhdCBhcmUgIlNhZmFy
aSIgYnV0IG5vdCBydW5uaW5nIG9uIE9TIFggYXJlIHRoZSBTYWZhcmkgaU9TIGJyb3dzZXIsIHNv
IHdlCisgICAgLy8gYWxzbyBjbGFpbSB0byBiZSAgQ2hyb21pdW0uIEdldHRpbmcgdGhpcyB3cm9u
ZyBjYW4gY2F1c2Ugc2l0ZXMgdG8gbG9hZCB0aGUgd3JvbmcgSmF2YVNjcmlwdCwKKyAgICAvLyBD
U1MsIG9yIGN1c3RvbSBmb250cy4gSW4gc29tZSBjYXNlcyBzaXRlcyB3b24ndCBsb2FkIHJlc291
cmNlcyBhdCBhbGwuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBDU3RyaW5nLCB1YVZl
cnNpb24sIChTdHJpbmc6OmZvcm1hdCgiJWkuJWkiLCBVU0VSX0FHRU5UX0dUS19NQUpPUl9WRVJT
SU9OLCBVU0VSX0FHRU5UX0dUS19NSU5PUl9WRVJTSU9OKS51dGY4KCkpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3RhdGljVUEsIChTdHJpbmc6OmZvcm1hdCgiTW96
aWxsYS81LjAgKCVzOyAlcykgQXBwbGVXZWJLaXQvJXMgKEtIVE1MLCBsaWtlIEdlY2tvKSAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkNocm9taXVtLzI1LjAuMTM0OS4yIENocm9tZS8yNS4wLjEzNDkuMiBTYWZhcmkvJXMi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsYXRmb3JtRm9yVUFTdHJpbmcoKSwgcGxhdGZvcm1WZXJzaW9uRm9yVUFTdHJp
bmcoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhVmVyc2lvbi5kYXRhKCksIHVhVmVyc2lvbi5k
YXRhKCkpKSk7CisgICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBzdGF0aWNVQTsKKworICAgIFN0cmluZyBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IGFw
cGxpY2F0aW9uVmVyc2lvbjsKKyAgICBpZiAoZmluYWxBcHBsaWNhdGlvblZlcnNpb24uaXNFbXB0
eSgpKQorICAgICAgICBmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbiA9IHVhVmVyc2lvbi5kYXRhKCk7
CisKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzICVzLyVzIiwgc3RhdGljVUEudXRmOCgp
LmRhdGEoKSwgYXBwbGljYXRpb25OYW1lLnV0ZjgoKS5kYXRhKCksIGZpbmFsQXBwbGljYXRpb25W
ZXJzaW9uLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmggYi9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMTc1MzNlMDczMDQ1NzRjMDJj
OWE2NzkyYzU2YTk1NTcyMmE5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Z3RrL1VzZXJBZ2VudEd0ay5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFVzZXJBZ2VudEd0a19oCisjZGVmaW5l
IFVzZXJBZ2VudEd0a19oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5n
IHN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lID0gIiIsIGNv
bnN0IFN0cmluZyYgYXBwbGljYXRpb25WZXJzaW9uID0gIiIpOworCit9CisKKyNlbmRpZiAvLyBV
c2VyQWdlbnRHdGtfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0
ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAz
ZjNjOWM3YzlhNmUyYzlhMzRjMDkxZWU5NGJjYjEzNzhjNmYzNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ3Vyc29y
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVk
ZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dpZGdldDo6V2lkZ2V0
KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKK3sKKyAgICBpbml0KHdpZGdldCk7Cit9CisKK1dpZGdl
dDo6fldpZGdldCgpCit7CisgICAgQVNTRVJUKCFwYXJlbnQoKSk7CisKKyAgICByZWxlYXNlUGxh
dGZvcm1XaWRnZXQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkK
K3sKK30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sK
KyAgICBTY3JvbGxWaWV3KiB2aWV3ID0gcm9vdCgpOworICAgIGlmICghdmlldykKKyAgICAgICAg
cmV0dXJuOworICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKKworICAg
IGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBndGtf
d2lkZ2V0X3Nob3cocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkK
K3sKKyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxl
KCkgJiYgcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3Jt
V2lkZ2V0KCkpOworfQorCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxl
Y3RlZChib29sIGlzU2VsZWN0ZWQpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBTZWUgaWYgdGhlIHBsYXRmb3JtV2lkZ2V0IGhhcyBhIHdl
YmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQgcHJvcGVydHkKKyAgICAvLyBhbmQgc2V0IGl0IGFmdGVy
d2FyZHMuCisgICAgR1BhcmFtU3BlYyogc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVy
dHkoR19PQkpFQ1RfR0VUX0NMQVNTKHBsYXRmb3JtV2lkZ2V0KCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQtd2lkZ2V0LWlzLXNl
bGVjdGVkIik7CisgICAgaWYgKCFzcGVjKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVj
dF9zZXQocGxhdGZvcm1XaWRnZXQoKSwgIndlYmtpdC13aWRnZXQtaXMtc2VsZWN0ZWQiLCBpc1Nl
bGVjdGVkLCBOVUxMKTsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBmcmFtZVJlY3Rz
Q2hhbmdlZCgpOworfQorCit2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkKK3sK
KyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICByZXR1cm47CisgICAgZ19vYmpl
Y3RfdW5yZWYocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZXRhaW5QbGF0
Zm9ybVdpZGdldCgpCit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICAgcmV0
dXJuOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBsYXRmb3JtV2lkZ2V0KCkpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41OWY1ZGE1NDY4MzAzODUzNjMxMzcxYzRjN2VmMzYzZTcxNGY4MTFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lR3RrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxnZGsv
Z2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgR2RrUGl4bWFwKiBnU2NyYXRjaEJ1
ZmZlciA9IDA7CitzdGF0aWMgdm9pZCBwdXJnZVNjcmF0Y2hCdWZmZXIoKQoreworICAgIGlmIChn
U2NyYXRjaEJ1ZmZlcikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZ1NjcmF0Y2hCdWZmZXIpOwor
ICAgIGdTY3JhdGNoQnVmZmVyID0gMDsKK30KKworLy8gV2lkZ2V0IHJlbmRlcmluZyBuZWVkcyBh
IHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVkaWF0ZQorLy8gcmVu
ZGVyLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9yIGV2
ZXJ5IG9wZXJhdGlvbiwKKy8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1dG9t
YXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgorY2xhc3MgUHVyZ2VTY3JhdGNoQnVmZmVyVGlt
ZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGZpcmVk
KCkgeyBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsgfQorfTsKKworc3RhdGljIHZvaWQgc2NoZWR1bGVT
Y3JhdGNoQnVmZmVyUHVyZ2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUHVyZ2VTY3Jh
dGNoQnVmZmVyVGltZXIsIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLCAoKSk7CisgICAgaWYgKHB1
cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHB1cmdlU2NyYXRjaEJ1
ZmZlclRpbWVyLnN0b3AoKTsKKyAgICBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdGFydE9uZVNo
b3QoMik7Cit9CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpCisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgLCBt
X3RhcmdldFJlY3QodGFyZ2V0UmVjdCkKKyAgICAsIG1faGFkRXJyb3IoZmFsc2UpCit7CisgICAg
UmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOworCisgICAgLy8gRmFsbGJhY2s6IFdlIGZh
aWxlZCB0byBjcmVhdGUgYW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJv
cGVybHkgcGFpbnQgCisgICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUg
dHJhbnNwYXJlbmN5LiBUbyBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKKyAg
ICAvLyBwYWludCBkaXJlY3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90
IHJlbmRlciBDU1Mgcm90YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgorICAgIGlmICghdGhl
bWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtX
aW5kb3coKSkgeworICAgICAgICBtX3RhcmdldCA9IGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZXZlciB3YW50IHRvIGNy
ZWF0ZSBhIHNjcmF0Y2ggYnVmZmVyIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG91ciB0YXJnZXQg
R2RrRHJhd2FibGUuCisgICAgLy8gVGhpcyBwcmV2ZW50cyBnaWFudCBwaXhtYXAgYWxsb2NhdGlv
bnMgZm9yIHZlcnkgbGFyZ2Ugd2lkZ2V0cyBpbiBzbWFsbGVyIHZpZXdzLgorICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGNoZWNrIGZvciBXZWJLaXQyIGFzIHdlbGwuCisg
ICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCkpIHsKKyAgICAgICAgaW50IG1heFdp
ZHRoID0gMCwgbWF4SGVpZ2h0ID0gMDsKKyAgICAgICAgZ2V0R2RrRHJhd2FibGVTaXplKGdyYXBo
aWNzQ29udGV4dC0+Z2RrV2luZG93KCksICZtYXhXaWR0aCwgJm1heEhlaWdodCk7CisgICAgICAg
IG1fdGFyZ2V0UmVjdC5zZXRTaXplKG1fdGFyZ2V0UmVjdC5zaXplKCkuc2hydW5rVG8oSW50U2l6
ZShtYXhXaWR0aCwgbWF4SGVpZ2h0KSkpOworICAgIH0KKworICAgIC8vIFdpZGdldHMgc29tZXRp
bWVzIG5lZWQgdG8gZHJhdyBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMgZm9yIHRoaW5ncyBzdWNo
IGFzCisgICAgLy8gZXh0ZXJpb3IgZm9jdXMuIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzb21lIGV4
dHJhIHBpeGVscyBpbiBvdXIgc3VyZmFjZSBmb3IgdGhpcy4KKyAgICBzdGF0aWMgaW50IGV4dHJh
U3BhY2UgPSAxNTsKKyAgICBtX3RhcmdldFJlY3QuaW5mbGF0ZShleHRyYVNwYWNlKTsKKworICAg
IC8vIFRoaXMgb2Zmc2V0IHdpbGwgbWFwIGEgcG9pbnQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSB3aWRnZXQgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludGluZyBi
dWZmZXIuCisgICAgbV9wYWludE9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKSAtIG1fdGFy
Z2V0UmVjdC5sb2NhdGlvbigpOworCisgICAgaW50IHdpZHRoID0gbV90YXJnZXRSZWN0LndpZHRo
KCkgKyAoZXh0cmFTcGFjZSAqIDIpOworICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVp
Z2h0KCkgKyAoZXh0cmFTcGFjZSAqIDIpOworICAgIGludCBzY3JhdGNoV2lkdGggPSAwOworICAg
IGludCBzY3JhdGNoSGVpZ2h0ID0gMDsKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAg
IGdka19waXhtYXBfZ2V0X3NpemUoZ1NjcmF0Y2hCdWZmZXIsICZzY3JhdGNoV2lkdGgsICZzY3Jh
dGNoSGVpZ2h0KTsKKworICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZm
ZXIgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAgICBpZiAoIWdTY3Jh
dGNoQnVmZmVyIHx8IHNjcmF0Y2hXaWR0aCA8IHdpZHRoIHx8IHNjcmF0Y2hIZWlnaHQgPCBoZWln
aHQpIHsKKyAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CisgICAgICAgIC8vIFJvdW5kIHRv
IHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBz
aW1pbGFyIHNpemVkIHJlcXVlc3RzLgorICAgICAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUp
KSA8PCA1OworICAgICAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7CisKKyAg
ICAgICAgZ1NjcmF0Y2hCdWZmZXIgPSBnZGtfcGl4bWFwX25ldygwLCB3aWR0aCwgaGVpZ2h0LCBn
ZGtfY29sb3JtYXBfZ2V0X3Zpc3VhbCh0aGVtZS0+bV9jb2xvcm1hcCktPmRlcHRoKTsKKyAgICAg
ICAgZ2RrX2RyYXdhYmxlX3NldF9jb2xvcm1hcChnU2NyYXRjaEJ1ZmZlciwgdGhlbWUtPm1fY29s
b3JtYXApOworICAgIH0KKyAgICBtX3RhcmdldCA9IGdTY3JhdGNoQnVmZmVyOworCisgICAgLy8g
Q2xlYXIgdGhlIHNjcmF0Y2ggYnVmZmVyLgorICAgIFJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVm
ZmVyQ29udGV4dCA9IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsK
KyAgICBjYWlyb19zZXRfb3BlcmF0b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5n
ZXQoKSk7Cit9CisKK1dpZGdldFJlbmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250
ZXh0KCkKK3sKKyAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdl
dCBpbiB0aGUgZmFsbGJhY2sgY2FzZS4gU2VlIGFib3ZlLgorICAgIFJlbmRlclRoZW1lR3RrKiB0
aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRU
aGVtZSgpLmdldCgpKTsKKyAgICBpZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9y
bWFwICYmIG1fZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRG9uJ3QgcGFpbnQgdGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IuCisgICAgaWYgKG1faGFkRXJyb3IpIHsKKyAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJdCdzIHVu
Y2xlYXIgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBo
ZXJlLgorICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91
c1NvdXJjZShjYWlyb19nZXRfc291cmNlKGNhaXJvQ29udGV4dCkpOworCisgICAgZ2RrX2NhaXJv
X3NldF9zb3VyY2VfcGl4bWFwKGNhaXJvQ29udGV4dCwgZ1NjcmF0Y2hCdWZmZXIsIG1fdGFyZ2V0
UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0Nv
bnRleHQsIG1fdGFyZ2V0UmVjdC54KCksIG1fdGFyZ2V0UmVjdC55KCksIG1fdGFyZ2V0UmVjdC53
aWR0aCgpLCBtX3RhcmdldFJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250
ZXh0KTsKKyAgICBjYWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2Uu
Z2V0KCkpOworICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKK3ZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlQ2xpcFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgR2RrUmVjdGFuZ2xlKiBjbGlwUmVjdCkKK3sKKyAgICBjbGlwUmVjdC0+eCA9IG1fcGFpbnRP
ZmZzZXQud2lkdGgoKSArIHJlY3QueCgpOworICAgIGNsaXBSZWN0LT55ID0gbV9wYWludE9mZnNl
dC5oZWlnaHQoKSArIHJlY3QueSgpOworICAgIGNsaXBSZWN0LT53aWR0aCA9IG1fdGFyZ2V0UmVj
dC53aWR0aCgpOworICAgIGNsaXBSZWN0LT5oZWlnaHQgPSBtX3RhcmdldFJlY3QuaGVpZ2h0KCk7
Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50
UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0
a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtS
ZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0
KTsKKworICAgIC8vIFNvbWUgd2lkZ2V0cyBhbHNvIG5lZWQgdGhlaXIgYWxsb2NhdGlvbiBhZGp1
c3RlZCB0byBhY2NvdW50IGZvciBleHRyYSBzcGFjZS4KKyAgICAvLyBSaWdodCBub3cgb25seSBz
Y3JvbGxiYXIgYnV0dG9ucyBoYXZlIHNpZ25pZmljYW50IGFsbG9jYXRpb25zLgorICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdl
dCwgJmFsbG9jYXRpb24pOworICAgIGFsbG9jYXRpb24ueCArPSBjbGlwUmVjdC54OworICAgIGFs
bG9jYXRpb24ueSArPSBjbGlwUmVjdC55OworICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24o
d2lkZ2V0LCAmYWxsb2NhdGlvbik7CisKKyAgICBndGtfcGFpbnRfYm94KGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVj
dCwKKyAgICAgICAgICAgICAgICAgIHdpZGdldCwgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVj
dC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50RmxhdEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dU
eXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsK
KyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9m
bGF0X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBl
LCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwg
ZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29u
c3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5
cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0Owor
ICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2Zv
Y3VzKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZj
bGlwUmVjdCwgd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0Lngs
IGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUg
c2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0
KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X3NsaWRlcihndGtfd2lkZ2V0X2dldF9z
dHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3Qs
IHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJl
Y3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBvcmllbnRhdGlvbik7Cit9CisKK3Zv
aWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93
VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3Rhbmds
ZSBjbGlwUmVjdDsKKyAgICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAg
IGd0a19wYWludF9jaGVjayhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwg
c3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50T3B0
aW9uKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUg
c3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwp
Cit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJl
Y3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X29wdGlvbihndGtfd2lkZ2V0X2dldF9zdHls
ZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdp
ZGdldCwKKyAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3Qu
eSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBXaWRnZXRSZW5kZXJp
bmdDb250ZXh0OjpndGtQYWludFNoYWRvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQq
IHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBl
LCBjb25zdCBnY2hhciogZGV0YWlsKQoreworICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKKyAg
ICBjYWxjdWxhdGVDbGlwUmVjdChyZWN0LCAmY2xpcFJlY3QpOworICAgIGd0a19wYWludF9zaGFk
b3coZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hh
ZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICBkZXRhaWws
IGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cit9
CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRBcnJvdyhjb25zdCBJbnRS
ZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3Rr
U2hhZG93VHlwZSBzaGFkb3dUeXBlLCBpbnQgYXJyb3dEaXJlY3Rpb24sIGNvbnN0IGdjaGFyKiBk
ZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBS
ZWN0KHJlY3QsICZjbGlwUmVjdCk7CisgICAgZ3RrX3BhaW50X2Fycm93KGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVj
dCwgd2lkZ2V0LCBkZXRhaWwsCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEd0a0Fy
cm93VHlwZT4oYXJyb3dEaXJlY3Rpb24pLCBUUlVFLCBjbGlwUmVjdC54LCBjbGlwUmVjdC55LCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0Nv
bnRleHQ6Omd0a1BhaW50VkxpbmUoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAg
R2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlw
UmVjdCk7CisgICAgZ3RrX3BhaW50X3ZsaW5lKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IG1fdGFyZ2V0LCBzdGF0ZVR5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LCBkZXRhaWwsCisgICAgICAg
ICAgICAgICAgICAgIGNsaXBSZWN0LnksIGNsaXBSZWN0LnkgKyByZWN0LmhlaWdodCgpLCBjbGlw
UmVjdC54KTsKKworfQorCit9CisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWYy
YzhhNzcxYzBlMTY3MzM3NDhkZDY0ZjQ0ZWNhYzBlMGNmOTkyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCisjZGVmaW5l
IFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaAorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKwor
I2luY2x1ZGUgIkludFJlY3QuaCIKKworLy8gVXN1YWxseSB0aGlzIGlzIHRvbyBleHBlbnNpdmUg
dG8gaGF2ZSBpbiBoZWFkZXJzLCBidXQgR3RrU3RhdGVUeXBlIEd0a1NoYWRvd1R5cGUgYXJlCisv
LyBlbnVtcyBhbmQgY2Fubm90IGJlIGZvcndhcmQgZGVjbGFyZWQuIFdpZGdldFJlbmRlcmluZ0Nv
bnRleHQuaCBpcyBjdXJyZW50bHkgb25seQorLy8gaW5jbHVkZWQgaW4gUmVuZGVyVGhlbWVHdGsy
LmNwcCBhbmQgU2Nyb2xsYmFyVGhlbWVHdGsyLmNwcC4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUmVu
ZGVyVGhlbWVHdGs7CisKK2NsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgeworcHVibGljOgor
ICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOworICAgIH5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICB2b2lkIGd0a1BhaW50
Qm94KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVj
dCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIq
KTsKKyAgICB2b2lkIGd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0
a1N0YXRlVHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50U2xpZGVyKGNvbnN0
IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0
IGdjaGFyKiwgR3RrT3JpZW50YXRpb24pOworICAgIHZvaWQgZ3RrUGFpbnRDaGVjayhjb25zdCBJ
bnRSZWN0JiwgR3RrV2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBn
Y2hhciopOworICAgIHZvaWQgZ3RrUGFpbnRPcHRpb24oY29uc3QgSW50UmVjdCYsIEd0a1dpZGdl
dCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lk
IGd0a1BhaW50U2hhZG93KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUs
IEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKik7CisgICAgdm9pZCBndGtQYWludEFycm93KGNv
bnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGlu
dCBhcnJvd0RpcmVjdGlvbiwgY29uc3QgZ2NoYXIqKTsKKyAgICB2b2lkIGd0a1BhaW50VkxpbmUo
Y29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgY29uc3QgZ2NoYXIqKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmLCBH
ZGtSZWN0YW5nbGUqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7
CisgICAgSW50UmVjdCBtX3RhcmdldFJlY3Q7CisgICAgSW50U2l6ZSBtX3BhaW50T2Zmc2V0Owor
ICAgIGJvb2wgbV9oYWRFcnJvcjsKKyAgICBHZGtEcmF3YWJsZSogbV90YXJnZXQ7CisKK307CisK
K30KKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisjZW5kaWYgLy8gV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlv
QnVzR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvYXVkaW8vQXVkaW9CdXNHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZmYzc4N2Y1MDVhY2ZkMzBiMmVmNmE3NjM3YzBiMDRhOThhMDNjNmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2F1ZGlvL0F1ZGlvQnVzR3RrLmNwcApA
QCAtMCwwICsxLDQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKworI2luY2x1ZGUg
IkF1ZGlvRmlsZVJlYWRlci5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxB
dWRpb0J1cz4gQXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUs
IGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgR093blB0cjxnY2hhcj4gZmlsZW5hbWUoZ19zdHJk
dXBfcHJpbnRmKCIlcy53YXYiLCBuYW1lKSk7CisgICAgY29uc3QgY2hhciogZW52aXJvbm1lbnRQ
YXRoID0gZ2V0ZW52KCJBVURJT19SRVNPVVJDRVNfUEFUSCIpOworICAgIEdPd25QdHI8Z2NoYXI+
IGFic29sdXRlRmlsZW5hbWU7CisgICAgaWYgKGVudmlyb25tZW50UGF0aCkKKyAgICAgICAgYWJz
b2x1dGVGaWxlbmFtZS5zZXQoZ19idWlsZF9maWxlbmFtZShlbnZpcm9ubWVudFBhdGgsIGZpbGVu
YW1lLmdldCgpLCBOVUxMKSk7CisgICAgZWxzZQorICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNl
dChnX2J1aWxkX2ZpbGVuYW1lKHNoYXJlZFJlc291cmNlc1BhdGgoKS5kYXRhKCksICJyZXNvdXJj
ZXMiLCAiYXVkaW8iLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOworICAgIHJldHVybiBjcmVhdGVC
dXNGcm9tQXVkaW9GaWxlKGFic29sdXRlRmlsZW5hbWUuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsu
Y3BwIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9Db2xvckd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGY1NmJhNmZiNGUwYjY1YTk5YzI3M2QzYjQ3MGJmZGI2YjM1YjlhZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvQ29sb3JHdGsuY3BwCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDb2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCisgICAgOiBt
X2NvbG9yKG1ha2VSR0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCisg
ICAgLCBtX3ZhbGlkKHRydWUpCit7Cit9CisKKyNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKK0Nv
bG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShzdGF0
aWNfY2FzdDxpbnQ+KGMucmVkICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihjLmdyZWVuICogMjU1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihjLmJsdWUgKiAyNTUpLAorICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KGMuYWxwaGEgKiAyNTUpKSkKKyAgICAsIG1fdmFsaWQodHJ1ZSkKK3sKK30KKwor
Q29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAoreworICAgIGRvdWJsZSByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYTsKKyAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAg
ICBHZGtSR0JBIHJnYmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07CisgICAgcmV0dXJu
IHJnYmE7Cit9CisjZW5kaWYKKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlkN2YyZjVkZjMxNGZmM2E0NmNlNDJjNWI4NDc0
OTQ5M2YwYmFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhp
Y3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKQEAgLTAsMCArMSw0NTQgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBVU0Uo
TkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrLmgiCisKKyNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckdXb3Js
ZC5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllci5o
IgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCIKKworI2luY2x1
ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworI2RlZmluZSBIVURfQVVUT19ISURFX0lOVEVSVkFMIDMwMDAgLy8gMyBz
ZWNvbmRzCisjZGVmaW5lIFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwgMTUwIC8vIDE1MG1z
CisKKy8vIFVzZSBzeW1ib2xpYyBpY29ucyBvbmx5IGlmIHdlIGJ1aWxkIHdpdGggR1RLKy0zIHN1
cHBvcnQuIFRoZXkgY291bGQKKy8vIGJlIGVuYWJsZWQgZm9yIHRoZSBHVEsrMiBidWlsZCBidXQg
d2UnZCBuZWVkIHRvIGJ1bXAgdGhlIHJlcXVpcmVkCisvLyB2ZXJzaW9uIHRvIGF0IGxlYXN0IDIu
MjIuCisjaWYgR1RLX01BSk9SX1ZFUlNJT04gPiAyCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVgg
Ii1zeW1ib2xpYyIKKyNlbHNlCisjZGVmaW5lIElDT05fTkFNRV9TVUZGSVgKKyNlbmRpZgorCisj
ZGVmaW5lIFBMQVlfSUNPTl9OQU1FICJtZWRpYS1wbGF5YmFjay1zdGFydCJJQ09OX05BTUVfU1VG
RklYCisjZGVmaW5lIFBBVVNFX0lDT05fTkFNRSAibWVkaWEtcGxheWJhY2stcGF1c2UiSUNPTl9O
QU1FX1NVRkZJWAorI2RlZmluZSBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FICJ2aWV3LXJlc3Rv
cmUiSUNPTl9OQU1FX1NVRkZJWAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBnYm9v
bGVhbiBoaWRlSHVkQ2FsbGJhY2soRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJv
bGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5oaWRlSHVkKCk7CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gb25GdWxsc2NyZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCwgIEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2hvd0h1ZCh0cnVl
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgb25GdWxsc2NyZWVuR3RrQWN0
aXZlTm90aWZpY2F0aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHUGFyYW1TcGVjKiBwcm9wZXJ0eSwg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBpZiAoIWd0
a193aW5kb3dfaXNfYWN0aXZlKEdUS19XSU5ET1cod2lkZ2V0KSkpCisgICAgICAgIGNvbnRyb2xs
ZXItPmhpZGVIdWQoKTsKK30KKworc3RhdGljIGdib29sZWFuIG9uRnVsbHNjcmVlbkd0a0NvbmZp
Z3VyZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudENvbmZpZ3VyZSogZXZlbnQsIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxl
ci0+Z3RrQ29uZmlndXJlKGV2ZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZv
aWQgb25GdWxsc2NyZWVuR3RrRGVzdHJveShHdGtXaWRnZXQqIHdpZGdldCwgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0RnVs
bHNjcmVlbigpOworfQorCitzdGF0aWMgdm9pZCB0b2dnbGVQbGF5UGF1c2VBY3RpdmF0ZWQoR3Rr
QWN0aW9uKiBhY3Rpb24sIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIp
Cit7CisgICAgY29udHJvbGxlci0+dG9nZ2xlUGxheSgpOworfQorCitzdGF0aWMgdm9pZCBleGl0
RnVsbHNjcmVlbkFjdGl2YXRlZChHdGtBY3Rpb24qIGFjdGlvbiwgRnVsbHNjcmVlblZpZGVvQ29u
dHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLT5leGl0T25Vc2VyUmVx
dWVzdCgpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJvZ3Jlc3NCYXJVcGRhdGVDYWxsYmFjayhG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAgIHJldHVybiBj
b250cm9sbGVyLT51cGRhdGVIdWRQcm9ncmVzc0JhcigpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
dGltZVNjYWxlQnV0dG9uUHJlc3NlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24q
IGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQoreworICAg
IGlmIChldmVudC0+dHlwZSAhPSBHREtfQlVUVE9OX1BSRVNTKQorICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICBjb250cm9sbGVyLT5iZWdpblNlZWsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB0aW1lU2NhbGVCdXR0b25SZWxlYXNlZChHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
KiBjb250cm9sbGVyKQoreworICAgIGNvbnRyb2xsZXItPmVuZFNlZWsoKTsKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVTY2FsZVZhbHVlQ2hhbmdlZChHdGtXaWRnZXQq
IHdpZGdldCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKK3sKKyAg
ICBjb250cm9sbGVyLT5kb1NlZWsoKTsKK30KKworc3RhdGljIHZvaWQgdm9sdW1lVmFsdWVDaGFu
Z2VkKEd0a1NjYWxlQnV0dG9uICpidXR0b24sIGdkb3VibGUgdmFsdWUsIEZ1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci0+c2V0Vm9sdW1l
KHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCisKK0Z1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGs6OkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZSogcGxheWVyKQorICAgIDogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdT
dHJlYW1lcihwbGF5ZXIpCisgICAgLCBtX2h1ZFRpbWVvdXRJZCgwKQorICAgICwgbV9wcm9ncmVz
c0JhclVwZGF0ZUlkKDApCisgICAgLCBtX3NlZWtMb2NrKGZhbHNlKQorICAgICwgbV93aW5kb3co
MCkKKyAgICAsIG1faHVkV2luZG93KDApCisgICAgLCBtX3ZvbHVtZUJ1dHRvbigwKQorICAgICwg
bV9rZXlQcmVzc1NpZ25hbElkKDApCisgICAgLCBtX2Rlc3Ryb3lTaWduYWxJZCgwKQorICAgICwg
bV9pc0FjdGl2ZVNpZ25hbElkKDApCisgICAgLCBtX21vdGlvbk5vdGlmeVNpZ25hbElkKDApCisg
ICAgLCBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFsSWQoMCkKKyAgICAsIG1faHVkTW90aW9uTm90aWZ5
U2lnbmFsSWQoMCkKKyAgICAsIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkKDApCisg
ICAgLCBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQoMCkKKyAgICAsIG1fcGxheUFj
dGlvbkFjdGl2YXRlU2lnbmFsSWQoMCkKKyAgICAsIG1fZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2
YXRlU2lnbmFsSWQoMCkKK3sKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
OjpndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUqIGV2ZW50KQoreworICAgIHVwZGF0ZUh1
ZFBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6c2hv
d0h1ZChib29sIGF1dG9IaWRlKQoreworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1v
dmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQor
CisgICAgLy8gU2hvdyB0aGUgY3Vyc29yLgorICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KG1fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2lu
ZG93LCAwKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyIGltbWVkaWF0ZWx5IGJl
Zm9yZSBzaG93aW5nIHRoZSB3aW5kb3cuCisgICAgdXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1faHVkV2luZG93KTsKKyAgICB1cGRhdGVIdWRQb3NpdGlv
bigpOworCisgICAgLy8gU3RhcnQgcGVyaW9kaWMgdXBkYXRlcyBvZiB0aGUgcHJvZ3Jlc3MgYmFy
LgorICAgIGlmICghbV9wcm9ncmVzc0JhclVwZGF0ZUlkKQorICAgICAgICBtX3Byb2dyZXNzQmFy
VXBkYXRlSWQgPSBnX3RpbWVvdXRfYWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2spLCB0
aGlzKTsKKworICAgIC8vIEhpZGUgdGhlIGh1ZCBpbiBmZXcgc2Vjb25kcywgaWYgcmVxdWVzdGVk
LgorICAgIGlmIChhdXRvSGlkZSkKKyAgICAgICAgbV9odWRUaW1lb3V0SWQgPSBnX3RpbWVvdXRf
YWRkKEhVRF9BVVRPX0hJREVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KGhpZGVIdWRDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGs6OmhpZGVIdWQoKQoreworICAgIGlmIChtX2h1ZFRpbWVvdXRJZCkgeworICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1lb3V0SWQpOworICAgICAgICBtX2h1ZFRpbWVvdXRJ
ZCA9IDA7CisgICAgfQorCisgICAgaWYgKCFtX2h1ZFdpbmRvdykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gS2VlcCB0aGUgaHVkIHZpc2libGUgaWYgYSBzZWVrIGlzIGluIHByb2dyZXNzIG9y
IGlmIHRoZSB2b2x1bWUKKyAgICAvLyBwb3B1cCBpcyB2aXNpYmxlLgorICAgIEd0a1dpZGdldCog
dm9sdW1lUG9wdXAgPSBndGtfc2NhbGVfYnV0dG9uX2dldF9wb3B1cChHVEtfU0NBTEVfQlVUVE9O
KG1fdm9sdW1lQnV0dG9uKSk7CisgICAgaWYgKG1fc2Vla0xvY2sgfHwgZ3RrX3dpZGdldF9nZXRf
dmlzaWJsZSh2b2x1bWVQb3B1cCkpIHsKKyAgICAgICAgc2hvd0h1ZCh0cnVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRf
d2luZG93KG1fd2luZG93KTsKKyAgICBHZGtDdXJzb3IqIGN1cnNvciA9IGJsYW5rQ3Vyc29yKCk7
CisgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKHdpbmRvdywgY3Vyc29yKTsKKworICAgIGd0a193
aWRnZXRfaGlkZShtX2h1ZFdpbmRvdyk7CisKKyAgICBpZiAobV9wcm9ncmVzc0JhclVwZGF0ZUlk
KSB7CisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3Byb2dyZXNzQmFyVXBkYXRlSWQpOworICAg
ICAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSAwOworICAgIH0KK30KKworc3RhdGljIGdib29s
ZWFuIG9uRnVsbHNjcmVlbkd0a0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2
ZW50S2V5KiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikK
K3sKKyAgICBzd2l0Y2ggKGV2ZW50LT5rZXl2YWwpIHsKKyAgICBjYXNlIEdES19Fc2NhcGU6Cisg
ICAgICAgIGNvbnRyb2xsZXItPmV4aXRPblVzZXJSZXF1ZXN0KCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR0RLX3NwYWNlOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgY29udHJv
bGxlci0+dG9nZ2xlUGxheSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19VcDoKKyAg
ICAgICAgY29udHJvbGxlci0+aW5jcmVhc2VWb2x1bWUoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHREtfRG93bjoKKyAgICAgICAgY29udHJvbGxlci0+ZGVjcmVhc2VWb2x1bWUoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6aW5p
dGlhbGl6ZVdpbmRvdygpCit7CisgICAgbV93aW5kb3cgPSByZWludGVycHJldF9jYXN0PEd0a1dp
ZGdldCo+KG1fZ3N0cmVhbWVyR1dvcmxkLT5wbGF0Zm9ybVZpZGVvV2luZG93KCktPndpbmRvdygp
KTsKKworICAgIGlmICghbV9odWRXaW5kb3cpCisgICAgICAgIGNyZWF0ZUh1ZCgpOworCisgICAg
Ly8gRW5zdXJlIGJsYWNrIGJhY2tncm91bmQuCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAg
ICBHZGtDb2xvciBjb2xvciA9IHsgMSwgMCwgMCwgMCB9OworICAgIGd0a193aWRnZXRfbW9kaWZ5
X2JnKG1fd2luZG93LCBHVEtfU1RBVEVfTk9STUFMLCAmY29sb3IpOworI2Vsc2UKKyAgICBHZGtS
R0JBIGNvbG9yID0geyAwLCAwLCAwLCAxfTsKKyAgICBndGtfd2lkZ2V0X292ZXJyaWRlX2JhY2tn
cm91bmRfY29sb3IobV93aW5kb3csIEdUS19TVEFURV9GTEFHX05PUk1BTCwgJmNvbG9yKTsKKyNl
bmRpZgorICAgIGd0a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChtX3dpbmRvdywgRkFMU0Up
OworCisgICAgbV9rZXlQcmVzc1NpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywg
ImtleS1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrS2V5UHJlc3NFdmVu
dCksIHRoaXMpOworICAgIG1fZGVzdHJveVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dp
bmRvdywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3kpLCB0aGlz
KTsKKyAgICBtX2lzQWN0aXZlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAi
bm90aWZ5Ojppcy1hY3RpdmUiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a0FjdGl2ZU5vdGlm
aWNhdGlvbiksIHRoaXMpOworCisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX3dpbmRvdyk7CisK
KyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7
CisgICAgR1JlZlB0cjxHZGtDdXJzb3I+IGN1cnNvcihhZG9wdEdSZWYoYmxhbmtDdXJzb3IoKSkp
OworICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNvci5nZXQoKSk7CisKKyAg
ICBtX21vdGlvbk5vdGlmeVNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgIm1v
dGlvbi1ub3RpZnktZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVlbkd0a01vdGlvbk5vdGlm
eUV2ZW50KSwgdGhpcyk7CisgICAgbV9jb25maWd1cmVFdmVudFNpZ25hbElkID0gZ19zaWduYWxf
Y29ubmVjdChtX3dpbmRvdywgImNvbmZpZ3VyZS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2Ny
ZWVuR3RrQ29uZmlndXJlRXZlbnQpLCB0aGlzKTsKKworICAgIGd0a193aW5kb3dfZnVsbHNjcmVl
bihHVEtfV0lORE9XKG1fd2luZG93KSk7CisgICAgc2hvd0h1ZCh0cnVlKTsKK30KKwordm9pZCBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjp1cGRhdGVIdWRQb3NpdGlvbigpCit7CisgICAg
aWYgKCFtX2h1ZFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBzY3Jl
ZW4gcmVjdGFuZ2xlLgorICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpbmRvd19nZXRfc2Ny
ZWVuKEdUS19XSU5ET1cobV93aW5kb3cpKTsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193
aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7CisgICAgR2RrUmVjdGFuZ2xlIGZ1bGxzY3JlZW5S
ZWN0YW5nbGU7CisgICAgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl9nZW9tZXRyeShzY3JlZW4sIGdk
a19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgd2luZG93KSwgJmZ1bGxzY3Jl
ZW5SZWN0YW5nbGUpOworCisgICAgLy8gR2V0IHRoZSBwb3B1cCB3aW5kb3cgc2l6ZS4KKyAgICBp
bnQgaHVkV2lkdGgsIGh1ZEhlaWdodDsKKyAgICBndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5E
T1cobV9odWRXaW5kb3cpLCAmaHVkV2lkdGgsICZodWRIZWlnaHQpOworCisgICAgLy8gUmVzaXpl
IHRoZSBodWQgdG8gdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHNjcmVlbi4KKyAgICBndGtfd2luZG93
X3Jlc2l6ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3RhbmdsZS53aWR0
aCwgaHVkSGVpZ2h0KTsKKworICAgIC8vIE1vdmUgdGhlIGh1ZCB0byB0aGUgYm90dG9tIG9mIHRo
ZSBzY3JlZW4uCisgICAgZ3RrX3dpbmRvd19tb3ZlKEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBm
dWxsc2NyZWVuUmVjdGFuZ2xlLngsIGZ1bGxzY3JlZW5SZWN0YW5nbGUuaGVpZ2h0ICsgZnVsbHNj
cmVlblJlY3RhbmdsZS55IC0gaHVkSGVpZ2h0KTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyR3RrOjpkZXN0cm95V2luZG93KCkKK3sKKyAgICBpZiAoIW1faHVkV2luZG93KQor
ICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5k
b3csIG1fa2V5UHJlc3NTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0
KG1fd2luZG93LCBtX2Rlc3Ryb3lTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KG1fd2luZG93LCBtX2lzQWN0aXZlU2lnbmFsSWQpOworICAgIGdfc2lnbmFsX2hhbmRs
ZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCk7CisgICAgZ19z
aWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fd2luZG93LCBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFs
SWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2h1ZFdpbmRvdywgbV9odWRN
b3Rpb25Ob3RpZnlTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1f
dGltZUhTY2FsZSwgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQpOworICAgIGdfc2ln
bmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9uUmVs
ZWFzZWRTaWduYWxJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdGltZUhT
Y2FsZSwgbV9oc2NhbGVVcGRhdGVJZCk7CisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0
KG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVy
X2Rpc2Nvbm5lY3QobV9wbGF5UGF1c2VBY3Rpb24sIG1fcGxheUFjdGlvbkFjdGl2YXRlU2lnbmFs
SWQpOworICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX2V4aXRGdWxsc2NyZWVuQWN0
aW9uLCBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKTsKKworICAgIGlmICht
X2h1ZFRpbWVvdXRJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9odWRUaW1lb3V0SWQp
OworICAgICAgICBtX2h1ZFRpbWVvdXRJZCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcHJvZ3Jl
c3NCYXJVcGRhdGVJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0JhclVw
ZGF0ZUlkKTsKKyAgICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gMDsKKyAgICB9CisKKyAg
ICBndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworCisgICAgaWYgKG1faHVkV2luZG93KQorICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9odWRXaW5kb3cpOworICAgIG1faHVkV2luZG93ID0g
MDsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpwbGF5U3RhdGVDaGFu
Z2VkKCkKK3sKKyAgICBpZiAobV9jbGllbnQtPm1lZGlhUGxheWVySXNQYXVzZWQoKSkKKyAgICAg
ICAgZ19vYmplY3Rfc2V0KG1fcGxheVBhdXNlQWN0aW9uLCAidG9vbHRpcCIsIF8oIlBsYXkiKSwg
Imljb24tbmFtZSIsIFBMQVlfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBlbHNlCisgICAgICAgIGdf
b2JqZWN0X3NldChtX3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0aXAiLCBfKCJQYXVzZSIpLCAiaWNv
bi1uYW1lIiwgUEFVU0VfSUNPTl9OQU1FLCBOVUxMKTsKKyAgICBzaG93SHVkKCFtX2NsaWVudC0+
bWVkaWFQbGF5ZXJJc1BhdXNlZCgpKTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR3RrOjp2b2x1bWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fdm9sdW1lQnV0dG9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyX2Jsb2NrKG1fdm9sdW1lQnV0dG9u
LCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAgICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtf
U0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0dG9uKSwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBn
X3NpZ25hbF9oYW5kbGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQp
OworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6Om11dGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAoIW1fdm9sdW1lQnV0dG9uKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3Np
Z25hbF9oYW5kbGVyX2Jsb2NrKG1fdm9sdW1lQnV0dG9uLCBtX3ZvbHVtZVVwZGF0ZUlkKTsKKyAg
ICBndGtfc2NhbGVfYnV0dG9uX3NldF92YWx1ZShHVEtfU0NBTEVfQlVUVE9OKG1fdm9sdW1lQnV0
dG9uKSwgbV9wbGF5ZXItPm11dGVkKCkgPyAwIDogbV9wbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBn
X3NpZ25hbF9oYW5kbGVyX3VuYmxvY2sobV92b2x1bWVCdXR0b24sIG1fdm9sdW1lVXBkYXRlSWQp
OworfQorCit2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmJlZ2luU2VlaygpCit7
CisgICAgbV9zZWVrTG9jayA9IHRydWU7Cit9CisKK3ZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJv
bGxlckd0azo6ZG9TZWVrKCkKK3sKKyAgICBpZiAoIW1fc2Vla0xvY2spCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcGxheWVyLT5zZWVrKGd0a19yYW5nZV9nZXRfdmFsdWUoR1RLX1JBTkdFKG1f
dGltZUhTY2FsZSkpKm1fcGxheWVyLT5kdXJhdGlvbigpIC8gMTAwKTsKK30KKwordm9pZCBGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjplbmRTZWVrKCkKK3sKKyAgICBtX3NlZWtMb2NrID0g
ZmFsc2U7Cit9CisKK2dib29sZWFuIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OnVwZGF0
ZUh1ZFByb2dyZXNzQmFyKCkKK3sKKyAgICBmbG9hdCBtZWRpYUR1cmF0aW9uKG1fcGxheWVyLT5k
dXJhdGlvbigpKTsKKyAgICBmbG9hdCBtZWRpYVBvc2l0aW9uKG1fcGxheWVyLT5jdXJyZW50VGlt
ZSgpKTsKKworICAgIGlmICghbV9zZWVrTG9jaykgeworICAgICAgICBnZG91YmxlIHZhbHVlID0g
MC4wOworCisgICAgICAgIGlmIChtZWRpYVBvc2l0aW9uICYmIG1lZGlhRHVyYXRpb24pCisgICAg
ICAgICAgICB2YWx1ZSA9IChtZWRpYVBvc2l0aW9uICogMTAwLjApIC8gbWVkaWFEdXJhdGlvbjsK
KworICAgICAgICBHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50ID0gZ3RrX3JhbmdlX2dldF9hZGp1
c3RtZW50KEdUS19SQU5HRShtX3RpbWVIU2NhbGUpKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRf
c2V0X3ZhbHVlKGFkanVzdG1lbnQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBndGtfcmFuZ2Vfc2V0
X2ZpbGxfbGV2ZWwoR1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIChtX3BsYXllci0+bWF4VGltZUxv
YWRlZCgpIC8gbWVkaWFEdXJhdGlvbikqIDEwMCk7CisKKyAgICBnY2hhciogbGFiZWwgPSBnX3N0
cmR1cF9wcmludGYoIiVzIC8gJXMiLCB0aW1lVG9TdHJpbmcobWVkaWFQb3NpdGlvbikudXRmOCgp
LmRhdGEoKSwgdGltZVRvU3RyaW5nKG1lZGlhRHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOworICAg
IGd0a19sYWJlbF9zZXRfdGV4dChHVEtfTEFCRUwobV90aW1lTGFiZWwpLCBsYWJlbCk7CisgICAg
Z19mcmVlKGxhYmVsKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyR3RrOjpjcmVhdGVIdWQoKQoreworICAgIG1faHVkV2luZG93ID0gZ3RrX3dp
bmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgZ3RrX3dpbmRvd19zZXRfZ3Jhdml0eShH
VEtfV0lORE9XKG1faHVkV2luZG93KSwgR0RLX0dSQVZJVFlfU09VVEhfV0VTVCk7CisgICAgZ3Rr
X3dpbmRvd19zZXRfdHlwZV9oaW50KEdUS19XSU5ET1cobV9odWRXaW5kb3cpLCBHREtfV0lORE9X
X1RZUEVfSElOVF9OT1JNQUwpOworCisgICAgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZCA9IGdf
c2lnbmFsX2Nvbm5lY3QobV9odWRXaW5kb3csICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxM
QkFDSyhvbkZ1bGxzY3JlZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMpOworCisjaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfaGJveF9uZXcoRkFM
U0UsIDQpOworI2Vsc2UKKyAgICBHdGtXaWRnZXQqIGhib3ggPSBndGtfYm94X25ldyhHVEtfT1JJ
RU5UQVRJT05fSE9SSVpPTlRBTCwgNCk7CisjZW5kaWYKKyAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKG1faHVkV2luZG93KSwgaGJveCk7CisKKyAgICBtX3BsYXlQYXVzZUFjdGlv
biA9IGd0a19hY3Rpb25fbmV3KCJwbGF5IiwgXygiUGxheSAvIFBhdXNlIiksIF8oIlBsYXkgb3Ig
cGF1c2UgdGhlIG1lZGlhIiksIFBBVVNFX0lDT05fTkFNRSk7CisgICAgbV9wbGF5QWN0aW9uQWN0
aXZhdGVTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5UGF1c2VBY3Rpb24sICJhY3Rp
dmF0ZSIsIEdfQ0FMTEJBQ0sodG9nZ2xlUGxheVBhdXNlQWN0aXZhdGVkKSwgdGhpcyk7CisKKyAg
ICBHdGtXaWRnZXQqIGl0ZW0gPSBndGtfYWN0aW9uX2NyZWF0ZV90b29sX2l0ZW0obV9wbGF5UGF1
c2VBY3Rpb24pOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBpdGVtLCBG
QUxTRSwgVFJVRSwgMCk7CisKKyAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhf
KCJUaW1lOiIpKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbGFiZWws
IEZBTFNFLCBUUlVFLCAwKTsKKworICAgIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQgPSBHVEtf
QURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDEwMC4wLCAwLjEsIDEuMCwg
MS4wKSk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBtX3RpbWVIU2NhbGUgPSBndGtf
aHNjYWxlX25ldyhhZGp1c3RtZW50KTsKKyNlbHNlCisgICAgbV90aW1lSFNjYWxlID0gZ3RrX3Nj
YWxlX25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgYWRqdXN0bWVudCk7CisjZW5kaWYK
KyAgICBndGtfc2NhbGVfc2V0X2RyYXdfdmFsdWUoR1RLX1NDQUxFKG1fdGltZUhTY2FsZSksIEZB
TFNFKTsKKyAgICBndGtfcmFuZ2Vfc2V0X3Nob3dfZmlsbF9sZXZlbChHVEtfUkFOR0UobV90aW1l
SFNjYWxlKSwgVFJVRSk7CisgICAgbV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQgPSBn
X3NpZ25hbF9jb25uZWN0KG1fdGltZUhTY2FsZSwgImJ1dHRvbi1wcmVzcy1ldmVudCIsIEdfQ0FM
TEJBQ0sodGltZVNjYWxlQnV0dG9uUHJlc3NlZCksIHRoaXMpOworICAgIG1fdGltZVNjYWxlQnV0
dG9uUmVsZWFzZWRTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNjYWxlLCAiYnV0
dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZUJ1dHRvblJlbGVhc2VkKSwg
dGhpcyk7CisgICAgbV9oc2NhbGVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV90aW1lSFNj
YWxlLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGltZVNjYWxlVmFsdWVDaGFuZ2VkKSwg
dGhpcyk7CisKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgbV90aW1lSFNj
YWxlLCBUUlVFLCBUUlVFLCAwKTsKKworICAgIG1fdGltZUxhYmVsID0gZ3RrX2xhYmVsX25ldygi
Iik7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIG1fdGltZUxhYmVsLCBG
QUxTRSwgVFJVRSwgMCk7CisKKyAgICAvLyBWb2x1bWUgYnV0dG9uLgorICAgIG1fdm9sdW1lQnV0
dG9uID0gZ3RrX3ZvbHVtZV9idXR0b25fbmV3KCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goaGJveCksIG1fdm9sdW1lQnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CisgICAgZ3RrX3Nj
YWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1f
cGxheWVyLT52b2x1bWUoKSk7CisgICAgbV92b2x1bWVVcGRhdGVJZCA9IGdfc2lnbmFsX2Nvbm5l
Y3QobV92b2x1bWVCdXR0b24sICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2b2x1bWVWYWx1
ZUNoYW5nZWQpLCB0aGlzKTsKKworICAgIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb24gPSBndGtfYWN0
aW9uX25ldygiZXhpdCIsIF8oIkV4aXQgRnVsbHNjcmVlbiIpLCBfKCJFeGl0IGZyb20gZnVsbHNj
cmVlbiBtb2RlIiksIEVYSVRfRlVMTFNDUkVFTl9JQ09OX05BTUUpOworICAgIG1fZXhpdEZ1bGxj
cmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fZXhpdEZ1bGxz
Y3JlZW5BY3Rpb24sICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soZXhpdEZ1bGxzY3JlZW5BY3RpdmF0
ZWQpLCB0aGlzKTsKKyAgICBnX29iamVjdF9zZXQobV9leGl0RnVsbHNjcmVlbkFjdGlvbiwgImlj
b24tbmFtZSIsIEVYSVRfRlVMTFNDUkVFTl9JQ09OX05BTUUsIE5VTEwpOworICAgIGl0ZW0gPSBn
dGtfYWN0aW9uX2NyZWF0ZV90b29sX2l0ZW0obV9leGl0RnVsbHNjcmVlbkFjdGlvbik7CisgICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIGl0ZW0sIEZBTFNFLCBUUlVFLCAwKTsK
KworICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9IGdfdGltZW91dF9hZGQoUFJPR1JFU1NfQkFS
X1VQREFURV9JTlRFUlZBTCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocHJvZ3Jlc3NC
YXJVcGRhdGVDYWxsYmFjayksIHRoaXMpOworCisgICAgcGxheVN0YXRlQ2hhbmdlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIGIvU291cmNl
L1BsYXRmb3JtL2d0ay9ncmFwaGljcy9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDU3NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQxYjJjNDNiNjkxNDRiYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ay5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEzIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyR3RrX2gKKyNkZWZpbmUgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCisKKyNpZiBF
TkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9W
SURFTykKKworI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrIDogcHVibGljIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIgeworcHVibGlj
OgorICAgIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsoTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZSopOworCisgICAgdm9pZCBndGtDb25maWd1cmUoR2RrRXZlbnRDb25maWd1cmUq
KTsKKworICAgIHZvaWQgcGxheVN0YXRlQ2hhbmdlZCgpOworCisgICAgdm9pZCBiZWdpblNlZWso
KTsKKyAgICB2b2lkIGRvU2VlaygpOworICAgIHZvaWQgZW5kU2VlaygpOworCisgICAgdm9pZCBo
aWRlSHVkKCk7CisgICAgdm9pZCBzaG93SHVkKGJvb2wpOworICAgIGdib29sZWFuIHVwZGF0ZUh1
ZFByb2dyZXNzQmFyKCk7CisKKyAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKKyAgICB2b2lkIG11
dGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplV2luZG93KCk7Cisg
ICAgdm9pZCBkZXN0cm95V2luZG93KCk7CisKKyAgICB2b2lkIGNyZWF0ZUh1ZCgpOworICAgIHZv
aWQgdXBkYXRlSHVkUG9zaXRpb24oKTsKKworICAgIGd1aW50IG1faHVkVGltZW91dElkOworICAg
IGd1aW50IG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZDsKKyAgICBndWludCBtX3Byb2dyZXNzQmFyRmls
bFVwZGF0ZUlkOworICAgIGd1aW50IG1faHNjYWxlVXBkYXRlSWQ7CisgICAgZ3VpbnQgbV92b2x1
bWVVcGRhdGVJZDsKKyAgICBib29sIG1fc2Vla0xvY2s7CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRv
dzsKKyAgICBHdGtXaWRnZXQqIG1faHVkV2luZG93OworICAgIEd0a0FjdGlvbiogbV9wbGF5UGF1
c2VBY3Rpb247CisgICAgR3RrQWN0aW9uKiBtX2V4aXRGdWxsc2NyZWVuQWN0aW9uOworICAgIEd0
a1dpZGdldCogbV90aW1lSFNjYWxlOworICAgIEd0a1dpZGdldCogbV90aW1lTGFiZWw7CisgICAg
R3RrV2lkZ2V0KiBtX3ZvbHVtZUJ1dHRvbjsKKworICAgIHVuc2lnbmVkIGxvbmcgbV9rZXlQcmVz
c1NpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9kZXN0cm95U2lnbmFsSWQ7CisgICAgdW5z
aWduZWQgbG9uZyBtX2lzQWN0aXZlU2lnbmFsSWQ7CisgICAgdW5zaWduZWQgbG9uZyBtX21vdGlv
bk5vdGlmeVNpZ25hbElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9jb25maWd1cmVFdmVudFNpZ25h
bElkOworICAgIHVuc2lnbmVkIGxvbmcgbV9odWRNb3Rpb25Ob3RpZnlTaWduYWxJZDsKKyAgICB1
bnNpZ25lZCBsb25nIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25hbElkOworICAgIHVuc2ln
bmVkIGxvbmcgbV90aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkOworICAgIHVuc2lnbmVk
IGxvbmcgbV9wbGF5QWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKKyAgICB1bnNpZ25lZCBsb25nIG1f
ZXhpdEZ1bGxjcmVlbkFjdGlvbkFjdGl2YXRlU2lnbmFsSWQ7Cit9OworCit9CisjZW5kaWYKKwor
I2VuZGlmIC8vIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ODAxOGEzMGYwYzQxZTBlNGNlNWRjYzM4NGE5NTE5ZjU0NzA0NWQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5jcHAKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCitHZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYo
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIHJldHVybiBnZGtfcGl4YnVmX2dldF9m
cm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KHN1cmZhY2UpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9n
cmFwaGljcy9HZGtDYWlyb1V0aWxpdGllcy5oIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGlj
cy9HZGtDYWlyb1V0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmNWIzZWRlZmMxMTFkYjk0NmUzMmFj
ODFkMGZjMmEwNTBjZTAyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3Rr
L2dyYXBoaWNzL0dka0NhaXJvVXRpbGl0aWVzLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2RrQ2Fpcm9VdGls
aXRpZXNfaAorI2RlZmluZSBHZGtDYWlyb1V0aWxpdGllc19oCisKK0dka1BpeGJ1ZiogY2Fpcm9J
bWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpOworCisjZW5k
aWYgLy8gR2RrQ2Fpcm9VdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0
ay9ncmFwaGljcy9JY29uR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNv
bkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2U5NTdiMzQ1Y2U1ZmIyNzExYTEwYzY2ODAyNTNkYzUyNGVj
ODhmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSWNv
bkd0ay5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJY29uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ljb246Oklj
b24oKQorICAgIDogbV9pY29uKDApCit7Cit9CisKK0ljb246On5JY29uKCkKK3sKKyAgICBpZiAo
bV9pY29uKQorICAgICAgICBnX29iamVjdF91bnJlZihtX2ljb24pOworfQorCitzdGF0aWMgU3Ry
aW5nIGxvb2t1cEljb25OYW1lKFN0cmluZyBNSU1FVHlwZSkKK3sKKyAgICAvKgorICAgICBMb29r
dXAgYW4gYXBwcm9wcmlhdGUgaWNvbiBhY2NvcmRpbmcgdG8gZWl0aGVyIHRoZSBJY29uIE5hbWlu
ZyBTcGVjCisgICAgIG9yIGNvbnZlbnRpb25hbCBHbm9tZSBpY29uIG5hbWVzIHJlc3BlY3RpdmVs
eS4KKworICAgICBTZWUgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvaWNvbi1uYW1p
bmctc3BlYy9pY29uLW5hbWluZy1zcGVjLWxhdGVzdC5odG1sCisKKyAgICAgVGhlIGljb24gdGhl
bWUgaXMgcHJvYmVkIGZvciB0aGUgZm9sbG93aW5nIG5hbWVzOgorICAgICAxLiBtZWRpYS1zdWJ0
eXBlCisgICAgIDIuIGdub21lLW1pbWUtbWVkaWEtc3VidHlwZQorICAgICAzLiBtZWRpYS14LWdl
bmVyaWMKKyAgICAgNC4gZ25vbWUtbWltZS1tZWRpYQorCisgICAgIEluIHRoZSB3b3JzdCBjYXNl
IGl0IGZhbGxzIGJhY2sgdG8gdGhlIHN0b2NrIGZpbGUgaWNvbi4KKyAgICAqLworICAgIGludCBw
b3MgPSBNSU1FVHlwZS5maW5kKCcvJyk7CisgICAgaWYocG9zID49IDApIHsKKyAgICAgICAgU3Ry
aW5nIG1lZGlhID0gTUlNRVR5cGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIFN0cmluZyBz
dWJ0eXBlID0gTUlNRVR5cGUuc3Vic3RyaW5nKHBvcyArIDEpOworICAgICAgICBHdGtJY29uVGhl
bWUqIGljb25UaGVtZSA9IGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCk7CisgICAgICAgIFN0
cmluZyBpY29uTmFtZSA9IG1lZGlhICsgIi0iICsgc3VidHlwZTsKKyAgICAgICAgaWYoZ3RrX2lj
b25fdGhlbWVfaGFzX2ljb24oaWNvblRoZW1lLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBpY29uTmFtZTsKKyAgICAgICAgaWNvbk5hbWUgPSAiZ25vbWUtbWlt
ZS0iICsgbWVkaWEgKyAiLSIgKyBzdWJ0eXBlOworICAgICAgICBpZihndGtfaWNvbl90aGVtZV9o
YXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAg
cmV0dXJuIGljb25OYW1lOworICAgICAgICBpY29uTmFtZSA9IG1lZGlhICsgIi14LWdlbmVyaWMi
OworICAgICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1l
LnV0ZjgoKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOworICAgICAgICBp
Y29uTmFtZSA9IG1lZGlhICsgImdub21lLW1pbWUtIiArIG1lZGlhOworICAgICAgICBpZihndGtf
aWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0ZjgoKS5kYXRhKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOworICAgIH0KKyAgICByZXR1cm4gR1RLX1NUT0NL
X0ZJTEU7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjb2RlIHRvIENocm9tZUNsaWVudDo6aWNv
bkZvckZpbGVzKCkuCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIGlmIChmaWxlbmFtZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgaWYgKCFnX3BhdGhfc2tpcF9yb290KGZpbGVuYW1lc1swXS51dGY4KCku
ZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBNSU1FVHlw
ZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aChmaWxlbmFtZXNbMF0pOwor
ICAgICAgICBTdHJpbmcgaWNvbk5hbWUgPSBsb29rdXBJY29uTmFtZShNSU1FVHlwZSk7CisKKyAg
ICAgICAgUmVmUHRyPEljb24+IGljb24gPSBhZG9wdFJlZihuZXcgSWNvbik7CisgICAgICAgIGlj
b24tPm1faWNvbiA9IGd0a19pY29uX3RoZW1lX2xvYWRfaWNvbihndGtfaWNvbl90aGVtZV9nZXRf
ZGVmYXVsdCgpLCBpY29uTmFtZS51dGY4KCkuZGF0YSgpLCAxNiwgR1RLX0lDT05fTE9PS1VQX1VT
RV9CVUlMVElOLCAwKTsKKyAgICAgICAgaWYgKCFpY29uLT5tX2ljb24pCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGljb24ucmVsZWFzZSgpOworICAgIH0KKworICAgIC8v
RklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFRPRE86IFNjYWxlL2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KKyAgICBjYWlyb190
KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOworICAgIGNhaXJvX3NhdmUo
Y3IpOworICAgIGdka19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgbV9pY29uLCByZWN0Lngo
KSwgcmVjdC55KCkpOworICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNy
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckd0ay5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlQnVmZmVy
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NmZmNTNiNGZlMTExZDI0MzAyMjlmNjAzNjc2N2FjYTdlYmQ0
ZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckd0ay5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR2RrQ2Fp
cm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgZW5jb2Rl
SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBkb3VibGUqIHF1YWxpdHksIEdPd25QdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZm
ZXJTaXplKQoreworICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVz
IGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9k
ZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZp
bmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBt
aW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVn
IiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYg
dHlwZSAhPSAiYm1wIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQ
aXhidWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBF
RyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVz
IHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBj
b21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1
cHBvcnQgYWxwaGEuCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFj
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJv
SW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQor
ICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1Zihz
dXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdFcnJvciogZXJyb3IgPSAwOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYm
ICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1
YWxpdHlTdHJpbmcgPSBTdHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFs
aXR5ICogMTAwLjAgKyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihw
aXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5k
YXRhKCksICZlcnJvciwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5V
TEwpOworICAgIH0gZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1
Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEo
KSwgJmVycm9yLCBOVUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSog
cXVhbGl0eSwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
KworICAgIEdPd25QdHI8Z2NoYXI+IGJ1ZmZlcigwKTsKKyAgICBnc2l6ZSBidWZmZXJTaXplOwor
ICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5cGUsIHF1YWxpdHks
IGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZl
Y3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShidWZmZXIuZ2V0KCksIGJ1
ZmZlclNpemUsIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vZ3RrL2dyYXBoaWNzL0ltYWdlR3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3Jh
cGhpY3MvSW1hZ2VHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkOWZiZWZmMDI1ODQyYzJmMWY4NWVkNDk5
ZjY0MTU5MjBlNDUyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL2dy
YXBoaWNzL0ltYWdlR3RrLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1
ZGUgIkdPd25QdHJHdGsuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNoYXIqIGdldFBhdGhUb0ltYWdl
UmVzb3VyY2UoY2hhciogcmVzb3VyY2UpCit7CisgICAgaWYgKGdfZ2V0ZW52KCJXRUJLSVRfVE9Q
X0xFVkVMIikpCisgICAgICAgIHJldHVybiBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0ZW52KCJXRUJL
SVRfVE9QX0xFVkVMIiksICJTb3VyY2UiLCAiV2ViQ29yZSIsICJSZXNvdXJjZXMiLCByZXNvdXJj
ZSwgTlVMTCk7CisKKyAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShzaGFyZWRSZXNvdXJjZXNQ
YXRoKCkuZGF0YSgpLCAiaW1hZ2VzIiwgcmVzb3VyY2UsIE5VTEwpOworfQorCitzdGF0aWMgQ1N0
cmluZyBnZXRUaGVtZUljb25GaWxlTmFtZShjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSkKK3sK
KyAgICBHdGtJY29uSW5mbyogaWNvbkluZm8gPSBndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihn
dGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNpemUsIEdUS19JQ09OX0xPT0tVUF9O
T19TVkcpOworICAgIC8vIFRyeSB0byBmYWxsYmFjayBvbiBNSVNTSU5HX0lNQUdFLgorICAgIGlm
ICghaWNvbkluZm8pCisgICAgICAgIGljb25JbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2lj
b24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwgc2l6ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfSUNPTl9MT09L
VVBfTk9fU1ZHKTsKKyAgICBpZiAoaWNvbkluZm8pIHsKKyAgICAgICAgR093blB0cjxHdGtJY29u
SW5mbz4gaW5mbyhpY29uSW5mbyk7CisgICAgICAgIHJldHVybiBDU3RyaW5nKGd0a19pY29uX2lu
Zm9fZ2V0X2ZpbGVuYW1lKGluZm8uZ2V0KCkpKTsKKyAgICB9CisKKyAgICAvLyBObyBpY29uIHdh
cyBmb3VuZCwgdGhpcyBjYW4gaGFwcGVuIGlmIG5vdCBHVEsgdGhlbWUgaXMgc2V0LiBJbgorICAg
IC8vIHRoYXQgY2FzZSBhbiBlbXB0eSBJbWFnZSB3aWxsIGJlIGNyZWF0ZWQuCisgICAgcmV0dXJu
IENTdHJpbmcoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVz
b3VyY2VTaGFyZWRCdWZmZXIoQ1N0cmluZyBuYW1lKQoreworICAgIEdPd25QdHI8Z2NoYXI+IGNv
bnRlbnQ7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhu
YW1lLmRhdGEoKSwgJmNvbnRlbnQub3V0UHRyKCksICZsZW5ndGgsIDApKQorICAgICAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShjb250ZW50LmdldCgpLCBsZW5ndGgpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjppbnZh
bGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gbG9hZEltYWdl
RnJvbUZpbGUoQ1N0cmluZyBmaWxlTmFtZSkKK3sKKyAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IGlt
ZyA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICBpZiAoIWZpbGVOYW1lLmlzTnVsbCgpKSB7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGxvYWRSZXNvdXJjZVNoYXJl
ZEJ1ZmZlcihmaWxlTmFtZSk7CisgICAgICAgIGltZy0+c2V0RGF0YShidWZmZXIucmVsZWFzZSgp
LCB0cnVlKTsKKyAgICB9CisgICAgcmV0dXJuIGltZy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQor
eworICAgIENTdHJpbmcgZmlsZU5hbWU7CisgICAgaWYgKCFzdHJjbXAoIm1pc3NpbmdJbWFnZSIs
IG5hbWUpKQorICAgICAgICBmaWxlTmFtZSA9IGdldFRoZW1lSWNvbkZpbGVOYW1lKEdUS19TVE9D
S19NSVNTSU5HX0lNQUdFLCAxNik7CisgICAgaWYgKGZpbGVOYW1lLmlzTnVsbCgpKSB7CisgICAg
ICAgIEdPd25QdHI8Z2NoYXI+IGltYWdlTmFtZShnX3N0cmR1cF9wcmludGYoIiVzLnBuZyIsIG5h
bWUpKTsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZ2xpYkZpbGVOYW1lKGdldFBhdGhUb0ltYWdl
UmVzb3VyY2UoaW1hZ2VOYW1lLmdldCgpKSk7CisgICAgICAgIGZpbGVOYW1lID0gZ2xpYkZpbGVO
YW1lLmdldCgpOworICAgIH0KKworICAgIHJldHVybiBsb2FkSW1hZ2VGcm9tRmlsZShmaWxlTmFt
ZSk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1UaGVtZUljb24o
Y29uc3QgY2hhciogbmFtZSwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIGxvYWRJbWFnZUZyb21G
aWxlKGdldFRoZW1lSWNvbkZpbGVOYW1lKG5hbWUsIHNpemUpKTsKK30KKworR2RrUGl4YnVmKiBC
aXRtYXBJbWFnZTo6Z2V0R2RrUGl4YnVmKCkKK3sKKyAgICBOYXRpdmVJbWFnZUNhaXJvKiBpbWFn
ZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgcmV0dXJuIGltYWdlID8gY2Fp
cm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihpbWFnZS0+c3VyZmFjZSgpKSA6IDA7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3Bw
IGIvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9JbnRQb2ludEd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzQwMjE1ODFlOGVkOTRhOWViZWMxZGVlYmM5NWJkMDEzMjU2NzM2ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UG9pbnRHdGsuY3BwCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisKKyNp
bmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6Oklu
dFBvaW50KGNvbnN0IEdka1BvaW50JiBwKQorICAgIDogbV94KHAueCkKKyAgICAsIG1feShwLnkp
Cit7Cit9CisKK0ludFBvaW50OjpvcGVyYXRvciBHZGtQb2ludCgpIGNvbnN0Cit7CisgICAgR2Rr
UG9pbnQgcCA9IHsgeCgpLCB5KCkgfTsKKyAgICByZXR1cm4gcDsKK30KKworfQorCisvLyB2aW06
IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9J
bnRSZWN0R3RrLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0ay5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWYzMTI4MTlhZmNhMTFhZDc3N2QzNDJjN2EzOTQwNjQ3OWYyMzU4ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvZ3JhcGhpY3MvSW50UmVjdEd0
ay5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBHZGtSZWN0YW5n
bGUmIHIpCisgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHIueCwgci55KSkKKyAgICAsIG1fc2l6
ZShyLndpZHRoLCByLmhlaWdodCkKK3sKK30KKworSW50UmVjdDo6b3BlcmF0b3IgR2RrUmVjdGFu
Z2xlKCkgY29uc3QKK3sKKyAgICBHZGtSZWN0YW5nbGUgciA9IHsgeCgpLCB5KCksIHdpZHRoKCks
IGhlaWdodCgpIH07CisgICAgcmV0dXJuIHI7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM0MjNmYTVkZWQyMjZkZWI5N2NlNzMzYjE3ZWRjMTliYjdjZDY5NDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vZ3RrL25ldHdvcmsvQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IElHQUxJQSBTLkwuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tp
bmdTdG9yZS5oIgorCisjZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEKKyNkZWZpbmUgU0VD
UkVUX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSAxCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaCIKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1s
aWIuaD4KKyNpbmNsdWRlIDxsaWJzZWNyZXQvc2VjcmV0Lmg+CisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcmVkZW50aWFsQmFja2lu
Z1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKENyZWRlbnRpYWxCYWNraW5nU3RvcmUsIGJhY2tpbmdTdG9yZSwgKCkpOworICAgIHJldHVy
biBiYWNraW5nU3RvcmU7Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdIYXNoVGFibGU+IGNyZWF0ZUF0
dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IENyZWRlbnRpYWwo
KSkKK3sKKyAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShjaGFsbGVuZ2Uu
c291cE1lc3NhZ2UoKSk7CisgICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRv
cHRHUmVmKHNlY3JldF9hdHRyaWJ1dGVzX2J1aWxkKAorICAgICAgICBTRUNSRVRfU0NIRU1BX0NP
TVBBVF9ORVRXT1JLLAorICAgICAgICAiZG9tYWluIiwgc291cF9hdXRoX2dldF9yZWFsbShjaGFs
bGVuZ2Uuc291cEF1dGgoKSksCisgICAgICAgICJzZXJ2ZXIiLCB1cmktPmhvc3QsCisgICAgICAg
ICJwcm90b2NvbCIsIHVyaS0+c2NoZW1lLAorICAgICAgICAiYXV0aHR5cGUiLCBzb3VwX2F1dGhf
Z2V0X3NjaGVtZV9uYW1lKGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKKyAgICAgICAgInBvcnQiLCB1
cmktPnBvcnQsCisgICAgICAgIE5VTEwpKTsKKyAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOworCisgICAgZ19oYXNoX3RhYmxlX2luc2VydChh
dHRyaWJ1dGVzLmdldCgpLCBnX3N0cmR1cCgidXNlciIpLCBnX3N0cmR1cChjcmVkZW50aWFsLnVz
ZXIoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Cit9CisKK3N0cnVj
dCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSB7CisgICAgQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxi
YWNrOworICAgIHZvaWQqIGRhdGE7Cit9OworCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsRm9yQ2hh
bGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrKFNlY3JldFNlcnZpY2UqIHNlcnZpY2UsIEdBc3luY1Jl
c3VsdCogYXN5bmNSZXN1bHQsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJh
Y2tEYXRhKiBjYWxsYmFja0RhdGEpCit7CisgICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3Jl
ZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrID0gY2FsbGJhY2tEYXRhLT5jYWxs
YmFjazsKKyAgICB2b2lkKiBkYXRhID0gY2FsbGJhY2tEYXRhLT5kYXRhOworICAgIGRlbGV0ZSBj
YWxsYmFja0RhdGE7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR093blB0cjxH
TGlzdD4gZWxlbWVudHMoc2VjcmV0X3NlcnZpY2Vfc2VhcmNoX2ZpbmlzaChzZXJ2aWNlLCBhc3lu
Y1Jlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yIHx8ICFlbGVtZW50cyB8
fCAhZWxlbWVudHMtPmRhdGEpIHsKKyAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRh
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8U2VjcmV0SXRlbT4gc2Vj
cmV0SXRlbSA9IGFkb3B0R1JlZihzdGF0aWNfY2FzdDxTZWNyZXRJdGVtKj4oZWxlbWVudHMtPmRh
dGEpKTsKKyAgICBHUmVmUHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoc2Vj
cmV0X2l0ZW1fZ2V0X2F0dHJpYnV0ZXMoc2VjcmV0SXRlbS5nZXQoKSkpOworICAgIFN0cmluZyB1
c2VyID0gU3RyaW5nOjpmcm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3Rh
YmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAidXNlciIpKSk7CisgICAgaWYgKHVzZXIuaXNF
bXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIEdSZWZQdHI8U2VjcmV0
VmFsdWU+IHNlY3JldFZhbHVlID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9zZWNyZXQoc2Vj
cmV0SXRlbS5nZXQoKSkpOworICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRGF0YSA9IHNlY3JldF92
YWx1ZV9nZXQoc2VjcmV0VmFsdWUuZ2V0KCksICZsZW5ndGgpOworICAgIFN0cmluZyBwYXNzd29y
ZCA9IFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmREYXRhLCBsZW5ndGgpOworCisgICAgY2FsbGJh
Y2soQ3JlZGVudGlhbCh1c2VyLCBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFu
ZW50KSwgZGF0YSk7Cit9CisKK3ZvaWQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Y3JlZGVudGlh
bEZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBD
cmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGRhdGEpCit7Cisg
ICAgLy8gVGhlIGRlZmF1bHQgZmxhZyBvbmx5IHJldHVybnMgdGhlIG1vc3QgcmVjZW50IGl0ZW0s
IG5vdCBhbGwgb2YgdGhlbS4KKyAgICBTZWNyZXRTZWFyY2hGbGFncyBzZWFyY2hGbGFncyA9IHN0
YXRpY19jYXN0PFNlY3JldFNlYXJjaEZsYWdzPihTRUNSRVRfU0VBUkNIX1VOTE9DSyB8IFNFQ1JF
VF9TRUFSQ0hfTE9BRF9TRUNSRVRTKTsKKyAgICBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNS
ZWFkeUNhbGxiYWNrRGF0YSogY2FsbGJhY2tEYXRhID0gbmV3IENyZWRlbnRpYWxGb3JDaGFsbGVu
Z2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhOworICAgIGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2sgPSBj
YWxsYmFjazsKKyAgICBjYWxsYmFja0RhdGEtPmRhdGEgPSBkYXRhOworCisgICAgc2VjcmV0X3Nl
cnZpY2Vfc2VhcmNoKAorICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNyZXRTZXJ2aWNlLgor
ICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAorICAgICAgICBjcmVhdGVBdHRy
aWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSkuZ2V0KCksCisgICAgICAgIHNl
YXJjaEZsYWdzLAorICAgICAgICAwLCAvLyBjYW5jZWxsYWJsZQorICAgICAgICByZWludGVycHJl
dF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1Jl
YWR5Q2FsbGJhY2spLAorICAgICAgICBjYWxsYmFja0RhdGEpOworfQorCit2b2lkIENyZWRlbnRp
YWxCYWNraW5nU3RvcmU6OnN0b3JlQ3JlZGVudGlhbHNGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlh
bCkKK3sKKyAgICBDU3RyaW5nIHV0ZjhQYXNzd29yZCA9IGNyZWRlbnRpYWwucGFzc3dvcmQoKS51
dGY4KCk7CisgICAgR1JlZlB0cjxTZWNyZXRWYWx1ZT4gbmV3U2VjcmV0VmFsdWUgPSBhZG9wdEdS
ZWYoc2VjcmV0X3ZhbHVlX25ldyh1dGY4UGFzc3dvcmQuZGF0YSgpLCB1dGY4UGFzc3dvcmQubGVu
Z3RoKCksICJ0ZXh0L3BsYWluIikpOworCisgICAgc2VjcmV0X3NlcnZpY2Vfc3RvcmUoCisgICAg
ICAgIDAsIC8vIFRoZSBkZWZhdWx0IFNlY3JldFNlcnZpY2UuCisgICAgICAgIFNFQ1JFVF9TQ0hF
TUFfQ09NUEFUX05FVFdPUkssCisgICAgICAgIGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21D
aGFsbGVuZ2UoY2hhbGxlbmdlLCBjcmVkZW50aWFsKS5nZXQoKSwKKyAgICAgICAgU0VDUkVUX0NP
TExFQ1RJT05fREVGQVVMVCwKKyAgICAgICAgXygiV2ViS2l0R1RLKyBwYXNzd29yZCIpLAorICAg
ICAgICBuZXdTZWNyZXRWYWx1ZS5nZXQoKSwKKyAgICAgICAgMCwgLy8gY2FuY2VsbGFibGUKKyAg
ICAgICAgMCwgLy8gY2FsbGJhY2sKKyAgICAgICAgMCk7IC8vIGRhdGEKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2d0ay9uZXR3b3JrL0Ny
ZWRlbnRpYWxCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsvbmV0d29yay9DcmVk
ZW50aWFsQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBkYTlhMTU3ZmJjMTk2ZTYyODcwNDIy
YWNlOWVmZTg5NzQ4ZWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9ndGsv
bmV0d29yay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgSUdBTElBIFMuTC4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZV9oCisjZGVmaW5lIENyZWRlbnRpYWxCYWNraW5nU3RvcmVfaAorCisjaW5jbHVkZSAiQ3Jl
ZGVudGlhbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOworCitjbGFzcyBDcmVkZW50aWFsQmFja2luZ1N0b3JlIHsKK1dURl9NQUtFX05P
TkNPUFlBQkxFKENyZWRlbnRpYWxCYWNraW5nU3RvcmUpOworcHVibGljOgorICAgIGZyaWVuZCBD
cmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVkZW50aWFsQmFja2luZ1N0b3JlKCk7CisgICAgdmly
dHVhbCB+Q3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpIHsgfQorCisgICAgdHlwZWRlZiB2b2lkICgq
Q3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrKShjb25zdCBDcmVkZW50aWFsJiwgdm9pZCog
ZGF0YSk7CisKKyAgICB2b2lkIGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2ssIHZvaWQqIGRh
dGEpOworICAgIHZvaWQgc3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKK3ByaXZhdGU6CisgICAgQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZSgpIHsgfQorfTsKKworQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYg
Y3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBDcmVkZW50aWFsQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9ndGsvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9ndGsvdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zNWU1YTA1ZmE0OTE5NWZiMzBiZjY5ZGVkNTYyZDU0M2I4YjYxMDE4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2d0ay90ZXh0L1RleHRCcmVha0l0ZXJhdG9y
SW50ZXJuYWxJQ1VHdGsuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjb25zdCBjaGFyKiBjdXJyZW50U2VhcmNoTG9jYWxlSUQoKQoreworICAgIC8vIEZJ
WE1FOiBTaG91bGQgdXNlIHN5c3RlbSBsb2NhbGUuCisgICAgcmV0dXJuICIiOworfQorCitjb25z
dCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKQoreworICAgIC8vIEZJWE1FOiBTaG91
bGQgdXNlIHN5c3RlbSBsb2NhbGUuCisgICAgcmV0dXJuICJlbl91cyI7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggNDZkYjNmNjliMGRlOGIzY2EzZWJhZGFkYTE5YjQyZmY5MjRkM2Jh
OS4uMzlhYTQ0YzcwOTFjMGY0NjI1Y2E5ODcwNDg0MWFiZmQwMDc2M2E3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KQEAgLTc5LDcgKzc5LDYgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIFwKIAkt
SSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrIFwKIAktSSQoc3JjZGlyKS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3RyYW5zY29kZXIg
XApAQCAtMTIzLDggKzEyMiw2IEBAIHBsYXRmb3JtX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZyBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsIFwKIAktSSQoc3JjZGly
KS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIgXAotCS1JJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCi0JLUkkKHNyY2Rpcikv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZW5jaGFudAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0
ZDI2ZTA4NDk2MjdhMjQzMTg2NGQ1YjU1MWNlN2I3ZDY4YjY4NzE0Li45MWY5ODYyZWIzMzljMTU0
MzBjNzJiMmI5YTI3YWQzMGE1Y2ZhMGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
QEAgLTU3MzAsMTcgKzU3MzAsNiBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaW5kUnVsZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dPRkZGaWxlRm9ybWF0LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9FcnJvcnNHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3Jz
R3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3RrLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0xvZ2dpbmdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTUlN
RVR5cGVSZWdpc3RyeUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFy
ZWRCdWZmZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50
R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9LaWxsUmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LaWxsUmluZ05v
bmUuY3BwIFwKQEAgLTU4OTcsOCArNTg4Niw2IEBAIHBsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50
aWFsQmFja2luZ1N0b3JlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9n
dGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBc
CkBAIC02MDAxLDcgKzU5ODgsNiBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TeXN0ZW1UaW1lLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oIFwKQEAgLTYxMTgsNyArNjEwNCw2IEBAIHBsYXRm
b3JtZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0ZyYW1lU2Vs
ZWN0aW9uR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3RvcmUuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJH
ZW9jbHVlLmNwcCBcCkBAIC02MTQwLDkxICs2MTI1LDEwIEBAIHBsYXRmb3JtZ3RrX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9y
bVZpZGVvV2luZG93R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0
aWVzLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9DbGlwYm9hcmRHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRp
ZXNHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0
aWVzR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3Vs
dHMuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Rh
dGFPYmplY3RHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3Rr
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRXZlbnRMb29wR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVT
eXN0ZW1HdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3Vu
dGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HT3duUHRyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0dPd25QdHJHdGsuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtQb3B1cE1lbnUuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a1ZlcnNpb25pbmcuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25p
bmcuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azIuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2hhcmVkVGltZXJHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291bmRH
dGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJl
YW1lci5oCiAKIGlmIFRBUkdFVF9YMTEKIHBsYXRmb3JtZ3RrX3NvdXJjZXMgKz0gXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYyBcCiAJU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuY3BwIFwKQEAgLTYyMzMsOSArNjEzNyw3IEBAIHBsYXRmb3JtZ3RrX3Nv
dXJjZXMgKz0gXAogaWYgVVNFX09QRU5HTAogcGxhdGZvcm1ndGtfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmggXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5o
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKIGVu
ZGlmICMgRU5EIFVTRV9PUEVOR0wKIGlmIFVTRV9FR0wKIHBsYXRmb3JtZ3RrX3NvdXJjZXMgKz0g
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVz
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYzc4N2Y1MDVhY2ZkMzBiMmVmNmE3
NjM3YzBiMDRhOThhMDNjNmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3RrL0F1ZGlvQnVzR3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLSNpbmNsdWRlICJBdWRpb0J1
cy5oIgotCi0jaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Y29uc3QgY2hhciogbmFtZSwgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBHT3duUHRyPGdjaGFy
PiBmaWxlbmFtZShnX3N0cmR1cF9wcmludGYoIiVzLndhdiIsIG5hbWUpKTsKLSAgICBjb25zdCBj
aGFyKiBlbnZpcm9ubWVudFBhdGggPSBnZXRlbnYoIkFVRElPX1JFU09VUkNFU19QQVRIIik7Ci0g
ICAgR093blB0cjxnY2hhcj4gYWJzb2x1dGVGaWxlbmFtZTsKLSAgICBpZiAoZW52aXJvbm1lbnRQ
YXRoKQotICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lLnNldChnX2J1aWxkX2ZpbGVuYW1lKGVudmly
b25tZW50UGF0aCwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsKLSAgICBlbHNlCi0gICAgICAgIGFi
c29sdXRlRmlsZW5hbWUuc2V0KGdfYnVpbGRfZmlsZW5hbWUoc2hhcmVkUmVzb3VyY2VzUGF0aCgp
LmRhdGEoKSwgInJlc291cmNlcyIsICJhdWRpbyIsIGZpbGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoYWJzb2x1dGVGaWxlbmFtZS5nZXQoKSwg
ZmFsc2UsIHNhbXBsZVJhdGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhm
NTZiYTZmYjRlMGI2NWE5OWMyNzNkM2I0NzBiZmRiNmIzNWI5YWYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1Db2xvcjo6Q29sb3IoY29uc3QgR2RrQ29sb3ImIGMpCi0gICAgOiBtX2NvbG9yKG1ha2VS
R0IoYy5yZWQgPj4gOCwgYy5ncmVlbiA+PiA4LCBjLmJsdWUgPj4gOCkpCi0gICAgLCBtX3ZhbGlk
KHRydWUpCi17Ci19Ci0KLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLUNvbG9yOjpDb2xvcihj
b25zdCBHZGtSR0JBJiBjKQotICAgIDogbV9jb2xvcihtYWtlUkdCQShzdGF0aWNfY2FzdDxpbnQ+
KGMucmVkICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmdyZWVuICogMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihj
LmJsdWUgKiAyNTUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGMu
YWxwaGEgKiAyNTUpKSkKLSAgICAsIG1fdmFsaWQodHJ1ZSkKLXsKLX0KLQotQ29sb3I6Om9wZXJh
dG9yIEdka1JHQkEoKSBjb25zdAotewotICAgIGRvdWJsZSByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YTsKLSAgICBnZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBHZGtSR0JBIHJn
YmEgPSB7IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIH07Ci0gICAgcmV0dXJuIHJnYmE7Ci19Ci0j
ZW5kaWYKLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1bGxzY3JlZW5WaWRl
b0NvbnRyb2xsZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ3ZjJm
NWRmMzE0ZmYzYTQ2Y2U0MmM1Yjg0NzQ5NDkzZjBiYWJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQ1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotCi0jaW5jbHVkZSAiRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oIgotCi0jaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRl
ICJHU3RyZWFtZXJHV29ybGQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVk
ZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMu
aD4KLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgSFVEX0FVVE9fSElERV9JTlRF
UlZBTCAzMDAwIC8vIDMgc2Vjb25kcwotI2RlZmluZSBQUk9HUkVTU19CQVJfVVBEQVRFX0lOVEVS
VkFMIDE1MCAvLyAxNTBtcwotCi0vLyBVc2Ugc3ltYm9saWMgaWNvbnMgb25seSBpZiB3ZSBidWls
ZCB3aXRoIEdUSystMyBzdXBwb3J0LiBUaGV5IGNvdWxkCi0vLyBiZSBlbmFibGVkIGZvciB0aGUg
R1RLKzIgYnVpbGQgYnV0IHdlJ2QgbmVlZCB0byBidW1wIHRoZSByZXF1aXJlZAotLy8gdmVyc2lv
biB0byBhdCBsZWFzdCAyLjIyLgotI2lmIEdUS19NQUpPUl9WRVJTSU9OID4gMgotI2RlZmluZSBJ
Q09OX05BTUVfU1VGRklYICItc3ltYm9saWMiCi0jZWxzZQotI2RlZmluZSBJQ09OX05BTUVfU1VG
RklYCi0jZW5kaWYKLQotI2RlZmluZSBQTEFZX0lDT05fTkFNRSAibWVkaWEtcGxheWJhY2stc3Rh
cnQiSUNPTl9OQU1FX1NVRkZJWAotI2RlZmluZSBQQVVTRV9JQ09OX05BTUUgIm1lZGlhLXBsYXli
YWNrLXBhdXNlIklDT05fTkFNRV9TVUZGSVgKLSNkZWZpbmUgRVhJVF9GVUxMU0NSRUVOX0lDT05f
TkFNRSAidmlldy1yZXN0b3JlIklDT05fTkFNRV9TVUZGSVgKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgZ2Jvb2xlYW4gaGlkZUh1ZENhbGxiYWNrKEZ1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+aGlkZUh1ZCgpOwotICAg
IHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIG9uRnVsbHNjcmVlbkd0a01vdGlv
bk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudE1vdGlvbiogZXZlbnQsICBG
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xs
ZXItPnNob3dIdWQodHJ1ZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIG9u
RnVsbHNjcmVlbkd0a0FjdGl2ZU5vdGlmaWNhdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR1BhcmFt
U3BlYyogcHJvcGVydHksIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIp
Ci17Ci0gICAgaWYgKCFndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHdpZGdldCkpKQot
ICAgICAgICBjb250cm9sbGVyLT5oaWRlSHVkKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1
bGxzY3JlZW5HdGtDb25maWd1cmVFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRDb25m
aWd1cmUqIGV2ZW50LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQot
ewotICAgIGNvbnRyb2xsZXItPmd0a0NvbmZpZ3VyZShldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7
Ci19Ci0KLXN0YXRpYyB2b2lkIG9uRnVsbHNjcmVlbkd0a0Rlc3Ryb3koR3RrV2lkZ2V0KiB3aWRn
ZXQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29u
dHJvbGxlci0+ZXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotc3RhdGljIHZvaWQgdG9nZ2xlUGxheVBh
dXNlQWN0aXZhdGVkKEd0a0FjdGlvbiogYWN0aW9uLCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
R3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRyb2xsZXItPnRvZ2dsZVBsYXkoKTsKLX0KLQot
c3RhdGljIHZvaWQgZXhpdEZ1bGxzY3JlZW5BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIEZ1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxl
ci0+ZXhpdE9uVXNlclJlcXVlc3QoKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHByb2dyZXNzQmFy
VXBkYXRlQ2FsbGJhY2soRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikK
LXsKLSAgICByZXR1cm4gY29udHJvbGxlci0+dXBkYXRlSHVkUHJvZ3Jlc3NCYXIoKTsKLX0KLQot
c3RhdGljIGdib29sZWFuIHRpbWVTY2FsZUJ1dHRvblByZXNzZWQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0V2ZW50QnV0dG9uKiBldmVudCwgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayogY29u
dHJvbGxlcikKLXsKLSAgICBpZiAoZXZlbnQtPnR5cGUgIT0gR0RLX0JVVFRPTl9QUkVTUykKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgY29udHJvbGxlci0+YmVnaW5TZWVrKCk7Ci0gICAg
cmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gdGltZVNjYWxlQnV0dG9uUmVsZWFz
ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCwgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0ayogY29udHJvbGxlcikKLXsKLSAgICBjb250cm9sbGVyLT5lbmRTZWVr
KCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0aW1lU2NhbGVWYWx1ZUNo
YW5nZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsqIGNv
bnRyb2xsZXIpCi17Ci0gICAgY29udHJvbGxlci0+ZG9TZWVrKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHZvbHVtZVZhbHVlQ2hhbmdlZChHdGtTY2FsZUJ1dHRvbiAqYnV0dG9uLCBnZG91YmxlIHZhbHVl
LCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKiBjb250cm9sbGVyKQotewotICAgIGNvbnRy
b2xsZXItPnNldFZvbHVtZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpKTsKLX0KLQotCi1GdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrKE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLSAgICA6IEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXJHU3RyZWFtZXIocGxheWVyKQotICAgICwgbV9odWRUaW1lb3V0SWQoMCkK
LSAgICAsIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCgwKQotICAgICwgbV9zZWVrTG9jayhmYWxzZSkK
LSAgICAsIG1fd2luZG93KDApCi0gICAgLCBtX2h1ZFdpbmRvdygwKQotICAgICwgbV92b2x1bWVC
dXR0b24oMCkKLSAgICAsIG1fa2V5UHJlc3NTaWduYWxJZCgwKQotICAgICwgbV9kZXN0cm95U2ln
bmFsSWQoMCkKLSAgICAsIG1faXNBY3RpdmVTaWduYWxJZCgwKQotICAgICwgbV9tb3Rpb25Ob3Rp
ZnlTaWduYWxJZCgwKQotICAgICwgbV9jb25maWd1cmVFdmVudFNpZ25hbElkKDApCi0gICAgLCBt
X2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkKDApCi0gICAgLCBtX3RpbWVTY2FsZUJ1dHRvblByZXNz
ZWRTaWduYWxJZCgwKQotICAgICwgbV90aW1lU2NhbGVCdXR0b25SZWxlYXNlZFNpZ25hbElkKDAp
Ci0gICAgLCBtX3BsYXlBY3Rpb25BY3RpdmF0ZVNpZ25hbElkKDApCi0gICAgLCBtX2V4aXRGdWxs
Y3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkKDApCi17Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckd0azo6Z3RrQ29uZmlndXJlKEdka0V2ZW50Q29uZmlndXJlKiBldmVudCkK
LXsKLSAgICB1cGRhdGVIdWRQb3NpdGlvbigpOwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGs6OnNob3dIdWQoYm9vbCBhdXRvSGlkZSkKLXsKLSAgICBpZiAoIW1faHVkV2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9odWRUaW1lb3V0SWQpIHsKLSAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElkKTsKLSAgICAgICAgbV9odWRUaW1lb3V0
SWQgPSAwOwotICAgIH0KLQotICAgIC8vIFNob3cgdGhlIGN1cnNvci4KLSAgICBHZGtXaW5kb3cq
IHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7Ci0gICAgZ2RrX3dpbmRv
d19zZXRfY3Vyc29yKHdpbmRvdywgMCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHByb2dyZXNzIGJh
ciBpbW1lZGlhdGVseSBiZWZvcmUgc2hvd2luZyB0aGUgd2luZG93LgotICAgIHVwZGF0ZUh1ZFBy
b2dyZXNzQmFyKCk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2h1ZFdpbmRvdyk7Ci0gICAg
dXBkYXRlSHVkUG9zaXRpb24oKTsKLQotICAgIC8vIFN0YXJ0IHBlcmlvZGljIHVwZGF0ZXMgb2Yg
dGhlIHByb2dyZXNzIGJhci4KLSAgICBpZiAoIW1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCkKLSAgICAg
ICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gZ190aW1lb3V0X2FkZChQUk9HUkVTU19CQVJfVVBE
QVRFX0lOVEVSVkFMLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihwcm9ncmVzc0JhclVw
ZGF0ZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICAvLyBIaWRlIHRoZSBodWQgaW4gZmV3IHNlY29u
ZHMsIGlmIHJlcXVlc3RlZC4KLSAgICBpZiAoYXV0b0hpZGUpCi0gICAgICAgIG1faHVkVGltZW91
dElkID0gZ190aW1lb3V0X2FkZChIVURfQVVUT19ISURFX0lOVEVSVkFMLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihoaWRlSHVkQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQotdm9pZCBGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyR3RrOjpoaWRlSHVkKCkKLXsKLSAgICBpZiAobV9odWRUaW1l
b3V0SWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faHVkVGltZW91dElkKTsKLSAgICAg
ICAgbV9odWRUaW1lb3V0SWQgPSAwOwotICAgIH0KLQotICAgIGlmICghbV9odWRXaW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEtlZXAgdGhlIGh1ZCB2aXNpYmxlIGlmIGEgc2VlayBp
cyBpbiBwcm9ncmVzcyBvciBpZiB0aGUgdm9sdW1lCi0gICAgLy8gcG9wdXAgaXMgdmlzaWJsZS4K
LSAgICBHdGtXaWRnZXQqIHZvbHVtZVBvcHVwID0gZ3RrX3NjYWxlX2J1dHRvbl9nZXRfcG9wdXAo
R1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbikpOwotICAgIGlmIChtX3NlZWtMb2NrIHx8
IGd0a193aWRnZXRfZ2V0X3Zpc2libGUodm9sdW1lUG9wdXApKSB7Ci0gICAgICAgIHNob3dIdWQo
dHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhtX3dpbmRvdyk7Ci0gICAgR2RrQ3Vyc29yKiBjdXJzb3Ig
PSBibGFua0N1cnNvcigpOwotICAgIGdka193aW5kb3dfc2V0X2N1cnNvcih3aW5kb3csIGN1cnNv
cik7Ci0KLSAgICBndGtfd2lkZ2V0X2hpZGUobV9odWRXaW5kb3cpOwotCi0gICAgaWYgKG1fcHJv
Z3Jlc3NCYXJVcGRhdGVJZCkgewotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcm9ncmVzc0Jh
clVwZGF0ZUlkKTsKLSAgICAgICAgbV9wcm9ncmVzc0JhclVwZGF0ZUlkID0gMDsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiBvbkZ1bGxzY3JlZW5HdGtLZXlQcmVzc0V2ZW50KEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQsIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJH
dGsqIGNvbnRyb2xsZXIpCi17Ci0gICAgc3dpdGNoIChldmVudC0+a2V5dmFsKSB7Ci0gICAgY2Fz
ZSBHREtfRXNjYXBlOgotICAgICAgICBjb250cm9sbGVyLT5leGl0T25Vc2VyUmVxdWVzdCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdES19zcGFjZToKLSAgICBjYXNlIEdES19SZXR1cm46
Ci0gICAgICAgIGNvbnRyb2xsZXItPnRvZ2dsZVBsYXkoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHREtfVXA6Ci0gICAgICAgIGNvbnRyb2xsZXItPmluY3JlYXNlVm9sdW1lKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR0RLX0Rvd246Ci0gICAgICAgIGNvbnRyb2xsZXItPmRlY3Jl
YXNlVm9sdW1lKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQotCi12b2lkIEZ1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXJHdGs6OmluaXRpYWxpemVXaW5kb3coKQotewotICAgIG1fd2luZG93ID0gcmVpbnRl
cnByZXRfY2FzdDxHdGtXaWRnZXQqPihtX2dzdHJlYW1lckdXb3JsZC0+cGxhdGZvcm1WaWRlb1dp
bmRvdygpLT53aW5kb3coKSk7Ci0KLSAgICBpZiAoIW1faHVkV2luZG93KQotICAgICAgICBjcmVh
dGVIdWQoKTsKLQotICAgIC8vIEVuc3VyZSBibGFjayBiYWNrZ3JvdW5kLgotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgR2RrQ29sb3IgY29sb3IgPSB7IDEsIDAsIDAsIDAgfTsKLSAgICBn
dGtfd2lkZ2V0X21vZGlmeV9iZyhtX3dpbmRvdywgR1RLX1NUQVRFX05PUk1BTCwgJmNvbG9yKTsK
LSNlbHNlCi0gICAgR2RrUkdCQSBjb2xvciA9IHsgMCwgMCwgMCwgMX07Ci0gICAgZ3RrX3dpZGdl
dF9vdmVycmlkZV9iYWNrZ3JvdW5kX2NvbG9yKG1fd2luZG93LCBHVEtfU1RBVEVfRkxBR19OT1JN
QUwsICZjb2xvcik7Ci0jZW5kaWYKLSAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQo
bV93aW5kb3csIEZBTFNFKTsKLQotICAgIG1fa2V5UHJlc3NTaWduYWxJZCA9IGdfc2lnbmFsX2Nv
bm5lY3QobV93aW5kb3csICJrZXktcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKG9uRnVsbHNjcmVl
bkd0a0tleVByZXNzRXZlbnQpLCB0aGlzKTsKLSAgICBtX2Rlc3Ryb3lTaWduYWxJZCA9IGdfc2ln
bmFsX2Nvbm5lY3QobV93aW5kb3csICJkZXN0cm95IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3JlZW5H
dGtEZXN0cm95KSwgdGhpcyk7Ci0gICAgbV9pc0FjdGl2ZVNpZ25hbElkID0gZ19zaWduYWxfY29u
bmVjdChtX3dpbmRvdywgIm5vdGlmeTo6aXMtYWN0aXZlIiwgR19DQUxMQkFDSyhvbkZ1bGxzY3Jl
ZW5HdGtBY3RpdmVOb3RpZmljYXRpb24pLCB0aGlzKTsKLQotICAgIGd0a193aWRnZXRfc2hvd19h
bGwobV93aW5kb3cpOwotCi0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3cobV93aW5kb3cpOwotICAgIEdSZWZQdHI8R2RrQ3Vyc29yPiBjdXJzb3IoYWRvcHRHUmVm
KGJsYW5rQ3Vyc29yKCkpKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCBjdXJz
b3IuZ2V0KCkpOwotCi0gICAgbV9tb3Rpb25Ob3RpZnlTaWduYWxJZCA9IGdfc2lnbmFsX2Nvbm5l
Y3QobV93aW5kb3csICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFDSyhvbkZ1bGxzY3Jl
ZW5HdGtNb3Rpb25Ob3RpZnlFdmVudCksIHRoaXMpOwotICAgIG1fY29uZmlndXJlRXZlbnRTaWdu
YWxJZCA9IGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJjb25maWd1cmUtZXZlbnQiLCBHX0NB
TExCQUNLKG9uRnVsbHNjcmVlbkd0a0NvbmZpZ3VyZUV2ZW50KSwgdGhpcyk7Ci0KLSAgICBndGtf
d2luZG93X2Z1bGxzY3JlZW4oR1RLX1dJTkRPVyhtX3dpbmRvdykpOwotICAgIHNob3dIdWQodHJ1
ZSk7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6dXBkYXRlSHVkUG9z
aXRpb24oKQotewotICAgIGlmICghbV9odWRXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEdldCB0aGUgc2NyZWVuIHJlY3RhbmdsZS4KLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0
a193aW5kb3dfZ2V0X3NjcmVlbihHVEtfV0lORE9XKG1fd2luZG93KSk7Ci0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aW5kb3cpOwotICAgIEdka1JlY3Rh
bmdsZSBmdWxsc2NyZWVuUmVjdGFuZ2xlOwotICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2Vv
bWV0cnkoc2NyZWVuLCBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIHdp
bmRvdyksICZmdWxsc2NyZWVuUmVjdGFuZ2xlKTsKLQotICAgIC8vIEdldCB0aGUgcG9wdXAgd2lu
ZG93IHNpemUuCi0gICAgaW50IGh1ZFdpZHRoLCBodWRIZWlnaHQ7Ci0gICAgZ3RrX3dpbmRvd19n
ZXRfc2l6ZShHVEtfV0lORE9XKG1faHVkV2luZG93KSwgJmh1ZFdpZHRoLCAmaHVkSGVpZ2h0KTsK
LQotICAgIC8vIFJlc2l6ZSB0aGUgaHVkIHRvIHRoZSBmdWxsIHdpZHRoIG9mIHRoZSBzY3JlZW4u
Ci0gICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksIGZ1bGxzY3Jl
ZW5SZWN0YW5nbGUud2lkdGgsIGh1ZEhlaWdodCk7Ci0KLSAgICAvLyBNb3ZlIHRoZSBodWQgdG8g
dGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLgotICAgIGd0a193aW5kb3dfbW92ZShHVEtfV0lORE9X
KG1faHVkV2luZG93KSwgZnVsbHNjcmVlblJlY3RhbmdsZS54LCBmdWxsc2NyZWVuUmVjdGFuZ2xl
LmhlaWdodCArIGZ1bGxzY3JlZW5SZWN0YW5nbGUueSAtIGh1ZEhlaWdodCk7Ci19Ci0KLXZvaWQg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZGVzdHJveVdpbmRvdygpCi17Ci0gICAgaWYg
KCFtX2h1ZFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0KG1fd2luZG93LCBtX2tleVByZXNzU2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hh
bmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9kZXN0cm95U2lnbmFsSWQpOwotICAgIGdfc2ln
bmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9pc0FjdGl2ZVNpZ25hbElkKTsKLSAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93aW5kb3csIG1fbW90aW9uTm90aWZ5U2ln
bmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dpbmRvdywgbV9jb25m
aWd1cmVFdmVudFNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9o
dWRXaW5kb3csIG1faHVkTW90aW9uTm90aWZ5U2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRs
ZXJfZGlzY29ubmVjdChtX3RpbWVIU2NhbGUsIG1fdGltZVNjYWxlQnV0dG9uUHJlc3NlZFNpZ25h
bElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV90aW1lSFNjYWxlLCBtX3Rp
bWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdChtX3RpbWVIU2NhbGUsIG1faHNjYWxlVXBkYXRlSWQpOwotICAgIGdfc2lnbmFsX2hh
bmRsZXJfZGlzY29ubmVjdChtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7Ci0gICAg
Z19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fcGxheVBhdXNlQWN0aW9uLCBtX3BsYXlBY3Rp
b25BY3RpdmF0ZVNpZ25hbElkKTsKLSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV9l
eGl0RnVsbHNjcmVlbkFjdGlvbiwgbV9leGl0RnVsbGNyZWVuQWN0aW9uQWN0aXZhdGVTaWduYWxJ
ZCk7Ci0KLSAgICBpZiAobV9odWRUaW1lb3V0SWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1faHVkVGltZW91dElkKTsKLSAgICAgICAgbV9odWRUaW1lb3V0SWQgPSAwOwotICAgIH0KLQot
ICAgIGlmIChtX3Byb2dyZXNzQmFyVXBkYXRlSWQpIHsKLSAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCk7Ci0gICAgICAgIG1fcHJvZ3Jlc3NCYXJVcGRhdGVJZCA9
IDA7Ci0gICAgfQotCi0gICAgZ3RrX3dpZGdldF9oaWRlKG1fd2luZG93KTsKLQotICAgIGlmICht
X2h1ZFdpbmRvdykKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faHVkV2luZG93KTsKLSAg
ICBtX2h1ZFdpbmRvdyA9IDA7Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0
azo6cGxheVN0YXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fY2xpZW50LT5tZWRpYVBsYXllcklz
UGF1c2VkKCkpCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3BsYXlQYXVzZUFjdGlvbiwgInRvb2x0
aXAiLCBfKCJQbGF5IiksICJpY29uLW5hbWUiLCBQTEFZX0lDT05fTkFNRSwgTlVMTCk7Ci0gICAg
ZWxzZQotICAgICAgICBnX29iamVjdF9zZXQobV9wbGF5UGF1c2VBY3Rpb24sICJ0b29sdGlwIiwg
XygiUGF1c2UiKSwgImljb24tbmFtZSIsIFBBVVNFX0lDT05fTkFNRSwgTlVMTCk7Ci0gICAgc2hv
d0h1ZCghbV9jbGllbnQtPm1lZGlhUGxheWVySXNQYXVzZWQoKSk7Ci19Ci0KLXZvaWQgRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0azo6dm9sdW1lQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX3Zv
bHVtZUJ1dHRvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9ibG9j
ayhtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1bWVVcGRhdGVJZCk7Ci0gICAgZ3RrX3NjYWxlX2J1dHRv
bl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JVVFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT52
b2x1bWUoKSk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl91bmJsb2NrKG1fdm9sdW1lQnV0dG9uLCBt
X3ZvbHVtZVVwZGF0ZUlkKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
OjptdXRlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFtX3ZvbHVtZUJ1dHRvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9ibG9jayhtX3ZvbHVtZUJ1dHRvbiwgbV92b2x1
bWVVcGRhdGVJZCk7Ci0gICAgZ3RrX3NjYWxlX2J1dHRvbl9zZXRfdmFsdWUoR1RLX1NDQUxFX0JV
VFRPTihtX3ZvbHVtZUJ1dHRvbiksIG1fcGxheWVyLT5tdXRlZCgpID8gMCA6IG1fcGxheWVyLT52
b2x1bWUoKSk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl91bmJsb2NrKG1fdm9sdW1lQnV0dG9uLCBt
X3ZvbHVtZVVwZGF0ZUlkKTsKLX0KLQotdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3Rr
OjpiZWdpblNlZWsoKQotewotICAgIG1fc2Vla0xvY2sgPSB0cnVlOwotfQotCi12b2lkIEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXJHdGs6OmRvU2VlaygpCi17Ci0gICAgaWYgKCFtX3NlZWtMb2Nr
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BsYXllci0+c2VlayhndGtfcmFuZ2VfZ2V0X3Zh
bHVlKEdUS19SQU5HRShtX3RpbWVIU2NhbGUpKSptX3BsYXllci0+ZHVyYXRpb24oKSAvIDEwMCk7
Ci19Ci0KLXZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6ZW5kU2VlaygpCi17Ci0g
ICAgbV9zZWVrTG9jayA9IGZhbHNlOwotfQotCi1nYm9vbGVhbiBGdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyR3RrOjp1cGRhdGVIdWRQcm9ncmVzc0JhcigpCi17Ci0gICAgZmxvYXQgbWVkaWFEdXJh
dGlvbihtX3BsYXllci0+ZHVyYXRpb24oKSk7Ci0gICAgZmxvYXQgbWVkaWFQb3NpdGlvbihtX3Bs
YXllci0+Y3VycmVudFRpbWUoKSk7Ci0KLSAgICBpZiAoIW1fc2Vla0xvY2spIHsKLSAgICAgICAg
Z2RvdWJsZSB2YWx1ZSA9IDAuMDsKLQotICAgICAgICBpZiAobWVkaWFQb3NpdGlvbiAmJiBtZWRp
YUR1cmF0aW9uKQotICAgICAgICAgICAgdmFsdWUgPSAobWVkaWFQb3NpdGlvbiAqIDEwMC4wKSAv
IG1lZGlhRHVyYXRpb247Ci0KLSAgICAgICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCA9IGd0
a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0UobV90aW1lSFNjYWxlKSk7Ci0gICAgICAg
IGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGp1c3RtZW50LCB2YWx1ZSk7Ci0gICAgfQotCi0g
ICAgZ3RrX3JhbmdlX3NldF9maWxsX2xldmVsKEdUS19SQU5HRShtX3RpbWVIU2NhbGUpLCAobV9w
bGF5ZXItPm1heFRpbWVMb2FkZWQoKSAvIG1lZGlhRHVyYXRpb24pKiAxMDApOwotCi0gICAgZ2No
YXIqIGxhYmVsID0gZ19zdHJkdXBfcHJpbnRmKCIlcyAvICVzIiwgdGltZVRvU3RyaW5nKG1lZGlh
UG9zaXRpb24pLnV0ZjgoKS5kYXRhKCksIHRpbWVUb1N0cmluZyhtZWRpYUR1cmF0aW9uKS51dGY4
KCkuZGF0YSgpKTsKLSAgICBndGtfbGFiZWxfc2V0X3RleHQoR1RLX0xBQkVMKG1fdGltZUxhYmVs
KSwgbGFiZWwpOwotICAgIGdfZnJlZShsYWJlbCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZv
aWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0azo6Y3JlYXRlSHVkKCkKLXsKLSAgICBtX2h1
ZFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgIGd0a193aW5k
b3dfc2V0X2dyYXZpdHkoR1RLX1dJTkRPVyhtX2h1ZFdpbmRvdyksIEdES19HUkFWSVRZX1NPVVRI
X1dFU1QpOwotICAgIGd0a193aW5kb3dfc2V0X3R5cGVfaGludChHVEtfV0lORE9XKG1faHVkV2lu
ZG93KSwgR0RLX1dJTkRPV19UWVBFX0hJTlRfTk9STUFMKTsKLQotICAgIG1faHVkTW90aW9uTm90
aWZ5U2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1faHVkV2luZG93LCAibW90aW9uLW5vdGlm
eS1ldmVudCIsIEdfQ0FMTEJBQ0sob25GdWxsc2NyZWVuR3RrTW90aW9uTm90aWZ5RXZlbnQpLCB0
aGlzKTsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR3RrV2lkZ2V0KiBoYm94ID0g
Z3RrX2hib3hfbmV3KEZBTFNFLCA0KTsKLSNlbHNlCi0gICAgR3RrV2lkZ2V0KiBoYm94ID0gZ3Rr
X2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIDQpOwotI2VuZGlmCi0gICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2h1ZFdpbmRvdyksIGhib3gpOwotCi0gICAg
bV9wbGF5UGF1c2VBY3Rpb24gPSBndGtfYWN0aW9uX25ldygicGxheSIsIF8oIlBsYXkgLyBQYXVz
ZSIpLCBfKCJQbGF5IG9yIHBhdXNlIHRoZSBtZWRpYSIpLCBQQVVTRV9JQ09OX05BTUUpOwotICAg
IG1fcGxheUFjdGlvbkFjdGl2YXRlU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1fcGxheVBh
dXNlQWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKHRvZ2dsZVBsYXlQYXVzZUFjdGl2YXRl
ZCksIHRoaXMpOwotCi0gICAgR3RrV2lkZ2V0KiBpdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfdG9v
bF9pdGVtKG1fcGxheVBhdXNlQWN0aW9uKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WChoYm94KSwgaXRlbSwgRkFMU0UsIFRSVUUsIDApOwotCi0gICAgR3RrV2lkZ2V0KiBsYWJlbCA9
IGd0a19sYWJlbF9uZXcoXygiVGltZToiKSk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1goaGJveCksIGxhYmVsLCBGQUxTRSwgVFJVRSwgMCk7Ci0KLSAgICBHdGtBZGp1c3RtZW50KiBh
ZGp1c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAx
MDAuMCwgMC4xLCAxLjAsIDEuMCkpOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgbV90
aW1lSFNjYWxlID0gZ3RrX2hzY2FsZV9uZXcoYWRqdXN0bWVudCk7Ci0jZWxzZQotICAgIG1fdGlt
ZUhTY2FsZSA9IGd0a19zY2FsZV9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIGFkanVz
dG1lbnQpOwotI2VuZGlmCi0gICAgZ3RrX3NjYWxlX3NldF9kcmF3X3ZhbHVlKEdUS19TQ0FMRSht
X3RpbWVIU2NhbGUpLCBGQUxTRSk7Ci0gICAgZ3RrX3JhbmdlX3NldF9zaG93X2ZpbGxfbGV2ZWwo
R1RLX1JBTkdFKG1fdGltZUhTY2FsZSksIFRSVUUpOwotICAgIG1fdGltZVNjYWxlQnV0dG9uUHJl
c3NlZFNpZ25hbElkID0gZ19zaWduYWxfY29ubmVjdChtX3RpbWVIU2NhbGUsICJidXR0b24tcHJl
c3MtZXZlbnQiLCBHX0NBTExCQUNLKHRpbWVTY2FsZUJ1dHRvblByZXNzZWQpLCB0aGlzKTsKLSAg
ICBtX3RpbWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQgPSBnX3NpZ25hbF9jb25uZWN0KG1f
dGltZUhTY2FsZSwgImJ1dHRvbi1yZWxlYXNlLWV2ZW50IiwgR19DQUxMQkFDSyh0aW1lU2NhbGVC
dXR0b25SZWxlYXNlZCksIHRoaXMpOwotICAgIG1faHNjYWxlVXBkYXRlSWQgPSBnX3NpZ25hbF9j
b25uZWN0KG1fdGltZUhTY2FsZSwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRpbWVTY2Fs
ZVZhbHVlQ2hhbmdlZCksIHRoaXMpOwotCi0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
aGJveCksIG1fdGltZUhTY2FsZSwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICBtX3RpbWVMYWJlbCA9
IGd0a19sYWJlbF9uZXcoIiIpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gp
LCBtX3RpbWVMYWJlbCwgRkFMU0UsIFRSVUUsIDApOwotCi0gICAgLy8gVm9sdW1lIGJ1dHRvbi4K
LSAgICBtX3ZvbHVtZUJ1dHRvbiA9IGd0a192b2x1bWVfYnV0dG9uX25ldygpOwotICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBtX3ZvbHVtZUJ1dHRvbiwgRkFMU0UsIFRSVUUs
IDApOwotICAgIGd0a19zY2FsZV9idXR0b25fc2V0X3ZhbHVlKEdUS19TQ0FMRV9CVVRUT04obV92
b2x1bWVCdXR0b24pLCBtX3BsYXllci0+dm9sdW1lKCkpOwotICAgIG1fdm9sdW1lVXBkYXRlSWQg
PSBnX3NpZ25hbF9jb25uZWN0KG1fdm9sdW1lQnV0dG9uLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FM
TEJBQ0sodm9sdW1lVmFsdWVDaGFuZ2VkKSwgdGhpcyk7Ci0KLSAgICBtX2V4aXRGdWxsc2NyZWVu
QWN0aW9uID0gZ3RrX2FjdGlvbl9uZXcoImV4aXQiLCBfKCJFeGl0IEZ1bGxzY3JlZW4iKSwgXygi
RXhpdCBmcm9tIGZ1bGxzY3JlZW4gbW9kZSIpLCBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FKTsK
LSAgICBtX2V4aXRGdWxsY3JlZW5BY3Rpb25BY3RpdmF0ZVNpZ25hbElkID0gZ19zaWduYWxfY29u
bmVjdChtX2V4aXRGdWxsc2NyZWVuQWN0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNLKGV4aXRG
dWxsc2NyZWVuQWN0aXZhdGVkKSwgdGhpcyk7Ci0gICAgZ19vYmplY3Rfc2V0KG1fZXhpdEZ1bGxz
Y3JlZW5BY3Rpb24sICJpY29uLW5hbWUiLCBFWElUX0ZVTExTQ1JFRU5fSUNPTl9OQU1FLCBOVUxM
KTsKLSAgICBpdGVtID0gZ3RrX2FjdGlvbl9jcmVhdGVfdG9vbF9pdGVtKG1fZXhpdEZ1bGxzY3Jl
ZW5BY3Rpb24pOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBpdGVtLCBG
QUxTRSwgVFJVRSwgMCk7Ci0KLSAgICBtX3Byb2dyZXNzQmFyVXBkYXRlSWQgPSBnX3RpbWVvdXRf
YWRkKFBST0dSRVNTX0JBUl9VUERBVEVfSU5URVJWQUwsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KHByb2dyZXNzQmFyVXBkYXRlQ2FsbGJhY2spLCB0aGlzKTsKLQotICAgIHBsYXlTdGF0
ZUNoYW5nZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Z1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDU3NzBjNTk4ODY2NDc0YmE5NTQ4NWIzZjQxYjJjNDNiNjkxNDRiYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5oCisrKyAvZGV2L251
bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTMgSWdhbGlhIFMu
TAotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGtfaAotI2Rl
ZmluZSBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrX2gKLQotI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKEdTVFJFQU1FUikgJiYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotCi0jaW5j
bHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJHdGsgOiBwdWJsaWMg
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckdTdHJlYW1lciB7Ci1wdWJsaWM6Ci0gICAgRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlckd0ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7
Ci0KLSAgICB2b2lkIGd0a0NvbmZpZ3VyZShHZGtFdmVudENvbmZpZ3VyZSopOwotCi0gICAgdm9p
ZCBwbGF5U3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIGJlZ2luU2VlaygpOwotICAgIHZvaWQg
ZG9TZWVrKCk7Ci0gICAgdm9pZCBlbmRTZWVrKCk7Ci0KLSAgICB2b2lkIGhpZGVIdWQoKTsKLSAg
ICB2b2lkIHNob3dIdWQoYm9vbCk7Ci0gICAgZ2Jvb2xlYW4gdXBkYXRlSHVkUHJvZ3Jlc3NCYXIo
KTsKLQotICAgIHZvaWQgdm9sdW1lQ2hhbmdlZCgpOwotICAgIHZvaWQgbXV0ZUNoYW5nZWQoKTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemVXaW5kb3coKTsKLSAgICB2b2lkIGRlc3Ry
b3lXaW5kb3coKTsKLQotICAgIHZvaWQgY3JlYXRlSHVkKCk7Ci0gICAgdm9pZCB1cGRhdGVIdWRQ
b3NpdGlvbigpOwotCi0gICAgZ3VpbnQgbV9odWRUaW1lb3V0SWQ7Ci0gICAgZ3VpbnQgbV9wcm9n
cmVzc0JhclVwZGF0ZUlkOwotICAgIGd1aW50IG1fcHJvZ3Jlc3NCYXJGaWxsVXBkYXRlSWQ7Ci0g
ICAgZ3VpbnQgbV9oc2NhbGVVcGRhdGVJZDsKLSAgICBndWludCBtX3ZvbHVtZVVwZGF0ZUlkOwot
ICAgIGJvb2wgbV9zZWVrTG9jazsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93OwotICAgIEd0a1dp
ZGdldCogbV9odWRXaW5kb3c7Ci0gICAgR3RrQWN0aW9uKiBtX3BsYXlQYXVzZUFjdGlvbjsKLSAg
ICBHdGtBY3Rpb24qIG1fZXhpdEZ1bGxzY3JlZW5BY3Rpb247Ci0gICAgR3RrV2lkZ2V0KiBtX3Rp
bWVIU2NhbGU7Ci0gICAgR3RrV2lkZ2V0KiBtX3RpbWVMYWJlbDsKLSAgICBHdGtXaWRnZXQqIG1f
dm9sdW1lQnV0dG9uOwotCi0gICAgdW5zaWduZWQgbG9uZyBtX2tleVByZXNzU2lnbmFsSWQ7Ci0g
ICAgdW5zaWduZWQgbG9uZyBtX2Rlc3Ryb3lTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1f
aXNBY3RpdmVTaWduYWxJZDsKLSAgICB1bnNpZ25lZCBsb25nIG1fbW90aW9uTm90aWZ5U2lnbmFs
SWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2NvbmZpZ3VyZUV2ZW50U2lnbmFsSWQ7Ci0gICAgdW5z
aWduZWQgbG9uZyBtX2h1ZE1vdGlvbk5vdGlmeVNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcg
bV90aW1lU2NhbGVCdXR0b25QcmVzc2VkU2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3Rp
bWVTY2FsZUJ1dHRvblJlbGVhc2VkU2lnbmFsSWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3BsYXlB
Y3Rpb25BY3RpdmF0ZVNpZ25hbElkOwotICAgIHVuc2lnbmVkIGxvbmcgbV9leGl0RnVsbGNyZWVu
QWN0aW9uQWN0aXZhdGVTaWduYWxJZDsKLX07Ci0KLX0KLSNlbmRpZgotCi0jZW5kaWYgLy8gRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlckd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwMThhMzBmMGM0MWUwZTRjZTVkY2MzODRhOTUxOWY1NDcw
NDVkOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHZGtDYWly
b1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2luY2x1ZGUgPGNh
aXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1HZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJm
YWNlVG9HZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIHJldHVybiBn
ZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1
cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1YjNlZGVmYzExMWRiOTQ2ZTMyYWM4MWQwZmMy
YTA1MGNlMDI2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdka0NhaXJvVXRpbGl0aWVzX2gKLSNkZWZp
bmUgR2RrQ2Fpcm9VdGlsaXRpZXNfaAotCi1HZGtQaXhidWYqIGNhaXJvSW1hZ2VTdXJmYWNlVG9H
ZGtQaXhidWYoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKTsKLQotI2VuZGlmIC8vIEdka0NhaXJv
VXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JY29uR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
Y29uR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5NTdiMzQ1Y2U1ZmIy
NzExYTEwYzY2ODAyNTNkYzUyNGVjODhmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNv
bkd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkljb24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRD
YWlyby5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotSWNvbjo6SWNvbigpCi0gICAgOiBtX2ljb24oMCkKLXsKLX0KLQotSWNvbjo6fkljb24o
KQotewotICAgIGlmIChtX2ljb24pCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1faWNvbik7Ci19
Ci0KLXN0YXRpYyBTdHJpbmcgbG9va3VwSWNvbk5hbWUoU3RyaW5nIE1JTUVUeXBlKQotewotICAg
IC8qCi0gICAgIExvb2t1cCBhbiBhcHByb3ByaWF0ZSBpY29uIGFjY29yZGluZyB0byBlaXRoZXIg
dGhlIEljb24gTmFtaW5nIFNwZWMKLSAgICAgb3IgY29udmVudGlvbmFsIEdub21lIGljb24gbmFt
ZXMgcmVzcGVjdGl2ZWx5LgotCi0gICAgIFNlZSBodHRwOi8vc3RhbmRhcmRzLmZyZWVkZXNrdG9w
Lm9yZy9pY29uLW5hbWluZy1zcGVjL2ljb24tbmFtaW5nLXNwZWMtbGF0ZXN0Lmh0bWwKLQotICAg
ICBUaGUgaWNvbiB0aGVtZSBpcyBwcm9iZWQgZm9yIHRoZSBmb2xsb3dpbmcgbmFtZXM6Ci0gICAg
IDEuIG1lZGlhLXN1YnR5cGUKLSAgICAgMi4gZ25vbWUtbWltZS1tZWRpYS1zdWJ0eXBlCi0gICAg
IDMuIG1lZGlhLXgtZ2VuZXJpYwotICAgICA0LiBnbm9tZS1taW1lLW1lZGlhCi0KLSAgICAgSW4g
dGhlIHdvcnN0IGNhc2UgaXQgZmFsbHMgYmFjayB0byB0aGUgc3RvY2sgZmlsZSBpY29uLgotICAg
ICovCi0gICAgaW50IHBvcyA9IE1JTUVUeXBlLmZpbmQoJy8nKTsKLSAgICBpZihwb3MgPj0gMCkg
ewotICAgICAgICBTdHJpbmcgbWVkaWEgPSBNSU1FVHlwZS5zdWJzdHJpbmcoMCwgcG9zKTsKLSAg
ICAgICAgU3RyaW5nIHN1YnR5cGUgPSBNSU1FVHlwZS5zdWJzdHJpbmcocG9zICsgMSk7Ci0gICAg
ICAgIEd0a0ljb25UaGVtZSogaWNvblRoZW1lID0gZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQo
KTsKLSAgICAgICAgU3RyaW5nIGljb25OYW1lID0gbWVkaWEgKyAiLSIgKyBzdWJ0eXBlOwotICAg
ICAgICBpZihndGtfaWNvbl90aGVtZV9oYXNfaWNvbihpY29uVGhlbWUsIGljb25OYW1lLnV0Zjgo
KS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGljb25OYW1lOwotICAgICAgICBpY29uTmFt
ZSA9ICJnbm9tZS1taW1lLSIgKyBtZWRpYSArICItIiArIHN1YnR5cGU7Ci0gICAgICAgIGlmKGd0
a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7Ci0gICAgICAgIGljb25OYW1lID0gbWVkaWEg
KyAiLXgtZ2VuZXJpYyI7Ci0gICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19pY29uKGljb25U
aGVtZSwgaWNvbk5hbWUudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gaWNvbk5h
bWU7Ci0gICAgICAgIGljb25OYW1lID0gbWVkaWEgKyAiZ25vbWUtbWltZS0iICsgbWVkaWE7Ci0g
ICAgICAgIGlmKGd0a19pY29uX3RoZW1lX2hhc19pY29uKGljb25UaGVtZSwgaWNvbk5hbWUudXRm
OCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gaWNvbk5hbWU7Ci0gICAgfQotICAgIHJl
dHVybiBHVEtfU1RPQ0tfRklMRTsKLX0KLQotLy8gRklYTUU6IE1vdmUgdGhlIGNvZGUgdG8gQ2hy
b21lQ2xpZW50OjppY29uRm9yRmlsZXMoKS4KLVBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRl
SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCi17Ci0gICAgaWYg
KGZpbGVuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGZpbGVu
YW1lcy5zaXplKCkgPT0gMSkgewotICAgICAgICBpZiAoIWdfcGF0aF9za2lwX3Jvb3QoZmlsZW5h
bWVzWzBdLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAg
U3RyaW5nIE1JTUVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKGZp
bGVuYW1lc1swXSk7Ci0gICAgICAgIFN0cmluZyBpY29uTmFtZSA9IGxvb2t1cEljb25OYW1lKE1J
TUVUeXBlKTsKLQotICAgICAgICBSZWZQdHI8SWNvbj4gaWNvbiA9IGFkb3B0UmVmKG5ldyBJY29u
KTsKLSAgICAgICAgaWNvbi0+bV9pY29uID0gZ3RrX2ljb25fdGhlbWVfbG9hZF9pY29uKGd0a19p
Y29uX3RoZW1lX2dldF9kZWZhdWx0KCksIGljb25OYW1lLnV0ZjgoKS5kYXRhKCksIDE2LCBHVEtf
SUNPTl9MT09LVVBfVVNFX0JVSUxUSU4sIDApOwotICAgICAgICBpZiAoIWljb24tPm1faWNvbikK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gaWNvbi5yZWxlYXNlKCk7Ci0g
ICAgfQotCi0gICAgLy9GSVhNRTogSW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVE9ETzogU2NhbGUvY2xpcCB0aGUgaW1hZ2UgaWYgbmVjZXNzYXJ5
LgotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0g
ICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBt
X2ljb24sIHJlY3QueCgpLCByZWN0LnkoKSk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IpOwotICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDZmZjUzYjRmZTExMWQyNDMwMjI5ZjYwMzY3NjdhY2E3ZWJkNGQ4NS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsODMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIK
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1
YWxpdHksIEdPd25QdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewotICAg
IC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhl
IEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUu
b3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4
YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJp
bmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJw
bmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsK
LSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBv
cnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJM
KCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291cmNl
LW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0g
ICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJUk9fRk9S
TUFUX1JHQjI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3Vy
ZmFjZSkpKTsKLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvSW1hZ2VTdXJmYWNlVG9H
ZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBwaXhidWYg
PSBhZG9wdEdSZWYoY2Fpcm9JbWFnZVN1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAg
aWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdFcnJvciogZXJyb3Ig
PSAwOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAu
MCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBT
dHJpbmc6OmZvcm1hdCgiJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAw
LjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZi
dWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvciwg
InF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwotICAgIH0gZWxz
ZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZl
ci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLCBOVUxM
KTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIEdPd25QdHI8
Z2NoYXI+IGJ1ZmZlcigwKTsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAgIGlmICghZW5jb2Rl
SW1hZ2UobV9kYXRhLm1fc3VyZmFjZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVy
U2l6ZSkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjREYXRhOwotICAgIGJhc2U2NEVuY29kZShidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUsIGJhc2U2
NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBi
YXNlNjREYXRhOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ltYWdlR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5ZmJl
ZmYwMjU4NDJjMmYxZjg1ZWQ0OTlmNjQxNTkyMGU0NTJmOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW1hZ2VHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjaGFyKiBn
ZXRQYXRoVG9JbWFnZVJlc291cmNlKGNoYXIqIHJlc291cmNlKQotewotICAgIGlmIChnX2dldGVu
digiV0VCS0lUX1RPUF9MRVZFTCIpKQotICAgICAgICByZXR1cm4gZ19idWlsZF9maWxlbmFtZShn
X2dldGVudigiV0VCS0lUX1RPUF9MRVZFTCIpLCAiU291cmNlIiwgIldlYkNvcmUiLCAiUmVzb3Vy
Y2VzIiwgcmVzb3VyY2UsIE5VTEwpOwotCi0gICAgcmV0dXJuIGdfYnVpbGRfZmlsZW5hbWUoc2hh
cmVkUmVzb3VyY2VzUGF0aCgpLmRhdGEoKSwgImltYWdlcyIsIHJlc291cmNlLCBOVUxMKTsKLX0K
LQotc3RhdGljIENTdHJpbmcgZ2V0VGhlbWVJY29uRmlsZU5hbWUoY29uc3QgY2hhciogbmFtZSwg
aW50IHNpemUpCi17Ci0gICAgR3RrSWNvbkluZm8qIGljb25JbmZvID0gZ3RrX2ljb25fdGhlbWVf
bG9va3VwX2ljb24oZ3RrX2ljb25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBzaXplLCBHVEtf
SUNPTl9MT09LVVBfTk9fU1ZHKTsKLSAgICAvLyBUcnkgdG8gZmFsbGJhY2sgb24gTUlTU0lOR19J
TUFHRS4KLSAgICBpZiAoIWljb25JbmZvKQotICAgICAgICBpY29uSW5mbyA9IGd0a19pY29uX3Ro
ZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX01JU1NJTkdfSU1B
R0UsIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX0lDT05fTE9PS1VQX05PX1NWRyk7Ci0gICAgaWYgKGljb25JbmZvKSB7Ci0gICAgICAgIEdP
d25QdHI8R3RrSWNvbkluZm8+IGluZm8oaWNvbkluZm8pOwotICAgICAgICByZXR1cm4gQ1N0cmlu
ZyhndGtfaWNvbl9pbmZvX2dldF9maWxlbmFtZShpbmZvLmdldCgpKSk7Ci0gICAgfQotCi0gICAg
Ly8gTm8gaWNvbiB3YXMgZm91bmQsIHRoaXMgY2FuIGhhcHBlbiBpZiBub3QgR1RLIHRoZW1lIGlz
IHNldC4gSW4KLSAgICAvLyB0aGF0IGNhc2UgYW4gZW1wdHkgSW1hZ2Ugd2lsbCBiZSBjcmVhdGVk
LgotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVyKENTdHJpbmcgbmFtZSkKLXsKLSAgICBHT3du
UHRyPGdjaGFyPiBjb250ZW50OwotICAgIGdzaXplIGxlbmd0aDsKLSAgICBpZiAoIWdfZmlsZV9n
ZXRfY29udGVudHMobmFtZS5kYXRhKCksICZjb250ZW50Lm91dFB0cigpLCAmbGVuZ3RoLCAwKSkK
LSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7Ci0KLSAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5nZXQoKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCaXRt
YXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW1h
Z2U+IGxvYWRJbWFnZUZyb21GaWxlKENTdHJpbmcgZmlsZU5hbWUpCi17Ci0gICAgUmVmUHRyPEJp
dG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7Ci0gICAgaWYgKCFmaWxlTmFt
ZS5pc051bGwoKSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBsb2Fk
UmVzb3VyY2VTaGFyZWRCdWZmZXIoZmlsZU5hbWUpOwotICAgICAgICBpbWctPnNldERhdGEoYnVm
ZmVyLnJlbGVhc2UoKSwgdHJ1ZSk7Ci0gICAgfQotICAgIHJldHVybiBpbWcucmVsZWFzZSgpOwot
fQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3Qg
Y2hhciogbmFtZSkKLXsKLSAgICBDU3RyaW5nIGZpbGVOYW1lOwotICAgIGlmICghc3RyY21wKCJt
aXNzaW5nSW1hZ2UiLCBuYW1lKSkKLSAgICAgICAgZmlsZU5hbWUgPSBnZXRUaGVtZUljb25GaWxl
TmFtZShHVEtfU1RPQ0tfTUlTU0lOR19JTUFHRSwgMTYpOwotICAgIGlmIChmaWxlTmFtZS5pc051
bGwoKSkgewotICAgICAgICBHT3duUHRyPGdjaGFyPiBpbWFnZU5hbWUoZ19zdHJkdXBfcHJpbnRm
KCIlcy5wbmciLCBuYW1lKSk7Ci0gICAgICAgIEdPd25QdHI8Z2NoYXI+IGdsaWJGaWxlTmFtZShn
ZXRQYXRoVG9JbWFnZVJlc291cmNlKGltYWdlTmFtZS5nZXQoKSkpOwotICAgICAgICBmaWxlTmFt
ZSA9IGdsaWJGaWxlTmFtZS5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbG9hZEltYWdlRnJv
bUZpbGUoZmlsZU5hbWUpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRm
b3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKQotewotICAgIHJldHVybiBs
b2FkSW1hZ2VGcm9tRmlsZShnZXRUaGVtZUljb25GaWxlTmFtZShuYW1lLCBzaXplKSk7Ci19Ci0K
LUdka1BpeGJ1ZiogQml0bWFwSW1hZ2U6OmdldEdka1BpeGJ1ZigpCi17Ci0gICAgTmF0aXZlSW1h
Z2VDYWlybyogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIHJldHVy
biBpbWFnZSA/IGNhaXJvSW1hZ2VTdXJmYWNlVG9HZGtQaXhidWYoaW1hZ2UtPnN1cmZhY2UoKSkg
OiAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW50UG9pbnRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ludFBvaW50R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMjE1
ODFlOGVkOTRhOWViZWMxZGVlYmM5NWJkMDEzMjU2NzM2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW50UG9pbnRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRQb2ludDo6SW50UG9pbnQoY29uc3QgR2Rr
UG9pbnQmIHApCi0gICAgOiBtX3gocC54KQotICAgICwgbV95KHAueSkKLXsKLX0KLQotSW50UG9p
bnQ6Om9wZXJhdG9yIEdka1BvaW50KCkgY29uc3QKLXsKLSAgICBHZGtQb2ludCBwID0geyB4KCks
IHkoKSB9OwotICAgIHJldHVybiBwOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzEyODE5YWZjYTExYWQ3NzdkMzQy
YzdhMzk0MDY0NzlmMjM1OGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi0jaWZkZWYgR1RLX0FQ
SV9WRVJTSU9OXzIKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UmVjdDo6SW50UmVjdChjb25z
dCBHZGtSZWN0YW5nbGUmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHIueCwgci55KSkK
LSAgICAsIG1fc2l6ZShyLndpZHRoLCByLmhlaWdodCkKLXsKLX0KLQotSW50UmVjdDo6b3BlcmF0
b3IgR2RrUmVjdGFuZ2xlKCkgY29uc3QKLXsKLSAgICBHZGtSZWN0YW5nbGUgciA9IHsgeCgpLCB5
KCksIHdpZHRoKCksIGhlaWdodCgpIH07Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLX0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmYmRhMDg3MzQwYzBiZjYxYjFkYjFk
NzcwYzg5YzdlZDgzMDI0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0K
LSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1HdGsuaCIKLQotI2luY2x1ZGUgIkFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgQXN5bmNGaWxl
U3lzdGVtOjppc0F2YWlsYWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLVBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVTeXN0
ZW06OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1H
dGsoKSk7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5c3RlbShjb25zdCBT
dHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyLCBGaWxlU3lz
dGVtVHlwZSwgYm9vbCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNhbGxiYWNrcy0+ZGlkRmFpbChO
T1RfU1VQUE9SVEVEX0VSUik7Ci19Ci0KLXZvaWQgQXN5bmNGaWxlU3lzdGVtOjpkZWxldGVGaWxl
U3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50
aWZpZXIsIEZpbGVTeXN0ZW1UeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjYWxsYmFj
a3MtPmRpZEZhaWwoTk9UX1NVUFBPUlRFRF9FUlIpOwotfQotCi1Bc3luY0ZpbGVTeXN0ZW1HdGs6
OkFzeW5jRmlsZVN5c3RlbUd0aygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotQXN5
bmNGaWxlU3lzdGVtR3RrOjp+QXN5bmNGaWxlU3lzdGVtR3RrKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6bW92ZShjb25zdCBLVVJMJiBz
b3VyY2VQYXRoLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblBhdGgsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNvcHkoY29uc3QgS1VSTCYgc291cmNlUGF0
aCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpyZW1vdmUoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVtb3ZlUmVjdXJzaXZlbHko
Y29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5
c3RlbUd0azo6cmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0ZUZpbGUoY29uc3QgS1VSTCYgcGF0
aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBc3luY0ZpbGVT
eXN0ZW1HdGs6OmNyZWF0ZURpcmVjdG9yeShjb25zdCBLVVJMJiBwYXRoLCBib29sIGV4Y2x1c2l2
ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6ZmlsZUV4
aXN0cyhjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
cz4gY2FsbGJhY2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgQXN5bmNG
aWxlU3lzdGVtR3RrOjpkaXJlY3RvcnlFeGlzdHMoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6cmVhZERpcmVjdG9yeShjb25z
dCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLQotdm9pZCBBc3luY0ZpbGVTeXN0
ZW1HdGs6OmNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3Qg
S1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5j
RmlsZVN5c3RlbUd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5
c3RlbUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWY1NzM3MDgxY2E2ODRm
MDExMzIxYzc1YmE4ZGZlNWRhNjU1YzcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0
ZW1HdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
IFVTQQotICovCi0KLSNpZm5kZWYgIEFzeW5jRmlsZVN5c3RlbUd0a19oCi0jZGVmaW5lICBBc3lu
Y0ZpbGVTeXN0ZW1HdGtfaAotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSAi
QXN5bmNGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7Ci0KLWNsYXNz
IEFzeW5jRmlsZVN5c3RlbUd0ayA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0gewotcHVibGljOgot
ICAgIEFzeW5jRmlsZVN5c3RlbUd0aygpOwotICAgIHZpcnR1YWwgfkFzeW5jRmlsZVN5c3RlbUd0
aygpOwotCi0gICAgdmlydHVhbCB2b2lkIG1vdmUoY29uc3QgS1VSTCYgc291cmNlUGF0aCwgY29u
c3QgS1VSTCYgZGVzdGluYXRpb25QYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5KGNvbnN0IEtVUkwmIHNvdXJjZVBhdGgsIGNv
bnN0IEtVUkwmIGRlc3RpbmF0aW9uUGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZVJlY3Vyc2l2ZWx5KGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBw
YXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVGaWxlKGNvbnN0IEtVUkwmIHBhdGgsIGJvb2wgZXhjbHVzaXZlLCBQYXNzT3du
UHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVE
aXJlY3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgYm9vbCBleGNsdXNpdmUsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGVFeGlzdHMoY29u
c3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlyZWN0b3J5RXhpc3RzKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWREaXJl
Y3RvcnkoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVu
dCosIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
Pik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8g
IEFzeW5jRmlsZVN5c3RlbUd0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjNiNmNmOGYyZWRj
NTk5OGYxNWEwMWFlYmM1NzIyZTM1OTY2NDRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRH
dGsuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIK
LSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmls
ZUxpc3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotI2luY2x1ZGUgIlJl
bmRlckltYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1
ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWVudW0gQ2xpcGJvYXJkRGF0YVR5cGUgewotICAgIENsaXBib2FyZERhdGFU
eXBlVGV4dCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cCwKLSAgICBDbGlwYm9hcmREYXRh
VHlwZVVSSUxpc3QsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsCi0gICAgQ2xpcGJvYXJkRGF0
YVR5cGVJbWFnZSwKLSAgICBDbGlwYm9hcmREYXRhVHlwZVVua25vd24KLX07Ci0KLVBhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBDbGlwYm9hcmRHdGs6
OmNyZWF0ZShwb2xpY3ksIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5
X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKSwgZnJhbWUpOwotfQotCi1Q
YXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0
dXJuIENsaXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgp
LCBEcmFnQW5kRHJvcCwgZnJhbWUpOwotfQotCi1DbGlwYm9hcmRHdGs6OkNsaXBib2FyZEd0ayhD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJh
bWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBhc3RlKQotICAgICwg
bV9kYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpKQotICAg
ICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLX0KLQot
Q2xpcGJvYXJkR3RrOjpDbGlwYm9hcmRHdGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwg
UGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRUeXBlIGNsaXBi
b2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6IENsaXBib2FyZChwb2xpY3ksIGNsaXBib2Fy
ZFR5cGUpCi0gICAgLCBtX2RhdGFPYmplY3QoZGF0YU9iamVjdCkKLSAgICAsIG1fY2xpcGJvYXJk
KDApCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1DbGlwYm9hcmRHdGs6On5DbGlwYm9h
cmRHdGsoKQotewotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1hZ2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKLX0KLQotc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGRhdGFPYmpl
Y3RUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgcmF3VHlwZSkKLXsKLSAg
ICBTdHJpbmcgdHlwZShyYXdUeXBlLnN0cmlwV2hpdGVTcGFjZSgpKTsKLQotICAgIC8vIFR3byBz
cGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5Ci0gICAgaWYgKHR5cGUgPT0gIlRleHQi
IHx8IHR5cGUgPT0gInRleHQiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0
OwotICAgIGlmICh0eXBlID09ICJVUkwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5
cGVVUkw7Ci0KLSAgICAvLyBGcm9tIHRoZSBNYWMgcG9ydDogSWdub3JlIGFueSB0cmFpbGluZyBj
aGFyc2V0IC0gSlMgc3RyaW5ncyBhcmUKLSAgICAvLyBVbmljb2RlLCB3aGljaCBlbmNhcHN1bGF0
ZXMgdGhlIGNoYXJzZXQgaXNzdWUuCi0gICAgaWYgKHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5
cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlVGV4dDsKLSAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlLnN0YXJ0c1dp
dGgoInRleHQvaHRtbDsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTWFya3Vw
OwotICAgIGlmICh0eXBlID09ICJGaWxlcyIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlzdCIgfHwg
dHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3VyaS1saXN0OyIpKQotICAgICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVVUklMaXN0OwotCi0gICAgLy8gTm90IGEga25vd24gdHlwZSwgc28ganVzdCBk
ZWZhdWx0IHRvIHVzaW5nIHRoZSB0ZXh0IHBvcnRpb24uCi0gICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlVW5rbm93bjsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OmNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRh
YmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0
YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclVSSUxpc3Qo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU1hcmt1cDoKLSAg
ICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhck1hcmt1cCgpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlVGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclRl
eHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgot
ICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFySW1hZ2UoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDbGlwYm9hcmREYXRhVHlwZVVua25vd246Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xl
YXJBbGwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQot
ICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0
ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotCi12b2lkIENsaXBib2FyZEd0
azo6Y2xlYXJBbGxEYXRhKCkKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFi
bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGRvIG5vdCBjbGVhciBmaWxlbmFtZXMu
IEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QKLSAgICAvLyBk
b2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0aGUgZHJh
Zywgc28gdGhlIHR5cGVzCi0gICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBzdGlsbCBub3Qg
YmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQgCi0gICAgLy8gc3Rp
bGwgY29udGFpbiB0aGUgIkZpbGVzIiBzdHJpbmcgaWYgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQg
aW4gdGhlIGRyYWcpLiIKLSAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVz
KCk7Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRl
ZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9h
cmQpOwotfQotCi1TdHJpbmcgQ2xpcGJvYXJkR3RrOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZVN0cmluZykgY29uc3QKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUg
fHwgIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKG1f
Y2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0KLSAgICBDbGlwYm9h
cmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlw
ZVN0cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0KQotICAg
ICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmlMaXN0KCk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xp
cGJvYXJkRGF0YVR5cGVVUkwpCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVybCgpOwot
ICAgIGlmICh0eXBlID09IENsaXBib2FyZERhdGFUeXBlTWFya3VwKQotICAgICAgICByZXR1cm4g
bV9kYXRhT2JqZWN0LT5tYXJrdXAoKTsKLSAgICBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlw
ZVRleHQpCi0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRleHQoKTsKLQotICAgIHJldHVy
biBTdHJpbmcoKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBDbGlwYm9hcmREYXRhVHlwZSB0eXBlID0gZGF0YU9iamVjdFR5
cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZVN0cmluZyk7Ci0gICAgaWYgKHR5cGUgPT0gQ2xp
cGJvYXJkRGF0YVR5cGVVUklMaXN0IHx8IHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsK
LSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUklMaXN0KGRhdGEpOwotICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVNYXJrdXAp
IHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoZGF0YSk7Ci0gICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQp
IHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KGRhdGEpOwotICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotTGlzdEhhc2hTZXQ8
U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKLXsKLSAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJs
ZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKLQotICAgIGlmIChtX2Ns
aXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwotCi0gICAgTGlzdEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlczsKLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKLSAg
ICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVGV4dCIp
OwotICAgICAgICB0eXBlcy5hZGQoInRleHQiKTsKLSAgICB9Ci0KLSAgICBpZiAobV9kYXRhT2Jq
ZWN0LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKLQotICAg
IGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAgICB0eXBlcy5hZGQoInRl
eHQvdXJpLWxpc3QiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJGaWxl
cyIpOwotCi0gICAgcmV0dXJuIHR5cGVzOwotfQotCi1QYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlw
Ym9hcmRHdGs6OmZpbGVzKCkgY29uc3QKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
UmVhZGFibGUpCi0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAo
bV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKLQotICAgIFJlZlB0
cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZp
bGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lc1tpXSwgRmlsZTo6QWxsQ29udGVu
dFR5cGVzKSk7Ci0gICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKLX0KLQotdm9pZCBDbGlw
Ym9hcmRHdGs6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50
JiBsb2NhdGlvbikKLXsKLSAgICBzZXREcmFnSW1hZ2UoaW1hZ2UsIDAsIGxvY2F0aW9uKTsKLX0K
LQotdm9pZCBDbGlwYm9hcmRHdGs6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSogZWxlbWVudCwg
Y29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQotewotICAgIHNldERyYWdJbWFnZSgwLCBlbGVtZW50
LCBsb2NhdGlvbik7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkR3RrOjpzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqIGltYWdlLCBOb2RlKiBlbGVtZW50LCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCi17
Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZEltYWdlV3JpdGFibGUgJiYgcG9saWN5KCkg
IT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2RyYWdJ
bWFnZSkKLSAgICAgICAgbV9kcmFnSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICBtX2Ry
YWdJbWFnZSA9IGltYWdlOwotICAgIGlmIChtX2RyYWdJbWFnZSkKLSAgICAgICAgbV9kcmFnSW1h
Z2UtPmFkZENsaWVudCh0aGlzKTsKLQotICAgIG1fZHJhZ0xvYyA9IGxvY2F0aW9uOwotICAgIG1f
ZHJhZ0ltYWdlRWxlbWVudCA9IGVsZW1lbnQ7Ci19Ci0KLURyYWdJbWFnZVJlZiBDbGlwYm9hcmRH
dGs6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgbG9jYXRpb24pIGNvbnN0Ci17Ci0gICAgbG9j
YXRpb24gPSBtX2RyYWdMb2M7Ci0KLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIHJldHVy
biBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdlKCkpOwotICAgIGlm
IChtX2RyYWdJbWFnZUVsZW1lbnQgJiYgbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWUt
Pm5vZGVJbWFnZShtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCkpOwotCi0gICAgcmV0dXJuIDA7IC8v
IFdlIGRvIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBkcmFnIGltYWdl
LCB1c2UgdGhlIGRlZmF1bHQgaWNvbi4KLX0KLQotc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNo
ZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQotewotICAgIC8vIEF0dGVtcHQgdG8gcHVsbCBDYWNo
ZWRJbWFnZSBmcm9tIGVsZW1lbnQKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5kZXJJ
bWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKLSAgICBp
ZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9j
Y3VycmVkKCkpCi0gICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKLQotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIENsaXBib2FyZEd0azo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdl
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwg
RnJhbWUqIGZyYW1lKQotewotICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOwot
ICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRl
Tm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKLQotICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGdl
dENhY2hlZEltYWdlKGVsZW1lbnQpOwotICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc0xvYWRl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0g
YWRvcHRHUmVmKGltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5n
ZXRHZGtQaXhidWYoKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdldCgpKTsKLX0KLQotdm9pZCBDbGlwYm9h
cmRHdGs6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJh
bWUqKQotewotICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOwotICAgIGlmICht
X2NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci19Ci0KLXZvaWQg
Q2xpcGJvYXJkR3RrOjp3cml0ZVJhbmdlKFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lKQotewot
ICAgIEFTU0VSVChyYW5nZSk7Ci0KLSAgICBtX2RhdGFPYmplY3QtPnNldFRleHQoZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3RlZFRleHQoKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3Jl
YXRlTWFya3VwKHJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2
ZU5vbkxvY2FsVVJMcykpOwotCi0gICAgaWYgKG1fY2xpcGJvYXJkKQotICAgICAgICBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRl
bnRzKG1fY2xpcGJvYXJkKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRHdGs6OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKLXsKLSAgICBtX2RhdGFPYmplY3QtPnNldFRleHQodGV4dCk7
Ci0KLSAgICBpZiAobV9jbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQp
OwotfQotCi1ib29sIENsaXBib2FyZEd0azo6aGFzRGF0YSgpCi17Ci0gICAgaWYgKG1fY2xpcGJv
YXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
T2JqZWN0LT5oYXNUZXh0KCkgfHwgbV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKQotICAgICAgICB8
fCBtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSB8fCBtX2RhdGFPYmplY3QtPmhhc0ltYWdlKCk7
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9h
cmRHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU5ZDYzY2U0ZjJjZThiYzExMmQwZjIwOTNlZTU4
ODM5MzIyOGUzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENsaXBib2FyZEd0a19o
Ci0jZGVmaW5lIENsaXBib2FyZEd0a19oCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZUNsaWVudC5o
IgotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIENhY2hlZEltYWdlOwotICAgIGNsYXNzIEZy
YW1lOwotICAgIGNsYXNzIFBhc3RlYm9hcmRIZWxwZXI7Ci0KLSAgICAvLyBTdGF0ZSBhdmFpbGFi
bGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi0g
ICAgLy8gQ3JlYXRlZCBmcm9tIHRoZSBFdmVudEhhbmRsZXJHdGsgdG8gYmUgdXNlZCBieSB0aGUg
ZG9tCi0gICAgY2xhc3MgQ2xpcGJvYXJkR3RrIDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENh
Y2hlZEltYWdlQ2xpZW50IHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJh
bWUqIGZyYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENs
aXBib2FyZEd0ayhwb2xpY3ksIGNsaXBib2FyZCwgZnJhbWUpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZEd0az4gY3JlYXRlKENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCwgQ2xp
cGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBGcmFtZSogZnJhbWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkR3RrKHBvbGljeSwgZGF0YU9iamVj
dCwgY2xpcGJvYXJkVHlwZSwgZnJhbWUpKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5D
bGlwYm9hcmRHdGsoKTsKLQotICAgICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmKTsK
LSAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKLSAgICAgICAgU3RyaW5nIGdldERhdGEoY29u
c3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKLQotICAgICAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlw
ZXMoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygp
IGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3Qg
SW50UG9pbnQmKTsKLSAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25z
dCBJbnRQb2ludCYpOwotICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIE5v
ZGUqLCBjb25zdCBJbnRQb2ludCYpOwotCi0gICAgICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiwgRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmLCBGcmFtZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShS
YW5nZSosIEZyYW1lKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25z
dCBTdHJpbmcmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwotCi0gICAgICAg
IFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCgpIHsgcmV0dXJuIG1fZGF0YU9i
amVjdDsgfQotICAgICAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCgpIHsgcmV0dXJuIG1fY2xp
cGJvYXJkOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDbGlwYm9hcmRHdGsoQ2xpcGJvYXJk
QWNjZXNzUG9saWN5LCBHdGtDbGlwYm9hcmQqLCBGcmFtZSopOwotICAgICAgICBDbGlwYm9hcmRH
dGsoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+LCBDbGlw
Ym9hcmRUeXBlLCBGcmFtZSopOwotCi0gICAgICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBtX2Rh
dGFPYmplY3Q7Ci0gICAgICAgIEd0a0NsaXBib2FyZCogbV9jbGlwYm9hcmQ7Ci0gICAgICAgIEZy
YW1lKiBtX2ZyYW1lOwotICAgIH07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWZjMGU3NDQ2ZTBlZWRlMTI1YjEwY2E0YTgyZTY5YTdmNjVhMjU1
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBT
LkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3Bl
cmF0aW9uIGNvcmVBY3Rpb24pCi17Ci0gICAgR2RrRHJhZ0FjdGlvbiBnZGtBY3Rpb24gPSBzdGF0
aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLSAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3Bl
cmF0aW9uTm9uZSkKLSAgICAgICAgcmV0dXJuIGdka0FjdGlvbjsKLQotICAgIGlmIChjb3JlQWN0
aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0
PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IGdka0FjdGlvbik7Ci0gICAgaWYgKGNv
cmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkKLSAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGlj
X2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9NT1ZFIHwgZ2RrQWN0aW9uKTsKLSAgICBp
ZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICBnZGtBY3Rpb24gPSBz
dGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0xJTksgfCBnZGtBY3Rpb24pOwot
ICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvblByaXZhdGUpCi0gICAgICAgIGdka0Fj
dGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fUFJJVkFURSB8IGdk
a0FjdGlvbik7Ci0KLSAgICByZXR1cm4gZ2RrQWN0aW9uOwotfQotCi1HZGtEcmFnQWN0aW9uIGRy
YWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09wZXJhdGlvbiBjb3JlQWN0aW9u
KQotewotICAgIGlmIChjb3JlQWN0aW9uID09IERyYWdPcGVyYXRpb25FdmVyeSB8fCBjb3JlQWN0
aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCi0gICAgICAgIHJldHVybiBHREtfQUNUSU9OX0NPUFk7
Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTW92ZSkKLSAgICAgICAgcmV0dXJu
IEdES19BQ1RJT05fTU9WRTsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25MaW5r
KQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9MSU5LOwotICAgIGlmIChjb3JlQWN0aW9uICYg
RHJhZ09wZXJhdGlvblByaXZhdGUpCi0gICAgICAgIHJldHVybiBHREtfQUNUSU9OX1BSSVZBVEU7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KDApOwotfQotCi1EcmFnT3Bl
cmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oR2RrRHJhZ0FjdGlvbiBnZGtBY3Rp
b24pCi17Ci0gICAgLy8gV2UgaGF2ZSBubyBnb29kIHdheSB0byBkZXRlY3QgRHJhZ09wZXJhdGlv
bkV2ZXJ5IG90aGVyIHRoYW4KLSAgICAvLyB0byB1c2UgaXQgd2hlbiBhbGwgYXBwbGljYWJsZSBm
bGFncyBhcmUgb24uCi0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWSAmJiBnZGtB
Y3Rpb24gJiBHREtfQUNUSU9OX01PVkUKLSAgICAgICAgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElP
Tl9MSU5LICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKLSAgICAgICAgcmV0dXJu
IERyYWdPcGVyYXRpb25FdmVyeTsKLQotICAgIHVuc2lnbmVkIGludCBhY3Rpb24gPSBEcmFnT3Bl
cmF0aW9uTm9uZTsKLSAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9DT1BZKQotICAgICAg
ICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbkNvcHk7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19B
Q1RJT05fTU9WRSkKLSAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25Nb3ZlOwotICAgIGlm
IChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0xJTkspCi0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3Bl
cmF0aW9uTGluazsKLSAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9QUklWQVRFKQotICAg
ICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvblByaXZhdGU7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KGFjdGlvbik7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjZmNjM0NjllMmI4ZGU0NWMwMTc3NzVmMGI0MjkyYmQ2YmFjNDc0Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBDbGlwYm9hcmRVdGlsaXRp
ZXNHdGtfaAotI2RlZmluZSBDbGlwYm9hcmRVdGlsaXRpZXNHdGtfaAotCi0jaW5jbHVkZSAiRHJh
Z0FjdGlvbnMuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0
aW9uKTsKLUdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihE
cmFnT3BlcmF0aW9uKTsKLURyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlv
bihHZGtEcmFnQWN0aW9uKTsKLQotfQotCi0jZW5kaWYgLy8gQ2xpcGJvYXJkVXRpbGl0aWVzR3Rr
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJl
c3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ1ZjIzYmI1OTZlOGMyZWFlYjMyOTcx
MGRmNDhlNDc0YzdlYzQ1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29tcG9zaXRpb25SZXN1bHRzX2gKLSNkZWZp
bmUgQ29tcG9zaXRpb25SZXN1bHRzX2gKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDb21wb3NpdGlvblJlc3VsdHMgewot
ICAgIENvbXBvc2l0aW9uUmVzdWx0cygpCi0gICAgICAgIDogYXNzb2NpYXRlZFdpdGhQZW5kaW5n
Q29tcG9zaXRpb25VcGRhdGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIENvbXBvc2l0aW9u
UmVzdWx0cyhTdHJpbmcgc2ltcGxlU3RyaW5nKQotICAgICAgICA6IHNpbXBsZVN0cmluZyhzaW1w
bGVTdHJpbmcpCi0gICAgICAgICwgYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRh
dGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIGVudW0gUmVzdWx0c0luZGljYXRvciB7IFdp
bGxTZW5kQ29tcG9zaXRpb25SZXN1bHRzU29vbiB9OwotICAgIENvbXBvc2l0aW9uUmVzdWx0cyhS
ZXN1bHRzSW5kaWNhdG9yKQotICAgICAgICA6IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0
aW9uVXBkYXRlKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY29tcG9zaXRpb25VcGRh
dGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdD
b21wb3NpdGlvblVwZGF0ZTsKLSAgICB9Ci0KLSAgICAvLyBTb21lIHNpbXBsZSBpbnB1dCBtZXRo
b2RzIHJldHVybiBhIHN0cmluZyBmb3IgYWxsIGtleWJvYXJkIGV2ZW50cy4gVGhpcwotICAgIC8v
IHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIGtleWNvZGUuCi0gICAgU3RyaW5nIHNpbXBsZVN0cmluZzsKLQotICAgIGJvb2wgYXNzb2Np
YXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBD
b21wb3NpdGlvblJlc3VsdHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250
ZXh0TWVudUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDAyYzRkOWZk
NzgyZjkyNzA0YzQ5NzZjNDM3ZWExZjllNWRkYjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNsdWRlICJDb250ZXh0TWVudS5o
IgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24gPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7Ci19Ci0KLUNvbnRleHRNZW51OjpDb250
ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9wbGF0
Zm9ybURlc2NyaXB0aW9uKG1lbnUpCi17Ci19Ci0KLUNvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUo
KQotewotICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCi0gICAgICAgIGd0a193aWRnZXRf
ZGVzdHJveShHVEtfV0lER0VUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotfQotCi12b2lkIENv
bnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKLXsKLSAgICBBU1NF
UlQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKLQotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBwbGF0
Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7
Ci0gICAgQVNTRVJUKHBsYXRmb3JtSXRlbSk7Ci0KLSAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQg
PSBndGtfd2lkZ2V0X2dldF9wYXJlbnQocGxhdGZvcm1JdGVtLmdldCgpKSkKLSAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBwbGF0Zm9ybUl0ZW0uZ2V0
KCkpOwotCi0gICAgZ3RrX21lbnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbiksIHBsYXRmb3JtSXRlbS5nZXQoKSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93
KHBsYXRmb3JtSXRlbS5nZXQoKSk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnU6OnNldFBsYXRmb3Jt
RGVzY3JpcHRpb24oUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLXsKLSAgICBBU1NFUlQo
bWVudSk7Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9PSBtZW51KQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKLSAgICAgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KEdUS19XSURHRVQobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSk7Ci0KLSAgICBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24gPSBtZW51OwotfQotCi1QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBD
b250ZXh0TWVudTo6cGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4
dE1lbnU6OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkKLXsKLSAgICBQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLSAgICBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24gPSAwOwotCi0gICAgcmV0dXJuIGRlc2NyaXB0aW9uOwotfQotCi11
bnNpZ25lZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9w
bGF0Zm9ybURlc2NyaXB0aW9uKTsKLQotICAgIEdPd25QdHI8R0xpc3Q+IGNoaWxkcmVuKGd0a19j
b250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wbGF0Zm9ybURlc2NyaXB0aW9u
KSkpOwotICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKGNoaWxkcmVuLmdldCgpKTsKLX0KLQotVmVj
dG9yPENvbnRleHRNZW51SXRlbT4gY29udGV4dE1lbnVJdGVtVmVjdG9yKGNvbnN0IFBsYXRmb3Jt
TWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAgVmVjdG9yPENvbnRleHRNZW51SXRlbT4gbWVu
dUl0ZW1WZWN0b3I7Ci0KLSAgICBHT3duUHRyPEdMaXN0PiBjaGlsZHJlbihndGtfY29udGFpbmVy
X2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKG1lbnUpKSk7Ci0gICAgaW50IGl0ZW1Db3VudCA9
IGdfbGlzdF9sZW5ndGgoY2hpbGRyZW4uZ2V0KCkpOwotICAgIG1lbnVJdGVtVmVjdG9yLnJlc2Vy
dmVDYXBhY2l0eShpdGVtQ291bnQpOwotCi0gICAgZm9yIChHTGlzdCogaXRlbSA9IGNoaWxkcmVu
LmdldCgpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKLSAgICAgICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxHdGtXaWRnZXQqPihpdGVtLT5kYXRhKTsKLSAgICAg
ICAgaWYgKCFHVEtfSVNfTUVOVV9JVEVNKHdpZGdldCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgbWVudUl0ZW1WZWN0b3IuYXBwZW5kKEdUS19NRU5VX0lURU0od2lkZ2V0KSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1lbnVJdGVtVmVjdG9yOwotfQotCi1QbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBwbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbihWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYg
c3ViTWVudUl0ZW1zKQotewotICAgIEd0a01lbnUqIG1lbnUgPSBHVEtfTUVOVShndGtfbWVudV9u
ZXcoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJNZW51SXRlbXMuc2l6ZSgpOyBp
KyspIHsKLSAgICAgICAgR3RrV2lkZ2V0KiBwbGF0Zm9ybUl0ZW0gPSBHVEtfV0lER0VUKHN1Yk1l
bnVJdGVtc1tpXS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKLSAgICAgICAgZ3RrX21l
bnVfc2hlbGxfYXBwZW5kKEdUS19NRU5VX1NIRUxMKG1lbnUpLCBwbGF0Zm9ybUl0ZW0pOwotICAg
ICAgICBndGtfd2lkZ2V0X3Nob3cocGxhdGZvcm1JdGVtKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1l
bnU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51SXRlbUd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwYjViZTZiZGYwYmQ5Y2ZjNzc4Y2EyMDVkYjIzODc1
NWMzMWUyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVJdGVtR3RrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
Ci0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLQotI2luY2x1
ZGUgIkNvbnRleHRNZW51SXRlbS5oIgotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNkZWZpbmUgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04gIndlYmtpdC1jb250ZXh0LW1l
bnUiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGd0a1N0b2Nr
SURGcm9tQ29udGV4dE1lbnVBY3Rpb24oY29uc3QgQ29udGV4dE1lbnVBY3Rpb24mIGFjdGlvbikK
LXsKLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29w
eUxpbmtUb0NsaXBib2FyZDoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRv
Q2xpcGJvYXJkOgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xp
cGJvYXJkOgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKLSAgICAgICAgcmV0dXJu
IEdUS19TVE9DS19DT1BZOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5l
d1dpbmRvdzoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93
OgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19PUEVOOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRM
aW5rVG9EaXNrOgotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlz
azoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19TQVZFOwotICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnR29CYWNrOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0dPX0JBQ0s7Ci0gICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tf
R09fRk9SV0FSRDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgIHJl
dHVybiBHVEtfU1RPQ0tfU1RPUDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoK
LSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19SRUZSRVNIOwotICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnQ3V0OgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX0NVVDsKLSAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1Bhc3RlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1BBU1RFOwotICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NL
X0RFTEVURTsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKLSAgICAgICAg
cmV0dXJuIEdUS19TVE9DS19TRUxFQ1RfQUxMOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3BlbGxpbmdHdWVzczoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19OTzsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBHVEtf
U1RPQ0tfT0s7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKLSAgICAgICAgcmV0
dXJuIEdUS19TVE9DS19NSVNTSU5HX0lNQUdFOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2VhcmNoSW5TcG90bGlnaHQ6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfRklORDsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19GSU5EOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGlj
YXRpb246Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfT1BFTjsKLSAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVBERlpvb21JbjoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9DS19aT09NX0lOOwotICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19aT09NX09VVDsKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9TaXplOgotICAgICAg
ICByZXR1cm4gR1RLX1NUT0NLX1pPT01fRklUOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERG
TmV4dFBhZ2U6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfR09fRk9SV0FSRDsKLSAgICBjYXNl
IENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKLSAgICAgICAgcmV0dXJuIEdUS19TVE9D
S19HT19CQUNLOwotICAgIC8vIE5ldyB0YWdzLCBub3QgcGFydCBvZiBBUEkKLSAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX09QRU47
Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgotICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX1NQRUxMX0NIRUNLOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRm9u
dE1lbnU6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VMRUNUX0ZPTlQ7Ci0gICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6Ci0gICAgICAgIHJldHVybiBHVEtfU1RPQ0tfU0VM
RUNUX0ZPTlQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOgotICAgICAgICByZXR1
cm4gR1RLX1NUT0NLX0JPTEQ7Ci0gICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6Ci0g
ICAgICAgIHJldHVybiBHVEtfU1RPQ0tfSVRBTElDOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVW5kZXJsaW5lOgotICAgICAgICByZXR1cm4gR1RLX1NUT0NLX1VOREVSTElORTsKLSAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6Ci0gICAgICAgIHJldHVybiBHVEtfU1RP
Q0tfU0VMRUNUX0NPTE9SOwotICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFD
b250cm9sczoKLSAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKLSAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgotICAgICAg
ICAvLyBObyBpY29uIGZvciB0aGlzLgotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuOgotICAgICAgICByZXR1cm4gR1RLX1NU
T0NLX0ZVTExTQ1JFRU47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
fQotCi1zdGF0aWMgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGNyZWF0ZVBsYXRmb3JtTWVu
dUl0ZW1EZXNjcmlwdGlvbihDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0
aW9uIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNr
ZWQpCi17Ci0gICAgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuIEdU
S19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOwotCi0gICAgR093blB0
cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigiY29udGV4dC1tZW51LWFjdGlvbi0l
ZCIsIGFjdGlvbikpOwotICAgIEdSZWZQdHI8R3RrQWN0aW9uPiBwbGF0Zm9ybUFjdGlvbjsKLQot
ICAgIGlmICh0eXBlID09IENoZWNrYWJsZUFjdGlvblR5cGUpIHsKLSAgICAgICAgcGxhdGZvcm1B
Y3Rpb24gPSBhZG9wdEdSZWYoR1RLX0FDVElPTihndGtfdG9nZ2xlX2FjdGlvbl9uZXcoYWN0aW9u
TmFtZS5nZXQoKSwgdGl0bGUudXRmOCgpLmRhdGEoKSwgMCwgZ3RrU3RvY2tJREZyb21Db250ZXh0
TWVudUFjdGlvbihhY3Rpb24pKSkpOwotICAgICAgICBndGtfdG9nZ2xlX2FjdGlvbl9zZXRfYWN0
aXZlKEdUS19UT0dHTEVfQUNUSU9OKHBsYXRmb3JtQWN0aW9uLmdldCgpKSwgY2hlY2tlZCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHBsYXRmb3JtQWN0aW9uID0gYWRvcHRHUmVmKGd0a19hY3Rpb25f
bmV3KGFjdGlvbk5hbWUuZ2V0KCksIHRpdGxlLnV0ZjgoKS5kYXRhKCksIDAsIGd0a1N0b2NrSURG
cm9tQ29udGV4dE1lbnVBY3Rpb24oYWN0aW9uKSkpOwotICAgIGd0a19hY3Rpb25fc2V0X3NlbnNp
dGl2ZShwbGF0Zm9ybUFjdGlvbi5nZXQoKSwgZW5hYmxlZCk7Ci0KLSAgICBHdGtNZW51SXRlbSog
aXRlbSA9IEdUS19NRU5VX0lURU0oZ3RrX2FjdGlvbl9jcmVhdGVfbWVudV9pdGVtKHBsYXRmb3Jt
QWN0aW9uLmdldCgpKSk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoaXRlbSksIFdF
QktJVF9DT05URVhUX01FTlVfQUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Ci0KLSAg
ICByZXR1cm4gaXRlbTsKLX0KLQotLy8gRXh0cmFjdCB0aGUgQWN0aW9uVHlwZSBmcm9tIHRoZSBt
ZW51IGl0ZW0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVudUl0
ZW1EZXNjcmlwdGlvbiBpdGVtKQotICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKGl0ZW0pCi17
Ci0gICAgLy8gRG9uJ3Qgc2hvdyBhY2NlbCBsYWJlbHMgaW4gY29udGV4dCBtZW51IGl0ZW1zLgot
ICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9uKCk7Ci0gICAgaWYgKCFhY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghZ3RrX2FjdGlvbl9nZXRfYWNjZWxfcGF0aChhY3Rp
b24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIGNoaWxkID0gZ3RrX2Jpbl9n
ZXRfY2hpbGQoR1RLX0JJTihpdGVtKSk7Ci0gICAgaWYgKEdUS19JU19BQ0NFTF9MQUJFTChjaGls
ZCkpCi0gICAgICAgIGd0a19hY2NlbF9sYWJlbF9zZXRfYWNjZWxfY2xvc3VyZShHVEtfQUNDRUxf
TEFCRUwoY2hpbGQpLCAwKTsKLX0KLQotQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0o
Q29udGV4dE1lbnUqIHN1Yk1lbnUpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gR1RL
X01FTlVfSVRFTShndGtfbWVudV9pdGVtX25ldygpKTsKLSAgICBpZiAoc3ViTWVudSkKLSAgICAg
ICAgc2V0U3ViTWVudShzdWJNZW51KTsKLX0KLQotQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVu
dUl0ZW0oQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgdGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQotewotICAgIG1fcGxh
dGZvcm1EZXNjcmlwdGlvbiA9IGNyZWF0ZVBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbih0eXBl
LCBhY3Rpb24sIHRpdGxlLCB0cnVlLCBmYWxzZSk7Ci0gICAgaWYgKHN1Yk1lbnUpCi0gICAgICAg
IHNldFN1Yk1lbnUoc3ViTWVudSk7Ci19Ci0KLUNvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJ
dGVtKENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBib29sIGVuYWJsZWQsIGJvb2wgY2hlY2tlZCkKLXsKLSAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24gPSBjcmVhdGVQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24o
dHlwZSwgYWN0aW9uLCB0aXRsZSwgZW5hYmxlZCwgY2hlY2tlZCk7Ci19Ci0KLUNvbnRleHRNZW51
SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSwgYm9vbCBlbmFibGVkLCBib29sIGNoZWNrZWQsIFZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0+JiBzdWJNZW51SXRlbXMpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gY3Jl
YXRlUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uKFN1Ym1lbnVUeXBlLCBhY3Rpb24sIHRpdGxl
LCBlbmFibGVkLCBjaGVja2VkKTsKLSAgICBzZXRTdWJNZW51KHN1Yk1lbnVJdGVtcyk7Ci19Ci0K
LUNvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSgpCi17Ci19Ci0KLVBsYXRmb3JtTWVu
dUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0
aW9uKCkKLXsKLSAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSAwOwotICAgIHJldHVybiBwbGF0Zm9ybURlc2NyaXB0aW9uOwotfQotCi1Db250ZXh0TWVudUl0
ZW1UeXBlIENvbnRleHRNZW51SXRlbTo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEdUS19JU19T
RVBBUkFUT1JfTUVOVV9JVEVNKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVy
biBTZXBhcmF0b3JUeXBlOwotICAgIGlmIChHVEtfSVNfQ0hFQ0tfTUVOVV9JVEVNKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBDaGVja2FibGVBY3Rpb25UeXBlOwotICAg
IGlmIChndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpCi0g
ICAgICAgIHJldHVybiBTdWJtZW51VHlwZTsKLSAgICByZXR1cm4gQWN0aW9uVHlwZTsKLX0KLQot
dm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlKQot
ewotICAgIGlmICh0eXBlID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IEdUS19NRU5VX0lURU0oZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3KCkpOwot
fQotCi1Db250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPihHUE9JTlRFUl9UT19J
TlQoZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwgV0VC
S0lUX0NPTlRFWFRfTUVOVV9BQ1RJT04pKSk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpz
ZXRBY3Rpb24oQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uKQotewotICAgIGdfb2JqZWN0X3NldF9k
YXRhKEdfT0JKRUNUKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiksIFdFQktJVF9DT05URVhUX01FTlVf
QUNUSU9OLCBHSU5UX1RPX1BPSU5URVIoYWN0aW9uKSk7Ci19Ci0KLVN0cmluZyBDb250ZXh0TWVu
dUl0ZW06OnRpdGxlKCkgY29uc3QKLXsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a0FjdGlv
bigpOwotICAgIHJldHVybiBhY3Rpb24gPyBTdHJpbmc6OmZyb21VVEY4KGd0a19hY3Rpb25fZ2V0
X2xhYmVsKGFjdGlvbikpIDogU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpz
ZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQotewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0g
Z3RrQWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbikKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRfbGFi
ZWwoYWN0aW9uLCB0aXRsZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAotewotICAgIEd0
a1dpZGdldCogc3ViTWVudSA9IGd0a19tZW51X2l0ZW1fZ2V0X3N1Ym1lbnUobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKTsKLSAgICByZXR1cm4gc3ViTWVudSA/IEdUS19NRU5VKHN1Yk1lbnUpIDogMDsK
LX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dE1lbnUqIG1lbnUp
Ci17Ci0gICAgZ3RrX21lbnVfaXRlbV9zZXRfc3VibWVudShtX3BsYXRmb3JtRGVzY3JpcHRpb24s
IEdUS19XSURHRVQobWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSkpOwotfQotCi12
b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYg
c3ViTWVudUl0ZW1zKQotewotICAgIENvbnRleHRNZW51IG1lbnUocGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24oc3ViTWVudUl0ZW1zKSk7Ci0gICAgc2V0U3ViTWVudSgmbWVudSk7Ci19Ci0KLXZvaWQg
Q29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wgc2hvdWxkQ2hlY2spCi17Ci0gICAgR3Rr
QWN0aW9uKiBhY3Rpb24gPSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uICYmIEdUS19JU19U
T0dHTEVfQUNUSU9OKGFjdGlvbikpCi0gICAgICAgIGd0a190b2dnbGVfYWN0aW9uX3NldF9hY3Rp
dmUoR1RLX1RPR0dMRV9BQ1RJT04oYWN0aW9uKSwgc2hvdWxkQ2hlY2spOwotfQotCi1ib29sIENv
bnRleHRNZW51SXRlbTo6Y2hlY2tlZCgpIGNvbnN0Ci17Ci0gICAgR3RrQWN0aW9uKiBhY3Rpb24g
PSBndGtBY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uICYmIEdUS19JU19UT0dHTEVfQUNUSU9OKGFj
dGlvbikpCi0gICAgICAgIHJldHVybiBndGtfdG9nZ2xlX2FjdGlvbl9nZXRfYWN0aXZlKEdUS19U
T0dHTEVfQUNUSU9OKGFjdGlvbikpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb250
ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAotewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0g
Z3RrQWN0aW9uKCk7Ci0gICAgcmV0dXJuIGFjdGlvbiA/IGd0a19hY3Rpb25fZ2V0X3NlbnNpdGl2
ZShhY3Rpb24pIDogZmFsc2U7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVk
KGJvb2wgc2hvdWxkRW5hYmxlKQotewotICAgIEd0a0FjdGlvbiogYWN0aW9uID0gZ3RrQWN0aW9u
KCk7Ci0gICAgaWYgKGFjdGlvbikKLSAgICAgICAgZ3RrX2FjdGlvbl9zZXRfc2Vuc2l0aXZlKGFj
dGlvbiwgc2hvdWxkRW5hYmxlKTsKLX0KLQotR3RrQWN0aW9uKiBDb250ZXh0TWVudUl0ZW06Omd0
a0FjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0a19hY3RpdmF0YWJsZV9nZXRfcmVsYXRl
ZF9hY3Rpb24oR1RLX0FDVElWQVRBQkxFKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikpOwotfQotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0N1cnNvckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYjkw
NWE5NjRkZTc2MjM0MjA5YzJmNWM5MWM2Y2RmNzkwNTQyMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1
cnNvckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkN1cnNvckd0ay5o
IgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPGdk
ay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR1JlZlB0cjxHZGtDdXJzb3I+IGNy
ZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclR5cGUgY3Vyc29yVHlwZSkKLXsKLSAgICBDdXN0
b21DdXJzb3IgY3Vyc29yID0gQ3VzdG9tQ3Vyc29yc1tjdXJzb3JUeXBlXTsKLSAgICBHUmVmUHRy
PEdka0N1cnNvcj4gYyA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ld19mcm9tX25hbWUoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKSwgY3Vyc29yLm5hbWUpKTsKLSAgICBpZiAoYykKLSAgICAgICAg
cmV0dXJuIGM7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzb3VyY2UgPSBhZG9wdFJl
ZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjb25zdF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihjdXJzb3IuYml0cyksIENBSVJPX0ZPUk1BVF9BMSwgMzIsIDMyLCA0KSk7Ci0gICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbWFzayA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zvcl9kYXRhKGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGN1cnNvci5tYXNr
X2JpdHMpLCBDQUlST19GT1JNQVRfQTEsIDMyLCAzMiwgNCkpOwotICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShD
QUlST19GT1JNQVRfQTEsIDMyLCAzMikpOwotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY3IuZ2V0KCksIHNvdXJjZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fpcm9fbWFza19z
dXJmYWNlKGNyLmdldCgpLCBtYXNrLmdldCgpLCAwLCAwKTsKLQotICAgIEdSZWZQdHI8R2RrUGl4
YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZh
Y2UuZ2V0KCksIDAsIDAsIDMyLCAzMikpOwotICAgIHJldHVybiBhZG9wdEdSZWYoZ2RrX2N1cnNv
cl9uZXdfZnJvbV9waXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgcGl4YnVmLmdldCgp
LCBjdXJzb3IuaG90X3gsIGN1cnNvci5ob3RfeSkpOwotfQotCi1zdGF0aWMgR1JlZlB0cjxHZGtD
dXJzb3I+IGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBo
b3RTcG90KQotewotICAgIEludFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RT
cG90KGltYWdlLCBob3RTcG90KTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRv
cHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7Ci0gICAgcmV0dXJuIGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYu
Z2V0KCksIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSkpOwotfQot
Ci12b2lkIEN1cnNvcjo6ZW5zdXJlUGxhdGZvcm1DdXJzb3IoKSBjb25zdAotewotICAgIGlmICht
X3BsYXRmb3JtQ3Vyc29yIHx8IG1fdHlwZSA9PSBDdXJzb3I6OlBvaW50ZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBDdXJzb3I6OlBvaW50ZXI6
Ci0gICAgICAgIC8vIEEgbnVsbCBHZGtDdXJzb3IgaXMgdGhlIGRlZmF1bHQgY3Vyc29yIGZvciB0
aGUgd2luZG93LgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gMDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDdXJzb3I6OkNyb3NzOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRv
cHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19DUk9TUykpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEN1cnNvcjo6SGFuZDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihn
ZGtfY3Vyc29yX25ldyhHREtfSEFORDIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJz
b3I6OklCZWFtOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJz
b3JfbmV3KEdES19YVEVSTSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6V2Fp
dDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhH
REtfV0FUQ0gpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkhlbHA6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1FVRVNU
SU9OX0FSUk9XKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpNb3ZlOgotICAg
IGNhc2UgQ3Vyc29yOjpNaWRkbGVQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
YWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19GTEVVUikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6
Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RL
X1JJR0hUX1NJREUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoUmVz
aXplOgotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9TSURFKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RSZXNpemU6Ci0gICAgY2FzZSBDdXJz
b3I6Ok5vcnRoRWFzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdS
ZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9SSUdIVF9DT1JORVIpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6Tm9y
dGhXZXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtf
Y3Vyc29yX25ldyhHREtfVE9QX0xFRlRfQ09STkVSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6U291dGhQYW5uaW5nOgot
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19C
T1RUT01fU0lERSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0
UmVzaXplOgotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgotICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fUklHSFRf
Q09STkVSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RSZXNp
emU6Ci0gICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9MRUZUX0NPUk5F
UikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6V2VzdFJlc2l6ZToKLSAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGFkb3B0R1JlZihnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9T
SURFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFNvdXRoUmVzaXpl
OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdE
S19UT1BfVEVFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpFYXN0V2VzdFJl
c2l6ZToKLSAgICBjYXNlIEN1cnNvcjo6V2VzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lERSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplOgotICAg
IGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemU6Ci0gICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklORykpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Q29sdW1uUmVzaXplOgotICAgICAgICBtX3BsYXRm
b3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TQl9IX0RPVUJMRV9BUlJP
VykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Um93UmVzaXplOgotICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gYWRvcHRHUmVmKGdka19jdXJzb3JfbmV3KEdES19TQl9WX0RP
VUJMRV9BUlJPVykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxU
ZXh0OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9t
Q3Vyc29yVmVydGljYWxUZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNl
bGw6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBhZG9wdEdSZWYoZ2RrX2N1cnNvcl9uZXco
R0RLX1BMVVMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51
OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3VzdG9tQ3Vy
c29yQ29udGV4dE1lbnUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6QWxpYXM6
Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJz
b3JBbGlhcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpQcm9ncmVzczoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclBy
b2dyZXNzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDdXJzb3I6Ok5vRHJvcDoKLSAgICBj
YXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0
ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvck5vRHJvcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ3Vyc29yOjpDb3B5OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRD
dXJzb3IoQ3VzdG9tQ3Vyc29yQ29weSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29y
OjpOb25lOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlTmFtZWRDdXJzb3IoQ3Vz
dG9tQ3Vyc29yTm9uZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpab29tSW46
Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJz
b3Jab29tSW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6Wm9vbU91dDoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvclpv
b21PdXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6R3JhYjoKLSAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZU5hbWVkQ3Vyc29yKEN1c3RvbUN1cnNvckdyYWIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6Ci0gICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBjcmVhdGVOYW1lZEN1cnNvcihDdXN0b21DdXJzb3JHcmFiYmluZyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ3Vyc29yOjpDdXN0b206Ci0gICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBjcmVhdGVDdXN0b21DdXJzb3IobV9pbWFnZS5nZXQoKSwgbV9ob3RTcG90KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1DdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3Im
IG90aGVyKQotICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKLSAgICAsIG1faW1hZ2Uob3RoZXIu
bV9pbWFnZSkKLSAgICAsIG1faG90U3BvdChvdGhlci5tX2hvdFNwb3QpCi0gICAgLCBtX3BsYXRm
b3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpCi17Ci19Ci0KLUN1cnNvciYgQ3Vyc29y
OjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBtX3R5cGUgPSBvdGhlci5t
X3R5cGU7Ci0gICAgbV9pbWFnZSA9IG90aGVyLm1faW1hZ2U7Ci0gICAgbV9ob3RTcG90ID0gb3Ro
ZXIubV9ob3RTcG90OwotICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vy
c29yOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotQ3Vyc29yOjp+Q3Vyc29yKCkKLXsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1Njg5MTliYTMzNWEyYWU1NGYyOGE0NjE5MDU4M2IzYTRiYTI0NjYwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCww
IEBACi0vKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0gKiBWZXJzaW9uOiBNUEwg
MS4xL0dQTCAyLjAvTEdQTCAyLjEKLSAqCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFy
ZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAo
dGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdh
cmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBiYXNpcywKLSAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vu
c2UuCi0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0g
KiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFRpbSBD
b3BwZXJmaWVsZC4KLSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVy
IGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb250cmlidXRvcihzKToKLSAqICAgVGltIENvcHBlcmZp
ZWxkIDx0aW1lY29wQG5ldHdvcmsuZW1haWwubmUuanA+Ci0gKiAgIENocmlzdGlhbiBEeXdhbiA8
Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVu
dHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgotICogZWl0aGVy
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAi
R1BMIiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zp
c2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0gKiBv
ZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9y
IHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotICogdXNlIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIK
LSAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNl
IHRoZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBi
eSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotICogdGhlIHByb3Zp
c2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSB1bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0
aGUgTEdQTC4KLSAqCi0gKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwotCi0jaWZu
ZGVmIEN1cnNvckd0a19oCi0jZGVmaW5lIEN1cnNvckd0a19oCi0KLSNpbmNsdWRlICJDdXJzb3Iu
aCIKLQotLyoKLSBUaGVzZSBjdXJzb3JzIGFyZSBjb3BpZWQgZnJvbSBNb3ppbGxhIGNvZGU6Ci0g
IGh0dHA6Ly9seHIubW96aWxsYS5vcmcvbW96aWxsYTEuOC9zb3VyY2Uvd2lkZ2V0L3NyYy9ndGsy
L25zR3RrQ3Vyc29ycy5oCi0qLwotCi0vKiBNT1pfQ1VSU09SX1ZFUlRJQ0FMX1RFWFQgKi8KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel92ZXJ0aWNhbF90ZXh0X2JpdHNbXSA9IHsKLSAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg0
MCwgMHgwMCwgMHgwMCwKLSAgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZiwgMHgw
MCwgMHgwMCwgMHgwNiwgMHg2MCwgMHgwMCwgMHgwMCwKLSAgMHgwMiwgMHg0MCwgMHgwMCwgMHgw
MCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9
OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfdmVydGljYWxfdGV4dF9tYXNrX2Jp
dHNbXSA9IHsKLSAgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgw
MCwgMHgwZiwgMHhmMCwgMHgwMCwgMHgwMCwKLSAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHhm
ZSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLSAgMHgwZiwgMHhm
MCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCB9OwotCi0vKiBNT1pfQ1VSU09SX0NPTlRFWFRfTUVOVSAqLwotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgbW96X21lbnVfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAot
ICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAwLCAw
eDAwLCAweDAwLCAweGZjLCAweGZkLCAweDAwLCAweDAwLAotICAweGZjLCAweGZmLCAweDAwLCAw
eDAwLCAweDdjLCAweDg0LCAweDAwLCAweDAwLCAweDZjLCAweGZjLCAweDAwLCAweDAwLAotICAw
eGM0LCAweDg0LCAweDAwLCAweDAwLCAweGMwLCAweGZjLCAweDAwLCAweDAwLCAweDgwLCAweDg1
LCAweDAwLCAweDAwLAotICAweDgwLCAweGZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIG1vel9tZW51X21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAw
LAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdl
LCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGZk
LCAweDAwLCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLAotICAweGZlLCAweGZmLCAweDAx
LCAweDAwLCAweGZlLCAweGZmLCAweDAxLCAweDAwLCAweGZlLCAweGZlLCAweDAxLCAweDAwLAot
ICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAweGZmLCAweDAxLCAweDAwLCAweGMwLCAw
eGZmLCAweDAxLCAweDAwLAotICAweGMwLCAweGZmLCAweDAxLCAweDAwLCAweDgwLCAweGZkLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9D
VVJTT1JfQ09QWSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2NvcHlfYml0c1td
ID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDA0LCAweDAwLCAweDAwLCAweDAwLAotICAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAw
eDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDAwLAotICAweDdjLCAweDAwLCAw
eDAwLCAweDAwLCAweGZjLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAxLCAweDAwLCAweDAw
LAotICAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAweDMwLCAweDAwLCAweDAwLCAweDZj
LCAweDMwLCAweDAwLCAweDAwLAotICAweGM0LCAweGZjLCAweDAwLCAweDAwLCAweGMwLCAweGZj
LCAweDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLAotICAweDgwLCAweDMxLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9jb3B5X21hc2tfYml0
c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAw
LCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNl
LCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAotICAweGZlLCAweDAw
LCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAw
eDAwLAotICAweGZlLCAweDM3LCAweDAwLCAweDAwLCAweGZlLCAweDdiLCAweDAwLCAweDAwLCAw
eGZlLCAweGZjLCAweDAwLCAweDAwLAotICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAweGU0LCAw
eGZmLCAweDAxLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLAotICAweGMwLCAweDdiLCAw
eDAwLCAweDAwLCAweDgwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfQUxJQVMgKi8KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIG1vel9hbGlhc19iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MGMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4
MDAsIDB4MDAsCi0gIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4MDAsCi0gIDB4ZmMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4
N2MsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZTAsIDB4MDAsIDB4MDAsCi0gIDB4YzQsIDB4
ZjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTksIDB4MDAs
IDB4MDAsCi0gIDB4ODAsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIgbW96X2FsaWFzX21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDFlLCAweDAwLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAw
LCAweDAwLCAweDAwLAotICAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAw
LCAweDAwLCAweGZlLCAweDAzLCAweDAwLCAweDAwLAotICAweGZlLCAweGY3LCAweDAwLCAweDAw
LCAweGZlLCAweGZiLCAweDAxLCAweDAwLCAweGZlLCAweGYwLCAweDAxLCAweDAwLAotICAweGVl
LCAweGY5LCAweDAxLCAweDAwLCAweGU0LCAweGY5LCAweDAxLCAweDAwLCAweGMwLCAweGJmLCAw
eDAwLCAweDAwLAotICAweGMwLCAweDNmLCAweDAwLCAweDAwLCAweDgwLCAweDE5LCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1Jf
Wk9PTV9JTiAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21faW5fYml0c1td
ID0gewotICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAw
eDAyLCAweDA0LCAweDAwLCAweDAwLAotICAweDYyLCAweDA0LCAweDAwLCAweDAwLCAweDYxLCAw
eDA4LCAweDAwLCAweDAwLCAweGY5LCAweDA5LCAweDAwLCAweDAwLAotICAweGY5LCAweDA5LCAw
eDAwLCAweDAwLCAweDYxLCAweDA4LCAweDAwLCAweDAwLCAweDYyLCAweDA0LCAweDAwLCAweDAw
LAotICAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBmLCAweDAwLCAweDAwLCAweGYw
LCAweDFjLCAweDAwLCAweDAwLAotICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcw
LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel96b29tX2luX21hc2tf
Yml0c1tdID0gewotICAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAw
eDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAw
eGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLAotICAweGZmLCAw
eDBmLCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAw
LCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAw
LCAweGYwLCAweDFjLCAweDAwLCAweDAwLAotICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAw
LCAweDcwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLAotICAweDAwLCAweDQw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfWk9PTV9PVVQgKi8KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjaGFyIG1vel96b29tX291dF9iaXRzW10gPSB7Ci0gIDB4ZjAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAs
Ci0gIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4Zjks
IDB4MDksIDB4MDAsIDB4MDAsCi0gIDB4ZjksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgs
IDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4MDQsIDB4MDAs
IDB4MDAsIDB4MGMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
ZTAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgbW96X3pvb21fb3V0X21hc2tfYml0c1tdID0gewotICAweGYwLCAw
eDAwLCAweDAwLCAweDAwLCAweGZjLCAweDAzLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAw
LCAweDAwLAotICAweGZlLCAweDA3LCAweDAwLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweDAw
LCAweGZmLCAweDBmLCAweDAwLCAweDAwLAotICAweGZmLCAweDBmLCAweDAwLCAweDAwLCAweGZm
LCAweDBmLCAweDAwLCAweDAwLCAweGZlLCAweDA3LCAweDAwLCAweDAwLAotICAweGZlLCAweDA3
LCAweDAwLCAweDAwLCAweGZjLCAweDBmLCAweDAwLCAweDAwLCAweGYwLCAweDFjLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAw
eDAwLCAweGUwLCAweDAwLCAweDAwLAotICAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8q
IE1PWl9DVVJTT1JfTk9UX0FMTE9XRUQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1v
el9ub3RfYWxsb3dlZF9iaXRzW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAs
IDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4N2YsIDB4MDAsIDB4MDAsCi0gIDB4ZjAsIDB4ZjAs
IDB4MDAsIDB4MDAsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDMsIDB4
MDAsCi0gIDB4ZWMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDcsIDB4MDAsIDB4
ODYsIDB4MDMsIDB4MDYsIDB4MDAsCi0gIDB4MDYsIDB4MDcsIDB4MDYsIDB4MDAsIDB4MDYsIDB4
MGUsIDB4MDYsIDB4MDAsIDB4MDYsIDB4MWMsIDB4MDYsIDB4MDAsCi0gIDB4MGUsIDB4MzgsIDB4
MDcsIDB4MDAsIDB4MGMsIDB4NzAsIDB4MDMsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4MDMsIDB4MDAs
Ci0gIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZTAs
IDB4N2YsIDB4MDAsIDB4MDAsCi0gIDB4ODAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo
YXIgbW96X25vdF9hbGxvd2VkX21hc2tfYml0c1tdID0gewotICAweDgwLCAweDFmLCAweDAwLCAw
eDAwLCAweGUwLCAweDdmLCAweDAwLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDAwLAotICAw
eGY4LCAweGZmLCAweDAxLCAweDAwLCAweGZjLCAweGYwLCAweDAzLCAweDAwLCAweGZlLCAweGMw
LCAweDA3LCAweDAwLAotICAweGZlLCAweDgxLCAweDA3LCAweDAwLCAweGZmLCAweDgzLCAweDBm
LCAweDAwLCAweGNmLCAweDA3LCAweDBmLCAweDAwLAotICAweDhmLCAweDBmLCAweDBmLCAweDAw
LCAweDBmLCAweDFmLCAweDBmLCAweDAwLCAweDBmLCAweDNlLCAweDBmLCAweDAwLAotICAweDFm
LCAweGZjLCAweDBmLCAweDAwLCAweDFlLCAweGY4LCAweDA3LCAweDAwLCAweDNlLCAweGYwLCAw
eDA3LCAweDAwLAotICAweGZjLCAweGYwLCAweDAzLCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAw
eDAwLCAweGYwLCAweGZmLCAweDAwLCAweDAwLAotICAweGUwLCAweDdmLCAweDAwLCAweDAwLCAw
eDgwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1Jf
U1BJTk5JTkcgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vel9zcGlubmluZ19iaXRz
W10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4N2MsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDEsIDB4MDAsIDB4
MDAsCi0gIDB4ZmMsIDB4M2IsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MzgsIDB4MDAsIDB4MDAsIDB4
NmMsIDB4NTQsIDB4MDAsIDB4MDAsCi0gIDB4YzQsIDB4ZGMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4
NDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzksIDB4MDAsIDB4MDAsCi0gIDB4ODAsIDB4MzksIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
Ci0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0g
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X3NwaW5uaW5nX21h
c2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAw
LCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDAwLAotICAweDFlLCAweDAwLCAweDAwLCAweDAw
LCAweDNlLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLAotICAweGZl
LCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDAxLCAweDAwLCAweDAwLCAweGZlLCAweDNiLCAw
eDAwLCAweDAwLAotICAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAw
eDAwLCAweGZlLCAweGZlLCAweDAwLCAweDAwLAotICAweGVlLCAweGZmLCAweDAxLCAweDAwLCAw
eGU0LCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweDdmLCAweDAwLCAweDAwLAotICAweGMwLCAw
eDdmLCAweDAwLCAweDAwLCAweDgwLCAweDM5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfTk9ORSAqLwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIgbW96X25vbmVfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBjaGFyIG1vel9ub25lX21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJT
T1JfSEFORF9HUkFCICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfaGFuZF9ncmFi
X2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKLSAgMHg2MCwgMHgzOSwgMHgwMCwgMHgwMCwg
MHg5MCwgMHg0OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0OSwgMHgwMSwgMHgwMCwKLSAgMHgyMCwg
MHhjOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0OSwgMHgwMiwgMHgwMCwgMHg1OCwgMHg0MCwgMHgw
MiwgMHgwMCwKLSAgMHg2NCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHgwMCwgMHgwMSwgMHgw
MCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKLSAgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgx
MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwKLSAgMHg0MCwgMHg0
MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb3pfaGFuZF9n
cmFiX21hc2tfYml0c1tdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2
LCAweDAwLCAweDAwLCAweDYwLCAweDNmLCAweDAwLCAweDAwLAotICAweGYwLCAweDdmLCAweDAw
LCAweDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGY4LCAweGZmLCAweDAzLCAweDAwLAot
ICAweGYwLCAweGZmLCAweDA3LCAweDAwLCAweGY4LCAweGZmLCAweDA3LCAweDAwLCAweGZjLCAw
eGZmLCAweDA3LCAweDAwLAotICAweGZlLCAweGZmLCAweDA3LCAweDAwLCAweGZlLCAweGZmLCAw
eDAzLCAweDAwLCAweGZjLCAweGZmLCAweDAzLCAweDAwLAotICAweGY4LCAweGZmLCAweDAzLCAw
eDAwLCAweGY4LCAweGZmLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAxLCAweDAwLAotICAw
eGUwLCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweGZmLCAweDAwLCAweDAwLCAweGMwLCAweGZm
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLS8qIE1PWl9DVVJTT1JfSEFORF9HUkFCQklORyAq
Lwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW96X2hhbmRfZ3JhYmJpbmdfYml0c1tdID0g
ewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweGMwLCAweDM2LCAweDAw
LCAweDAwLCAweDIwLCAweGM5LCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAxLCAweDAwLAot
ICAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAxLCAweDAwLCAweDEwLCAw
eDAwLCAweDAxLCAweDAwLAotICAweDEwLCAweDAwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAw
eDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAwLAotICAweDQwLCAweDQwLCAweDAwLCAw
eDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDAwLAotICAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwIH07Ci0KLXN0YXRpYyBjb25zdCAgdW5zaWduZWQgY2hhciBtb3pfaGFuZF9ncmFiYmluZ19t
YXNrX2JpdHNbXSA9IHsKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgzNiwgMHgwMCwgMHgwMCwKLSAgMHhl
MCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwg
MHgwMywgMHgwMCwKLSAgMHhlMCwgMHhmZiwgMHgwMywgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMywg
MHgwMCwgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwKLSAgMHhmOCwgMHhmZiwgMHgwMywgMHgwMCwg
MHhmOCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMSwgMHgwMCwKLSAgMHhlMCwg
MHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHg3ZiwgMHgw
MCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCB9OwotCi1lbnVtIEN1c3RvbUN1cnNvclR5cGUgewotICAgIEN1c3Rv
bUN1cnNvckNvcHkgPSAwLAotICAgIEN1c3RvbUN1cnNvckFsaWFzLAotICAgIEN1c3RvbUN1cnNv
ckNvbnRleHRNZW51LAotICAgIEN1c3RvbUN1cnNvclpvb21JbiwKLSAgICBDdXN0b21DdXJzb3Ja
b29tT3V0LAotICAgIEN1c3RvbUN1cnNvclZlcnRpY2FsVGV4dCwKLSAgICBDdXN0b21DdXJzb3JO
b0Ryb3AsCi0gICAgQ3VzdG9tQ3Vyc29yUHJvZ3Jlc3MsCi0gICAgQ3VzdG9tQ3Vyc29yTm9uZSwK
LSAgICBDdXN0b21DdXJzb3JHcmFiLAotICAgIEN1c3RvbUN1cnNvckdyYWJiaW5nLAotfTsKLQot
dHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogYml0czsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtYXNrX2JpdHM7Ci0gICAg
aW50IGhvdF94OwotICAgIGludCBob3RfeTsKLX0gQ3VzdG9tQ3Vyc29yOwotCi0vLyBjcmVhdGUg
Y3VzdG9tIHBpeG1hcCBjdXJzb3IgZnJvbSBjdXJzb3JzIGluIG5zR1RLQ3Vyc29yRGF0YS5oCi1z
dGF0aWMgY29uc3QgQ3VzdG9tQ3Vyc29yIEN1c3RvbUN1cnNvcnNbXSA9IHsKLSAgICB7ICJjb3B5
IiwgbW96X2NvcHlfYml0cywgbW96X2NvcHlfbWFza19iaXRzLCAyLCAyIH0sCi0gICAgeyAiYWxp
YXMiLCBtb3pfYWxpYXNfYml0cywgbW96X2FsaWFzX21hc2tfYml0cywgMiwgMiB9LAotICAgIHsg
ImNvbnRleHQtbWVudSIsIG1vel9tZW51X2JpdHMsIG1vel9tZW51X21hc2tfYml0cywgMiwgMiB9
LAotICAgIHsgInpvb20taW4iLCBtb3pfem9vbV9pbl9iaXRzLCBtb3pfem9vbV9pbl9tYXNrX2Jp
dHMsIDYsIDYgfSwKLSAgICB7ICJ6b29tLW91dCIsIG1vel96b29tX291dF9iaXRzLCBtb3pfem9v
bV9vdXRfbWFza19iaXRzLCA2LCA2IH0sCi0gICAgeyAidmVydGljYWwtdGV4dCIsIG1vel92ZXJ0
aWNhbF90ZXh0X2JpdHMsIG1vel92ZXJ0aWNhbF90ZXh0X21hc2tfYml0cywgOCwgNCB9LAotICAg
IHsgImRuZC1uby1kcm9wIiwgbW96X25vdF9hbGxvd2VkX2JpdHMsIG1vel9ub3RfYWxsb3dlZF9t
YXNrX2JpdHMsIDksICA5IH0sCi0gICAgeyAibGVmdF9wdHJfd2F0Y2giLCBtb3pfc3Bpbm5pbmdf
Yml0cywgbW96X3NwaW5uaW5nX21hc2tfYml0cywgMiwgIDJ9LAotICAgIHsgIm5vbmUiLCBtb3pf
bm9uZV9iaXRzLCBtb3pfbm9uZV9tYXNrX2JpdHMsIDAsIDAgfSwKLSAgICB7ICJncmFiIiwgbW96
X2hhbmRfZ3JhYl9iaXRzLCBtb3pfaGFuZF9ncmFiX21hc2tfYml0cywgMTAsIDEwIH0sCi0gICAg
eyAiZ3JhYmJpbmciLCBtb3pfaGFuZF9ncmFiYmluZ19iaXRzLCBtb3pfaGFuZF9ncmFiYmluZ19t
YXNrX2JpdHMsIDEwLCAxMCB9Ci19OwotCi0jZW5kaWYgLy8gQ3Vyc29yR3RrX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWRmYzY2ZTAxNWU1MDIyNjc4OGMyMTQ3NjhhMTViMjkxMzY4NDNiOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydGluIFJvYmluc29uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRGF0YU9iamVjdEd0ay5oIgotCi0jaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IHZvaWQgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IFVDaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOwot
ICAgIHN0YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNoYXJhY3RlciA9ICcgJzsKLSAgICBzdHIucmVw
bGFjZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7Ci19Ci0KLVN0
cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9yYW5nZSkKLSAg
ICAgICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKLSAgICByZXR1cm4gbV90ZXh0OwotfQotCi1T
dHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKLXsKLSAgICBpZiAobV9yYW5nZSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7Ci0gICAgcmV0dXJuIG1f
bWFya3VwOwotfQotCi12b2lkIERhdGFPYmplY3RHdGs6OnNldFRleHQoY29uc3QgU3RyaW5nJiBu
ZXdUZXh0KQotewotICAgIG1fcmFuZ2UgPSAwOwotICAgIG1fdGV4dCA9IG5ld1RleHQ7Ci0gICAg
cmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UobV90ZXh0KTsKLX0KLQotdm9pZCBEYXRh
T2JqZWN0R3RrOjpzZXRNYXJrdXAoY29uc3QgU3RyaW5nJiBuZXdNYXJrdXApCi17Ci0gICAgbV9y
YW5nZSA9IDA7Ci0gICAgbV9tYXJrdXAgPSBuZXdNYXJrdXA7Ci19Ci0KLXZvaWQgRGF0YU9iamVj
dEd0azo6c2V0VVJJTGlzdChjb25zdCBTdHJpbmcmIHVyaUxpc3RTdHJpbmcpCi17Ci0gICAgbV91
cmlMaXN0ID0gdXJpTGlzdFN0cmluZzsKLQotICAgIC8vIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5
IGZyb206IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAuCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgY29kZSBjcm9zcy1wbGF0Zm9ybSBldmVudHVhbGx5
LgotCi0gICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVy
LCBmb3IgY29tcGF0aWJpbGl0eQotICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxu
IGhlcmUuCi0gICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKLSAgICB1cmlMaXN0U3RyaW5nLnNw
bGl0KCdcbicsIHVyaUxpc3QpOwotCi0gICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkg
dGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVtYmVyLgotICAgIC8vIEluIGNhc2Ug
bm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikK
LSAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRo
ZSBIVE1MNSBzcGVjIChzZWUKLSAgICAvLyAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVy
IGludGVyZmFjZXMiKS4gQWxzbyBleHRyYWN0IGFsbCBmaWxlbmFtZXMKLSAgICAvLyBmcm9tIHRo
ZSBVUkkgbGlzdC4KLSAgICBib29sIHNldFVSTCA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJpbmcmIGxpbmUgPSB1
cmlMaXN0W2ldOwotICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAg
ICAgaWYgKGxpbmUuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChsaW5lWzBdID09ICcjJykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEtVUkwg
dXJsID0gS1VSTChLVVJMKCksIGxpbmUpOwotICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgewot
ICAgICAgICAgICAgaWYgKCFzZXRVUkwpIHsKLSAgICAgICAgICAgICAgICBtX3VybCA9IHVybDsK
LSAgICAgICAgICAgICAgICBzZXRVUkwgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBm
aWxlbmFtZShnX2ZpbGVuYW1lX2Zyb21fdXJpKGxpbmUudXRmOCgpLmRhdGEoKSwgMCwgJmVycm9y
Lm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoIWVycm9yICYmIGZpbGVuYW1lKQotICAgICAg
ICAgICAgICAgIG1fZmlsZW5hbWVzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdl
dCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJM
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKLXsKLSAgICBtX3VybCA9IHVy
bDsKLSAgICBtX3VyaUxpc3QgPSB1cmw7Ci0gICAgc2V0VGV4dCh1cmwuc3RyaW5nKCkpOwotCi0g
ICAgU3RyaW5nIGFjdHVhbExhYmVsKGxhYmVsKTsKLSAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0
eSgpKQotICAgICAgICBhY3R1YWxMYWJlbCA9IHVybDsKLQotICAgIFN0cmluZ0J1aWxkZXIgbWFy
a3VwOwotICAgIG1hcmt1cC5hcHBlbmQoIjxhIGhyZWY9XCIiKTsKLSAgICBtYXJrdXAuYXBwZW5k
KHVybC5zdHJpbmcoKSk7Ci0gICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7Ci0gICAgR093blB0cjxn
Y2hhcj4gZXNjYXBlZChnX21hcmt1cF9lc2NhcGVfdGV4dChhY3R1YWxMYWJlbC51dGY4KCkuZGF0
YSgpLCAtMSkpOwotICAgIG1hcmt1cC5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChlc2NhcGVkLmdl
dCgpKSk7Ci0gICAgbWFya3VwLmFwcGVuZCgiPC9hPiIpOwotICAgIHNldE1hcmt1cChtYXJrdXAu
dG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJUZXh0KCkKLXsKLSAg
ICBtX3JhbmdlID0gMDsKLSAgICBtX3RleHQgPSAiIjsKLX0KLQotdm9pZCBEYXRhT2JqZWN0R3Rr
OjpjbGVhck1hcmt1cCgpCi17Ci0gICAgbV9yYW5nZSA9IDA7Ci0gICAgbV9tYXJrdXAgPSAiIjsK
LX0KLQotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkgY29uc3QKLXsKLSAgICBpZiAo
aGFzVGV4dCgpKQotICAgICAgICByZXR1cm4gdGV4dCgpOwotCi0gICAgaWYgKGhhc1VSTCgpKQot
ICAgICAgICByZXR1cm4gdXJsKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQg
RGF0YU9iamVjdEd0azo6Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMoKQotewotICAgIG1fdGV4dCA9
ICIiOwotICAgIG1fbWFya3VwID0gIiI7Ci0gICAgbV91cmlMaXN0ID0gIiI7Ci0gICAgbV91cmwg
PSBLVVJMKCk7Ci0gICAgbV9pbWFnZSA9IDA7Ci0gICAgbV9yYW5nZSA9IDA7Ci19Ci0KLXZvaWQg
RGF0YU9iamVjdEd0azo6Y2xlYXJBbGwoKQotewotICAgIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVz
KCk7Ci0gICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKLX0KLQotRGF0YU9iamVjdEd0ayogRGF0YU9i
amVjdEd0azo6Zm9yQ2xpcGJvYXJkKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQotewotICAgIHN0
YXRpYyBIYXNoTWFwPEd0a0NsaXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+IG9iamVj
dE1hcDsKLQotICAgIGlmICghb2JqZWN0TWFwLmNvbnRhaW5zKGNsaXBib2FyZCkpIHsKLSAgICAg
ICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpjcmVh
dGUoKTsKLSAgICAgICAgb2JqZWN0TWFwLnNldChjbGlwYm9hcmQsIGRhdGFPYmplY3QpOwotICAg
ICAgICByZXR1cm4gZGF0YU9iamVjdC5nZXQoKTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPEd0a0Ns
aXBib2FyZCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+OjppdGVyYXRvciBpdCA9IG9iamVjdE1h
cC5maW5kKGNsaXBib2FyZCk7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUyODFiMWUxNzhiZjk0N2RhMmMwODBkMzgzZWFhNTA2YjZhNjM5
ODAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAorKysgL2Rldi9udWxsCkBAIC0x
LDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnRpbiBSb2JpbnNvbgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBEYXRhT2JqZWN0R3RrX2gK
LSNkZWZpbmUgRGF0YU9iamVjdEd0a19oCi0KLSNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1
ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YU9iamVjdEd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPERh
dGFPYmplY3RHdGs+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhT2JqZWN0
R3RrPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2Jq
ZWN0R3RrKCkpOwotICAgIH0KLQotICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB1cmlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV91
cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8UmFuZ2U+
IG5ld1JhbmdlKSB7IG1fcmFuZ2UgPSBuZXdSYW5nZTsgfQotICAgIHZvaWQgc2V0SW1hZ2UoR2Rr
UGl4YnVmKiBuZXdJbWFnZSkgeyBtX2ltYWdlID0gbmV3SW1hZ2U7IH0KLSAgICB2b2lkIHNldFVS
TChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBoYXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzTWFy
a3VwKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9Ci0g
ICAgYm9vbCBoYXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7
IH0KLSAgICBib29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYg
bV91cmwuaXNWYWxpZCgpOyB9Ci0gICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVy
biAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2U7IH0KLSAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0g
IiI7IH0KLSAgICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsgfQotICAgIHZvaWQg
Y2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IDA7IH0KLQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7
Ci0gICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJp
bmcmKTsKLSAgICB2b2lkIHNldE1hcmt1cChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldFVS
SUxpc3QoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIHVybExhYmVsKCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Ci0gICAgdm9pZCBjbGVhckFsbCgpOwot
ICAgIHZvaWQgY2xlYXJUZXh0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmt1cCgpOwotCi0gICAgc3Rh
dGljIERhdGFPYmplY3RHdGsqIGZvckNsaXBib2FyZChHdGtDbGlwYm9hcmQqKTsKLQotcHJpdmF0
ZToKLSAgICBTdHJpbmcgbV90ZXh0OwotICAgIFN0cmluZyBtX21hcmt1cDsKLSAgICBLVVJMIG1f
dXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFt
ZXM7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IG1faW1hZ2U7Ci0gICAgUmVmUHRyPFJhbmdlPiBt
X3JhbmdlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDJhNDc0OWQzM2NiYjI5OWM4ZGQ2NmUzNWMwMDkxYWIyOGYxMGFlNy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAg
QEAKLS8qCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJEcmFnRGF0YS5oIgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCi0jaW5jbHVk
ZSAiQ2xpcGJvYXJkR3RrLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2Uo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIERyYWdEYXRh
Ojpjb250YWluc0ZpbGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRh
LT5oYXNGaWxlbmFtZXMoKTsKLX0KLQotdW5zaWduZWQgRHJhZ0RhdGE6Om51bWJlck9mRmlsZXMo
KSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpLnNp
emUoKTsKLX0KLQotdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJl
c3VsdCkgY29uc3QKLXsKLSAgICByZXN1bHQgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1l
cygpOwotfQotCi1ib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVGV4dCgpOwotfQotCi1TdHJpbmcgRHJh
Z0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9y
bURyYWdEYXRhLT50ZXh0KCk7Ci19Ci0KLUNvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gQ29sb3IoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21w
YXRpYmxlQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnRhaW5zUGxhaW5UZXh0KCkg
fHwgY29udGFpbnNVUkwoMCkgfHwgbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNNYXJrdXAoKSB8fCBj
b250YWluc0NvbG9yKCkgfHwgY29udGFpbnNGaWxlcygpOwotfQotCi1ib29sIERyYWdEYXRhOjpj
b250YWluc1VSTChGcmFtZSogZnJhbWUsIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFt
ZVBvbGljeSkgY29uc3QKLXsKLSAgICByZXR1cm4gIWFzVVJMKGZyYW1lLCBmaWxlbmFtZVBvbGlj
eSkuaXNFbXB0eSgpOwotfQotCi1TdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5h
bWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAot
ewotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNVUkwoKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIGlmIChmaWxlbmFtZVBvbGljeSAhPSBDb252ZXJ0RmlsZW5hbWVzKSB7
Ci0gICAgICAgIEtVUkwgdXJsKEtVUkwoKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT51cmwoKSk7Ci0g
ICAgICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdXJsKG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsKCkpOwot
ICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRpdGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxM
YWJlbCgpOwotICAgIHJldHVybiB1cmw7Ci19Ci0KLQotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+
LCBib29sLCBib29sJikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFz
TWFya3VwKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT5tYXJrdXAo
KSwgIiIpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0ljb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxODc3MWM4Mjk5ZDAxMTU0OTVlZmNjYzUw
MTEyYWNkODRlZDc2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdJY29uLmgi
Ci0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRp
YyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdk
a0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24qIGljb24pCi17Ci0gICAgUmVmUHRyPGNhaXJv
X3Q+IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpKTsK
LSAgICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkpOwotICAgIHJldHVybiBUUlVFOwotfQotI2Vs
c2UKLXN0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dp
ZGdldCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJY29uKiBpY29uKQotewotICAgIGlmICghZ2Rr
X2NhaXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250ZXh0LCAwKSkKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgIGljb24tPmRyYXcoY29udGV4dCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0jZW5k
aWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQotRHJhZ0ljb246OkRyYWdJY29uKCkKLSAgICA6IGlz
Q29tcG9zaXRlZChnZGtfc2NyZWVuX2lzX2NvbXBvc2l0ZWQoZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpKSkKLSAgICAsIG1fd2luZG93KDApCi17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19Q
T1BVUCk7Ci0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVu
dENhbGxiYWNrKSwgdGhpcyk7Ci0jZWxzZQotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3cs
ICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhp
cyk7Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgc3RyYXRlZ3kgb3JpZ2luYWxseSBjb21lcyBmcm9t
IENocm9taXVtOiBzcmMvY2hyb21lL2Jyb3dzZXIvZ3RrL3RhYl9jb250ZW50c19kcmFnX3NvdXJj
ZS5jYwotICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKG1fd2lu
ZG93KTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0NvbG9ybWFwKiByZ2JhID0g
Z2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChzY3JlZW4pOwotICAgIGlmIChyZ2JhKQotICAg
ICAgICBndGtfd2lkZ2V0X3NldF9jb2xvcm1hcChtX3dpbmRvdywgcmdiYSk7Ci0jZWxzZQotICAg
IEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV92aXN1YWwoc2NyZWVuKTsK
LSAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVt
X3Zpc3VhbChzY3JlZW4pOwotICAgIGd0a193aWRnZXRfc2V0X3Zpc3VhbChtX3dpbmRvdywgdmlz
dWFsKTsKLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgotfQotCi1EcmFnSWNvbjo6fkRyYWdJ
Y29uKCkKLXsKLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3dpbmRvdyk7Ci19Ci0KLXZvaWQgRHJhZ0ljb246OmRyYXcoY2Fpcm9fdCogY29udGV4dCkKLXsK
LSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9pbWFnZS5nZXQoKSksCi0gICAgICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2ltYWdlLmdldCgpKSk7
Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7
Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQsIG1faW1hZ2UuZ2V0KCksIDAs
IDApOwotICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Ci19Ci0KLXZvaWQgRHJhZ0ljb246OnNldElt
YWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICBt
X2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZVNpemUgPSBJbnRTaXplKGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGlt
YWdlKSk7Ci0gICAgaWYgKGlzQ29tcG9zaXRlZCkgewotICAgICAgICBndGtfd2luZG93X3Jlc2l6
ZShHVEtfV0lORE9XKG1fd2luZG93KSwgbV9pbWFnZVNpemUud2lkdGgoKSwgbV9pbWFnZVNpemUu
aGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKLSAgICBtX3BpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb0ltYWdlU3VyZmFjZVRvR2RrUGl4
YnVmKGltYWdlKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtE
cmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBJbnRQb2ludCBob3RzcG90KG1faW1hZ2VTaXpl
KTsKLSAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41KTsKLSAgICB1c2VGb3JEcmFnKGNvbnRleHQs
IGhvdHNwb3QpOwotfQotCi12b2lkIERyYWdJY29uOjp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKLXsKLSAgICBpZiAoaXNDb21wb3Np
dGVkKSB7Ci0gICAgICAgIGd0a19kcmFnX3NldF9pY29uX3dpZGdldChjb250ZXh0LCBtX3dpbmRv
dywgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGd0a19kcmFnX3NldF9pY29uX3BpeGJ1Zihjb250
ZXh0LCBtX3BpeGJ1Zi5nZXQoKSwgaG90c3BvdC54KCksIGhvdHNwb3QueSgpKTsKLSNlbHNlCi0g
ICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBtX2ltYWdlLmdldCgpKTsKLSNl
bmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ljb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9EcmFnSWNvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU0MzVkY2JkYTIw
ZTJlZGQ3YmZjMjZmN2IwZmYwOWEyOGI4ODU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERyYWdJY29uX2gKLSNkZWZpbmUgRHJh
Z0ljb25faAotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlIDxSZWZQdHJDYWlyby5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBEcmFnSWNvbiB7Ci1wdWJsaWM6Ci0gICAgRHJhZ0ljb24oKTsKLSAgICB2aXJ0
dWFsIH5EcmFnSWNvbigpOwotCi0gICAgdm9pZCBkcmF3KGNhaXJvX3QqKTsKLSAgICB2b2lkIHNl
dEltYWdlKGNhaXJvX3N1cmZhY2VfdCopOwotICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29u
dGV4dCopOwotICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBv
aW50JiBob3RzcG90KTsKLQotcHJpdmF0ZToKLSAgICBib29sIGlzQ29tcG9zaXRlZDsKLSAgICBH
dGtXaWRnZXQqIG1fd2luZG93OwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2U7
Ci0gICAgSW50U2l6ZSBtX2ltYWdlU2l6ZTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBtX3BpeGJ1ZjsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYg
Ly8gRHJhZ0ljb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJbWFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3YzRjMTQyZTFjZWYzOWQyNGYz
YmVlOWYzNGNiMmVhZDJiZDdlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0ltYWdlR3RrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiAyMDEwIElnYWxpYSBTLkwKLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJEcmFnSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAi
SW1hZ2UuaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0j
aW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFNpemUgZHJh
Z0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgaWYgKGltYWdlKQotICAgICAg
ICByZXR1cm4gSW50U2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSksIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZSkpOwotCi0gICAgcmV0dXJuIEludFNp
emUoMCwgMCk7Ci19Ci0KLXZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSkK
LXsKLSAgICBpZiAoaW1hZ2UpCi0gICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7
Ci19Ci0KLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZs
b2F0U2l6ZSBzY2FsZSkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGludCBuZXdXaWR0aCA9IHNjYWxlLndpZHRoKCkgKiBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF93aWR0aChpbWFnZSk7Ci0gICAgaW50IG5ld0hlaWdodCA9IHNjYWxlLmhlaWdodCgpICogY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKTsKLSAgICBjYWlyb19zdXJmYWNlX3Qq
IHNjYWxlZFN1cmZhY2UgPSBjYWlyb19zdXJmYWNlX2NyZWF0ZV9zaW1pbGFyKGltYWdlLCBDQUlS
T19DT05URU5UX0NPTE9SX0FMUEhBLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIFJlZlB0
cjxjYWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHNjYWxlZFN1cmZhY2Up
KTsKLSAgICBjYWlyb19zY2FsZShjb250ZXh0LmdldCgpLCBzY2FsZS53aWR0aCgpLCBzY2FsZS5o
ZWlnaHQoKSk7Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGNhaXJvX2dldF9zb3VyY2Uo
Y29udGV4dC5nZXQoKSksIENBSVJPX0VYVEVORF9QQUQpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0
X2ZpbHRlcihjYWlyb19nZXRfc291cmNlKGNvbnRleHQuZ2V0KCkpLCBDQUlST19GSUxURVJfQkVT
VCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQuZ2V0KCksIGlt
YWdlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjb250ZXh0LmdldCgpKTsKLQotICAgIGRlbGV0
ZURyYWdJbWFnZShpbWFnZSk7Ci0gICAgcmV0dXJuIHNjYWxlZFN1cmZhY2U7Ci19Ci0KLURyYWdJ
bWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBm
bG9hdCBmcmFjdGlvbikKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGlmICghZ2RrX3NjcmVlbl9pc19jb21wb3NpdGVkKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KSkpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjb250ZXh0
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0RFU1RfSU4pOwotICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiYShjb250ZXh0LmdldCgpLCAwLCAwLCAwLCBmcmFjdGlvbik7Ci0gICAgY2Fpcm9f
cGFpbnQoY29udGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1EcmFnSW1hZ2VS
ZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb25FbnVtKQotewotICAgIE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgcmV0dXJuIG5hdGl2ZUltYWdl
ID8gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZlSW1hZ2UtPnN1cmZhY2UoKSkgOiAwOwot
fQotCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hl
ZEltYWdlKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRXJyb3JzR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU0ZDU1
ZTc2OTE1MWVkYzFkNDExNTZhNDMyY2E3NTk3ODE0YmFmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJy
b3JzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJF
cnJvcnNHdGsuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJQcmludENvbnRleHQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3Jr
LCBOZXR3b3JrRXJyb3JDYW5jZWxsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC51cmwoKS5zdHJpbmcoKSwgXygiTG9hZCByZXF1ZXN0IGNhbmNlbGxlZCIpKTsKLX0KLQotUmVz
b3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQot
ewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJv
ckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3QudXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxvd2VkIHRvIHVzZSByZXN0cmljdGVkIG5ldHdv
cmsgcG9ydCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVy
cm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiVVJMIGNhbm5vdCBiZSBzaG93
biIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5
UG9saWN5Q2hhbmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCksIF8oIkZyYW1lIGxvYWQgd2FzIGludGVycnVwdGVkIikpOwotfQotCi1SZXNvdXJjZUVy
cm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xp
Y3lFcnJvckNhbm5vdFNob3dNaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0
eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4
aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JGaWxlRG9lc05v
dEV4aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOwotfQotCi1SZXNvdXJjZUVycm9yIHBsdWdpbldp
bGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0g
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVnaW4sIFBsdWdpbkVycm9yV2ls
bEhhbmRsZUxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UudXJsKCkuc3Ry
aW5nKCksIF8oIlBsdWdpbiB3aWxsIGhhbmRsZSBsb2FkIikpOwotfQotCi1SZXNvdXJjZUVycm9y
IGRvd25sb2FkTmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIG5ldHdvcmtFcnJvcikK
LXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9h
ZEVycm9yTmV0d29yaywKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrRXJyb3IuZmFp
bGluZ1VSTCgpLCBuZXR3b3JrRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJl
c291cmNlRXJyb3IgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
bkRvd25sb2FkLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJVc2VyIGNhbmNlbGxlZCB0aGUg
ZG93bmxvYWQiKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9y
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBE
b3dubG9hZEVycm9yRGVzdGluYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2UudXJsKCkuc3RyaW5nKCksIGVycm9yTWVzc2FnZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgcHJp
bnRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCi17Ci0gICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJp
bnRDb250ZXh0LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9yR2VuZXJhbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudExvYWRlciA/IGRvY3VtZW50TG9hZGVyLT51
cmwoKSA6IEtVUkwoKSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwcmludGVy
Tm90Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRleHQqIHByaW50Q29udGV4dCkKLXsKLSAgICBE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBwcmludENvbnRleHQtPmZyYW1lKCktPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluUHJpbnQsIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCks
IF8oIlByaW50ZXIgbm90IGZvdW5kIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGludmFsaWRQYWdl
UmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCogcHJpbnRDb250ZXh0KQotewotICAgIERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JE
b21haW5QcmludCwgUHJpbnRFcnJvckludmFsaWRQYWdlUmFuZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJsKCkgOiBLVVJMKCks
IF8oIkludmFsaWQgcGFnZSByYW5nZSIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1ODJjYzk5ZmJmMjkyZTRjYmNkNzNkNmVmMDljZmM0YzJjOTQ4NmNmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBFcnJvcnNHdGtf
aAotI2RlZmluZSBFcnJvcnNHdGtfaAotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUHJpbnRDb250ZXh0OwotY2xhc3MgUmVz
b3VyY2VFcnJvcjsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlUmVzcG9u
c2U7Ci0KLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluTmV0d29yayA9ICJXZWJLaXROZXR3
b3JrRXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5Qb2xpY3kgPSAiV2ViS2l0
UG9saWN5RXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5QbHVnaW4gPSAiV2Vi
S2l0UGx1Z2luRXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5Eb3dubG9hZCA9
ICJXZWJLaXREb3dubG9hZEVycm9yIjsKLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluUHJp
bnQgPSAiV2ViS2l0UHJpbnRFcnJvciI7Ci0KLWVudW0gTmV0d29ya0Vycm9yIHsKLSAgICBOZXR3
b3JrRXJyb3JGYWlsZWQgPSAzOTksCi0gICAgTmV0d29ya0Vycm9yVHJhbnNwb3J0ID0gMzAwLAot
ICAgIE5ldHdvcmtFcnJvclVua25vd25Qcm90b2NvbCA9IDMwMSwKLSAgICBOZXR3b3JrRXJyb3JD
YW5jZWxsZWQgPSAzMDIsCi0gICAgTmV0d29ya0Vycm9yRmlsZURvZXNOb3RFeGlzdCA9IDMwMwot
fTsKLQotLy8gU3luYydkIHdpdGggTWFjJ3MgV2ViS2l0IEVycm9ycy4KLWVudW0gUG9saWN5RXJy
b3IgewotICAgIFBvbGljeUVycm9yRmFpbGVkID0gMTk5LAotICAgIFBvbGljeUVycm9yQ2Fubm90
U2hvd01pbWVUeXBlID0gMTAwLAotICAgIFBvbGljeUVycm9yQ2Fubm90U2hvd1VSTCA9IDEwMSwK
LSAgICBQb2xpY3lFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UgPSAxMDIs
Ci0gICAgUG9saWN5RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCA9IDEwMwotfTsKLQotZW51
bSBQbHVnaW5FcnJvciB7Ci0gICAgUGx1Z2luRXJyb3JGYWlsZWQgPSAyOTksCi0gICAgUGx1Z2lu
RXJyb3JDYW5ub3RGaW5kUGx1Z2luID0gMjAwLAotICAgIFBsdWdpbkVycm9yQ2Fubm90TG9hZFBs
dWdpbiA9IDIwMSwKLSAgICBQbHVnaW5FcnJvckphdmFVbmF2YWlsYWJsZSA9IDIwMiwKLSAgICBQ
bHVnaW5FcnJvckNvbm5lY3Rpb25DYW5jZWxsZWQgPSAyMDMsCi0gICAgUGx1Z2luRXJyb3JXaWxs
SGFuZGxlTG9hZCA9IDIwNAotfTsKLQotZW51bSBEb3dubG9hZEVycm9yIHsKLSAgICBEb3dubG9h
ZEVycm9yTmV0d29yayA9IDQ5OSwKLSAgICBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyID0g
NDAwLAotICAgIERvd25sb2FkRXJyb3JEZXN0aW5hdGlvbiA9IDQwMQotfTsKLQotZW51bSBQcmlu
dEVycm9yIHsKLSAgICBQcmludEVycm9yR2VuZXJhbCA9IDU5OSwKLSAgICBQcmludEVycm9yUHJp
bnRlck5vdEZvdW5kID0gNTAwLAotICAgIFByaW50RXJyb3JJbnZhbGlkUGFnZVJhbmdlID0gNTAx
Ci19OwotCi1SZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwotUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7
Ci1SZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKLVJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxs
SGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLVJlc291cmNlRXJyb3Ig
ZG93bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotUmVzb3VyY2VFcnJv
ciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
LVJlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci1SZXNvdXJjZUVycm9yIHByaW50
RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwot
UmVzb3VyY2VFcnJvciBwcmludGVyTm90Rm91bmRFcnJvcihjb25zdCBQcmludENvbnRleHQqKTsK
LVJlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5nZVRvUHJpbnQoY29uc3QgUHJpbnRDb250ZXh0
Kik7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRXZlbnRMb29wR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExv
b3BHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWY3YjVjYjc3Yjk0NGZi
ZTA1ODE4NGY4NjE0NDA1MmFlNmE1MjJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBOdWFudGkgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRMb29w
LmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBF
dmVudExvb3A6OmN5Y2xlKCkKLXsKLSAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwg
RkFMU0UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZhMjA3Mjk2YzZhNmNiNDY2MjhmNzcwOTYzNGUyNGU3MmY4ODdjOWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0KLSNpbmNs
dWRlICJGaWxlTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJVVUlELmgiCi0jaW5jbHVkZSA8Z2lvL2dp
by5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR2xpYlV0aWxpdGllcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0vKiBPbiBsaW51eCBmaWxlIG5hbWVzIGFyZSBqdXN0IHJhdyBi
eXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29kZWQgaW4gYW55IHdheQot
ICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdlIGNhbm5vdCBqdXN0IHN0
b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCi0gKiBidXQgd2UgaGF2ZSB0byBlc2Nh
cGUgaXQuCi0gKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBlbmNvZGluZyBpcyBhbHdh
eXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8KLVN0cmluZyBmaWxlbmFt
ZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQotewotICAgIGlmICghZmlsZW5hbWUpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOwotI2Vsc2UKLSAgICBHT3duUHRyPGdjaGFyPiBlc2Nh
cGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZW5hbWUsICIvOiIsIGZhbHNlKSk7Ci0g
ICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7Ci0jZW5kaWYKLX0KLQotQ1N0cmluZyBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQotewotI2lmIE9TKFdJTkRP
V1MpCi0gICAgcmV0dXJuIHBhdGgudXRmOCgpOwotI2Vsc2UKLSAgICBHT3duUHRyPGdjaGFyPiBm
aWxlbmFtZShnX3VyaV91bmVzY2FwZV9zdHJpbmcocGF0aC51dGY4KCkuZGF0YSgpLCAwKSk7Ci0g
ICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOwotI2VuZGlmCi19Ci0KLS8vIENvbnZlcnRzIGEgc3Ry
aW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCi1T
dHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotI2lmIE9T
KFdJTkRPV1MpCi0gICAgcmV0dXJuIHN0cmluZzsKLSNlbHNlCi0gICAgQ1N0cmluZyBmaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzdHJpbmcpOwotICAgIEdPd25QdHI8Z2NoYXI+
IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZpbGVuYW1lLmRhdGEoKSwgMCwgMCwgMCwgMCkp
OwotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0KCkpOwotI2VuZGlmCi19Ci0KLWJvb2wgZmls
ZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwot
Ci0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmVzdWx0ID0gZ19maWxlX3Rl
c3QoZmlsZW5hbWUuZGF0YSgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOwotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQotICAgICAg
ICByZXN1bHQgPSBnX3JlbW92ZShmaWxlbmFtZS5kYXRhKCkpID09IDA7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCk7Ci0KLSAgICBpZiAoIWZpbGVuYW1lLmlzTnVs
bCgpKQotICAgICAgICByZXN1bHQgPSBnX3JtZGlyKGZpbGVuYW1lLmRhdGEoKSkgPT0gMDsKLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBw
YXRoLCBsb25nIGxvbmcmIHJlc3VsdFNpemUpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7Ci0gICAg
Z2ludCByZXN1bHQgPSBnX3N0YXQoZmlsZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0gICAg
aWYgKHJlc3VsdCAhPSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRTaXpl
ID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGdldEZp
bGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiBtb2RpZmllZFRp
bWUpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7Ci0gICAgZ2ludCByZXN1bHQgPSBnX3N0YXQoZmls
ZW5hbWUuZGF0YSgpLCAmc3RhdFJlc3VsdCk7Ci0gICAgaWYgKHJlc3VsdCAhPSAwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1l
OwotICAgIHJldHVybiB0cnVlOwotCi19Ci0KLWJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBDU3RyaW5nIGZpbGVu
YW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOwotICAgIGlmIChmaWxlbmFtZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RydWN0IHN0YXQgc3RhdFJl
c3VsdDsKLSAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVz
dWx0KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZXRh
ZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKLSAgICBtZXRhZGF0
YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7Ci0gICAgbWV0YWRhdGEudHlwZSA9IFNfSVNE
SVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeSA6IEZp
bGVNZXRhZGF0YTo6VHlwZUZpbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLX0KLQotU3RyaW5nIHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y29tcG9uZW50KQotewotICAgIGlmIChwYXRoLmVuZHNXaXRoKEdfRElSX1NFUEFSQVRPUl9TKSkK
LSAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1
cm4gcGF0aCArIEdfRElSX1NFUEFSQVRPUl9TICsgY29tcG9uZW50OwotfQotCi1ib29sIG1ha2VB
bGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgQ1N0cmluZyBmaWxlbmFt
ZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdpbnQgcmVzdWx0ID0gZ19ta2Rp
cl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZGF0YSgpLCBTX0lSV1hVKTsKLQotICAgIHJldHVybiBy
ZXN1bHQgPT0gMDsKLX0KLQotU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKLXsKLSAgICByZXR1
cm4gZmlsZW5hbWVUb1N0cmluZyhnX2dldF9ob21lX2RpcigpKTsKLX0KLQotU3RyaW5nIHBhdGhH
ZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdGhOYW1lKQotewotICAgIGlmIChwYXRoTmFtZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYXRoTmFtZTsKLQotICAgIENTdHJpbmcgdG1wRmls
ZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aE5hbWUpOwotICAgIEdPd25QdHI8
Z2NoYXI+IGJhc2VOYW1lKGdfcGF0aF9nZXRfYmFzZW5hbWUodG1wRmlsZW5hbWUuZGF0YSgpKSk7
Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOwotfQotCi1DU3Ry
aW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpCi17Ci0gICAgQ1N0cmluZyBwYXRoID0gZ2V0
Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7Ci0gICAgaWYgKCFwYXRoLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gcGF0aDsKLQotICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywgY2hlY2sgdGhlIFBB
VEggZW52IHZhcmlhYmxlLgotICAgIEdPd25QdHI8Y2hhcj4gY3VycmVudEV4ZVBhdGgoZ19maW5k
X3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1lKCkpKTsKLSAgICBpZiAoIWN1cnJlbnRFeGVQ
YXRoLmdldCgpKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOwotCi0gICAgR093blB0cjxjaGFy
PiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5nZXQoKSkpOwotICAg
IHJldHVybiBkaXJuYW1lLmdldCgpOwotfQotCi1DU3RyaW5nIHNoYXJlZFJlc291cmNlc1BhdGgo
KQotewotICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hlZFBhdGg7Ci0gICAgaWYgKCFjYWNoZWRQYXRo
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gY2FjaGVkUGF0aDsKLQotI2lmIE9TKFdJTkRPV1Mp
Ci0gICAgSE1PRFVMRSBobW9kdWxlID0gMDsKLSAgICBHZXRNb2R1bGVIYW5kbGVFeEEoR0VUX01P
RFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJFU1MsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVsZSk7Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBy
dW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVjdG9yeV9vZl9t
b2R1bGUoaG1vZHVsZSkpOwotICAgIEdPd25QdHI8Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRfZmls
ZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJlIiwgIndlYmtpdGd0ay0iV0VCS0lUR1RLX0FQ
SV9WRVJTSU9OX1NUUklORywgTlVMTCkpOwotI2Vsc2UKLSAgICBHT3duUHRyPGdjaGFyPiBkYXRh
UGF0aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0Z3RrLSJXRUJLSVRHVEtfQVBJ
X1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7Ci0jZW5kaWYKLQotICAgIGNhY2hlZFBhdGggPSBkYXRh
UGF0aC5nZXQoKTsKLSAgICByZXR1cm4gY2FjaGVkUGF0aDsKLX0KLQotdWludDY0X3QgZ2V0Vm9s
dW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgR1JlZlB0cjxHRmls
ZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgpKTsKLSAgICBHUmVm
UHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0
ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwg
MCkpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVf
QVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Ci19Ci0KLVN0cmluZyBkaXJlY3RvcnlOYW1lKGNv
bnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICAvKiBObyBudWxsIGNoZWNraW5nIG5lZWRlZCAqLwot
ICAgIEdPd25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBhdGgpLmRhdGEoKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGRpcm5hbWUuZ2V0KCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCi17Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gZW50cmllczsKLQotICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCk7Ci0gICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCks
IDAsIDApOwotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm4gZW50cmllczsKLQotICAgIEdQ
YXR0ZXJuU3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRh
dGEoKSk7Ci0gICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGly
KSkgewotICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19i
dWlsZF9maWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKLSAgICAgICAgZW50
cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOwotICAgIH0KLSAgICBn
X3BhdHRlcm5fc3BlY19mcmVlKHBzcGVjKTsKLSAgICBnX2Rpcl9jbG9zZShkaXIpOwotCi0gICAg
cmV0dXJuIGVudHJpZXM7Ci19Ci0KLVN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJp
bmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgR093blB0cjxn
Y2hhcj4gZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRh
KCksIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR093
blB0cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZp
bGVuYW1lLmdldCgpLCBOVUxMKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7Ci0KLSAgICBoYW5kbGUgPSBn
X2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAs
IDApOwotICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOwotfQot
Ci1QbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUgbW9kZSkKLXsKLSAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKHBhdGgpOwotICAgIGlmIChmc1JlcC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGludmFs
aWRQbGF0Zm9ybUZpbGVIYW5kbGU7Ci0KLSAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7Ci0gICAgR0ZpbGVJT1N0cmVh
bSogaW9TdHJlYW0gPSAwOwotICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQotICAgICAgICBp
b1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKLSAgICBl
bHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkgewotICAgICAgICBpZiAoZ19maWxlX3Rlc3Qo
ZnNSZXAuZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8
IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKLSAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxl
X29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklM
RV9DUkVBVEVfTk9ORSwgMCwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlvU3RyZWFtOwotfQot
Ci12b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBpZiAo
IWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19pb19zdHJl
YW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
aGFuZGxlKTsKLSAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotfQotCi1s
b25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9m
ZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQotewotICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9
IEdfU0VFS19TRVQ7Ci0gICAgc3dpdGNoIChvcmlnaW4pIHsKLSAgICBjYXNlIFNlZWtGcm9tQmVn
aW5uaW5nOgotICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgotICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21FbmQ6Ci0gICAgICAgIHNlZWtUeXBl
ID0gR19TRUVLX0VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19T
RUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHNlZWtUeXBlLCAwLCAwKSkKLSAg
ICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBnX3NlZWthYmxlX3RlbGwoR19TRUVLQUJMRShn
X2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSk7Ci19Ci0K
LWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKLSAgICBnX291dHB1
dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKGhhbmRsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3Ro
LCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKLSAgICByZXR1cm4gYnl0ZXNXcml0dGVuOwotfQotCi1p
bnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCi17Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGRvIHsKLSAgICAg
ICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0
X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0UHRy
KCkpOwotICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCi0gICAgICAgICAgICByZXR1cm4gYnl0
ZXNSZWFkOwotICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdfRklMRV9FUlJP
Ul9JTlRSKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3Jt
TW9kdWxlIG1vZHVsZSkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiA6OkZyZWVMaWJy
YXJ5KG1vZHVsZSk7Ci0jZWxzZQotICAgIHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1bGUpOwot
I2VuZGlmCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093
blB0ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNjkzZjQxNWU5NzgyNDdmZDNjOTM4NGQ0
ZWQyNTFlZTA0OWI4ZjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJHT3duUHRyR3RrLmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R2RrRXZlbnQ+
KEdka0V2ZW50KiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ2RrX2V2ZW50X2ZyZWUo
cHRyKTsKLX0KLQotdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEd0a0ljb25JbmZvPihH
dGtJY29uSW5mbyogaW5mbykKLXsKLSAgICBpZiAoaW5mbykKLSAgICAgICAgZ3RrX2ljb25faW5m
b19mcmVlKGluZm8pOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR093blB0ckd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJH
dGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ1ZTgzNzFlZDM2OGY0MTVkODk3
NDMyNGVlNjJkNzFmZWI3YTJkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR093blB0ckd0ay5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHT3duUHRyR3RrX2gKLSNkZWZpbmUgR093blB0
ckd0a19oCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
VEYgewotCi10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R2RrRXZlbnQ+KEdka0V2ZW50
Kik7Ci10ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZEdQdHI8R3RrSWNvbkluZm8+KEd0a0ljb25J
bmZvKik7Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR1JlZlB0ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0
ckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNTA2ZGY5MDA3ZDI0Y2Mw
NzY3NzY4ZGVmZDEwNTY2MmZjMzliM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJvYmluc29u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotCi0jZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEK
LSNkZWZpbmUgU0VDUkVUX0FQSV9TVUJKRUNUX1RPX0NIQU5HRSAxCi0KLSNpbmNsdWRlIDxnbGli
Lmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGxpYnNlY3JldC9zZWNyZXQuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlIDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIo
R3RrVGFyZ2V0TGlzdCogcHRyKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIGd0a190YXJnZXRf
bGlzdF9yZWYocHRyKTsKLSAgICByZXR1cm4gcHRyOwotfQotCi10ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHdGtUYXJnZXRMaXN0KiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ3Rr
X3RhcmdldF9saXN0X3VucmVmKHB0cik7Ci19Ci0KLXRlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiBy
ZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgc2VjcmV0
X3ZhbHVlX3JlZihwdHIpOwotICAgIHJldHVybiBwdHI7Ci19Ci0KLXRlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgc2Vj
cmV0X3ZhbHVlX3VucmVmKHB0cik7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotdGVt
cGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNvciogcHRyKQotewotICAgIGlmIChw
dHIpCi0gICAgICAgIGdka19jdXJzb3JfcmVmKHB0cik7Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQot
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR2RrQ3Vyc29yKiBwdHIpCi17Ci0gICAgaWYgKHB0
cikKLSAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihwdHIpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MTkyODY0YTkyMjlkYWI4ODNiZWZhNTYyYjIzNWFkOGFjMzk2ZGM5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HUmVmUHRyR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogIENvcHlyaWdodCAo
QykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHUmVmUHRyR3RrX2gK
LSNkZWZpbmUgR1JlZlB0ckd0a19oCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
Ci0KLXR5cGVkZWYgc3RydWN0IF9TZWNyZXRWYWx1ZSBTZWNyZXRWYWx1ZTsKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLXRlbXBsYXRlIDw+IEd0a1RhcmdldExpc3QqIHJlZkdQdHIoR3RrVGFyZ2V0TGlz
dCogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEd0a1RhcmdldExpc3QqIHB0cik7
Ci0KLXRlbXBsYXRlIDw+IFNlY3JldFZhbHVlKiByZWZHUHRyKFNlY3JldFZhbHVlKiBwdHIpOwot
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoU2VjcmV0VmFsdWUqIHB0cik7Ci0KLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgotdGVtcGxhdGUgPD4gR2RrQ3Vyc29yKiByZWZHUHRyKEdka0N1cnNv
ciogcHRyKTsKLXRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdka0N1cnNvciogcHRyKTsKLSNl
bmRpZgotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFk
c0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOTYwOWRkMDg3MTJkMTI4
NTIzNjRiZjIwZTZkYmMzZjRhZmZhZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKLQotI2lmIEVOQUJMRShHQU1F
UEFEKQotCi0jaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCi0jaW5jbHVkZSAiR2FtZXBh
ZExpc3QuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRz
dHJlYW0uaD4KLSNpbmNsdWRlIDxndWRldi9ndWRldi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2FtZXBhZERldmljZUd0ayA6IHB1YmxpYyBHYW1l
cGFkRGV2aWNlTGludXggewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdhbWVwYWRE
ZXZpY2VHdGs+IGNyZWF0ZShTdHJpbmcgZGV2aWNlRmlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgR2FtZXBhZERldmljZUd0ayhkZXZpY2VGaWxlKSk7Ci0gICAgfQotICAg
IH5HYW1lcGFkRGV2aWNlR3RrKCk7Ci0KLXByaXZhdGU6Ci0gICAgR2FtZXBhZERldmljZUd0ayhT
dHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVhZENhbGxiYWNrKEdP
YmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKTsKLSAgICBHUmVmUHRyPEdJbnB1
dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwot
fTsKLQotR2FtZXBhZERldmljZUd0azo6R2FtZXBhZERldmljZUd0ayhTdHJpbmcgZGV2aWNlRmls
ZSkKLSAgICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZpY2VGaWxlKQotewotICAgIGlmIChtX2Zp
bGVEZXNjcmlwdG9yID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJlYW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZB
TFNFKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1f
Y3JlYXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgp
KSwgMCkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENhbGxiYWNrKSwgdGhpcywgMCk7Ci0gICAgZ19z
b3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAwKTsKLX0KLQotR2FtZXBhZERldmljZUd0azo6
fkdhbWVwYWREZXZpY2VHdGsoKQotewotICAgIGlmIChtX3NvdXJjZSkKLSAgICAgICAgZ19zb3Vy
Y2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Ci19Ci0KLWdib29sZWFuIEdhbWVwYWREZXZpY2VH
dGs6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkK
LXsKLSAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gcmVpbnRlcnByZXRfY2Fz
dDxHYW1lcGFkRGV2aWNlR3RrKj4oZGF0YSk7Ci0gICAgR093blB0cjxHRXJyb3I+IGVycm9yOwot
ICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKLQotICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxhYmxl
X2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5nKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKHBv
bGxhYmxlU3RyZWFtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZXZlbnQsIHNpemVvZihldmVudCksIDAsICZlcnJvci5vdXRQdHIo
KSk7Ci0KLSAgICAvLyBGSVhNRTogUHJvcGVybHkgbG9nIHRoZSBlcnJvci4KLSAgICAvLyBJbiB0
aGUgY2FzZSBvZiBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLIGVycm9yIHJldHVybiBUUlVFIHRvIHdh
aXQgdW50aWwKLSAgICAvLyB0aGUgc291cmNlIGJlY29tZXMgcmVhZGFibGUgYWdhaW4gYW5kIEZB
TFNFIG90aGVyd2lzZS4KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVybiBnX2Vycm9yX21h
dGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfV09VTERfQkxPQ0spOwot
Ci0gICAgQVNTRVJUX1VOVVNFRChsZW4sIGxlbiA9PSBzaXplb2YoZXZlbnQpKTsKLSAgICBnYW1l
cGFkRGV2aWNlLT51cGRhdGVGb3JFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LWNsYXNzIEdhbWVwYWRzR3RrIHsKLXB1YmxpYzoKLSAgICBHYW1lcGFkc0d0ayh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdm9pZCByZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7Ci0g
ICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsKLQotICAgIHZvaWQg
dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqKTsKLQotcHJpdmF0ZToKLSAgICB+R2FtZXBh
ZHNHdGsoKTsKLSAgICBzdGF0aWMgdm9pZCBvblVFdmVudENhbGxiYWNrKEdVZGV2Q2xpZW50Kiwg
Z2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBncG9pbnRlciBkYXRhKTsKLSAgICBzdGF0aWMg
Z2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKik7Ci0KLSAgICBWZWN0b3I8T3du
UHRyPEdhbWVwYWREZXZpY2VHdGs+ID4gbV9zbG90czsKLSAgICBIYXNoTWFwPFN0cmluZywgR2Ft
ZXBhZERldmljZUd0ayo+IG1fZGV2aWNlTWFwOwotCi0gICAgR1JlZlB0cjxHVWRldkNsaWVudD4g
bV9ndWRldkNsaWVudDsKLX07Ci0KLUdhbWVwYWRzR3RrOjpHYW1lcGFkc0d0ayh1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgOiBtX3Nsb3RzKGxlbmd0aCkKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
c3Vic3lzdGVtc1tdID0geyAiaW5wdXQiLCAwIH07Ci0gICAgbV9ndWRldkNsaWVudCA9IGFkb3B0
R1JlZihnX3VkZXZfY2xpZW50X25ldyhzdWJzeXN0ZW1zKSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChtX2d1ZGV2Q2xpZW50LmdldCgpLCAidWV2ZW50IiwgR19DQUxMQkFDSyhvblVFdmVudENhbGxi
YWNrKSwgdGhpcyk7Ci0KLSAgICBHT3duUHRyPEdMaXN0PiBkZXZpY2VzTGlzdChnX3VkZXZfY2xp
ZW50X3F1ZXJ5X2J5X3N1YnN5c3RlbShtX2d1ZGV2Q2xpZW50LmdldCgpLCBzdWJzeXN0ZW1zWzBd
KSk7Ci0gICAgZm9yIChHTGlzdCogbGlzdEl0ZW0gPSBkZXZpY2VzTGlzdC5nZXQoKTsgbGlzdEl0
ZW07IGxpc3RJdGVtID0gZ19saXN0X25leHQobGlzdEl0ZW0pKSB7Ci0gICAgICAgIEdVZGV2RGV2
aWNlKiBkZXZpY2UgPSBHX1VERVZfREVWSUNFKGxpc3RJdGVtLT5kYXRhKTsKLSAgICAgICAgU3Ry
aW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdfdWRldl9kZXZpY2VfZ2V0X2Rldmlj
ZV9maWxlKGRldmljZSkpOwotICAgICAgICBpZiAoaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCi0g
ICAgICAgICAgICByZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKLSAgICAgICAgZ19vYmplY3Rf
dW5yZWYoZGV2aWNlKTsKLSAgICB9Ci19Ci0KLUdhbWVwYWRzR3RrOjp+R2FtZXBhZHNHdGsoKQot
ewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2d1ZGV2Q2xpZW50
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKLX0KLQotdm9p
ZCBHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCi17Ci0gICAg
TE9HKEdhbWVwYWQsICJHYW1lcGFkc0d0azo6cmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxl
LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoIW1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmlj
ZUZpbGUpKTsKLQotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fc2xvdHMu
c2l6ZSgpOyBpbmRleCsrKSB7Ci0gICAgICAgIGlmICghbV9zbG90c1tpbmRleF0pIHsKLSAgICAg
ICAgICAgIG1fc2xvdHNbaW5kZXhdID0gR2FtZXBhZERldmljZUd0azo6Y3JlYXRlKGRldmljZUZp
bGUpOwotICAgICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKGRldmljZUZpbGUsIG1fc2xvdHNbaW5k
ZXhdLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEdhbWVwYWRzR3RrOjp1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQotewot
ICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZp
Y2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICBBU1NFUlQobV9kZXZpY2VNYXAuY29udGFpbnMo
ZGV2aWNlRmlsZSkpOwotCi0gICAgR2FtZXBhZERldmljZUd0ayogZ2FtZXBhZERldmljZSA9IG1f
ZGV2aWNlTWFwLnRha2UoZGV2aWNlRmlsZSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9zbG90cy5m
aW5kKGdhbWVwYWREZXZpY2UpOwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAg
ICBtX3Nsb3RzW2luZGV4XS5jbGVhcigpOwotfQotCi12b2lkIEdhbWVwYWRzR3RrOjp1cGRhdGVH
YW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKLXsKLSAgICBBU1NFUlQobV9zbG90cy5zaXpl
KCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2xvdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9z
bG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIEdhbWVwYWREZXZpY2VHdGsqIGdh
bWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOwotICAgICAgICAgICAgUmVmUHRyPEdhbWVw
YWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQot
ICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKLQotICAgICAgICAg
ICAgZ2FtZXBhZC0+aW5kZXgoaSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2
aWNlLT5pZCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNl
LT50aW1lc3RhbXAoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2Ut
PmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKLSAgICAgICAgICAgIGdh
bWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZp
Y2UtPmJ1dHRvbnNEYXRhKCkpOwotCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW50by0+c2V0KGksIDApOwotICAgIH0KLX0K
LQotdm9pZCBHYW1lcGFkc0d0azo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCogdWRldkNs
aWVudCwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqIGRldmljZSwgZ3BvaW50ZXIgZGF0YSkK
LXsKLSAgICBpZiAoIWlzR2FtZXBhZERldmljZShkZXZpY2UpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHYW1lcGFkc0d0ayogZ2FtZXBhZHNHdGsgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWRz
R3RrKj4oZGF0YSk7Ci0gICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdf
dWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOwotCi0gICAgaWYgKCFnX3N0cmNt
cDAoYWN0aW9uLCAiYWRkIikpCi0gICAgICAgIGdhbWVwYWRzR3RrLT5yZWdpc3RlckRldmljZShk
ZXZpY2VGaWxlKTsKLSAgICBlbHNlIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgInJlbW92ZSIpKQot
ICAgICAgICBnYW1lcGFkc0d0ay0+dW5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKLX0KLQot
Z2Jvb2xlYW4gR2FtZXBhZHNHdGs6OmlzR2FtZXBhZERldmljZShHVWRldkRldmljZSogZGV2aWNl
KQotewotICAgIGNvbnN0IGdjaGFyKiBkZXZpY2VGaWxlID0gZ191ZGV2X2RldmljZV9nZXRfZGV2
aWNlX2ZpbGUoZGV2aWNlKTsKLSAgICBjb25zdCBnY2hhciogc3lzZnNQYXRoID0gZ191ZGV2X2Rl
dmljZV9nZXRfc3lzZnNfcGF0aChkZXZpY2UpOwotICAgIGlmICghZGV2aWNlRmlsZSB8fCAhc3lz
ZnNQYXRoKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAoIWdfdWRldl9kZXZpY2Vf
aGFzX3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUIikgfHwgIWdfdWRldl9kZXZpY2VfaGFzX3By
b3BlcnR5KGRldmljZSwgIklEX0lOUFVUX0pPWVNUSUNLIikpCi0gICAgICAgIHJldHVybiBGQUxT
RTsKLQotICAgIHJldHVybiBnX3N0cl9oYXNfcHJlZml4KGRldmljZUZpbGUsICIvZGV2L2lucHV0
L2pzIik7Ci19Ci0KLXZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHYW1lcGFkc0d0aywgZ2FtZXBhZHNHdGssIChpbnRvLT5s
ZW5ndGgoKSkpOwotICAgIGdhbWVwYWRzR3RrLnVwZGF0ZUdhbWVwYWRMaXN0KGludG8pOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGEyZWFiMTI5NjMzNGQ0
YTAwNjA1YTQyMWIwMmZlYWU0ODJkNzc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNh
dGlvbkRpYWxvZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCIKLQotI2luY2x1ZGUgIkNyZWRlbnRp
YWxCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSA8
Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBp
bnQgZ0xheW91dENvbHVtblNwYWNpbmcgPSAxMjsKLXN0YXRpYyBjb25zdCBpbnQgZ0xheW91dFJv
d1NwYWNpbmcgPSA2Owotc3RhdGljIGNvbnN0IGludCBnQnV0dG9uU3BhY2luZyA9IDU7Ci0KLUd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9k
ZSkKLSAgICA6IG1fZGlhbG9nKDApCi0gICAgLCBtX2xvZ2luRW50cnkoMCkKLSAgICAsIG1fcGFz
c3dvcmRFbnRyeSgwKQotICAgICwgbV9yZW1lbWJlckNoZWNrQnV0dG9uKDApCi0gICAgLCBtX2No
YWxsZW5nZShjaGFsbGVuZ2UpCi0gICAgLCBtX2NyZWRlbnRpYWxTdG9yYWdlTW9kZShtb2RlKQot
ewotfQotCi1HdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2co
R3RrV2luZG93KiBwYXJlbnRXaW5kb3csIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQotICAgIDogbV9kaWFsb2coZ3Rr
X2RpYWxvZ19uZXcoKSkKLSAgICAsIG1fbG9naW5FbnRyeSgwKQotICAgICwgbV9wYXNzd29yZEVu
dHJ5KDApCi0gICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKLSAgICAsIG1fY2hhbGxlbmdl
KGNoYWxsZW5nZSkKLSAgICAsIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlKG1vZGUpCi17Ci0gICAg
R3RrV2lkZ2V0KiBjb250ZW50QXJlYSA9IGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShHVEtf
RElBTE9HKG1fZGlhbG9nKSk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdU
S19DT05UQUlORVIoR1RLX0RJQUxPRyhtX2RpYWxvZykpLCA1KTsKLSAgICBndGtfYm94X3NldF9z
cGFjaW5nKEdUS19CT1goY29udGVudEFyZWEpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KLQot
ICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJTkRPVyhtX2RpYWxvZyk7Ci0gICAgZ3RrX3dp
bmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFMU0UpOwotICAgIGd0a193aW5kb3dfc2V0X3Rp
dGxlKHdpbmRvdywgIiIpOwotICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdU
S19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04pOwotCi0gICAgaWYgKHBhcmVudFdpbmRvdykK
LSAgICAgICAgZ3RrX3dpbmRvd19zZXRfdHJhbnNpZW50X2Zvcih3aW5kb3csIHBhcmVudFdpbmRv
dyk7Ci0KLSAgICBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKGNvbnRlbnRBcmVhKTsKLX0KLQot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMgdm9pZCBwYWNrVHdvQ29sdW1uTGF5b3V0
SW5Cb3goR3RrV2lkZ2V0KiBib3gsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3VtZW50TGlzdDsK
LSAgICB2YV9zdGFydChhcmd1bWVudExpc3QsIGJveCk7Ci0KLSAgICBHdGtXaWRnZXQqIHRhYmxl
ID0gZ3RrX3RhYmxlX25ldygxLCAyLCBGQUxTRSk7Ci0gICAgZ3RrX3RhYmxlX3NldF9jb2xfc3Bh
Y2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotICAgIGd0a190
YWJsZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIGdMYXlvdXRSb3dTcGFjaW5n
KTsKLQotICAgIEd0a1dpZGdldCogZmlyc3RDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRM
aXN0LCBHdGtXaWRnZXQqKTsKLSAgICBpbnQgcm93TnVtYmVyID0gMDsKLSAgICB3aGlsZSAoZmly
c3RDb2x1bW5XaWRnZXQpIHsKLSAgICAgICAgaWYgKHJvd051bWJlcikKLSAgICAgICAgICAgIGd0
a190YWJsZV9yZXNpemUoR1RLX1RBQkxFKHRhYmxlKSwgcm93TnVtYmVyICsgMSwgMik7Ci0KLSAg
ICAgICAgR3RrV2lkZ2V0KiBzZWNvbmRDb2x1bW5XaWRnZXQgPSB2YV9hcmcoYXJndW1lbnRMaXN0
LCBHdGtXaWRnZXQqKTsKLSAgICAgICAgR3RrQXR0YWNoT3B0aW9ucyBhdHRhY2hPcHRpb25zID0g
c3RhdGljX2Nhc3Q8R3RrQXR0YWNoT3B0aW9ucz4oR1RLX0VYUEFORCB8IEdUS19GSUxMKTsKLSAg
ICAgICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFibGUpLCBmaXJzdENvbHVtbldpZGdl
dCwKLSAgICAgICAgICAgIDAsIHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyLAotICAgICAgICAg
ICAgcm93TnVtYmVyLCByb3dOdW1iZXIgKyAxLAotICAgICAgICAgICAgYXR0YWNoT3B0aW9ucywg
YXR0YWNoT3B0aW9ucywKLSAgICAgICAgICAgIDAsIDApOwotCi0gICAgICAgIGlmIChzZWNvbmRD
b2x1bW5XaWRnZXQpCi0gICAgICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRzKEdUS19U
QUJMRSh0YWJsZSksIHNlY29uZENvbHVtbldpZGdldCwgMSwgMiwgcm93TnVtYmVyLCByb3dOdW1i
ZXIgKyAxKTsKLQotICAgICAgICBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExp
c3QsIEd0a1dpZGdldCopOwotICAgICAgICByb3dOdW1iZXIrKzsKLSAgICB9Ci0KLSAgICB2YV9l
bmQoYXJndW1lbnRMaXN0KTsKLQotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGJveCks
IHRhYmxlLCBGQUxTRSwgRkFMU0UsIDApOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHBhY2tUd29D
b2x1bW5MYXlvdXRJbkJveChHdGtXaWRnZXQqIGJveCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJn
dW1lbnRMaXN0OwotICAgIHZhX3N0YXJ0KGFyZ3VtZW50TGlzdCwgYm94KTsKLQotICAgIEd0a1dp
ZGdldCogZ3JpZCA9IGd0a19ncmlkX25ldygpOwotICAgIGd0a19ncmlkX3NldF9jb2x1bW5fc3Bh
Y2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0a19ncmlkX3Nl
dF9yb3dfc3BhY2luZyhHVEtfR1JJRChncmlkKSwgZ0xheW91dFJvd1NwYWNpbmcpOwotICAgIGd0
a19ncmlkX3NldF9jb2x1bW5faG9tb2dlbmVvdXMoR1RLX0dSSUQoZ3JpZCksIFRSVUUpOwotCi0g
ICAgR3RrV2lkZ2V0KiBmaXJzdENvbHVtbldpZGdldCA9IHZhX2FyZyhhcmd1bWVudExpc3QsIEd0
a1dpZGdldCopOwotICAgIGludCByb3dOdW1iZXIgPSAwOwotICAgIHdoaWxlIChmaXJzdENvbHVt
bldpZGdldCkgewotICAgICAgICBHdGtXaWRnZXQqIHNlY29uZENvbHVtbldpZGdldCA9IHZhX2Fy
Zyhhcmd1bWVudExpc3QsIEd0a1dpZGdldCopOwotICAgICAgICBpbnQgZmlyc3RXaWRnZXRXaWR0
aCA9IHNlY29uZENvbHVtbldpZGdldCA/IDEgOiAyOwotCi0gICAgICAgIGd0a19ncmlkX2F0dGFj
aChHVEtfR1JJRChncmlkKSwgZmlyc3RDb2x1bW5XaWRnZXQsIDAsIHJvd051bWJlciwgZmlyc3RX
aWRnZXRXaWR0aCwgMSk7Ci0gICAgICAgIGd0a193aWRnZXRfc2V0X2hleHBhbmQoZmlyc3RDb2x1
bW5XaWRnZXQsIFRSVUUpOwotICAgICAgICBndGtfd2lkZ2V0X3NldF92ZXhwYW5kKGZpcnN0Q29s
dW1uV2lkZ2V0LCBUUlVFKTsKLQotICAgICAgICBpZiAoc2Vjb25kQ29sdW1uV2lkZ2V0KSB7Ci0g
ICAgICAgICAgICBndGtfZ3JpZF9hdHRhY2goR1RLX0dSSUQoZ3JpZCksIHNlY29uZENvbHVtbldp
ZGdldCwgMSwgcm93TnVtYmVyLCAxLCAxKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfc2V0X2hl
eHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRf
c2V0X3ZleHBhbmQoc2Vjb25kQ29sdW1uV2lkZ2V0LCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZpcnN0Q29sdW1uV2lkZ2V0ID0gdmFfYXJnKGFyZ3VtZW50TGlzdCwgR3RrV2lkZ2V0Kik7
Ci0gICAgICAgIHJvd051bWJlcisrOwotICAgIH0KLQotICAgIHZhX2VuZChhcmd1bWVudExpc3Qp
OwotCi0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgZ3JpZCwgRkFMU0UsIEZB
TFNFLCAwKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVEaWFsb2dMYWJl
bChjb25zdCBjaGFyKiBsYWJlbFN0cmluZywgaW50IGhvcml6b250YWxQYWRkaW5nID0gMCkKLXsK
LSAgICBHdGtXaWRnZXQqIGxhYmVsID0gZ3RrX2xhYmVsX25ldyhsYWJlbFN0cmluZyk7Ci0gICAg
Z3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAsIDAuNSk7Ci0gICAgaWYg
KGhvcml6b250YWxQYWRkaW5nKQotICAgICAgICBndGtfbWlzY19zZXRfcGFkZGluZyhHVEtfTUlT
QyhsYWJlbCksIDAsIGhvcml6b250YWxQYWRkaW5nKTsKLSAgICByZXR1cm4gbGFiZWw7Ci19Ci0K
LXN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZURpYWxvZ0VudHJ5KEd0a1dpZGdldCoqIG1lbWJlcikK
LXsKLSAgICAqbWVtYmVyID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGd0a19lbnRyeV9zZXRfYWN0
aXZhdGVzX2RlZmF1bHQoR1RLX0VOVFJZKCptZW1iZXIpLCBUUlVFKTsKLSAgICByZXR1cm4gKm1l
bWJlcjsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6Y3JlYXRlQ29udGVudHNJ
bkNvbnRhaW5lcihHdGtXaWRnZXQqIGNvbnRhaW5lcikKLXsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgZ0xheW91dENv
bHVtblNwYWNpbmcpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGhCb3ggPSBndGtfYm94X25ldyhH
VEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgZ0xheW91dENvbHVtblNwYWNpbmcpOwotI2VuZGlm
Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoaEJveCks
IGdCdXR0b25TcGFjaW5nKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNv
bnRhaW5lciksIGhCb3gpOwotCi0gICAgR3RrV2lkZ2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19m
cm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVf
RElBTE9HKTsKLSAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGljb24pLCAwLjUs
IDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhCb3gpLCBpY29uLCBGQUxTRSwg
RkFMU0UsIDApOwotCi0gICAgR093blB0cjxjaGFyPiBwcm9tcHQoZ19zdHJkdXBfcHJpbnRmKAot
ICAgICAgICBfKCJUaGUgc2l0ZSAlczolaSByZXF1ZXN0cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29y
ZCIpLAotICAgICAgICBtX2NoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5ob3N0KCkudXRmOCgp
LmRhdGEoKSwKLSAgICAgICAgbV9jaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkucG9ydCgpKSk7
Ci0KLSAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRo
X21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsKLSAgICBndGtfbGFiZWxfc2V0X2xp
bmVfd3JhcChHVEtfTEFCRUwoZ3RrX2Jpbl9nZXRfY2hpbGQoR1RLX0JJTihtX3JlbWVtYmVyQ2hl
Y2tCdXR0b24pKSksIFRSVUUpOwotICAgIGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsKG1fcmVt
ZW1iZXJDaGVja0J1dHRvbiwgbV9jcmVkZW50aWFsU3RvcmFnZU1vZGUgPT0gRGlzYWxsb3dQZXJz
aXN0ZW50U3RvcmFnZSk7Ci0KLQotICAgIC8vIFdlIGFyZSBhZGRpbmcgdGhlIGJ1dHRvbiBib3gg
aGVyZSBtYW51YWxseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWFkeS1tYWRlIEd0a0RpYWxvZyBi
dXR0b25zLgotICAgIC8vIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gc2hhcmUgdGhlIGNvZGUgd2l0
aCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgdXNlIEd0a0RpYWxvZy4KLSNpZmRlZiBHVEtf
QVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogYnV0dG9uQm94ID0gZ3RrX2hidXR0b25fYm94
X25ldygpOwotI2Vsc2UKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0a19idXR0b25fYm94
X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7Ci0jZW5kaWYKLSAgICBndGtfYm94X3Nl
dF9zcGFjaW5nKEdUS19CT1goYnV0dG9uQm94KSwgZ0J1dHRvblNwYWNpbmcpOwotICAgIGd0a19i
dXR0b25fYm94X3NldF9sYXlvdXQoR1RLX0JVVFRPTl9CT1goYnV0dG9uQm94KSwgR1RLX0JVVFRP
TkJPWF9FTkQpOwotCi0gICAgbV9va2F5QnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9zdG9j
ayhHVEtfU1RPQ0tfT0spOwotICAgIG1fY2FuY2VsQnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJv
bV9zdG9jayhHVEtfU1RPQ0tfQ0FOQ0VMKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WChidXR0b25Cb3gpLCBtX2NhbmNlbEJ1dHRvbiwgRkFMU0UsIFRSVUUsIDApOwotICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKGJ1dHRvbkJveCksIG1fb2theUJ1dHRvbiwgRkFMU0UsIFRS
VUUsIDApOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9va2F5QnV0dG9uLCAiY2xpY2tlZCIsIEdf
Q0FMTEJBQ0soYnV0dG9uQ2xpY2tlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChtX2NhbmNlbEJ1dHRvbiwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGJ1dHRvbkNsaWNrZWRD
YWxsYmFjayksIHRoaXMpOwotCi0gICAgU3RyaW5nIHJlYWxtID0gbV9jaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlKCkucmVhbG0oKTsKLSAgICBpZiAoIXJlYWxtLmlzRW1wdHkoKSkgewotICAgICAg
ICBwYWNrVHdvQ29sdW1uTGF5b3V0SW5Cb3goaEJveCwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxv
Z0xhYmVsKHByb21wdC5nZXQoKSwgZ0xheW91dFJvd1NwYWNpbmcpLCBOVUxMLAotICAgICAgICAg
ICAgY3JlYXRlRGlhbG9nTGFiZWwoXygiU2VydmVyIG1lc3NhZ2U6IikpLCBjcmVhdGVEaWFsb2dM
YWJlbChyZWFsbS51dGY4KCkuZGF0YSgpKSwKLSAgICAgICAgICAgIGNyZWF0ZURpYWxvZ0xhYmVs
KF8oIlVzZXJuYW1lOiIpKSwgY3JlYXRlRGlhbG9nRW50cnkoJm1fbG9naW5FbnRyeSksCi0gICAg
ICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJQYXNzd29yZDoiKSksIGNyZWF0ZURpYWxvZ0Vu
dHJ5KCZtX3Bhc3N3b3JkRW50cnkpLAotICAgICAgICAgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9u
LCBOVUxMLAotICAgICAgICAgICAgYnV0dG9uQm94LCBOVUxMLCBOVUxMKTsKLQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHBhY2tUd29Db2x1bW5MYXlvdXRJbkJveChoQm94LAotICAgICAgICAgICAg
Y3JlYXRlRGlhbG9nTGFiZWwocHJvbXB0LmdldCgpLCBnTGF5b3V0Um93U3BhY2luZyksIE5VTEws
Ci0gICAgICAgICAgICBjcmVhdGVEaWFsb2dMYWJlbChfKCJVc2VybmFtZToiKSksIGNyZWF0ZURp
YWxvZ0VudHJ5KCZtX2xvZ2luRW50cnkpLAotICAgICAgICAgICAgY3JlYXRlRGlhbG9nTGFiZWwo
XygiUGFzc3dvcmQ6IikpLCBjcmVhdGVEaWFsb2dFbnRyeSgmbV9wYXNzd29yZEVudHJ5KSwKLSAg
ICAgICAgICAgIG1fcmVtZW1iZXJDaGVja0J1dHRvbiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAg
IGJ1dHRvbkJveCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotCi0gICAgZ3RrX2VudHJ5X3NldF92aXNp
YmlsaXR5KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBGQUxTRSk7Ci0gICAgY29uc3QgQ3Jl
ZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IG1fY2hhbGxlbmdlLnBy
b3Bvc2VkQ3JlZGVudGlhbCgpOwotICAgIGlmICghY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3Rv
cmFnZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWSht
X2xvZ2luRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnVzZXIoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX3Bhc3N3
b3JkRW50cnkpLCBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlLnBhc3N3b3JkKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUoR1RLX1RP
R0dMRV9CVVRUT04obV9yZW1lbWJlckNoZWNrQnV0dG9uKSwgVFJVRSk7Ci0gICAgfQotfQotCi12
b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKLXsKLSAgICBndGtfd2lkZ2V0X3Nl
dF9jYW5fZGVmYXVsdChtX29rYXlCdXR0b24sIFRSVUUpOwotICAgIGd0a193aWRnZXRfZ3JhYl9k
ZWZhdWx0KG1fb2theUJ1dHRvbik7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKG1fbG9naW5F
bnRyeSk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsKLX0KLQotdm9pZCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCi17Ci0gICAgZ3RrX3dpZGdldF9kZXN0
cm95KG1fZGlhbG9nKTsKLSAgICBkZWxldGUgdGhpczsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCi17
Ci0gICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQotICAgICAgICBtX2NoYWxsZW5nZS5hdXRo
ZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRl
bnRpYWwobV9jaGFsbGVuZ2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9jaGFsbGVuZ2UuYXV0aGVu
dGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxlbmdlLCBjcmVkZW50
aWFsKTsKLX0KLQotdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YnV0dG9uQ2xpY2tlZENh
bGxiYWNrKEd0a1dpZGdldCogYnV0dG9uLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9n
KQotewotICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKLSAgICBpZiAoYnV0dG9uID09IGRpYWxv
Zy0+bV9va2F5QnV0dG9uKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2Vu
dHJ5X2dldF90ZXh0KEdUS19FTlRSWShkaWFsb2ctPm1fbG9naW5FbnRyeSkpOwotICAgICAgICBj
b25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZGlhbG9n
LT5tX3Bhc3N3b3JkRW50cnkpKTsKLSAgICAgICAgYm9vbCByZW1lbWJlclBhc3N3b3JkID0gZ3Rr
X3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihkaWFsb2ctPm1fcmVt
ZW1iZXJDaGVja0J1dHRvbikpOwotICAgICAgICBDcmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lz
dGVuY2U7Ci0KLSAgICAgICAgaWYgKHJlbWVtYmVyUGFzc3dvcmQgJiYgZGlhbG9nLT5tX2NyZWRl
bnRpYWxTdG9yYWdlTW9kZSA9PSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAg
cGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vz
c2lvbjsKLQotICAgICAgICBjcmVkZW50aWFsID0gQ3JlZGVudGlhbChTdHJpbmc6OmZyb21VVEY4
KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHBlcnNpc3RlbmNlKTsKLSAg
ICB9Ci0KLSAgICBkaWFsb2ctPmF1dGhlbnRpY2F0ZShjcmVkZW50aWFsKTsKLSAgICBkaWFsb2ct
PmRlc3Ryb3koKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc3YzgxYWRmZWZiZDE5MjY5NzU5YTk4NzE2NjFlZjQ4
MTViYTM2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaAorKysg
L2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCi0jZGVmaW5l
IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nX2gKLQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyk7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBlbnVtIENyZWRlbnRpYWxTdG9yYWdlTW9kZSB7Ci0g
ICAgICAgIEFsbG93UGVyc2lzdGVudFN0b3JhZ2UsIC8vIFRoZSB1c2VyIGlzIGFza2VkIHdoZXRo
ZXIgdG8gc3RvcmUgY3JlZGVudGlhbCBpbmZvcm1hdGlvbi4KLSAgICAgICAgRGlzYWxsb3dQZXJz
aXN0ZW50U3RvcmFnZSAvLyBDcmVkZW50aWFsIGluZm9ybWF0aW9uIGlzIG9ubHkga2VwdCBpbiB0
aGUgc2Vzc2lvbi4KLSAgICB9OwotCi0gICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUpOwotICAgIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0a1dpbmRvdyosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKLSAgICB2aXJ0dWFsIH5HdGtBdXRoZW50
aWNhdGlvbkRpYWxvZygpIHsgfQotICAgIHZvaWQgc2hvdygpOwotICAgIHZvaWQgZGVzdHJveSgp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBjcmVhdGVDb250ZW50c0luQ29udGFpbmVyKEd0a1dp
ZGdldCogY29udGFpbmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXV0aGVudGljYXRlKGNvbnN0IENy
ZWRlbnRpYWwmKTsKLSAgICBHdGtXaWRnZXQqIG1fZGlhbG9nOwotICAgIEd0a1dpZGdldCogbV9s
b2dpbkVudHJ5OwotICAgIEd0a1dpZGdldCogbV9wYXNzd29yZEVudHJ5OwotICAgIEd0a1dpZGdl
dCogbV9yZW1lbWJlckNoZWNrQnV0dG9uOwotICAgIEd0a1dpZGdldCogbV9va2F5QnV0dG9uOwot
ICAgIEd0a1dpZGdldCogbV9jYW5jZWxCdXR0b247Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIHZv
aWQgYnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCosIEd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nKik7Ci0gICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgbV9jaGFsbGVuZ2U7Ci0gICAgQ3Jl
ZGVudGlhbFN0b3JhZ2VNb2RlIG1fY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjOGEzMmMwMjY1ZWQxMTVkOGQ3NjFlZDdhNGZm
ZDIxM2VhZGQzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQ2xpY2tDb3VudGVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrQ2xpY2tDb3VudGVyLmgiCi0KLSNpbmNsdWRlICJHT3du
UHRyR3RrLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUd0a0NsaWNrQ291bnRlcjo6R3RrQ2xpY2tDb3VudGVyKCkKLSAgICA6IG1fY3VycmVudENsaWNr
Q291bnQoMCkKLSAgICAsIG1fcHJldmlvdXNDbGlja0J1dHRvbigwKQotICAgICwgbV9wcmV2aW91
c0NsaWNrVGltZSgwKQotewotfQotCi12b2lkIEd0a0NsaWNrQ291bnRlcjo6cmVzZXQoKQotewot
ICAgIG1fY3VycmVudENsaWNrQ291bnQgPSAwOwotICAgIG1fcHJldmlvdXNDbGlja1BvaW50ID0g
SW50UG9pbnQoKTsKLSAgICBtX3ByZXZpb3VzQ2xpY2tUaW1lID0gMDsKLSAgICBtX3ByZXZpb3Vz
Q2xpY2tCdXR0b24gPSAwOwotfQotCi1ib29sIEd0a0NsaWNrQ291bnRlcjo6c2hvdWxkUHJvY2Vz
c0J1dHRvbkV2ZW50KEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKLXsKLSAgICAvLyBGb3Ig
ZG91YmxlIGFuZCB0cmlwbGUgY2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBw
cmVzcyBldmVudAotICAgIC8vIGFuZCBhIHNwZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05f
UFJFU1MpLiBJZiB3ZSBkZXRlY3QgYSBzcGVjaWFsIHByZXNzCi0gICAgLy8gY29taW5nIHVwLCBp
Z25vcmUgdGhpcyBldmVudCBhcyBpdCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3Ig
dHJpcGxlCi0gICAgLy8gY2xpY2suIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMg
ZXZlbnQgaXMgdHdvIERPTSBidXR0b24gcHJlc3MgZXZlbnRzCi0gICAgLy8gYXJlIGdlbmVyYXRl
ZC4KLSAgICBHT3duUHRyPEdka0V2ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7Ci0g
ICAgaWYgKCFuZXh0RXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChuZXh0RXZl
bnQtPmFueS50eXBlID09IEdES18yQlVUVE9OX1BSRVNTIHx8IG5leHRFdmVudC0+YW55LnR5cGUg
PT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGd1aW50MzIgZ2V0RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkK
LXsKLSAgICBndWludDMyIHRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOwotICAgIGlm
ICh0aW1lKQotICAgICAgICByZXR1cm4gdGltZTsKLQotICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5
cyBoYXZlIGEgbm9uLXplcm8gdGltZSwgYnV0IGV2ZW50cyBzeW50aGVzaXplZAotICAgIC8vIGJ5
IHRoZSBEUlQgZG8gbm90IGFuZCB3ZSBtdXN0IGNhbGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRo
aXMgdGltZQotICAgIC8vIGlzIG5vdCBjYWxjdWxhdGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RL
KyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aAotICAgIC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RL
X0NVUlJFTlRfVElNRSBvbiBzeW50aGVzaXplZCBldmVudHMuCi0gICAgR1RpbWVWYWwgdGltZVZh
bHVlOwotICAgIGdfZ2V0X2N1cnJlbnRfdGltZSgmdGltZVZhbHVlKTsKLSAgICByZXR1cm4gKHRp
bWVWYWx1ZS50dl9zZWMgKiAxMDAwKSArICh0aW1lVmFsdWUudHZfdXNlYyAvIDEwMDApOwotfQot
Ci1pbnQgR3RrQ2xpY2tDb3VudGVyOjpjbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVudCkKLXsKLSAgICBnaW50IGRv
dWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7Ci0gICAgZ2ludCBkb3VibGVDbGlja1RpbWUgPSA1Owot
ICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRfZm9yX3NjcmVlbihn
dGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdz
LAotICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay1kaXN0YW5jZSIsICZkb3VibGVD
bGlja0Rpc3RhbmNlLAotICAgICAgICAgICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwg
JmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7Ci0KLSAgICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRv
IHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJDb3JlIHdhbnRzIHRvIGtub3cgYWJvdXQKLSAgICAvLyBx
dWFkcnVwbGUgY2xpY2tzLCBxdWludHVwbGUgY2xpY2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdl
IHJlcGxpY2F0ZSB0aGUKLSAgICAvLyBHREsgbG9naWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KLSAg
ICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50
KSk7Ci0gICAgZ3VpbnQzMiBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUoZXZlbnQpOwotCi0gICAg
aWYgKChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBH
REtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgfHwgKChhYnMoYnV0dG9uRXZlbnQtPnggLSBtX3By
ZXZpb3VzQ2xpY2tQb2ludC54KCkpIDwgZG91YmxlQ2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAg
ICYmIChhYnMoYnV0dG9uRXZlbnQtPnkgLSBtX3ByZXZpb3VzQ2xpY2tQb2ludC55KCkpIDwgZG91
YmxlQ2xpY2tEaXN0YW5jZSkKLSAgICAgICAgICAgICYmIChldmVudFRpbWUgLSBtX3ByZXZpb3Vz
Q2xpY2tUaW1lIDwgc3RhdGljX2Nhc3Q8Z3VpbnQ+KGRvdWJsZUNsaWNrVGltZSkpCi0gICAgICAg
ICAgICAmJiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSBtX3ByZXZpb3VzQ2xpY2tCdXR0b24pKSkK
LSAgICAgICAgbV9jdXJyZW50Q2xpY2tDb3VudCsrOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJy
ZW50Q2xpY2tDb3VudCA9IDE7Ci0KLSAgICBnZG91YmxlIHgsIHk7Ci0gICAgZ2RrX2V2ZW50X2dl
dF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7Ci0gICAgbV9wcmV2aW91c0NsaWNrUG9pbnQgPSBJbnRQ
b2ludCh4LCB5KTsKLSAgICBtX3ByZXZpb3VzQ2xpY2tCdXR0b24gPSBidXR0b25FdmVudC0+YnV0
dG9uOwotICAgIG1fcHJldmlvdXNDbGlja1RpbWUgPSBldmVudFRpbWU7Ci0KLSAgICByZXR1cm4g
bV9jdXJyZW50Q2xpY2tDb3VudDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0NsaWNrQ291bnRlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2NmNhMWRlYzkxODA3OTRmMmY3NTE5YjhiYzUyYjY3OTRiMWY5N2Nm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtDbGlja0NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgR3RrQ2xpY2tDb3VudGVy
X2gKLSNkZWZpbmUgR3RrQ2xpY2tDb3VudGVyX2gKLQotI2luY2x1ZGUgIkludFBvaW50LmgiCi0K
LXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtDbGlja0NvdW50ZXIgewotcHVibGljOgotICAgIEd0
a0NsaWNrQ291bnRlcigpOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBib29sIHNob3VsZFByb2Nl
c3NCdXR0b25FdmVudChHZGtFdmVudEJ1dHRvbiopOwotICAgIGludCBjbGlja0NvdW50Rm9yR2Rr
QnV0dG9uRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qKTsKLQotcHJpdmF0ZToKLSAg
ICBpbnQgbV9jdXJyZW50Q2xpY2tDb3VudDsKLSAgICBJbnRQb2ludCBtX3ByZXZpb3VzQ2xpY2tQ
b2ludDsKLSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0NsaWNrQnV0dG9uOwotICAgIGludCBt
X3ByZXZpb3VzQ2xpY2tUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmRE
cm9wSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1N2E2MDdhMTg5YjU0
Yjg2NGE1OThmZmI4NTg1M2E1OGQ3YjM2YjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmRE
cm9wSGVscGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a0RyYWdBbmREcm9wSGVscGVy
LmgiCi0KLSNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKLSNpbmNsdWRlICJEcmFn
RGF0YS5oIgotI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBEcm9wcGluZ0NvbnRleHQgewotICAg
IERyb3BwaW5nQ29udGV4dChHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uKQotICAgICAgICA6IGdka0NvbnRleHQoZ2RrQ29udGV4dCkKLSAgICAgICAg
LCBkYXRhT2JqZWN0KERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpKQotICAgICAgICAsIGxhc3RNb3Rp
b25Qb3NpdGlvbihwb3NpdGlvbikKLSAgICAgICAgLCBkcm9wSGFwcGVuZWQoZmFsc2UpCi0gICAg
ICAgICwgZXhpdGVkQ2FsbGJhY2soMCkKLSAgICB7Ci0gICAgfQotCi0gICAgR2RrRHJhZ0NvbnRl
eHQqIGdka0NvbnRleHQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+IGRhdGFP
YmplY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbGFzdE1vdGlvblBvc2l0aW9uOwotICAgIGlu
dCBwZW5kaW5nRGF0YVJlcXVlc3RzOwotICAgIGJvb2wgZHJvcEhhcHBlbmVkOwotICAgIERyYWdF
eGl0ZWRDYWxsYmFjayBleGl0ZWRDYWxsYmFjazsKLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxHZGtE
cmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+IERyb3BwaW5nQ29udGV4dE1hcDsKLXR5cGVk
ZWYgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiA+IERyYWdn
aW5nRGF0YU9iamVjdHNNYXA7Ci0KLUd0a0RyYWdBbmREcm9wSGVscGVyOjp+R3RrRHJhZ0FuZERy
b3BIZWxwZXIoKQotewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Ryb3BwaW5nQ29udGV4dHMpOwot
fQotCi1ib29sIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRW5kKEdka0RyYWdDb250
ZXh0KiBkcmFnQ29udGV4dCkKLXsKLSAgICBEcmFnZ2luZ0RhdGFPYmplY3RzTWFwOjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5maW5kKGRyYWdDb250ZXh0KTsKLSAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RyYWdnaW5nRGF0YU9iamVjdHMucmVtb3ZlKGl0ZXJhdG9y
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFu
ZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEq
IHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8pCi17Ci0gICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01h
cDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZmluZChjb250ZXh0
KTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgaXRlcmF0b3ItPnZh
bHVlLmdldCgpKTsKLX0KLQotc3RydWN0IEhhbmRsZURyYWdMYXRlckRhdGEgewotICAgIERyb3Bw
aW5nQ29udGV4dCogY29udGV4dDsKLSAgICBHdGtEcmFnQW5kRHJvcEhlbHBlciogZ2x1ZTsKLX07
Ci0KLXN0YXRpYyBnYm9vbGVhbiBoYW5kbGVEcmFnTGVhdmVMYXRlckNhbGxiYWNrKEhhbmRsZURy
YWdMYXRlckRhdGEqIGRhdGEpCi17Ci0gICAgZGF0YS0+Z2x1ZS0+aGFuZGxlRHJhZ0xlYXZlTGF0
ZXIoZGF0YS0+Y29udGV4dCk7Ci0gICAgZGVsZXRlIGRhdGE7Ci0gICAgcmV0dXJuIEZBTFNFOwot
fQotCi12b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhdmVMYXRlcihEcm9w
cGluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQtPmdka0NvbnRleHQp
OwotICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIElmIHRoZSB2aWV3IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJh
ZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRhdGEpCi0gICAgLy8gcmVxdWVzdHMsIGRv
bid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnLgotICAgIGlmIChj
b250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25z
dCBJbnRQb2ludCYgcG9zaXRpb24gPSBjb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0gICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoY29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChtX3dp
ZGdldCwgcG9zaXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgIERyYWdPcGVyYXRpb25Ob25l
KTsKLSAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dpZGdldCwgJmRyYWdEYXRhLCBjb250
ZXh0LT5kcm9wSGFwcGVuZWQpOwotCi0gICAgbV9kcm9wcGluZ0NvbnRleHRzLnJlbW92ZShpdGVy
YXRvcik7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci19Ci0KLXZvaWQgR3RrRHJhZ0FuZERyb3BIZWxw
ZXI6OmhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgRHJhZ0V4aXRl
ZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrKQotewotICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRl
cmF0b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChnZGtDb250ZXh0KTsKLSAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEgZHJhZy1sZWF2ZSBz
aWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZwotICAgIC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBX
ZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRlcgotICAgIC8v
IHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJv
bm91c2x5IGhlcmUuCi0gICAgSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSA9IG5ldyBIYW5kbGVE
cmFnTGF0ZXJEYXRhOwotICAgIGRhdGEtPmNvbnRleHQgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAg
ZGF0YS0+Y29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFjazsKLSAgICBkYXRh
LT5nbHVlID0gdGhpczsKLSAgICBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2spLCBkYXRhKTsKLX0KLQotc3Rh
dGljIHZvaWQgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoRHJvcHBpbmdDb250ZXh0KiBkcm9wQ29u
dGV4dCwgR3RrV2lkZ2V0KiB3aWRnZXQsIGd1aW50IHRpbWUpCi17Ci0gICAgR2RrRHJhZ0NvbnRl
eHQqIGdka0NvbnRleHQgPSBkcm9wQ29udGV4dC0+Z2RrQ29udGV4dDsKLSAgICBWZWN0b3I8R2Rr
QXRvbT4gYWNjZXB0YWJsZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+ZHJvcEF0b21zRm9yQ29udGV4dCh3aWRnZXQsIGdka0NvbnRleHQpKTsKLSAg
ICBkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUo
KTsgaSsrKQotICAgICAgICBndGtfZHJhZ19nZXRfZGF0YSh3aWRnZXQsIGdka0NvbnRleHQsIGFj
Y2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0aW1lKTsKLX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJh
Z0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKLXsKLSAgICBEcm9wcGlu
Z0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IDA7Ci0gICAgRHJvcHBpbmdDb250ZXh0TWFwOjpp
dGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQpOwotICAg
IGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpIHsKLSAgICAgICAgZHJv
cHBpbmdDb250ZXh0ID0gbmV3IERyb3BwaW5nQ29udGV4dChjb250ZXh0LCBwb3NpdGlvbik7Ci0g
ICAgICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsK
LSAgICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdl
dCwgdGltZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0
b3ItPnZhbHVlOwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9
IHBvc2l0aW9uOwotICAgIH0KLQotICAgIC8vIERvbid0IHNlbmQgYW55IGRyYWcgaW5mb3JtYXRp
b24gdG8gV2ViQ29yZSB1bnRpbCB3ZSd2ZSByZXRyaWV2ZWQgYWxsCi0gICAgLy8gdGhlIGRhdGEg
Zm9yIHRoaXMgZHJhZyBvcGVyYXRpb24uIE90aGVyd2lzZSB3ZSdkIGhhdmUgdG8gYmxvY2sgdG8g
d2FpdAotICAgIC8vIGZvciB0aGUgZHJhZydzIGRhdGEuCi0gICAgQVNTRVJUKGRyb3BwaW5nQ29u
dGV4dCk7Ci0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA+IDAp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9i
amVjdC5nZXQoKTsKLX0KLQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6Omhh
bmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlv
bkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8sIEludFBvaW50JiBwb3NpdGlvbikK
LXsKLSAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGlu
Z0NvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdD
b250ZXh0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBEcm9wcGluZ0NvbnRleHQq
IGRyb3BwaW5nQ29udGV4dCA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBkcm9wcGluZ0NvbnRleHQt
PnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFz
dGVib2FyZEhlbHBlcigpLT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRh
LCBpbmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwotCi0gICAgaWYgKGRy
b3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIGRyYWctZGF0YS1yZWNlaXZlZCBzaWdu
YWwgYXJlIHNvbWV0aW1lcwotICAgIC8vIGluYWNjdXJhdGUgaW4gRFJULCBzbyB1c2UgdGhlIGNv
b3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBldmVudC4KLSAgICBwb3NpdGlvbiA9IGRyb3Bw
aW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5v
IG1vcmUgcGVuZGluZyByZXF1ZXN0cywgc3RhcnQgc2VuZGluZyBkcmFnZ2luZyBkYXRhIHRvIFdl
YkNvcmUuCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKTsKLX0K
LQotRGF0YU9iamVjdEd0ayogR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEcm9wKEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0
b3IgaXRlcmF0b3IgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsKLSAgICBpZiAo
aXRlcmF0b3IgPT0gbV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnZhbHVl
OwotICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKLQotICAgIHJldHVy
biBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCk7Ci19Ci0KLXZvaWQgR3RrRHJhZ0Fu
ZERyb3BIZWxwZXI6OnN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBEYXRhT2Jq
ZWN0R3RrKiBkYXRhT2JqZWN0KQotewotICAgIG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5zZXQoY29u
dGV4dCwgZGF0YU9iamVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGIwMmM0YjdhM2Y4NzMwMTM1Y2RmNjE2NGFlMDY5
ZmFlM2Q1OTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2Fs
aWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBHdGtEcmFn
QW5kRHJvcEhlbHBlcl9oCi0jZGVmaW5lIEd0a0RyYWdBbmREcm9wSGVscGVyX2gKLQotI2luY2x1
ZGUgIkRhdGFPYmplY3RHdGsuaCIKLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRHJvcHBpbmdDb250ZXh0OwotY2xhc3Mg
RHJhZ0RhdGE7Ci0KLXR5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lkZ2V0
KiwgRHJhZ0RhdGEqLCBib29sIGRyb3BIYXBwZW5lZCk7Ci0KLWNsYXNzIEd0a0RyYWdBbmREcm9w
SGVscGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5kRHJvcEhlbHBlcik7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBHdGtEcmFnQW5k
RHJvcEhlbHBlcigpCi0gICAgICAgIDogbV93aWRnZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIH5H
dGtEcmFnQW5kRHJvcEhlbHBlcigpOwotCi0gICAgdm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0KiB3
aWRnZXQpIHsgbV93aWRnZXQgPSB3aWRnZXQ7IH0KLSAgICBib29sIGhhbmRsZURyYWdFbmQoR2Rr
RHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIGhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0
KiwgR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50IGluZm8pOwotICAgIHZvaWQgaGFuZGxlRHJhZ0xl
YXZlKEdka0RyYWdDb250ZXh0KiwgRHJhZ0V4aXRlZENhbGxiYWNrKTsKLSAgICB2b2lkIGhhbmRs
ZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCopOwotICAgIERhdGFPYmplY3RHdGsqIGhh
bmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIHVuc2lnbmVk
IHRpbWUpOwotICAgIERhdGFPYmplY3RHdGsqIGhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJh
Z0NvbnRleHQqLCBHdGtTZWxlY3Rpb25EYXRhKiwgdW5zaWduZWQgaW5mbywgSW50UG9pbnQmKTsK
LSAgICBEYXRhT2JqZWN0R3RrKiBoYW5kbGVEcmFnRHJvcChHZGtEcmFnQ29udGV4dCopOwotICAg
IHZvaWQgc3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRleHQqLCBEYXRhT2JqZWN0R3RrKik7Ci0KLXBy
aXZhdGU6Ci0gICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKLSAgICBIYXNoTWFwPEdka0RyYWdDb250
ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gbV9kcm9wcGluZ0NvbnRleHRzOwotICAgIEhhc2hNYXA8
R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBtX2RyYWdnaW5nRGF0YU9i
amVjdHM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBEYXRhT2JqZWN0R3RrX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTk4MGI1NDZhMmE0OWM2NDYwNTQ1MTE1ZTA0NmEx
MzY1YmM0MjNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJHdGtJbnB1dE1ldGhvZEZpbHRlci5oIgotCi0jaW5jbHVkZSAi
R093blB0ckd0ay5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlIDxnZGsv
Z2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotCi0vLyBUaGUgV2luZG93cyBjb21wb3NpdGlvbiBrZXkgZXZlbnQgY29kZSBpcyAy
OTkgb3IgVktfUFJPQ0VTU0tFWS4gV2UgbmVlZCB0bwotLy8gZW1pdCB0aGlzIGNvZGUgZm9yIHdl
YiBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2hlbiBrZXkgZXZlbnRzIHRyaWdnZXIKLS8vIGNvbXBv
c2l0aW9uIHJlc3VsdHMuIEdESyBkb2Vzbid0IGhhdmUgYW4gZXF1aXZhbGVudCwgc28gd2Ugc2Vu
ZCBWb2lkU3ltYm9sCi0vLyBoZXJlIHRvIFdlYkNvcmUuIFBsYXRmb3JtS2V5RXZlbnQga25vd3Mg
dG8gY29udmVydCB0aGlzIGNvZGUgaW50bwotLy8gVktfUFJPQ0VTU0tFWS4KLWNvbnN0IGludCBn
Q29tcG9zaXRpb25FdmVudEtleUNvZGUgPSBHREtfS0VZX1ZvaWRTeW1ib2w7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgaGFuZGxlQ29tbWl0Q2FsbGJhY2soR3RrSU1Db250
ZXh0KiwgY29uc3QgY2hhciogY29tcG9zaXRpb25TdHJpbmcsIEd0a0lucHV0TWV0aG9kRmlsdGVy
KiBmaWx0ZXIpCi17Ci0gICAgZmlsdGVyLT5oYW5kbGVDb21taXQoY29tcG9zaXRpb25TdHJpbmcp
OwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVQcmVlZGl0U3RhcnRDYWxsYmFjayhHdGtJTUNvbnRl
eHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxl
UHJlZWRpdFN0YXJ0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkQ2Fs
bGJhY2soR3RrSU1Db250ZXh0KiwgR3RrSW5wdXRNZXRob2RGaWx0ZXIqIGZpbHRlcikKLXsKLSAg
ICBmaWx0ZXItPmhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRs
ZVByZWVkaXRFbmRDYWxsYmFjayhHdGtJTUNvbnRleHQqLCBHdGtJbnB1dE1ldGhvZEZpbHRlciog
ZmlsdGVyKQotewotICAgIGZpbHRlci0+aGFuZGxlUHJlZWRpdEVuZCgpOwotfQotCi1zdGF0aWMg
dm9pZCBoYW5kbGVXaWRnZXRSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtJbnB1dE1ldGhv
ZEZpbHRlciogZmlsdGVyKQotewotICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9n
ZXRfd2luZG93KHdpZGdldCk7Ci0gICAgQVNTRVJUKHdpbmRvdyk7Ci0gICAgZ3RrX2ltX2NvbnRl
eHRfc2V0X2NsaWVudF93aW5kb3coZmlsdGVyLT5jb250ZXh0KCksIHdpbmRvdyk7Ci19Ci0KLXZv
aWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNldFdpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBBU1NFUlQoIW1fd2lkZ2V0KTsKLQotICAgIG1fd2lkZ2V0ID0gd2lkZ2V0OwotICAgIGlm
IChndGtfd2lkZ2V0X2dldF93aW5kb3cobV93aWRnZXQpKQotICAgICAgICBoYW5kbGVXaWRnZXRS
ZWFsaXplKG1fd2lkZ2V0LCB0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3RfYWZ0ZXIod2lkZ2V0LCAicmVhbGl6ZSIsIEdfQ0FMTEJBQ0soaGFuZGxlV2lkZ2V0UmVhbGl6
ZSksIHRoaXMpOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRDdXJzb3JSZWN0
KGNvbnN0IEludFJlY3QmIGN1cnNvclJlY3QpCi17Ci0gICAgLy8gRG9uJ3QgbW92ZSB0aGUgd2lu
ZG93IHVubGVzcyB0aGUgY3Vyc29yIGFjdHVhbGx5IG1vdmVzIG1vcmUgdGhhbiAxMAotICAgIC8v
IHBpeGVscy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIG1ha2luZyB0aGUgd2luZG93IGZsYXNoIGR1
cmluZyBtaW5vcgotICAgIC8vIGN1cnNvciBhZGp1c3RtZW50cy4KLSAgICBzdGF0aWMgY29uc3Qg
aW50IHdpbmRvd01vdmVtZW50VGhyZXNob2xkID0gMTAgKiAxMDsKLSAgICBpZiAoY3Vyc29yUmVj
dC5sb2NhdGlvbigpLmRpc3RhbmNlU3F1YXJlZFRvUG9pbnQobV9sYXN0Q2FyZUxvY2F0aW9uKSA8
IHdpbmRvd01vdmVtZW50VGhyZXNob2xkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RD
YXJlTG9jYXRpb24gPSBjdXJzb3JSZWN0LmxvY2F0aW9uKCk7Ci0gICAgSW50UmVjdCB0cmFuc2xh
dGVkUmVjdCA9IGN1cnNvclJlY3Q7Ci0KLSAgICBBU1NFUlQobV93aWRnZXQpOwotICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fd2lk
Z2V0LCAmYWxsb2NhdGlvbik7Ci0gICAgdHJhbnNsYXRlZFJlY3QubW92ZShhbGxvY2F0aW9uLngs
IGFsbG9jYXRpb24ueSk7Ci0KLSAgICBHZGtSZWN0YW5nbGUgZ2RrQ3Vyc29yUmVjdCA9IGN1cnNv
clJlY3Q7Ci0gICAgZ3RrX2ltX2NvbnRleHRfc2V0X2N1cnNvcl9sb2NhdGlvbihtX2NvbnRleHQu
Z2V0KCksICZnZGtDdXJzb3JSZWN0KTsKLX0KLQotR3RrSW5wdXRNZXRob2RGaWx0ZXI6Okd0a0lu
cHV0TWV0aG9kRmlsdGVyKCkKLSAgICA6IG1fY3Vyc29yT2Zmc2V0KDApCi0gICAgLCBtX2NvbnRl
eHQoYWRvcHRHUmVmKGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCkpKQotICAgICwgbV93aWRnZXQo
MCkKLSAgICAsIG1fZW5hYmxlZChmYWxzZSkKLSAgICAsIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRs
eShmYWxzZSkKLSAgICAsIG1fZmlsdGVyaW5nS2V5RXZlbnQoZmFsc2UpCi0gICAgLCBtX3ByZWVk
aXRDaGFuZ2VkKGZhbHNlKQotICAgICwgbV9wcmV2ZW50TmV4dENvbW1pdChmYWxzZSkKLSAgICAs
IG1fanVzdFNlbnRGYWtlS2V5VXAoZmFsc2UpCi0gICAgLCBtX2xhc3RGaWx0ZXJlZEtleVByZXNz
Q29kZVdpdGhOb1Jlc3VsdHMoR0RLX0tFWV9Wb2lkU3ltYm9sKQotewotICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9jb250ZXh0LmdldCgpLCAiY29tbWl0IiwgR19DQUxMQkFDSyhoYW5kbGVDb21taXRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAi
cHJlZWRpdC1zdGFydCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdFN0YXJ0Q2FsbGJhY2spLCB0
aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29udGV4dC5nZXQoKSwgInByZWVkaXQtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0soaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRoaXMpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1lbmQiLCBHX0NB
TExCQUNLKGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOwotfQotCi1HdGtJbnB1dE1l
dGhvZEZpbHRlcjo6fkd0a0lucHV0TWV0aG9kRmlsdGVyKCkKLXsKLSAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9jb250ZXh0LmdldCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihoYW5kbGVDb21taXRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGhhbmRsZVByZWVkaXRTdGFydENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fY29udGV4dC5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaGFuZGxlUHJlZWRpdENoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2NvbnRleHQuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZVByZWVkaXRFbmRDYWxsYmFjayksIHRoaXMpOwotICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3dpZGdldCwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oaGFuZGxlV2lkZ2V0UmVhbGl6ZSksIHRoaXMpOwotfQotCi12b2lkIEd0
a0lucHV0TWV0aG9kRmlsdGVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2Vu
YWJsZWQgPSBlbmFibGVkOwotICAgIGlmIChlbmFibGVkKQotICAgICAgICBndGtfaW1fY29udGV4
dF9mb2N1c19pbihtX2NvbnRleHQuZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgZ3RrX2ltX2Nv
bnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KLWJvb2wgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6OmZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKLXsKLSAgICBpZiAo
IWNhbkVkaXQoKSB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm4gc2VuZFNpbXBsZUtleUV2
ZW50KGV2ZW50KTsKLQotICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKLSAgICBtX2ZpbHRl
cmluZ0tleUV2ZW50ID0gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIGludCBsYXN0RmlsdGVyZWRLZXlQ
cmVzc0NvZGVXaXRoTm9SZXN1bHRzID0gbV9sYXN0RmlsdGVyZWRLZXlQcmVzc0NvZGVXaXRoTm9S
ZXN1bHRzOwotICAgIG1fbGFzdEZpbHRlcmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9IEdE
S19LRVlfVm9pZFN5bWJvbDsKLQotICAgIGJvb2wgZmlsdGVyZWQgPSBndGtfaW1fY29udGV4dF9m
aWx0ZXJfa2V5cHJlc3MobV9jb250ZXh0LmdldCgpLCBldmVudCk7Ci0gICAgbV9maWx0ZXJpbmdL
ZXlFdmVudCA9IGZhbHNlOwotCi0gICAgYm9vbCBqdXN0U2VudEZha2VLZXlVcCA9IG1fanVzdFNl
bnRGYWtlS2V5VXA7Ci0gICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IGZhbHNlOwotICAgIGlmIChq
dXN0U2VudEZha2VLZXlVcCAmJiBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gU2ltcGxlIGlucHV0IG1ldGhvZHMgd29yayBzdWNo
IHRoYXQgZXZlbiBub3JtYWwga2V5c3Ryb2tlcyBmaXJlIHRoZQotICAgIC8vIGNvbW1pdCBzaWdu
YWwuIFdlIGRldGVjdCB0aG9zZSBzaXR1YXRpb25zIGFuZCB0cmVhdCB0aGVtIGFzIG5vcm1hbAot
ICAgIC8vIGtleSBldmVudHMsIHN1cHBseWluZyB0aGUgY29tbWl0IHN0cmluZyBhcyB0aGUga2V5
IGNoYXJhY3Rlci4KLSAgICBpZiAoZmlsdGVyZWQgJiYgIW1fY29tcG9zaW5nVGV4dEN1cnJlbnRs
eSAmJiAhbV9wcmVlZGl0Q2hhbmdlZCAmJiBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmxlbmd0aCgp
ID09IDEpIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBzZW5kU2ltcGxlS2V5RXZlbnQoZXZlbnQs
IG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwotICAgICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9u
ID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgaWYgKGZp
bHRlcmVkICYmIGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1MpIHsKLSAgICAgICAgaWYgKCFt
X3ByZWVkaXRDaGFuZ2VkICYmIG1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9IHRydWU7Ci0gICAgICAgICAgICBt
X2xhc3RGaWx0ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHMgPSBldmVudC0+a2V5dmFsOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlc3Vs
dCA9IHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoZXZlbnQpOwotICAgICAgICBp
ZiAoIW1fY29uZmlybWVkQ29tcG9zaXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2Nv
bXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fY29uZmlybWVkQ29t
cG9zaXRpb24gPSBTdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLQotICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZmlsdGVyZWQgYSBrZXkgcHJlc3MgZXZl
bnQgYW5kIGl0IHlpZWxkZWQgbm8gcmVzdWx0cy4gU3VwcHJlc3MKLSAgICAvLyB0aGUgY29ycmVz
cG9uZGluZyBrZXkgcmVsZWFzZSBldmVudCB0byBhdm9pZCBjb25mdXNpbmcgdGhlIHdlYiBjb250
ZW50LgotICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgJiYgbGFzdEZpbHRl
cmVkS2V5UHJlc3NDb2RlV2l0aE5vUmVzdWx0cyA9PSBldmVudC0+a2V5dmFsKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgYSBrZXlzdHJva2Ugd2FzIGVpdGhl
cjoKLSAgICAvLyAxLiBVbmZpbHRlcmVkCi0gICAgLy8gMi4gQSBmaWx0ZXJlZCBrZXl1cCBldmVu
dC4gQXMgdGhlIElNRSBjb2RlIGluIEVkaXRvckNsaWVudC5oIGRvZXNuJ3QKLSAgICAvLyAgICBl
dmVyIGxvb2sgYXQga2V5dXAgZXZlbnRzLCB3ZSBzZW5kIGFueSBjb21wb3NpdGlvbiByZXN1bHRz
IGJlZm9yZQotICAgIC8vICAgIHRoZSBrZXkgZXZlbnQuCi0gICAgLy8gQm90aCBtaWdodCBoYXZl
IGNvbXBvc2l0aW9uIHJlc3VsdHMgb3Igbm90LgotICAgIC8vCi0gICAgLy8gSXQncyBpbXBvcnRh
bnQgdG8gc2VuZCB0aGUgY29tcG9zaXRpb24gcmVzdWx0cyBiZWZvcmUgdGhlIGV2ZW50Ci0gICAg
Ly8gYmVjYXVzZSBzb21lIElNIG1vZHVsZXMgb3BlcmF0ZSB0aGF0IHdheS4gRm9yIGV4YW1wbGUg
KHRha2VuIGZyb20KLSAgICAvLyB0aGUgQ2hyb21pdW0gc291cmNlKSwgdGhlIGxhdGluLXBvc3Qg
aW5wdXQgbWV0aG9kIGdpdmVzIHRoaXMgc2VxdWVuY2UKLSAgICAvLyB3aGVuIHlvdSBwcmVzcyAn
YScgYW5kIHRoZW4gYmFja3NwYWNlOgotICAgIC8vICAxLiBrZXlkb3duICdhJyAoZmlsdGVyZWQp
Ci0gICAgLy8gIDIuIHByZWVkaXQgY2hhbmdlZCB0byAiYSIKLSAgICAvLyAgMy4ga2V5dXAgJ2En
ICh1bmZpbHRlcmVkKQotICAgIC8vICA0LiBrZXlkb3duIEJhY2tzcGFjZSAodW5maWx0ZXJlZCkK
LSAgICAvLyAgNS4gY29tbWl0ICJhIgotICAgIC8vICA2LiBwcmVlZGl0IGVuZAotICAgIGlmICgh
bV9jb25maXJtZWRDb21wb3NpdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIGNvbmZpcm1Db21wb3Np
dGlvbigpOwotICAgIGlmIChtX3ByZWVkaXRDaGFuZ2VkKQotICAgICAgICB1cGRhdGVQcmVlZGl0
KCk7Ci0gICAgcmV0dXJuIHNlbmRTaW1wbGVLZXlFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgR3Rr
SW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKQotewotICAgIC8vIENv
bmZpcm1pbmcgdGhlIGNvbXBvc2l0aW9uIG1heSB0cmlnZ2VyIGEgc2VsZWN0aW9uIGNoYW5nZSwg
d2hpY2gKLSAgICAvLyBtaWdodCB0cmlnZ2VyIGZ1cnRoZXIgdW53YW50ZWQgYWN0aW9ucyBvbiB0
aGUgY29udGV4dCwgc28gd2UgcHJldmVudAotICAgIC8vIHRoYXQgYnkgc2V0dGluZyBtX2NvbXBv
c2luZ1RleHRDdXJyZW50bHkgdG8gZmFsc2UuCi0gICAgaWYgKG1fY29tcG9zaW5nVGV4dEN1cnJl
bnRseSkKLSAgICAgICAgY29uZmlybUN1cnJlbnRDb21wb3NpdGlvbigpOwotICAgIG1fY29tcG9z
aW5nVGV4dEN1cnJlbnRseSA9IGZhbHNlOwotICAgIGNhbmNlbENvbnRleHRDb21wb3NpdGlvbigp
OwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpyZXNldENvbnRleHQoKQotewotCi0g
ICAgLy8gV2UgYWx3YXlzIGNhbmNlbCB0aGUgY3VycmVudCBXZWJDb3JlIGNvbXBvc2l0aW9uIGhl
cmUsIGluIGNhc2UgdGhlCi0gICAgLy8gY29tcG9zaXRpb24gd2FzIHNldCBvdXRzaWRlIHRoZSBH
VEsrIElNRSBwYXRoICh2aWEgYSBzY3JpcHQsIGZvcgotICAgIC8vIGluc3RhbmNlKSBhbmQgd2Ug
YXJlbid0IHRyYWNraW5nIGl0LgotICAgIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpOwotCi0g
ICAgaWYgKCFtX2NvbXBvc2luZ1RleHRDdXJyZW50bHkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKLSAgICBjYW5jZWxDb250ZXh0Q29tcG9z
aXRpb24oKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6Y2FuY2VsQ29udGV4dENv
bXBvc2l0aW9uKCkKLXsKLSAgICBtX3ByZXZlbnROZXh0Q29tbWl0ID0gIW1fcHJlZWRpdC5pc0Vt
cHR5KCk7Ci0KLSAgICBndGtfaW1fY29udGV4dF9yZXNldChtX2NvbnRleHQuZ2V0KCkpOwotCi0g
ICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0gICAgbV9qdXN0U2VudEZha2VL
ZXlVcCA9IGZhbHNlOwotICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOwotICAgIG1fY29uZmlybWVk
Q29tcG9zaXRpb24gPSBTdHJpbmcoKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6
bm90aWZ5Rm9jdXNlZEluKCkKLXsKLSAgICBtX2VuYWJsZWQgPSB0cnVlOwotICAgIGd0a19pbV9j
b250ZXh0X2ZvY3VzX2luKG1fY29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRo
b2RGaWx0ZXI6Om5vdGlmeUZvY3VzZWRPdXQoKQotewotICAgIGlmICghbV9lbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jb21wb3NpbmdUZXh0Q3VycmVudGx5KQotICAgICAg
ICBjb25maXJtQ3VycmVudENvbXBvc2l0aW9uKCk7Ci0gICAgY2FuY2VsQ29udGV4dENvbXBvc2l0
aW9uKCk7Ci0gICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KG1fY29udGV4dC5nZXQoKSk7Ci0g
ICAgbV9lbmFibGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmNv
bmZpcm1Db21wb3NpdGlvbigpCi17Ci0gICAgY29uZmlybUNvbXBvc2l0aW9uVGV4dChtX2NvbmZp
cm1lZENvbXBvc2l0aW9uKTsKLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7
Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVkaXQoKQotewotICAg
IHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7Ci0gICAgbV9wcmVlZGl0Q2hh
bmdlZCA9IGZhbHNlOwotfQotCi12b2lkIEd0a0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9z
aXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9T
ZW5kKQotewotICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0tF
WV9QUkVTUykpOwotICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAg
ZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNvZGU7Ci0gICAgc2VuZEtl
eUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwgcmVzdWx0c1RvU2VuZCwg
RXZlbnRGYWtlZCk7Ci0KLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7Ci0g
ICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbikKLSAgICAgICAgbV9jb21wb3NpbmdU
ZXh0Q3VycmVudGx5ID0gZmFsc2U7Ci0KLSAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFT
RTsKLSAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXksIFN0cmluZygpLCBFdmVudEZh
a2VkKTsKLSAgICBtX2p1c3RTZW50RmFrZUtleVVwID0gdHJ1ZTsKLX0KLQotdm9pZCBHdGtJbnB1
dE1ldGhvZEZpbHRlcjo6aGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9uU3RyaW5n
KQotewotICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0KSB7Ci0gICAgICAgIG1fcHJldmVudE5l
eHRDb21taXQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9l
bmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmFw
cGVuZChTdHJpbmc6OmZyb21VVEY4KGNvbXBvc2l0aW9uU3RyaW5nKSk7Ci0KLSAgICAvLyBJZiB0
aGUgY29tbWl0IHdhcyB0cmlnZ2VyZWQgb3V0c2lkZSBvZiBhIGtleSBldmVudCwganVzdCBzZW5k
Ci0gICAgLy8gdGhlIElNRSBldmVudCBub3cuIElmIHdlIGFyZSBoYW5kbGluZyBhIGtleSBldmVu
dCwgd2UnbGwgZGVjaWRlCi0gICAgLy8gbGF0ZXIgaG93IHRvIGhhbmRsZSB0aGlzLgotICAgIGlm
ICghbV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAgc2VuZENvbXBvc2l0aW9uQW5kUHJlZWRp
dFdpdGhGYWtlS2V5RXZlbnRzKENvbXBvc2l0aW9uKTsKLX0KLQotdm9pZCBHdGtJbnB1dE1ldGhv
ZEZpbHRlcjo6aGFuZGxlUHJlZWRpdFN0YXJ0KCkKLXsKLSAgICBpZiAobV9wcmV2ZW50TmV4dENv
bW1pdCB8fCAhbV9lbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9wcmVlZGl0Q2hhbmdl
ZCA9IHRydWU7Ci0gICAgbV9wcmVlZGl0ID0gIiI7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RG
aWx0ZXI6OmhhbmRsZVByZWVkaXRDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIW1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR093blB0cjxnY2hhcj4gbmV3UHJlZWRpdDsKLSAgICBndGtf
aW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcobV9jb250ZXh0LmdldCgpLCAmbmV3UHJlZWRp
dC5vdXRQdHIoKSwgMCwgJm1fY3Vyc29yT2Zmc2V0KTsKLQotICAgIGlmIChtX3ByZXZlbnROZXh0
Q29tbWl0KSB7Ci0gICAgICAgIGlmIChzdHJsZW4obmV3UHJlZWRpdC5nZXQoKSkgPiAwKQotICAg
ICAgICAgICAgbV9wcmV2ZW50TmV4dENvbW1pdCA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wcmVlZGl0ID0gU3RyaW5nOjpmcm9tVVRG
OChuZXdQcmVlZGl0LmdldCgpKTsKLSAgICBtX2N1cnNvck9mZnNldCA9IHN0ZDo6bWluKHN0ZDo6
bWF4KG1fY3Vyc29yT2Zmc2V0LCAwKSwgc3RhdGljX2Nhc3Q8aW50PihtX3ByZWVkaXQubGVuZ3Ro
KCkpKTsKLQotICAgIG1fY29tcG9zaW5nVGV4dEN1cnJlbnRseSA9ICFtX3ByZWVkaXQuaXNFbXB0
eSgpOwotICAgIG1fcHJlZWRpdENoYW5nZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX2ZpbHRlcmlu
Z0tleUV2ZW50KQotICAgICAgICBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlF
dmVudHMoUHJlZWRpdCk7Ci19Ci0KLXZvaWQgR3RrSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZVBy
ZWVkaXRFbmQoKQotewotICAgIGlmIChtX3ByZXZlbnROZXh0Q29tbWl0IHx8ICFtX2VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJlZWRpdCA9IFN0cmluZygpOwotICAgIG1fY3Vy
c29yT2Zmc2V0ID0gMDsKLSAgICBtX3ByZWVkaXRDaGFuZ2VkID0gdHJ1ZTsKLQotICAgIGlmICgh
bV9maWx0ZXJpbmdLZXlFdmVudCkKLSAgICAgICAgdXBkYXRlUHJlZWRpdCgpOwotfQotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTQ4MjUzNDg4ZDEwNGU4NTQzYmEwZjEy
OGFhNjMzNDFlY2E3YjY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0a0lucHV0TWV0aG9kRmlsdGVyX2gKLSNkZWZpbmUgR3Rr
SW5wdXRNZXRob2RGaWx0ZXJfaAotCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HdGtJTUNvbnRleHQgR3RrSU1Db250ZXh0Owot
dHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR3RrSW5wdXRNZXRob2RGaWx0ZXIgewotcHVibGljOgotICAgIEd0a0lucHV0
TWV0aG9kRmlsdGVyKCk7Ci0gICAgfkd0a0lucHV0TWV0aG9kRmlsdGVyKCk7Ci0KLSAgICBib29s
IGZpbHRlcktleUV2ZW50KEdka0V2ZW50S2V5Kik7Ci0gICAgdm9pZCBub3RpZnlNb3VzZUJ1dHRv
blByZXNzKCk7Ci0gICAgdm9pZCBub3RpZnlGb2N1c2VkSW4oKTsKLSAgICB2b2lkIG5vdGlmeUZv
Y3VzZWRPdXQoKTsKLSAgICB2b2lkIHJlc2V0Q29udGV4dCgpOwotICAgIHZvaWQgc2V0RW5hYmxl
ZChib29sKTsKLQotICAgIHZvaWQgaGFuZGxlQ29tbWl0KGNvbnN0IGNoYXIqIGNvbXBvc2l0aW9u
U3RyaW5nKTsKLSAgICB2b2lkIGhhbmRsZVByZWVkaXRDaGFuZ2VkKCk7Ci0gICAgdm9pZCBoYW5k
bGVQcmVlZGl0U3RhcnQoKTsKLSAgICB2b2lkIGhhbmRsZVByZWVkaXRFbmQoKTsKLQotICAgIHZv
aWQgY29uZmlybUNvbXBvc2l0aW9uKCk7Ci0gICAgdm9pZCBjYW5jZWxDb250ZXh0Q29tcG9zaXRp
b24oKTsKLSAgICB2b2lkIHVwZGF0ZVByZWVkaXQoKTsKLSAgICB2b2lkIHNldEN1cnNvclJlY3Qo
Y29uc3QgSW50UmVjdCYgbG9jYXRpb24pOwotCi0gICAgR3RrSU1Db250ZXh0KiBjb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICBlbnVtIEV2ZW50RmFrZWRGb3JDb21w
b3NpdGlvbiB7Ci0gICAgICAgIEV2ZW50RmFrZWQsCi0gICAgICAgIEV2ZW50Tm90RmFrZWQKLSAg
ICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZW51bSBSZXN1bHRzVG9TZW5kIHsKLSAgICAgICAgUHJl
ZWRpdCA9IDEgPDwgMSwKLSAgICAgICAgQ29tcG9zaXRpb24gPSAxIDw8IDIsCi0gICAgICAgIFBy
ZWVkaXRBbmRDb21wb3NpdGlvbiA9IFByZWVkaXQgKyBDb21wb3NpdGlvbgotICAgIH07Ci0KLSAg
ICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqKTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRWRpdCgp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5Kiwg
V1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcgPSBTdHJpbmcoKSwgRXZlbnRGYWtlZEZvckNvbXBvc2l0
aW9uID0gRXZlbnROb3RGYWtlZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRX
aXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVzdWx0c1RvU2VuZCA9IFByZWVk
aXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uID0gRXZlbnROb3RGYWtl
ZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25UZXh0KFN0cmluZyBj
b21wb3NpdGlvbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ3VycmVudENvbXBvc2l0
aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29tcG9zaXRpb24oKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWVkaXQoU3RyaW5nLCBpbnQgY3Vyc29yT2Zmc2V0
KSA9IDA7Ci0KLSAgICBXVEY6OlN0cmluZyBtX2NvbmZpcm1lZENvbXBvc2l0aW9uOwotICAgIFdU
Rjo6U3RyaW5nIG1fcHJlZWRpdDsKLSAgICBpbnQgbV9jdXJzb3JPZmZzZXQ7Ci0KLXByaXZhdGU6
Ci0gICAgdm9pZCBzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMoUmVz
dWx0c1RvU2VuZCk7Ci0KLSAgICBHUmVmUHRyPEd0a0lNQ29udGV4dD4gbV9jb250ZXh0OwotICAg
IEd0a1dpZGdldCogbV93aWRnZXQ7Ci0gICAgYm9vbCBtX2VuYWJsZWQ7Ci0gICAgYm9vbCBtX2Nv
bXBvc2luZ1RleHRDdXJyZW50bHk7Ci0gICAgYm9vbCBtX2ZpbHRlcmluZ0tleUV2ZW50OwotICAg
IGJvb2wgbV9wcmVlZGl0Q2hhbmdlZDsKLSAgICBib29sIG1fcHJldmVudE5leHRDb21taXQ7Ci0g
ICAgYm9vbCBtX2p1c3RTZW50RmFrZUtleVVwOwotICAgIHVuc2lnbmVkIGludCBtX2xhc3RGaWx0
ZXJlZEtleVByZXNzQ29kZVdpdGhOb1Jlc3VsdHM7Ci0gICAgSW50UG9pbnQgbV9sYXN0Q2FyZUxv
Y2F0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR3RrSW5w
dXRNZXRob2RGaWx0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a1BsdWdpbldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1
Z2luV2lkZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmMWI2ODBkYmFi
YTM2MWZkMWM1MDNkNGI2NmZjOWExYTljZTI5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2lu
V2lkZ2V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkd0a1BsdWdpbldp
ZGdldC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVy
c2lvbmluZy5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HdGtQbHVnaW5XaWRnZXQ6Okd0a1BsdWdpbldp
ZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLSAgICA6IFdpZGdldCh3aWRnZXQpCi17Ci0gICAgZ3Rr
X3dpZGdldF9oaWRlKHdpZGdldCk7Ci19Ci0KLUd0a1BsdWdpbldpZGdldDo6fkd0a1BsdWdpbldp
ZGdldCgpCi17Ci0gICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihndGtfd2lk
Z2V0X2dldF9wYXJlbnQocGxhdGZvcm1XaWRnZXQoKSkpLCBwbGF0Zm9ybVdpZGdldCgpKTsKLX0K
LQotdm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNv
cmVSZWN0KQotewotICAgIC8qIG5vIG5lZWQgdG8gKi8KLSAgICBpZiAoIWd0a193aWRnZXRfZ2V0
X2hhc193aW5kb3cocGxhdGZvcm1XaWRnZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdk
a1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHBsYXRmb3JtV2lkZ2V0KCkp
OwotICAgIGlmICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHZGtSZWN0YW5nbGUg
cmVjdCA9IGNvcmVSZWN0OwotICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0KHdpbmRvdywg
JnJlY3QsIEZBTFNFKTsKLX0KLQotdm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmZyYW1lUmVjdHNDaGFu
Z2VkKCkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZVJlY3QoKTsKLSAgICBJbnRQb2ludCBs
b2MgPSBwYXJlbnQoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOwotICAgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpIH07Ci0KLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QocGxh
dGZvcm1XaWRnZXQoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1XaWRnZXQoKSwgJmFsbG9jYXRpb24pOwotICAgIGd0
a193aWRnZXRfc2hvdyhwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MzczZWM1OTBiMmYyMjFlM2JiOTgxN2QwZDMzN2VlMWY0MzNkNzkyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHdGtQbHVnaW5XaWRnZXRf
aAotI2RlZmluZSBHdGtQbHVnaW5XaWRnZXRfaAotCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBHdGtQbHVnaW5XaWRnZXQgOiBwdWJsaWMgV2lk
Z2V0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEd0a1BsdWdpbldpZGdldChHdGtXaWRnZXQqKTsK
LSAgICAgICAgdmlydHVhbCB+R3RrUGx1Z2luV2lkZ2V0KCk7Ci0gICAgICAgIHZvaWQgaW52YWxp
ZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2b2lkIGZyYW1lUmVjdHNDaGFuZ2Vk
KCk7Ci0gICAgfTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtQb3B1cE1lbnUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjU3YTE3ZGMz
MjNiY2Y3YjM1N2IyNzdmMDgwYWRlZjA5MTM1MmY3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1
cE1lbnUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4g
ZWxlbWVudHMgaW4gV2ViQ29yZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEx
IElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3RrUG9wdXBN
ZW51LmgiCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiR3Rr
VmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90
IGdTZWFyY2hUaW1lb3V0TXMgPSAxMDAwOwotCi1HdGtQb3B1cE1lbnU6Okd0a1BvcHVwTWVudSgp
Ci0gICAgOiBtX3BvcHVwKGd0a19tZW51X25ldygpKQotICAgICwgbV9wcmV2aW91c0tleUV2ZW50
Q2hhcmFjdGVyKDApCi0gICAgLCBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0oMCkKLXsKLSAg
ICBtX2tleVByZXNzSGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAi
a2V5LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyhHdGtQb3B1cE1lbnU6OmtleVByZXNzRXZlbnRD
YWxsYmFjayksIHRoaXMpOwotfQotCi1HdGtQb3B1cE1lbnU6On5HdGtQb3B1cE1lbnUoKQotewot
ICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3BvcHVwLmdldCgpLCBtX2tleVByZXNz
SGFuZGxlcklEKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OmNsZWFyKCkKLXsKLSAgICBndGtf
Y29udGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwLmdldCgpKSwgcmVpbnRlcnBy
ZXRfY2FzdDxHdGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKLX0KLQotdm9pZCBH
dGtQb3B1cE1lbnU6OmFwcGVuZFNlcGFyYXRvcigpCi17Ci0gICAgR3RrV2lkZ2V0KiBtZW51SXRl
bSA9IGd0a19zZXBhcmF0b3JfbWVudV9pdGVtX25ldygpOwotICAgIGd0a19tZW51X3NoZWxsX2Fw
cGVuZChHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKSwgbWVudUl0ZW0pOwotICAgIGd0a193
aWRnZXRfc2hvdyhtZW51SXRlbSk7Ci19Ci0KLXZvaWQgR3RrUG9wdXBNZW51OjphcHBlbmRJdGVt
KEd0a0FjdGlvbiogYWN0aW9uKQotewotICAgIEd0a1dpZGdldCogbWVudUl0ZW0gPSBndGtfYWN0
aW9uX2NyZWF0ZV9tZW51X2l0ZW0oYWN0aW9uKTsKLSAgICBndGtfd2lkZ2V0X3NldF90b29sdGlw
X3RleHQobWVudUl0ZW0sIGd0a19hY3Rpb25fZ2V0X3Rvb2x0aXAoYWN0aW9uKSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChtZW51SXRlbSwgInNlbGVjdCIsIEdfQ0FMTEJBQ0soR3RrUG9wdXBNZW51
OjpzZWxlY3RJdGVtQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQo
R1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIG1lbnVJdGVtKTsKLQotICAgIGlmIChndGtf
YWN0aW9uX2lzX3Zpc2libGUoYWN0aW9uKSkKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93KG1lbnVJ
dGVtKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6OnBvcFVwKGNvbnN0IEludFNpemUmIG1lbnVT
aXplLCBjb25zdCBJbnRQb2ludCYgbWVudVBvc2l0aW9uLCBpbnQgaXRlbUNvdW50LCBpbnQgc2Vs
ZWN0ZWRJdGVtLCBjb25zdCBHZGtFdmVudCogZXZlbnQpCi17Ci0gICAgcmVzZXRUeXBlQWhlYWRG
aW5kU3RhdGUoKTsKLSAgICBtX21lbnVQb3NpdGlvbiA9IG1lbnVQb3NpdGlvbjsKLSAgICBndGtf
bWVudV9zZXRfYWN0aXZlKEdUS19NRU5VKG1fcG9wdXAuZ2V0KCkpLCBzZWxlY3RlZEl0ZW0pOwot
Ci0gICAgLy8gVGhpcyBhcHByb2FjaCBmb2xsb3dzIHRoZSBvbmUgaW4gZ3RrY29tYm9ib3guYy4K
LSAgICBHdGtSZXF1aXNpdGlvbiByZXF1aXNpdGlvbjsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXpl
X3JlcXVlc3QobV9wb3B1cC5nZXQoKSwgLTEsIC0xKTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgIGd0a193aWRnZXRfc2l6ZV9yZXF1ZXN0KG1fcG9wdXAuZ2V0KCksICZyZXF1aXNpdGlv
bik7Ci0jZWxzZQotICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKG1fcG9wdXAuZ2V0
KCksICZyZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYKLQotICAgIGd0a193aWRnZXRfc2V0X3NpemVf
cmVxdWVzdChtX3BvcHVwLmdldCgpLCBzdGQ6Om1heChtZW51U2l6ZS53aWR0aCgpLCByZXF1aXNp
dGlvbi53aWR0aCksIC0xKTsKLQotICAgIEdMaXN0KiBjaGlsZHJlbiA9IGd0a19jb250YWluZXJf
Z2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSkpOwotICAgIEdMaXN0KiBw
ID0gY2hpbGRyZW47Ci0gICAgaWYgKGl0ZW1Db3VudCkgewotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGl0ZW1Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IHNlbGVjdGVkSXRl
bSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgR3RrV2lkZ2V0KiBpdGVt
ID0gcmVpbnRlcnByZXRfY2FzdDxHdGtXaWRnZXQqPihwLT5kYXRhKTsKLSAgICAgICAgICAgIEd0
a1JlcXVpc2l0aW9uIGl0ZW1SZXF1aXNpdGlvbjsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgot
ICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfY2hpbGRfcmVxdWlzaXRpb24oaXRlbSwgJml0ZW1S
ZXF1aXNpdGlvbik7Ci0jZWxzZQotICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVk
X3NpemUoaXRlbSwgJml0ZW1SZXF1aXNpdGlvbiwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1f
bWVudVBvc2l0aW9uLnNldFkobV9tZW51UG9zaXRpb24ueSgpIC0gaXRlbVJlcXVpc2l0aW9uLmhl
aWdodCk7Ci0KLSAgICAgICAgICAgIHAgPSBnX2xpc3RfbmV4dChwKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIENlbnRlciB2ZXJ0aWNhbGx5IHRoZSBlbXB0eSBwb3B1cCBp
biB0aGUgY29tYm8gYm94IGFyZWEuCi0gICAgICAgIG1fbWVudVBvc2l0aW9uLnNldFkobV9tZW51
UG9zaXRpb24ueSgpIC0gbWVudVNpemUuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0gICAgZ19saXN0
X2ZyZWUoY2hpbGRyZW4pOwotCi0gICAgZ3VpbnQgYnV0dG9uOwotICAgIGd1aW50MzIgYWN0aXZh
dGVUaW1lOwotICAgIGlmIChldmVudCkgewotICAgICAgICBidXR0b24gPSBldmVudC0+dHlwZSA9
PSBHREtfQlVUVE9OX1BSRVNTID8gZXZlbnQtPmJ1dHRvbi5idXR0b24gOiAxOwotICAgICAgICBh
Y3RpdmF0ZVRpbWUgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGJ1dHRvbiA9IDE7Ci0gICAgICAgIGFjdGl2YXRlVGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7Ci0gICAgfQotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBndGtfbWVudV9wb3B1
cChHVEtfTUVOVShtX3BvcHVwLmdldCgpKSwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDxHdGtNZW51
UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIGJ1dHRvbiwgYWN0aXZh
dGVUaW1lKTsKLSNlbHNlCi0gICAgZ3RrX21lbnVfcG9wdXBfZm9yX2RldmljZShHVEtfTUVOVSht
X3BvcHVwLmdldCgpKSwgZXZlbnQgPyBnZGtfZXZlbnRfZ2V0X2RldmljZShldmVudCkgOiAwLCAw
LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHdGtN
ZW51UG9zaXRpb25GdW5jPihtZW51UG9zaXRpb25GdW5jdGlvbiksIHRoaXMsIDAsIGJ1dHRvbiwg
YWN0aXZhdGVUaW1lKTsKLSNlbmRpZgotfQotCi12b2lkIEd0a1BvcHVwTWVudTo6cG9wRG93bigp
Ci17Ci0gICAgZ3RrX21lbnVfcG9wZG93bihHVEtfTUVOVShtX3BvcHVwLmdldCgpKSk7Ci0gICAg
cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLX0KLQotdm9pZCBHdGtQb3B1cE1lbnU6Om1lbnVS
ZW1vdmVJdGVtKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKLXsK
LSAgICBBU1NFUlQocG9wdXBNZW51LT5tX3BvcHVwKTsKLSAgICBndGtfY29udGFpbmVyX3JlbW92
ZShHVEtfQ09OVEFJTkVSKHBvcHVwTWVudS0+bV9wb3B1cC5nZXQoKSksIHdpZGdldCk7Ci19Ci0K
LXZvaWQgR3RrUG9wdXBNZW51OjptZW51UG9zaXRpb25GdW5jdGlvbihHdGtNZW51KiwgZ2ludCog
eCwgZ2ludCogeSwgZ2Jvb2xlYW4qIHB1c2hJbiwgR3RrUG9wdXBNZW51KiBwb3B1cE1lbnUpCi17
Ci0gICAgKnggPSBwb3B1cE1lbnUtPm1fbWVudVBvc2l0aW9uLngoKTsKLSAgICAqeSA9IHBvcHVw
TWVudS0+bV9tZW51UG9zaXRpb24ueSgpOwotICAgICpwdXNoSW4gPSB0cnVlOwotfQotCi12b2lk
IEd0a1BvcHVwTWVudTo6cmVzZXRUeXBlQWhlYWRGaW5kU3RhdGUoKQotewotICAgIG1fY3VycmVu
dGx5U2VsZWN0ZWRNZW51SXRlbSA9IDA7Ci0gICAgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVy
ID0gMDsKLSAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSAiIjsKLX0KLQotYm9vbCBHdGtQb3B1
cE1lbnU6OnR5cGVBaGVhZEZpbmQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIC8vIElmIHdl
IHdlcmUgZ2l2ZW4gYSBub24tcHJpbnRhYmxlIGNoYXJhY3RlciBqdXN0IHNraXAgaXQuCi0gICAg
Z3VuaWNoYXIgdW5pY29kZUNoYXJhY3RlciA9IGdka19rZXl2YWxfdG9fdW5pY29kZShldmVudC0+
a2V5dmFsKTsKLSAgICBpZiAoIWdfdW5pY2hhcl9pc3ByaW50KHVuaWNvZGVDaGFyYWN0ZXIpKSB7
Ci0gICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBnbG9uZyBjaGFyYWN0ZXJzV3JpdHRlbjsKLSAgICBHT3duUHRyPGd1
bmljaGFyMj4gdXRmMTZTdHJpbmcoZ191Y3M0X3RvX3V0ZjE2KCZ1bmljb2RlQ2hhcmFjdGVyLCAx
LCAwLCAmY2hhcmFjdGVyc1dyaXR0ZW4sIDApKTsKLSAgICBpZiAoIXV0ZjE2U3RyaW5nKSB7Ci0g
ICAgICAgIHJlc2V0VHlwZUFoZWFkRmluZFN0YXRlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSBzYW1lIGFzIHRoZSBsYXN0
IGNoYXJhY3RlciwgdGhlIHVzZXIgaXMgcHJvYmFibHkgdHJ5aW5nIHRvCi0gICAgLy8gY3ljbGUg
dGhyb3VnaCB0aGUgbWVudWxpc3QgZW50cmllcy4gVGhpcyBtYXRjaGVzIHRoZSBXZWJDb3JlIGJl
aGF2aW9yIGZvciBjb2xsYXBzZWQKLSAgICAvLyBtZW51bGlzdHMuCi0gICAgYm9vbCByZXBlYXRp
bmdDaGFyYWN0ZXIgPSB1bmljb2RlQ2hhcmFjdGVyICE9IG1fcHJldmlvdXNLZXlFdmVudENoYXJh
Y3RlcjsKLSAgICBpZiAoZXZlbnQtPnRpbWUgLSBtX3ByZXZpb3VzS2V5RXZlbnRUaW1lc3RhbXAg
PiBnU2VhcmNoVGltZW91dE1zKQotICAgICAgICBtX2N1cnJlbnRTZWFyY2hTdHJpbmcgPSBTdHJp
bmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHV0ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVy
c1dyaXR0ZW4pOwotICAgIGVsc2UgaWYgKHJlcGVhdGluZ0NoYXJhY3RlcikKLSAgICAgICAgbV9j
dXJyZW50U2VhcmNoU3RyaW5nLmFwcGVuZChTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+
KHV0ZjE2U3RyaW5nLmdldCgpKSwgY2hhcmFjdGVyc1dyaXR0ZW4pKTsKLQotICAgIG1fcHJldmlv
dXNLZXlFdmVudFRpbWVzdGFtcCA9IGV2ZW50LT50aW1lOwotICAgIG1fcHJldmlvdXNLZXlFdmVu
dENoYXJhY3RlciA9IHVuaWNvZGVDaGFyYWN0ZXI7Ci0KLSAgICAvLyBMaWtlIHRoZSBDaHJvbWl1
bSBwb3J0LCB3ZSBjYXNlIGZvbGQgYmVmb3JlIHNlYXJjaGluZywgYmVjYXVzZSAKLSAgICAvLyBz
dHJuY21wIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgY2hhcmFjdGVycy4KLSAgICBHT3duUHRy
PGdjaGFyPiBzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZChnX3V0ZjhfY2FzZWZvbGQobV9jdXJy
ZW50U2VhcmNoU3RyaW5nLnV0ZjgoKS5kYXRhKCksIC0xKSk7Ci0gICAgc2l6ZV90IHByZWZpeExl
bmd0aCA9IHN0cmxlbihzZWFyY2hTdHJpbmdXaXRoQ2FzZUZvbGRlZC5nZXQoKSk7Ci0KLSAgICBH
TGlzdCogY2hpbGRyZW4gPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVS
KG1fcG9wdXAuZ2V0KCkpKTsKLSAgICBpZiAoIWNoaWxkcmVuKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIElmIGEgbWVudSBpdGVtIGhhcyBhbHJlYWR5IGJlZW4gc2VsZWN0ZWQsIHN0
YXJ0IHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50Ci0gICAgLy8gaXRlbSBkb3duIHRoZSBsaXN0
LiBUaGlzIHdpbGwgbWFrZSBtdWx0aXBsZSBrZXkgcHJlc3NlcyBvZiB0aGUgc2FtZSBjaGFyYWN0
ZXIKLSAgICAvLyBhZHZhbmNlIHRoZSBzZWxlY3Rpb24uCi0gICAgR0xpc3QqIGN1cnJlbnRDaGls
ZCA9IGNoaWxkcmVuOwotICAgIGlmIChtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0pIHsKLSAg
ICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X2ZpbmQoY2hpbGRyZW4sIG1fY3VycmVudGx5U2Vs
ZWN0ZWRNZW51SXRlbSk7Ci0gICAgICAgIGlmICghY3VycmVudENoaWxkKSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0ZW0gPSAwOwotICAgICAgICAgICAgY3VycmVudENo
aWxkID0gY2hpbGRyZW47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBlYXRpbmcgY2hhcmFj
dGVycyBzaG91bGQgaXRlcmF0ZS4KLSAgICAgICAgaWYgKHJlcGVhdGluZ0NoYXJhY3Rlcikgewot
ICAgICAgICAgICAgaWYgKEdMaXN0KiBuZXh0Q2hpbGQgPSBnX2xpc3RfbmV4dChjdXJyZW50Q2hp
bGQpKQotICAgICAgICAgICAgICAgIGN1cnJlbnRDaGlsZCA9IG5leHRDaGlsZDsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdMaXN0KiBmaXJzdENoaWxkID0gY3VycmVudENoaWxkOwotICAgIGRv
IHsKLSAgICAgICAgY3VycmVudENoaWxkID0gZ19saXN0X25leHQoY3VycmVudENoaWxkKTsKLSAg
ICAgICAgaWYgKCFjdXJyZW50Q2hpbGQpCi0gICAgICAgICAgICBjdXJyZW50Q2hpbGQgPSBjaGls
ZHJlbjsKLQotICAgICAgICBHT3duUHRyPGdjaGFyPiBpdGVtVGV4dChnX3V0ZjhfY2FzZWZvbGQo
Z3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR1RLX01FTlVfSVRFTShjdXJyZW50Q2hpbGQtPmRhdGEp
KSwgLTEpKTsKLSAgICAgICAgaWYgKCFzdHJuY21wKHNlYXJjaFN0cmluZ1dpdGhDYXNlRm9sZGVk
LmdldCgpLCBpdGVtVGV4dC5nZXQoKSwgcHJlZml4TGVuZ3RoKSkgewotICAgICAgICAgICAgZ3Rr
X21lbnVfc2hlbGxfc2VsZWN0X2l0ZW0oR1RLX01FTlVfU0hFTEwobV9wb3B1cC5nZXQoKSksIEdU
S19XSURHRVQoY3VycmVudENoaWxkLT5kYXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0gd2hpbGUgKGN1cnJlbnRDaGlsZCAhPSBmaXJzdENoaWxkKTsKLQotICAgIGdf
bGlzdF9mcmVlKGNoaWxkcmVuKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHdGtQb3B1
cE1lbnU6OnNlbGVjdEl0ZW1DYWxsYmFjayhHdGtNZW51SXRlbSogaXRlbSwgR3RrUG9wdXBNZW51
KiBwb3B1cE1lbnUpCi17Ci0gICAgcG9wdXBNZW51LT5tX2N1cnJlbnRseVNlbGVjdGVkTWVudUl0
ZW0gPSBHVEtfV0lER0VUKGl0ZW0pOwotfQotCi1nYm9vbGVhbiBHdGtQb3B1cE1lbnU6OmtleVBy
ZXNzRXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50LCBH
dGtQb3B1cE1lbnUqIHBvcHVwTWVudSkKLXsKLSAgICByZXR1cm4gcG9wdXBNZW51LT50eXBlQWhl
YWRGaW5kKGV2ZW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1BvcHVwTWVudS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YzZhZDQ0ZjdkZDE2NjQwYzQyZjU5ZjJiYWIwNDBiMzZlZjgzNzMwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtQb3B1cE1lbnUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
R3RrUG9wdXBNZW51X2gKLSNkZWZpbmUgR3RrUG9wdXBNZW51X2gKLQotI2luY2x1ZGUgIkdSZWZQ
dHJHdGsuaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNp
bmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHdGtQb3B1cE1lbnUgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEd0a1BvcHVwTWVudSk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0K
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHdGtQb3B1cE1lbnU+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEd0a1BvcHVwTWVudSgpKTsKLSAgICB9
Ci0KLSAgICB+R3RrUG9wdXBNZW51KCk7Ci0KLSAgICBHdGtXaWRnZXQqIHBsYXRmb3JtTWVudSgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9wdXAuZ2V0KCk7IH0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAg
dm9pZCBhcHBlbmRTZXBhcmF0b3IoKTsKLSAgICB2b2lkIGFwcGVuZEl0ZW0oR3RrQWN0aW9uKik7
Ci0gICAgdm9pZCBwb3BVcChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaXRl
bXNDb3VudCwgaW50IHNlbGVjdGVkSXRlbSwgY29uc3QgR2RrRXZlbnQqKTsKLSAgICB2b2lkIHBv
cERvd24oKTsKLQotcHJpdmF0ZToKLSAgICBHdGtQb3B1cE1lbnUoKTsKLQotICAgIHZvaWQgcmVz
ZXRUeXBlQWhlYWRGaW5kU3RhdGUoKTsKLSAgICBib29sIHR5cGVBaGVhZEZpbmQoR2RrRXZlbnRL
ZXkqKTsKLQotICAgIHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGVtKiwg
R3RrUG9wdXBNZW51Kik7Ci0gICAgc3RhdGljIHZvaWQgbWVudVBvc2l0aW9uRnVuY3Rpb24oR3Rr
TWVudSosIGdpbnQqLCBnaW50KiwgZ2Jvb2xlYW4qLCBHdGtQb3B1cE1lbnUqKTsKLSAgICBzdGF0
aWMgdm9pZCBtZW51UmVtb3ZlSXRlbShHdGtXaWRnZXQqLCBHdGtQb3B1cE1lbnUqKTsKLSAgICBz
dGF0aWMgdm9pZCBzZWxlY3RJdGVtQ2FsbGJhY2soR3RrTWVudUl0ZW0qLCBHdGtQb3B1cE1lbnUq
KTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4ga2V5UHJlc3NFdmVudENhbGxiYWNrKEd0a1dpZGdldCos
IEdka0V2ZW50S2V5KiwgR3RrUG9wdXBNZW51Kik7Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4g
bV9wb3B1cDsKLSAgICBJbnRQb2ludCBtX21lbnVQb3NpdGlvbjsKLSAgICBTdHJpbmcgbV9jdXJy
ZW50U2VhcmNoU3RyaW5nOwotICAgIHVpbnQzMl90IG1fcHJldmlvdXNLZXlFdmVudFRpbWVzdGFt
cDsKLSAgICB1bnNpZ25lZCBpbnQgbV9wcmV2aW91c0tleUV2ZW50Q2hhcmFjdGVyOwotICAgIEd0
a1dpZGdldCogbV9jdXJyZW50bHlTZWxlY3RlZE1lbnVJdGVtOwotICAgIHVuc2lnbmVkIGludCBt
X2tleVByZXNzSGFuZGxlcklEOwotfTsKLQotfQotCi0jZW5kaWYgLy8gR3RrUG9wdXBNZW51X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGI1YmEzNjI4NGQ4YzE3OWFkZjQxY2Q0NjIwZTM5ZGVk
YTk4MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0g
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkd0a1V0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UG9pbnQgY29udmVydFdp
ZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqIHdpZGdldCwgY29uc3QgSW50UG9pbnQm
IHBvaW50KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFjdHVhbGx5IGEgdmVyeSB0cmlja3kg
b3BlcmF0aW9uIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZAotICAgIC8v
IG9ubHkgYmUgdGhvdWdodCBvZiBhcyBhIGd1ZXNzLiBGb3IgaW5zdGFuY2UsIHNvbWV0aW1lcyBp
dCBtYXkgbm90IGNvcnJlY3RseSB0YWtlIGludG8KLSAgICAvLyBhY2NvdW50IHdpbmRvdyBkZWNv
cmF0aW9ucy4KLQotICAgIEd0a1dpZGdldCogdG9wbGV2ZWxXaWRnZXQgPSBndGtfd2lkZ2V0X2dl
dF90b3BsZXZlbCh3aWRnZXQpOwotICAgIGlmICghdG9wbGV2ZWxXaWRnZXQgfHwgIWd0a193aWRn
ZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWxXaWRnZXQpIHx8ICFHVEtfSVNfV0lORE9XKHRvcGxldmVs
V2lkZ2V0KSkKLSAgICAgICAgcmV0dXJuIHBvaW50OwotCi0gICAgR2RrV2luZG93KiBnZGtXaW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3codG9wbGV2ZWxXaWRnZXQpOwotICAgIGlmICghZ2Rr
V2luZG93KQotICAgICAgICByZXR1cm4gcG9pbnQ7Ci0KLSAgICBpbnQgeEluV2luZG93LCB5SW5X
aW5kb3c7Ci0gICAgZ3RrX3dpZGdldF90cmFuc2xhdGVfY29vcmRpbmF0ZXMod2lkZ2V0LCB0b3Bs
ZXZlbFdpZGdldCwgcG9pbnQueCgpLCBwb2ludC55KCksICZ4SW5XaW5kb3csICZ5SW5XaW5kb3cp
OwotCi0gICAgaW50IHdpbmRvd09yaWdpblgsIHdpbmRvd09yaWdpblk7Ci0gICAgZ2RrX3dpbmRv
d19nZXRfb3JpZ2luKGdka1dpbmRvdywgJndpbmRvd09yaWdpblgsICZ3aW5kb3dPcmlnaW5ZKTsK
LQotICAgIHJldHVybiBJbnRQb2ludCh3aW5kb3dPcmlnaW5YICsgeEluV2luZG93LCB3aW5kb3dP
cmlnaW5ZICsgeUluV2luZG93KTsKLX0KLQotYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxX
aW5kb3coR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfaXNfdG9w
bGV2ZWwod2lkZ2V0KSAmJiBHVEtfSVNfV0lORE9XKHdpZGdldCkgJiYgIUdUS19JU19PRkZTQ1JF
RU5fV0lORE9XKHdpZGdldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjliZGRlNjU5OGYwMmQzMzU3YTAwYTcxMzM4OTZiYWM1NGMyZGEyYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEd0a1V0aWxpdGllc19oIAotI2RlZmluZSBH
dGtVdGlsaXRpZXNfaCAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRQb2ludDsK
LQotSW50UG9pbnQgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChHdGtXaWRnZXQqLCBj
b25zdCBJbnRQb2ludCYpOwotYm9vbCB3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3coR3Rr
V2lkZ2V0Kik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEd0a1V0aWxp
dGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lv
bmluZy5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1ZlcnNpb25pbmcuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyZjg0YzJlZjg4NjZjMDNjMDZmMTZkYzIxNTlm
ZmVhOTk3Y2RjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jCisrKyAvZGV2L251
bGwKQEAgLTEsMzgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3Jh
IEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmZGVm
IEdES19XSU5ET1dJTkdfWDExCi0jaW5jbHVkZSA8WDExL1hhdG9tLmg+Ci0jaW5jbHVkZSA8Z2Rr
L2dka3guaD4KLSNlbmRpZgotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE0LCAwKQotdm9p
ZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoR3RrQWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91
YmxlIHZhbHVlKQotewotICAgICAgICBtX2FkanVzdG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9z
OwotICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7Ci19
Ci0KLXZvaWQgZ3RrX2FkanVzdG1lbnRfY29uZmlndXJlKEd0a0FkanVzdG1lbnQqIGFkanVzdG1l
bnQsIGdkb3VibGUgdmFsdWUsIGdkb3VibGUgbG93ZXIsIGdkb3VibGUgdXBwZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXBJbmNyZW1lbnQsIGdkb3VibGUgcGFn
ZUluY3JlbWVudCwgZ2RvdWJsZSBwYWdlU2l6ZSkKLXsKLSAgICBnX29iamVjdF9mcmVlemVfbm90
aWZ5KEdfT0JKRUNUKGFkanVzdG1lbnQpKTsKLQotICAgIGdfb2JqZWN0X3NldChhZGp1c3RtZW50
LAotICAgICAgICAgICAgICAgICAibG93ZXIiLCBsb3dlciwKLSAgICAgICAgICAgICAgICAgInVw
cGVyIiwgdXBwZXIsCi0gICAgICAgICAgICAgICAgICJzdGVwLWluY3JlbWVudCIsIHN0ZXBJbmNy
ZW1lbnQsCi0gICAgICAgICAgICAgICAgICJwYWdlLWluY3JlbWVudCIsIHBhZ2VJbmNyZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICJwYWdlLXNpemUiLCBwYWdlU2l6ZSwKLSAgICAgICAgICAgICAg
ICAgTlVMTCk7Ci0KLSAgICBnX29iamVjdF90aGF3X25vdGlmeShHX09CSkVDVChhZGp1c3RtZW50
KSk7Ci0KLSAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKGFkanVzdG1lbnQpOwotICAgIGd0a19h
ZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoYWRqdXN0bWVudCk7Ci19Ci0jZW5kaWYKLQotR2RrRGV2
aWNlICpnZXREZWZhdWx0R0RLUG9pbnRlckRldmljZShHZGtXaW5kb3cqIHdpbmRvdykKLXsKLSNp
Zm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHZGtEZXZpY2VNYW5hZ2VyICptYW5hZ2VyID0g
IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KHdp
bmRvdykpOwotICAgIHJldHVybiBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVy
KG1hbmFnZXIpOwotI2Vsc2UKLSAgICByZXR1cm4gZ2RrX2RldmljZV9nZXRfY29yZV9wb2ludGVy
KCk7Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLX0KLQotI2lmICFHVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxNywgMykKLXZvaWQgZ2RrX3dpbmRvd19nZXRfcm9vdF9jb29yZHMoR2RrV2luZG93
KiB3aW5kb3csIGdpbnQgeCwgZ2ludCB5LCBnaW50KiByb290WCwgZ2ludCogcm9vdFkpCi17Ci0g
ICAgZ2RrX3dpbmRvd19nZXRfcm9vdF9vcmlnaW4od2luZG93LCByb290WCwgcm9vdFkpOwotICAg
ICpyb290WCA9ICpyb290WCArIHg7Ci0gICAgKnJvb3RZID0gKnJvb3RZICsgeTsKLX0KLSNlbmRp
ZgotCi1HZGtDdXJzb3IgKiBibGFua0N1cnNvcigpCi17Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04o
MiwgMTYsIDApCi0gICAgcmV0dXJuIGdka19jdXJzb3JfbmV3KEdES19CTEFOS19DVVJTT1IpOwot
I2Vsc2UKLSAgICBHZGtDdXJzb3IgKiBjdXJzb3I7Ci0gICAgR2RrUGl4bWFwICogc291cmNlOwot
ICAgIEdka1BpeG1hcCAqIG1hc2s7Ci0gICAgR2RrQ29sb3IgZm9yZWdyb3VuZCA9IHsgMCwgNjU1
MzUsIDAsIDAgfTsgLy8gUmVkLgotICAgIEdka0NvbG9yIGJhY2tncm91bmQgPSB7IDAsIDAsIDAs
IDY1NTM1IH07IC8vIEJsdWUuCi0gICAgc3RhdGljIGdjaGFyIGN1cnNvckJpdHNbXSA9IHsweDAs
IDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MH07Ci0KLSAgICBzb3VyY2UgPSBnZGtf
Yml0bWFwX2NyZWF0ZV9mcm9tX2RhdGEoMCwgY3Vyc29yQml0cywgOCwgOCk7Ci0gICAgbWFzayA9
IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0YSgwLCBjdXJzb3JCaXRzLCA4LCA4KTsKLSAgICBj
dXJzb3IgPSBnZGtfY3Vyc29yX25ld19mcm9tX3BpeG1hcChzb3VyY2UsIG1hc2ssICZmb3JlZ3Jv
dW5kLCAmYmFja2dyb3VuZCwgOCwgOCk7Ci0gICAgZ2RrX3BpeG1hcF91bnJlZihzb3VyY2UpOwot
ICAgIGdka19waXhtYXBfdW5yZWYobWFzayk7Ci0gICAgcmV0dXJuIGN1cnNvcjsKLSNlbmRpZiAv
LyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLX0KLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lP
TigyLCAxNiwgMCkKLWNvbnN0IGdjaGFyKiBndGtfbWVudV9pdGVtX2dldF9sYWJlbChHdGtNZW51
SXRlbSogbWVudUl0ZW0pCi17Ci0gICAgR3RrV2lkZ2V0ICogbGFiZWwgPSBndGtfYmluX2dldF9j
aGlsZChHVEtfQklOKG1lbnVJdGVtKSk7Ci0gICAgaWYgKEdUS19JU19MQUJFTChsYWJlbCkpCi0g
ICAgICAgIHJldHVybiBndGtfbGFiZWxfZ2V0X3RleHQoR1RLX0xBQkVMKGxhYmVsKSk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDApCi0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIGNhaXJvX2Zvcm1hdF90Ci1nZGtfY2Fpcm9f
Zm9ybWF0X2Zvcl9jb250ZW50KGNhaXJvX2NvbnRlbnRfdCBjb250ZW50KQotewotICAgIHN3aXRj
aCAoY29udGVudCkgewotICAgIGNhc2UgQ0FJUk9fQ09OVEVOVF9DT0xPUjoKLSAgICAgICAgcmV0
dXJuIENBSVJPX0ZPUk1BVF9SR0IyNDsKLSAgICBjYXNlIENBSVJPX0NPTlRFTlRfQUxQSEE6Ci0g
ICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfQTg7Ci0gICAgY2FzZSBDQUlST19DT05URU5UX0NP
TE9SX0FMUEhBOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDQUlST19GT1JNQVRfQVJH
QjMyOwotICAgIH0KLX0KLQotc3RhdGljIGNhaXJvX3N1cmZhY2VfdCoKLWdka19jYWlyb19zdXJm
YWNlX2NvZXJjZV90b19pbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fY29udGVudF90IGNvbnRlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90ICogY29w
eTsKLSAgICBjYWlyb190ICogY3I7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShz
dXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3Vy
ZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBjb250ZW50Ci0gICAgICAgICYmIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpID49IHdpZHRoCi0gICAgICAgICYmIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSA+PSBoZWlnaHQpCi0gICAgICAgIHJl
dHVybiBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKTsKLQotICAgIGNvcHkgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShnZGtfY2Fpcm9fZm9ybWF0X2Zvcl9jb250ZW50KGNvbnRl
bnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KTsKLQotICAgIGNyID0gY2Fp
cm9fY3JlYXRlKGNvcHkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFU
T1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZhY2UsIDAs
IDApOwotICAgIGNhaXJvX3BhaW50KGNyKTsKLSAgICBjYWlyb19kZXN0cm95KGNyKTsKLQotICAg
IHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgdm9pZAotY29udmVydF9hbHBoYShndWNoYXIgKiBk
ZXN0RGF0YSwgaW50IGRlc3RTdHJpZGUsCi0gICAgICAgICAgICAgIGd1Y2hhciAqIHNyY0RhdGEs
IGludCBzcmNTdHJpZGUsCi0gICAgICAgICAgICAgIGludCBzcmNYLCBpbnQgc3JjWSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGludCB4LCB5OwotCi0gICAgc3JjRGF0YSArPSBzcmNT
dHJpZGUgKiBzcmNZICsgc3JjWSAqIDQ7Ci0KLSAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspIHsKLSAgICAgICAgZ3VpbnQzMiAqIHNyYyA9IChndWludDMyICopIHNyY0RhdGE7Ci0KLSAg
ICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgICAgIGd1aW50IGFs
cGhhID0gc3JjW3hdID4+IDI0OwotCi0gICAgICAgICAgICBpZiAoIWFscGhhKSB7Ci0gICAgICAg
ICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAwXSA9IDA7Ci0gICAgICAgICAgICAgICAgZGVzdERh
dGFbeCAqIDQgKyAxXSA9IDA7Ci0gICAgICAgICAgICAgICAgZGVzdERhdGFbeCAqIDQgKyAyXSA9
IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0
ICsgMF0gPSAoKChzcmNbeF0gJiAweGZmMDAwMCkgPj4gMTYpICogMjU1ICsgYWxwaGEgLyAyKSAv
IGFscGhhOwotICAgICAgICAgICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMV0gPSAoKChzcmNbeF0g
JiAweDAwZmYwMCkgPj4gIDgpICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgIGRlc3REYXRhW3ggKiA0ICsgMl0gPSAoKChzcmNbeF0gJiAweDAwMDBmZikgPj4gIDAp
ICogMjU1ICsgYWxwaGEgLyAyKSAvIGFscGhhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGVzdERhdGFbeCAqIDQgKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0KLSAgICAgICAgc3JjRGF0
YSArPSBzcmNTdHJpZGU7Ci0gICAgICAgIGRlc3REYXRhICs9IGRlc3RTdHJpZGU7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZAotY29udmVydF9ub19hbHBoYShndWNoYXIgKiBkZXN0RGF0YSwgaW50
IGRlc3RTdHJpZGUsIGd1Y2hhciAqIHNyY0RhdGEsCi0gICAgICAgICAgICAgICAgIGludCBzcmNT
dHJpZGUsIGludCBzcmNYLCBpbnQgc3JjWSwKLSAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGludCB4LCB5OwotCi0gICAgc3JjRGF0YSArPSBzcmNTdHJpZGUg
KiBzcmNZICsgc3JjWCAqIDQ7Ci0KLSAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
LSAgICAgICAgZ3VpbnQzMiAqIHNyYyA9IChndWludDMyICopIHNyY0RhdGE7Ci0KLSAgICAgICAg
Zm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgICAgIGRlc3REYXRhW3ggKiAz
ICsgMF0gPSBzcmNbeF0gPj4gMTY7Ci0gICAgICAgICAgICBkZXN0RGF0YVt4ICogMyArIDFdID0g
c3JjW3hdID4+ICA4OwotICAgICAgICAgICAgZGVzdERhdGFbeCAqIDMgKyAyXSA9IHNyY1t4XTsK
LSAgICAgICAgfQotCi0gICAgICAgIHNyY0RhdGEgKz0gc3JjU3RyaWRlOwotICAgICAgICBkZXN0
RGF0YSArPSBkZXN0U3RyaWRlOwotICAgIH0KLX0KLQotLyoqCi0gKiBnZGtfcGl4YnVmX2dldF9m
cm9tX3N1cmZhY2U6Ci0gKiBAc3VyZmFjZTogc3VyZmFjZSB0byBjb3B5IGZyb20KLSAqIEBzcmNf
eDogU291cmNlIFggY29vcmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UKLSAqIEBzcmNfeTogU291cmNl
IFkgY29vcmRpbmF0ZSB3aXRoaW4gQHN1cmZhY2UKLSAqIEB3aWR0aDogV2lkdGggaW4gcGl4ZWxz
IG9mIHJlZ2lvbiB0byBnZXQKLSAqIEBoZWlnaHQ6IEhlaWdodCBpbiBwaXhlbHMgb2YgcmVnaW9u
IHRvIGdldAotICoKLSAqIFRyYW5zZmVycyBpbWFnZSBkYXRhIGZyb20gYSAjY2Fpcm9fc3VyZmFj
ZV90IGFuZCBjb252ZXJ0cyBpdCB0byBhbiBSR0IoQSkKLSAqIHJlcHJlc2VudGF0aW9uIGluc2lk
ZSBhICNHZGtQaXhidWYuIFRoaXMgYWxsb3dzIHlvdSB0byBlZmZpY2llbnRseSByZWFkCi0gKiBp
bmRpdmlkdWFsIHBpeGVscyBmcm9tIGNhaXJvIHN1cmZhY2VzLiBGb3IgI0dka1dpbmRvd3MsIHVz
ZQotICogZ2RrX3BpeGJ1Zl9nZXRfZnJvbV93aW5kb3coKSBpbnN0ZWFkLgotICoKLSAqIFRoaXMg
ZnVuY3Rpb24gd2lsbCBjcmVhdGUgYW4gUkdCIHBpeGJ1ZiB3aXRoIDggYml0cyBwZXIgY2hhbm5l
bC4gVGhlIHBpeGJ1ZgotICogd2lsbCBjb250YWluIGFuIGFscGhhIGNoYW5uZWwgaWYgdGhlIEBz
dXJmYWNlIGNvbnRhaW5zIG9uZS4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBmdWxs
KTogQSBuZXdseS1jcmVhdGVkIHBpeGJ1ZiB3aXRoIGEgcmVmZXJlbmNlIGNvdW50Ci0gKiBvZiAx
LCBvciAlTlVMTCBvbiBlcnJvcgotICoqLwotR2RrUGl4YnVmKgotZ2RrX3BpeGJ1Zl9nZXRfZnJv
bV9zdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCAqIHN1cmZhY2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHNyY1gsIGludCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBjYWlyb19jb250ZW50X3QgY29udGVudDsK
LSAgICBHZGtQaXhidWYgKiBkZXN0OwotCi0gICAgLyogR2VuZXJhbCBzYW5pdHkgY2hlY2tzICov
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3VyZmFjZSwgTlVMTCk7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc3JjWCA+PSAwICYmIHNyY1kgPj0gMCwgTlVMTCk7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwod2lkdGggPiAwICYmIGhlaWdodCA+IDAsIE5VTEwpOwotCi0gICAgY29udGVu
dCA9IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgfCBDQUlST19DT05URU5UX0NP
TE9SOwotICAgIGRlc3QgPSBnZGtfcGl4YnVmX25ldyhHREtfQ09MT1JTUEFDRV9SR0IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICEhKGNvbnRlbnQgJiBDQUlST19DT05URU5UX0FMUEhBKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICBzdXJmYWNlID0gZ2RrX2NhaXJvX3N1cmZhY2VfY29lcmNl
X3RvX2ltYWdlKHN1cmZhY2UsIGNvbnRlbnQsIHNyY1ggKyB3aWR0aCwgc3JjWSArIGhlaWdodCk7
Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlKTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZSkgfHwgIWRlc3QpIHsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KHN1cmZhY2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoZ2Rr
X3BpeGJ1Zl9nZXRfaGFzX2FscGhhKGRlc3QpKQotICAgICAgICBjb252ZXJ0X2FscGhhKGdka19w
aXhidWZfZ2V0X3BpeGVscyhkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3BpeGJ1
Zl9nZXRfcm93c3RyaWRlKGRlc3QpLAotICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgIHNyY1gsIHNyY1ksCi0gICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwot
ICAgIGVsc2UKLSAgICAgICAgY29udmVydF9ub19hbHBoYShnZGtfcGl4YnVmX2dldF9waXhlbHMo
ZGVzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdka19waXhidWZfZ2V0X3Jvd3N0cmlk
ZShkZXN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBz
cmNYLCBzcmNZLAotICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKLQot
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICByZXR1cm4gZGVzdDsKLX0K
LQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDI0LCAwKQotdm9pZCBnZXRHZGtEcmF3YWJsZVNp
emUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKEdES19JU19QSVhNQVAoZHJhd2FibGUpIHx8IEdES19JU19XSU5E
T1coZHJhd2FibGUpKTsKLQotICAgIGlmIChHREtfSVNfUElYTUFQKGRyYXdhYmxlKSkgewotICAg
ICAgICBnZGtfcGl4bWFwX2dldF9zaXplKEdES19QSVhNQVAoZHJhd2FibGUpLCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdka1dpbmRvdyAqd2luZG93ID0g
R0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgKndpZHRoID0gZ2RrX3dpbmRvd19nZXRfd2lkdGgo
d2luZG93KTsKLSAgICAqaGVpZ2h0ID0gZ2RrX3dpbmRvd19nZXRfaGVpZ2h0KHdpbmRvdyk7Ci19
Ci0jZWxzZQotdm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2RrRHJhd2FibGUgKmRyYXdhYmxlLCBp
bnQgKndpZHRoLCBpbnQgKmhlaWdodCkKLXsKLSAgICBnZGtfZHJhd2FibGVfZ2V0X3NpemUoZHJh
d2FibGUsIHdpZHRoLCBoZWlnaHQpOwotfQotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIs
IDI0LCAwKQotCi0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQotI2lmICFHTElCX0NIRUNL
X1ZFUlNJT04oMiwgMjcsIDEpCi1nYm9vbGVhbiBnX3NpZ25hbF9hY2N1bXVsYXRvcl9maXJzdF93
aW5zKEdTaWduYWxJbnZvY2F0aW9uSGludCAqaW52b2NhdGlvbkhpbnQsIEdWYWx1ZSAqcmV0dXJu
QWNjdW11bGF0b3IsIGNvbnN0IEdWYWx1ZSAqaGFuZGxlclJldHVybiwgZ3BvaW50ZXIgZGF0YSkK
LXsKLSAgICBnX3ZhbHVlX2NvcHkoaGFuZGxlclJldHVybiwgcmV0dXJuQWNjdW11bGF0b3IpOwot
ICAgIHJldHVybiBGQUxTRTsKLX0KLSNlbmRpZgotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIs
IDIyLCAwKQotY2Fpcm9fc3VyZmFjZV90ICpnZGtfd2luZG93X2NyZWF0ZV9zaW1pbGFyX3N1cmZh
Y2UoR2RrV2luZG93ICp3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fdCAqY2Fpcm9Db250ZXh0ID0gZ2RrX2NhaXJvX2Ny
ZWF0ZSh3aW5kb3cpOwotICAgIGNhaXJvX3N1cmZhY2VfdCAqY2Fpcm9TdXJmYWNlID0gY2Fpcm9f
Z2V0X3RhcmdldChjYWlyb0NvbnRleHQpOwotICAgIGNhaXJvX3N1cmZhY2VfdCAqbmV3U3VyZmFj
ZSA9IGNhaXJvX3N1cmZhY2VfY3JlYXRlX3NpbWlsYXIoY2Fpcm9TdXJmYWNlLCBjb250ZW50LCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICBjYWlyb19kZXN0cm95KGNhaXJvQ29udGV4dCk7Ci0gICAgcmV0
dXJuIG5ld1N1cmZhY2U7Ci19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjIsIDAp
Ci0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikKLSNpZmRlZiBHREtfV0lORE9XSU5H
X1gxMQotc3RhdGljIGludCBnZXRTY3JlZW5DdXJyZW50RGVza3RvcChHZGtTY3JlZW4gKnNjcmVl
bikKLXsKLSAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX3Nj
cmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKLSAgICBXaW5kb3cgcm9vdFdpbmRvdyA9IFhSb290
V2luZG93KGRpc3BsYXksIEdES19TQ1JFRU5fWE5VTUJFUihzY3JlZW4pKTsKLSAgICBBdG9tIGN1
cnJlbnREZXNrdG9wID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfQ1VSUkVOVF9ERVNLVE9Q
IiwgVHJ1ZSk7Ci0KLSAgICBBdG9tIHR5cGU7Ci0gICAgaW50IGZvcm1hdDsKLSAgICB1bnNpZ25l
ZCBsb25nIGl0ZW1zQ291bnQsIGJ5dGVzQWZ0ZXI7Ci0gICAgdW5zaWduZWQgY2hhciAqcmV0dXJu
ZWREYXRhID0gTlVMTDsKLSAgICBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxheSwgcm9vdFdpbmRv
dywgY3VycmVudERlc2t0b3AsIDAsIEdfTUFYTE9ORywgRmFsc2UsIFhBX0NBUkRJTkFMLAotICAg
ICAgICAgICAgICAgICAgICAgICAmdHlwZSwgJmZvcm1hdCwgJml0ZW1zQ291bnQsICZieXRlc0Fm
dGVyLCAmcmV0dXJuZWREYXRhKTsKLQotICAgIGludCB3b3Jrc3BhY2UgPSAwOwotICAgIGlmICh0
eXBlID09IFhBX0NBUkRJTkFMICYmIGZvcm1hdCA9PSAzMiAmJiBpdGVtc0NvdW50ID4gMCkKLSAg
ICAgICAgd29ya3NwYWNlID0gKGludClyZXR1cm5lZERhdGFbMF07Ci0KLSAgICBpZiAocmV0dXJu
ZWREYXRhKQotICAgICAgICBYRnJlZShyZXR1cm5lZERhdGEpOwotCi0gICAgcmV0dXJuIHdvcmtz
cGFjZTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0U2NyZWVuV29ya0FyZWEoR2RrU2NyZWVuICpzY3Jl
ZW4sIEdka1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAgICBEaXNwbGF5ICpkaXNwbGF5ID0gR0RLX0RJ
U1BMQVlfWERJU1BMQVkoZ2RrX3NjcmVlbl9nZXRfZGlzcGxheShzY3JlZW4pKTsKLSAgICBBdG9t
IHdvcmtBcmVhID0gWEludGVybkF0b20oZGlzcGxheSwgIl9ORVRfV09SS0FSRUEiLCBUcnVlKTsK
LQotICAgIC8qIERlZmF1bHRzIGluIGNhc2Ugb2YgZXJyb3IuICovCi0gICAgYXJlYS0+eCA9IDA7
Ci0gICAgYXJlYS0+eSA9IDA7Ci0gICAgYXJlYS0+d2lkdGggPSBnZGtfc2NyZWVuX2dldF93aWR0
aChzY3JlZW4pOwotICAgIGFyZWEtPmhlaWdodCA9IGdka19zY3JlZW5fZ2V0X2hlaWdodChzY3Jl
ZW4pOwotCi0gICAgaWYgKHdvcmtBcmVhID09IE5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFdpbmRvdyByb290V2luZG93ID0gWFJvb3RXaW5kb3coZGlzcGxheSwgR0RLX1NDUkVFTl9YTlVN
QkVSKHNjcmVlbikpOwotICAgIEF0b20gdHlwZTsKLSAgICBpbnQgZm9ybWF0OwotICAgIHVuc2ln
bmVkIGxvbmcgaXRlbXNDb3VudCwgYnl0ZXNBZnRlcjsKLSAgICB1bnNpZ25lZCBjaGFyICpyZXR1
cm5lZERhdGEgPSAwOwotICAgIGludCByZXN1bHQgPSBYR2V0V2luZG93UHJvcGVydHkoZGlzcGxh
eSwgcm9vdFdpbmRvdywgd29ya0FyZWEsIDAsIDQgKiAzMiAvKiBNYXggbGVuZ3RoICovLCBGYWxz
ZSwgQW55UHJvcGVydHlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnR5cGUsICZmb3JtYXQsICZpdGVtc0NvdW50LCAmYnl0ZXNBZnRlciwgJnJldHVybmVkRGF0YSk7
Ci0gICAgaWYgKHJlc3VsdCAhPSBTdWNjZXNzIHx8IHR5cGUgPT0gTm9uZSB8fCAhZm9ybWF0IHx8
IGJ5dGVzQWZ0ZXIgfHwgaXRlbXNDb3VudCAlIDQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlu
dCBkZXNrdG9wID0gZ2V0U2NyZWVuQ3VycmVudERlc2t0b3Aoc2NyZWVuKTsKLSAgICBsb25nICp3
b3JrQXJlYXMgPSAobG9uZyAqKXJldHVybmVkRGF0YTsKLSAgICBhcmVhLT54ID0gd29ya0FyZWFz
W2Rlc2t0b3AgKiA0XTsKLSAgICBhcmVhLT55ID0gd29ya0FyZWFzW2Rlc2t0b3AgKiA0ICsgMV07
Ci0gICAgYXJlYS0+d2lkdGggPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAyXTsKLSAgICBhcmVh
LT5oZWlnaHQgPSB3b3JrQXJlYXNbZGVza3RvcCAqIDQgKyAzXTsKLQotICAgIFhGcmVlKHJldHVy
bmVkRGF0YSk7Ci19Ci0jZW5kaWYgLy8gR0RLX1dJTkRPV0lOR19YMTEKLQotdm9pZCBnZGtfc2Ny
ZWVuX2dldF9tb25pdG9yX3dvcmthcmVhKEdka1NjcmVlbiAqc2NyZWVuLCBpbnQgbW9uaXRvciwg
R2RrUmVjdGFuZ2xlICphcmVhKQotewotICAgIGdka19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0
cnkoc2NyZWVuLCBtb25pdG9yLCBhcmVhKTsKLQotI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCi0g
ICAgR2RrUmVjdGFuZ2xlIHdvcmtBcmVhOwotICAgIGdldFNjcmVlbldvcmtBcmVhKHNjcmVlbiwg
JndvcmtBcmVhKTsKLSAgICBnZGtfcmVjdGFuZ2xlX2ludGVyc2VjdCgmd29ya0FyZWEsIGFyZWEs
IGFyZWEpOwotI2VuZGlmCi19Ci0jZW5kaWYgLy8gR1RLX0NIRUNLX1ZFUlNJT04oMywgMywgNikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlM2NhYzYzM2EwZDE1YmQ5NzgwM2QwNWIxNmU1ZjYzNDEyNTNh
OGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEd0
a1ZlcnNpb25pbmdfaAotI2RlZmluZSBHdGtWZXJzaW9uaW5nX2gKLQotI2luY2x1ZGUgImF1dG90
b29sc2NvbmZpZy5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmbmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLWNvbXBhdC5oPgotI2VuZGlmCi0KLUdf
QkVHSU5fREVDTFMKLQotLy8gTWFjcm9zIHRvIGF2b2lkIGRlcHJlY2F0aW9uIGNoZWNraW5nIGNo
dXJuCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0jZGVmaW5lIEdES19XSU5ET1dfWFdJTkRP
Vyh3aW5kb3cpIChnZGtfeDExX3dpbmRvd19nZXRfeGlkKHdpbmRvdykpCi0jZWxzZQotR2RrUGl4
YnVmKiBnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
LCBpbnQgc3JjWCwgaW50IHNyY1ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotdm9pZCBnZXRHZGtEcmF3YWJsZVNpemUoR2Rr
RHJhd2FibGUqIGRyYXdhYmxlLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCk7Ci0jZW5kaWYKLQot
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgNCkKLSNkZWZpbmUgZ2RrX3BpeG1hcF9nZXRf
c2l6ZSBnZGtfZHJhd2FibGVfZ2V0X3NpemUKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigy
LCAyMywgNCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMywgMCkKLSNkZWZpbmUgZ2Rr
X3dpbmRvd19nZXRfZGlzcGxheSh3aW5kb3cpIGdka19kcmF3YWJsZV9nZXRfZGlzcGxheSh3aW5k
b3cpCi0jZGVmaW5lIGdka193aW5kb3dfZ2V0X3Zpc3VhbCBnZGtfZHJhd2FibGVfZ2V0X3Zpc3Vh
bAotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIzLCAwKQotCi0jaWYgIUdUS19DSEVD
S19WRVJTSU9OKDIsIDIyLCAwKQotY2Fpcm9fc3VyZmFjZV90KiBnZGtfd2luZG93X2NyZWF0ZV9z
aW1pbGFyX3N1cmZhY2UoR2RrV2luZG93KiB3aW5kb3csIGNhaXJvX2NvbnRlbnRfdCBjb250ZW50
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIs
IDIyLCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAyKQotI2RlZmluZSBnZGtf
dmlzdWFsX2dldF9kZXB0aCh2aXN1YWwpICh2aXN1YWwpLT5kZXB0aAotI2RlZmluZSBnZGtfdmlz
dWFsX2dldF9iaXRzX3Blcl9yZ2IodmlzdWFsKSAodmlzdWFsKS0+Yml0c19wZXJfcmdiCi0jZGVm
aW5lIGdka19kcmFnX2NvbnRleHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSAoY29udGV4
dCktPmFjdGlvbgotI2RlZmluZSBnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQp
IChjb250ZXh0KS0+YWN0aW9ucwotI2VuZGlmIC8vIEdUS19DSEVDS19WRVJTSU9OKDIsIDIxLCAy
KQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAwKQotI2RlZmluZSBndGtfd2lkZ2V0
X2dldF9yZWFsaXplZCh3aWRnZXQpIEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQotI2RlZmlu
ZSBndGtfd2lkZ2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpIEdUS19XSURHRVRfU0VUX0ZM
QUdTKCh3aWRnZXQpLCBHVEtfUkVBTElaRUQpCi0jZGVmaW5lIGd0a19yYW5nZV9nZXRfbWluX3Ns
aWRlcl9zaXplKHJhbmdlKSAocmFuZ2UpLT5taW5fc2xpZGVyX3NpemUKLSNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKLQotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwg
MCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9pc190b3BsZXZlbCh3aWRnZXQpIEdUS19XSURHRVRfVE9Q
TEVWRUwod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9yZWFsaXplZCh3aWRnZXQpIEdU
S19XSURHRVRfUkVBTElaRUQod2lkZ2V0KQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF9oYXNfd2lu
ZG93KHdpZGdldCkgIUdUS19XSURHRVRfTk9fV0lORE9XKHdpZGdldCkKLSNkZWZpbmUgZ3RrX3dp
ZGdldF9nZXRfY2FuX2ZvY3VzKHdpZGdldCkgR1RLX1dJREdFVF9DQU5fRk9DVVMod2lkZ2V0KQot
I2RlZmluZSBndGtfd2lkZ2V0X2lzX3NlbnNpdGl2ZSh3aWRnZXQpIEdUS19XSURHRVRfSVNfU0VO
U0lUSVZFKHdpZGdldCkKLSNlbmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOSwgMCkKLQot
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKLSNkZWZpbmUgZ3RrX3dpZGdldF9zZXRf
dmlzaWJsZSh3aWRnZXQsIEZBTFNFKSBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKCh3aWRnZXQpLCBH
VEtfVklTSUJMRSkKLSNkZWZpbmUgZ3RrX3dpZGdldF9nZXRfdmlzaWJsZSh3aWRnZXQpIChHVEtf
V0lER0VUX0ZMQUdTKHdpZGdldCkgJiBHVEtfVklTSUJMRSkKLQotI2RlZmluZSBndGtfd2lkZ2V0
X3NldF93aW5kb3cod2lkZ2V0LCBuZXdfd2luZG93KSAod2lkZ2V0KS0+d2luZG93ID0gKG5ld193
aW5kb3cpCi0jZGVmaW5lIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh3aWRnZXQsIFRSVUUpIEdU
S19XSURHRVRfU0VUX0ZMQUdTKCh3aWRnZXQpLCBHVEtfQ0FOX0ZPQ1VTKQotI2RlZmluZSBndGtf
d2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgYWxsb2MpICgqKGFsbG9jKSA9ICh3aWRnZXQp
LT5hbGxvY2F0aW9uKQotI2RlZmluZSBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHdpZGdldCwg
YWxsb2MpICgod2lkZ2V0KS0+YWxsb2NhdGlvbiA9ICooYWxsb2MpKQotI2VuZGlmIC8vIEdUS19D
SEVDS19WRVJTSU9OKDIsIDE4LCAwKQotCi0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDIsIDE3LCAz
KQotdm9pZCBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhHZGtXaW5kb3cqIHdpbmRvdywgZ2lu
dCB4LCBnaW50IHksIGdpbnQqIHJvb3RYLCBnaW50KiByb290WSk7Ci0jZW5kaWYgLy8gR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTcsIDMpCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTYsIDAp
Ci1jb25zdCBnY2hhciogZ3RrX21lbnVfaXRlbV9nZXRfbGFiZWwoR3RrTWVudUl0ZW0qKTsKLSNl
bmRpZiAvLyBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNiwgMCkKLQotCi0jaWYgIUdUS19DSEVDS19W
RVJTSU9OKDIsIDE0LCAwKQotI2RlZmluZSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSAo
d2lkZ2V0KS0+d2luZG93Ci0jZGVmaW5lIGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGopIChh
ZGopLT52YWx1ZQotI2RlZmluZSBndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9nKSAo
ZGlhbG9nKS0+dmJveAotI2RlZmluZSBndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cp
IChkaWFsb2cpLT5hY3Rpb25fYXJlYQotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xl
bmd0aChkYXRhKSAoZGF0YSktPmxlbmd0aAotI2RlZmluZSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0
X2RhdGEoZGF0YSkgKGRhdGEpLT5kYXRhCi0jZGVmaW5lIGd0a19zZWxlY3Rpb25fZGF0YV9nZXRf
dGFyZ2V0KGRhdGEpIChkYXRhKS0+dGFyZ2V0Ci0jZGVmaW5lIGd0a19hZGp1c3RtZW50X3NldF9w
YWdlX3NpemUoYWRqLCBuZXdWYWx1ZSkgKChhZGopLT5wYWdlX3NpemUgPSBuZXdWYWx1ZSkKLSNk
ZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dmFs
dWUgPSBuZXdWYWx1ZSkKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRfc2V0X2xvd2VyKGFkaiwgbmV3
VmFsdWUpICgoYWRqKS0+bG93ZXIgPSBuZXdWYWx1ZSkKLSNkZWZpbmUgZ3RrX2FkanVzdG1lbnRf
c2V0X3VwcGVyKGFkaiwgbmV3VmFsdWUpICgoYWRqKS0+dXBwZXIgPSBuZXdWYWx1ZSkKLQotdm9p
ZCBndGtfYWRqdXN0bWVudF9jb25maWd1cmUoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2Rv
dWJsZSB2YWx1ZSwgZ2RvdWJsZSBsb3dlciwgZ2RvdWJsZSB1cHBlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdkb3VibGUgc3RlcEluY3JlbWVudCwgZ2RvdWJsZSBwYWdlSW5jcmVt
ZW50LCBnZG91YmxlIHBhZ2VTaXplKTsKLQotdm9pZCBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUo
R3RrQWRqdXN0bWVudCogYWRqdXNtZW50LCBnZG91YmxlIHZhbHVlKTsKLSNlbmRpZiAvLyBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKLQotR2RrRGV2aWNlKiBnZXREZWZhdWx0R0RLUG9pbnRl
ckRldmljZShHZGtXaW5kb3cqIHdpbmRvdyk7Ci1HZGtDdXJzb3IqIGJsYW5rQ3Vyc29yKCk7Ci0K
LSNpZiAhR0xJQl9DSEVDS19WRVJTSU9OKDIsIDI3LCAxKQotZ2Jvb2xlYW4gZ19zaWduYWxfYWNj
dW11bGF0b3JfZmlyc3Rfd2lucyhHU2lnbmFsSW52b2NhdGlvbkhpbnQqIGludm9jYXRpb25IaW50
LCBHVmFsdWUqIHJldHVybkFjY3VtdWxhdG9yLCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4s
IGdwb2ludGVyIGRhdGEpOwotI2VuZGlmCi0KLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMywg
NikKLXZvaWQgZ2RrX3NjcmVlbl9nZXRfbW9uaXRvcl93b3JrYXJlYShHZGtTY3JlZW4gKiwgaW50
IG1vbml0b3IsIEdka1JlY3RhbmdsZSAqYXJlYSk7Ci0jZW5kaWYKLQotR19FTkRfREVDTFMKLQot
I2VuZGlmIC8vIEd0a1ZlcnNpb25pbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjAzNzZiYzc3MTRiMzk1NDkwMDEyYjk3Nzk2YTE5OTdmY2EzYzBjYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlWDExLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEg
Uy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldpZGdldEJhY2tpbmdTdG9yZS5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lv
bmluZy5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8WDExL1hsaWIuaD4K
LSNpbmNsdWRlIDxjYWlyby14bGliLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxn
ZGsvZ2RreC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdpZGdldEJhY2tpbmdT
dG9yZVByaXZhdGUgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdpZGdldEJhY2tpbmdTdG9y
ZVByaXZhdGUpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAg
RGlzcGxheSogbV9kaXNwbGF5OwotICAgIFBpeG1hcCBtX3BpeG1hcDsKLSAgICBHQyBtX2djOwot
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLQotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFdpZGdldEJhY2tpbmdTdG9yZVByaXZhdGU+IGNyZWF0ZShHdGtXaWRnZXQqIHdpZGdl
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSh3aWRnZXQsIHNpemUpKTsKLSAgICB9Ci0KLSAg
ICB+V2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZSgpCi0gICAgewotICAgICAgICBYRnJlZVBpeG1h
cChtX2Rpc3BsYXksIG1fcGl4bWFwKTsKLSAgICAgICAgWEZyZWVHQyhtX2Rpc3BsYXksIG1fZ2Mp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBXZSBrZWVwIHR3byBjb3BpZXMgb2YgdGhlIHN1
cmZhY2UgaGVyZSwgd2hpY2ggd2lsbCBkb3VibGUgdGhlIG1lbW9yeSB1c2FnZSwgYnV0IGluY3Jl
YXNlCi0gICAgLy8gc2Nyb2xsaW5nIHBlcmZvcm1hbmNlIHNpbmNlIHdlIGRvIG5vdCBoYXZlIHRv
IGtlZXAgcmVhbGxvY2F0aW5nIGEgbWVtb3J5IHJlZ2lvbiBkdXJpbmcKLSAgICAvLyBxdWljayBz
Y3JvbGxpbmcgcmVxdWVzdHMuCi0gICAgV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZShHdGtXaWRn
ZXQqIHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIEdka1Zpc3Vh
bCogdmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlzdWFsKHdpZGdldCk7Ci0gICAgICAgIEdka1Nj
cmVlbiogc2NyZWVuID0gZ2RrX3Zpc3VhbF9nZXRfc2NyZWVuKHZpc3VhbCk7Ci0gICAgICAgIG1f
ZGlzcGxheSA9IEdES19TQ1JFRU5fWERJU1BMQVkoc2NyZWVuKTsKLSAgICAgICAgbV9waXhtYXAg
PSBYQ3JlYXRlUGl4bWFwKG1fZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdES19XSU5ET1dfWElEKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KHNjcmVlbikpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3Zpc3VhbF9nZXRfZGVw
dGgodmlzdWFsKSk7Ci0gICAgICAgIG1fZ2MgPSBYQ3JlYXRlR0MobV9kaXNwbGF5LCBtX3BpeG1h
cCwgMCwgMCk7Ci0KLSAgICAgICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJm
YWNlX2NyZWF0ZShtX2Rpc3BsYXksIG1fcGl4bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdES19WSVNVQUxfWFZJU1VBTCh2aXN1YWwp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0KLX07Ci0KLVBhc3NPd25QdHI8
V2lkZ2V0QmFja2luZ1N0b3JlPiBXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHdGtXaWRnZXQq
IHdpZGdldCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFdpZGdldEJhY2tpbmdTdG9yZSh3aWRnZXQsIHNpemUpKTsKLX0KLQotV2lkZ2V0QmFja2luZ1N0
b3JlOjpXaWRnZXRCYWNraW5nU3RvcmUoR3RrV2lkZ2V0KiB3aWRnZXQsIGNvbnN0IEludFNpemUm
IHNpemUpCi0gICAgOiBtX3ByaXZhdGUoV2lkZ2V0QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRl
KHdpZGdldCwgc2l6ZSkpCi0gICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotV2lkZ2V0QmFja2lu
Z1N0b3JlOjp+V2lkZ2V0QmFja2luZ1N0b3JlKCkKLXsKLX0KLQotY2Fpcm9fc3VyZmFjZV90KiBX
aWRnZXRCYWNraW5nU3RvcmU6OmNhaXJvU3VyZmFjZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9zdXJmYWNlLmdldCgpOwotfQotCi12b2lkIFdpZGdldEJhY2tpbmdTdG9yZTo6c2Nyb2xs
KGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkK
LXsKLSAgICBJbnRSZWN0IHRhcmdldFJlY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgdGFyZ2V0UmVjdC5t
b3ZlKHNjcm9sbE9mZnNldCk7Ci0gICAgdGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc2Nyb2xsUmVjdCk7
Ci0gICAgaWYgKHRhcmdldFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
YWlyb19zdXJmYWNlX2ZsdXNoKG1fcHJpdmF0ZS0+bV9zdXJmYWNlLmdldCgpKTsKLSAgICBYQ29w
eUFyZWEobV9wcml2YXRlLT5tX2Rpc3BsYXksIG1fcHJpdmF0ZS0+bV9waXhtYXAsIG1fcHJpdmF0
ZS0+bV9waXhtYXAsIG1fcHJpdmF0ZS0+bV9nYywgCi0gICAgICAgICAgICAgIHRhcmdldFJlY3Qu
eCgpIC0gc2Nyb2xsT2Zmc2V0LndpZHRoKCksIHRhcmdldFJlY3QueSgpIC0gc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpLAotICAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3Qu
aGVpZ2h0KCksCi0gICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSk7
Ci0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3ByaXZhdGUtPm1fc3Vy
ZmFjZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LVVJMR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LVVJMR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxZmVhY2E5NmE0YTA5ZjRiYmQw
NzA4MDliNjhlMTg1NDQxNjhmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS1VSTEd0ay5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSBMdGQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2lu
Y2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcg
S1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAotewotICAgIGlmICghaXNWYWxpZCgpIHx8ICFp
c0xvY2FsRmlsZSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBHUmVmUHRyPEdG
aWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aCgpLnV0ZjgoKS5k
YXRhKCkpKTsKLSAgICBHT3duUHRyPGNoYXI+IGZpbGVuYW1lKGdfZmlsZV9nZXRfcGF0aChmaWxl
LmdldCgpKSk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lVG9TdHJpbmcoZmlsZW5hbWUuZ2V0KCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTM1YmJkNjI2M2ZmNTk1ODBjYWIwN2I1NmZjZDM5NDRmZTAwOWEwZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgotCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBjb25zdCBj
aGFyKj4gSW50Q29uc3RDaGFySGFzaE1hcDsKLQotc3RhdGljIHZvaWQgYmFja3NwYWNlQ2FsbGJh
Y2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFuc2xhdG9yKiB0cmFuc2xhdG9yKQot
ewotICAgIGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJiYWNrc3BhY2Ui
KTsKLSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiRGVsZXRlQmFja3dh
cmQiKTsKLX0KLQotc3RhdGljIHZvaWQgc2VsZWN0QWxsQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRn
ZXQsIGdib29sZWFuIHNlbGVjdCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17
Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgInNlbGVjdC1hbGwi
KTsKLSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZChzZWxlY3QgPyAiU2Vs
ZWN0QWxsIiA6ICJVbnNlbGVjdCIpOwotfQotCi1zdGF0aWMgdm9pZCBjdXRDbGlwYm9hcmRDYWxs
YmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3Ip
Ci17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImN1dC1jbGlw
Ym9hcmQiKTsKLSAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiQ3V0Iik7
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdl
dCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3Rv
cF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwgImNvcHktY2xpcGJvYXJkIik7Ci0gICAgdHJhbnNs
YXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkNvcHkiKTsKLX0KLQotc3RhdGljIHZvaWQg
cGFzdGVDbGlwYm9hcmRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5z
bGF0b3IqIHRyYW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1l
KHdpZGdldCwgInBhc3RlLWNsaXBib2FyZCIpOwotICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdF
ZGl0b3JDb21tYW5kKCJQYXN0ZSIpOwotfQotCi1zdGF0aWMgdm9pZCB0b2dnbGVPdmVyd3JpdGVD
YWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAg
IC8vIFdlIGRvbid0IHN1cHBvcnQgdG9nZ2xpbmcgdGhlIG92ZXJ3cml0ZSBtb2RlLCBidXQgdGhl
IGRlZmF1bHQgY2FsbGJhY2sgZXhwZWN0cwotICAgIC8vIHRoZSBHdGtUZXh0VmlldyB0byBoYXZl
IGEgbGF5b3V0LCBzbyB3ZSBoYW5kbGUgdGhpcyBzaWduYWwganVzdCB0byBzdG9wIGl0LgotICAg
IGdfc2lnbmFsX3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJ0b2dnbGUtb3ZlcndyaXRl
Iik7Ci19Ci0KLS8vIEdUSysgd2lsbCBzdGlsbCBzZW5kIHRoZXNlIHNpZ25hbHMgdG8gdGhlIHdl
YiB2aWV3LiBTbyB3ZSBjYW4gc2FmZWx5IHN0b3Agc2lnbmFsCi0vLyBlbWlzc2lvbiB3aXRob3V0
IGJyZWFraW5nIGFjY2Vzc2liaWxpdHkuCi1zdGF0aWMgdm9pZCBwb3B1cE1lbnVDYWxsYmFjayhH
dGtXaWRnZXQqIHdpZGdldCwgS2V5QmluZGluZ1RyYW5zbGF0b3IqKQotewotICAgIGdfc2lnbmFs
X3N0b3BfZW1pc3Npb25fYnlfbmFtZSh3aWRnZXQsICJwb3B1cC1tZW51Iik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNob3dIZWxwQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEtleUJpbmRpbmdUcmFu
c2xhdG9yKikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAi
c2hvdy1oZWxwIik7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtEZWxldGVDb21t
YW5kc1tdWzJdID0gewotICAgIHsgIkRlbGV0ZUJhY2t3YXJkIiwgICAgICAgICAgICAgICAiRGVs
ZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICB9LCAvLyBDaGFyYWN0ZXJzCi0gICAg
eyAiRGVsZXRlV29yZEJhY2t3YXJkIiwgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAg
ICAgICAgICAgICAgICAgIH0sIC8vIFdvcmQgZW5kcwotICAgIHsgIkRlbGV0ZVdvcmRCYWNrd2Fy
ZCIsICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICB9LCAv
LyBXb3JkcwotICAgIHsgIkRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9F
bmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICB9LCAvLyBMaW5lcwotICAgIHsgIkRlbGV0ZVRv
QmVnaW5uaW5nT2ZMaW5lIiwgICAgICAiRGVsZXRlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAg
ICAgICB9LCAvLyBMaW5lIGVuZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
IiwgIkRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBo
IGVuZHMKLSAgICB7ICJEZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoIiwgIkRlbGV0ZVRvRW5k
T2ZQYXJhZ3JhcGgiICAgICAgICAgICAgICAgfSwgLy8gUGFyYWdyYXBocwotICAgIHsgMCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IC8vIFdoaXRlc3BhY2UgKE0tXCBpbiBFbWFjcykKLX07Ci0KLXN0YXRpYyB2b2lk
IGRlbGV0ZUZyb21DdXJzb3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrRGVsZXRlVHlw
ZSBkZWxldGVUeXBlLCBnaW50IGNvdW50LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNsYXRv
cikKLXsKLSAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiZGVsZXRl
LWZyb20tY3Vyc29yIik7Ci0gICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwot
Ci0gICAgLy8gRW5zdXJpbmcgdGhhdCBkZWxldGVUeXBlIDw9IEdfTl9FTEVNRU5UUyBoZXJlIHJl
c3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nCi0gICAgLy8gdGhhdCB0aGUgY29uZGl0aW9uIGlz
IGFsd2F5cyB0cnVlLgotCi0gICAgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9XT1JEUykg
ewotICAgICAgICBpZiAoIWRpcmVjdGlvbikgewotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRk
UGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkRm9yd2FyZCIpOwotICAgICAgICAgICAgdHJh
bnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk1vdmVXb3JkQmFja3dhcmQiKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JD
b21tYW5kKCJNb3ZlV29yZEJhY2t3YXJkIik7Ci0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQ
ZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVdvcmRGb3J3YXJkIik7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGRlbGV0ZVR5cGUgPT0gR1RLX0RFTEVURV9ESVNQTEFZX0xJTkVTKSB7Ci0gICAg
ICAgIGlmICghZGlyZWN0aW9uKQotICAgICAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0Vk
aXRvckNvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGluZSIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFuZCgiTW92ZVRvRW5kT2ZM
aW5lIik7Ci0gICAgfSBlbHNlIGlmIChkZWxldGVUeXBlID09IEdUS19ERUxFVEVfUEFSQUdSQVBI
UykgewotICAgICAgICBpZiAoIWRpcmVjdGlvbikKLSAgICAgICAgICAgIHRyYW5zbGF0b3ItPmFk
ZFBlbmRpbmdFZGl0b3JDb21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2xhdG9yLT5hZGRQZW5kaW5nRWRpdG9yQ29tbWFu
ZCgiTW92ZVRvRW5kT2ZQYXJhZ3JhcGgiKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByYXdD
b21tYW5kID0gZ3RrRGVsZXRlQ29tbWFuZHNbZGVsZXRlVHlwZV1bZGlyZWN0aW9uXTsKLSAgICBp
ZiAoIXJhd0NvbW1hbmQpCi0gICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGFicyhjb3VudCk7IGkrKykKLSAgICAgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNv
bW1hbmQocmF3Q29tbWFuZCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBndGtNb3Zl
Q29tbWFuZHNbXVs0XSA9IHsKLSAgICB7ICJNb3ZlQmFja3dhcmQiLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkIiwKLSAgICAgICJNb3ZlQmFja3dhcmRBbmRN
b2RpZnlTZWxlY3Rpb24iLCAgICAgICAgICAgICAgICAgIk1vdmVGb3J3YXJkQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICB9LCAvLyBGb3J3YXJkL2JhY2t3YXJkIGdyYXBoZW1lCi0gICAg
eyAiTW92ZUxlZnQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3Zl
UmlnaHQiLAotICAgICAgIk1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAg
ICAgICAgICAiTW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sIC8v
IExlZnQvcmlnaHQgZ3JhcGhlbWUKLSAgICB7ICJNb3ZlV29yZEJhY2t3YXJkIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk1vdmVXb3JkRm9yd2FyZCIsCi0gICAgICAiTW92ZVdvcmRC
YWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAgICAgICJNb3ZlV29yZEZvcndhcmRB
bmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwgLy8gRm9yd2FyZC9iYWNrd2FyZCB3b3JkCi0g
ICAgeyAiTW92ZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJN
b3ZlRG93biIsCi0gICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgICAgICAgICAg
ICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwg
Ly8gVXAvZG93biBsaW5lCi0gICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiLAotICAgICAgIk1vdmVUb0JlZ2lubmlu
Z09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIsICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICAgIH0sIC8vIFVwL2Rvd24gbGluZSBlbmRzCi0gICAgeyAiTW92
ZVBhcmFncmFwaEJhY2t3YXJkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3ZlUGFyYWdy
YXBoRm9yd2FyZCIsCi0gICAgICAiTW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uIiwgICAgICAgICJNb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbiIgICAg
fSwgLy8gVXAvZG93biBwYXJhZ3JhcGhzCi0gICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGgiLCAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZlBhcmFncmFwaCIsCi0gICAgICAi
TW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24iLCAgICJNb3ZlVG9F
bmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgfSwgLy8gVXAvZG93biBwYXJhZ3Jh
cGggZW5kcy4KLSAgICB7ICJNb3ZlUGFnZVVwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIk1vdmVQYWdlRG93biIsCi0gICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVj
dGlvbiIsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgICAgfSwgLy8gVXAvZG93biBwYWdlCi0gICAgeyAiTW92ZVRvQmVnaW5uaW5nT2ZE
b2N1bWVudCIsICAgICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiwKLSAg
ICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiwgICAgIk1v
dmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LCAvLyBCZWdpbi9lbmQg
b2YgYnVmZmVyCi0gICAgeyAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSAvLyBIb3Jpem9udGFsIHBhZ2UgbW92ZW1lbnQKLX07Ci0KLXN0YXRpYyB2b2lkIG1vdmVDdXJz
b3JDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgR3RrTW92ZW1lbnRTdGVwIHN0ZXAsIGdpbnQg
Y291bnQsIGdib29sZWFuIGV4dGVuZFNlbGVjdGlvbiwgS2V5QmluZGluZ1RyYW5zbGF0b3IqIHRy
YW5zbGF0b3IpCi17Ci0gICAgZ19zaWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lKHdpZGdldCwg
Im1vdmUtY3Vyc29yIik7Ci0gICAgaW50IGRpcmVjdGlvbiA9IGNvdW50ID4gMCA/IDEgOiAwOwot
ICAgIGlmIChleHRlbmRTZWxlY3Rpb24pCi0gICAgICAgIGRpcmVjdGlvbiArPSAyOwotCi0gICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGVwKSA+PSBHX05fRUxFTUVOVFMoZ3RrTW92ZUNv
bW1hbmRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogcmF3Q29tbWFuZCA9
IGd0a01vdmVDb21tYW5kc1tzdGVwXVtkaXJlY3Rpb25dOwotICAgIGlmICghcmF3Q29tbWFuZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoY291bnQpOyBp
KyspCi0gICAgICAgIHRyYW5zbGF0b3ItPmFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKHJhd0NvbW1h
bmQpOwotfQotCi1LZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5QmluZGluZ1RyYW5zbGF0b3IoKQot
ICAgIDogbV9uYXRpdmVXaWRnZXQoZ3RrX3RleHRfdmlld19uZXcoKSkKLXsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAiYmFja3NwYWNlIiwgR19DQUxMQkFDSyhi
YWNrc3BhY2VDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVX
aWRnZXQuZ2V0KCksICJjdXQtY2xpcGJvYXJkIiwgR19DQUxMQkFDSyhjdXRDbGlwYm9hcmRDYWxs
YmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCks
ICJjb3B5LWNsaXBib2FyZCIsIEdfQ0FMTEJBQ0soY29weUNsaXBib2FyZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInBhc3RlLWNs
aXBib2FyZCIsIEdfQ0FMTEJBQ0socGFzdGVDbGlwYm9hcmRDYWxsYmFjayksIHRoaXMpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9uYXRpdmVXaWRnZXQuZ2V0KCksICJzZWxlY3QtYWxsIiwgR19D
QUxMQkFDSyhzZWxlY3RBbGxDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9uYXRpdmVXaWRnZXQuZ2V0KCksICJtb3ZlLWN1cnNvciIsIEdfQ0FMTEJBQ0sobW92ZUN1cnNv
ckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5n
ZXQoKSwgImRlbGV0ZS1mcm9tLWN1cnNvciIsIEdfQ0FMTEJBQ0soZGVsZXRlRnJvbUN1cnNvckNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQo
KSwgInRvZ2dsZS1vdmVyd3JpdGUiLCBHX0NBTExCQUNLKHRvZ2dsZU92ZXJ3cml0ZUNhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInBv
cHVwLW1lbnUiLCBHX0NBTExCQUNLKHBvcHVwTWVudUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgInNob3ctaGVscCIsIEdfQ0FMTEJB
Q0soc2hvd0hlbHBDYWxsYmFjayksIHRoaXMpOwotfQotCi1zdHJ1Y3QgS2V5Q29tYmluYXRpb25F
bnRyeSB7Ci0gICAgdW5zaWduZWQgZ2RrS2V5Q29kZTsKLSAgICB1bnNpZ25lZCBzdGF0ZTsKLSAg
ICBjb25zdCBjaGFyKiBuYW1lOwotfTsKLQotc3RhdGljIGNvbnN0IEtleUNvbWJpbmF0aW9uRW50
cnkga2V5RG93bkVudHJpZXNbXSA9IHsKLSAgICB7IEdES19iLCAgICAgICAgIEdES19DT05UUk9M
X01BU0ssICAgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgIH0sCi0gICAgeyBHREtfaSwgICAg
ICAgICBHREtfQ09OVFJPTF9NQVNLLCAgICAgICAgICAgICAgICJUb2dnbGVJdGFsaWMiICB9LAot
ICAgIHsgR0RLX0VzY2FwZSwgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fu
Y2VsIiAgICAgICAgfSwKLSAgICB7IEdES19ncmVhdGVyLCAgIEdES19DT05UUk9MX01BU0ssICAg
ICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgIH0sCi19OwotCi0vLyBUaGVzZSBjb21tYW5kcyBh
cmUgdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIHNvIHNob3VsZCB0YWtlIHBsYWNlCi0vLyB3aGls
ZSBoYW5kbGluZyB0aGUgS2V5UHJlc3MgZXZlbnQuCi1zdGF0aWMgY29uc3QgS2V5Q29tYmluYXRp
b25FbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKLSAgICB7IEdES19UYWIsICAgICAgIDAsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgIH0sCi0gICAgeyBHREtf
VGFiLCAgICAgICBHREtfU0hJRlRfTUFTSywgICAgICAgICAgICAgICAgICJJbnNlcnRCYWNrdGFi
IiB9LAotfTsKLQotdm9pZCBLZXlCaW5kaW5nVHJhbnNsYXRvcjo6Z2V0RWRpdG9yQ29tbWFuZHNG
b3JLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIEV2ZW50VHlwZSB0eXBlLCBWZWN0b3I8V1RG
OjpTdHJpbmc+JiBjb21tYW5kTGlzdCkKLXsKLSAgICBtX3BlbmRpbmdFZGl0b3JDb21tYW5kcy5j
bGVhcigpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBndGtfYmluZGluZ3NfYWN0
aXZhdGVfZXZlbnQoR1RLX09CSkVDVChtX25hdGl2ZVdpZGdldC5nZXQoKSksIGV2ZW50KTsKLSNl
bHNlCi0gICAgZ3RrX2JpbmRpbmdzX2FjdGl2YXRlX2V2ZW50KEdfT0JKRUNUKG1fbmF0aXZlV2lk
Z2V0LmdldCgpKSwgZXZlbnQpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fcGVuZGluZ0VkaXRvckNv
bW1hbmRzLmlzRW1wdHkoKSkgewotICAgICAgICBjb21tYW5kTGlzdC5hcHBlbmQobV9wZW5kaW5n
RWRpdG9yQ29tbWFuZHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChJbnRDb25zdENoYXJIYXNoTWFwLCBrZXlEb3duQ29tbWFuZHNNYXAsICgpKTsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEludENvbnN0Q2hhckhhc2hNYXAsIGtleVByZXNzQ29t
bWFuZHNNYXAsICgpKTsKLQotICAgIGlmIChrZXlEb3duQ29tbWFuZHNNYXAuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoa2V5RG93bkVu
dHJpZXMpOyBpKyspCi0gICAgICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAuc2V0KGtleURvd25F
bnRyaWVzW2ldLnN0YXRlIDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0uZ2RrS2V5Q29kZSwga2V5
RG93bkVudHJpZXNbaV0ubmFtZSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdfTl9FTEVNRU5UUyhrZXlQcmVzc0VudHJpZXMpOyBpKyspCi0gICAgICAgICAgICBrZXlQcmVz
c0NvbW1hbmRzTWFwLnNldChrZXlQcmVzc0VudHJpZXNbaV0uc3RhdGUgPDwgMTYgfCBrZXlQcmVz
c0VudHJpZXNbaV0uZ2RrS2V5Q29kZSwga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUpOwotICAgIH0K
LQotICAgIC8vIFNwZWNpYWwtY2FzZSBlbnRlciBrZXlzIGZvciB3ZSB3YW50IHRoZW0gdG8gd29y
ayByZWdhcmRsZXNzIG9mIG1vZGlmaWVyLgotICAgIGlmICgoZXZlbnQtPmtleXZhbCA9PSBHREtf
UmV0dXJuIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLX0tQX0VudGVyIHx8IGV2ZW50LT5rZXl2YWwg
PT0gR0RLX0lTT19FbnRlcikgJiYgdHlwZSA9PSBLZXlQcmVzcykgewotICAgICAgICBjb21tYW5k
TGlzdC5hcHBlbmQoIkluc2VydE5ld0xpbmUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIEZvciBrZXlwcmVzcyBldmVudHMsIHdlIHdhbnQgY2hhckNvZGUoKSwgYnV0IGtleUNv
ZGUoKSBkb2VzIHRoYXQuCi0gICAgaW50IG1hcEtleSA9IGV2ZW50LT5zdGF0ZSA8PCAxNiB8IGV2
ZW50LT5rZXl2YWw7Ci0gICAgaWYgKG1hcEtleSkgewotICAgICAgICBIYXNoTWFwPGludCwgY29u
c3QgY2hhcio+KiBjb21tYW5kTWFwID0gdHlwZSA9PSBLZXlEb3duID8gICZrZXlEb3duQ29tbWFu
ZHNNYXAgOiAma2V5UHJlc3NDb21tYW5kc01hcDsKLSAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGNv
bW1hbmRTdHJpbmcgPSBjb21tYW5kTWFwLT5nZXQobWFwS2V5KSkgewotICAgICAgICAgICAgY29t
bWFuZExpc3QuYXBwZW5kKGNvbW1hbmRTdHJpbmcpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5QmluZGluZ1RyYW5zbGF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNjQzNmRlNmNiODYzZDlhMzYxYjc3NDI4YzE0OTc0N2YzMzRi
Yzg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBJZ2Fs
aWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBLZXlCaW5k
aW5nVHJhbnNsYXRvcl9oCi0jZGVmaW5lIEtleUJpbmRpbmdUcmFuc2xhdG9yX2gKLQotI2luY2x1
ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVu
dEtleTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLZXlCaW5kaW5nVHJhbnNsYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgS2V5QmluZGluZ1RyYW5zbGF0b3IoKTsKLQotICAgIGVudW0gRXZl
bnRUeXBlIHsgS2V5RG93biwgS2V5UHJlc3MgfTsKLSAgICB2b2lkIGdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBFdmVudFR5cGUsIFZlY3RvcjxXVEY6OlN0cmluZz4m
KTsKLSAgICB2b2lkIGFkZFBlbmRpbmdFZGl0b3JDb21tYW5kKGNvbnN0IGNoYXIqIGNvbW1hbmQp
IHsgbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IG1fbmF0aXZlV2lkZ2V0OwotICAgIFZlY3RvcjxXVEY6
OlN0cmluZz4gbV9wZW5kaW5nRWRpdG9yQ29tbWFuZHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9MYW5ndWFnZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3Vh
Z2VHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2E3MWU1NjFjNTM0NGMw
NWVmMDNiZjEyODMzNTZmYzUyYTQyZmRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJMYW5ndWFnZS5oIgotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8bG9jYWxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVXNpbmcgcGFuZ29fbGFu
Z3VhZ2VfZ2V0X2RlZmF1bHQoKSBoZXJlIGlzIG5vdCBhbiBvcHRpb24sIGJlY2F1c2UKLS8vIGl0
IGRvZXNuJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGUgbG9jYWxlIGluIHJ1bnRpbWUsIHNvIGl0IHJl
dHVybnMKLS8vIGFsd2F5cyB0aGUgc2FtZSB2YWx1ZS4KLXN0YXRpYyBTdHJpbmcgcGxhdGZvcm1M
YW5ndWFnZSgpCi17Ci0gICAgY2hhciogbG9jYWxlRGVmYXVsdCA9IHNldGxvY2FsZShMQ19DVFlQ
RSwgTlVMTCk7Ci0KLSAgICBpZiAoIWxvY2FsZURlZmF1bHQpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoImMiKTsKLQotICAgIEdPd25QdHI8Z2NoYXI+IG5vcm1hbGl6ZWREZWZhdWx0KGdfYXNjaWlf
c3RyZG93bihsb2NhbGVEZWZhdWx0LCAtMSkpOwotICAgIGNoYXIqIHB0ciA9IHN0cmNocihub3Jt
YWxpemVkRGVmYXVsdC5nZXQoKSwgJ18nKTsKLQotICAgIGlmIChwdHIpCi0gICAgICAgICpwdHIg
PSAnLSc7Ci0KLSAgICBwdHIgPSBzdHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICcuJyk7
Ci0KLSAgICBpZiAocHRyKQotICAgICAgICAqcHRyID0gJ1wwJzsKLQotICAgIHJldHVybiBTdHJp
bmcobm9ybWFsaXplZERlZmF1bHQuZ2V0KCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBwbGF0Zm9y
bVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXM7Ci0gICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQocGxhdGZv
cm1MYW5ndWFnZSgpKTsKLSAgICByZXR1cm4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKLX0KLSAg
ICAKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRT
dHJpbmdzR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJp
bmdzR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyY2FhMmY5ZGYyNTJm
NjkyNWJhMjAzNGU0Y2E0NTkxYmMxNWI2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9jYWxpemVkU3Ry
aW5nc0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJp
Z2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAi
SW50U2l6ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hh
ciogZ3RrU3RvY2tMYWJlbChjb25zdCBjaGFyKiBzdG9ja0lEKQotewotICAgIEd0a1N0b2NrSXRl
bSBpdGVtOwotICAgIGlmICghZ3RrX3N0b2NrX2xvb2t1cChzdG9ja0lELCAmaXRlbSkpCi0gICAg
ICAgIHJldHVybiBzdG9ja0lEOwotICAgIHJldHVybiBpdGVtLmxhYmVsOwotfQotCi1TdHJpbmcg
c3VibWl0QnV0dG9uRGVmYXVsdExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJTdWJtaXQiKSk7Ci19Ci0KLVN0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJTdWJtaXQiKSk7Ci19Ci0KLVN0cmluZyByZXNl
dEJ1dHRvbkRlZmF1bHRMYWJlbCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
UmVzZXQiKSk7Ci19Ci0KLVN0cmluZyBkZWZhdWx0RGV0YWlsc1N1bW1hcnlUZXh0KCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJEZXRhaWxzIikpOwotfQotCi1TdHJpbmcgc2Vh
cmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJUaGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAi
KSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDaG9vc2UgRmlsZSIpKTsKLX0KLQotU3RyaW5nIGZpbGVC
dXR0b25DaG9vc2VNdWx0aXBsZUZpbGVzTGFiZWwoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIkNob29zZSBGaWxlcyIpKTsKLX0KLQotU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVT
ZWxlY3RlZExhYmVsKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCIoTm9uZSki
KSk7Ci19Ci0KLVN0cmluZyBmaWxlQnV0dG9uTm9GaWxlc1NlbGVjdGVkTGFiZWwoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIihOb25lKSIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIk9wZW4gTGluayBpbiBOZXcgX1dpbmRvdyIpKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiX0Rvd25sb2FkIExpbmtlZCBGaWxlIikpOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoXygiQ29weSBMaW5rIExvY19hdGlvbiIpKTsKLX0KLQotU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJPcGVuIF9JbWFnZSBpbiBOZXcgV2luZG93IikpOwotfQotCi1TdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaygpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiU2FfdmUgSW1hZ2UgQXMiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiQ29wX3kgSW1hZ2UiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiQ29weSBJbWFnZSBfQWRkcmVzcyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJPcGVuIF9WaWRlbyBpbiBOZXcgV2luZG93IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIk9wZW4gX0F1ZGlvIGluIE5ldyBXaW5kb3ciKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdDb3B5VmlkZW9MaW5rVG9DbGlwYm9hcmQoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oIkNvcF95IFZpZGVvIExpbmsgTG9jYXRpb24iKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5QXVkaW9MaW5rVG9DbGlwYm9hcmQoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkNvcF95IEF1ZGlvIExpbmsgTG9jYXRpb24iKSk7
Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfVG9nZ2xlIE1lZGlhIENvbnRyb2xzIikp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJUb2dnbGUgTWVkaWEgX0xvb3AgUGxheWJhY2si
KSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3dpdGNoIFZpZGVvIHRvIF9GdWxs
c2NyZWVuIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUGxheSIpKTsKLX0KLQotU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ01lZGlhUGF1c2UoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KF8oIl9QYXVzZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0
ZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiX011dGUiKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiT3BlbiBfRnJhbWUgaW4gTmV3IFdpbmRvdyIpKTsKLX0K
LQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKQotewotICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfQ09Q
WSkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnRGVsZXRlKCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZy
b21VVEY4KGd0a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0RFTEVURSkpOwotICAgIHJldHVybiBzdG9j
a0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCkKLXsKLSAg
ICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFi
ZWwoR1RLX1NUT0NLX1NFTEVDVF9BTEwpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJlbDsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGUoKQotewotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KF8oIl9JbnNlcnQgVW5pY29kZSBDb250cm9sIENoYXJhY3RlciIpKTsKLX0KLQot
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kcygpCi17Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygiSW5wdXQgX01ldGhvZHMiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdHb0JhY2soKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0
cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfR09fQkFDSykpOwotICAgIHJl
dHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJk
KCkKLXsKLSAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0
a1N0b2NrTGFiZWwoR1RLX1NUT0NLX0dPX0ZPUldBUkQpKTsKLSAgICByZXR1cm4gc3RvY2tMYWJl
bDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKQotewotICAgIHN0YXRpYyBT
dHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RP
Q0tfU1RPUCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnUmVsb2FkKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfUmVs
b2FkIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkKLXsKLSAgICBzdGF0
aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4KGd0a1N0b2NrTGFiZWwoR1RL
X1NUT0NLX0NVVCkpOwotICAgIHJldHVybiBzdG9ja0xhYmVsOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnUGFzdGUoKQotewotICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0
cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfUEFTVEUpKTsKLSAgICByZXR1
cm4gc3RvY2tMYWJlbDsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0Zv
dW5kKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJObyBHdWVzc2VzIEZvdW5k
IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9JZ25vcmUgU3BlbGxpbmciKSk7Ci19Ci0K
LVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJfTGVhcm4gU3BlbGxpbmciKSk7Ci19Ci0KLVN0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oIl9TZWFyY2ggdGhlIFdlYiIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xv
b2tVcEluRGljdGlvbmFyeShjb25zdCBTdHJpbmcmKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIl9Mb29rIFVwIGluIERpY3Rpb25hcnkiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
X09wZW4gTGluayIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1t
YXIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIklnbm9yZSBfR3JhbW1hciIp
KTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpCi17Ci0gICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiU3BlbGxpbmcgYW5kIF9HcmFtbWFyIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoYm9vbCBzaG93KQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNob3cgPyBfKCJfU2hvdyBTcGVsbGluZyBh
bmQgR3JhbW1hciIpIDogXygiX0hpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJfQ2hlY2sgRG9jdW1lbnQgTm93IikpOwotfQotCi1TdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJDaGVjayBTcGVsbGluZyBXaGlsZSBfVHlwaW5nIikpOwotfQot
Ci1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJDaGVjayBfR3JhbW1hciBXaXRoIFNwZWxs
aW5nIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKQotewotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIl9Gb250IikpOwotfQotCi1TdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnQm9sZCgpCi17Ci0gICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3Ry
aW5nOjpmcm9tVVRGOChndGtTdG9ja0xhYmVsKEdUS19TVE9DS19CT0xEKSk7Ci0gICAgcmV0dXJu
IHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQotewot
ICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tM
YWJlbChHVEtfU1RPQ0tfSVRBTElDKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQotewotICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoZ3RrU3RvY2tMYWJlbChHVEtfU1RPQ0tfVU5E
RVJMSU5FKSk7Ci0gICAgcmV0dXJuIHN0b2NrTGFiZWw7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdPdXRsaW5lKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJfT3V0
bGluZSIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkK
LXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJJbnNwZWN0IF9FbGVtZW50IikpOwot
fQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcmsoKQotewot
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSTSBfTGVmdC10by1yaWdodCBtYXJrIikp
OwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFJMTU1hcmsoKQot
ewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlJMTSBfUmlnaHQtdG8tbGVmdCBtYXJr
IikpOwotfQotCi1TdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSRU1hcmso
KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkxSRSBMZWZ0LXRvLXJpZ2h0IF9l
bWJlZGRpbmciKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0
UkxFTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUkxFIFJpZ2h0LXRv
LWxlZnQgZV9tYmVkZGluZyIpKTsKLX0KLQotU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1VuaWNv
ZGVJbnNlcnRMUk9NYXJrKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJMUk8g
TGVmdC10by1yaWdodCBfb3ZlcnJpZGUiKSk7Ci19Ci0KLVN0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdVbmljb2RlSW5zZXJ0UkxPTWFyaygpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
XygiUkxPIFJpZ2h0LXRvLWxlZnQgb192ZXJyaWRlIikpOwotfQotCi1TdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnVW5pY29kZUluc2VydFBERk1hcmsoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oIlBERiBfUG9wIGRpcmVjdGlvbmFsIGZvcm1hdHRpbmciKSk7Ci19Ci0KLVN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldTTWFyaygpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygiWldTIF9aZXJvIHdpZHRoIHNwYWNlIikpOwotfQotCi1TdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXSk1hcmsoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oIlpXSiBaZXJvIHdpZHRoIF9qb2luZXIiKSk7Ci19Ci0KLVN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlpXTkogWmVybyB3aWR0aCBfbm9uLWpvaW5lciIpKTsK
LX0KLQotU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTm8gcmVjZW50IHNlYXJjaGVzIikpOwotfQotCi1TdHJp
bmcgc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygiUmVjZW50IHNlYXJjaGVzIikpOwotfQotCi1TdHJpbmcgc2VhcmNoTWVudUNs
ZWFyUmVjZW50U2VhcmNoZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJfQ2xlYXIgcmVjZW50IHNlYXJjaGVzIikpOwotfQotCi1TdHJpbmcgQVhEZWZpbml0aW9uVGV4
dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZGVmaW5pdGlvbiIpKTsKLX0K
LQotU3RyaW5nIEFYRGVzY3JpcHRpb25MaXN0VGVybVRleHQoKQotewotICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KF8oInRlcm0iKSk7Ci19Ci0KLVN0cmluZyBBWERlc2NyaXB0aW9uTGlzdERl
dGFpbFRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImRlc2NyaXB0aW9u
IikpOwotfQotCi1TdHJpbmcgQVhGb290ZXJSb2xlRGVzY3JpcHRpb25UZXh0KCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmb290ZXIiKSk7Ci19Ci0KLVN0cmluZyBBWEJ1dHRv
bkFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInByZXNzIikp
OwotfQotCi1TdHJpbmcgQVhSYWRpb0J1dHRvbkFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KF8oInNlbGVjdCIpKTsKLX0KLQotU3RyaW5nIEFYVGV4dEZpZWxkQWN0
aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYWN0aXZhdGUiKSk7
Ci19Ci0KLVN0cmluZyBBWENoZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQotewotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KF8oInVuY2hlY2siKSk7Ci19Ci0KLVN0cmluZyBBWFVuY2hlY2tl
ZENoZWNrQm94QWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
Y2hlY2siKSk7Ci19Ci0KLVN0cmluZyBBWExpbmtBY3Rpb25WZXJiKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJqdW1wIikpOwotfQotCi1TdHJpbmcgQVhNZW51TGlzdFBvcHVw
QWN0aW9uVmVyYigpCi17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQVhNZW51
TGlzdEFjdGlvblZlcmIoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSAgICAKLVN0cmlu
ZyBtaXNzaW5nUGx1Z2luVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
TWlzc2luZyBQbHVnLWluIikpOwotfQotCi1TdHJpbmcgY3Jhc2hlZFBsdWdpblRleHQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGx1
Zy1pbiBGYWlsdXJlIikpOwotfQotCi1TdHJpbmcgYmxvY2tlZFBsdWdpbkJ5Q29udGVudFNlY3Vy
aXR5UG9saWN5VGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBpbnNlY3VyZVBsdWdpblZlcnNpb25UZXh0KCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGluYWN0
aXZlUGx1Z2luVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLVN0cmluZyBtdWx0aXBsZUZpbGVVcGxvYWRUZXh0KHVuc2lnbmVkIG51bWJl
ck9mRmlsZXMpCi17Ci0gICAgLy8gRklYTUU6IElmIHRoaXMgZmlsZSBnZXRzIGxvY2FsaXplZCwg
dGhpcyBzaG91bGQgcmVhbGx5IGJlIGxvY2FsaXplZCBhcyBvbmUgc3RyaW5nIHdpdGggYSB3aWxk
Y2FyZCBmb3IgdGhlIG51bWJlci4KLSAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyT2ZG
aWxlcykgKyBTdHJpbmc6OmZyb21VVEY4KF8oIiBmaWxlcyIpKTsKLX0KLQotU3RyaW5nIHVua25v
d25GaWxlU2l6ZVRleHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlVua25v
d24iKSk7Ci19Ci0KLVN0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVw
X3ByaW50ZihDXygiVGl0bGUgc3RyaW5nIGZvciBpbWFnZXMiLCAiJXMgICglZHglZCBwaXhlbHMp
IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZS51
dGY4KCkuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChzdHJpbmcuZ2V0KCkpOwotfQotCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLVN0cmluZyBt
ZWRpYUVsZW1lbnRMb2FkaW5nU3RhdGVUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJMb2FkaW5nLi4uIikpOwotfQotCi1TdHJpbmcgbWVkaWFFbGVtZW50TGl2ZUJyb2Fk
Y2FzdFN0YXRlVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiTGl2ZSBC
cm9hZGNhc3QiKSk7Ci19Ci0KLVN0cmluZyBsb2NhbGl6ZWRNZWRpYUNvbnRyb2xFbGVtZW50U3Ry
aW5nKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBjb250
cm9sbGVyIikpOwotICAgIGlmIChuYW1lID09ICJWaWRlb0VsZW1lbnQiKQotICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ2aWRlbyBlbGVtZW50IGNvbnRyb2xsZXIiKSk7Ci0gICAg
aWYgKG5hbWUgPT0gIk11dGVCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChfKCJtdXRlIikpOwotICAgIGlmIChuYW1lID09ICJVbk11dGVCdXR0b24iKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJ1bm11dGUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlBs
YXlCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwbGF5IikpOwot
ICAgIGlmIChuYW1lID09ICJQYXVzZUJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oInBhdXNlIikpOwotICAgIGlmIChuYW1lID09ICJTbGlkZXIiKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIikpOwotICAgIGlmIChuYW1lID09
ICJTbGlkZXJUaHVtYiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInRpbWVs
aW5lIHNsaWRlciB0aHVtYiIpKTsKLSAgICBpZiAobmFtZSA9PSAiUmV3aW5kQnV0dG9uIikKLSAg
ICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYmFjayAzMCBzZWNvbmRzIikpOwotICAg
IGlmIChuYW1lID09ICJSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygicmV0dXJuIHRvIHJlYWx0aW1lIikpOwotICAgIGlmIChuYW1lID09
ICJDdXJyZW50VGltZURpc3BsYXkiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJlbGFwc2VkIHRpbWUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlRpbWVSZW1haW5pbmdEaXNwbGF5
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygicmVtYWluaW5nIHRpbWUiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQotICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChfKCJzdGF0dXMiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVl
bkJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oImVudGVyIGZ1bGxz
Y3JlZW4iKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkV4aXRGdWxsc2NyZWVuQnV0dG9uIikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiZXhpdCBmdWxsc2NyZWVuIikpOwotICAgIGlm
IChuYW1lID09ICJTZWVrRm9yd2FyZEJ1dHRvbiIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KF8oImZhc3QgZm9yd2FyZCIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2Vla0JhY2tCdXR0
b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJmYXN0IHJldmVyc2UiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlNob3dDbG9zZWRDYXB0aW9uc0J1dHRvbiIpCi0gICAgICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInNob3cgY2xvc2VkIGNhcHRpb25zIikpOwotICAgIGlm
IChuYW1lID09ICJIaWRlQ2xvc2VkQ2FwdGlvbnNCdXR0b24iKQotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJoaWRlIGNsb3NlZCBjYXB0aW9ucyIpKTsKLSAgICBpZiAobmFtZSA9
PSAiQ29udHJvbHNQYW5lbCIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIm1l
ZGlhIGNvbnRyb2xzIikpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IFN0cmluZygpOwotfQotCi1TdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBU
ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZSA9PSAiQXVkaW9FbGVtZW50
IikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiYXVkaW8gZWxlbWVudCBwbGF5
YmFjayBjb250cm9scyBhbmQgc3RhdHVzIGRpc3BsYXkiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlZp
ZGVvRWxlbWVudCIpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInZpZGVvIGVs
ZW1lbnQgcGxheWJhY2sgY29udHJvbHMgYW5kIHN0YXR1cyBkaXNwbGF5IikpOwotICAgIGlmIChu
YW1lID09ICJNdXRlQnV0dG9uIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygi
bXV0ZSBhdWRpbyB0cmFja3MiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlVuTXV0ZUJ1dHRvbiIpCi0g
ICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInVubXV0ZSBhdWRpbyB0cmFja3MiKSk7
Ci0gICAgaWYgKG5hbWUgPT0gIlBsYXlCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChfKCJiZWdpbiBwbGF5YmFjayIpKTsKLSAgICBpZiAobmFtZSA9PSAiUGF1c2VCdXR0
b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJwYXVzZSBwbGF5YmFjayIp
KTsKLSAgICBpZiAobmFtZSA9PSAiU2xpZGVyIikKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoXygibW92aWUgdGltZSBzY3J1YmJlciIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2xpZGVy
VGh1bWIiKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJtb3ZpZSB0aW1lIHNj
cnViYmVyIHRodW1iIikpOwotICAgIGlmIChuYW1lID09ICJSZXdpbmRCdXR0b24iKQotICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIG1vdmllIGJhY2sgMzAgc2Vjb25kcyIp
KTsKLSAgICBpZiAobmFtZSA9PSAiUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiIpCi0gICAgICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInJldHVybiBzdHJlYW1pbmcgbW92aWUgdG8gcmVhbCB0
aW1lIikpOwotICAgIGlmIChuYW1lID09ICJDdXJyZW50VGltZURpc3BsYXkiKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJjdXJyZW50IG1vdmllIHRpbWUgaW4gc2Vjb25kcyIp
KTsKLSAgICBpZiAobmFtZSA9PSAiVGltZVJlbWFpbmluZ0Rpc3BsYXkiKQotICAgICAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJudW1iZXIgb2Ygc2Vjb25kcyBvZiBtb3ZpZSByZW1haW5p
bmciKSk7Ci0gICAgaWYgKG5hbWUgPT0gIlN0YXR1c0Rpc3BsYXkiKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJjdXJyZW50IG1vdmllIHN0YXR1cyIpKTsKLSAgICBpZiAobmFt
ZSA9PSAiU2Vla0JhY2tCdXR0b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChf
KCJzZWVrIHF1aWNrbHkgYmFjayIpKTsKLSAgICBpZiAobmFtZSA9PSAiU2Vla0ZvcndhcmRCdXR0
b24iKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChfKCJzZWVrIHF1aWNrbHkgZm9y
d2FyZCIpKTsKLSAgICBpZiAobmFtZSA9PSAiRW50ZXJGdWxsc2NyZWVuQnV0dG9uIikKLSAgICAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoXygiUGxheSBtb3ZpZSBpbiBmdWxsc2NyZWVuIG1v
ZGUiKSk7Ci0gICAgaWYgKG5hbWUgPT0gIkVudGVyRnVsbHNjcmVlbkJ1dHRvbiIpCi0gICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkV4aXQgZnVsbHNjcmVlbiBtb2RlIikpOwotICAg
IGlmIChuYW1lID09ICJTaG93Q2xvc2VkQ2FwdGlvbnNCdXR0b24iKQotICAgICAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOChfKCJzdGFydCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIpKTsK
LSAgICBpZiAobmFtZSA9PSAiSGlkZUNsb3NlZENhcHRpb25zQnV0dG9uIikKLSAgICAgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoXygic3RvcCBkaXNwbGF5aW5nIGNsb3NlZCBjYXB0aW9ucyIp
KTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0aW9uKGZsb2F0IHRpbWUpCi17Ci0g
ICAgaWYgKCFzdGQ6OmlzZmluaXRlKHRpbWUpKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJpbmRlZmluaXRlIHRpbWUiKSk7Ci0KLSAgICBpbnQgc2Vjb25kcyA9IHN0YXRpY19j
YXN0PGludD4oYWJzKHRpbWUpKTsKLSAgICBpbnQgZGF5cyA9IHNlY29uZHMgLyAoNjAgKiA2MCAq
IDI0KTsKLSAgICBpbnQgaG91cnMgPSBzZWNvbmRzIC8gKDYwICogNjApOwotICAgIGludCBtaW51
dGVzID0gKHNlY29uZHMgLyA2MCkgJSA2MDsKLSAgICBzZWNvbmRzICU9IDYwOwotCi0gICAgaWYg
KGRheXMpIHsKLSAgICAgICAgR093blB0cjxnY2hhcj4gc3RyaW5nKGdfc3RyZHVwX3ByaW50Zigi
JWQgZGF5cyAlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29uZHMiLCBkYXlzLCBob3VycywgbWlu
dXRlcywgc2Vjb25kcykpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcu
Z2V0KCkpOwotICAgIH0KLQotICAgIGlmIChob3VycykgewotICAgICAgICBHT3duUHRyPGdjaGFy
PiBzdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCIlZCBob3VycyAlZCBtaW51dGVzICVkIHNlY29uZHMi
LCBob3VycywgbWludXRlcywgc2Vjb25kcykpOwotICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChzdHJpbmcuZ2V0KCkpOwotICAgIH0KLQotICAgIGlmIChtaW51dGVzKSB7Ci0gICAgICAg
IEdPd25QdHI8Z2NoYXI+IHN0cmluZyhnX3N0cmR1cF9wcmludGYoIiVkIG1pbnV0ZXMgJWQgc2Vj
b25kcyIsIG1pbnV0ZXMsIHNlY29uZHMpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
Rjgoc3RyaW5nLmdldCgpKTsKLSAgICB9Ci0KLSAgICBHT3duUHRyPGdjaGFyPiBzdHJpbmcoZ19z
dHJkdXBfcHJpbnRmKCIlZCBzZWNvbmRzIiwgc2Vjb25kcykpOwotICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KHN0cmluZy5nZXQoKSk7Ci19Ci0jZW5kaWYgIC8vIEVOQUJMRShWSURFTykKLQot
U3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpCi17Ci0gICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoXygidmFsdWUgbWlzc2luZyIpKTsKLX0KLQotU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yQ2hlY2tib3hUZXh0KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQo
KTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yRmlsZVRleHQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdl
VmFsdWVNaXNzaW5nVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1p
c3NpbmdGb3JNdWx0aXBsZUZpbGVUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKLX0KLQotU3RyaW5n
IHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yUmFkaW9UZXh0KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1Rl
eHQoKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yU2VsZWN0
VGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmFsaWRhdGlvbk1l
c3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5
cGVNaXNtYXRjaFRleHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoXygidHlwZSBtaXNtYXRjaCIpKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRp
b25NZXNzYWdlVHlwZU1pc21hdGNoRm9yRW1haWxUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKLX0K
LQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yTXVsdGlwbGVFbWFpbFRl
eHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVHlwZU1pc21hdGNoVGV4dCgpOwotfQotCi1TdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VUeXBl
TWlzbWF0Y2hGb3JVUkxUZXh0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKLX0KLQotU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlUGF0dGVybk1pc21hdGNoVGV4dCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoXygicGF0dGVybiBtaXNtYXRjaCIpKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25N
ZXNzYWdlVG9vTG9uZ1RleHQoaW50LCBpbnQpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygidG9vIGxvbmciKSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5k
ZXJmbG93VGV4dChjb25zdCBTdHJpbmcmKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KF8oInJhbmdlIHVuZGVyZmxvdyIpKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFu
Z2VPdmVyZmxvd1RleHQoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOChfKCJyYW5nZSBvdmVyZmxvdyIpKTsKLX0KLQotU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdl
U3RlcE1pc21hdGNoVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KF8oInN0ZXAgbWlzbWF0Y2giKSk7Ci19Ci0KLVN0cmluZyB1
bmFjY2VwdGFibGVUTFNDZXJ0aWZpY2F0ZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoXygiVW5hY2NlcHRhYmxlIFRMUyBjZXJ0aWZpY2F0ZSIpKTsKLX0KLQotU3RyaW5nIGxvY2Fs
aXplZFN0cmluZyhjb25zdCBjaGFyKiBrZXkpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
Rjgoa2V5LCBzdHJsZW4oa2V5KSk7Ci19Ci0KLVN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZUJhZElu
cHV0Rm9yTnVtYmVyVGV4dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlzbWF0Y2hUZXh0KCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi1TdHJpbmcgdGV4dFRyYWNrQ2xvc2VkQ2FwdGlvbnNUZXh0KCkKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiQ2xvc2VkIENhcHRpb25zIiwgIk1lbnUgc2VjdGlv
biBoZWFkaW5nIGZvciBjbG9zZWQgY2FwdGlvbnMiKSk7Ci19Ci0KLVN0cmluZyB0ZXh0VHJhY2tT
dWJ0aXRsZXNUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiU3VidGl0
bGVzIiwgIk1lbnUgc2VjdGlvbiBoZWFkaW5nIGZvciBzdWJ0aXRsZXMiKSk7Ci19Ci0KLVN0cmlu
ZyB0ZXh0VHJhY2tPZmZUZXh0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygi
T2ZmIiwgIk1lbnUgaXRlbSBsYWJlbCBmb3IgdGhlIHRyYWNrIHRoYXQgcmVwcmVzZW50cyBkaXNh
YmxpbmcgY2xvc2VkIGNhcHRpb25zIikpOwotfQotCi1TdHJpbmcgdGV4dFRyYWNrTm9MYWJlbFRl
eHQoKQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KENfKCJObyBsYWJlbCIsICJNZW51
IGl0ZW0gbGFiZWwgZm9yIGEgY2xvc2VkIGNhcHRpb25zIHRyYWNrIHRoYXQgaGFzIG5vIG90aGVy
IG5hbWUiKSk7Ci19Ci0jZW5kaWYKLQotU3RyaW5nIHNuYXBzaG90dGVkUGx1Z0luTGFiZWxUaXRs
ZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoQ18oIlNuYXBzaG90dGVkIFBsdWct
SW4iLCAiVGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWlu
IikpOwotfQotCi1TdHJpbmcgc25hcHNob3R0ZWRQbHVnSW5MYWJlbFN1YnRpdGxlKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChDXygiQ2xpY2sgdG8gcmVzdGFydCIsICJTdWJ0aXRs
ZSBvZiB0aGUgbGFiZWwgdG8gc2hvdyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4iKSk7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTg5OGFmN2Q4YmViY2JlMDVjOWFiZTdmZjRhNDFlMTdjOTA4
Y2Y5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxn
bnNAZ25vbWUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLSNpZiAhTE9HX0RJU0FCTEVECi0KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gSW5zcGlyZWQgYnkgdGhl
IGNvZGUgdXNlZCBieSB0aGUgUXQgcG9ydAotCi12b2lkIGluaXRpYWxpemVMb2dnaW5nQ2hhbm5l
bHNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZUxvZ2dpbmdD
aGFubmVscyA9IGZhbHNlOwotICAgIGlmIChkaWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBkaWRJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzID0gdHJ1
ZTsKLQotICAgIGNoYXIqIGxvZ0VudiA9IGdldGVudigiV0VCS0lUX0RFQlVHIik7Ci0gICAgaWYg
KCFsb2dFbnYpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHdlIHNldCB1cCB0aGUgbG9ncyBh
bnl3YXkgYmVjYXVzZSBzb21lIG9mIG91ciBsb2dnaW5nLCBzdWNoIGFzCi0gICAgLy8gc291cCdz
IGlzIGF2YWlsYWJsZSBpbiByZWxlYXNlIGJ1aWxkcwotI2lmIGRlZmluZWQoTkRFQlVHKQotICAg
IGdfd2FybmluZygiV0VCS0lUX0RFQlVHIGlzIG5vdCBlbXB0eSwgYnV0IHRoaXMgaXMgYSByZWxl
YXNlIGJ1aWxkLiBOb3RpY2UgdGhhdCBtYW55IGxvZyBtZXNzYWdlcyB3aWxsIG9ubHkgYXBwZWFy
IGluIGEgZGVidWcgYnVpbGQuIik7Ci0jZW5kaWYKLQotICAgIGNoYXIqKiBsb2d2ID0gZ19zdHJz
cGxpdChsb2dFbnYsICIgIiwgLTEpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGxvZ3ZbaV07IGkr
KykgewotICAgICAgICBpZiAoV1RGTG9nQ2hhbm5lbCogY2hhbm5lbCA9IGdldENoYW5uZWxGcm9t
TmFtZShsb2d2W2ldKSkKLSAgICAgICAgICAgIGNoYW5uZWwtPnN0YXRlID0gV1RGTG9nQ2hhbm5l
bE9uOwotICAgIH0KLQotICAgIGdfc3RyZnJlZXYobG9ndik7Ci0KLSAgICAvLyB0byBkaXNhYmxl
IGxvZ2dpbmcgbm90SW1wbGVtZW50ZWQgc2V0IHRoZSBESVNBQkxFX05JX1dBUk5JTkcKLSAgICAv
LyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAxCi0gICAgTG9nTm90WWV0SW1wbGVtZW50ZWQuc3Rh
dGUgPSBXVEZMb2dDaGFubmVsT247Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OWY3ZjE0Y2Q4ZGY3YTU2MmIwMmVjMzJiOGRmYTJmNGNmOTZmYjJiMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBF
eHRlbnNpb25NYXAgewotICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbjsKLSAgICBjb25zdCBjaGFy
KiBtaW1lVHlwZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFw
IFtdID0gewotICAgIHsgImJtcCIsICJpbWFnZS9ibXAiIH0sCi0gICAgeyAiY3NzIiwgInRleHQv
Y3NzIiB9LAotICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCi0gICAgeyAiaHRtIiwgInRleHQv
aHRtbCIgfSwKLSAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKLSAgICB7ICJpY28iLCAiaW1h
Z2UveC1pY29uIiB9LAotICAgIHsgImpwZWciLCAiaW1hZ2UvanBlZyIgfSwKLSAgICB7ICJqcGci
LCAiaW1hZ2UvanBlZyIgfSwKLSAgICB7ICJqcyIsICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQi
IH0sCi0gICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKLSAgICB7ICJwbmciLCAiaW1h
Z2UvcG5nIiB9LAotICAgIHsgInJzcyIsICJhcHBsaWNhdGlvbi9yc3MreG1sIiB9LAotICAgIHsg
InN2ZyIsICJpbWFnZS9zdmcreG1sIiB9LAotICAgIHsgInRleHQiLCAidGV4dC9wbGFpbiIgfSwK
LSAgICB7ICJ0eHQiLCAidGV4dC9wbGFpbiIgfSwKLSAgICB7ICJ4Ym0iLCAiaW1hZ2UveC14Yml0
bWFwIiB9LAotICAgIHsgInhtbCIsICJ0ZXh0L3htbCIgfSwKLSAgICB7ICJ4c2wiLCAidGV4dC94
c2wiIH0sCi0gICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAotICAgIHsg
IndtbCIsICJ0ZXh0L3ZuZC53YXAud21sIiB9LAotICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24v
dm5kLndhcC53bWxjIiB9LAotICAgIHsgMCwgMCB9Ci19OwotCi1TdHJpbmcgTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIFN0cmluZyBzID0gZXh0Lmxvd2VyKCk7Ci0g
ICAgY29uc3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9uTWFwOwotICAgIHdoaWxlIChlLT5l
eHRlbnNpb24pIHsKLSAgICAgICAgaWYgKHMgPT0gZS0+ZXh0ZW5zaW9uKQotICAgICAgICAgICAg
cmV0dXJuIGUtPm1pbWVUeXBlOwotICAgICAgICArK2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi1ib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzQXBwbGljYXRpb25QbHVnaW5N
SU1FVHlwZShjb25zdCBTdHJpbmcmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFjMWNjODNhMDIzNDk4YzFhYjJi
ODRkYzEwOWU5YTljNWY4NTBjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFy
R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIHplY2tlQHNlbGZpc2gu
b3JnCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdu
b21lLm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3JhIEx0ZC4KLSAqICBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWVTY3JvbGxi
YXJHdGsuaCIKLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzUmVmUHRyPE1haW5GcmFtZVNjcm9sbGJh
ckd0az4gTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1haW5GcmFtZVNjcm9sbGJhckd0ayhzY3JvbGxhYmxlQXJlYSwgb3Jp
ZW50YXRpb24pKTsKLX0KLQotLy8gQSBNYWluRnJhbWVTY3JvbGxiYXIgaXMganVzdCBhIG5vbi1w
YWludGluZyBzY3JvbGxiYXIuIE90aGVyd2lzZSBpdCBpcyBmdWxseQotLy8gZnVuY3Rpb25hbC4g
QSBub24tcGFpbnRpbmcgc2Nyb2xsYmFyIGFsbG93cyBhIG1haW4tZnJhbWUgU2Nyb2xsVmlldyB0
byB1c2UKLS8vIGEgY29udGFpbmluZyBHdGtTY3JvbGxlZFdpbmRvdyBhcyBpdHMgdXNlciBpbnRl
cmZhY2UuIFRoZSBDaHJvbWVDbGllbnQgaW4gdGhlCi0vLyBXZWJLaXQgbGF5ZXIganVzdCBsaXN0
ZW5zIGZvciBzY3JvbGxpbmcgYW5kIHNpemluZyBjaGFuZ2VzIGFuZCB1cGRhdGVzIGl0cwotLy8g
Y29udGFpbmVyICh0aGUgR3RrU2Nyb2xsZWRXaW5kb3cpIGFjY29yZGluZ2x5LiBUaGUgU2Nyb2xs
VmlldyBpcyByZXNwb25zaWJsZQotLy8gZm9yIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIGNy
ZWF0ZSBhIE1haW5GcmFtZVNjcm9sbGJhciBvciBuYXRpdmUgc2Nyb2xsYmFyLgotTWFpbkZyYW1l
U2Nyb2xsYmFyR3RrOjpNYWluRnJhbWVTY3JvbGxiYXJHdGsoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLSAgICA6IFNjcm9s
bGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpCi17Ci0g
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0YWtlIHVwIGFueSBzcGFjZS4KLSAgICByZXNpemUoMCwg
MCk7Ci19Ci0KLXZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gTWFpbiBmcmFtZSBz
Y3JvbGxiYXJzIGFyZSBub3QgcGFpbnRlZCBieSBXZWJDb3JlLgotICAgIHJldHVybjsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJH
dGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I4Y2I2MzhmZGFjYzliMGMyNWM2MDQ4
MTg1ZDc1MGE3MGY1NDBmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotCi0jaWZu
ZGVmIE1haW5GcmFtZVNjcm9sbGJhckd0a19oCi0jZGVmaW5lIE1haW5GcmFtZVNjcm9sbGJhckd0
a19oCi0KLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1haW5GcmFtZVNjcm9sbGJhckd0ayA6
IHB1YmxpYyBTY3JvbGxiYXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1haW5G
cmFtZVNjcm9sbGJhckd0az4gY3JlYXRlKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50
YXRpb24pOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrKFNjcm9sbGFi
bGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotfTsKLQotfQotCi0jZW5kaWYgLy8gU2Ny
b2xsYmFyR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E3YTNmOTc5OTUwYWZkOGE2OGRh
NGMwMTVmMzE4OTQ5NGMzMWI5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0KLSNpbmNsdWRl
ICJDbGlwYm9hcmRHdGsuaCIKLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR093blB0
ckd0ay5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5B
QkxFKFNWRykKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6
OmdlbmVyYWxQYXN0ZWJvYXJkKCkKLXsKLSAgICBzdGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2Fy
ZCA9IG5ldyBQYXN0ZWJvYXJkKCk7Ci0gICAgcmV0dXJuIHBhc3RlYm9hcmQ7Ci19Ci0KLVBhc3Rl
Ym9hcmQ6OlBhc3RlYm9hcmQoKQotewotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0
aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFt
ZSogZnJhbWUpCi17Ci0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhl
bHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBi
b2FyZCA9IGhlbHBlci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7Ci0KLSAgICBEYXRhT2Jq
ZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2Fy
ZCk7Ci0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIGRhdGFPYmplY3QtPnNldFRl
eHQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKSk7Ci0gICAgZGF0YU9iamVjdC0+c2V0
TWFya3VwKGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwotICAgIGhlbHBlci0+d3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhjbGlwYm9hcmQsIGNhblNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2Fy
ZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1
ZGVTbWFydFBhc3RlKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbiBzbWFydFJlcGxhY2VPcHRpb24pCi17
Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlz
cGxheShnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7
Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBi
b2FyZChjbGlwYm9hcmQpOwotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0KLSAgICBkYXRh
T2JqZWN0LT5zZXRUZXh0KHRleHQpOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkLAotICAgICAg
ICAoc21hcnRSZXBsYWNlT3B0aW9uID09IENhblNtYXJ0UmVwbGFjZSkgPyBQYXN0ZWJvYXJkSGVs
cGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNt
YXJ0UGFzdGUpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqIGZyYW1lKQotewotICAgIGlmICh1cmwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYXN0ZWJvYXJkSGVscGVyKiBoZWxwZXIg
PSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOwotICAgIEd0a0Ns
aXBib2FyZCogY2xpcGJvYXJkID0gaGVscGVyLT5nZXRDdXJyZW50Q2xpcGJvYXJkKGZyYW1lKTsK
LQotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlw
Ym9hcmQoY2xpcGJvYXJkKTsKLSAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgZGF0
YU9iamVjdC0+c2V0VVJMKHVybCwgbGFiZWwpOwotICAgIGhlbHBlci0+d3JpdGVDbGlwYm9hcmRD
b250ZW50cyhjbGlwYm9hcmQpOwotfQotCi1zdGF0aWMgS1VSTCBnZXRVUkxGb3JJbWFnZU5vZGUo
Tm9kZSogbm9kZSkKLXsKLSAgICAvLyBGSVhNRTogTGF0ZXIgdGhpcyBjb2RlIHNob3VsZCBiZSBz
aGFyZWQgd2l0aCBDaHJvbWl1bSBzb21laG93LiBDaGFuY2VzIGFyZSBhbGwgcGxhdGZvcm1zIHdh
bnQgaXQuCi0gICAgQXRvbWljU3RyaW5nIHVybFN0cmluZzsKLSAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmltZ1RhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlu
cHV0VGFnKSkKLSAgICAgICAgdXJsU3RyaW5nID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKTsKLSNpZiBFTkFCTEUoU1ZHKQotICAg
IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmltYWdlVGFnKSkKLSAgICAgICAg
dXJsU3RyaW5nID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoWExp
bmtOYW1lczo6aHJlZkF0dHIpOwotI2VuZGlmCi0gICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0VGFnKSkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUpOwotICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoZWxl
bWVudC0+aW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOwotICAgIH0KLSAgICByZXR1cm4gdXJs
U3RyaW5nLmlzRW1wdHkoKSA/IEtVUkwoKSA6IG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKLX0KLQotdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIHRpdGxlKQotewotICAgIEFTU0VSVChub2RlKTsKLQotICAgIGlmICghKG5vZGUtPnJl
bmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5k
ZXJlcigpKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVk
SW1hZ2UoKTsKLSAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3Vy
cmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+
aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgQVNTRVJUKGltYWdlKTsKLQotICAgIEd0
a0NsaXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2Rr
X2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotICAgIERh
dGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xp
cGJvYXJkKTsKLSAgICBkYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgS1VSTCB1cmwgPSBn
ZXRVUkxGb3JJbWFnZU5vZGUobm9kZSk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGRhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKLQotICAgICAgICBkYXRhT2JqZWN0
LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwgSW5j
bHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHZGtQ
aXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgIGRh
dGFPYmplY3QtPnNldEltYWdlKHBpeGJ1Zi5nZXQoKSk7Ci0KLSAgICBQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBi
b2FyZCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVDbGlwYm9hcmQoQ2xpcGJvYXJkKiBj
bGlwYm9hcmQpCi17Ci0gICAgR3RrQ2xpcGJvYXJkKiBndGtDbGlwYm9hcmQgPSBzdGF0aWNfY2Fz
dDxDbGlwYm9hcmRHdGsqPihjbGlwYm9hcmQpLT5jbGlwYm9hcmQoKTsKLSAgICBpZiAoZ3RrQ2xp
cGJvYXJkKQotICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKGd0a0NsaXBib2FyZCk7Ci19Ci0KLXZvaWQgUGFz
dGVib2FyZDo6Y2xlYXIoKQotewotICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoZ3RrX2NsaXBib2Fy
ZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElP
Tl9DTElQQk9BUkQpKTsKLX0KLQotYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKQot
ewotICAgIHJldHVybiBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5jbGlwYm9hcmRDb250ZW50U3VwcG9ydHNTbWFydFJlcGxhY2UoCi0gICAgICAgIGd0a19jbGlw
Ym9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxF
Q1RJT05fQ0xJUEJPQVJEKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFz
dGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCi17
Ci0gICAgUGFzdGVib2FyZEhlbHBlciogaGVscGVyID0gUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVs
dFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGhlbHBl
ci0+Z2V0Q3VycmVudENsaXBib2FyZChmcmFtZSk7Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIGhlbHBl
ci0+Z2V0Q2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKLQotICAgIGNob3NlUGxhaW5UZXh0
ID0gZmFsc2U7Ci0KLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpIHsKLSAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKGZyYW1lLT5kb2N1bWVudCgpLCBkYXRhT2JqZWN0LT5tYXJrdXAoKSwgIiIsIERpc2FsbG93
U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVkKTsKLSAgICAgICAgaWYgKGZyYWdtZW50
KQotICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWFsbG93UGxhaW5UZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChkYXRhT2Jq
ZWN0LT5oYXNUZXh0KCkpIHsKLSAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNvbnRleHQuZ2V0KCksIGRhdGFPYmplY3QtPnRleHQoKSk7Ci0gICAgICAgIGlmIChmcmFn
bWVudCkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZy
YW1lKQotewotICAgIFBhc3RlYm9hcmRIZWxwZXIqIGhlbHBlciA9IFBhc3RlYm9hcmRIZWxwZXI6
OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCk7Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQg
PSBoZWxwZXItPmdldEN1cnJlbnRDbGlwYm9hcmQoZnJhbWUpOwotICAgIERhdGFPYmplY3RHdGsq
IGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLQot
ICAgIGhlbHBlci0+Z2V0Q2xpcGJvYXJkQ29udGVudHMoY2xpcGJvYXJkKTsKLSAgICByZXR1cm4g
ZGF0YU9iamVjdC0+dGV4dCgpOwotfQotCi1ib29sIFBhc3RlYm9hcmQ6OmlzU2VsZWN0aW9uTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJv
YXJkSGVscGVyKCktPnVzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoKTsKLX0KLQotdm9pZCBQ
YXN0ZWJvYXJkOjpzZXRTZWxlY3Rpb25Nb2RlKGJvb2wgc2VsZWN0aW9uTW9kZSkKLXsKLSAgICBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5zZXRVc2VQcmltYXJ5
U2VsZWN0aW9uQ2xpcGJvYXJkKHNlbGVjdGlvbk1vZGUpOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDc2YTk3NTQzNzA3OGNiZWI2ODExMTk5ZjFkZWMyNTA5MThiYTgzMTgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29u
IDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgSWdhbGlhIFMuTC4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBh
c3RlYm9hcmRIZWxwZXIuaCIKLQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkRhdGFP
YmplY3RHdGsuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBH
ZGtBdG9tIHRleHRQbGFpbkF0b207Ci1zdGF0aWMgR2RrQXRvbSBtYXJrdXBBdG9tOwotc3RhdGlj
IEdka0F0b20gbmV0c2NhcGVVUkxBdG9tOwotc3RhdGljIEdka0F0b20gdXJpTGlzdEF0b207Ci1z
dGF0aWMgR2RrQXRvbSBzbWFydFBhc3RlQXRvbTsKLXN0YXRpYyBTdHJpbmcgZ01hcmt1cFByZWZp
eDsKLQotc3RhdGljIHZvaWQgcmVtb3ZlTWFya3VwUHJlZml4KFN0cmluZyYgbWFya3VwKQotewot
ICAgIC8vIFRoZSBtYXJrdXAgcHJlZml4IGlzIG5vdCBoYXJtZnVsLCBidXQgd2UgcmVtb3ZlIGl0
IGZyb20gdGhlIHN0cmluZyBhbnl3YXksIHNvIHRoYXQKLSAgICAvLyB3ZSBjYW4gaGF2ZSBjb25z
aXN0ZW50IHJlc3VsdHMgd2l0aCBvdGhlciBwb3J0cyBkdXJpbmcgdGhlIGxheW91dCB0ZXN0cy4K
LSAgICBpZiAobWFya3VwLnN0YXJ0c1dpdGgoZ01hcmt1cFByZWZpeCkpCi0gICAgICAgIG1hcmt1
cC5yZW1vdmUoMCwgZ01hcmt1cFByZWZpeC5sZW5ndGgoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlu
aXRHZGtBdG9tcygpCi17Ci0gICAgc3RhdGljIGdib29sZWFuIGluaXRpYWxpemVkID0gRkFMU0U7
Ci0KLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRpYWxp
emVkID0gVFJVRTsKLQotICAgIHRleHRQbGFpbkF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQv
cGxhaW47Y2hhcnNldD11dGYtOCIsIEZBTFNFKTsKLSAgICBtYXJrdXBBdG9tID0gZ2RrX2F0b21f
aW50ZXJuKCJ0ZXh0L2h0bWwiLCBGQUxTRSk7Ci0gICAgbmV0c2NhcGVVUkxBdG9tID0gZ2RrX2F0
b21faW50ZXJuKCJfTkVUU0NBUEVfVVJMIiwgRkFMU0UpOwotICAgIHVyaUxpc3RBdG9tID0gZ2Rr
X2F0b21faW50ZXJuKCJ0ZXh0L3VyaS1saXN0IiwgRkFMU0UpOwotICAgIHNtYXJ0UGFzdGVBdG9t
ID0gZ2RrX2F0b21faW50ZXJuKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUi
LCBGQUxTRSk7Ci0gICAgZ01hcmt1cFByZWZpeCA9ICI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVu
dC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiI7Ci19Ci0KLVBh
c3RlYm9hcmRIZWxwZXIqIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVy
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhc3RlYm9hcmRIZWxwZXIsIGRlZmF1bHRI
ZWxwZXIsICgpKTsKLSAgICByZXR1cm4gJmRlZmF1bHRIZWxwZXI7Ci19Ci0KLVBhc3RlYm9hcmRI
ZWxwZXI6OlBhc3RlYm9hcmRIZWxwZXIoKQotICAgIDogbV90YXJnZXRMaXN0KGd0a190YXJnZXRf
bGlzdF9uZXcoMCwgMCkpCi0gICAgLCBtX3VzZVByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoZmFs
c2UpCi17Ci0gICAgaW5pdEdka0F0b21zKCk7Ci0KLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3Rl
eHRfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5cGVUZXh0
KTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbWFya3VwQXRvbSwgMCwg
UGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU1hcmt1cCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0
X2FkZF91cmlfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5
cGVVUklMaXN0KTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbmV0c2Nh
cGVVUkxBdG9tLCAwLCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlTmV0c2NhcGVVUkwpOwot
ICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhtX3RhcmdldExpc3QsIFBhc3Rl
Ym9hcmRIZWxwZXI6OlRhcmdldFR5cGVJbWFnZSwgVFJVRSk7Ci19Ci0KLVBhc3RlYm9hcmRIZWxw
ZXI6On5QYXN0ZWJvYXJkSGVscGVyKCkKLXsKLSAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYobV90
YXJnZXRMaXN0KTsKLX0KLQotc3RhdGljIGlubGluZSBHZGtEaXNwbGF5KiBkaXNwbGF5RnJvbUZy
YW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFBhZ2UqIHBhZ2Ug
PSBmcmFtZS0+cGFnZSgpOwotICAgIEFTU0VSVChwYWdlKTsKLSAgICBDaHJvbWUqIGNocm9tZSA9
IHBhZ2UtPmNocm9tZSgpOwotICAgIEFTU0VSVChjaHJvbWUpOwotICAgIFBsYXRmb3JtUGFnZUNs
aWVudCBjbGllbnQgPSBjaHJvbWUtPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHJldHVybiBj
bGllbnQgPyBndGtfd2lkZ2V0X2dldF9kaXNwbGF5KGNsaWVudCkgOiBnZGtfZGlzcGxheV9nZXRf
ZGVmYXVsdCgpOwotfQotCi1HdGtDbGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxwZXI6OmdldEN1cnJl
bnRDbGlwYm9hcmQoRnJhbWUqIGZyYW1lKQotewotICAgIGlmIChtX3VzZVByaW1hcnlTZWxlY3Rp
b25DbGlwYm9hcmQpCi0gICAgICAgIHJldHVybiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJk
KGZyYW1lKTsKLSAgICByZXR1cm4gZ2V0Q2xpcGJvYXJkKGZyYW1lKTsKLX0KLQotR3RrQ2xpcGJv
YXJkKiBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9hcmQoRnJhbWUqIGZyYW1lKSBjb25zdAot
ewotICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShkaXNwbGF5RnJvbUZy
YW1lKGZyYW1lKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwotfQotCi1HdGtDbGlwYm9hcmQq
IFBhc3RlYm9hcmRIZWxwZXI6OmdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoRnJhbWUqIGZy
YW1lKSBjb25zdAotewotICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShk
aXNwbGF5RnJvbUZyYW1lKGZyYW1lKSwgR0RLX1NFTEVDVElPTl9QUklNQVJZKTsKLX0KLQotR3Rr
VGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdGFyZ2V0TGlzdDsKLX0KLQotc3RhdGljIFN0cmluZyBzZWxlY3Rpb25EYXRhVG9V
VEY4U3RyaW5nKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEpCi17Ci0gICAgLy8gZ19zdHJuZHVwIGd1
YXJkcyBhZ2FpbnN0IHNlbGVjdGlvbiBkYXRhIHRoYXQgaXMgbm90IG51bGwtdGVybWluYXRlZC4K
LSAgICBHT3duUHRyPGdjaGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19z
ZWxlY3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEpKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgobWFya3VwU3RyaW5nLmdldCgpKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpn
ZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKLXsKLSAgICBEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBi
b2FyZCk7Ci0gICAgQVNTRVJUKGRhdGFPYmplY3QpOwotCi0gICAgaWYgKGd0a19jbGlwYm9hcmRf
d2FpdF9pc190ZXh0X2F2YWlsYWJsZShjbGlwYm9hcmQpKSB7Ci0gICAgICAgIEdPd25QdHI8Z2No
YXI+IHRleHREYXRhKGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKTsKLSAg
ICAgICAgaWYgKHRleHREYXRhKQotICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VGV4dChTdHJp
bmc6OmZyb21VVEY4KHRleHREYXRhLmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKGd0a19jbGlw
Ym9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsK
LSAgICAgICAgaWYgKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRf
Zm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKLSAgICAgICAgICAgIFN0cmlu
ZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgICAgICBy
ZW1vdmVNYXJrdXBQcmVmaXgobWFya3VwKTsKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldE1h
cmt1cChtYXJrdXApOwotICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0YSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3Rhcmdl
dF9hdmFpbGFibGUoY2xpcGJvYXJkLCB1cmlMaXN0QXRvbSkpIHsKLSAgICAgICAgaWYgKEd0a1Nl
bGVjdGlvbkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBi
b2FyZCwgdXJpTGlzdEF0b20pKSB7Ci0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0
KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgZ3RrX3NlbGVj
dGlvbl9kYXRhX2ZyZWUoZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUGFzdGVi
b2FyZEhlbHBlcjo6ZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9u
RGF0YSwgZ3VpbnQgaW5mbywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKLXsKLSAgICBpZiAo
aW5mbyA9PSBUYXJnZXRUeXBlVGV4dCkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90
ZXh0KHNlbGVjdGlvbkRhdGEsIGRhdGFPYmplY3QtPnRleHQoKS51dGY4KCkuZGF0YSgpLCAtMSk7
Ci0KLSAgICBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVNYXJrdXApIHsKLSAgICAgICAgLy8g
U29tZSBMaW51eCBhcHBsaWNhdGlvbnMgcmVmdXNlIHRvIGFjY2VwdCBwYXN0ZWQgbWFya3VwIHVu
bGVzcyBpdCBpcwotICAgICAgICAvLyBwcmVmaXhlZCBieSBhIGNvbnRlbnQtdHlwZSBtZXRhIHRh
Zy4KLSAgICAgICAgQ1N0cmluZyBtYXJrdXAgPSBTdHJpbmcoZ01hcmt1cFByZWZpeCArIGRhdGFP
YmplY3QtPm1hcmt1cCgpKS51dGY4KCk7Ci0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQo
c2VsZWN0aW9uRGF0YSwgbWFya3VwQXRvbSwgOCwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZ3VjaGFyKj4obWFya3VwLmRhdGEoKSksIG1hcmt1cC5sZW5ndGgoKSArIDEpOwot
Ci0gICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVVUklMaXN0KSB7Ci0gICAgICAgIENT
dHJpbmcgdXJpTGlzdCA9IGRhdGFPYmplY3QtPnVyaUxpc3QoKS51dGY4KCk7Ci0gICAgICAgIGd0
a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwgdXJpTGlzdEF0b20sIDgsCi0gICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KHVyaUxpc3QuZGF0YSgpKSwg
dXJpTGlzdC5sZW5ndGgoKSArIDEpOwotCi0gICAgfSBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5
cGVOZXRzY2FwZVVSTCAmJiBkYXRhT2JqZWN0LT5oYXNVUkwoKSkgewotICAgICAgICBTdHJpbmcg
dXJsKGRhdGFPYmplY3QtPnVybCgpKTsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCh1cmwpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOwotCi0gICAgICAgIGlmIChkYXRhT2JqZWN0LT5oYXNU
ZXh0KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGFPYmplY3QtPnRleHQoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodXJsKTsKLQotICAgICAgICBH
T3duUHRyPGdjaGFyPiByZXN1bHREYXRhKGdfc3RyZHVwKHJlc3VsdC51dGY4KCkuZGF0YSgpKSk7
Ci0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uRGF0YSwgbmV0c2NhcGVV
UkxBdG9tLCA4LAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihy
ZXN1bHREYXRhLmdldCgpKSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpICsgMSk7Ci0KLSAgICB9
IGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZUltYWdlKQotICAgICAgICBndGtfc2VsZWN0aW9u
X2RhdGFfc2V0X3BpeGJ1ZihzZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKLQot
ICAgIGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0VHlwZVNtYXJ0UGFzdGUpCi0gICAgICAgIGd0a19z
ZWxlY3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rpb25EYXRhLCAiIiwgLTEpOwotfQotCi1HdGtU
YXJnZXRMaXN0KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRh
T2JqZWN0R3RrKiBkYXRhT2JqZWN0LCBTbWFydFBhc3RlSW5jbHVzaW9uIHNob3VsZElubHVkZVNt
YXJ0UGFzdGUpCi17Ci0gICAgR3RrVGFyZ2V0TGlzdCogbGlzdCA9IGd0a190YXJnZXRfbGlzdF9u
ZXcoMCwgMCk7Ci0KLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKQotICAgICAgICBndGtf
dGFyZ2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhsaXN0LCBUYXJnZXRUeXBlVGV4dCk7Ci0KLSAg
ICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9h
ZGQobGlzdCwgbWFya3VwQXRvbSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7Ci0KLSAgICBpZiAoZGF0
YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJp
X3RhcmdldHMobGlzdCwgVGFyZ2V0VHlwZVVSSUxpc3QpOwotICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfYWRkKGxpc3QsIG5ldHNjYXBlVVJMQXRvbSwgMCwgVGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsK
LSAgICB9Ci0KLSAgICBpZiAoZGF0YU9iamVjdC0+aGFzSW1hZ2UoKSkKLSAgICAgICAgZ3RrX3Rh
cmdldF9saXN0X2FkZF9pbWFnZV90YXJnZXRzKGxpc3QsIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7
Ci0KLSAgICBpZiAoc2hvdWxkSW5sdWRlU21hcnRQYXN0ZSA9PSBJbmNsdWRlU21hcnRQYXN0ZSkK
LSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LCBzbWFydFBhc3RlQXRvbSwgMCwgVGFy
Z2V0VHlwZVNtYXJ0UGFzdGUpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXZvaWQgUGFzdGVi
b2FyZEhlbHBlcjo6ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSog
ZGF0YSwgZ3VpbnQgaW5mbywgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKLXsKLSAgICBpZiAo
IWd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR2RrQXRvbSB0YXJnZXQgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3RhcmdldChkYXRhKTsK
LSAgICBpZiAodGFyZ2V0ID09IHRleHRQbGFpbkF0b20pCi0gICAgICAgIGRhdGFPYmplY3QtPnNl
dFRleHQoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgZWxzZSBpZiAodGFy
Z2V0ID09IG1hcmt1cEF0b20pIHsKLSAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxlY3Rpb25EYXRh
VG9VVEY4U3RyaW5nKGRhdGEpKTsKLSAgICAgICAgcmVtb3ZlTWFya3VwUHJlZml4KG1hcmt1cCk7
Ci0gICAgICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChtYXJrdXApOwotICAgIH0gZWxzZSBpZiAo
dGFyZ2V0ID09IHVyaUxpc3RBdG9tKSB7Ci0gICAgICAgIGRhdGFPYmplY3QtPnNldFVSSUxpc3Qo
c2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQg
PT0gbmV0c2NhcGVVUkxBdG9tKSB7Ci0gICAgICAgIFN0cmluZyB1cmxXaXRoTGFiZWwoc2VsZWN0
aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBpZWNl
czsKLSAgICAgICAgdXJsV2l0aExhYmVsLnNwbGl0KCJcbiIsIHBpZWNlcyk7Ci0KLSAgICAgICAg
Ly8gR2l2ZSBwcmVmZXJlbmNlIHRvIHRleHQvdXJpLWxpc3QgaGVyZSwgYXMgaXQgY2FuIGhvbGQg
bW9yZQotICAgICAgICAvLyB0aGFuIG9uZSBVUkkgYnV0IHN0aWxsIHRha2UgIHRoZSBsYWJlbCBp
ZiB0aGVyZSBpcyBvbmUuCi0gICAgICAgIGlmICghZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKQot
ICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdChwaWVjZXNbMF0pOwotICAgICAgICBp
ZiAocGllY2VzLnNpemUoKSA+IDEpCi0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHBp
ZWNlc1sxXSk7Ci0gICAgfQotfQotCi1WZWN0b3I8R2RrQXRvbT4gUGFzdGVib2FyZEhlbHBlcjo6
ZHJvcEF0b21zRm9yQ29udGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgLy8gQWx3YXlzIHNlYXJjaCBmb3IgdGhlc2UgY29tbW9uIGF0b21zLgot
ICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXM7Ci0gICAgZHJvcEF0b21zLmFwcGVuZCh0ZXh0
UGxhaW5BdG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKG1hcmt1cEF0b20pOwotICAgIGRyb3BB
dG9tcy5hcHBlbmQodXJpTGlzdEF0b20pOwotICAgIGRyb3BBdG9tcy5hcHBlbmQobmV0c2NhcGVV
UkxBdG9tKTsKLQotICAgIC8vIEZvciBpbWFnZXMsIHRyeSB0byBmaW5kIHRoZSBtb3N0IGFwcGxp
Y2FibGUgaW1hZ2UgdHlwZS4KLSAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QgPSBhZG9w
dEdSZWYoZ3RrX3RhcmdldF9saXN0X25ldygwLCAwKSk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2Fk
ZF9pbWFnZV90YXJnZXRzKGxpc3QuZ2V0KCksIFRhcmdldFR5cGVJbWFnZSwgVFJVRSk7Ci0gICAg
R2RrQXRvbSBhdG9tID0gZ3RrX2RyYWdfZGVzdF9maW5kX3RhcmdldCh3aWRnZXQsIGNvbnRleHQs
IGxpc3QuZ2V0KCkpOwotICAgIGlmIChhdG9tICE9IEdES19OT05FKQotICAgICAgICBkcm9wQXRv
bXMuYXBwZW5kKGF0b20pOwotCi0gICAgcmV0dXJuIGRyb3BBdG9tczsKLX0KLQotc3RhdGljIERh
dGFPYmplY3RHdGsqIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0gMDsKLQotc3RhdGljIHZv
aWQgZ2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwg
R3RrU2VsZWN0aW9uRGF0YSAqc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9y
Q2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0gICAgQVNTRVJUKGRhdGFPYmplY3QpOwotICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRh
KHNlbGVjdGlvbkRhdGEsIGluZm8sIGRhdGFPYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVh
ckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RH
dGs6OmZvckNsaXBib2FyZChjbGlwYm9hcmQpOwotICAgIEFTU0VSVChkYXRhT2JqZWN0KTsKLQot
ICAgIC8vIE9ubHkgY2xlYXIgdGhlIERhdGFPYmplY3QgZm9yIHRoaXMgY2xpcGJvYXJkIGlmIHdl
IGFyZSBub3QgY3VycmVudGx5IHNldHRpbmcgaXQuCi0gICAgaWYgKGRhdGFPYmplY3QgIT0gc2V0
dGluZ0NsaXBib2FyZERhdGFPYmplY3QpCi0gICAgICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7
Ci0KLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdDbG9zdXJlKiBjYWxs
YmFjayA9IHN0YXRpY19jYXN0PEdDbG9zdXJlKj4oZGF0YSk7Ci0gICAgR1ZhbHVlIGZpcnN0QXJn
dW1lbnQgPSB7MCwge3swfX19OwotICAgIGdfdmFsdWVfaW5pdCgmZmlyc3RBcmd1bWVudCwgR19U
WVBFX1BPSU5URVIpOwotICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIoJmZpcnN0QXJndW1lbnQsIGNs
aXBib2FyZCk7Ci0gICAgZ19jbG9zdXJlX2ludm9rZShjYWxsYmFjaywgMCwgMSwgJmZpcnN0QXJn
dW1lbnQsIDApOwotICAgIGdfY2xvc3VyZV91bnJlZihjYWxsYmFjayk7Ci19Ci0KLXZvaWQgUGFz
dGVib2FyZEhlbHBlcjo6d3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBi
b2FyZCwgU21hcnRQYXN0ZUluY2x1c2lvbiBpbmNsdWRlU21hcnRQYXN0ZSwgR0Nsb3N1cmUqIGNh
bGxiYWNrKQotewotICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3Rr
Ojpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBHdGtUYXJnZXRMaXN0KiBsaXN0ID0gdGFy
Z2V0TGlzdEZvckRhdGFPYmplY3QoZGF0YU9iamVjdCwgaW5jbHVkZVNtYXJ0UGFzdGUpOwotCi0g
ICAgaW50IG51bWJlck9mVGFyZ2V0czsKLSAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBndGtf
dGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QobGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7Ci0KLSAg
ICBpZiAobnVtYmVyT2ZUYXJnZXRzID4gMCAmJiB0YWJsZSkgewotICAgICAgICBzZXR0aW5nQ2xp
cGJvYXJkRGF0YU9iamVjdCA9IGRhdGFPYmplY3Q7Ci0KLSAgICAgICAgZ3RrX2NsaXBib2FyZF9z
ZXRfd2l0aF9kYXRhKGNsaXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywKLSAgICAgICAg
ICAgIGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHND
YWxsYmFjaywgY2FsbGJhY2spOwotICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5fc3RvcmUo
Y2xpcGJvYXJkLCAwLCAwKTsKLQotICAgICAgICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9
IDA7Ci0KLSAgICB9IGVsc2UKLSAgICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihjbGlwYm9hcmQp
OwotCi0gICAgaWYgKHRhYmxlKQotICAgICAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFibGUs
IG51bWJlck9mVGFyZ2V0cyk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKGxpc3QpOwotfQot
Ci1ib29sIFBhc3RlYm9hcmRIZWxwZXI6OmNsaXBib2FyZENvbnRlbnRTdXBwb3J0c1NtYXJ0UmVw
bGFjZShHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKLXsKLSAgICByZXR1cm4gZ3RrX2NsaXBib2Fy
ZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBzbWFydFBhc3RlQXRvbSk7Ci19
Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzhmODBkZDgxZmNlNmY3NGY5ZWQy
NTY3NDFjNDZiZjg3ZDg5NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
THVjYSBCcnVubyA8bGV0aGFsbWFuODhAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGlu
IFJvYmluc29uIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUGFzdGVib2Fy
ZEhlbHBlcl9oCi0jZGVmaW5lIFBhc3RlYm9hcmRIZWxwZXJfaAotCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEYXRhT2JqZWN0R3RrOwotCi1jbGFz
cyBQYXN0ZWJvYXJkSGVscGVyIHsKLXB1YmxpYzoKLSAgICBQYXN0ZWJvYXJkSGVscGVyKCk7Ci0g
ICAgdmlydHVhbCB+UGFzdGVib2FyZEhlbHBlcigpOwotICAgIHN0YXRpYyBQYXN0ZWJvYXJkSGVs
cGVyKiBkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpOwotCi0gICAgdm9pZCBzZXRVc2VQcmltYXJ5
U2VsZWN0aW9uQ2xpcGJvYXJkKGJvb2wgdXNlUHJpbWFyeSkgeyBtX3VzZVByaW1hcnlTZWxlY3Rp
b25DbGlwYm9hcmQgPSB1c2VQcmltYXJ5OyB9Ci0gICAgYm9vbCB1c2VQcmltYXJ5U2VsZWN0aW9u
Q2xpcGJvYXJkKCkgeyByZXR1cm4gbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkOyB9Ci0K
LSAgICBlbnVtIFNtYXJ0UGFzdGVJbmNsdXNpb24geyBJbmNsdWRlU21hcnRQYXN0ZSwgRG9Ob3RJ
bmNsdWRlU21hcnRQYXN0ZSB9OwotCi0gICAgR3RrQ2xpcGJvYXJkKiBnZXRDdXJyZW50Q2xpcGJv
YXJkKEZyYW1lKik7Ci0gICAgR3RrQ2xpcGJvYXJkKiBnZXRDbGlwYm9hcmQoRnJhbWUqKSBjb25z
dDsKLSAgICBHdGtDbGlwYm9hcmQqIGdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoRnJhbWUq
KSBjb25zdDsKLSAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0KCkgY29uc3Q7Ci0gICAgR3Rr
VGFyZ2V0TGlzdCogdGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayosIFNtYXJ0
UGFzdGVJbmNsdXNpb24gPSBEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKLSAgICB2b2lkIGZpbGxT
ZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCBndWludCwgRGF0YU9iamVjdEd0ayopOwot
ICAgIHZvaWQgZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1
aW50LCBEYXRhT2JqZWN0R3RrKik7Ci0gICAgVmVjdG9yPEdka0F0b20+IGRyb3BBdG9tc0ZvckNv
bnRleHQoR3RrV2lkZ2V0KiwgR2RrRHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIHdyaXRlQ2xpcGJv
YXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiwgU21hcnRQYXN0ZUluY2x1c2lvbiA9IERvTm90SW5j
bHVkZVNtYXJ0UGFzdGUsIEdDbG9zdXJlKiA9IDApOwotICAgIHZvaWQgZ2V0Q2xpcGJvYXJkQ29u
dGVudHMoR3RrQ2xpcGJvYXJkKik7Ci0KLSAgICBlbnVtIFBhc3RlYm9hcmRUYXJnZXRUeXBlIHsg
VGFyZ2V0VHlwZU1hcmt1cCwgVGFyZ2V0VHlwZVRleHQsIFRhcmdldFR5cGVJbWFnZSwgVGFyZ2V0
VHlwZVVSSUxpc3QsIFRhcmdldFR5cGVOZXRzY2FwZVVSTCwgVGFyZ2V0VHlwZVNtYXJ0UGFzdGUs
IFRhcmdldFR5cGVVbmtub3duIH07Ci0gICAgYm9vbCBjbGlwYm9hcmRDb250ZW50U3VwcG9ydHNT
bWFydFJlcGxhY2UoR3RrQ2xpcGJvYXJkKik7Ci0KLXByaXZhdGU6Ci0gICAgR3RrVGFyZ2V0TGlz
dCogbV90YXJnZXRMaXN0OwotICAgIGJvb2wgbV91c2VQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJk
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gUGFzdGVib2FyZEhlbHBlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDZkNmUyNWM5OTAwNWEyNDIwMGNhOWQ0
ZjA1MDI1NWZlMjJmNGM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUtleWJvYXJkRXZlbnQuaCIKLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1
ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5j
bHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBpcyBpbmNvbXBsZXRlLiAgV2Ug
c2hvdWxkIGNoYW5nZSB0aGlzIHRvIG1pcnJvcgotLy8gbW9yZSBsaWtlIHdoYXQgRmlyZWZveCBk
b2VzLCBhbmQgZ2VuZXJhdGUgdGhlc2Ugc3dpdGNoIHN0YXRlbWVudHMKLS8vIGF0IGJ1aWxkIHRp
bWUuCi1TdHJpbmcgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5
Q29kZSh1bnNpZ25lZCBrZXlDb2RlKQotewotICAgIHN3aXRjaCAoa2V5Q29kZSkgewotICAgICAg
ICBjYXNlIEdES19NZW51OgotICAgICAgICBjYXNlIEdES19BbHRfTDoKLSAgICAgICAgY2FzZSBH
REtfQWx0X1I6Ci0gICAgICAgICAgICByZXR1cm4gIkFsdCI7Ci0gICAgICAgIGNhc2UgR0RLX0Ns
ZWFyOgotICAgICAgICAgICAgcmV0dXJuICJDbGVhciI7Ci0gICAgICAgIGNhc2UgR0RLX0Rvd246
Ci0gICAgICAgICAgICByZXR1cm4gIkRvd24iOwotICAgICAgICAgICAgLy8gIkVuZCIKLSAgICAg
ICAgY2FzZSBHREtfRW5kOgotICAgICAgICAgICAgcmV0dXJuICJFbmQiOwotICAgICAgICAgICAg
Ly8gIkVudGVyIgotICAgICAgICBjYXNlIEdES19JU09fRW50ZXI6Ci0gICAgICAgIGNhc2UgR0RL
X0tQX0VudGVyOgotICAgICAgICBjYXNlIEdES19SZXR1cm46Ci0gICAgICAgICAgICByZXR1cm4g
IkVudGVyIjsKLSAgICAgICAgY2FzZSBHREtfRXhlY3V0ZToKLSAgICAgICAgICAgIHJldHVybiAi
RXhlY3V0ZSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxOgotICAgICAgICAgICAgcmV0dXJuICJGMSI7
Ci0gICAgICAgIGNhc2UgR0RLX0YyOgotICAgICAgICAgICAgcmV0dXJuICJGMiI7Ci0gICAgICAg
IGNhc2UgR0RLX0YzOgotICAgICAgICAgICAgcmV0dXJuICJGMyI7Ci0gICAgICAgIGNhc2UgR0RL
X0Y0OgotICAgICAgICAgICAgcmV0dXJuICJGNCI7Ci0gICAgICAgIGNhc2UgR0RLX0Y1OgotICAg
ICAgICAgICAgcmV0dXJuICJGNSI7Ci0gICAgICAgIGNhc2UgR0RLX0Y2OgotICAgICAgICAgICAg
cmV0dXJuICJGNiI7Ci0gICAgICAgIGNhc2UgR0RLX0Y3OgotICAgICAgICAgICAgcmV0dXJuICJG
NyI7Ci0gICAgICAgIGNhc2UgR0RLX0Y4OgotICAgICAgICAgICAgcmV0dXJuICJGOCI7Ci0gICAg
ICAgIGNhc2UgR0RLX0Y5OgotICAgICAgICAgICAgcmV0dXJuICJGOSI7Ci0gICAgICAgIGNhc2Ug
R0RLX0YxMDoKLSAgICAgICAgICAgIHJldHVybiAiRjEwIjsKLSAgICAgICAgY2FzZSBHREtfRjEx
OgotICAgICAgICAgICAgcmV0dXJuICJGMTEiOwotICAgICAgICBjYXNlIEdES19GMTI6Ci0gICAg
ICAgICAgICByZXR1cm4gIkYxMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMzoKLSAgICAgICAgICAg
IHJldHVybiAiRjEzIjsKLSAgICAgICAgY2FzZSBHREtfRjE0OgotICAgICAgICAgICAgcmV0dXJu
ICJGMTQiOwotICAgICAgICBjYXNlIEdES19GMTU6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNSI7
Ci0gICAgICAgIGNhc2UgR0RLX0YxNjoKLSAgICAgICAgICAgIHJldHVybiAiRjE2IjsKLSAgICAg
ICAgY2FzZSBHREtfRjE3OgotICAgICAgICAgICAgcmV0dXJuICJGMTciOwotICAgICAgICBjYXNl
IEdES19GMTg6Ci0gICAgICAgICAgICByZXR1cm4gIkYxOCI7Ci0gICAgICAgIGNhc2UgR0RLX0Yx
OToKLSAgICAgICAgICAgIHJldHVybiAiRjE5IjsKLSAgICAgICAgY2FzZSBHREtfRjIwOgotICAg
ICAgICAgICAgcmV0dXJuICJGMjAiOwotICAgICAgICBjYXNlIEdES19GMjE6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYyMSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMjoKLSAgICAgICAgICAgIHJldHVy
biAiRjIyIjsKLSAgICAgICAgY2FzZSBHREtfRjIzOgotICAgICAgICAgICAgcmV0dXJuICJGMjMi
OwotICAgICAgICBjYXNlIEdES19GMjQ6Ci0gICAgICAgICAgICByZXR1cm4gIkYyNCI7Ci0gICAg
ICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAgICAgICByZXR1cm4gIkhlbHAiOwotICAgICAgICBj
YXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJuICJIb21lIjsKLSAgICAgICAgY2FzZSBH
REtfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuICJJbnNlcnQiOwotICAgICAgICBjYXNlIEdE
S19MZWZ0OgotICAgICAgICAgICAgcmV0dXJuICJMZWZ0IjsKLSAgICAgICAgY2FzZSBHREtfUGFn
ZV9Eb3duOgotICAgICAgICAgICAgcmV0dXJuICJQYWdlRG93biI7Ci0gICAgICAgIGNhc2UgR0RL
X1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4gIlBhZ2VVcCI7Ci0gICAgICAgIGNhc2UgR0RL
X1BhdXNlOgotICAgICAgICAgICAgcmV0dXJuICJQYXVzZSI7Ci0gICAgICAgIGNhc2UgR0RLXzMy
NzBfUHJpbnRTY3JlZW46Ci0gICAgICAgIGNhc2UgR0RLX1ByaW50OgotICAgICAgICAgICAgcmV0
dXJuICJQcmludFNjcmVlbiI7Ci0gICAgICAgIGNhc2UgR0RLX1JpZ2h0OgotICAgICAgICAgICAg
cmV0dXJuICJSaWdodCI7Ci0gICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKLSAgICAgICAgICAgIHJl
dHVybiAiU2VsZWN0IjsKLSAgICAgICAgY2FzZSBHREtfVXA6Ci0gICAgICAgICAgICByZXR1cm4g
IlVwIjsKLSAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAw
N0YuCi0gICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAgICAgIHJldHVybiAiVSswMDdG
IjsKLSAgICAgICAgY2FzZSBHREtfQmFja1NwYWNlOgotICAgICAgICAgICAgcmV0dXJuICJVKzAw
MDgiOwotICAgICAgICBjYXNlIEdES19JU09fTGVmdF9UYWI6Ci0gICAgICAgIGNhc2UgR0RLXzMy
NzBfQmFja1RhYjoKLSAgICAgICAgY2FzZSBHREtfVGFiOgotICAgICAgICAgICAgcmV0dXJuICJV
KzAwMDkiOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCJVKyUwNFgiLCBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZ2RrX2tleXZhbF90b191cHBlcihr
ZXlDb2RlKSkpOwotICAgIH0KLX0KLQotaW50IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93
c0tleUNvZGVGb3JHZGtLZXlDb2RlKHVuc2lnbmVkIGtleWNvZGUpCi17Ci0gICAgc3dpdGNoIChr
ZXljb2RlKSB7Ci0gICAgICAgIGNhc2UgR0RLX0tQXzA6Ci0gICAgICAgICAgICByZXR1cm4gVktf
TlVNUEFEMDsvLyAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQ
XzE6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMTsvLyAoNjEpIE51bWVyaWMga2V5cGFk
IDEga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzI6Ci0gICAgICAgICAgICByZXR1cm4gIFZLX05V
TVBBRDI7IC8vICg2MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKLSAgICAgICAgY2FzZSBHREtfS1Bf
MzoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQzOyAvLyAoNjMpIE51bWVyaWMga2V5cGFk
IDMga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVN
UEFENDsgLy8gKDY0KSBOdW1lcmljIGtleXBhZCA0IGtleQotICAgICAgICBjYXNlIEdES19LUF81
OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8vKDY1KSBOdW1lcmljIGtleXBhZCA1
IGtleQotICAgICAgICBjYXNlIEdES19LUF82OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDY7IC8vICg2NikgTnVtZXJpYyBrZXlwYWQgNiBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNzoK
LSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ3OyAvLyAoNjcpIE51bWVyaWMga2V5cGFkIDcg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzg6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFE
ODsgLy8gKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQotICAgICAgICBjYXNlIEdES19LUF85Ogot
ICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDk7IC8vICg2OSkgTnVtZXJpYyBrZXlwYWQgOSBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS1BfTXVsdGlwbHk6Ci0gICAgICAgICAgICByZXR1cm4gVktf
TVVMVElQTFk7IC8vICg2QSkgTXVsdGlwbHkga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0FkZDoK
LSAgICAgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2QikgQWRkIGtleQotICAgICAgICBjYXNl
IEdES19LUF9TdWJ0cmFjdDoKLSAgICAgICAgICAgIHJldHVybiBWS19TVUJUUkFDVDsgLy8gKDZE
KSBTdWJ0cmFjdCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfRGVjaW1hbDoKLSAgICAgICAgICAg
IHJldHVybiBWS19ERUNJTUFMOyAvLyAoNkUpIERlY2ltYWwga2V5Ci0gICAgICAgIGNhc2UgR0RL
X0tQX0RpdmlkZToKLSAgICAgICAgICAgIHJldHVybiBWS19ESVZJREU7IC8vICg2RikgRGl2aWRl
IGtleQotCi0gICAgICAgIGNhc2UgR0RLX0tQX1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfUGFnZV9E
b3duOgotICAgICAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQot
ICAgICAgICBjYXNlIEdES19LUF9FbmQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAo
MjMpIEVORCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfSG9tZToKLSAgICAgICAgICAgIHJldHVy
biBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0xlZnQ6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFSUk9XIGtleQotICAgICAg
ICBjYXNlIEdES19LUF9VcDoKLSAgICAgICAgICAgIHJldHVybiBWS19VUDsgLy8gKDI2KSBVUCBB
UlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfUmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0Rv
d246Ci0gICAgICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQot
Ci0gICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKLSAgICAgICAgICAgIHJldHVybiBWS19CQUNL
OyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKLSAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgot
ICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6Ci0gICAgICAgIGNhc2UgR0RLX1RhYjoKLSAg
ICAgICAgICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFCIGtleQotICAgICAgICBjYXNlIEdE
S19DbGVhcjoKLSAgICAgICAgICAgIHJldHVybiBWS19DTEVBUjsgLy8gKDBDKSBDTEVBUiBrZXkK
LSAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgotICAgICAgICBjYXNlIEdES19LUF9FbnRlcjoK
LSAgICAgICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsg
Ly8oMEQpIFJldHVybiBrZXkKLQotICAgICAgICAgICAgLy8gVktfU0hJRlQgKDEwKSBTSElGVCBr
ZXkKLSAgICAgICAgICAgIC8vIFZLX0NPTlRST0wgKDExKSBDVFJMIGtleQotCi0gICAgICAgIGNh
c2UgR0RLX01lbnU6Ci0gICAgICAgICAgICByZXR1cm4gVktfQVBQUzsgIC8vICg1RCkgQXBwbGlj
YXRpb25zIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKLQotICAgICAgICAgICAgLy8gVktfTUVOVSAo
MTIpIEFMVCBrZXkKLQotICAgICAgICBjYXNlIEdES19QYXVzZToKLSAgICAgICAgICAgIHJldHVy
biBWS19QQVVTRTsgLy8gKDEzKSBQQVVTRSBrZXkKLSAgICAgICAgY2FzZSBHREtfQ2Fwc19Mb2Nr
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0NBUElUQUw7IC8vICgxNCkgQ0FQUyBMT0NLIGtleQot
ICAgICAgICBjYXNlIEdES19LYW5hX0xvY2s6Ci0gICAgICAgIGNhc2UgR0RLX0thbmFfU2hpZnQ6
Ci0gICAgICAgICAgICByZXR1cm4gVktfS0FOQTsgLy8gKDE1KSBJbnB1dCBNZXRob2QgRWRpdG9y
IChJTUUpIEthbmEgbW9kZQotICAgICAgICBjYXNlIEdES19IYW5ndWw6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfSEFOR1VMOyAvLyBWS19IQU5HVUwgKDE1KSBJTUUgSGFuZ3VsIG1vZGUKLSAgICAg
ICAgICAgIC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKLSAgICAgICAgICAgIC8vIFZL
X0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKLSAgICAgICAgY2FzZSBHREtfSGFuZ3VsX0hhbmph
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkpBOyAvLyAoMTkpIElNRSBIYW5qYSBtb2RlCi0g
ICAgICAgIGNhc2UgR0RLX0thbmppOgotICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkpJOyAvLyAo
MTkpIElNRSBLYW5qaSBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0VzY2FwZToKLSAgICAgICAgICAg
IHJldHVybiBWS19FU0NBUEU7IC8vICgxQikgRVNDIGtleQotICAgICAgICAgICAgLy8gVktfQ09O
VkVSVCAoMUMpIElNRSBjb252ZXJ0Ci0gICAgICAgICAgICAvLyBWS19OT05DT05WRVJUICgxRCkg
SU1FIG5vbmNvbnZlcnQKLSAgICAgICAgICAgIC8vIFZLX0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQK
LSAgICAgICAgICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVz
dAotICAgICAgICBjYXNlIEdES19zcGFjZToKLSAgICAgICAgICAgIHJldHVybiBWS19TUEFDRTsg
Ly8gKDIwKSBTUEFDRUJBUgotICAgICAgICBjYXNlIEdES19QYWdlX1VwOgotICAgICAgICAgICAg
cmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5Ci0gICAgICAgIGNhc2UgR0RLX1Bh
Z2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBr
ZXkKLSAgICAgICAgY2FzZSBHREtfRW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8g
KDIzKSBFTkQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0hvbWU6Ci0gICAgICAgICAgICByZXR1cm4g
VktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQotICAgICAgICBjYXNlIEdES19MZWZ0OgotICAgICAg
ICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5
Ci0gICAgICAgIGNhc2UgR0RLX1JpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAv
LyAoMjcpIFJJR0hUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdES19Eb3duOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKLSAgICAgICAgY2FzZSBH
REtfU2VsZWN0OgotICAgICAgICAgICAgcmV0dXJuIFZLX1NFTEVDVDsgLy8gKDI5KSBTRUxFQ1Qg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX1ByaW50OgotICAgICAgICAgICAgcmV0dXJuIFZLX1NOQVBT
SE9UOyAvLyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKLSAgICAgICAgY2FzZSBHREtfRXhlY3V0ZToK
LSAgICAgICAgICAgIHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhFQ1VURSBrZXkKLSAgICAg
ICAgY2FzZSBHREtfSW5zZXJ0OgotICAgICAgICBjYXNlIEdES19LUF9JbnNlcnQ6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKLSAgICAgICAgY2FzZSBHREtf
RGVsZXRlOgotICAgICAgICBjYXNlIEdES19LUF9EZWxldGU6Ci0gICAgICAgICAgICByZXR1cm4g
VktfREVMRVRFOyAvLyAoMkUpIERFTCBrZXkKLSAgICAgICAgY2FzZSBHREtfSGVscDoKLSAgICAg
ICAgICAgIHJldHVybiBWS19IRUxQOyAvLyAoMkYpIEhFTFAga2V5Ci0gICAgICAgIGNhc2UgR0RL
XzA6Ci0gICAgICAgIGNhc2UgR0RLX3BhcmVucmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4gVktf
MDsgICAgLy8gICgzMCkgMCkga2V5Ci0gICAgICAgIGNhc2UgR0RLXzE6Ci0gICAgICAgIGNhc2Ug
R0RLX2V4Y2xhbToKLSAgICAgICAgICAgIHJldHVybiBWS18xOyAvLyAgKDMxKSAxICEga2V5Ci0g
ICAgICAgIGNhc2UgR0RLXzI6Ci0gICAgICAgIGNhc2UgR0RLX2F0OgotICAgICAgICAgICAgcmV0
dXJuIFZLXzI7IC8vICAoMzIpIDIgJiBrZXkKLSAgICAgICAgY2FzZSBHREtfMzoKLSAgICAgICAg
Y2FzZSBHREtfbnVtYmVyc2lnbjoKLSAgICAgICAgICAgIHJldHVybiBWS18zOyAvL2Nhc2UgJzMn
OiBjYXNlICcjJzsKLSAgICAgICAgY2FzZSBHREtfNDoKLSAgICAgICAgY2FzZSBHREtfZG9sbGFy
OiAvLyAgKDM0KSA0IGtleSAnJCc7Ci0gICAgICAgICAgICByZXR1cm4gVktfNDsKLSAgICAgICAg
Y2FzZSBHREtfNToKLSAgICAgICAgY2FzZSBHREtfcGVyY2VudDoKLSAgICAgICAgICAgIHJldHVy
biBWS181OyAvLyAgKDM1KSA1IGtleSAgJyUnCi0gICAgICAgIGNhc2UgR0RLXzY6Ci0gICAgICAg
IGNhc2UgR0RLX2FzY2lpY2lyY3VtOgotICAgICAgICAgICAgcmV0dXJuIFZLXzY7IC8vICAoMzYp
IDYga2V5ICAnXicKLSAgICAgICAgY2FzZSBHREtfNzoKLSAgICAgICAgY2FzZSBHREtfYW1wZXJz
YW5kOgotICAgICAgICAgICAgcmV0dXJuIFZLXzc7IC8vICAoMzcpIDcga2V5ICBjYXNlICcmJwot
ICAgICAgICBjYXNlIEdES184OgotICAgICAgICBjYXNlIEdES19hc3RlcmlzazoKLSAgICAgICAg
ICAgIHJldHVybiBWS184OyAvLyAgKDM4KSA4IGtleSAgJyonCi0gICAgICAgIGNhc2UgR0RLXzk6
Ci0gICAgICAgIGNhc2UgR0RLX3BhcmVubGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS185OyAv
LyAgKDM5KSA5IGtleSAnKCcKLSAgICAgICAgY2FzZSBHREtfYToKLSAgICAgICAgY2FzZSBHREtf
QToKLSAgICAgICAgICAgIHJldHVybiBWS19BOyAvLyAgKDQxKSBBIGtleSBjYXNlICdhJzogY2Fz
ZSAnQSc6IHJldHVybiAweDQxOwotICAgICAgICBjYXNlIEdES19iOgotICAgICAgICBjYXNlIEdE
S19COgotICAgICAgICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2InOiBj
YXNlICdCJzogcmV0dXJuIDB4NDI7Ci0gICAgICAgIGNhc2UgR0RLX2M6Ci0gICAgICAgIGNhc2Ug
R0RLX0M6Ci0gICAgICAgICAgICByZXR1cm4gVktfQzsgLy8gICg0MykgQyBrZXkgY2FzZSAnYyc6
IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKLSAgICAgICAgY2FzZSBHREtfZDoKLSAgICAgICAgY2Fz
ZSBHREtfRDoKLSAgICAgICAgICAgIHJldHVybiBWS19EOyAvLyAgKDQ0KSBEIGtleSBjYXNlICdk
JzogY2FzZSAnRCc6IHJldHVybiAweDQ0OwotICAgICAgICBjYXNlIEdES19lOgotICAgICAgICBj
YXNlIEdES19FOgotICAgICAgICAgICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNhc2Ug
J2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7Ci0gICAgICAgIGNhc2UgR0RLX2Y6Ci0gICAgICAg
IGNhc2UgR0RLX0Y6Ci0gICAgICAgICAgICByZXR1cm4gVktfRjsgLy8gICg0NikgRiBrZXkgY2Fz
ZSAnZic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKLSAgICAgICAgY2FzZSBHREtfZzoKLSAgICAg
ICAgY2FzZSBHREtfRzoKLSAgICAgICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3KSBHIGtleSBj
YXNlICdnJzogY2FzZSAnRyc6IHJldHVybiAweDQ3OwotICAgICAgICBjYXNlIEdES19oOgotICAg
ICAgICBjYXNlIEdES19IOgotICAgICAgICAgICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5
IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7Ci0gICAgICAgIGNhc2UgR0RLX2k6Ci0g
ICAgICAgIGNhc2UgR0RLX0k6Ci0gICAgICAgICAgICByZXR1cm4gVktfSTsgLy8gICg0OSkgSSBr
ZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0OTsKLSAgICAgICAgY2FzZSBHREtfajoK
LSAgICAgICAgY2FzZSBHREtfSjoKLSAgICAgICAgICAgIHJldHVybiBWS19KOyAvLyAgKDRBKSBK
IGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAweDRBOwotICAgICAgICBjYXNlIEdES19r
OgotICAgICAgICBjYXNlIEdES19LOgotICAgICAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAoNEIp
IEsga2V5IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7Ci0gICAgICAgIGNhc2UgR0RL
X2w6Ci0gICAgICAgIGNhc2UgR0RLX0w6Ci0gICAgICAgICAgICByZXR1cm4gVktfTDsgLy8gICg0
QykgTCBrZXkgY2FzZSAnbCc6IGNhc2UgJ0wnOiByZXR1cm4gMHg0QzsKLSAgICAgICAgY2FzZSBH
REtfbToKLSAgICAgICAgY2FzZSBHREtfTToKLSAgICAgICAgICAgIHJldHVybiBWS19NOyAvLyAg
KDREKSBNIGtleSBjYXNlICdtJzogY2FzZSAnTSc6IHJldHVybiAweDREOwotICAgICAgICBjYXNl
IEdES19uOgotICAgICAgICBjYXNlIEdES19OOgotICAgICAgICAgICAgcmV0dXJuIFZLX047IC8v
ICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7Ci0gICAgICAgIGNh
c2UgR0RLX286Ci0gICAgICAgIGNhc2UgR0RLX086Ci0gICAgICAgICAgICByZXR1cm4gVktfTzsg
Ly8gICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKLSAgICAgICAg
Y2FzZSBHREtfcDoKLSAgICAgICAgY2FzZSBHREtfUDoKLSAgICAgICAgICAgIHJldHVybiBWS19Q
OyAvLyAgKDUwKSBQIGtleSBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOwotICAgICAg
ICBjYXNlIEdES19xOgotICAgICAgICBjYXNlIEdES19ROgotICAgICAgICAgICAgcmV0dXJuIFZL
X1E7IC8vICAoNTEpIFEga2V5IGNhc2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7Ci0gICAg
ICAgIGNhc2UgR0RLX3I6Ci0gICAgICAgIGNhc2UgR0RLX1I6Ci0gICAgICAgICAgICByZXR1cm4g
VktfUjsgLy8gICg1MikgUiBrZXkgY2FzZSAncic6IGNhc2UgJ1InOiByZXR1cm4gMHg1MjsKLSAg
ICAgICAgY2FzZSBHREtfczoKLSAgICAgICAgY2FzZSBHREtfUzoKLSAgICAgICAgICAgIHJldHVy
biBWS19TOyAvLyAgKDUzKSBTIGtleSBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAweDUzOwot
ICAgICAgICBjYXNlIEdES190OgotICAgICAgICBjYXNlIEdES19UOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7
Ci0gICAgICAgIGNhc2UgR0RLX3U6Ci0gICAgICAgIGNhc2UgR0RLX1U6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfVTsgLy8gICg1NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4gMHg1
NTsKLSAgICAgICAgY2FzZSBHREtfdjoKLSAgICAgICAgY2FzZSBHREtfVjoKLSAgICAgICAgICAg
IHJldHVybiBWS19WOyAvLyAgKDU2KSBWIGtleSBjYXNlICd2JzogY2FzZSAnVic6IHJldHVybiAw
eDU2OwotICAgICAgICBjYXNlIEdES193OgotICAgICAgICBjYXNlIEdES19XOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2UgJ3cnOiBjYXNlICdXJzogcmV0dXJu
IDB4NTc7Ci0gICAgICAgIGNhc2UgR0RLX3g6Ci0gICAgICAgIGNhc2UgR0RLX1g6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiByZXR1
cm4gMHg1ODsKLSAgICAgICAgY2FzZSBHREtfeToKLSAgICAgICAgY2FzZSBHREtfWToKLSAgICAg
ICAgICAgIHJldHVybiBWS19ZOyAvLyAgKDU5KSBZIGtleSBjYXNlICd5JzogY2FzZSAnWSc6IHJl
dHVybiAweDU5OwotICAgICAgICBjYXNlIEdES196OgotICAgICAgICBjYXNlIEdES19aOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBjYXNlICdaJzog
cmV0dXJuIDB4NUE7Ci0gICAgICAgIGNhc2UgR0RLX01ldGFfTDoKLSAgICAgICAgICAgIHJldHVy
biBWS19MV0lOOyAvLyAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtl
eWJvYXJkKQotICAgICAgICBjYXNlIEdES19NZXRhX1I6Ci0gICAgICAgICAgICByZXR1cm4gVktf
UldJTjsgLy8gKDVDKSBSaWdodCBXaW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKLSAgICAg
ICAgICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIgU2xlZXAga2V5Ci0gICAgICAgICAgICAv
LyBWS19TRVBBUkFUT1IgKDZDKSBTZXBhcmF0b3Iga2V5Ci0gICAgICAgICAgICAvLyBWS19TVUJU
UkFDVCAoNkQpIFN1YnRyYWN0IGtleQotICAgICAgICAgICAgLy8gVktfREVDSU1BTCAoNkUpIERl
Y2ltYWwga2V5Ci0gICAgICAgICAgICAvLyBWS19ESVZJREUgKDZGKSBEaXZpZGUga2V5Ci0gICAg
ICAgICAgICAvLyBoYW5kbGVkIGJ5IGtleSBjb2RlIGFib3ZlCi0KLSAgICAgICAgY2FzZSBHREtf
TnVtX0xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNTE9DSzsgLy8gKDkwKSBOVU0gTE9D
SyBrZXkKLQotICAgICAgICBjYXNlIEdES19TY3JvbGxfTG9jazoKLSAgICAgICAgICAgIHJldHVy
biBWS19TQ1JPTEw7IC8vICg5MSkgU0NST0xMIExPQ0sga2V5Ci0KLSAgICAgICAgY2FzZSBHREtf
U2hpZnRfTDoKLSAgICAgICAgICAgIHJldHVybiBWS19MU0hJRlQ7IC8vIChBMCkgTGVmdCBTSElG
VCBrZXkKLSAgICAgICAgY2FzZSBHREtfU2hpZnRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19S
U0hJRlQ7IC8vIChBMSkgUmlnaHQgU0hJRlQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NvbnRyb2xf
TDoKLSAgICAgICAgICAgIHJldHVybiBWS19MQ09OVFJPTDsgLy8gKEEyKSBMZWZ0IENPTlRST0wg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0NvbnRyb2xfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19S
Q09OVFJPTDsgLy8gKEEzKSBSaWdodCBDT05UUk9MIGtleQotICAgICAgICBjYXNlIEdES19BbHRf
TDoKLSAgICAgICAgICAgIHJldHVybiBWS19MTUVOVTsgLy8gKEE0KSBMZWZ0IE1FTlUga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0FsdF9SOgotICAgICAgICAgICAgcmV0dXJuIFZLX1JNRU5VOyAvLyAo
QTUpIFJpZ2h0IE1FTlUga2V5Ci0KLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAoQTYp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQotICAgICAgICAgICAgLy8gVktfQlJP
V1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5Ci0g
ICAgICAgICAgICAvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6IEJy
b3dzZXIgUmVmcmVzaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkpIFdp
bmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NF
Ul9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQotICAgICAg
ICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dz
ZXIgRmF2b3JpdGVzIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2lu
ZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQotICAgICAgICAgICAgLy8g
VktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQotICAg
ICAgICAgICAgLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBE
b3duIGtleQotICAgICAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2luZG93cyAyMDAwL1hQ
OiBWb2x1bWUgVXAga2V5Ci0gICAgICAgICAgICAvLyBWS19NRURJQV9ORVhUX1RSQUNLIChCMCkg
V2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFf
UFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5Ci0gICAg
ICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlh
IGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3MgMjAw
MC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9NQUlM
IChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFydCBNYWlsIGtleQotICAgICAgICAgICAgLy8gVktf
TEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtl
eQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0
YXJ0IEFwcGxpY2F0aW9uIDEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMiAoQjcp
IFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKLQotICAgICAgICAgICAg
Ly8gVktfT0VNXzEgKEJBKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNh
biB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQg
a2V5Ym9hcmQsIHRoZSAnOzonIGtleQotICAgICAgICBjYXNlIEdES19zZW1pY29sb246Ci0gICAg
ICAgIGNhc2UgR0RLX2NvbG9uOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8xOyAvL2Nhc2Ug
JzsnOiBjYXNlICc6JzogcmV0dXJuIDB4QkE7Ci0gICAgICAgICAgICAvLyBWS19PRU1fUExVUyAo
QkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBrZXkK
LSAgICAgICAgY2FzZSBHREtfcGx1czoKLSAgICAgICAgY2FzZSBHREtfZXF1YWw6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfT0VNX1BMVVM7IC8vY2FzZSAnPSc6IGNhc2UgJysnOiByZXR1cm4gMHhC
QjsKLSAgICAgICAgICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9y
IGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKLSAgICAgICAgY2FzZSBHREtfY29tbWE6
Ci0gICAgICAgIGNhc2UgR0RLX2xlc3M6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1B
OyAvL2Nhc2UgJywnOiBjYXNlICc8JzogcmV0dXJuIDB4QkM7Ci0gICAgICAgICAgICAvLyBWS19P
RU1fTUlOVVMgKEJEKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRo
ZSAnLScga2V5Ci0gICAgICAgIGNhc2UgR0RLX21pbnVzOgotICAgICAgICBjYXNlIEdES191bmRl
cnNjb3JlOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9NSU5VUzsgLy9jYXNlICctJzogY2Fz
ZSAnXyc6IHJldHVybiAweEJEOwotICAgICAgICAgICAgLy8gVktfT0VNX1BFUklPRCAoQkUpIFdp
bmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcuJyBrZXkKLSAgICAg
ICAgY2FzZSBHREtfcGVyaW9kOgotICAgICAgICBjYXNlIEdES19ncmVhdGVyOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7IC8vY2FzZSAnLic6IGNhc2UgJz4nOiByZXR1cm4gMHhC
RTsKLSAgICAgICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBj
aGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3Ig
dGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKLSAgICAgICAgY2FzZSBHREtf
c2xhc2g6Ci0gICAgICAgIGNhc2UgR0RLX3F1ZXN0aW9uOgotICAgICAgICAgICAgcmV0dXJuIFZL
X09FTV8yOyAvL2Nhc2UgJy8nOiBjYXNlICc/JzogcmV0dXJuIDB4QkY7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICdgficga2V5Ci0gICAgICAgIGNhc2UgR0RLX2FzY2lpdGlsZGU6Ci0gICAg
ICAgIGNhc2UgR0RLX3F1b3RlbGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMzsgLy9j
YXNlICdgJzogY2FzZSAnfic6IHJldHVybiAweEMwOwotICAgICAgICAgICAgLy8gVktfT0VNXzQg
KERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRo
ZSAnW3snIGtleQotICAgICAgICBjYXNlIEdES19icmFja2V0bGVmdDoKLSAgICAgICAgY2FzZSBH
REtfYnJhY2VsZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV80OyAvL2Nhc2UgJ1snOiBj
YXNlICd7JzogcmV0dXJuIDB4REI7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQg
Zm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdp
bmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5
Ci0gICAgICAgIGNhc2UgR0RLX2JhY2tzbGFzaDoKLSAgICAgICAgY2FzZSBHREtfYmFyOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX09FTV81OyAvL2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAw
eERDOwotICAgICAgICAgICAgLy8gVktfT0VNXzYgKEREKSBVc2VkIGZvciBtaXNjZWxsYW5lb3Vz
IGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZv
ciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXX0nIGtleQotICAgICAgICBjYXNlIEdE
S19icmFja2V0cmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNlcmlnaHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfT0VNXzY7IC8vIGNhc2UgJ10nOiBjYXNlICd9JzogcmV0dXJuIDB4REQ7Ci0g
ICAgICAgICAgICAvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBV
UyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1b3RlJyBrZXkK
LSAgICAgICAgY2FzZSBHREtfcXVvdGVyaWdodDoKLSAgICAgICAgY2FzZSBHREtfcXVvdGVkYmw6
Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzc7IC8vIGNhc2UgJ1wnJzogY2FzZSAnIic6IHJl
dHVybiAweERFOwotICAgICAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgotICAgICAgICAgICAg
Ly8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAwMC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFj
a2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBvbiB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAot
ICAgICAgICAgICAgLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdpbmRv
d3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQotICAgICAgICAgICAg
Ly8gVktfUEFDS0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBj
aGFyYWN0ZXJzIGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBp
cyB0aGUgbG93IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9u
LWtleWJvYXJkIGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJr
IGluIEtFWUJESU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKLSAgICAg
ICAgICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQotICAgICAgICAgICAgLy8gVktfQ1JTRUwg
KEY3KSBDclNlbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5Ci0g
ICAgICAgICAgICAvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKLSAgICAgICAgICAgIC8v
IFZLX1BMQVkgKEZBKSBQbGF5IGtleQotICAgICAgICAgICAgLy8gVktfWk9PTSAoRkIpIFpvb20g
a2V5Ci0gICAgICAgICAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVz
ZQotICAgICAgICAgICAgLy8gVktfUEExIChGRCkgUEExIGtleQotICAgICAgICAgICAgLy8gVktf
T0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0YxOgotICAgICAgICBj
YXNlIEdES19GMjoKLSAgICAgICAgY2FzZSBHREtfRjM6Ci0gICAgICAgIGNhc2UgR0RLX0Y0Ogot
ICAgICAgICBjYXNlIEdES19GNToKLSAgICAgICAgY2FzZSBHREtfRjY6Ci0gICAgICAgIGNhc2Ug
R0RLX0Y3OgotICAgICAgICBjYXNlIEdES19GODoKLSAgICAgICAgY2FzZSBHREtfRjk6Ci0gICAg
ICAgIGNhc2UgR0RLX0YxMDoKLSAgICAgICAgY2FzZSBHREtfRjExOgotICAgICAgICBjYXNlIEdE
S19GMTI6Ci0gICAgICAgIGNhc2UgR0RLX0YxMzoKLSAgICAgICAgY2FzZSBHREtfRjE0OgotICAg
ICAgICBjYXNlIEdES19GMTU6Ci0gICAgICAgIGNhc2UgR0RLX0YxNjoKLSAgICAgICAgY2FzZSBH
REtfRjE3OgotICAgICAgICBjYXNlIEdES19GMTg6Ci0gICAgICAgIGNhc2UgR0RLX0YxOToKLSAg
ICAgICAgY2FzZSBHREtfRjIwOgotICAgICAgICBjYXNlIEdES19GMjE6Ci0gICAgICAgIGNhc2Ug
R0RLX0YyMjoKLSAgICAgICAgY2FzZSBHREtfRjIzOgotICAgICAgICBjYXNlIEdES19GMjQ6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfRjEgKyAoa2V5Y29kZSAtIEdES19GMSk7Ci0gICAgICAgIGNh
c2UgR0RLX0tFWV9Wb2lkU3ltYm9sOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BST0NFU1NLRVk7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLX0KLQot
U3RyaW5nIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHVuc2ln
bmVkIHZhbCkKLXsKLSAgICBzd2l0Y2ggKHZhbCkgewotICAgICAgICBjYXNlIEdES19JU09fRW50
ZXI6Ci0gICAgICAgIGNhc2UgR0RLX0tQX0VudGVyOgotICAgICAgICBjYXNlIEdES19SZXR1cm46
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJcciIpOwotICAgICAgICBjYXNlIEdES19CYWNr
U3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJceDgiKTsKLSAgICAgICAgY2FzZSBH
REtfVGFiOgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiXHQiKTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGd1bmljaGFyIGMgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUodmFsKTsK
LSAgICAgICAgICAgIGdsb25nIG53YzsKLSAgICAgICAgICAgIGd1bmljaGFyMiogdWNoYXIxNiA9
IGdfdWNzNF90b191dGYxNigmYywgMSwgMCwgJm53YywgMCk7Ci0KLSAgICAgICAgICAgIFN0cmlu
ZyByZXRWYWw7Ci0gICAgICAgICAgICBpZiAodWNoYXIxNikKLSAgICAgICAgICAgICAgICByZXRW
YWwgPSBTdHJpbmcoKFVDaGFyKil1Y2hhcjE2LCBud2MpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJldFZhbCA9IFN0cmluZygpOwotCi0gICAgICAgICAgICBnX2ZyZWUodWNo
YXIxNik7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXRWYWw7Ci0gICAgfQotfQotCi1zdGF0aWMg
UGxhdGZvcm1FdmVudDo6VHlwZSBldmVudFR5cGVGb3JHZGtLZXlFdmVudChHZGtFdmVudEtleSog
ZXZlbnQpCi17Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSA/IFBs
YXRmb3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bjsKLX0KLQotc3RhdGlj
IFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnNGb3JHZGtLZXlFdmVudChHZGtFdmVu
dEtleSogZXZlbnQpCi17Ci0gICAgdW5zaWduZWQgaW50IG1vZGlmaWVycyA9IDA7Ci0gICAgaWYg
KGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLIHx8IGV2ZW50LT5rZXl2YWwgPT0gR0RLXzMy
NzBfQmFja1RhYikKLSAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OlNoaWZ0S2V5
OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQotICAgICAgICBtb2Rp
ZmllcnMgfD0gUGxhdGZvcm1FdmVudDo6Q3RybEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYg
R0RLX01PRDFfTUFTSykKLSAgICAgICAgbW9kaWZpZXJzIHw9IFBsYXRmb3JtRXZlbnQ6OkFsdEtl
eTsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01FVEFfTUFTSykKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBs
YXRmb3JtRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKTsKLX0KLQotLy8gS2VlcCB0aGlzIGlu
IHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCi1QbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQs
IGNvbnN0IENvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzKQotICAgIDogUGxh
dGZvcm1FdmVudChldmVudFR5cGVGb3JHZGtLZXlFdmVudChldmVudCksIG1vZGlmaWVyc0Zvckdk
a0tleUV2ZW50KGV2ZW50KSwgY3VycmVudFRpbWUoKSkKLSAgICAsIG1fdGV4dChjb21wb3NpdGlv
blJlc3VsdHMuc2ltcGxlU3RyaW5nLmxlbmd0aCgpID8gY29tcG9zaXRpb25SZXN1bHRzLnNpbXBs
ZVN0cmluZyA6IHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKSkKLSAgICAsIG1f
dW5tb2RpZmllZFRleHQobV90ZXh0KQotICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZp
ZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpKQotICAgICwgbV93aW5kb3dzVmlydHVhbEtl
eUNvZGUod2luZG93c0tleUNvZGVGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpKQotICAgICwg
bV9uYXRpdmVWaXJ0dWFsS2V5Q29kZShldmVudC0+a2V5dmFsKQotICAgICwgbV9tYWNDaGFyQ29k
ZSgwKQotICAgICwgbV9hdXRvUmVwZWF0KGZhbHNlKQotICAgICwgbV9pc0tleXBhZChldmVudC0+
a2V5dmFsID49IEdES19LUF9TcGFjZSAmJiBldmVudC0+a2V5dmFsIDw9IEdES19LUF85KQotICAg
ICwgbV9pc1N5c3RlbUtleShmYWxzZSkKLSAgICAsIG1fZ2RrRXZlbnRLZXkoZXZlbnQpCi0gICAg
LCBtX2NvbXBvc2l0aW9uUmVzdWx0cyhjb21wb3NpdGlvblJlc3VsdHMpCi17Ci0gICAgLy8gVG8g
bWF0Y2ggdGhlIGJlaGF2aW9yIG9mIElFLCB3ZSByZXR1cm4gVktfUFJPQ0VTU0tFWSBmb3Iga2V5
cyB0aGF0IHRyaWdnZXJlZCBjb21wb3NpdGlvbiByZXN1bHRzLgotICAgIGlmIChjb21wb3NpdGlv
blJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVkKCkpCi0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxL
ZXlDb2RlID0gVktfUFJPQ0VTU0tFWTsKLX0KLQotdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OmRpc2FtYmlndWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb21wYXRp
YmlsaXR5TW9kZSkKLXsKLSAgICAvLyBDYW4gb25seSBjaGFuZ2UgdHlwZSBmcm9tIEtleURvd24g
dG8gUmF3S2V5RG93biBvciBDaGFyLCBhcyB3ZSBsYWNrIGluZm9ybWF0aW9uIGZvciBvdGhlciBj
b252ZXJzaW9ucy4KLSAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci0KLSAgICBpZiAoYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93bikgewotICAg
ICAgICBtX3RleHQgPSBTdHJpbmcoKTsKLSAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmlu
ZygpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyICYmIG1fY29t
cG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKSB7Ci0gICAgICAgIC8vIEhhdmlu
ZyBlbXB0eSB0ZXh0LCBwcmV2ZW50cyB0aGlzIENoYXIgKHdoaWNoIGlzIGEgRE9NIGtleXByZXNz
KSBldmVudAotICAgICAgICAvLyBmcm9tIGdvaW5nIHRvIHRoZSBET00uIEtleXMgdGhhdCB0cmln
Z2VyIGNvbXBvc2l0aW9uIGV2ZW50cyBzaG91bGQgbm90Ci0gICAgICAgIC8vIGZpcmUga2V5cHJl
c3MuCi0gICAgICAgIG1fdGV4dCA9IFN0cmluZygpOwotICAgICAgICBtX3VubW9kaWZpZWRUZXh0
ID0gU3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3Ry
aW5nKCk7Ci0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKLSAgICB9Ci19Ci0K
LWJvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGdka19rZXltYXBfZ2V0X2NhcHNfbG9ja19zdGF0ZShnZGtfa2V5bWFwX2dldF9k
ZWZhdWx0KCkpOwotfQotCi12b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1v
ZGlmaWVyU3RhdGUoYm9vbCYgc2hpZnRLZXksIGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwg
Ym9vbCYgbWV0YUtleSkKLXsKLSAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7Ci0gICAgZ3RrX2dl
dF9jdXJyZW50X2V2ZW50X3N0YXRlKCZzdGF0ZSk7Ci0KLSAgICBzaGlmdEtleSA9IHN0YXRlICYg
R0RLX1NISUZUX01BU0s7Ci0gICAgY3RybEtleSA9IHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsK
LSAgICBhbHRLZXkgPSBzdGF0ZSAmIEdES19NT0QxX01BU0s7Ci0gICAgbWV0YUtleSA9IHN0YXRl
ICYgR0RLX01FVEFfTUFTSzsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1BsYXRmb3JtTW91c2VFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDQxMDFjMWZhM2Q3Mjg2NmNiYzk1M2Y4NGI1NzI4NTkzN2YzMjEzZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGxhdGZvcm1Nb3VzZUV2ZW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDExNyArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQotKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0q
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
I2luY2x1ZGUgPGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTog
V291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQg
aW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KLQotLy8gS2VlcCB0aGlzIGlu
IHN5bmMgd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm0gZXZlbnQgY29uc3RydWN0b3JzCi1QbGF0Zm9y
bU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudEJ1dHRvbiogZXZlbnQpCi17
Ci0gICAgbV90aW1lc3RhbXAgPSBldmVudC0+dGltZTsKLSAgICBtX3Bvc2l0aW9uID0gSW50UG9p
bnQoKGludClldmVudC0+eCwgKGludClldmVudC0+eSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9
IEludFBvaW50KChpbnQpZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+eV9yb290KTsKLQotICAg
IG1fbW9kaWZpZXJzID0gMDsKLSAgICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0sp
Ci0gICAgICAgIG1fbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUg
JiBHREtfQ09OVFJPTF9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5OwotICAg
IGlmIChldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8
PSBBbHRLZXk7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19NRVRBX01BU0spCi0gICAgICAg
IG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0g
ICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgotICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Ci0g
ICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToK
LSAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VQcmVzc2VkOwotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7Ci0gICAgICAgICAgICBtX3R5
cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkOwotICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BS
RVNTKQotICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKLSAgICAgICAgZWxzZSBpZiAoZXZl
bnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICBtX2NsaWNrQ291bnQg
PSAyOwotICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykK
LSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7Ci0KLSAgICAgICAgaWYgKGV2ZW50LT5idXR0
b24gPT0gMSkKLSAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKLSAgICAgICAgZWxz
ZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVC
dXR0b247Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKLSAgICAgICAgICAg
IG1fYnV0dG9uID0gUmlnaHRCdXR0b247Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfTsKLX0KLQotUGxhdGZvcm1Nb3Vz
ZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKLXsKLSAg
ICBtX3RpbWVzdGFtcCA9IG1vdGlvbi0+dGltZTsKLSAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQo
KGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKLSAgICBtX2dsb2JhbFBvc2l0aW9uID0g
SW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7Ci0KLSAg
ICBtX21vZGlmaWVycyA9IDA7Ci0gICAgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFT
SykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7Ci0gICAgaWYgKG1vdGlvbi0+c3Rh
dGUgJiBHREtfQ09OVFJPTF9NQVNLKQotICAgICAgICBtX21vZGlmaWVycyB8PSBDdHJsS2V5Owot
ICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX01PRDFfTUFTSykKLSAgICAgICAgbV9tb2RpZmll
cnMgfD0gQWx0S2V5OwotICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX01FVEFfTUFTSykKLSAg
ICAgICAgbV9tb2RpZmllcnMgfD0gTWV0YUtleTsKLQotICAgIHN3aXRjaCAobW90aW9uLT50eXBl
KSB7Ci0gICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgbV90eXBlID0gUGxhdGZv
cm1FdmVudDo6TW91c2VNb3ZlZDsKLSAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKLSAgICAg
ICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfTsKLQotICAgIGlmIChtb3Rpb24tPnN0YXRl
ICYgR0RLX0JVVFRPTjFfTUFTSykKLSAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOwotICAg
IGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQlVUVE9OMl9NQVNLKQotICAgICAgICBtX2J1
dHRvbiA9IE1pZGRsZUJ1dHRvbjsKLSAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JV
VFRPTjNfTUFTSykKLSAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKLX0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmM3ODgyMmU2M2M5MGRhYTMyMTFiYTYxNzIzMjRh
MGM1ZjkxNmM4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLQotI2luY2x1ZGUg
Ikd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0jaW5jbHVkZSAiV2lkZ2V0
LmgiCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIEd0a1dpZGdldCogZ2V0VG9wbGV2ZWwoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR3Rr
V2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7Ci0gICAg
cmV0dXJuIGd0a193aWRnZXRfaXNfdG9wbGV2ZWwodG9wbGV2ZWwpID8gdG9wbGV2ZWwgOiAwOwot
fQotCi1zdGF0aWMgR2RrVmlzdWFsKiBnZXRWaXN1YWwoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAg
R3RrV2lkZ2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSA6IDA7Ci0gICAgaWYgKCFjb250
YWluZXIpIHsKLSAgICAgICAgR2RrU2NyZWVuKiBzY3JlZW4gPSBnZGtfc2NyZWVuX2dldF9kZWZh
dWx0KCk7Ci0gICAgICAgIHJldHVybiBzY3JlZW4gPyBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlz
dWFsKHNjcmVlbikgOiAwOwotICAgIH0KLQotICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcmVhbGl6
ZWQoY29udGFpbmVyKSkKLSAgICAgICAgY29udGFpbmVyID0gZ2V0VG9wbGV2ZWwoY29udGFpbmVy
KTsKLSAgICByZXR1cm4gY29udGFpbmVyID8gZ2RrX3dpbmRvd19nZXRfdmlzdWFsKGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyhjb250YWluZXIpKSA6IDA7Ci19Ci0KLWludCBzY3JlZW5EZXB0aChXaWRn
ZXQqIHdpZGdldCkKLXsKLSAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdldFZpc3VhbCh3aWRnZXQp
OwotICAgIGlmICghdmlzdWFsKQotICAgICAgICByZXR1cm4gMjQ7Ci0gICAgcmV0dXJuIGdka192
aXN1YWxfZ2V0X2RlcHRoKHZpc3VhbCk7Ci19Ci0KLWludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVu
dChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdldFZpc3VhbCh3
aWRnZXQpOwotICAgIGlmICghdmlzdWFsKQotICAgICAgICByZXR1cm4gODsKLQotICAgIHJldHVy
biBnZGtfdmlzdWFsX2dldF9iaXRzX3Blcl9yZ2IodmlzdWFsKTsKLX0KLQotYm9vbCBzY3JlZW5J
c01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgcmV0dXJuIHNjcmVlbkRlcHRoKHdp
ZGdldCkgPCAyOwotfQotCi0KLXN0YXRpYyBHZGtTY3JlZW4qIGdldFNjcmVlbihHdGtXaWRnZXQq
IHdpZGdldCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9oYXNfc2NyZWVuKHdpZGdldCkgPyBn
dGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSA6IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsK
LX0KLQotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgR3RrV2lk
Z2V0KiBjb250YWluZXIgPSB3aWRnZXQgPyBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSA6IDA7Ci0gICAgaWYgKGNvbnRhaW5lcikK
LSAgICAgICAgY29udGFpbmVyID0gZ2V0VG9wbGV2ZWwoY29udGFpbmVyKTsKLQotICAgIEdka1Nj
cmVlbiogc2NyZWVuID0gY29udGFpbmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtfc2Ny
ZWVuX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKLQotICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5lciA/IGdka19zY3JlZW5fZ2V0
X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9nZXRfd2luZG93KGNvbnRhaW5l
cikpIDogMDsKLQotICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeTsKLSAgICBnZGtfc2NyZWVuX2dl
dF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgJmdlb21ldHJ5KTsKLQotICAgIHJl
dHVybiBGbG9hdFJlY3QoZ2VvbWV0cnkueCwgZ2VvbWV0cnkueSwgZ2VvbWV0cnkud2lkdGgsIGdl
b21ldHJ5LmhlaWdodCk7Ci19Ci0KLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdl
dCogd2lkZ2V0KQotewotICAgIEd0a1dpZGdldCogY29udGFpbmVyID0gd2lkZ2V0ID8gR1RLX1dJ
REdFVCh3aWRnZXQtPnJvb3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkg
OiAwOwotICAgIGlmIChjb250YWluZXIgJiYgIWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKGNvbnRh
aW5lcikpCi0gICAgICAgIHJldHVybiBzY3JlZW5SZWN0KHdpZGdldCk7Ci0KLSAgICBHZGtTY3Jl
ZW4qIHNjcmVlbiA9IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVl
bl9nZXRfZGVmYXVsdCgpOwotICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Ci0KLSAgICBnaW50IG1vbml0b3IgPSBjb250YWluZXIgPyBnZGtfc2NyZWVuX2dldF9t
b25pdG9yX2F0X3dpbmRvdyhzY3JlZW4sIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjb250YWluZXIp
KSA6IDA7Ci0KLSAgICBHZGtSZWN0YW5nbGUgd29ya0FyZWE7Ci0gICAgZ2RrX3NjcmVlbl9nZXRf
bW9uaXRvcl93b3JrYXJlYShzY3JlZW4sIG1vbml0b3IsICZ3b3JrQXJlYSk7Ci0KLSAgICByZXR1
cm4gRmxvYXRSZWN0KHdvcmtBcmVhLngsIHdvcmtBcmVhLnksIHdvcmtBcmVhLndpZHRoLCB3b3Jr
QXJlYS5oZWlnaHQpOwotCi19Ci0KLXZvaWQgc2NyZWVuQ29sb3JQcm9maWxlKENvbG9yUHJvZmls
ZSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxF
dmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2
ZW50R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwYmY5YTg5ZDc2ZDA1
ZjUyOGVkMzQ5ZGUwNTM2NzI3MTJkZjhhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVl
bEV2ZW50R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0K
LSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEtlZXAgdGhpcyBp
biBzeW5jIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZv
cm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQot
ewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkZWx0YSA9IDE7Ci0KLSAgICBtX3R5cGUgPSBQbGF0
Zm9ybUV2ZW50OjpXaGVlbDsKLSAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7Ci0KLSAg
ICBtX21vZGlmaWVycyA9IDA7Ci0gICAgaWYgKGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNL
KQotICAgICAgICBtX21vZGlmaWVycyB8PSBTaGlmdEtleTsKLSAgICBpZiAoZXZlbnQtPnN0YXRl
ICYgR0RLX0NPTlRST0xfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAg
ICBpZiAoZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSykKLSAgICAgICAgbV9tb2RpZmllcnMg
fD0gQWx0S2V5OwotICAgIGlmIChldmVudC0+c3RhdGUgJiBHREtfTUVUQV9NQVNLKQotICAgICAg
ICBtX21vZGlmaWVycyB8PSBNZXRhS2V5OwotCi0gICAgbV9kZWx0YVggPSAwOwotICAgIG1fZGVs
dGFZID0gMDsKLQotICAgIC8vIERvY3Mgc2F5IGFuIHVwd2FyZHMgc2Nyb2xsIChhd2F5IGZyb20g
dGhlIHVzZXIpIGhhcyBhIHBvc2l0aXZlIGRlbHRhCi0gICAgc3dpdGNoIChldmVudC0+ZGlyZWN0
aW9uKSB7Ci0gICAgICAgIGNhc2UgR0RLX1NDUk9MTF9VUDoKLSAgICAgICAgICAgIG1fZGVsdGFZ
ID0gZGVsdGE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfU0NST0xMX0RP
V046Ci0gICAgICAgICAgICBtX2RlbHRhWSA9IC1kZWx0YTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoKLSAgICAgICAgICAgIG1fZGVsdGFYID0gZGVs
dGE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfU0NST0xMX1JJR0hUOgot
ICAgICAgICAgICAgbV9kZWx0YVggPSAtZGVsdGE7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCAxOCkKLSAgICAgICAgY2FzZSBHREtfU0NST0xMX1NNT09U
SDogewotICAgICAgICAgICAgICAgIGdkb3VibGUgZGVsdGFYLCBkZWx0YVk7Ci0gICAgICAgICAg
ICAgICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGVsdGFzKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnQqPihldmVudCksICZkZWx0YVgsICZkZWx0YVkpOwotICAgICAgICAgICAgICAgIG1fZGVsdGFY
ID0gLWRlbHRhWDsKLSAgICAgICAgICAgICAgICBtX2RlbHRhWSA9IC1kZWx0YVk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIH0KLSAgICBtX3doZWVsVGlj
a3NYID0gbV9kZWx0YVg7Ci0gICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwotCi0gICAgbV9w
b3NpdGlvbiA9IEludFBvaW50KHN0YXRpY19jYXN0PGludD4oZXZlbnQtPngpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGV2ZW50LT55KSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oZXZlbnQtPnhfcm9vdCksIHN0YXRpY19jYXN0PGludD4oZXZlbnQtPnlfcm9v
dCkpOwotICAgIG1fZ3JhbnVsYXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKLSAgICBt
X2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSA9IGZhbHNlOwotCi0gICAgLy8gRklYTUU6IHJl
dHJpZXZlIHRoZSB1c2VyIHNldHRpbmcgZm9yIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xs
IG9uIGVhY2ggd2hlZWwgZXZlbnQKLSAgICBtX2RlbHRhWCAqPSBzdGF0aWNfY2FzdDxmbG9hdD4o
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKLSAgICBtX2RlbHRhWSAqPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKLX0KLQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmY1MTdiMDFlYzUyOWM1ZGZhNTAyYjdhYTUwYjdlZjgwNDgwZTZm
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDEyNyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUg
aW1wbGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCi0gKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQb3B1cE1lbnVHdGsuaCIKLQotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KLSNpbmNsdWRlICJHdGtVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
Y29uc3QgdWludDMyX3QgZ1NlYXJjaFRpbWVvdXRNcyA9IDEwMDA7Ci0KLVBvcHVwTWVudUd0azo6
UG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVudCogY2xpZW50KQotICAgIDogbV9wb3B1cENsaWVu
dChjbGllbnQpCi17Ci19Ci0KLVBvcHVwTWVudUd0azo6flBvcHVwTWVudUd0aygpCi17Ci0gICAg
aWYgKG1fcG9wdXApIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fcG9wdXAtPnBsYXRmb3JtTWVudSgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKLSAgICAgICAgaGlkZSgpOwotICAgIH0KLX0KLQotR3RrQWN0aW9uKiBQb3B1
cE1lbnVHdGs6OmNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGludCBpdGVtSW5kZXgpCi17Ci0g
ICAgR093blB0cjxjaGFyPiBhY3Rpb25OYW1lKGdfc3RyZHVwX3ByaW50ZigicG9wdXAtbWVudS1h
Y3Rpb24tJWQiLCBpdGVtSW5kZXgpKTsKLSAgICBHdGtBY3Rpb24qIGFjdGlvbiA9IGd0a19hY3Rp
b25fbmV3KGFjdGlvbk5hbWUuZ2V0KCksIGNsaWVudCgpLT5pdGVtVGV4dChpdGVtSW5kZXgpLnV0
ZjgoKS5kYXRhKCksIGNsaWVudCgpLT5pdGVtVG9vbFRpcChpdGVtSW5kZXgpLnV0ZjgoKS5kYXRh
KCksIDApOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGFjdGlvbiksICJwb3B1cC1t
ZW51LWFjdGlvbi1pbmRleCIsIEdJTlRfVE9fUE9JTlRFUihpdGVtSW5kZXgpKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KGFjdGlvbiwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyhtZW51SXRlbUFjdGl2
YXRlZCksIHRoaXMpOwotICAgIC8vIEZJWE1FOiBBcHBseSB0aGUgUG9wdXBNZW51U3R5bGUgZnJv
bSBjbGllbnQoKS0+aXRlbVN0eWxlKGkpCi0gICAgZ3RrX2FjdGlvbl9zZXRfdmlzaWJsZShhY3Rp
b24sICFjbGllbnQoKS0+aXRlbVN0eWxlKGl0ZW1JbmRleCkuaXNEaXNwbGF5Tm9uZSgpKTsKLSAg
ICBndGtfYWN0aW9uX3NldF9zZW5zaXRpdmUoYWN0aW9uLCBjbGllbnQoKS0+aXRlbUlzRW5hYmxl
ZChpdGVtSW5kZXgpKTsKLQotICAgIHJldHVybiBhY3Rpb247Ci19Ci0KLXZvaWQgUG9wdXBNZW51
R3RrOjpzaG93KGNvbnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmlldywgaW50IGluZGV4
KQotewotICAgIEFTU0VSVChjbGllbnQoKSk7Ci0KLSAgICBpZiAoIW1fcG9wdXApIHsKLSAgICAg
ICAgbV9wb3B1cCA9IEd0a1BvcHVwTWVudTo6Y3JlYXRlKCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV9wb3B1cC0+cGxhdGZvcm1NZW51KCksICJ1bm1hcCIsIEdfQ0FMTEJBQ0soUG9wdXBN
ZW51R3RrOjptZW51VW5tYXBwZWQpLCB0aGlzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9wb3B1
cC0+Y2xlYXIoKTsKLQotICAgIGNvbnN0IGludCBzaXplID0gY2xpZW50KCktPmxpc3RTaXplKCk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGNsaWVu
dCgpLT5pdGVtSXNTZXBhcmF0b3IoaSkpCi0gICAgICAgICAgICBtX3BvcHVwLT5hcHBlbmRTZXBh
cmF0b3IoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHUmVmUHRyPEd0a0FjdGlvbj4g
YWN0aW9uID0gYWRvcHRHUmVmKGNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGkpKTsKLSAgICAg
ICAgICAgIG1fcG9wdXAtPmFwcGVuZEl0ZW0oYWN0aW9uLmdldCgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIEludFBvaW50IG1lbnVQb3NpdGlvbiA9IGNvbnZlcnRXaWRnZXRQb2ludFRvU2Ny
ZWVuUG9pbnQoR1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKSwgdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKLSAgICBtZW51
UG9zaXRpb24ubW92ZSgwLCByZWN0LmhlaWdodCgpKTsKLQotICAgIG1fcG9wdXAtPnBvcFVwKHJl
Y3Quc2l6ZSgpLCBtZW51UG9zaXRpb24sIHNpemUsIGluZGV4LCBndGtfZ2V0X2N1cnJlbnRfZXZl
bnQoKSk7Ci0KLSAgICAvLyBHVEsgY2FuIHJlZnVzZSB0byBhY3R1YWxseSBvcGVuIHRoZSBtZW51
IHdoZW4gbW91c2UgZ3JhYnMgZmFpbHMuCi0gICAgLy8gRW5zdXJlIFdlYkNvcmUgZG9lcyBub3Qg
Z28gaW50byBzb21lIHBlc2t5IHN0YXRlLgotICAgIGlmICghZ3RrX3dpZGdldF9nZXRfdmlzaWJs
ZShtX3BvcHVwLT5wbGF0Zm9ybU1lbnUoKSkpCi0gICAgICAgIGNsaWVudCgpLT5wb3B1cERpZEhp
ZGUoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6OmhpZGUoKQotewotICAgIEFTU0VSVChtX3Bv
cHVwKTsKLSAgICBtX3BvcHVwLT5wb3BEb3duKCk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51R3RrOjp1
cGRhdGVGcm9tRWxlbWVudCgpCi17Ci0gICAgY2xpZW50KCktPnNldFRleHRGcm9tSXRlbShjbGll
bnQoKS0+c2VsZWN0ZWRJbmRleCgpKTsKLX0KLQotdm9pZCBQb3B1cE1lbnVHdGs6OmRpc2Nvbm5l
Y3RDbGllbnQoKQotewotICAgIG1fcG9wdXBDbGllbnQgPSAwOwotfQotCi12b2lkIFBvcHVwTWVu
dUd0azo6bWVudUl0ZW1BY3RpdmF0ZWQoR3RrQWN0aW9uKiBhY3Rpb24sIFBvcHVwTWVudUd0ayog
dGhhdCkKLXsKLSAgICBBU1NFUlQodGhhdC0+Y2xpZW50KCkpOwotICAgIHRoYXQtPmNsaWVudCgp
LT52YWx1ZUNoYW5nZWQoR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNU
KGFjdGlvbiksICJwb3B1cC1tZW51LWFjdGlvbi1pbmRleCIpKSk7Ci19Ci0KLXZvaWQgUG9wdXBN
ZW51R3RrOjptZW51VW5tYXBwZWQoR3RrV2lkZ2V0KiwgUG9wdXBNZW51R3RrKiB0aGF0KQotewot
ICAgIEFTU0VSVCh0aGF0LT5jbGllbnQoKSk7Ci0gICAgdGhhdC0+Y2xpZW50KCktPnBvcHVwRGlk
SGlkZSgpOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9Qb3B1cE1lbnVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVH
dGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4MTFmYmY1ZmUzOWY3ZDRmNGMy
YzJjYjBiODAzNTJhNmQ5MDg5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQb3B1
cE1lbnVHdGtfaAotI2RlZmluZSBQb3B1cE1lbnVHdGtfaAotCi0jaW5jbHVkZSAiR3RrUG9wdXBN
ZW51LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlBvcHVwTWVudS5oIgotI2lu
Y2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZyYW1lVmlldzsKLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xhc3MgUG9wdXBNZW51R3RrIDogcHVi
bGljIFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0gICAgUG9wdXBNZW51R3RrKFBvcHVwTWVudUNsaWVu
dCopOwotICAgIH5Qb3B1cE1lbnVHdGsoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0
IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQgaW5kZXgpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc2Nvbm5lY3RDbGllbnQoKTsKLQotcHJpdmF0ZToKLSAgICBQb3B1cE1lbnVDbGllbnQq
IGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBDbGllbnQ7IH0KLSAgICBHdGtBY3Rpb24q
IGNyZWF0ZUd0a0FjdGlvbkZvck1lbnVJdGVtKGludCBpdGVtSW5kZXgpOwotCi0gICAgc3RhdGlj
IHZvaWQgbWVudVVubWFwcGVkKEd0a1dpZGdldCosIFBvcHVwTWVudUd0ayopOwotICAgIHN0YXRp
YyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a0FjdGlvbiosIFBvcHVwTWVudUd0ayopOwotCi0g
ICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OwotICAgIE93blB0cjxHdGtQb3B1cE1l
bnU+IG1fcG9wdXA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQb3B1cE1lbnVHdGtfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NTI1OGYzNmFjZjc0
MzczZGYxMDAyNmZkOGM5ODk0NjBmZjZjOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5oIgotCi0jaWYgVVNFKEdMWCkKLQotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25z
L1hjb21wb3NpdGUuaD4KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZGFtYWdlLmg+Ci0jaW5j
bHVkZSA8Y2Fpcm8teGxpYi5oPgotI2luY2x1ZGUgPGdkay9nZGt4Lmg+Ci0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxXaW5kb3csIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Kj4gV2luZG93SGFzaE1hcDsKLXN0YXRpYyBXaW5kb3dIYXNoTWFwJiBn
ZXRXaW5kb3dIYXNoTWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdpbmRvd0hhc2hN
YXAsIHdpbmRvd0hhc2hNYXAsICgpKTsKLSAgICByZXR1cm4gd2luZG93SGFzaE1hcDsKLX0KLQot
c3RhdGljIGludCBnRGFtYWdlRXZlbnRCYXNlOwotc3RhdGljIEdka0ZpbHRlclJldHVybiBmaWx0
ZXJYRGFtYWdlRXZlbnQoR2RrWEV2ZW50KiBnZGtYRXZlbnQsIEdka0V2ZW50KiBldmVudCwgdm9p
ZCopCi17Ci0gICAgWEV2ZW50KiB4RXZlbnQgPSBzdGF0aWNfY2FzdDxYRXZlbnQqPihnZGtYRXZl
bnQpOwotICAgIGlmICh4RXZlbnQtPnR5cGUgIT0gZ0RhbWFnZUV2ZW50QmFzZSArIFhEYW1hZ2VO
b3RpZnkpCi0gICAgICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOwotCi0gICAgWERhbWFn
ZU5vdGlmeUV2ZW50KiBkYW1hZ2VFdmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8WERhbWFnZU5vdGlm
eUV2ZW50Kj4oeEV2ZW50KTsKLSAgICBXaW5kb3dIYXNoTWFwJiB3aW5kb3dIYXNoTWFwID0gZ2V0
V2luZG93SGFzaE1hcCgpOwotICAgIFdpbmRvd0hhc2hNYXA6Oml0ZXJhdG9yIGkgPSB3aW5kb3dI
YXNoTWFwLmZpbmQoZGFtYWdlRXZlbnQtPmRyYXdhYmxlKTsKLSAgICBpZiAoaSA9PSB3aW5kb3dI
YXNoTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKLQotICAg
IGktPnZhbHVlLT5jYWxsRGFtYWdlTm90aWZ5Q2FsbGJhY2soKTsKLSAgICBYRGFtYWdlU3VidHJh
Y3QoR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSksIGRhbWFn
ZUV2ZW50LT5kYW1hZ2UsIE5vbmUsIE5vbmUpOwotICAgIHJldHVybiBHREtfRklMVEVSX1JFTU9W
RTsKLX0KLQotc3RhdGljIGJvb2wgc3VwcG9ydHNYRGFtYWdlQW5kWENvbXBvc2l0ZSgpCi17Ci0g
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBoYXNF
eHRlbnNpb25zID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVy
biBoYXNFeHRlbnNpb25zOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaW50IGVy
cm9yQmFzZTsKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2Rr
X2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgaWYgKCFYRGFtYWdlUXVlcnlFeHRlbnNpb24o
ZGlzcGxheSwgJmdEYW1hZ2VFdmVudEJhc2UsICZlcnJvckJhc2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpbnQgZXZlbnRCYXNlOwotICAgIGlmICghWENvbXBvc2l0ZVF1ZXJ5RXh0
ZW5zaW9uKGRpc3BsYXksICZldmVudEJhc2UsICZlcnJvckJhc2UpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHN1cHBvcnQgWENvbXBvc2l0ZSB2ZXJzaW9uIDAu
Mi4KLSAgICBpbnQgbWFqb3IsIG1pbm9yOwotICAgIFhDb21wb3NpdGVRdWVyeVZlcnNpb24oZGlz
cGxheSwgJm1ham9yLCAmbWlub3IpOwotICAgIGlmIChtYWpvciA8IDAgfHwgKCFtYWpvciAmJiBt
aW5vciA8IDIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBoYXNFeHRlbnNpb25zID0g
dHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShjb25zdCBJbnRT
aXplJiBzaXplLCBHTENvbnRleHROZWVkZWQgbmVlZHNDb250ZXh0KQotewotICAgIHJldHVybiBz
dXBwb3J0c1hEYW1hZ2VBbmRYQ29tcG9zaXRlKCkgPyBhZG9wdFB0cihuZXcgUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3coc2l6ZSwgbmVlZHNDb250ZXh0KSkgOiBudWxscHRyOwotfQotCi1SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgR0xDb250ZXh0TmVlZGVkIG5lZWRzQ29udGV4dCkKLSAgICA6IG1fc2l6
ZShzaXplKQotICAgICwgbV93aW5kb3coMCkKLSAgICAsIG1fcGFyZW50V2luZG93KDApCi0gICAg
LCBtX3BpeG1hcCgwKQotICAgICwgbV9uZWVkc0NvbnRleHQobmVlZHNDb250ZXh0KQotICAgICwg
bV9zdXJmYWNlKDApCi0gICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUoZmFsc2UpCi0g
ICAgLCBtX2RhbWFnZSgwKQotICAgICwgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjaygwKQotICAgICwg
bV9kYW1hZ2VOb3RpZnlEYXRhKDApCi17Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IEdES19ESVNQ
TEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFNjcmVlbiogc2Ny
ZWVuID0gRGVmYXVsdFNjcmVlbk9mRGlzcGxheShkaXNwbGF5KTsKLQotICAgIC8vIFRoaXMgaXMg
YmFzZWQgb24gY29kZSBmcm9tIENocm9taXVtOiBzcmMvY29udGVudC9jb21tb24vZ3B1L2ltYWdl
X3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4LmNjCi0gICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgd2lu
ZG93QXR0cmlidXRlczsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0g
VHJ1ZTsKLSAgICBtX3BhcmVudFdpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwKLSAgICAg
ICAgUm9vdFdpbmRvd09mU2NyZWVuKHNjcmVlbiksCi0gICAgICAgIFdpZHRoT2ZTY3JlZW4oc2Ny
ZWVuKSArIDEsIDAsIDEsIDEsCi0gICAgICAgIDAsCi0gICAgICAgIENvcHlGcm9tUGFyZW50LAot
ICAgICAgICBJbnB1dE91dHB1dCwKLSAgICAgICAgQ29weUZyb21QYXJlbnQsCi0gICAgICAgIENX
T3ZlcnJpZGVSZWRpcmVjdCwKLSAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOwotICAgIFhNYXBX
aW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOwotCi0gICAgd2luZG93QXR0cmlidXRlcy5l
dmVudF9tYXNrID0gU3RydWN0dXJlTm90aWZ5TWFzazsKLSAgICB3aW5kb3dBdHRyaWJ1dGVzLm92
ZXJyaWRlX3JlZGlyZWN0ID0gRmFsc2U7Ci0gICAgbV93aW5kb3cgPSBYQ3JlYXRlV2luZG93KGRp
c3BsYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50V2luZG93LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcHlGcm9tUGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnB1dE91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weUZyb21QYXJlbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXRXZlbnRNYXNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7Ci0gICAgWE1hcFdpbmRvdyhkaXNw
bGF5LCBtX3dpbmRvdyk7Ci0KLSAgICBpZiAoZ2V0V2luZG93SGFzaE1hcCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgZ2RrX3dpbmRvd19hZGRfZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmls
dGVyRnVuYz4oZmlsdGVyWERhbWFnZUV2ZW50KSwgMCk7Ci0gICAgZ2V0V2luZG93SGFzaE1hcCgp
LmFkZChtX3dpbmRvdywgdGhpcyk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBYRXZlbnQg
ZXZlbnQ7Ci0gICAgICAgIFhXaW5kb3dFdmVudChkaXNwbGF5LCBtX3dpbmRvdywgU3RydWN0dXJl
Tm90aWZ5TWFzaywgJmV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT0gTWFwTm90aWZ5
ICYmIGV2ZW50LnhtYXAud2luZG93ID09IG1fd2luZG93KQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dpbmRvdywgTm9FdmVudE1hc2spOwot
ICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgQ29tcG9zaXRl
UmVkaXJlY3RNYW51YWwpOwotICAgIG1fZGFtYWdlID0gWERhbWFnZUNyZWF0ZShkaXNwbGF5LCBt
X3dpbmRvdywgWERhbWFnZVJlcG9ydE5vbkVtcHR5KTsKLX0KLQotUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpCi17Ci0gICAgQVNTRVJUKG1f
ZGFtYWdlKTsKLSAgICBBU1NFUlQobV93aW5kb3cpOwotICAgIEFTU0VSVChtX3BhcmVudFdpbmRv
dyk7Ci0KLSAgICBnZXRXaW5kb3dIYXNoTWFwKCkucmVtb3ZlKG1fd2luZG93KTsKLSAgICBpZiAo
Z2V0V2luZG93SGFzaE1hcCgpLmlzRW1wdHkoKSkKLSAgICAgICAgZ2RrX3dpbmRvd19yZW1vdmVf
ZmlsdGVyKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRmlsdGVyRnVuYz4oZmlsdGVyWERhbWFnZUV2
ZW50KSwgMCk7Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVko
Z2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Ci0gICAgWERhbWFnZURlc3Ryb3koZGlzcGxheSwg
bV9kYW1hZ2UpOwotICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKLSAgICBY
RGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7Ci0gICAgY2xlYW51cFBpeG1h
cEFuZFBpeG1hcFN1cmZhY2UoKTsKLX0KLQotdm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6cmVzaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgRGlzcGxheSogZGlzcGxheSA9
IEdES19ESVNQTEFZX1hESVNQTEFZKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOwotICAgIFhS
ZXNpemVXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7Ci0KLSAgICBYRmx1c2goZGlzcGxheSk7Ci0KLSAgICBpZiAobV9uZWVkc0NvbnRleHQgPT0g
Q3JlYXRlR0xDb250ZXh0KSB7Ci0gICAgICAgIGNvbnRleHQoKS0+d2FpdE5hdGl2ZSgpOwotICAg
ICAgICAvLyBUaGlzIHN3YXAgaXMgYmFzZWQgb24gY29kZSBpbiBDaHJvbWl1bS4gSXQgdHJpZXMg
dG8gd29yay1hcm91bmQgYSBidWcgaW4gdGhlIEludGVsIGRyaXZlcnMKLSAgICAgICAgLy8gd2hl
cmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZl
cnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCi0gICAgICAgIGlmIChjb250ZXh0KCkgPT0gR0xDb250
ZXh0OjpnZXRDdXJyZW50KCkpCi0gICAgICAgICAgICBjb250ZXh0KCktPnN3YXBCdWZmZXJzKCk7
Ci0gICAgfQotCi0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJS
ZXNpemUgPSB0cnVlOwotfQotCi1HTENvbnRleHQqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
Ojpjb250ZXh0KCkKLXsKLSAgICBBU1NFUlQobV9uZWVkc0NvbnRleHQgPT0gQ3JlYXRlR0xDb250
ZXh0KTsKLQotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7Ci0KLSAgICBBU1NFUlQobV93aW5kb3cpOwotICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6
Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhtX3dpbmRvdywgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4
dCgpKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotfQotCi12b2lkIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpCi17Ci0gICAg
aWYgKCFtX3BpeG1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEZyZWVQaXhtYXAoY2Fpcm9f
eGxpYl9zdXJmYWNlX2dldF9kaXNwbGF5KG1fc3VyZmFjZS5nZXQoKSksIG1fcGl4bWFwKTsKLSAg
ICBtX3BpeG1hcCA9IDA7Ci0gICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKLX0KLQotY2Fpcm9fc3Vy
ZmFjZV90KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0
KEd0a1dpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVz
aXplICYmIG1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKLQotICAg
IG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSA9IGZhbHNlOwotCi0gICAgLy8gSXQncyBpbXBv
cnRhbnQgdGhhdCB0aGUgbmV3IHBpeG1hcCBiZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgRGlzcGxh
eSBwb2ludGVyIGFzIHRoZSB0YXJnZXQKLSAgICAvLyB3aWRnZXQgb3IgZWxzZSBkcmF3aW5nIHNw
ZWVkIGNhbiBiZSAxMDB4IHNsb3dlci4KLSAgICBEaXNwbGF5KiBuZXdQaXhtYXBEaXNwbGF5ID0g
R0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKTsKLSAg
ICBQaXhtYXAgbmV3UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobmV3UGl4bWFw
RGlzcGxheSwgbV93aW5kb3cpOwotICAgIGlmICghbmV3UGl4bWFwKSB7Ci0gICAgICAgIGNsZWFu
dXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIFhXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgaWYgKCFYR2V0V2lu
ZG93QXR0cmlidXRlcyhuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdywgJndpbmRvd0F0dHJpYnV0
ZXMpKSB7Ci0gICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0gICAgICAg
IFhGcmVlUGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG5ld1BpeG1hcERpc3BsYXksIG5ld1Bp
eG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dBdHRyaWJ1dGVzLnZpc3VhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0KLSAgICAv
LyBOdmlkaWEgZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIgcmVkaXJlY3RlZCB3aW5kb3cg
cGl4bWFwIGFzeW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJhY3Rpb25zCi0gICAgLy8gb2Yg
YSBzZWNvbmQgYWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMgcmVzaXpp
bmcgKHdoaWNoIGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0ZXMKLSAgICAvLyBwaXhtYXAg
d2luZG93LWJhY2tpbmdzKSwgdGhlIHBpeG1hcCBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVG8g
d29yayBhcm91bmQgdGhpcyBpc3N1ZSwgcGFpbnQgdGhlIG9sZAotICAgIC8vIHBpeG1hcCB0byB0
aGUgbmV3IG9uZSB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0LgotICAgIGlmIChtX3N1cmZhY2Up
IHsKLSAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5l
d1N1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IuZ2V0KCks
IDEsIDEsIDEpOwotICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0gICAgICAgIGNhaXJv
X3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAg
ICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgIH0KLQotICAgIGNsZWFudXBQaXhtYXBB
bmRQaXhtYXBTdXJmYWNlKCk7Ci0gICAgbV9waXhtYXAgPSBuZXdQaXhtYXA7Ci0gICAgbV9zdXJm
YWNlID0gbmV3U3VyZmFjZTsKLQotICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLXZv
aWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhbGxEYW1hZ2VOb3RpZnlDYWxsYmFjaygp
Ci17Ci0gICAgaWYgKG1fZGFtYWdlTm90aWZ5Q2FsbGJhY2spCi0gICAgICAgIG1fZGFtYWdlTm90
aWZ5Q2FsbGJhY2sobV9kYW1hZ2VOb3RpZnlEYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKEdMWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZmMmE0OGIyZWE1YzRhZjY2MDE0MzdkOWY1YzkyMThhNjI0NDBkOTgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2FsaWEg
Uy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmICBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvd19oCi0jZGVmaW5lICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19o
Ci0KLSNpZiBVU0UoR0xYKQotCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBQaXhtYXA7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwotdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIERhbWFnZTsKLXR5cGVkZWYgdm9pZCAoKkRhbWFnZU5vdGlmeUNhbGxiYWNrKSh2b2lk
Kik7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cgewotcHVibGljOgotICAgIGVudW0gR0xDb250ZXh0TmVlZGVkIHsgQ3JlYXRlR0xDb250
ZXh0LCBEb05vdENyZWF0ZUdMQ29udGV4dCB9OwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEdMQ29udGV4dE5l
ZWRlZCA9IENyZWF0ZUdMQ29udGV4dCk7Ci0gICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3coKTsKLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9
Ci0KLSAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKLSAgICBHTENvbnRl
eHQqIGNvbnRleHQoKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZvcldpZGdl
dChHdGtXaWRnZXQqKTsKLSAgICBXaW5kb3cgd2luZG93SWQoKSB7IHJldHVybiBtX3dpbmRvdzsg
fQotICAgIHZvaWQgY2FsbERhbWFnZU5vdGlmeUNhbGxiYWNrKCk7Ci0KLSAgICB2b2lkIHNldERh
bWFnZU5vdGlmeUNhbGxiYWNrKERhbWFnZU5vdGlmeUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBk
YXRhKQotICAgIHsKLSAgICAgICAgbV9kYW1hZ2VOb3RpZnlDYWxsYmFjayA9IGNhbGxiYWNrOwot
ICAgICAgICBtX2RhbWFnZU5vdGlmeURhdGEgPSBkYXRhOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhjb25zdCBJbnRTaXplJiwgR0xDb250ZXh0TmVl
ZGVkKTsKLSAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Ci0KLSAgICBJ
bnRTaXplIG1fc2l6ZTsKLSAgICBXaW5kb3cgbV93aW5kb3c7Ci0gICAgV2luZG93IG1fcGFyZW50
V2luZG93OwotICAgIFBpeG1hcCBtX3BpeG1hcDsKLSAgICBHTENvbnRleHROZWVkZWQgbV9uZWVk
c0NvbnRleHQ7Ci0gICAgT3duUHRyPEdMQ29udGV4dD4gbV9jb250ZXh0OwotICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICB1bnNpZ25lZCBpbnQgbV9wZW5kaW5nUmVz
aXplU291cmNlSWQ7Ci0gICAgYm9vbCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemU7Ci0KLSAg
ICBEYW1hZ2UgbV9kYW1hZ2U7Ci0gICAgRGFtYWdlTm90aWZ5Q2FsbGJhY2sgbV9kYW1hZ2VOb3Rp
ZnlDYWxsYmFjazsKLSAgICB2b2lkKiBtX2RhbWFnZU5vdGlmeURhdGE7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoR0xYKQotCi0jZW5kaWYgLy8gUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZjI3Mjdl
YWUyYzFhZWVjMzdkYThhYTliMGI5ZTA0YzY5Zjk4ZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0KLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
Ci0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiRmlsZUxp
c3QuaCIKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgIkdyYWRpZW50
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmlu
Zy5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9s
RWxlbWVudHMuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgotI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgotI2luY2x1ZGUgIlRpbWVSYW5n
ZXMuaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgPGNtYXRo
PgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3Rr
L2d0ay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIHdvdWxkIGJlIGEgc3RhdGljIG1ldGhvZCwgZXhj
ZXB0IHRoYXQgZm9yd2FyZCBkZWNsYXJpbmcgR1R5cGUgaXMgdHJpY2t5LCBzaW5jZSBpdHMKLS8v
IGRlZmluaXRpb24gZGVwZW5kcyBvbiBpbmNsdWRpbmcgZ2xpYi5oLCBuZWdhdGluZyB0aGUgYmVu
ZWZpdCBvZiB1c2luZyBhIGZvcndhcmQgZGVjbGFyYXRpb24uCi1leHRlcm4gR1JlZlB0cjxHZGtQ
aXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5cGUsIGNvbnN0IGNoYXIqIGljb25O
YW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSk7Ci1leHRlcm4g
R1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVHlw
ZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFyICpm
YWxsYmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGlj
b25TaXplKTsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotI2lmIEVOQUJMRShWSURF
TykKLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2Jq
ZWN0KFJlbmRlck9iamVjdCogbykKLXsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwotICAg
IE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dIb3N0KCkgOiAwOwotICAgIGlm
ICghbWVkaWFOb2RlKQotICAgICAgICBtZWRpYU5vZGUgPSBub2RlOwotICAgIGlmICghbWVkaWFO
b2RlIHx8ICFtZWRpYU5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG1lZGlhTm9kZSktPmlzTWVkaWFFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFCdXR0b25zKCkKLXsKLSAgICBzdGF0aWMg
Ym9vbCBpY29uc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaWNvbnNJbml0aWFsaXpl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtJY29uRmFjdG9yeT4gaWNvbkZh
Y3RvcnkgPSBhZG9wdEdSZWYoZ3RrX2ljb25fZmFjdG9yeV9uZXcoKSk7Ci0gICAgR3RrSWNvblNv
dXJjZSogaWNvblNvdXJjZSA9IGd0a19pY29uX3NvdXJjZV9uZXcoKTsKLSAgICBjb25zdCBjaGFy
KiBpY29uc1tdID0geyAiYXVkaW8tdm9sdW1lLWhpZ2giLCAiYXVkaW8tdm9sdW1lLW11dGVkIiB9
OwotCi0gICAgZ3RrX2ljb25fZmFjdG9yeV9hZGRfZGVmYXVsdChpY29uRmFjdG9yeS5nZXQoKSk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhpY29ucyk7ICsraSkg
ewotICAgICAgICBndGtfaWNvbl9zb3VyY2Vfc2V0X2ljb25fbmFtZShpY29uU291cmNlLCBpY29u
c1tpXSk7Ci0gICAgICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBndGtfaWNvbl9zZXRfbmV3KCk7
Ci0gICAgICAgIGd0a19pY29uX3NldF9hZGRfc291cmNlKGljb25TZXQsIGljb25Tb3VyY2UpOwot
ICAgICAgICBndGtfaWNvbl9mYWN0b3J5X2FkZChpY29uRmFjdG9yeS5nZXQoKSwgaWNvbnNbaV0s
IGljb25TZXQpOwotICAgICAgICBndGtfaWNvbl9zZXRfdW5yZWYoaWNvblNldCk7Ci0gICAgfQot
Ci0gICAgZ3RrX2ljb25fc291cmNlX2ZyZWUoaWNvblNvdXJjZSk7Ci0KLSAgICBpY29uc0luaXRp
YWxpemVkID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5k
ZXJUaGVtZUd0azo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRo
ZW1lR3RrKCkpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhl
bWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJl
bmRlclRoZW1lR3RrOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIHJ0OwotfQotCi1S
ZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGsoKQotICAgIDogbV9wYW5lbENvbG9yKENvbG9y
Ojp3aGl0ZSkKLSAgICAsIG1fc2xpZGVyQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9zbGlk
ZXJUaHVtYkNvbG9yKENvbG9yOjp3aGl0ZSkKLSAgICAsIG1fbWVkaWFJY29uU2l6ZSgxNikKLSAg
ICAsIG1fbWVkaWFTbGlkZXJIZWlnaHQoMTQpCi17Ci0gICAgcGxhdGZvcm1Jbml0KCk7Ci0jaWYg
RU5BQkxFKFZJREVPKQotICAgIGluaXRNZWRpYUNvbG9ycygpOwotICAgIGluaXRNZWRpYUJ1dHRv
bnMoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0
IGFwcGVhcmFuY2UpCi17Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBUZXh0RmllbGRQYXJ0
OgotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAg
IGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgIGNhc2UgQ2hlY2ti
b3hQYXJ0OgotICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJW
ZXJ0aWNhbFBhcnQ6Ci0gICAgY2FzZSBNZWRpYVBsYXlCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVk
aWFWb2x1bWVTbGlkZXJQYXJ0OgotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKLSAgICBj
YXNlIE1lZGlhRW50ZXJGdWxsc2NyZWVuQnV0dG9uUGFydDoKLSAgICBjYXNlIE1lZGlhU2xpZGVy
UGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jp
bmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBzdXBwb3J0
c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGlzRW5hYmxlZChvKTsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKLXsKLSAgICBpZiAoIW8tPmlzQm94
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc3RyYXRlZ3kgaXMg
cG9zc2libHkgaW5jb3JyZWN0IGZvciB0aGUgR1RLKyBwb3J0LgotICAgIGlmIChvLT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0Ci0gICAgICAgIHx8IG8tPnN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3gg
PSB0b1JlbmRlckJveChvKTsKLSAgICAgICAgcmV0dXJuIGJveC0+bWFyZ2luVG9wKCkgKyBib3gt
PmhlaWdodCgpIC0gMjsKLSAgICB9Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5l
UG9zaXRpb24obyk7Ci19Ci0KLS8vIFRoaXMgaXMgdXNlZCBpbiBSZW5kZXJUaGVtZUd0azIgYW5k
IFJlbmRlclRoZW1lR3RrMy4gTm9ybWFsbHksIGl0IHdvdWxkIGJlIGluCi0vLyB0aGUgUmVuZGVy
VGhlbWVHdGsgaGVhZGVyIChwZXJoYXBzIGFzIGEgc3RhdGljIG1ldGhvZCksIGJ1dCB3ZSB3YW50
IHRvIGF2b2lkCi0vLyBoYXZpbmcgdG8gaW5jbHVkZSBHVEsrIGhlYWRlcnMgb25seSBmb3IgdGhl
IEd0a1RleHREaXJlY3Rpb24gZW51bS4KLUd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlv
bihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewot
ICAgIGNhc2UgUlRMOgotICAgICAgICByZXR1cm4gR1RLX1RFWFRfRElSX1JUTDsKLSAgICBjYXNl
IExUUjoKLSAgICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9MVFI7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIEdUS19URVhUX0RJUl9OT05FOwotICAgIH0KLX0KLQotc3RhdGljIEd0a1N0
YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCkKLXsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkK
LSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKLSAgICBpZiAodGhlbWUtPmlz
UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsK
LSAgICBpZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICByZXR1cm4g
R1RLX1NUQVRFX1BSRUxJR0hUOwotCi0gICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7Ci19Ci0K
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNv
bWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5l
LWhlaWdodC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkK
LSAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAg
IC8vIFRoZSB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBp
Z25vcmUgbGluZSBoZWlnaHQuCi0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotCi0gICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIg
cmVuZGVyaW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0g
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkanVzdE1lbnVM
aXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVu
dUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Ci19Ci0KLXN0
YXRpYyB2b2lkIHBhaW50R2RrUGl4YnVmKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
R2RrUGl4YnVmKiBpY29uLCBjb25zdCBJbnRSZWN0JiBpY29uUmVjdCkKLXsKLSAgICBJbnRTaXpl
IGljb25TaXplKGdka19waXhidWZfZ2V0X3dpZHRoKGljb24pLCBnZGtfcGl4YnVmX2dldF9oZWln
aHQoaWNvbikpOwotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBzY2FsZWRJY29uOwotICAgIGlmIChp
Y29uUmVjdC5zaXplKCkgIT0gaWNvblNpemUpIHsKLSAgICAgICAgLy8gV2UgY291bGQgdXNlIGNh
aXJvX3NjYWxlKCkgaGVyZSBidXQgY2Fpcm8vcGl4bWFuIGRvd25zY2FsZSBxdWFsaXR5IGlzIHF1
aXRlIGJhZC4KLSAgICAgICAgc2NhbGVkSWNvbiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX3NjYWxl
X3NpbXBsZShpY29uLCBpY29uUmVjdC53aWR0aCgpLCBpY29uUmVjdC5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfSU5U
RVJQX0JJTElORUFSKSk7Ci0gICAgICAgIGljb24gPSBzY2FsZWRJY29uLmdldCgpOwotICAgIH0K
LQotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0g
ICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4YnVmKGNyLCBp
Y29uLCBpY29uUmVjdC54KCksIGljb25SZWN0LnkoKSk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IpOwot
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEdUSysgKGd0ay9ndGtp
Y29uZmFjdG9yeS5jKQotc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVNZW51ID0gMTY7Ci1z
dGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZVNtYWxsVG9vbGJhciA9IDE4Owotc3RhdGljIGNv
bnN0IGdpbnQgZ3RrSWNvblNpemVCdXR0b24gPSAyMDsKLXN0YXRpYyBjb25zdCBnaW50IGd0a0lj
b25TaXplTGFyZ2VUb29sYmFyID0gMjQ7Ci1zdGF0aWMgY29uc3QgZ2ludCBndGtJY29uU2l6ZURu
ZCA9IDMyOwotc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVEaWFsb2cgPSA0ODsKLQotc3Rh
dGljIEd0a0ljb25TaXplIGdldEljb25TaXplRm9yUGl4ZWxTaXplKGdpbnQgcGl4ZWxTaXplKQot
ewotICAgIGlmIChwaXhlbFNpemUgPCBndGtJY29uU2l6ZVNtYWxsVG9vbGJhcikKLSAgICAgICAg
cmV0dXJuIEdUS19JQ09OX1NJWkVfTUVOVTsKLSAgICBpZiAocGl4ZWxTaXplID49IGd0a0ljb25T
aXplU21hbGxUb29sYmFyICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXplQnV0dG9uKQotICAgICAg
ICByZXR1cm4gR1RLX0lDT05fU0laRV9TTUFMTF9UT09MQkFSOwotICAgIGlmIChwaXhlbFNpemUg
Pj0gZ3RrSWNvblNpemVCdXR0b24gJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVMYXJnZVRvb2xi
YXIpCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0JVVFRPTjsKLSAgICBpZiAocGl4ZWxT
aXplID49IGd0a0ljb25TaXplTGFyZ2VUb29sYmFyICYmIHBpeGVsU2l6ZSA8IGd0a0ljb25TaXpl
RG5kKQotICAgICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9MQVJHRV9UT09MQkFSOwotICAgIGlm
IChwaXhlbFNpemUgPj0gZ3RrSWNvblNpemVEbmQgJiYgcGl4ZWxTaXplIDwgZ3RrSWNvblNpemVE
aWFsb2cpCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0RORDsKLQotICAgIHJldHVybiBH
VEtfSUNPTl9TSVpFX0RJQUxPRzsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkanVzdFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIGksIHJlY3QpOwot
fQotCi1zdGF0aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUpCi17Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFk
ZGluZygpOwotCi0gICAgLy8gR2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6
ZS4KLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKLSAgICBpZiAoZm9udFNp
emUgPCBndGtJY29uU2l6ZU1lbnUpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChm
b250U2l6ZSwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZm9udFNp
emUsIEZpeGVkKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZ2ludCB3aWR0aCA9IDAs
IGhlaWdodCA9IDA7Ci0gICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoZ2V0SWNvblNpemVGb3JQaXhl
bFNpemUoZm9udFNpemUpLCAmd2lkdGgsICZoZWlnaHQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0
LCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUp
OwotfQotCi1zdGF0aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRF
bGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgotICAgIE5vZGUq
IGlucHV0ID0gcmVuZGVyT2JqZWN0LT5ub2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoIWlu
cHV0KQotICAgICAgICBpbnB1dCA9IHJlbmRlck9iamVjdC0+bm9kZSgpOwotICAgIGlmICghaW5w
dXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAg
ICAvLyBJZiBwb3NzaWJsZSBjZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0
aWNhbGx5IGluIHRoZSBwYXJlbnQgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBXZSBhbHNvIGFkZCBv
bmUgcGl4ZWwgaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQg
dXAgZm9yIGJveCBoZWlnaHRzCi0gICAgLy8gdGhhdCBhcmUgZXZlbiwgd2hpY2ggbG9va3MgaW4g
cmVsYXRpb24gdG8gdGhlIGJveCB0ZXh0LgotICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0g
dG9SZW5kZXJCb3goaW5wdXQtPnJlbmRlcmVyKCkpLT5hYnNvbHV0ZUNvbnRlbnRCb3goKTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGRlY29yYXRpb24gc3RheXMgc3F1YXJlIGFuZCB3
aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWlu
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3guaGVpZ2h0
KCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdC54KCksIGlu
cHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gaWNvblNpemUg
KyAxKSAvIDIsIGljb25TaXplLCBpY29uU2l6ZSk7Ci0gICAgcmV0dXJuIHNjYWxlZFJlY3Q7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRlclJl
Y3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAg
ICBpZiAoaWNvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
UmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZ
UEVfRU5UUlksIEdUS19TVE9DS19GSU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0SWNvblNpemVGb3JQaXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOwotICAgIHBhaW50R2RrUGl4
YnVmKHBhaW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAotewotICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJP
YmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBpY29uUmVjdCA9IGNlbnRlclJlY3RWZXJ0aWNh
bGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBpZiAoaWNv
blJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdk
a1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlks
IEdUS19TVE9DS19DTEVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEljb25T
aXplRm9yUGl4ZWxTaXplKHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBwYWludEdka1BpeGJ1ZihwYWlu
dEluZm8uY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBX
ZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFj
dGl2ZSwgdW5mb3J0dW5hdGVseS4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAg
ICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHJlY3QpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBU
aGUgb3RoZXIgcGFpbnQgbWV0aG9kcyBkb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgcGFpbnRp
bmcgaXMgZGlzYWJsZWQgYmVjYXVzZSBSZW5kZXJUaGVtZSBhbHJlYWR5IGNoZWNrcyBpdAotICAg
IC8vIGJlZm9yZSBjYWxsaW5nIHRoZW0sIGJ1dCBwYWludENhcHNMb2NrSW5kaWNhdG9yKCkgaXMg
Y2FsbGVkIGJ5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSB3aGljaCBkb2Vzbid0IGNoZWNr
IGl0LgotICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGludCBpY29uU2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRT
dG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfQ0FQU19MT0NL
X1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIGdldEljb25TaXplRm9yUGl4ZWxTaXplKGljb25TaXplKSk7Ci0KLSAgICAvLyBP
bmx5IHJlLXNjYWxlIHRoZSBpY29uIHdoZW4gaXQncyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0g
aWNvbiBzaXplLgotICAgIGlmIChpY29uU2l6ZSA+PSBndGtJY29uU2l6ZU1lbnUpCi0gICAgICAg
IGljb25TaXplID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24uZ2V0KCkpOwotCi0gICAgLy8g
R1RLKyBsb2NhdGVzIHRoZSBpY29uIHJpZ2h0IGFsaWduZWQgaW4gdGhlIGVudHJ5LiBUaGUgZ2l2
ZW4gcmVjdGFuZ2xlIGlzIGFscmVhZHkKLSAgICAvLyBjZW50ZXJlZCB2ZXJ0aWNhbGx5IGJ5IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS4KLSAgICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgp
ICsgcmVjdC53aWR0aCgpIC0gaWNvblNpemUsCi0gICAgICAgICAgICAgICAgICAgICByZWN0Lnko
KSArIChyZWN0LmhlaWdodCgpIC0gaWNvblNpemUpIC8gMiwKLSAgICAgICAgICAgICAgICAgICAg
IGljb25TaXplLCBpY29uU2l6ZSk7Ci0gICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRl
eHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNl
dEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lR3RrOjpjYXJldEJs
aW5rSW50ZXJ2YWwoKSBjb25zdAotewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19z
ZXR0aW5nc19nZXRfZGVmYXVsdCgpOwotCi0gICAgZ2Jvb2xlYW4gc2hvdWxkQmxpbms7Ci0gICAg
Z2ludCB0aW1lOwotCi0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWN1cnNvci1ibGlu
ayIsICZzaG91bGRCbGluaywgImd0ay1jdXJzb3ItYmxpbmstdGltZSIsICZ0aW1lLCBOVUxMKTsK
LQotICAgIGlmICghc2hvdWxkQmxpbmspCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IHRpbWUgLyAyMDAwLjsKLX0KLQotZG91YmxlIFJlbmRlclRoZW1lR3RrOjpnZXRTY3JlZW5EUEko
KQotewotICAgIC8vIEZJWE1FOiBSZWFsbHkgdGhpcyBzaG91bGQgYmUgdGhlIHdpZGdldCdzIHNj
cmVlbi4KLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsK
LSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJuIDk2OyAvLyBEZWZhdWx0IHRvIDk2IERQ
SS4KLQotICAgIGZsb2F0IGRwaSA9IGdka19zY3JlZW5fZ2V0X3Jlc29sdXRpb24oc2NyZWVuKTsK
LSAgICBpZiAoZHBpIDw9IDApCi0gICAgICAgIHJldHVybiA5NjsKLSAgICByZXR1cm4gZHBpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Gb250KGludCwgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0g
Z3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVGhpcyB3aWxsIGJlIGEgZm9udCBzZWxlY3Rpb24gc3RyaW5nIGxp
a2UgIlNhbnMgMTAiIHNvIHdlIGNhbm5vdCB1c2UgaXQgYXMgdGhlIGZhbWlseSBuYW1lLgotICAg
IEdPd25QdHI8Z2NoYXI+IGZvbnROYW1lOwotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0
ay1mb250LW5hbWUiLCAmZm9udE5hbWUub3V0UHRyKCksIE5VTEwpOwotCi0gICAgUGFuZ29Gb250
RGVzY3JpcHRpb24qIHBhbmdvRGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2Zy
b21fc3RyaW5nKGZvbnROYW1lLmdldCgpKTsKLSAgICBpZiAoIXBhbmdvRGVzY3JpcHRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZh
bWlseShwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkocGFuZ29EZXNjcmlwdGlvbikp
OwotCi0gICAgaW50IHNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKHBhbmdv
RGVzY3JpcHRpb24pIC8gUEFOR09fU0NBTEU7Ci0gICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIGZv
bnQgaXMgaW4gcG9pbnRzLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzLgotICAgIGlm
ICghcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZV9pc19hYnNvbHV0ZShwYW5nb0Rlc2Ny
aXB0aW9uKSkKLSAgICAgICAgc2l6ZSA9IHNpemUgKiAoZ2V0U2NyZWVuRFBJKCkgLyA3Mi4wKTsK
LQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJdGFsaWMoZmFsc2UpOwotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShwYW5n
b0Rlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Db2xvcnNE
aWRDaGFuZ2UoKQotewotI2lmIEVOQUJMRShWSURFTykKLSAgICBpbml0TWVkaWFDb2xvcnMoKTsK
LSNlbmRpZgotICAgIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwotfQot
Ci0jaWYgRU5BQkxFKFZJREVPKQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpleHRyYU1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNHdGtV
c2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc0d0a1VzZXJBZ2VudFN0eWxl
U2hlZXQpKTsKLX0KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLVN0cmluZyBSZW5kZXJU
aGVtZUd0azo6ZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24o
UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hh
ciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKQotewotICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54
KCkgKyAocmVjdC53aWR0aCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIsCi0gICAgICAgICAgICAg
ICAgICAgICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIs
Ci0gICAgICAgICAgICAgICAgICAgICBtX21lZGlhSWNvblNpemUsIG1fbWVkaWFJY29uU2l6ZSk7
Ci0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBnZXRTdG9ja1N5bWJvbGljSWNvbkZvcldp
ZGdldFR5cGUoR1RLX1RZUEVfQ09OVEFJTkVSLCBzeW1ib2xpY0ljb25OYW1lLCBmYWxsYmFja1N0
b2NrSWNvbk5hbWUsCi0gICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSksIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29u
UmVjdC53aWR0aCgpKTsKLSAgICBwYWludEdka1BpeGJ1Zihjb250ZXh0LCBpY29uLmdldCgpLCBp
Y29uUmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpo
YXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKLXsK
LSAgICByZXR1cm4gKHBhcnQgIT0gTWVkaWFNdXRlQnV0dG9uUGFydCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCAidmlldy1mdWxsc2NyZWVuLXN5bWJvbGljIiwgR1RLX1NUT0NLX0ZV
TExTQ1JFRU4pOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRv
bihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50ID0gZ2V0TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChyZW5kZXJPYmplY3QpOwotICAg
IGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG11
dGVkID0gbWVkaWFFbGVtZW50LT5tdXRlZCgpOwotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9u
KHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsCi0gICAgICAgIG11dGVkID8g
ImF1ZGlvLXZvbHVtZS1tdXRlZC1zeW1ib2xpYyIgOiAiYXVkaW8tdm9sdW1lLWhpZ2gtc3ltYm9s
aWMiLAotICAgICAgICBtdXRlZCA/ICJhdWRpby12b2x1bWUtbXV0ZWQiIDogImF1ZGlvLXZvbHVt
ZS1oaWdoIik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9u
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyT2JqZWN0LT5u
b2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFu
b2RlLT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYm9vbCBwbGF5ID0gbWVkaWFDb250cm9sRWxlbWVudFR5cGUobm9kZSkgPT0gTWVkaWFQbGF5
QnV0dG9uOwotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QsCi0gICAgICAgIHBsYXkgPyAibWVkaWEtcGxheWJhY2stc3RhcnQt
c3ltYm9saWMiIDogIm1lZGlhLXBsYXliYWNrLXBhdXNlLXN5bWJvbGljIiwKLSAgICAgICAgcGxh
eSA/IEdUS19TVE9DS19NRURJQV9QTEFZIDogR1RLX1NUT0NLX01FRElBX1BBVVNFKTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1zeW1ib2xpYyIsIEdU
S19TVE9DS19NRURJQV9SRVdJTkQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBw
YWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsICJt
ZWRpYS1zZWVrLWZvcndhcmQtc3ltYm9saWMiLCBHVEtfU1RPQ0tfTUVESUFfRk9SV0FSRCk7Ci19
Ci0KLXN0YXRpYyBSb3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQotewotICAgIHJldHVybiBSb3VuZGVkUmVjdDo6UmFkaWkoCi0gICAgICAg
IEludFNpemUoc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCks
IHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAg
ICAgIEludFNpemUoc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1
ZSgpLCBzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwK
LSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLndpZHRoKCku
aW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRW
YWx1ZSgpKSwKLSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMo
KS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhl
aWdodCgpLmludFZhbHVlKCkpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0OwotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShOb1N0cm9rZSk7Ci0KLSAgICBmbG9hdCBtZWRpYUR1cmF0aW9uID0gbWVkaWFFbGVt
ZW50LT5kdXJhdGlvbigpOwotICAgIGZsb2F0IHRvdGFsVHJhY2tXaWR0aCA9IHIud2lkdGgoKTsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOwotICAgIFJlZlB0cjxUaW1lUmFu
Z2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwotICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7
Ci0gICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9SRV9F
WENFUFRJT04pOwotICAgICAgICBmbG9hdCBlbmQgPSB0aW1lUmFuZ2VzLT5lbmQoaW5kZXgsIElH
Tk9SRV9FWENFUFRJT04pOwotICAgICAgICBmbG9hdCBzdGFydFJhdGlvID0gc3RhcnQgLyBtZWRp
YUR1cmF0aW9uOwotICAgICAgICBmbG9hdCBsZW5ndGhSYXRpbyA9IChlbmQgLSBzdGFydCkgLyBt
ZWRpYUR1cmF0aW9uOwotICAgICAgICBpZiAoIWxlbmd0aFJhdGlvKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgSW50UmVjdCByYW5nZVJlY3Qocik7Ci0gICAgICAgIHJhbmdlUmVj
dC5zZXRXaWR0aChsZW5ndGhSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCk7Ci0gICAgICAgIGlmIChp
bmRleCkKLSAgICAgICAgICAgIHJhbmdlUmVjdC5tb3ZlKHN0YXJ0UmF0aW8gKiB0b3RhbFRyYWNr
V2lkdGgsIDApOwotICAgICAgICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QoUm91bmRlZFJlY3Qo
cmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5m
aWxsUm91bmRlZFJlY3QoUm91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUp
KSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUt
PmNvbG9yU3BhY2UoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7Ci0gICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZmxvYXQgdm9sdW1lID0g
bWVkaWFFbGVtZW50LT52b2x1bWUoKTsKLSAgICBpZiAoIXZvbHVtZSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dDsKLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9T
dHJva2UpOwotCi0gICAgaW50IHJlY3RIZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAgIGZsb2F0
IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZvbHVtZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7Ci0gICAgSW50UmVjdCB2b2x1bWVSZWN0KHJlY3Qp
OwotICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0gdHJhY2tIZWlnaHQpOwotICAg
IHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQpKTsKLQotICAgIGNvbnRleHQt
PmZpbGxSb3VuZGVkUmVjdChSb3VuZGVkUmVjdCh2b2x1bWVSZWN0LCBib3JkZXJSYWRpaUZyb21T
dHlsZShzdHlsZSkpLAotICAgICAgICBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJu
IHBhaW50TWVkaWFTbGlkZXJUaHVtYihyZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci19
Ci0KLVN0cmluZyBSZW5kZXJUaGVtZUd0azo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1l
KGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4g
Zm9ybWF0TWVkaWFDb250cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRp
YUNvbnRyb2xzVGltZShkdXJhdGlvbik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLXZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhu
dWxscHRyKTsKLX0KLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKLXN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBY3Rpdml0
eUJsb2NrcyA9IDU7Ci1zdGF0aWMgY29uc3QgaW50IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzID0g
MTA7Ci1zdGF0aWMgY29uc3QgZG91YmxlIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgPSAwLjEy
NTsKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHByb2dyZXNzQW5p
bWF0aW9uSW50ZXJ2YWw7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgKiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyAqIDI7
IC8vICIyIiBmb3IgYmFjayBhbmQgZm9ydGg7Ci19Ci0KLUludFJlY3QgUmVuZGVyVGhlbWVHdGs6
OmNhbGN1bGF0ZVByb2dyZXNzUmVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3Qg
SW50UmVjdCYgZnVsbEJhclJlY3QpCi17Ci0gICAgSW50UmVjdCBwcm9ncmVzc1JlY3QoZnVsbEJh
clJlY3QpOwotICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJv
Z3Jlc3MocmVuZGVyT2JqZWN0KTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5h
dGUoKSkgewotICAgICAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgp
ICogcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7Ci0gICAgICAgIGlmIChyZW5kZXJPYmplY3Qt
PnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgICAgIHByb2dyZXNzUmVjdC5z
ZXRYKHByb2dyZXNzUmVjdC54KCkgKyBwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzV2lk
dGgpOwotICAgICAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgocHJvZ3Jlc3NXaWR0aCk7Ci0gICAg
ICAgIHJldHVybiBwcm9ncmVzc1JlY3Q7Ci0gICAgfQotCi0gICAgZG91YmxlIGFuaW1hdGlvblBy
b2dyZXNzID0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCk7Ci0KLSAgICAvLyBO
ZXZlciBsZXQgdGhlIHByb2dyZXNzIHJlY3Qgc2hyaW5rIHNtYWxsZXIgdGhhbiAyIHBpeGVscy4K
LSAgICBpbnQgbmV3V2lkdGggPSBtYXgoMiwgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLyBwcm9ncmVz
c0FjdGl2aXR5QmxvY2tzKTsKLSAgICBpbnQgbW92YWJsZVdpZHRoID0gcHJvZ3Jlc3NSZWN0Lndp
ZHRoKCkgLSBuZXdXaWR0aDsKLSAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgobmV3V2lkdGgpOwot
Ci0gICAgLy8gV2Ugd2FudCB0aGUgZmlyc3QgMC41IHVuaXRzIG9mIHRoZSBhbmltYXRpb24gcHJv
Z3Jlc3MgdG8gcmVwcmVzZW50IHRoZQotICAgIC8vIGZvcndhcmQgbW90aW9uIGFuZCB0aGUgc2Vj
b25kIDAuNSB1bml0cyB0byByZXByZXNlbnQgdGhlIGJhY2t3YXJkIG1vdGlvbiwKLSAgICAvLyB0
aHVzIHdlIG11bHRpcGx5IGJ5IHR3byBoZXJlIHRvIGdldCB0aGUgZnVsbCBzd2VlcCBvZiB0aGUg
cHJvZ3Jlc3MgYmFyIHdpdGgKLSAgICAvLyBlYWNoIGRpcmVjdGlvbi4KLSAgICBpZiAoYW5pbWF0
aW9uUHJvZ3Jlc3MgPCAwLjUpCi0gICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVj
dC54KCkgKyAoYW5pbWF0aW9uUHJvZ3Jlc3MgKiAyICogbW92YWJsZVdpZHRoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgKCgxLjAgLSBh
bmltYXRpb25Qcm9ncmVzcykgKiAyICogbW92YWJsZVdpZHRoKSk7Ci0gICAgcmV0dXJuIHByb2dy
ZXNzUmVjdDsKLX0KLSNlbmRpZgotCi1TdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmZpbGVMaXN0TmFt
ZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiBmaWxlTGlzdCwgY29uc3QgRm9udCYgZm9udCwgaW50
IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdAotewotICAgIGlmICh3aWR0
aCA8PSAwKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoZmlsZUxpc3QtPmxl
bmd0aCgpID4gMSkKLSAgICAgICAgcmV0dXJuIFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0
ZShtdWx0aXBsZUZpbGVVcGxvYWRUZXh0KGZpbGVMaXN0LT5sZW5ndGgoKSksIHdpZHRoLCBmb250
LCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MpOwotCi0gICAgU3RyaW5nIHN0
cmluZzsKLSAgICBpZiAoZmlsZUxpc3QtPmxlbmd0aCgpKQotICAgICAgICBzdHJpbmcgPSBwYXRo
R2V0RmlsZU5hbWUoZmlsZUxpc3QtPml0ZW0oMCktPnBhdGgoKSk7Ci0gICAgZWxzZSBpZiAobXVs
dGlwbGVGaWxlc0FsbG93ZWQpCi0gICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVzU2Vs
ZWN0ZWRMYWJlbCgpOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmls
ZVNlbGVjdGVkTGFiZWwoKTsKLQotICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRy
dW5jYXRlKHN0cmluZywgd2lkdGgsIGZvbnQsIFN0cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRp
bmdIYWNrcyk7Ci19Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLUludFNpemUgUmVu
ZGVyVGhlbWVHdGs6OnNsaWRlclRpY2tTaXplKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byBzZXQgdGhpcyB0byB0aGUgc2l6ZSBvZiBvbmUgdGljayBtYXJrLgotICAgIHJldHVy
biBJbnRTaXplKDAsIDApOwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnNsaWRlclRpY2tPZmZz
ZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNl
dCB0aGlzIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGljayBtYXJrcy4KLSAgICByZXR1cm4gMDsK
LX0KLSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVuZGVyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTU4MDgwMTU3OWYxZjI0ZjBj
NzZlODRlYTYxZGQzN2QzN2M3OTYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5o
CisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgUmVuZGVyVGhlbWVHdGtfaAotI2RlZmluZSBSZW5kZXJUaGVtZUd0
a19oCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgX0dka0NvbG9ybWFwIEdka0NvbG9ybWFwOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlclRoZW1lR3RrIDogcHVibGljIFJlbmRl
clRoZW1lIHsKLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVHdGsoKTsKLSAgICB2aXJ0dWFsIH5S
ZW5kZXJUaGVtZUd0aygpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVy
VGhlbWU+IGNyZWF0ZSgpOwotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdz
IGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgLy8gQSBtZXRo
b2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93
IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRz
KGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotCi0gICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBh
c2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3Qq
LCBJbnRSZWN0Jik7Ci0KLSAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBv
c2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9sLiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBh
IGJhc2VsaW5lCi0gICAgLy8gcG9zaXRpb24gY2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWlu
aW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1w
bGVzIG9mCi0gICAgLy8gY29udHJvbHMgdGhhdCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLQotICAg
IC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rpb24gY29sb3IuCi0gICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIC8vIExpc3QgQm94IHNlbGVjdGlvbiBjb2xvcgot
ICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgZG91
YmxlIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQ29sb3JzRGlkQ2hhbmdlKCk7Ci0KLSAgICAvLyBTeXN0ZW0gZm9udHMgYW5kIGNvbG9ycy4K
LSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
KSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5U3BhY2VPclJldHVybigpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KLQotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0
dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBm
bG9hdCBkdXJhdGlvbikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAg
dmlydHVhbCBTdHJpbmcgZXh0cmFGdWxsU2NyZWVuU3R5bGVTaGVldCgpOwotI2VuZGlmCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIC8vIFJldHVybnMgc2l6ZSBv
ZiBvbmUgc2xpZGVyIHRpY2sgbWFyayBmb3IgYSBob3Jpem9udGFsIHRyYWNrLgotICAgIC8vIEZv
ciB2ZXJ0aWNhbCB0cmFja3Mgd2Ugcm90YXRlIGl0IGFuZCB1c2UgaXQuIGkuZS4gV2lkdGggaXMg
YWx3YXlzIGxlbmd0aCBhbG9uZyB0aGUgdHJhY2suCi0gICAgdmlydHVhbCBJbnRTaXplIHNsaWRl
clRpY2tTaXplKCkgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyB0aGUgZGlzdGFuY2Ugb2Ygc2xpZGVy
IHRpY2sgb3JpZ2luIGZyb20gdGhlIHNsaWRlciB0cmFjayBjZW50ZXIuCi0gICAgdmlydHVhbCBp
bnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0OwotI2VuZGlmCi0KLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1dpZGdldCogZ3RrQ29udGFpbmVyKCkgY29u
c3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtFbnRyeSgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3Rr
VlNjcm9sbGJhcigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrSFNjcm9sbGJhcigpIGNvbnN0
OwotICAgIHN0YXRpYyB2b2lkIGdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQsIGludCYg
aW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5nKTsKLSNlbHNlCi0gICAgR3RrU3R5
bGVDb250ZXh0KiBndGtTY3JvbGxiYXJTdHlsZSgpOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50
UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFy
ZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAg
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAv
LyBUaGUgTWFjIHBvcnQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB0aGUgIm1lbnUgbGlzdCIgYW5k
IHRoZSAibWVudSBsaXN0IGJ1dHRvbi4iCi0gICAgLy8gVGhlIGZvcm1lciBpcyB1c2VkIHdoZW4g
YSBtZW51IGxpc3QgYnV0dG9uIGhhcyBiZWVuIHN0eWxlZC4gVGhpcyBpcyB1c2VkIHRvIGVuc3Vy
ZQotICAgIC8vIEFxdWEgdGhlbWVkIGNvbnRyb2xzIHdoZW5ldmVyIHBvc3NpYmxlLiBXZSBhbHdh
eXMgd2FudCB0byB1c2UgR1RLKyB0aGVtaW5nLCBzbwotICAgIC8vIHdlIGRvbid0IG1haW50YWlu
IHRoaXMgZGlmZmVyZW50aWF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci0gICAgdm9pZCBpbml0TWVkaWFDb2xvcnMoKTsKLSAgICB2b2lkIGluaXRNZWRpYUJ1dHRvbnMo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRy
b2xQYXJ0KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFN
dXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRp
YVZvbHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJU
cmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0gICAg
dmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi1wcml2YXRlOgotICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29u
c3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3QgT1ZF
UlJJREU7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRl
eHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUqKTsKLSAgICBzdGF0aWMgZG91YmxlIGdldFNjcmVl
bkRQSSgpOwotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIGJvb2wgcGFpbnRNZWRpYUJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgY2hh
ciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKTsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgc3RhdGljIEludFJl
Y3QgY2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsK
LSNlbmRpZgotCi0gICAgbXV0YWJsZSBDb2xvciBtX3BhbmVsQ29sb3I7Ci0gICAgbXV0YWJsZSBD
b2xvciBtX3NsaWRlckNvbG9yOwotICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJUaHVtYkNvbG9y
OwotICAgIGNvbnN0IGludCBtX21lZGlhSWNvblNpemU7Ci0gICAgY29uc3QgaW50IG1fbWVkaWFT
bGlkZXJIZWlnaHQ7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIHZvaWQgc2V0dXBX
aWRnZXRBbmRBZGRUb0NvbnRhaW5lcihHdGtXaWRnZXQqLCBHdGtXaWRnZXQqKSBjb25zdDsKLSAg
ICB2b2lkIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRDb21i
b0JveFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0
LCBpbnQmIGJvdHRvbSkgY29uc3Q7Ci0gICAgaW50IGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgo
KSBjb25zdDsKLSAgICBpbnQgY29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
LQotICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtU
cmVlVmlldygpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrVlNjYWxlKCkgY29uc3Q7Ci0gICAg
R3RrV2lkZ2V0KiBndGtIU2NhbGUoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1JhZGlvQnV0
dG9uKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtDaGVja0J1dHRvbigpIGNvbnN0OwotICAg
IEd0a1dpZGdldCogZ3RrUHJvZ3Jlc3NCYXIoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0Nv
bWJvQm94KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtDb21ib0JveEJ1dHRvbigpIGNvbnN0
OwotICAgIEd0a1dpZGdldCogZ3RrQ29tYm9Cb3hBcnJvdygpIGNvbnN0OwotICAgIEd0a1dpZGdl
dCogZ3RrQ29tYm9Cb3hTZXBhcmF0b3IoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1NwaW5C
dXR0b24oKSBjb25zdDsKLQotICAgIEdka0NvbG9ybWFwKiBtX2NvbG9ybWFwOwotICAgIG11dGFi
bGUgR3RrV2lkZ2V0KiBtX2d0a1dpbmRvdzsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtD
b250YWluZXI7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQnV0dG9uOwotICAgIG11dGFi
bGUgR3RrV2lkZ2V0KiBtX2d0a0VudHJ5OwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1Ry
ZWVWaWV3OwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1ZTY2FsZTsKLSAgICBtdXRhYmxl
IEd0a1dpZGdldCogbV9ndGtIU2NhbGU7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrUmFk
aW9CdXR0b247Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ2hlY2tCdXR0b247Ci0gICAg
bXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrUHJvZ3Jlc3NCYXI7Ci0gICAgbXV0YWJsZSBHdGtXaWRn
ZXQqIG1fZ3RrQ29tYm9Cb3g7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29tYm9Cb3hC
dXR0b247Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29tYm9Cb3hBcnJvdzsKLSAgICBt
dXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb21ib0JveFNlcGFyYXRvcjsKLSAgICBtdXRhYmxlIEd0
a1dpZGdldCogbV9ndGtWU2Nyb2xsYmFyOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0hT
Y3JvbGxiYXI7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrU3BpbkJ1dHRvbjsKLSAgICBi
b29sIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXA7Ci0gICAgZnJpZW5kIGNsYXNzIFdpZGdl
dFJlbmRlcmluZ0NvbnRleHQ7Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFJlbmRlclRo
ZW1lR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0azIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
Mi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyM2EwNDg1ZTdjZDE2OGU5YWE3
ZTI1MWY1OGM0MTFkNjM3ODViMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUaGVtZUd0ay5oIgotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLQotLy8gV2UgbmVlZCB0
aGlzIHRvIGFsbG93IGJ1aWxkaW5nIHdoaWxlIHVzaW5nIEdUS19XSURHRVRfU0VUX0ZMQUdTLiBJ
dCdzIGRlcHJlY2F0ZWQKLS8vIGJ1dCBzb21lIHRoZW1lIGVuZ2luZXMgcmVxdWlyZSBpdCB0byBl
bnN1cmUgcHJvcGVyIHJlbmRlcmluZyBvZiBmb2N1cyBpbmRpY2F0b3JzLgotI3VuZGVmIEdUS19E
SVNBQkxFX0RFUFJFQ0FURUQKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Rr
VmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCi0jaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgotI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIgotI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdo
ZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMu
Ci1zdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OwotCi0vLyBUaGlz
IGlzIG5vdCBhIHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcg
R1RLKyBoZWFkZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCi1leHRlcm4gR3RrVGV4dERpcmVjdGlv
biBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOwotCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSB0
cnVlOwotICAgIG1fZ3RrV2luZG93ID0gMDsKLSAgICBtX2d0a0NvbnRhaW5lciA9IDA7Ci0gICAg
bV9ndGtCdXR0b24gPSAwOwotICAgIG1fZ3RrRW50cnkgPSAwOwotICAgIG1fZ3RrVHJlZVZpZXcg
PSAwOwotICAgIG1fZ3RrVlNjYWxlID0gMDsKLSAgICBtX2d0a0hTY2FsZSA9IDA7Ci0gICAgbV9n
dGtSYWRpb0J1dHRvbiA9IDA7Ci0gICAgbV9ndGtDaGVja0J1dHRvbiA9IDA7Ci0gICAgbV9ndGtQ
cm9ncmVzc0JhciA9IDA7Ci0gICAgbV9ndGtDb21ib0JveCA9IDA7Ci0gICAgbV9ndGtDb21ib0Jv
eEJ1dHRvbiA9IDA7Ci0gICAgbV9ndGtDb21ib0JveEFycm93ID0gMDsKLSAgICBtX2d0a0NvbWJv
Qm94U2VwYXJhdG9yID0gMDsKLSAgICBtX2d0a1ZTY3JvbGxiYXIgPSAwOwotICAgIG1fZ3RrSFNj
cm9sbGJhciA9IDA7Ci0gICAgbV9ndGtTcGluQnV0dG9uID0gMDsKLQotICAgIG1fY29sb3JtYXAg
PSBnZGtfc2NyZWVuX2dldF9yZ2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7
Ci0gICAgaWYgKCFtX2NvbG9ybWFwKSB7Ci0gICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29s
b3JtYXAgPSBmYWxzZTsKLSAgICAgICAgbV9jb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1
bHRfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICB9Ci19Ci0KLVJlbmRl
clRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQotewotICAgIGlmIChtX2d0a1dpbmRvdykKLSAg
ICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsKLX0KLQotI2lmIEVOQUJMRShW
SURFTykKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCi17Ci0gICAgR3Rr
U3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChndGtDb250YWlu
ZXIoKSkpOwotICAgIG1fcGFuZWxDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXTsK
LSAgICBtX3NsaWRlckNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9BQ1RJVkVdOwotICAgIG1f
c2xpZGVyVGh1bWJDb2xvciA9IHN0eWxlLT5iZ1tHVEtfU1RBVEVfU0VMRUNURURdOwotfQotI2Vu
ZGlmCi0KLXN0YXRpYyB2b2lkIGFkanVzdFJlY3RGb3JGb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwg
SW50UmVjdCYgcmVjdCwgYm9vbCBpZ25vcmVJbnRlcmlvckZvY3VzUHJvcGVydHkgPSBmYWxzZSkK
LXsKLSAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgIGdib29sZWFuIGludGVyaW9y
Rm9jdXMgPSAwOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1cywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKLSAg
ICBpZiAoIWlnbm9yZUludGVyaW9yRm9jdXNQcm9wZXJ0eSAmJiBpbnRlcmlvckZvY3VzKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0LCBJbnRSZWN0JiByZWN0KQotewotICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBzd2l0Y2ggKHBh
cnQpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBjYXNlIFJhZGlvUGFydDogewotICAg
ICAgICAvLyBXZSBpZ25vcmUgdGhlIGludGVyaW9yIGZvY3VzIHByb3BlcnR5IGFuZCBhbHdheXMg
ZXhwYW5kIHRoZSBmb2N1cyByZWN0LiBJbiBHVEsrLCB0aGUKLSAgICAgICAgLy8gZm9jdXMgaW5k
aWNhdG9yIGlzIHVzdWFsbHkgb24gdGhlIHRleHQgbmV4dCB0byBhIGNoZWNrYm94IG9yIHJhZGlv
IGJ1dHRvbiwgYnV0IHRoYXQgZG9lc24ndAotICAgICAgICAvLyBoYXBwZW4gaW4gV2ViQ29yZS4g
QnkgZXhwYW5kaW5nIHRoZSBmb2N1cyByZWN0YW5nbGUgdW5jb25kaXRpb25hbGx5IHdlIGluY3Jl
YXNlIGl0cyBwcm9taW5lbmNlLgotICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMocGFydCA9PSBD
aGVja2JveFBhcnQgPyBndGtDaGVja0J1dHRvbigpIDogZ3RrUmFkaW9CdXR0b24oKSwgcmVjdCwg
dHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBJbm5lclNwaW5CdXR0b25Q
YXJ0OgotICAgICAgICAvLyBTZWUgcGFpbnRJbm5lclNwaW5CdXR0b24gZm9yIGFuIGV4cGxhbmF0
aW9uIG9mIHdoeSB3ZSBleHBhbmQgdGhlIHBhaW50aW5nIHJlY3QuCi0gICAgICAgIHJlY3QuaW5m
bGF0ZVkoMik7Ci0gICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpICsgMik7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotc3RhdGljIEd0a1N0YXRlVHlw
ZSBnZXRHdGtTdGF0ZVR5cGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKLXsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQob2JqZWN0KSB8fCB0aGVtZS0+aXNS
ZWFkT25seUNvbnRyb2wob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJ
VElWRTsKLSAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChvYmplY3QpKQotICAgICAgICByZXR1cm4g
R1RLX1NUQVRFX0FDVElWRTsKLSAgICBpZiAodGhlbWUtPmlzSG92ZXJlZChvYmplY3QpKQotICAg
ICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hUOwotICAgIHJldHVybiBHVEtfU1RBVEVfTk9S
TUFMOwotfQotCi1zdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3Rr
KiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICAv
LyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4n
dCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z2ludCBpbmRpY2F0b3JTaXplOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwgImlu
ZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOwotICAgIGlmIChzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7Ci0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQp
KTsKLX0KLQotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICAvLyBXZSBkbyBub3QgY2Fs
bCBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlIGhlcmUsIGJlY2F1c2Ugc29tZSB0aGVtZXMg
YmVnaW4gYSBzZXJpZXMgb2YKLSAgICAvLyBhbmltYXRpb24gZnJhbWVzIGluIGEgInRvZ2dsZWQi
IHNpZ25hbCBoYW5kbGVyLiBUaGlzIHB1dHMgc29tZSBjaGVja2JveGVzIGluIGEgaGFsZi13YXkK
LSAgICAvLyBjaGVja2VkIHN0YXRlLiBFdmVyeSBHVEsrIHRoZW1lIEkgdGVzdGVkIG1lcmVseSBs
b29rcyBhdCB0aGUgc2hhZG93IHR5cGUgKGFuZCBub3QgdGhlCi0gICAgLy8gJ2FjdGl2ZScgcHJv
cGVydHkpIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBkcmF3IHRoZSBjaGVjay4KLSAg
ICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUod2lkZ2V0LCB0aGVtZS0+aXNFbmFibGVkKHJlbmRl
ck9iamVjdCkgJiYgIXRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKTsKLSAg
ICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIGJvb2wgaW5kZXRlcm1pbmF0
ZSA9IHRoZW1lLT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KTsKLSAgICBndGtfdG9nZ2xl
X2J1dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9OKHdpZGdldCksIGluZGV0
ZXJtaW5hdGUpOwotCi0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19P
VVQ7Ci0gICAgaWYgKGluZGV0ZXJtaW5hdGUpIC8vIFRoaXMgb3JpZ2luYXRlcyBmcm9tIHRoZSBN
b3ppbGxhIGNvZGUuCi0gICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hFRF9JTjsK
LSAgICBlbHNlIGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIHNo
YWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOwotCi0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3
aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgSW50UmVjdCBidXR0b25SZWN0
KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKLSAgICBHdGtTdGF0ZVR5cGUgdG9nZ2xlU3RhdGUg
PSBnZXRHdGtTdGF0ZVR5cGUodGhlbWUsIHJlbmRlck9iamVjdCk7Ci0gICAgY29uc3QgY2hhciog
ZGV0YWlsID0gMDsKLSAgICBpZiAoR1RLX0lTX1JBRElPX0JVVFRPTih3aWRnZXQpKSB7Ci0gICAg
ICAgIGRldGFpbCA9ICJyYWRpb2J1dHRvbiI7Ci0gICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFp
bnRPcHRpb24oYnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dnbGVTdGF0ZSwgc2hhZG93VHlwZSwgZGV0
YWlsKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZXRhaWwgPSAiY2hlY2tidXR0b24iOwotICAg
ICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Q2hlY2soYnV0dG9uUmVjdCwgd2lkZ2V0LCB0b2dn
bGVTdGF0ZSwgc2hhZG93VHlwZSwgZGV0YWlsKTsKLSAgICB9Ci0KLSAgICBpZiAodGhlbWUtPmlz
Rm9jdXNlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIEludFJlY3QgZm9jdXNSZWN0KGJ1dHRv
blJlY3QpOwotICAgICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMod2lkZ2V0LCBmb2N1c1JlY3QsIHRy
dWUpOwotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoZm9jdXNSZWN0LCB3aWRn
ZXQsIHRvZ2dsZVN0YXRlLCBkZXRhaWwpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBzZXRU
b2dnbGVTaXplKHRoaXMsIHN0eWxlLCBndGtDaGVja0J1dHRvbigpKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHBhaW50VG9n
Z2xlKHRoaXMsIHJlbmRlck9iamVjdCwgaW5mbywgcmVjdCwgZ3RrQ2hlY2tCdXR0b24oKSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5
bGUsIGd0a1JhZGlvQnV0dG9uKCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJh
ZGlvKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywgcmVuZGVyT2JqZWN0
LCBpbmZvLCByZWN0LCBndGtSYWRpb0J1dHRvbigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNldFdpZGdldEhhc0ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVh
biBoYXNGb2N1cykKLXsKLSAgICBnX29iamVjdF9zZXQod2lkZ2V0LCAiaGFzLWZvY3VzIiwgaGFz
Rm9jdXMsIE5VTEwpOwotCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGlu
IEdUSysgMi4yMiwgeWV0IHRoZW1lIGVuZ2luZXMgc3RpbGwgbG9vawotICAgIC8vIGF0IHRoZXNl
IGZsYWdzIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSB3aWRnZXQgaGFzIGZvY3VzLCBzbyB3ZSBtdXN0
IHVzZSB0aGVtLgotICAgIGlmIChoYXNGb2N1cykKLSAgICAgICAgR1RLX1dJREdFVF9TRVRfRkxB
R1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKLSAgICBlbHNlCi0gICAgICAgIEdUS19XSURHRVRf
VU5TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoaW5mby5jb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gZ3RrQnV0dG9uKCk7Ci0gICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCks
IHJlY3Quc2l6ZSgpKTsKLSAgICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKLQotICAg
IEd0a1N0YXRlVHlwZSBzdGF0ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOwotICAg
IGd0a193aWRnZXRfc2V0X3N0YXRlKHdpZGdldCwgc3RhdGUpOwotICAgIGd0a193aWRnZXRfc2V0
X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSkpOwotCi0gICAgaWYgKGlzRm9jdXNlZChvYmplY3QpKSB7Ci0gICAgICAgIHNldFdp
ZGdldEhhc0ZvY3VzKHdpZGdldCwgVFJVRSk7Ci0KLSAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JG
b2N1cyA9IDAsIGZvY3VzV2lkdGggPSAwLCBmb2N1c1BhZGRpbmcgPSAwOwotICAgICAgICBndGtf
d2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
bnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZGRpbmcsIE5VTEwpOwotICAgICAg
ICAvLyBJZiB3ZSBhcmUgdXNpbmcgZXh0ZXJpb3IgZm9jdXMsIHdlIHNocmluayB0aGUgYnV0dG9u
IHJlY3QgZG93biBiZWZvcmUKLSAgICAgICAgLy8gZHJhd2luZy4gSWYgd2UgYXJlIHVzaW5nIGlu
dGVyaW9yIGZvY3VzIHdlIHNocmluayB0aGUgZm9jdXMgcmVjdC4gVGhpcwotICAgICAgICAvLyBh
cHByb2FjaCBvcmlnaW5hdGVzIGZyb20gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIChn
dGsyZHJhd2luZy5jKS4KLSAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpIHsKLSAgICAgICAgICAg
IEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0gICAgICAg
ICAgICBmb2N1c1JlY3QuaW5mbGF0ZVgoLXN0eWxlLT54dGhpY2tuZXNzIC0gZm9jdXNQYWRkaW5n
KTsKLSAgICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlWSgtc3R5bGUtPnl0aGlja25lc3MgLSBm
b2N1c1BhZGRpbmcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnV0dG9uUmVjdC5p
bmZsYXRlWCgtZm9jdXNXaWR0aCAtIGZvY3VzUGFkZGluZyk7Ci0gICAgICAgICAgICBidXR0b25S
ZWN0LmluZmxhdGVZKC1mb2N1c1BhZGRpbmcgLSBmb2N1c1BhZGRpbmcpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29u
dGV4dCwgcmVjdCk7Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlID0gc3RhdGUgPT0gR1RL
X1NUQVRFX0FDVElWRSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLSAgICB3aWRn
ZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGUsIHNoYWRvd1R5
cGUsICJidXR0b24iKTsKLSAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCi0gICAgICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRGb2N1cyhmb2N1c1JlY3QsIHdpZGdldCwgc3RhdGUsICJidXR0b24i
KTsKLQotICAgIHNldFdpZGdldEhhc0ZvY3VzKHdpZGdldCwgRkFMU0UpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcldpZHRo
KCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHNlcGFyYXRvciA9IGd0a0NvbWJvQm94U2VwYXJh
dG9yKCk7Ci0gICAgaWYgKCFzZXBhcmF0b3IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZ2Jv
b2xlYW4gaGFzV2lkZVNlcGFyYXRvcnMgPSBGQUxTRTsKLSAgICBnaW50IHNlcGFyYXRvcldpZHRo
ID0gMDsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIsICZoYXNXaWRlU2VwYXJhdG9ycywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlmIChoYXNXaWRlU2VwYXJhdG9y
cykKLSAgICAgICAgcmV0dXJuIHNlcGFyYXRvcldpZHRoOwotICAgIHJldHVybiBndGtfd2lkZ2V0
X2dldF9zdHlsZShzZXBhcmF0b3IpLT54dGhpY2tuZXNzOwotfQotCi1pbnQgUmVuZGVyVGhlbWVH
dGs6OmNvbWJvQm94QXJyb3dTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAv
LyBUYWtpbmcgdGhlIGZvbnQgc2l6ZSBhbmQgcmV2ZXJzaW5nIHRoZSBEUEkgY29udmVyc2lvbiBz
ZWVtcyB0byBtYXRjaAotICAgIC8vIEdUSysgcmVuZGVyaW5nIGFzIGNsb3NlbHkgYXMgcG9zc2li
bGUuCi0gICAgcmV0dXJuIHN0eWxlLT5mb250KCkuc2l6ZSgpICogKDcyLjAgLyBSZW5kZXJUaGVt
ZUd0azo6Z2V0U2NyZWVuRFBJKCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRCdXR0b25Jbm5lckJv
cmRlcihHdGtXaWRnZXQqIGJ1dHRvbiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwg
aW50JiBib3R0b20pCi17Ci0gICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5
bGUoYnV0dG9uKTsKLSAgICBpbnQgb3V0ZXJCb3JkZXIgPSBndGtfY29udGFpbmVyX2dldF9ib3Jk
ZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihidXR0b24pKTsKLSAgICBzdGF0aWMgR3RrQm9yZGVyIGRl
ZmF1bHRJbm5lckJvcmRlciA9IHsxLCAxLCAxLCAxfTsKLSAgICBHdGtCb3JkZXIqIGlubmVyQm9y
ZGVyOwotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KGJ1dHRvbiwgImlubmVyLWJvcmRlciIsICZp
bm5lckJvcmRlciwgTlVMTCk7Ci0gICAgaWYgKCFpbm5lckJvcmRlcikKLSAgICAgICAgaW5uZXJC
b3JkZXIgPSAmZGVmYXVsdElubmVyQm9yZGVyOwotCi0gICAgbGVmdCA9IG91dGVyQm9yZGVyICsg
aW5uZXJCb3JkZXItPmxlZnQgKyBzdHlsZS0+eHRoaWNrbmVzczsKLSAgICByaWdodCA9IG91dGVy
Qm9yZGVyICsgaW5uZXJCb3JkZXItPnJpZ2h0ICsgc3R5bGUtPnh0aGlja25lc3M7Ci0gICAgdG9w
ID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+dG9wICsgc3R5bGUtPnl0aGlja25lc3M7Ci0g
ICAgYm90dG9tID0gb3V0ZXJCb3JkZXIgKyBpbm5lckJvcmRlci0+Ym90dG9tICsgc3R5bGUtPnl0
aGlja25lc3M7Ci0KLSAgICBpZiAoaW5uZXJCb3JkZXIgIT0gJmRlZmF1bHRJbm5lckJvcmRlcikK
LSAgICAgICAgZ3RrX2JvcmRlcl9mcmVlKGlubmVyQm9yZGVyKTsKLX0KLQotCi12b2lkIFJlbmRl
clRoZW1lR3RrOjpnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQmIGxl
ZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKLXsKLSAgICAvLyBJ
ZiB0aGlzIG1lbnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVt
ZSwgd2UKLSAgICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2Vi
Q29yZSBhbHJlYWR5IHVzZXMuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9Db250
cm9sUGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQSBjb21ibyBib3ggYnV0dG9uIGlz
IGEgYnV0dG9uIHdpdGggd2lkZ2V0cyBwYWNrZWQgaW50byBpdC4KLSAgICBHdGtTdHlsZSogYnV0
dG9uV2lkZ2V0U3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigp
KTsKLSAgICBnZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b20pOwotCi0gICAgLy8gQWRkIHh0aGlja25lc3MgYW1vdW50IG9mIHBh
ZGRpbmcgZm9yIGVhY2ggc2lkZSBvZiB0aGUgc2VwYXJhdG9yLiBUaGlzIGVuc3VyZXMKLSAgICAv
LyB0aGF0IHRoZSB0ZXh0IGRvZXMgbm90IGJ1bXAgdXAgYWdhaW5zdCB0aGUgc2VwYXJhdG9yLgot
ICAgIGludCBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxl
KSArCi0gICAgICAgIGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lk
Z2V0U3R5bGUtPnh0aGlja25lc3MpOwotCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBS
VEwpCi0gICAgICAgIGxlZnQgKz0gYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7Ci0gICAgZWxzZQot
ICAgICAgICByaWdodCArPSBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKLX0KLQotaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAotewotICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAw
OwotICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKLSAgICByZXR1cm4gbGVmdDsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgbGVm
dCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBh
ZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIHJpZ2h0
OwotfQotCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0
ID0gMCwgYm90dG9tID0gMDsKLSAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmV0dXJuIHRvcDsKLX0KLQotaW50IFJlbmRlclRoZW1l
R3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7Ci0g
ICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwot
ICAgIHJldHVybiBib3R0b207Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxp
c3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRCdXR0b24ob2JqZWN0LCBpbmZvLCByZWN0KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBNZW51IGxpc3QgYnV0dG9uIHBhaW50aW5n
IHN0cmF0ZWd5LgotICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBwZWFycy1hcy1saXN0IHNldCB0
byBmYWxzZSAoaGF2aW5nIGEgc2VwYXJhdG9yKToKLSAgICAvLyB8IGxlZnQgYm9yZGVyIHwgQnV0
dG9uIHRleHQgfCB4dGhpY2tuZXNzIHwgdnNlcGFyYXRvciB8IHh0aGlja25lc3MgfCBhcnJvdyB8
IHh0aGlja25lc3MgfCByaWdodCBib3JkZXIgfAotICAgIC8vIEZvciBidXR0b25zIHdpdGggYXBw
ZWFycy1hcy1saXN0IHNldCB0byB0cnVlIChub3QgaGF2aW5nIGEgc2VwYXJhdG9yKToKLSAgICAv
LyB8IGxlZnQgYm9yZGVyIHwgQnV0dG9uIHRleHQgfCBhcnJvdyB8IHh0aGlja25lc3MgfCByaWdo
dCBib3JkZXIgfAotCi0gICAgaW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRlciA9IDAsIGJv
dHRvbUJvcmRlciA9IDAsIHRvcEJvcmRlciA9IDA7Ci0gICAgZ2V0QnV0dG9uSW5uZXJCb3JkZXIo
Z3RrQ29tYm9Cb3hCdXR0b24oKSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdodEJvcmRlciwg
Ym90dG9tQm9yZGVyKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7
Ci0gICAgaW50IGFycm93U2l6ZSA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKTsKLSAgICBHdGtT
dHlsZSogYnV0dG9uU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRv
bigpKTsKLQotICAgIEludFJlY3QgYXJyb3dSZWN0KDAsIChyZWN0LmhlaWdodCgpIC0gYXJyb3dT
aXplKSAvIDIsIGFycm93U2l6ZSwgYXJyb3dTaXplKTsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlv
bigpID09IFJUTCkKLSAgICAgICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0
eWxlLT54dGhpY2tuZXNzKTsKLSAgICBlbHNlCi0gICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qu
d2lkdGgoKSAtIHJpZ2h0Qm9yZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1Np
emUpOwotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IGlzUHJlc3NlZChvYmplY3QpID8g
R1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOwotCi0gICAgV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgR3RrU3RhdGVUeXBl
IHN0YXRlVHlwZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOwotICAgIHdpZGdldENv
bnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIGd0a0NvbWJvQm94QXJyb3coKSwgc3RhdGVU
eXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgImFycm93Iik7Ci0KLSAgICAvLyBTb21l
IGNvbWJvIGJveGVzIGRvIG5vdCBoYXZlIGEgc2VwYXJhdG9yLgotICAgIEd0a1dpZGdldCogc2Vw
YXJhdG9yID0gZ3RrQ29tYm9Cb3hTZXBhcmF0b3IoKTsKLSAgICBpZiAoIXNlcGFyYXRvcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugd2FudCB0byBkZWNyZWFzZSB0aGUgaGVp
Z2h0IG9mIHRoZSBzZXBhcmF0b3IgYmFzZWQgb24gdGhlIGZvY3VzIHBhZGRpbmcgb2YgdGhlIGJ1
dHRvbi4KLSAgICBnaW50IGZvY3VzUGFkZGluZyA9IDAsIGZvY3VzV2lkdGggPSAwOyAKLSAgICBn
dGtfd2lkZ2V0X3N0eWxlX2dldChndGtDb21ib0JveEJ1dHRvbigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWRkaW5nLCBOVUxMKTsKLSAgICB0
b3BCb3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKLSAgICBib3R0b21Cb3JkZXIg
Kz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKLSAgICBpbnQgc2VwYXJhdG9yV2lkdGggPSBn
ZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7Ci0gICAgSW50UmVjdCBzZXBhcmF0b3JSZWN0KDAs
IHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BCb3JkZXIgLSBi
b3R0b21Cb3JkZXIpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAg
ICBzZXBhcmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSArIGFycm93UmVjdC53aWR0aCgpICsg
YnV0dG9uU3R5bGUtPnh0aGlja25lc3MgKyBzZXBhcmF0b3JXaWR0aCk7Ci0gICAgZWxzZQotICAg
ICAgICBzZXBhcmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSAtIGJ1dHRvblN0eWxlLT54dGhp
Y2tuZXNzIC0gc2VwYXJhdG9yV2lkdGgpOwotCi0gICAgZ2Jvb2xlYW4gaGFzV2lkZVNlcGFyYXRv
cnMgPSBGQUxTRTsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzZXBhcmF0b3IsICJ3aWRlLXNl
cGFyYXRvcnMiLCAmaGFzV2lkZVNlcGFyYXRvcnMsIE5VTEwpOwotICAgIGlmIChoYXNXaWRlU2Vw
YXJhdG9ycykKLSAgICAgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChzZXBhcmF0b3JSZWN0
LCBzZXBhcmF0b3IsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfRVRDSEVEX09VVCwgInZz
ZXBhcmF0b3IiKTsKLSAgICBlbHNlCi0gICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRWTGlu
ZShzZXBhcmF0b3JSZWN0LCBzZXBhcmF0b3IsIEdUS19TVEFURV9OT1JNQUwsICJ2c2VwYXJhdG9y
Iik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGlu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtF
bnRyeSgpOwotCi0gICAgYm9vbCBlbmFibGVkID0gaXNFbmFibGVkKHJlbmRlck9iamVjdCkgJiYg
IWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7Ci0gICAgR3RrU3RhdGVUeXBlIGJhY2tn
cm91bmRTdGF0ZSA9IGVuYWJsZWQgPyBHVEtfU1RBVEVfTk9STUFMIDogR1RLX1NUQVRFX0lOU0VO
U0lUSVZFOwotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsIGVuYWJsZWQpOwot
ICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotICAgIHNldFdpZGdldEhhc0ZvY3Vz
KHdpZGdldCwgaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpOwotCi0gICAgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dCB3aWRnZXRDb250ZXh0KGluZm8uY29udGV4dCwgcmVjdCk7Ci0gICAgSW50UmVjdCB0
ZXh0RmllbGRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIFRoZSBlbnRy
eSBiYWNrZ3JvdW5kIGlzIG9ubHkgcGFpbnRlZCBvdmVyIHRoZSBpbnRlcmlvciBwYXJ0IG9mIHRo
ZSBHVEsrIGVudHJ5LCBub3QKLSAgICAvLyB0aGUgZW50aXJlIGZyYW1lLiBUaGlzIGhhcHBlbnMg
aW4gdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2RlIGFzIHdlbGwuCi0gICAgSW50UmVjdCBp
bnRlcmlvclJlY3QodGV4dEZpZWxkUmVjdCk7Ci0gICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dp
ZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKLSAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVgoLXN0eWxl
LT54dGhpY2tuZXNzKTsKLSAgICBpbnRlcmlvclJlY3QuaW5mbGF0ZVkoLXN0eWxlLT55dGhpY2tu
ZXNzKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50RmxhdEJveChpbnRlcmlvclJlY3QsIHdp
ZGdldCwgYmFja2dyb3VuZFN0YXRlLCBHVEtfU0hBRE9XX05PTkUsICJlbnRyeV9iZyIpOwotCi0g
ICAgLy8gVGhpcyBpcyByZXNwb25zaWJsZSBmb3IgZHJhd2luZyB0aGUgYWN0dWFsIGZyYW1lLgot
ICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTaGFkb3codGV4dEZpZWxkUmVjdCwgd2lkZ2V0LCBH
VEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAiZW50cnkiKTsKLQotICAgIGdib29sZWFu
IGludGVyaW9yRm9jdXM7Ci0gICAgZ2ludCBmb2N1c1dpZHRoOwotICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0KHdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMi
LCAmaW50ZXJpb3JGb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13
aWR0aCIsICZmb2N1c1dpZHRoLCAgTlVMTCk7Ci0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmpl
Y3QpICYmICFpbnRlcmlvckZvY3VzKSB7Ci0gICAgICAgIC8vIFdoZW4gR1RLKyBwYWludHMgYSB0
ZXh0IGVudHJ5IHdpdGggZm9jdXMsIGl0IHNocmlua3MgdGhlIHNpemUgb2YgdGhlIGZyYW1lIGFy
ZWEgYnkgdGhlCi0gICAgICAgIC8vIGZvY3VzIHdpZHRoIGFuZCBwYWludHMgb3ZlciB0aGUgcHJl
dmlvdXNseSB1bmZvY3VzZWQgdGV4dCBlbnRyeS4gV2UgbmVlZCB0byBlbXVsYXRlIHRoYXQKLSAg
ICAgICAgLy8gYnkgZHJhd2luZyBib3RoIHRoZSB1bmZvY3VzZWQgZnJhbWUgYWJvdmUgYW5kIHRo
ZSBmb2N1c2VkIGZyYW1lIGhlcmUuCi0gICAgICAgIEludFJlY3Qgc2hhZG93UmVjdCh0ZXh0Rmll
bGRSZWN0KTsKLSAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKC1mb2N1c1dpZHRoKTsKLSAgICAg
ICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNoYWRvdyhzaGFkb3dSZWN0LCB3aWRnZXQsIEdUS19T
VEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sICJlbnRyeSIpOwotCi0gICAgICAgIHdpZGdldENv
bnRleHQuZ3RrUGFpbnRGb2N1cyh0ZXh0RmllbGRSZWN0LCB3aWRnZXQsIEdUS19TVEFURV9OT1JN
QUwsICJlbnRyeSIpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChpbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Q29udHJvbFBhcnQgcGFydCA9IG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotICAgIEFT
U0VSVChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGlj
YWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0KTsKLQotICAgIC8vIFdlIHNo
cmluayB0aGUgdHJvdWdoIHJlY3Qgc2xpZ2h0bHkgdG8gbWFrZSByb29tIGZvciB0aGUgZm9jdXMg
aW5kaWNhdG9yLgotICAgIEludFJlY3QgdHJvdWdoUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUo
KSk7IC8vIFRoaXMgaXMgcmVsYXRpdmUgdG8gcmVjdC4KLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9
IDA7Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgd2lk
Z2V0ID0gZ3RrSFNjYWxlKCk7Ci0gICAgICAgIHRyb3VnaFJlY3QuaW5mbGF0ZVgoLWd0a193aWRn
ZXRfZ2V0X3N0eWxlKHdpZGdldCktPnh0aGlja25lc3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHdpZGdldCA9IGd0a1ZTY2FsZSgpOwotICAgICAgICB0cm91Z2hSZWN0LmluZmxhdGVZKC1ndGtf
d2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT55dGhpY2tuZXNzKTsKLSAgICB9Ci0gICAgZ3RrX3dp
ZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihvYmplY3QtPnN0eWxl
KCktPmRpcmVjdGlvbigpKSk7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENv
bnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94
KHRyb3VnaFJlY3QsIHdpZGdldCwgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0
cm91Z2giKTsKLSAgICBpZiAoaXNGb2N1c2VkKG9iamVjdCkpCi0gICAgICAgIHdpZGdldENvbnRl
eHQuZ3RrUGFpbnRGb2N1cyhJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgd2lkZ2V0
LCBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgInRyb3VnaCIpOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRl
ck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDb250cm9sUGFydCBwYXJ0ID0gb2JqZWN0LT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCk7Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFW
b2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotCi0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSAwOwotICAg
IGNvbnN0IGNoYXIqIGRldGFpbCA9IDA7Ci0gICAgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb247
Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICB3
aWRnZXQgPSBndGtIU2NhbGUoKTsKLSAgICAgICAgZGV0YWlsID0gImhzY2FsZSI7Ci0gICAgICAg
IG9yaWVudGF0aW9uID0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgd2lkZ2V0ID0gZ3RrVlNjYWxlKCk7Ci0gICAgICAgIGRldGFpbCA9ICJ2c2NhbGUi
OwotICAgICAgICBvcmllbnRhdGlvbiA9IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsKLSAgICB9
Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERpcmVjdGlvbihv
YmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7Ci0KLSAgICAvLyBPbmx5IHNvbWUgdGhlbWVz
IGhhdmUgc2xpZGVyIHRodW1icyByZXNwb25kIHRvIGNsaWNrcyBhbmQgc29tZSBkb24ndC4gVGhp
cyBpbmZvcm1hdGlvbiBpcwotICAgIC8vIGdhdGhlcmVkIHZpYSB0aGUgJ2FjdGl2YXRlLXNsaWRl
cicgcHJvcGVydHksIGJ1dCBpdCdzIGRlcHJlY2F0ZWQgaW4gR1RLKyAyLjIyIGFuZCByZW1vdmVk
IGluCi0gICAgLy8gR1RLKyAzLnguIFRoZSBkcmF3YmFjayBvZiBub3QgaG9ub3JpbmcgaXQgaXMg
dGhhdCBzbGlkZXIgdGh1bWJzIGNoYW5nZSBjb2xvciB3aGVuIHlvdSBjbGljawotICAgIC8vIG9u
IHRoZW0uIAotICAgIEludFJlY3QgdGh1bWJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsK
LSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCBy
ZWN0KTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50U2xpZGVyKHRodW1iUmVjdCwgd2lkZ2V0
LCBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgR1RLX1NIQURPV19PVVQsIGRldGFpbCwg
b3JpZW50YXRpb24pOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Ci17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAg
aWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHdpZGdl
dCA9IHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IGd0a0hTY2FsZSgpIDogZ3Rr
VlNjYWxlKCk7Ci0gICAgaW50IGxlbmd0aCA9IDAsIHdpZHRoID0gMDsKLSAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNsaWRlcl9sZW5n
dGgiLCAmbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfd2lkdGgiLCAm
d2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBpZiAocGFydCA9
PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQocGFydCA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1
bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLX0KLQotI2lmIEVOQUJM
RShQUk9HUkVTU19FTEVNRU5UKQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtQcm9n
cmVzc0JhcigpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGd0a1RleHRE
aXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotCi0gICAgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KHBhaW50SW5mby5jb250ZXh0LCByZWN0
KTsKLSAgICBJbnRSZWN0IGZ1bGxQcm9ncmVzc0JhclJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXpl
KCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goZnVsbFByb2dyZXNzQmFyUmVjdCwg
d2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAidHJvdWdoIik7Ci0KLSAg
ICBHdGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOwotICAgIElu
dFJlY3QgcHJvZ3Jlc3NSZWN0KGZ1bGxQcm9ncmVzc0JhclJlY3QpOwotICAgIHByb2dyZXNzUmVj
dC5pbmZsYXRlWCgtc3R5bGUtPnh0aGlja25lc3MpOwotICAgIHByb2dyZXNzUmVjdC5pbmZsYXRl
WSgtc3R5bGUtPnl0aGlja25lc3MpOwotICAgIHByb2dyZXNzUmVjdCA9IFJlbmRlclRoZW1lR3Rr
OjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QocmVuZGVyT2JqZWN0LCBwcm9ncmVzc1JlY3QpOwotCi0g
ICAgaWYgKCFwcm9ncmVzc1JlY3QuaXNFbXB0eSgpKQotICAgICAgICB3aWRnZXRDb250ZXh0Lmd0
a1BhaW50Qm94KHByb2dyZXNzUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfUFJFTElHSFQsIEdUS19T
SEFET1dfT1VULCAiYmFyIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgR3RrU3R5bGUq
IGd0a1N0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrU3BpbkJ1dHRvbigpKTsKLSAgICBj
b25zdCBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uID0gZ3RrU3R5bGUtPmZv
bnRfZGVzYzsKLSAgICBnaW50IGZvbnRTaXplID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRf
c2l6ZShmb250RGVzY3JpcHRpb24pOwotCi0gICAgLy8gRm9yY2UgYW4gb2RkIGFycm93IHNpemUg
aGVyZS4gR1RLKyAzLnggZm9yY2VzIGV2ZW4gaW4gdGhpcyBjYXNlLCBidXQKLSAgICAvLyBOb2Rv
a2EtYmFzZWQgdGhlbWVzIGxvb2sgaW5jb3JyZWN0IHdpdGggYW4gZXZlbiBhcnJvdyBzaXplLgot
ICAgIGludCB3aWR0aCA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9u
QXJyb3dTaXplKTsKLSAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+
eHRoaWNrbmVzczsKLQotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLX0KLQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIC8vIFdlIGV4cGFuZCB0aGUgcGFpbnRlZCBhcmVhIGJ5IDIgcGl4ZWxzIG9uIHRo
ZSB0b3AgYW5kIGJvdHRvbSBhbmQgMiBwaXhlbHMgb24gdGhlIHJpZ2h0LiBUaGlzCi0gICAgLy8g
aXMgYmVjYXVzZSBHVEsrIHRoZW1lcyB3YW50IHRvIGRyYXcgb3ZlciB0aGUgdGV4dCBib3ggYm9y
ZGVycywgYnV0IFdlYkNvcmUgcmVuZGVycyB0aGUgaW5uZXIKLSAgICAvLyBzcGluIGJ1dHRvbiBp
bnNpZGUgdGhlIHRleHQgYm94LgotICAgIEludFJlY3QgZXhwYW5kZWRSZWN0KHJlY3QpOwotICAg
IGV4cGFuZGVkUmVjdC5pbmZsYXRlWSgyKTsKLSAgICBleHBhbmRlZFJlY3Quc2V0V2lkdGgocmVj
dC53aWR0aCgpICsgMik7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQsIGV4cGFuZGVkUmVjdCk7Ci0gICAgR3RrV2lkZ2V0KiB3aWRn
ZXQgPSBndGtTcGluQnV0dG9uKCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdl
dCwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7
Ci0KLSAgICBJbnRSZWN0IGZ1bGxTcGluQnV0dG9uUmVjdChJbnRQb2ludCgpLCBleHBhbmRlZFJl
Y3Quc2l6ZSgpKTsKLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGZ1bGxTcGluQnV0dG9u
UmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAic3BpbmJ1dHRv
biIpOwotCi0gICAgYm9vbCB1cFByZXNzZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJl
bmRlck9iamVjdCk7Ci0gICAgYm9vbCB1cEhvdmVyZWQgPSBpc1NwaW5VcEJ1dHRvblBhcnRIb3Zl
cmVkKHJlbmRlck9iamVjdCk7Ci0gICAgYm9vbCBjb250cm9sQWN0aXZlID0gaXNFbmFibGVkKHJl
bmRlck9iamVjdCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7Ci0gICAgR3Rr
U2hhZG93VHlwZSBzaGFkb3dUeXBlID0gdXBQcmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdUS19T
SEFET1dfT1VUOwotCi0gICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFURV9JTlNF
TlNJVElWRTsKLSAgICBpZiAoY29udHJvbEFjdGl2ZSkgewotICAgICAgICBpZiAoaXNQcmVzc2Vk
KHJlbmRlck9iamVjdCkgJiYgdXBQcmVzc2VkKQotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RL
X1NUQVRFX0FDVElWRTsKLSAgICAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJlbmRlck9iamVjdCkg
JiYgdXBIb3ZlcmVkKQotICAgICAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX1BSRUxJR0hU
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfTk9STUFM
OwotICAgIH0KLSAgICBJbnRSZWN0IHRvcFJlY3QoSW50UG9pbnQoKSwgZXhwYW5kZWRSZWN0LnNp
emUoKSk7Ci0gICAgdG9wUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC8gMik7
Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveCh0b3BSZWN0LCB3aWRnZXQsIHN0YXRlVHlw
ZSwgc2hhZG93VHlwZSwgInNwaW5idXR0b25fdXAiKTsKLQotICAgIC8vIFRoZSBhcnJvdyBzaXpl
L3Bvc2l0aW9uIGNhbGN1bGF0aW9uIGhlcmUgaXMgYmFzZWQgb24gdGhlIGFyYml0cmFyeSBneW1u
YXN0aWNzIHRoYXQgaGFwcGVuCi0gICAgLy8gaW4gZ3Rrc3BpbmJ1dHRvbi5jLiBJdCBpc24ndCBw
cmV0dHkgdGhlcmUgYW5kIGl0IGlzbid0IHByZXR0eSBoZXJlLiBUaGlzIG1hbmFnZXMgdG8gbWFr
ZQotICAgIC8vIHRoZSBidXR0b24gbG9vayBuYXRpdmUgZm9yIG1hbnkgdGhlbWVzIHRob3VnaC4K
LSAgICBJbnRSZWN0IGFycm93UmVjdDsKLSAgICBpbnQgYXJyb3dTaXplID0gKGV4cGFuZGVkUmVj
dC53aWR0aCgpIC0gMykgLyAyOwotICAgIGFycm93U2l6ZSAtPSAoYXJyb3dTaXplICUgMikgLSAx
OyAvLyBGb3JjZSBvZGQuCi0gICAgYXJyb3dSZWN0LnNldFdpZHRoKGFycm93U2l6ZSk7Ci0gICAg
YXJyb3dSZWN0LnNldEhlaWdodChhcnJvd1NpemUpOwotICAgIGFycm93UmVjdC5tb3ZlKChleHBh
bmRlZFJlY3Qud2lkdGgoKSAtIGFycm93UmVjdC53aWR0aCgpKSAvIDIsCi0gICAgICAgICAgICAg
ICAgICAgKHRvcFJlY3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QuaGVpZ2h0KCkpIC8gMiArIDEpOwot
ICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVU
eXBlLCBzaGFkb3dUeXBlLCBHVEtfQVJST1dfVVAsICJzcGluYnV0dG9uIik7Ci0KLSAgICBzaGFk
b3dUeXBlID0gaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCA/IEdUS19TSEFE
T1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLSAgICBpZiAoY29udHJvbEFjdGl2ZSkgewotICAgICAg
ICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgIXVwUHJlc3NlZCkKLSAgICAgICAgICAg
IHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgICAgIGVsc2UgaWYgKGlzSG92ZXJl
ZChyZW5kZXJPYmplY3QpICYmICF1cEhvdmVyZWQpCi0gICAgICAgICAgICBzdGF0ZVR5cGUgPSBH
VEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlVHlwZSA9
IEdUS19TVEFURV9OT1JNQUw7Ci0gICAgfQotICAgIEludFJlY3QgYm90dG9tUmVjdChJbnRQb2lu
dCgwLCBleHBhbmRlZFJlY3QuaGVpZ2h0KCkgLyAyKSwgZXhwYW5kZWRSZWN0LnNpemUoKSk7Ci0g
ICAgYm90dG9tUmVjdC5zZXRIZWlnaHQoZXhwYW5kZWRSZWN0LmhlaWdodCgpIC0gYm90dG9tUmVj
dC55KCkpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRCb3goYm90dG9tUmVjdCwgd2lkZ2V0
LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICJzcGluYnV0dG9uX2Rvd24iKTsKLQotICAgIGFycm93
UmVjdC5zZXRZKGFycm93UmVjdC55KCkgKyBib3R0b21SZWN0LnkoKSAtIDEpOwotICAgIHdpZGdl
dENvbnRleHQuZ3RrUGFpbnRBcnJvdyhhcnJvd1JlY3QsIHdpZGdldCwgc3RhdGVUeXBlLCBzaGFk
b3dUeXBlLCBHVEtfQVJST1dfRE9XTiwgInNwaW5idXR0b24iKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1R5
cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50
IHN0YXRlLCBnaW50IGljb25TaXplKQotewotICAgIEFTU0VSVCh3aWRnZXRUeXBlID09IEdUS19U
WVBFX0NPTlRBSU5FUiB8fCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKTsKLQotICAgIFJl
bmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4oUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IHdp
ZGdldFR5cGUgPT0gR1RLX1RZUEVfQ09OVEFJTkVSID8gR1RLX1dJREdFVCh0aGVtZS0+Z3RrQ29u
dGFpbmVyKCkpIDogdGhlbWUtPmd0a0VudHJ5KCk7Ci0KLSAgICBHdGtTdHlsZSogc3R5bGUgPSBn
dGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOwotICAgIEd0a0ljb25TZXQqIGljb25TZXQgPSBn
dGtfc3R5bGVfbG9va3VwX2ljb25fc2V0KHN0eWxlLCBpY29uTmFtZSk7Ci0gICAgcmV0dXJuIGFk
b3B0R1JlZihndGtfaWNvbl9zZXRfcmVuZGVyX2ljb24oaWNvblNldCwgc3R5bGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZGlyZWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtTdGF0ZVR5cGU+KHN0YXRlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29u
U2l6ZT4oaWNvblNpemUpLCAwLCAwKSk7Ci19Ci0KLUdSZWZQdHI8R2RrUGl4YnVmPiBnZXRTdG9j
a1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hhciog
c3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBnaW50
IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKLXsKLSAgICByZXR1cm4gZ2V0
U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFja1N0b2NrSWNvbk5hbWUs
IGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6
OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBH
dGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0gICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0
X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX1NFTEVDVEVEXTsKLX0KLQotQ29sb3IgUmVu
ZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrRW50cnkoKTsKLSAgICByZXR1cm4g
Z3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfQUNUSVZFXTsKLX0K
LQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a0VudHJ5KCk7Ci0g
ICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NF
TEVDVEVEXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0g
Z3RrRW50cnkoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KS0+dGV4
dFtHVEtfU1RBVEVfQUNUSVZFXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEd0a1dpZGdldCog
d2lkZ2V0ID0gZ3RrVHJlZVZpZXcoKTsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5bGUo
d2lkZ2V0KS0+YmFzZVtHVEtfU1RBVEVfU0VMRUNURURdOwotfQotCi1Db2xvciBSZW5kZXJUaGVt
ZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsK
LSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAgcmV0dXJuIGd0a193
aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPmJhc2VbR1RLX1NUQVRFX0FDVElWRV07Ci19Ci0KLUNv
bG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IGd0a1RyZWVWaWV3KCk7Ci0gICAg
cmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCktPnRleHRbR1RLX1NUQVRFX1NFTEVD
VEVEXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBndGtU
cmVlVmlldygpOwotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLT50ZXh0
W0dUS19TVEFURV9BQ1RJVkVdOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29s
b3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7Ci0g
ICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6Ci0gICAgICAgIHJldHVybiBDb2xvcihndGtfd2lk
Z2V0X2dldF9zdHlsZShndGtCdXR0b24oKSktPmZnW0dUS19TVEFURV9OT1JNQUxdKTsKLSAgICBj
YXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgIHJldHVybiBDb2xvcihndGtfd2lkZ2V0
X2dldF9zdHlsZShndGtFbnRyeSgpKS0+ZmdbR1RLX1NUQVRFX05PUk1BTF0pOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKLXsK
LSAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVk
IG1hbnkgdGltZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KLSAgICBy
ZW5kZXJUaGVtZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotc3RhdGljIHZvaWQg
c2V0dXBXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgZ3RrX3dpZGdldF9yZWFsaXpl
KHdpZGdldCk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5z
cGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOwotfQotCi12b2lkIFJlbmRl
clRoZW1lR3RrOjpzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtXaWRnZXQqIHdpbmRvdykgY29uc3QKLXsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHdpZGdldCk7Ci0gICAgc2V0dXBXaWRnZXQod2lkZ2V0KTsKLQot
ICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB0aGUg
Y29udGFpbmluZyB3aW5kb3cgb3IgcGFyZW50IGNvbnRhaW5lci4KLSAgICBnX3NpZ25hbF9jb25u
ZWN0KHdpZGdldCwgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayks
IGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPih0aGlzKSk7Ci19Ci0KLUd0a1dpZGdldCogUmVu
ZGVyVGhlbWVHdGs6Omd0a0NvbnRhaW5lcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQ29udGFp
bmVyKQotICAgICAgICByZXR1cm4gbV9ndGtDb250YWluZXI7Ci0KLSAgICBtX2d0a1dpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgIGd0a193aWRnZXRfc2V0X2Nv
bG9ybWFwKG1fZ3RrV2luZG93LCBtX2NvbG9ybWFwKTsKLSAgICBzZXR1cFdpZGdldChtX2d0a1dp
bmRvdyk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemlsbGFHdGtX
aWRnZXQiKTsKLQotICAgIG1fZ3RrQ29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOwotICAgIHNl
dHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2luZG93KTsK
LSAgICByZXR1cm4gbV9ndGtDb250YWluZXI7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVH
dGs6Omd0a0J1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQnV0dG9uKQotICAgICAgICBy
ZXR1cm4gbV9ndGtCdXR0b247Ci0gICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOwot
ICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0NvbnRhaW5l
cigpKTsKLSAgICByZXR1cm4gbV9ndGtCdXR0b247Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhl
bWVHdGs6Omd0a0VudHJ5KCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtFbnRyeSkKLSAgICAgICAg
cmV0dXJuIG1fZ3RrRW50cnk7Ci0gICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAg
ICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5lcigp
KTsKLSAgICByZXR1cm4gbV9ndGtFbnRyeTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0
azo6Z3RrVHJlZVZpZXcoKSBjb25zdAotewotICAgIGlmIChtX2d0a1RyZWVWaWV3KQotICAgICAg
ICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLSAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3RyZWVfdmll
d19uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJlZVZpZXcs
IGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLX0KLQotR3RrV2lk
Z2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVlNjYWxlKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtW
U2NhbGUpCi0gICAgICAgIHJldHVybiBtX2d0a1ZTY2FsZTsKLSAgICBtX2d0a1ZTY2FsZSA9IGd0
a192c2NhbGVfbmV3KDApOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtW
U2NhbGUsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtWU2NhbGU7Ci19Ci0KLUd0
a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0hTY2FsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
Z3RrSFNjYWxlKQotICAgICAgICByZXR1cm4gbV9ndGtIU2NhbGU7Ci0gICAgbV9ndGtIU2NhbGUg
PSBndGtfaHNjYWxlX25ldygwKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1f
Z3RrSFNjYWxlLCBndGtDb250YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrSFNjYWxlOwotfQot
Ci1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fZ3RrUmFkaW9CdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0a1JhZGlvQnV0dG9u
OwotICAgIG1fZ3RrUmFkaW9CdXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldygwKTsKLSAgICBz
ZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUmFkaW9CdXR0b24sIGd0a0NvbnRhaW5l
cigpKTsKLSAgICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5k
ZXJUaGVtZUd0azo6Z3RrQ2hlY2tCdXR0b24oKSBjb25zdAotewotICAgIGlmIChtX2d0a0NoZWNr
QnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtDaGVja0J1dHRvbjsKLSAgICBtX2d0a0NoZWNr
QnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRv
Q29udGFpbmVyKG1fZ3RrQ2hlY2tCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4g
bV9ndGtDaGVja0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrUHJv
Z3Jlc3NCYXIoKSBjb25zdAotewotICAgIGlmIChtX2d0a1Byb2dyZXNzQmFyKQotICAgICAgICBy
ZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsKLSAgICBtX2d0a1Byb2dyZXNzQmFyID0gZ3RrX3Byb2dy
ZXNzX2Jhcl9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrUHJv
Z3Jlc3NCYXIsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtQcm9ncmVzc0JhcjsK
LX0KLQotc3RhdGljIHZvaWQgZ2V0R3RrQ29tYm9Cb3hCdXR0b24oR3RrV2lkZ2V0KiB3aWRnZXQs
IGdwb2ludGVyIHRhcmdldCkKLXsKLSAgICBpZiAoIUdUS19JU19UT0dHTEVfQlVUVE9OKHdpZGdl
dCkpCi0gICAgICAgIHJldHVybjsKLSAgICBHdGtXaWRnZXQqKiB3aWRnZXRUYXJnZXQgPSBzdGF0
aWNfY2FzdDxHdGtXaWRnZXQqKj4odGFyZ2V0KTsKLSAgICAqd2lkZ2V0VGFyZ2V0ID0gd2lkZ2V0
OwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiBhcnJvdzsKLSAgICBHdGtX
aWRnZXQqIHNlcGFyYXRvcjsKLX0gQ29tYm9Cb3hXaWRnZXRQaWVjZXM7Ci0KLXN0YXRpYyB2b2lk
IGdldEd0a0NvbWJvQm94UGllY2VzKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQot
ewotICAgIGlmIChHVEtfSVNfQVJST1cod2lkZ2V0KSkgewotICAgICAgICBzdGF0aWNfY2FzdDxD
b21ib0JveFdpZGdldFBpZWNlcyo+KGRhdGEpLT5hcnJvdyA9IHdpZGdldDsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoR1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSAKLSAgICAgICAg
c3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXRQaWVjZXMqPihkYXRhKS0+c2VwYXJhdG9yID0gd2lk
Z2V0OwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0JveCgpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fZ3RrQ29tYm9Cb3gpCi0gICAgICAgIHJldHVybiBtX2d0a0NvbWJvQm94
OwotICAgIG1fZ3RrQ29tYm9Cb3ggPSBndGtfY29tYm9fYm94X25ldygpOwotICAgIHNldHVwV2lk
Z2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtDb21ib0JveCwgZ3RrQ29udGFpbmVyKCkpOwotICAg
IHJldHVybiBtX2d0a0NvbWJvQm94OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpyZWZyZXNo
Q29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgZ3RrQ29tYm9Cb3goKTsgLy8gRW5zdXJl
IHRoYXQgd2UndmUgaW5pdGlhbGl6ZWQgdGhlIGNvbWJvIGJveC4KLQotICAgIC8vIFNvbWUgdGhl
bWVzIGxvb2sgYXQgd2lkZ2V0IGFuY2VzdHJ5IHRvIGRldGVybWluZSBob3cgdG8gcmVuZGVyIHdp
ZGdldHMsIHNvCi0gICAgLy8gZ2V0IHRoZSBHdGtCdXR0b24gdGhhdCBpcyB0aGUgYWN0dWFsIGNo
aWxkIG9mIHRoZSBjb21ibyBib3guCi0gICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRB
SU5FUihtX2d0a0NvbWJvQm94KSwgZ2V0R3RrQ29tYm9Cb3hCdXR0b24sICZtX2d0a0NvbWJvQm94
QnV0dG9uKTsKLSAgICBBU1NFUlQobV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgc2V0dXBXaWRn
ZXQobV9ndGtDb21ib0JveEJ1dHRvbik7Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihH
X09CSkVDVChtX2d0a0NvbWJvQm94QnV0dG9uKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+
KCZtX2d0a0NvbWJvQm94QnV0dG9uKSk7Ci0KLSAgICBDb21ib0JveFdpZGdldFBpZWNlcyBwaWVj
ZXMgPSB7IDAsIDAgfTsKLSAgICBHdGtXaWRnZXQqIGJ1dHRvbkNoaWxkID0gZ3RrX2Jpbl9nZXRf
Y2hpbGQoR1RLX0JJTihndGtDb21ib0JveEJ1dHRvbigpKSk7Ci0gICAgaWYgKEdUS19JU19IQk9Y
KGJ1dHRvbkNoaWxkKSkKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5F
UihidXR0b25DaGlsZCksIGdldEd0a0NvbWJvQm94UGllY2VzLCAmcGllY2VzKTsKLSAgICBlbHNl
IGlmIChHVEtfSVNfQVJST1coYnV0dG9uQ2hpbGQpKQotICAgICAgICBwaWVjZXMuYXJyb3cgPSBi
dXR0b25DaGlsZDsKLQotICAgIEFTU0VSVChwaWVjZXMuYXJyb3cpOwotICAgIG1fZ3RrQ29tYm9C
b3hBcnJvdyA9IHBpZWNlcy5hcnJvdzsKLSAgICBzZXR1cFdpZGdldChtX2d0a0NvbWJvQm94QXJy
b3cpOwotICAgIC8vIFdoZW4gdGhlIHN0eWxlIGNoYW5nZXMsIHRoZSBjb21ibyBib3ggbWF5IGRl
c3Ryb3kgaXRzIGNoaWxkcmVuLgotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV9ndGtDb21ib0JveEFycm93KSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0
a0NvbWJvQm94QXJyb3cpKTsKLQotICAgIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgPSBwaWVjZXMu
c2VwYXJhdG9yOwotICAgIGlmIChtX2d0a0NvbWJvQm94U2VwYXJhdG9yKSB7Ci0gICAgICAgIHNl
dHVwV2lkZ2V0KG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IpOwotICAgICAgICAvLyBXaGVuIHRoZSBz
dHlsZSBjaGFuZ2VzLCB0aGUgY29tYm8gYm94IG1heSBkZXN0cm95IGl0cyBjaGlsZHJlbi4KLSAg
ICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2d0a0NvbWJvQm94U2Vw
YXJhdG9yKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcio+KCZtX2d0a0NvbWJvQm94U2VwYXJh
dG9yKSk7Ci0gICAgfQotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0Jv
eEJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQ29tYm9Cb3hCdXR0b24pCi0gICAgICAg
IHJldHVybiBtX2d0a0NvbWJvQm94QnV0dG9uOwotICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVu
KCk7Ci0gICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hCdXR0b24pOwotICAgIHJldHVybiBtX2d0a0Nv
bWJvQm94QnV0dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtDb21ib0Jv
eEFycm93KCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtDb21ib0JveEFycm93KQotICAgICAgICBy
ZXR1cm4gbV9ndGtDb21ib0JveEFycm93OwotICAgIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCk7
Ci0gICAgQVNTRVJUKG1fZ3RrQ29tYm9Cb3hBcnJvdyk7Ci0gICAgcmV0dXJuIG1fZ3RrQ29tYm9C
b3hBcnJvdzsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrQ29tYm9Cb3hTZXBh
cmF0b3IoKSBjb25zdAotewotICAgIC8vIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3IgbWF5IGJlIG51
bGwgZWl0aGVyIGJlY2F1c2Ugd2UgaGF2ZW4ndCBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94Ci0g
ICAgLy8gb3IgYmVjYXVzZSB0aGUgY29tYm8gYm94ZXMgaW4gdGhpcyB0aGVtZSBkb24ndCBoYXZl
IHNlcGFyYXRvcnMuIElmIG1fZ3RrQ29tYm9Cb3hBcnJvdwotICAgIC8vIGFycm93IGlzbid0IG51
bGwsIHdlIGRlZmluaXRlbHkgaGF2ZSBpbml0aWFsaXplZCB0aGUgY29tYm8gYm94LgotICAgIGlm
IChtX2d0a0NvbWJvQm94QXJyb3cgfHwgbV9ndGtDb21ib0JveEJ1dHRvbikKLSAgICAgICAgcmV0
dXJuIG1fZ3RrQ29tYm9Cb3hTZXBhcmF0b3I7Ci0gICAgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4o
KTsKLSAgICByZXR1cm4gbV9ndGtDb21ib0JveFNlcGFyYXRvcjsKLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrSFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrSFNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fZ3RrSFNjcm9sbGJhcjsKLSAgICBtX2d0a0hTY3Jv
bGxiYXIgPSBndGtfaHNjcm9sbGJhcl9uZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0Nv
bnRhaW5lcihtX2d0a0hTY3JvbGxiYXIsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9n
dGtIU2Nyb2xsYmFyOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtWU2Nyb2xs
YmFyKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtWU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4g
bV9ndGtWU2Nyb2xsYmFyOwotICAgIG1fZ3RrVlNjcm9sbGJhciA9IGd0a192c2Nyb2xsYmFyX25l
dygwKTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVlNjcm9sbGJhciwg
Z3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1ZTY3JvbGxiYXI7Ci19Ci0KLUd0a1dp
ZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a1NwaW5CdXR0b24oKSBjb25zdAotewotICAgIGlmICht
X2d0a1NwaW5CdXR0b24pCi0gICAgICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Ci0gICAgbV9n
dGtTcGluQnV0dG9uID0gZ3RrX3NwaW5fYnV0dG9uX25ld193aXRoX3JhbmdlKDAsIDEwLCAxKTsK
LSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrU3BpbkJ1dHRvbiwgZ3RrQ29u
dGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1NwaW5CdXR0b247Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5YTdmNWEyYTJkMzAwMjBkODIyNDNjZTJhYWY4YjIwNTYwZmFkNTFmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTAwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0KLSNpZm5k
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKLQotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIK
LSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRl
ICJUZXh0RGlyZWN0aW9uLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLSNp
bmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUg
ZGVmaW5lZCBieSBHVEsrLCB3aGVyZSBpdCB3YXMgZGVmaW5lZCBhcyBNSU5fQVJST1dfU0laRSBp
biBndGthcnJvdy5jLgotc3RhdGljIGNvbnN0IGludCBtaW5BcnJvd1NpemUgPSAxNTsKLS8vIFRo
aXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsrLCB3aGVyZSBpdCB3YXMgZGVm
aW5lZCBhcyBNSU5fQVJST1dfV0lEVEggaW4gZ3Rrc3BpbmJ1dHRvbi5jLgotc3RhdGljIGNvbnN0
IGludCBtaW5TcGluQnV0dG9uQXJyb3dTaXplID0gNjsKLQotdHlwZWRlZiBIYXNoTWFwPEdUeXBl
LCBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gPiBTdHlsZUNvbnRleHRNYXA7Ci1zdGF0aWMgU3R5
bGVDb250ZXh0TWFwJiBzdHlsZUNvbnRleHRNYXAoKTsKLQotc3RhdGljIHZvaWQgZ3RrU3R5bGVD
aGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqKQotewotICAgIFN0eWxlQ29udGV4
dE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVDb250ZXh0TWFwKCkuZW5kKCk7Ci0gICAg
Zm9yIChTdHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdHlsZUNvbnRleHRN
YXAoKS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9pbnZhbGlkYXRlKGl0ZXItPnZhbHVlLmdldCgpKTsKLQotICAgIFBhZ2U6OnNjaGVkdWxl
Rm9yY2VkU3R5bGVSZWNhbGNGb3JBbGxQYWdlcygpOwotfQotCi1zdGF0aWMgU3R5bGVDb250ZXh0
TWFwJiBzdHlsZUNvbnRleHRNYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3R5bGVD
b250ZXh0TWFwLCBtYXAsICgpKTsKLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFs
c2U7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBHdGtTZXR0aW5ncyogc2V0dGlu
Z3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChzZXR0aW5ncywgIm5vdGlmeTo6Z3RrLXRoZW1lLW5hbWUiLCBHX0NBTExCQUNLKGd0a1N0eWxl
Q2hhbmdlZENhbGxiYWNrKSwgMCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3Ms
ICJub3RpZnk6Omd0ay1jb2xvci1zY2hlbWUiLCBHX0NBTExCQUNLKGd0a1N0eWxlQ2hhbmdlZENh
bGxiYWNrKSwgMCk7Ci0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIG1hcDsKLX0KLQotc3RhdGljIEd0a1N0eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdU
eXBlIHdpZGdldFR5cGUpCi17Ci0gICAgU3R5bGVDb250ZXh0TWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gc3R5bGVDb250ZXh0TWFwKCkuYWRkKHdpZGdldFR5cGUsIDApOwotICAgIGlmICghcmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgp
OwotCi0gICAgR3RrV2lkZ2V0UGF0aCogcGF0aCA9IGd0a193aWRnZXRfcGF0aF9uZXcoKTsKLSAg
ICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwgd2lkZ2V0VHlwZSk7Ci0KLSAgICBp
ZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TQ1JPTExCQVIpCi0gICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0NST0xMQkFSKTsK
LSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKQotICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZ
KTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0FSUk9XKQotICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgImFycm93Iik7Ci0gICAgZWxz
ZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9CVVRUT04pCi0gICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAg
ICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NDQUxFKQotICAgICAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDQUxFKTsK
LSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NFUEFSQVRPUikKLSAgICAgICAg
Z3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19T
RVBBUkFUT1IpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfUFJPR1JFU1Nf
QkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RL
X1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdU
S19UWVBFX1NQSU5fQlVUVE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xh
c3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NQSU5CVVRUT04pOwotICAgIGVsc2UgaWYgKHdp
ZGdldFR5cGUgPT0gR1RLX1RZUEVfVFJFRV9WSUVXKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1ZJRVcpOwotICAgIGVsc2Ug
aWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKQotICAgICAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0NIRUNLKTsK
LSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1JBRElPX0JVVFRPTikKLSAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFT
U19SQURJTyk7Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X3BhdGgoY29udGV4dC5nZXQoKSwgcGF0aCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2ZyZWUocGF0
aCk7Ci0KLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29udGV4dDsKLSAgICByZXR1cm4g
Y29udGV4dC5nZXQoKTsKLX0KLQotR3RrU3R5bGVDb250ZXh0KiBSZW5kZXJUaGVtZUd0azo6Z3Rr
U2Nyb2xsYmFyU3R5bGUoKQotewotICAgIHJldHVybiBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
U0NST0xMQkFSKTsKLX0KLQotLy8gVGhpcyBpcyBub3QgYSBzdGF0aWMgbWV0aG9kLCBiZWNhdXNl
IHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIEdUSysgaGVhZGVycyBpbiBSZW5kZXJUaGVtZUd0ay5o
LgotZXh0ZXJuIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0aW9u
KTsKLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkKLXsKLX0KLQotUmVuZGVy
VGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0aygpCi17Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12
b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFDb2xvcnMoKQotewotICAgIEdka1JHQkEgY29s
b3I7Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250YWluZXJDb250ZXh0ID0gZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX0NPTlRBSU5FUik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFj
a2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19OT1JNQUwsICZj
b2xvcik7Ci0gICAgbV9wYW5lbENvbG9yID0gY29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfQUNU
SVZFLCAmY29sb3IpOwotICAgIG1fc2xpZGVyQ29sb3IgPSBjb2xvcjsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVf
RkxBR19TRUxFQ1RFRCwgJmNvbG9yKTsKLSAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBjb2xvcjsK
LX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9jdXMoR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0LCBJbnRSZWN0JiByZWN0KQotewotICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9j
dXNQYWQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3Vz
UGFkLCBOVUxMKTsKLSAgICByZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFkKTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJPYmplY3QsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0ID0gMDsKLSAgICBib29sIGNoZWNrSW50ZXJpb3JGb2N1cyA9IGZhbHNlOwotICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSByZW5kZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsK
LSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBjYXNlIFJh
ZGlvUGFydDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChwYXJ0ID09IENoZWNr
Ym94UGFydCA/IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA6IEdUS19UWVBFX1JBRElPX0JVVFRPTik7
Ci0KLSAgICAgICAgZ2ludCBpbmRpY2F0b3JTcGFjaW5nOwotICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1zcGFjaW5nIiwgJmluZGljYXRvclNw
YWNpbmcsIE5VTEwpOwotICAgICAgICByZWN0LmluZmxhdGUoaW5kaWNhdG9yU3BhY2luZyk7Ci0K
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgIGNhc2Ug
U2xpZGVySG9yaXpvbnRhbFBhcnQ6Ci0gICAgICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfU0NBTEUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0g
ICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAg
ICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKLSAgICAgICAg
Y2hlY2tJbnRlcmlvckZvY3VzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0
RmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0
U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKTsKLSAgICAgICAgY2hlY2tJbnRlcmlvckZvY3Vz
ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAoY2hlY2tJbnRlcmlvckZvY3Vz
KSB7Ci0gICAgICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7Ci0gICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JGb2N1
cywgTlVMTCk7Ci0gICAgICAgIGlmIChpbnRlcmlvckZvY3VzKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJT
dHlsZSogc3R5bGUpCi17Ci0gICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCi0gICAgaWYgKCFzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIE90aGVyIHBvcnRzIGhhcmQtY29kZSB0aGlzIHRvIDEz
IHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsrLgotICAgIC8v
IEdUSysgdXNlcnMgdGVuZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgotICAgIC8vIEl0IGNv
dWxkIGJlIG1hZGUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3RoZXIgdGhhbiAxMyBh
Y3R1YWxseSBicmVhayBzaXRlIGNvbXBhdGliaWxpdHkuCi0gICAgZ2ludCBpbmRpY2F0b3JTaXpl
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNp
emUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7Ci0KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0
b3JTaXplLCBGaXhlZCkpOwotCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKLX0K
LQotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBH
VHlwZSB3aWRnZXRUeXBlLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQotewotICAgIEd0a1N0eWxl
Q29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgLy8gU29tZSB0aGVtZXMgZG8gbm90
IHJlbmRlciBsYXJnZSB0b2dnbGUgYnV0dG9ucyBwcm9wZXJseSwgc28gd2Ugc2ltcGx5Ci0gICAg
Ly8gc2hyaW5rIHRoZSByZWN0YW5nbGUgYmFjayBkb3duIHRvIHRoZSBkZWZhdWx0IHNpemUgYW5k
IHRoZW4gY2VudGVyIGl0Ci0gICAgLy8gaW4gdGhlIGZ1bGwgdG9nZ2xlIGJ1dHRvbiByZWdpb24u
IFRoZSByZWFzb24gZm9yIG5vdCBzaW1wbHkgZm9yY2luZyB0b2dnbGUKLSAgICAvLyBidXR0b25z
IHRvIGJlIGEgc21hbGxlciBzaXplIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBicmVhayBzaXRl
IGxheW91dHMuCi0gICAgZ2ludCBpbmRpY2F0b3JTaXplOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVM
TCk7Ci0gICAgSW50UmVjdCByZWN0KGZ1bGxSZWN0KTsKLSAgICBpZiAocmVjdC53aWR0aCgpID4g
aW5kaWNhdG9yU2l6ZSkgewotICAgICAgICByZWN0LmluZmxhdGVYKC0ocmVjdC53aWR0aCgpIC0g
aW5kaWNhdG9yU2l6ZSkgLyAyKTsKLSAgICAgICAgcmVjdC5zZXRXaWR0aChpbmRpY2F0b3JTaXpl
KTsgLy8gSW4gY2FzZSByZWN0LndpZHRoKCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAx
LgotICAgIH0KLQotICAgIGlmIChyZWN0LmhlaWdodCgpID4gaW5kaWNhdG9yU2l6ZSkgewotICAg
ICAgICByZWN0LmluZmxhdGVZKC0ocmVjdC5oZWlnaHQoKSAtIGluZGljYXRvclNpemUpIC8gMik7
Ci0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KGluZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3Qu
aGVpZ2h0KCkgd2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAxLgotICAgIH0KLQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVj
dGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCB3aWRn
ZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA/IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6
IEdUS19TVFlMRV9DTEFTU19SQURJTyk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYg
KCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlDb250
cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VO
U0lUSVZFOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKLSAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgaWYgKHRoZW1lLT5p
c0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfSU5DT05TSVNURU5UOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0NoZWNrZWQocmVuZGVy
T2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwotICAgIGlm
ICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19T
VEFURV9GTEFHX1NFTEVDVEVEOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250
ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgaWYgKHdpZGdl
dFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKQotICAgICAgICBndGtfcmVuZGVyX2NoZWNr
KGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgZ3RrX3JlbmRlcl9vcHRpb24oY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3Qp
KSB7Ci0gICAgICAgIEludFJlY3QgaW5kaWNhdG9yUmVjdChyZWN0KTsKLSAgICAgICAgZ2ludCBp
bmRpY2F0b3JTcGFjaW5nOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwgImluZGljYXRvci1zcGFjaW5nIiwgJmluZGljYXRvclNwYWNpbmcsIE5VTEwpOwotICAg
ICAgICBpbmRpY2F0b3JSZWN0LmluZmxhdGUoaW5kaWNhdG9yU3BhY2luZyk7Ci0gICAgICAgIGd0
a19yZW5kZXJfZm9jdXMoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpLCBpbmRpY2F0b3JSZWN0LngoKSwgaW5kaWNhdG9yUmVjdC55KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yUmVjdC53aWR0aCgpLCBpbmRpY2F0b3JSZWN0Lmhl
aWdodCgpKTsKLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQp
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX0NIRUNLX0JVVFRPTiksIHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRDaGVja2JveChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywg
R1RLX1RZUEVfQ0hFQ0tfQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX1JBRElPX0JVVFRPTiksIHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dn
bGUodGhpcywgR1RLX1RZUEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywg
cmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCByZW5kZXJCdXR0b24o
UmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7Ci0KLSAgICBndWludCBm
bGFncyA9IDA7Ci0gICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhl
bWUtPmlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQo
cmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7
Ci0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0
ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgaWYg
KHRoZW1lLT5pc0RlZmF1bHQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBHdGtCb3JkZXIqIGJv
cmRlclB0ciA9IDA7Ci0gICAgICAgIEd0a0JvcmRlciBib3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsK
LQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImRlZmF1bHQt
Ym9yZGVyIiwgJmJvcmRlclB0ciwgTlVMTCk7Ci0gICAgICAgIGlmIChib3JkZXJQdHIpIHsKLSAg
ICAgICAgICAgIGJvcmRlciA9ICpib3JkZXJQdHI7Ci0gICAgICAgICAgICBndGtfYm9yZGVyX2Zy
ZWUoYm9yZGVyUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1dHRvblJlY3QubW92ZShib3Jk
ZXIubGVmdCwgYm9yZGVyLnRvcCk7Ci0gICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYnV0dG9u
UmVjdC53aWR0aCgpIC0gKGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0KSk7Ci0gICAgICAgIGJ1
dHRvblJlY3Quc2V0SGVpZ2h0KGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoYm9yZGVyLnRvcCArIGJv
cmRlci5ib3R0b20pKTsKLQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgR1RLX1NUWUxFX0NMQVNTX0RFRkFVTFQpOwotICAgIH0KLQotICAgIGd0a19yZW5kZXJf
YmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgp
LCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCks
IGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBn
aW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgICAgICBnYm9vbGVhbiBkaXNwbGFjZUZvY3Vz
LCBpbnRlcmlvckZvY3VzOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdp
ZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Zm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRpc3BsYWNlLWZvY3VzIiwgJmRpc3BsYWNlRm9jdXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgICAgICBpZiAo
aW50ZXJpb3JGb2N1cykgewotICAgICAgICAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOwotICAg
ICAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPihmbGFncyksICZib3JkZXJXaWR0aCk7Ci0KLSAgICAgICAgICAgIGJ1
dHRvblJlY3QgPSBJbnRSZWN0KGJ1dHRvblJlY3QueCgpICsgYm9yZGVyV2lkdGgubGVmdCArIGZv
Y3VzUGFkLCBidXR0b25SZWN0LnkoKSArIGJvcmRlcldpZHRoLnRvcCArIGZvY3VzUGFkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC53aWR0aCgpIC0gKDIgKiBm
b2N1c1BhZCArIGJvcmRlcldpZHRoLmxlZnQgKyBib3JkZXJXaWR0aC5yaWdodCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25SZWN0LmhlaWdodCgpIC0gKDIgKiBmb2N1
c1BhZCArIGJvcmRlcldpZHRoLnRvcCArIGJvcmRlcldpZHRoLmJvdHRvbSkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQ
YWQpOwotCi0gICAgICAgIGlmIChkaXNwbGFjZUZvY3VzICYmIHRoZW1lLT5pc1ByZXNzZWQocmVu
ZGVyT2JqZWN0KSkgewotICAgICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFg7Ci0gICAg
ICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WTsKLSAgICAgICAgICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJjaGlsZC1kaXNwbGFjZW1lbnQteCIsICZjaGlsZERpc3BsYWNlbWVudFgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVu
dC15IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QubW92ZShjaGlsZERpc3Bs
YWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBndGtf
cmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRo
KCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwotICAgIH0KLX0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQq
IGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2Rp
cmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGly
ZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7Ci0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwot
Ci0gICAgcmVuZGVyQnV0dG9uKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZv
LCByZWN0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldENvbWJvQm94TWV0cmljcyhSZW5k
ZXJTdHlsZSogc3R5bGUsIEd0a0JvcmRlciYgYm9yZGVyLCBpbnQmIGZvY3VzLCBpbnQmIHNlcGFy
YXRvcikKLXsKLSAgICAvLyBJZiB0aGlzIG1lbnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNp
bmcgdGhlIG5hdGl2ZSB0aGVtZSwgd2UKLSAgICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRp
bmcgYmV5b25kIHdoYXQgV2ViQ29yZSBhbHJlYWR5IHVzZXMuCi0gICAgaWYgKHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrU3R5
bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1Rl
eHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigpKSkpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtT
dGF0ZUZsYWdzPigwKSwgJmJvcmRlcik7Ci0KLSAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOwot
ICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmlv
ci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgTlVMTCk7Ci0gICAgZm9jdXMg
PSBpbnRlcmlvckZvY3VzID8gZm9jdXNXaWR0aCArIGZvY3VzUGFkIDogMDsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICBjb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX1NFUEFSQVRPUik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShj
b250ZXh0KTsKLQotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKTsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsICJzZXBhcmF0b3IiKTsK
LQotICAgIGdib29sZWFuIHdpZGVTZXBhcmF0b3JzOwotICAgIGdpbnQgc2VwYXJhdG9yV2lkdGg7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRvcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJh
dG9yV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAg
Ly8gR1RLKyBhbHdheXMgdXNlcyBib3JkZXIubGVmdCwgcmVnYXJkbGVzcyBvZiB0ZXh0IGRpcmVj
dGlvbi4gU2VlIGd0a3NlcGVyYXRvci5jLgotICAgIGlmICghd2lkZVNlcGFyYXRvcnMpCi0gICAg
ICAgIHNlcGFyYXRvcldpZHRoID0gYm9yZGVyLmxlZnQ7Ci0KLSAgICBzZXBhcmF0b3IgPSBzZXBh
cmF0b3JXaWR0aDsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci19
Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAs
IDAsIDAgfTsKLSAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAg
ICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBh
cmF0b3JXaWR0aCk7Ci0gICAgaW50IGxlZnQgPSBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNXaWR0
aDsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgbGVmdCArPSBz
ZXBhcmF0b3JXaWR0aCArIG1pbkFycm93U2l6ZTsKLSAgICByZXR1cm4gbGVmdDsKLX0KLQotaW50
IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAg
fTsKLSAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBnZXRD
b21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JX
aWR0aCk7Ci0gICAgaW50IHJpZ2h0ID0gYm9yZGVyV2lkdGgucmlnaHQgKyBmb2N1c1dpZHRoOwot
ICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICByaWdodCArPSBzZXBh
cmF0b3JXaWR0aCArIG1pbkFycm93U2l6ZTsKLSAgICByZXR1cm4gcmlnaHQ7Ci19Ci0KLWludCBS
ZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAotewotICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9Owot
ICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwotICAgIGdldENvbWJv
Qm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRo
KTsKLSAgICByZXR1cm4gYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKLX0KLQotaW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Ci17Ci0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07
Ci0gICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29t
Ym9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lk
dGgpOwotICAgIHJldHVybiBib3JkZXJXaWR0aC5ib3R0b20gKyBmb2N1c1dpZHRoOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCk7Ci0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLQotICAgIC8vIFBhaW50IHRoZSBidXR0b24uCi0gICAgR3Rr
U3R5bGVDb250ZXh0KiBidXR0b25TdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfQlVUVE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGJ1dHRvblN0eWxlQ29udGV4
dCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihidXR0b25TdHlsZUNvbnRl
eHQsIGRpcmVjdGlvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGJ1dHRvblN0
eWxlQ29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAgcmVuZGVyQnV0dG9uKHRo
aXMsIGJ1dHRvblN0eWxlQ29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwot
Ci0gICAgLy8gR2V0IHRoZSBpbm5lciByZWN0YW5nbGUuCi0gICAgZ2ludCBmb2N1c1dpZHRoLCBm
b2N1c1BhZDsKLSAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyUHRyID0gMDsKLSAgICBHdGtCb3Jk
ZXIgaW5uZXJCb3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW5uZXItYm9yZGVyIiwgJmlubmVyQm9yZGVyUHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKGlubmVyQm9yZGVyUHRy
KSB7Ci0gICAgICAgIGlubmVyQm9yZGVyID0gKmlubmVyQm9yZGVyUHRyOwotICAgICAgICBndGtf
Ym9yZGVyX2ZyZWUoaW5uZXJCb3JkZXJQdHIpOwotICAgIH0KLQotICAgIEd0a0JvcmRlciBib3Jk
ZXJXaWR0aDsKLSAgICBHdGtTdGF0ZUZsYWdzIHN0YXRlID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X3N0YXRlKGJ1dHRvblN0eWxlQ29udGV4dCk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2Jv
cmRlcihidXR0b25TdHlsZUNvbnRleHQsIHN0YXRlLCAmYm9yZGVyV2lkdGgpOwotCi0gICAgZm9j
dXNXaWR0aCArPSBmb2N1c1BhZDsKLSAgICBJbnRSZWN0IGlubmVyUmVjdChyZWN0LngoKSArIGlu
bmVyQm9yZGVyLmxlZnQgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNXaWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICByZWN0LnkoKSArIGlubmVyQm9yZGVyLnRvcCArIGJvcmRlcldpZHRoLnRv
cCArIGZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gYm9y
ZGVyV2lkdGgubGVmdCAtIGJvcmRlcldpZHRoLnJpZ2h0IC0gaW5uZXJCb3JkZXIubGVmdCAtIGlu
bmVyQm9yZGVyLnJpZ2h0IC0gKDIgKiBmb2N1c1dpZHRoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICByZWN0LmhlaWdodCgpIC0gYm9yZGVyV2lkdGgudG9wIC0gYm9yZGVyV2lkdGguYm90dG9tIC0g
aW5uZXJCb3JkZXIudG9wIC0gaW5uZXJCb3JkZXIuYm90dG9tIC0gKDIgKiBmb2N1c1dpZHRoKSk7
Ci0KLSAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBjaGls
ZERpc3BsYWNlbWVudFg7Ci0gICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRZOwotICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNo
aWxkRGlzcGxhY2VtZW50WCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
aGlsZC1kaXNwbGFjZW1lbnQteSIsICZjaGlsZERpc3BsYWNlbWVudFksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgaW5uZXJSZWN0Lm1vdmUoY2hp
bGREaXNwbGFjZW1lbnRYLCBjaGlsZERpc3BsYWNlbWVudFkpOwotICAgIH0KLSAgICBpbm5lclJl
Y3Quc2V0V2lkdGgobWF4KDEsIGlubmVyUmVjdC53aWR0aCgpKSk7Ci0gICAgaW5uZXJSZWN0LnNl
dEhlaWdodChtYXgoMSwgaW5uZXJSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBndGtfc3R5bGVfY29u
dGV4dF9yZXN0b3JlKGJ1dHRvblN0eWxlQ29udGV4dCk7Ci0KLSAgICAvLyBQYWludCB0aGUgYXJy
b3cuCi0gICAgR3RrU3R5bGVDb250ZXh0KiBhcnJvd1N0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9BUlJPVyk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShhcnJvd1N0
eWxlQ29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGFycm93
U3R5bGVDb250ZXh0LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhhcnJvd1N0eWxlQ29udGV4dCwgImFycm93Iik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLQotICAg
IGdmbG9hdCBhcnJvd1NjYWxpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGFy
cm93U3R5bGVDb250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOwot
Ci0gICAgSW50U2l6ZSBhcnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5lclJlY3QuaGVpZ2h0KCkp
OwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb3NpdGlvbihpbm5lclJlY3QubG9jYXRpb24oKSk7Ci0g
ICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICBhcnJvd1Bvc2l0
aW9uLm1vdmUoaW5uZXJSZWN0LndpZHRoKCkgLSBhcnJvd1NpemUud2lkdGgoKSwgMCk7Ci0KLSAg
ICAvLyBHVEsrIGFjdHVhbGx5IGZldGNoZXMgdGhlIHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBm
cm9tIHRoZSB3aWRnZXQsIGJ1dCBzaW5jZSB3ZQotICAgIC8vIGRvbid0IGhhdmUgYSB3aWRnZXQg
aGVyZSwgd2UgYXJlIGp1c3QgdXNpbmcgdGhlIGRlZmF1bHQgeGFsaWduIGFuZCB2YWxpZ24gdmFs
dWVzIG9mIDAuNS4KLSAgICBnaW50IGV4dGVudCA9IHN0ZDo6bWluKGFycm93U2l6ZS53aWR0aCgp
LCBhcnJvd1NpemUuaGVpZ2h0KCkpICogYXJyb3dTY2FsaW5nOwotICAgIGFycm93UG9zaXRpb24u
bW92ZSgoYXJyb3dTaXplLndpZHRoKCkgLSBleHRlbnQpIC8gMiwgKGFycm93U2l6ZS5oZWlnaHQo
KSAtIGV4dGVudCkgLyAyKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShhcnJv
d1N0eWxlQ29udGV4dCwgc3RhdGUpOwotICAgIGd0a19yZW5kZXJfYXJyb3coYXJyb3dTdHlsZUNv
bnRleHQsIGNhaXJvQ29udGV4dCwgR19QSSwgYXJyb3dQb3NpdGlvbi54KCksIGFycm93UG9zaXRp
b24ueSgpLCBleHRlbnQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShhcnJvd1N0
eWxlQ29udGV4dCk7Ci0KLSAgICAvLyBQYWludCB0aGUgc2VwYXJhdG9yIGlmIG5lZWRlZC4KLSAg
ICBHdGtTdHlsZUNvbnRleHQqIHNlcGFyYXRvclN0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4
dChHVEtfVFlQRV9DT01CT19CT1gpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoc2VwYXJh
dG9yU3R5bGVDb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
c2VwYXJhdG9yU3R5bGVDb250ZXh0LCBkaXJlY3Rpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhzZXBhcmF0b3JTdHlsZUNvbnRleHQsICJzZXBhcmF0b3IiKTsKLQotICAgIGdi
b29sZWFuIHdpZGVTZXBhcmF0b3JzOwotICAgIGdpbnQgc2VwYXJhdG9yV2lkdGg7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHNlcGFyYXRvclN0eWxlQ29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9y
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcGFyYXRvci13aWR0aCIsICZz
ZXBhcmF0b3JXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0g
ICAgaWYgKHdpZGVTZXBhcmF0b3JzICYmICFzZXBhcmF0b3JXaWR0aCkgewotICAgICAgICBndGtf
c3R5bGVfY29udGV4dF9yZXN0b3JlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2Vw
YXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSk7Ci0gICAgSW50UG9pbnQgc2VwYXJhdG9yUG9zaXRp
b24oYXJyb3dQb3NpdGlvbi54KCksIGlubmVyUmVjdC55KCkpOwotICAgIGlmICh3aWRlU2VwYXJh
dG9ycykgewotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAg
ICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKC1zZXBhcmF0b3JXaWR0aCwgMCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoYXJyb3dTaXplLndp
ZHRoKCksIDApOwotCi0gICAgICAgIGd0a19yZW5kZXJfZnJhbWUoc2VwYXJhdG9yU3R5bGVDb250
ZXh0LCBjYWlyb0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9z
aXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgc2VwYXJhdG9yV2lkdGgsIGlubmVyUmVjdC5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9w
YWRkaW5nKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgc3RhdGUsICZwYWRkaW5nKTsKLSAgICAgICAg
R3RrQm9yZGVyIGJvcmRlcjsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihz
ZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlLCAmYm9yZGVyKTsKLQotICAgICAgICBpZiAoZGly
ZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlv
bi5tb3ZlKC0ocGFkZGluZy5sZWZ0ICsgYm9yZGVyLmxlZnQpLCAwKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7
Ci0KLSAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0NvbnRleHQpOwotCi0gICAgICAgIC8vIEFuIGV4
dHJhIGNsaXAgcHJldmVudHMgdGhlIHNlcGFyYXRvciBibGVlZGluZyBvdXRzaWRlIG9mIHRoZSBz
cGVjaWZpZWQgcmVjdGFuZ2xlIGJlY2F1c2Ugb2Ygc3VicGl4ZWwgcG9zaXRpb25pbmcuCi0gICAg
ICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRleHQsIHNlcGFyYXRvclBvc2l0aW9uLngoKSwg
c2VwYXJhdG9yUG9zaXRpb24ueSgpLCBib3JkZXIubGVmdCwgaW5uZXJSZWN0LmhlaWdodCgpKTsK
LSAgICAgICAgY2Fpcm9fY2xpcChjYWlyb0NvbnRleHQpOwotICAgICAgICBndGtfcmVuZGVyX2xp
bmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0Lm1h
eFkoKSk7Ci0gICAgICAgIGNhaXJvX3Jlc3RvcmUoY2Fpcm9Db250ZXh0KTsKLSAgICB9Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHNlcGFyYXRvclN0eWxlQ29udGV4dCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0
U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0KLSAgICBndWludCBmbGFn
cyA9IDA7Ci0gICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29u
dHJvbChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNF
TlNJVElWRTsKLSAgICBlbHNlIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAg
ZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfRk9DVVNFRDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQot
ICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmpl
Y3QpICYmIGlzRW5hYmxlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIGdib29sZWFuIGludGVy
aW9yRm9jdXM7Ci0gICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmci
LCAmZm9jdXNQYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
LSAgICAgICAgaWYgKCFpbnRlcmlvckZvY3VzKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGZvY3Vz
UmVjdChyZWN0KTsKLSAgICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBm
b2N1c1BhZCk7Ci0gICAgICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9jdXNSZWN0LngoKSwgZm9jdXNSZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCks
IGZvY3VzUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBndGtfc3R5bGVf
Y29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgdm9pZCBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBj
b250ZXh0LCBDb250cm9sUGFydCBwYXJ0KQotewotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0NBTEUpOwotICAgIGlmIChwYXJ0ID09IFNs
aWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkK
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19IT1JJWk9OVEFMKTsKLSAgICBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFy
dCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpOwotICAgIEFTU0VSVF9VTlVTRUQocGFydCwgcGFydCA9PSBTbGlkZXJIb3Jpem9u
dGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9s
dW1lU2xpZGVyUGFydCk7Ci0KLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29u
dGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGd0
a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotICAg
IGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhjb250ZXh0LCBwYXJ0KTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7
Ci0KLSAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9s
KHJlbmRlck9iamVjdCkpCi0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250
ZXh0LCBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tn
cm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCi0gICAgICAgICAgICAgICAg
ICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0K
LSAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgZ2ludCBmb2N1c1dp
ZHRoLCBmb2N1c1BhZDsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtbGluZS13aWR0
aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZv
Y3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsIE5VTEwpOwotICAgICAgICBJbnRSZWN0IGZvY3VzUmVj
dChyZWN0KTsKLSAgICAgICAgZm9jdXNSZWN0LmluZmxhdGUoZm9jdXNXaWR0aCArIGZvY3VzUGFk
KTsKLSAgICAgICAgZ3RrX3JlbmRlcl9mb2N1cyhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNS
ZWN0LngoKSwgZm9jdXNSZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWln
aHQoKSk7Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5k
ZXJPYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlQocGFydCA9PSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQg
fHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0KLSAgICBHdGtTdHlsZUNv
bnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfZGlyZWN0aW9uKGNvbnRleHQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSkpOwotICAgIGFwcGx5U2xpZGVyU3R5bGVDb250ZXh0Q2xhc3Nlcyhj
b250ZXh0LCBwYXJ0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwg
R1RLX1NUWUxFX0NMQVNTX1NMSURFUik7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYg
KCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmpl
Y3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBl
bHNlIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7
Ci0KLSAgICBndGtfcmVuZGVyX3NsaWRlcihjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPT0gU2xpZGVyVGh1bWJI
b3Jpem9udGFsUGFydCA/IEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMIDogR1RLX09SSUVOVEFU
SU9OX1ZFUlRJQ0FMKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ICE9
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2ludCBzbGlkZXJXaWR0aCwgc2xpZGVyTGVu
Z3RoOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfU0NBTEUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdp
ZHRoIiwgJnNsaWRlcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xp
ZGVyLWxlbmd0aCIsICZzbGlkZXJMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsK
LSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOwotfQotCi0jaWYgRU5BQkxFKFBST0dS
RVNTX0VMRU1FTlQpCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNQcm9ncmVzcygpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9QUk9HUkVTU19CQVIpOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91
bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3Rr
X3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOwotCi0KLSAgICBHdGtC
b3JkZXIgcGFkZGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwotICAgIEludFJlY3Qg
cHJvZ3Jlc3NSZWN0KHJlY3QueCgpICsgcGFkZGluZy5sZWZ0LCByZWN0LnkoKSArIHBhZGRpbmcu
dG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIChwYWRkaW5nLmxl
ZnQgKyBwYWRkaW5nLnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdo
dCgpIC0gKHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b20pKTsKLSAgICBwcm9ncmVzc1JlY3Qg
PSBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KHJlbmRlck9iamVjdCwgcHJv
Z3Jlc3NSZWN0KTsKLQotICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
Z3RrX3JlbmRlcl9hY3Rpdml0eShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNyKCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVjdC55KCksIHByb2dy
ZXNzUmVjdC53aWR0aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYK
LQotc3RhdGljIGdpbnQgc3BpbkJ1dHRvbkFycm93U2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgY29uc3QgUGFuZ29Gb250RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbjsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9nZXQoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVG
bGFncz4oMCksICJmb250IiwgJmZvbnREZXNjcmlwdGlvbiwgTlVMTCk7Ci0gICAgZ2ludCBmb250
U2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUoZm9udERlc2NyaXB0aW9uKTsK
LSAgICBnaW50IGFycm93U2l6ZSA9IG1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGlu
QnV0dG9uQXJyb3dTaXplKTsKLQotICAgIHJldHVybiBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAy
OyAvLyBGb3JjZSBldmVuLgotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfU1BJTl9CVVRUT04pOwotCi0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oMCksICZwYWRkaW5nKTsKLQotICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJv
d1NpemUoY29udGV4dCkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OwotICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRo
KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLX0KLQotc3RhdGljIHZvaWQgcGFpbnRTcGluQXJyb3dC
dXR0b24oUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRl
ck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCwgR3RrQXJyb3dUeXBlIGFycm93VHlwZSkKLXsKLSAgICBBU1NFUlQoYXJy
b3dUeXBlID09IEdUS19BUlJPV19VUCB8fCBhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04pOwot
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0KLSAgICBH
dGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9kaXJlY3Rp
b24oY29udGV4dCk7Ci0gICAgZ3VpbnQgc3RhdGUgPSBzdGF0aWNfY2FzdDxndWludD4oZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRleHQpKTsKLSAgICBpZiAoIShzdGF0ZSAmIEdUS19T
VEFURV9GTEFHX0lOU0VOU0lUSVZFKSkgewotICAgICAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChy
ZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgICAgICBpZiAoKGFycm93VHlwZSA9PSBHVEtfQVJST1df
VVAgJiYgdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAg
ICAgICAgICAgICAgICB8fCAoYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOICYmICF0aGVtZS0+
aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKSkKLSAgICAgICAgICAgICAg
ICBzdGF0ZSB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhl
bWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgICAgICBpZiAoKGFycm93VHlw
ZSA9PSBHVEtfQVJST1dfVVAgJiYgdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVu
ZGVyT2JqZWN0KSkKLSAgICAgICAgICAgICAgICB8fCAoYXJyb3dUeXBlID09IEdUS19BUlJPV19E
T1dOICYmICF0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKSkK
LSAgICAgICAgICAgICAgICBzdGF0ZSB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oc3RhdGUpKTsKLQotICAgIC8vIFBhaW50IGJ1dHRvbi4K
LSAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7Ci0gICAgZ3VpbnQganVuY3Rpb24gPSBndGtf
c3R5bGVfY29udGV4dF9nZXRfanVuY3Rpb25fc2lkZXMoY29udGV4dCk7Ci0gICAgaWYgKGFycm93
VHlwZSA9PSBHVEtfQVJST1dfVVApCi0gICAgICAgIGp1bmN0aW9uIHw9IEdUS19KVU5DVElPTl9C
T1RUT007Ci0gICAgZWxzZSB7Ci0gICAgICAgIGp1bmN0aW9uIHw9IEdUS19KVU5DVElPTl9UT1A7
Ci0gICAgICAgIGJ1dHRvblJlY3QubW92ZSgwLCByZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgfQot
ICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfanVuY3Rpb25fc2lkZXMoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrSnVu
Y3Rpb25TaWRlcz4oanVuY3Rpb24pKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250
ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJl
Y3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0Lmhl
aWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgp
LCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwotCi0gICAgLy8gUGFp
bnQgYXJyb3cgY2VudGVyZWQgaW5zaWRlIGJ1dHRvbi4KLSAgICAvLyBUaGlzIGNvZGUgaXMgYmFz
ZWQgb24gZ3Rrc3BpbmJ1dHRvbi5jIGNvZGUuCi0gICAgSW50UmVjdCBhcnJvd1JlY3Q7Ci0gICAg
Z2RvdWJsZSBhbmdsZTsKLSAgICBpZiAoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCkgewotICAg
ICAgICBhbmdsZSA9IDA7Ci0gICAgICAgIGFycm93UmVjdC5zZXRZKHJlY3QueSgpKTsKLSAgICAg
ICAgYXJyb3dSZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gMiAtIDIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGFuZ2xlID0gR19QSTsKLSAgICAgICAgYXJyb3dSZWN0LnNldFkocmVjdC55
KCkgKyBidXR0b25SZWN0LnkoKSk7Ci0gICAgICAgIGFycm93UmVjdC5zZXRIZWlnaHQocmVjdC5o
ZWlnaHQoKSAtIGFycm93UmVjdC55KCkgLSAyKTsKLSAgICB9Ci0gICAgYXJyb3dSZWN0LnNldFdp
ZHRoKHJlY3Qud2lkdGgoKSAtIDMpOwotICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElS
X0xUUikKLSAgICAgICAgYXJyb3dSZWN0LnNldFgocmVjdC54KCkgKyAxKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3QueCgpICsgMik7Ci0KLSAgICBnaW50IHdpZHRoID0g
YXJyb3dSZWN0LndpZHRoKCkgLyAyOwotICAgIHdpZHRoIC09IHdpZHRoICUgMiAtIDE7IC8vIEZv
cmNlIG9kZC4KLSAgICBnaW50IGhlaWdodCA9ICh3aWR0aCArIDEpIC8gMjsKLQotICAgIGFycm93
UmVjdC5tb3ZlKChhcnJvd1JlY3Qud2lkdGgoKSAtIHdpZHRoKSAvIDIsIChhcnJvd1JlY3QuaGVp
Z2h0KCkgLSBoZWlnaHQpIC8gMik7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhjb250ZXh0LCBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFuZ2xlLCBhcnJvd1JlY3Qu
eCgpLCBhcnJvd1JlY3QueSgpLCB3aWR0aCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0
b3JlKGNvbnRleHQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1
dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0
ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24g
PSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
ZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0g
ICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5k
ZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsK
LSAgICBlbHNlIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfRk9DVVNFRDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUo
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9yZW1vdmVfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsK
LQotICAgIHBhaW50U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1dfVVApOwotICAgIHBhaW50U3BpbkFycm93QnV0dG9u
KHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1df
RE9XTik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lk
Z2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJl
Y3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0
KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotICAgIEd0a0ljb25TZXQq
IGljb25TZXQgPSBndGtfc3R5bGVfY29udGV4dF9sb29rdXBfaWNvbl9zZXQoY29udGV4dCwgaWNv
bk5hbWUpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd1
aW50IGZsYWdzID0gMDsKLSAgICBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX1BSRUxJR0hUKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBlbHNlIGlmIChzdGF0
ZSA9PSBHVEtfU1RBVEVfSU5TRU5TSVRJVkUpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9G
TEFHX0lOU0VOU0lUSVZFOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9u
PihkaXJlY3Rpb24pKTsKLSAgICBHZGtQaXhidWYqIGljb24gPSBndGtfaWNvbl9zZXRfcmVuZGVy
X2ljb25fcGl4YnVmKGljb25TZXQsIGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a0ljb25TaXplPihp
Y29uU2l6ZSkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQot
ICAgIHJldHVybiBhZG9wdEdSZWYoaWNvbik7Ci19Ci0KLUdSZWZQdHI8R2RrUGl4YnVmPiBnZXRT
dG9ja1N5bWJvbGljSWNvbkZvcldpZGdldFR5cGUoR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgY2hh
ciogc3ltYm9saWNJY29uTmFtZSwgY29uc3QgY2hhciAqZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBn
aW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKLXsKLSAgICBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0KLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwot
ICAgIGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfUFJFTElHSFQpCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgIGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9J
TlNFTlNJVElWRSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7
Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8
R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0
aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOwot
ICAgIEd0a0ljb25JbmZvKiBpbmZvID0gZ3RrX2ljb25fdGhlbWVfbG9va3VwX2ljb24oZ3RrX2lj
b25fdGhlbWVfZ2V0X2RlZmF1bHQoKSwgc3ltYm9saWNJY29uTmFtZSwgaWNvblNpemUsCi0gICAg
ICAgIHN0YXRpY19jYXN0PEd0a0ljb25Mb29rdXBGbGFncz4oR1RLX0lDT05fTE9PS1VQX0ZPUkNF
X1NWRyB8IEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TSVpFKSk7Ci0gICAgR2RrUGl4YnVmKiBpY29u
ID0gMDsKLSAgICBpZiAoaW5mbykgewotICAgICAgICBpY29uID0gZ3RrX2ljb25faW5mb19sb2Fk
X3N5bWJvbGljX2Zvcl9jb250ZXh0KGluZm8sIGNvbnRleHQsIDAsIDApOwotICAgICAgICBndGtf
aWNvbl9pbmZvX2ZyZWUoaW5mbyk7Ci0gICAgfQotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVz
dG9yZShjb250ZXh0KTsKLQotICAgIGlmICghaWNvbikKLSAgICAgICAgcmV0dXJuIGdldFN0b2Nr
SWNvbkZvcldpZGdldFR5cGUod2lkZ2V0VHlwZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBkaXJl
Y3Rpb24sIHN0YXRlLCBpY29uU2l6ZSk7Ci0KLSAgICByZXR1cm4gYWRvcHRHUmVmKGljb24pOwot
fQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQ
RV9FTlRSWSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKLSAgICBy
ZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBn
ZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3Io
Z2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAm
Z2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5k
ZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtfU1RBVEVfRkxBR19T
RUxFQ1RFRCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQot
Q29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBHVEtf
U1RBVEVfRkxBR19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29s
b3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3Ip
OwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpp
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdk
a1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5k
X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxB
R19BQ1RJVkUsICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0K
LUNvbG9yIFJlbmRlclRoZW1lR3RrOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RSRUVfVklFVyksIEdU
S19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdC
QUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsK
LSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1RSRUVfVklFVyksIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmdka1JHQkFDb2xvcik7Ci0gICAg
cmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNv
bG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwot
Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6
Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfQlVUVE9OKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZnZGtSR0JBQ29s
b3IpOwotICAgICAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotICAgIGNhc2UgQ1NTVmFsdWVDYXB0
aW9udGV4dDoKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9FTlRSWSksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApLCAmZ2Rr
UkdCQUNvbG9yKTsKLSAgICAgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotICAg
IH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUdUS19BUElfVkVS
U0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MGYzNWNhNjZkMjIwYjQwZDRmNjNmN2Q5ZjZjOTg0
Mjc1Nzc3MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUnVuTG9vcC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dk
ay5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUnVuTG9vcDo6UnVuTG9vcCgpCi17Ci0gICAgLy8gZ19t
YWluX2NvbnRleHRfZGVmYXVsdCgpIGRvZXNuJ3QgYWRkIGFuIGV4dHJhIHJlZmVyZW5jZS4KLSAg
ICBtX3J1bkxvb3BDb250ZXh0ID0gaXNNYWluVGhyZWFkKCkgPyBnX21haW5fY29udGV4dF9kZWZh
dWx0KCkgOiBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOwotICAgIEFTU0VSVChtX3J1
bkxvb3BDb250ZXh0KTsKLSAgICBHUmVmUHRyPEdNYWluTG9vcD4gaW5uZXJtb3N0TG9vcCA9IGFk
b3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ydW5Mb29wQ29udGV4dC5nZXQoKSwgRkFMU0UpKTsK
LSAgICBBU1NFUlQoaW5uZXJtb3N0TG9vcCk7Ci0gICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVu
ZChpbm5lcm1vc3RMb29wKTsKLX0KLQotUnVuTG9vcDo6flJ1bkxvb3AoKQotewotICAgIGZvciAo
aW50IGkgPSBtX3J1bkxvb3BNYWluTG9vcHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgaWYgKCFnX21haW5fbG9vcF9pc19ydW5uaW5nKG1fcnVuTG9vcE1haW5Mb29wc1tpXS5n
ZXQoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdCht
X3J1bkxvb3BNYWluTG9vcHNbaV0uZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBSdW5Mb29wOjpy
dW4oKQotewotICAgIFJ1bkxvb3AqIG1haW5SdW5Mb29wID0gUnVuTG9vcDo6Y3VycmVudCgpOwot
ICAgIEdNYWluTG9vcCogaW5uZXJtb3N0TG9vcCA9IG1haW5SdW5Mb29wLT5pbm5lcm1vc3RMb29w
KCk7Ci0gICAgaWYgKCFnX21haW5fbG9vcF9pc19ydW5uaW5nKGlubmVybW9zdExvb3ApKSB7Ci0g
ICAgICAgIGdfbWFpbl9sb29wX3J1bihpbm5lcm1vc3RMb29wKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZSBhbmQgcnVuIGEgbmVzdGVkIGxvb3AgaWYgdGhlIGlubmVy
bW9zdCBvbmUgd2FzIGFscmVhZHkgcnVubmluZy4KLSAgICBHTWFpbkxvb3AqIG5lc3RlZE1haW5M
b29wID0gZ19tYWluX2xvb3BfbmV3KDAsIEZBTFNFKTsKLSAgICBtYWluUnVuTG9vcC0+cHVzaE5l
c3RlZE1haW5Mb29wKG5lc3RlZE1haW5Mb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obmVzdGVk
TWFpbkxvb3ApOwotICAgIG1haW5SdW5Mb29wLT5wb3BOZXN0ZWRNYWluTG9vcCgpOwotfQotCi1H
TWFpbkxvb3AqIFJ1bkxvb3A6OmlubmVybW9zdExvb3AoKQotewotICAgIC8vIFRoZSBpbm5lcm1v
c3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0gICAgQVNTRVJUKCFtX3J1bkxv
b3BNYWluTG9vcHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9ydW5Mb29wTWFpbkxvb3BzWzBd
LmdldCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OnB1c2hOZXN0ZWRNYWluTG9vcChHTWFpbkxvb3Aq
IG5lc3RlZExvb3ApCi17Ci0gICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFs
d2F5cyBiZSB0aGVyZS4KLSAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkp
OwotICAgIG1fcnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoYWRvcHRHUmVmKG5lc3RlZExvb3ApKTsK
LX0KLQotdm9pZCBSdW5Mb29wOjpwb3BOZXN0ZWRNYWluTG9vcCgpCi17Ci0gICAgLy8gVGhlIGlu
bmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KLSAgICBBU1NFUlQoIW1f
cnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOwotICAgIG1fcnVuTG9vcE1haW5Mb29wcy5yZW1v
dmVMYXN0KCk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6c3RvcCgpCi17Ci0gICAgLy8gVGhlIGlubmVy
bW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KLSAgICBBU1NFUlQoIW1fcnVu
TG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOwotICAgIEdSZWZQdHI8R01haW5Mb29wPiBsYXN0TWFp
bkxvb3AgPSBtX3J1bkxvb3BNYWluTG9vcHMubGFzdCgpOwotICAgIGlmIChnX21haW5fbG9vcF9p
c19ydW5uaW5nKGxhc3RNYWluTG9vcC5nZXQoKSkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bGFzdE1haW5Mb29wLmdldCgpKTsKLX0KLQotZ2Jvb2xlYW4gUnVuTG9vcDo6cXVldWVXb3JrKFJ1
bkxvb3AqIHJ1bkxvb3ApCi17Ci0gICAgcnVuTG9vcC0+cGVyZm9ybVdvcmsoKTsKLSAgICByZXR1
cm4gRkFMU0U7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6d2FrZVVwKCkKLXsKLSAgICBHUmVmUHRyPEdT
b3VyY2U+IHNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKLSAgICBnX3Nv
dXJjZV9zZXRfcHJpb3JpdHkoc291cmNlLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQpOwotICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhzb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KCZSdW5Mb29wOjpxdWV1ZVdvcmspLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9h
dHRhY2goc291cmNlLmdldCgpLCBtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKLQotICAgIGdfbWFp
bl9jb250ZXh0X3dha2V1cChtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKLX0KLQotUnVuTG9vcDo6
VGltZXJCYXNlOjpUaW1lckJhc2UoUnVuTG9vcCogcnVuTG9vcCkKLSAgICA6IG1fcnVuTG9vcChy
dW5Mb29wKQotICAgICwgbV90aW1lclNvdXJjZSgwKQotewotfQotCi1SdW5Mb29wOjpUaW1lckJh
c2U6On5UaW1lckJhc2UoKQotewotICAgIHN0b3AoKTsKLX0KLQotdm9pZCBSdW5Mb29wOjpUaW1l
ckJhc2U6OmNsZWFyVGltZXJTb3VyY2UoKQotewotICAgIG1fdGltZXJTb3VyY2UgPSAwOwotfQot
Ci1nYm9vbGVhbiBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayhSdW5Mb29w
OjpUaW1lckJhc2UqIHRpbWVyKQotewotICAgIEdTb3VyY2UqIGN1cnJlbnRUaW1lclNvdXJjZSA9
IHRpbWVyLT5tX3RpbWVyU291cmNlLmdldCgpOwotICAgIGJvb2wgaXNSZXBlYXRpbmcgPSB0aW1l
ci0+aXNSZXBlYXRpbmcoKTsKLSAgICAvLyBUaGlzIGNhbiBjaGFuZ2UgdGhlIHRpbWVyU291cmNl
IGJ5IHN0YXJ0aW5nIGEgbmV3IHRpbWVyIHdpdGhpbiB0aGUgY2FsbGJhY2suCi0gICAgdGltZXIt
PmZpcmVkKCk7Ci0gICAgaWYgKCFpc1JlcGVhdGluZyAmJiBjdXJyZW50VGltZXJTb3VyY2UgPT0g
dGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCkpCi0gICAgICAgIHRpbWVyLT5jbGVhclRpbWVyU291
cmNlKCk7Ci0gICAgcmV0dXJuIGlzUmVwZWF0aW5nOwotfQotCi12b2lkIFJ1bkxvb3A6OlRpbWVy
QmFzZTo6c3RhcnQoZG91YmxlIGZpcmVJbnRlcnZhbCwgYm9vbCByZXBlYXQpCi17Ci0gICAgaWYg
KG1fdGltZXJTb3VyY2UpCi0gICAgICAgIHN0b3AoKTsKLQotICAgIG1fdGltZXJTb3VyY2UgPSBh
ZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KGZpcmVJbnRl
cnZhbCAqIDEwMDApKSk7Ci0gICAgbV9pc1JlcGVhdGluZyA9IHJlcGVhdDsKLSAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV90aW1lclNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJlJ1bkxvb3A6OlRpbWVyQmFzZTo6dGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywg
MCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fdGltZXJTb3VyY2UuZ2V0KCksIG1fcnVuTG9vcC0+
bV9ydW5Mb29wQ29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpz
dG9wKCkKLXsKLSAgICBpZiAoIW1fdGltZXJTb3VyY2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGdfc291cmNlX2Rlc3Ryb3kobV90aW1lclNvdXJjZS5nZXQoKSk7Ci0gICAgY2xlYXJUaW1lclNv
dXJjZSgpOwotfQotCi1ib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3RpbWVyU291cmNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDVhNTdiN2RlMjk0YjYzYzg2ZmQ1MmU3NDhmMDBm
OTEyMzIwODkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxMCBDb2xsYWJvcmEgTHRkLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIK
LQotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJNYWluRnJhbWVTY3JvbGxiYXJH
dGsuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
Ym9vbCBzaG91bGRDcmVhdGVNYWluRnJhbWVTY3JvbGxiYXIoY29uc3QgU2Nyb2xsVmlldyogc2Ny
b2xsVmlldykKLXsKLSAgICAvLyBJbnRlcmlvciBmcmFtZSBTY3JvbGxWaWV3cyBuZXZlciBoYXZl
IE1haW5GcmFtZVNjcm9sbGJhcnMuCi0gICAgaWYgKHNjcm9sbFZpZXctPnBhcmVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgaG9zdCB3aW5k
b3cgb3IgYSBjb250YWluaW5nIHdpZGdldCAoYWxhIFdlYktpdDIpLgotICAgIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cgPSBzY3JvbGxWaWV3LT5ob3N0V2luZG93KCk7Ci0gICAgaWYgKCFob3N0V2lu
ZG93IHx8ICFob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZ2Jvb2xlYW4gc2VsZlNjcm9sbGluZyA9IEZBTFNFOwotICAgIGdfb2Jq
ZWN0X2dldChob3N0V2luZG93LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSwgInNlbGYtc2Nyb2xsaW5n
IiwgJnNlbGZTY3JvbGxpbmcsIE5VTEwpOwotICAgIHJldHVybiAhc2VsZlNjcm9sbGluZzsKLX0K
LQotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBpZiAoc2hvdWxkQ3JlYXRlTWFp
bkZyYW1lU2Nyb2xsYmFyKHRoaXMpKQotICAgICAgICByZXR1cm4gTWFpbkZyYW1lU2Nyb2xsYmFy
R3RrOjpjcmVhdGUodGhpcywgb3JpZW50YXRpb24pOwotICAgIHJldHVybiBTY3JvbGxiYXI6OmNy
ZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7
Ci19Ci0KLUludFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KFZpc2libGVDb250
ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24pIGNvbnN0Ci17Ci0g
ICAgYm9vbCBpbmNsdWRlU2Nyb2xsYmFycyA9IHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRl
U2Nyb2xsYmFyczsKLQotICAgIC8vIElmIHdlIGFyZSBhbiBpbnRlcmlvciBmcmFtZSBzY3JvbGxi
YXIgb3IgYXJlIGluIHNvbWUgc29ydCBvZiB0cmFuc2l0aW9uCi0gICAgLy8gc3RhdGUsIGp1c3Qg
Y2FsY3VsYXRlIG91ciBzaXplIGJhc2VkIG9uIHdoYXQgdGhlIEdUSysgdGhlbWUgc2F5cyB0aGUK
LSAgICAvLyBzY3JvbGxiYXIgd2lkdGggc2hvdWxkIGJlLgotICAgIGlmICghc2hvdWxkQ3JlYXRl
TWFpbkZyYW1lU2Nyb2xsYmFyKHRoaXMpKSB7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KEludFBv
aW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZShtYXgoMCwgd2lkdGgoKSAtICh2ZXJ0aWNhbFNj
cm9sbGJhcigpICYmICFpbmNsdWRlU2Nyb2xsYmFycyA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPndp
ZHRoKCkgOiAwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KDAsIGhlaWdo
dCgpIC0gKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhaW5jbHVkZVNjcm9sbGJhcnMgPyBob3Jp
em9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDogMCkpKSk7Ci0gICAgfQotCi0gICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhIHBhcmVudCwgc28gd2UgYXJlIHRoZSBtYWluIGZyYW1lIGFuZCB0aHVzIGhh
dmUKLSAgICAvLyBhIHBhcmVudCB3aWRnZXQgd2hpY2ggd2UgY2FuIHVzZSB0byBtZWFzdXJlIHRo
ZSB2aXNpYmxlIHJlZ2lvbi4KLSAgICBHdGtXaWRnZXQqIG1lYXN1cmVkV2lkZ2V0ID0gaG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdl
dCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtZWFzdXJlZFdpZGdldCk7Ci0KLSAgICAvLyBXZSBt
YXkgbm90IGJlIGluIGEgd2lkZ2V0IHRoYXQgZGlzcGxheXMgc2Nyb2xsYmFycywgYnV0IHdlIG1h
eQotICAgIC8vIGhhdmUgb3RoZXIga2luZHMgb2YgZGVjb3JhdGlvbiB0aGF0IG1ha2UgdXMgc21h
bGxlci4KLSAgICBpZiAocGFyZW50V2lkZ2V0ICYmIGluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAg
ICBtZWFzdXJlZFdpZGdldCA9IHBhcmVudFdpZGdldDsKLQotICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1lYXN1cmVkV2lkZ2V0LCAm
YWxsb2NhdGlvbik7Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQobV9zY3JvbGxPZmZzZXQu
d2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgIElu
dFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpKTsKLX0KLQotdm9pZCBT
Y3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlIGhvcml6b250YWxNb2Rl
LCBTY3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZSwgYm9vbCBob3Jpem9udGFsTG9jaywgYm9vbCB2
ZXJ0aWNhbExvY2spCi17Ci0gICAgLy8gRklYTUU6IFJlc3RydWN0dXJlIHRoZSBTY3JvbGxWaWV3
IGFic3RyYWN0aW9uIHNvIHRoYXQgd2UgZG8gbm90IGhhdmUgdG8KLSAgICAvLyBjb3B5IHRoaXMg
dmVyYmF0aW0gZnJvbSBTY3JvbGxWaWV3LmNwcC4gVW50aWwgdGhlbiwgd2Ugc2hvdWxkIG1ha2Ug
c3VyZSB0aGlzCi0gICAgLy8gaXMga2VwdCBpbiBzeW5jLgotICAgIGJvb2wgbmVlZHNVcGRhdGUg
PSBmYWxzZTsKLQotICAgIGlmIChob3Jpem9udGFsTW9kZSAhPSBob3Jpem9udGFsU2Nyb2xsYmFy
TW9kZSgpICYmICFtX2hvcml6b250YWxTY3JvbGxiYXJMb2NrKSB7Ci0gICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhck1vZGUgPSBob3Jpem9udGFsTW9kZTsKLSAgICAgICAgbmVlZHNVcGRhdGUg
PSB0cnVlOwotICAgIH0KLQotICAgIGlmICh2ZXJ0aWNhbE1vZGUgIT0gdmVydGljYWxTY3JvbGxi
YXJNb2RlKCkgJiYgIW1fdmVydGljYWxTY3JvbGxiYXJMb2NrKSB7Ci0gICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXJNb2RlID0gdmVydGljYWxNb2RlOwotICAgICAgICBuZWVkc1VwZGF0ZSA9IHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKGhvcml6b250YWxMb2NrKQotICAgICAgICBzZXRIb3Jpem9u
dGFsU2Nyb2xsYmFyTG9jaygpOwotCi0gICAgaWYgKHZlcnRpY2FsTG9jaykKLSAgICAgICAgc2V0
VmVydGljYWxTY3JvbGxiYXJMb2NrKCk7Ci0KLSAgICBpZiAobmVlZHNVcGRhdGUpCi0gICAgICAg
IHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwotCi0gICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byByZXBvcnQgcG9saWN5IGNoYW5nZXMgb24gU2Nyb2xsVmlldydzIHVubGVzcyB0aGlzCi0g
ICAgLy8gb25lIGhhcyBhbiBhZGp1c3RtZW50IGF0dGFjaGVkIGFuZCBpdCBpcyBhIG1haW4gZnJh
bWUuCi0gICAgaWYgKHBhcmVudCgpIHx8ICFpc0ZyYW1lVmlldygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBGb3IgZnJhbWVzIHRoYXQgZG8gaGF2ZSBhZGp1c3RtZW50cyBhdHRhY2hlZCwg
d2Ugd2FudCB0byByZXBvcnQKLSAgICAvLyBwb2xpY3kgY2hhbmdlcywgc28gdGhhdCB0aGV5IG1h
eSBiZSBhcHBsaWVkIHRvIHRoZSB3aWRnZXQgdG8KLSAgICAvLyB3aGljaCB0aGUgV2ViVmlldydz
IGNvbnRhaW5lciAoZS5nLiBHdGtTY3JvbGxlZFdpbmRvdykuCi0gICAgaWYgKGhvc3RXaW5kb3co
KSkKLSAgICAgICAgaG9zdFdpbmRvdygpLT5zY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpOwotfQot
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJU
aGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUzZmQ3NmY3ZmZjNTIzMGZj
ODQ3ZmY5ZmVjYWY0M2RjNDZmYTA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWVHdGsuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBI
YXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj4qIGdTY3JvbGxiYXJzOwotCi1TY3JvbGxiYXJU
aGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAgICBzdGF0aWMgU2Nyb2xs
YmFyVGhlbWVHdGsgdGhlbWU7Ci0gICAgcmV0dXJuICZ0aGVtZTsKLX0KLQotU2Nyb2xsYmFyVGhl
bWVHdGs6On5TY3JvbGxiYXJUaGVtZUd0aygpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVH
dGs6OnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17
Ci0gICAgaWYgKCFnU2Nyb2xsYmFycykKLSAgICAgICAgZ1Njcm9sbGJhcnMgPSBuZXcgSGFzaFNl
dDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+OwotICAgIGdTY3JvbGxiYXJzLT5hZGQoc2Nyb2xsYmFy
KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dW5yZWdpc3RlclNjcm9sbGJhcihTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIGdTY3JvbGxiYXJzLT5yZW1vdmUo
c2Nyb2xsYmFyKTsKLSAgICBpZiAoZ1Njcm9sbGJhcnMtPmlzRW1wdHkoKSkgewotICAgICAgICBk
ZWxldGUgZ1Njcm9sbGJhcnM7Ci0gICAgICAgIGdTY3JvbGxiYXJzID0gMDsKLSAgICB9Ci19Ci0K
LXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygp
Ci17Ci0gICAgaWYgKCFnU2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVXBk
YXRlIHRoZSB0aGlja25lc3Mgb2YgZXZlcnkgaW50ZXJpb3IgZnJhbWUgc2Nyb2xsYmFyIHdpZGdl
dC4gVGhlCi0gICAgLy8gcGxhdGZvcm0taW5kZXBlbmRlbnQgc2Nyb2xsYmFyIHRoZW0gY29kZSBp
c24ndCB5ZXQgc21hcnQgZW5vdWdoIHRvIGdldAotICAgIC8vIHRoaXMgaW5mb3JtYXRpb24gd2hl
biBpdCBwYWludHMuCi0gICAgSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+OjppdGVyYXRv
ciBlbmQgPSBnU2Nyb2xsYmFycy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFNjcm9sbGJhclRo
ZW1lQ2xpZW50Kj46Oml0ZXJhdG9yIGl0ID0gZ1Njcm9sbGJhcnMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyID0gKCpp
dCk7Ci0KLSAgICAgICAgLy8gVG9wLWxldmVsIHNjcm9sbGJhciBpLmUuIHNjcm9sbGJhcnMgd2hv
IGhhdmUgYSBwYXJlbnQgU2Nyb2xsVmlldwotICAgICAgICAvLyB3aXRoIG5vIHBhcmVudCBhcmUg
bmF0aXZlLCBhbmQgdGh1cyBkbyBub3QgbmVlZCB0byBiZSByZXNpemVkLgotICAgICAgICBpZiAo
IXNjcm9sbGJhci0+cGFyZW50KCkgfHwgIXNjcm9sbGJhci0+cGFyZW50KCktPnBhcmVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJU
aGlja25lc3Moc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLSAgICAgICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Ny
b2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdCgwLCBzY3JvbGxiYXItPnBhcmVudCgpLT5oZWln
aHQoKSAtIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT53aWR0aCgpLCB0aGlja25lc3MpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdChzY3Jv
bGxiYXItPnBhcmVudCgpLT53aWR0aCgpIC0gdGhpY2tuZXNzLCAwLCB0aGlja25lc3MsIHNjcm9s
bGJhci0+aGVpZ2h0KCkpKTsKLSAgICB9Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6Omhh
c1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgLy8gVGhpcyBt
ZXRob2QgaXMganVzdCBjYWxsZWQgYXMgYSBwYWludC10aW1lIG9wdGltaXphdGlvbiB0byBzZWUg
aWYKLSAgICAvLyBwYWludGluZyB0aGUgdGh1bWIgY2FuIGJlIHNraXBwZWQuICBXZSBkb24ndCBo
YXZlIHRvIGJlIGV4YWN0IGhlcmUuCi0gICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikg
PiAwOwotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdChTY3Jv
bGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCi17
Ci0gICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgJiYgIW1faGFzQmFja0J1dHRvbkVu
ZFBhcnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgaWYgKHBhcnQgPT0gQmFja0J1
dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotCi0gICAgaW50IHggPSBzY3JvbGxiYXItPngoKSArIG1fdHJvdWdoQm9y
ZGVyV2lkdGg7Ci0gICAgaW50IHkgPSBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lk
dGg7Ci0gICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3JvbGxiYXIpOwotICAgIGlmIChw
YXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHks
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBCYWNrQnV0dG9uRW5kUGFy
dCAoYWx0ZXJuYXRlIGJ1dHRvbikKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+
eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gbV90cm91Z2hCb3JkZXJXaWR0aCAtICgyICogc2l6
ZS53aWR0aCgpKSwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIFZl
cnRpY2FsU2Nyb2xsYmFyIGFsdGVybmF0ZSBidXR0b24KLSAgICByZXR1cm4gSW50UmVjdCh4LCBz
Y3JvbGxiYXItPnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRo
IC0gKDIgKiBzaXplLmhlaWdodCgpKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLX0K
LQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQotewotICAg
IGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydCkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBpZiAocGFydCA9PSBG
b3J3YXJkQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCkKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemUoc2Ny
b2xsYmFyKTsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpIHsKLSAgICAgICAgaW50IHkgPSBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9y
ZGVyV2lkdGg7Ci0gICAgICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAg
ICAgICAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRo
KCkgLSBzaXplLndpZHRoKCkgLSBtX3Ryb3VnaEJvcmRlcldpZHRoLCB5LCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIEZvcndhcmRCdXR0b25TdGFydFBhcnQgKGFs
dGVybmF0ZSBidXR0b24pCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpICsg
bV90cm91Z2hCb3JkZXJXaWR0aCArIHNpemUud2lkdGgoKSwgeSwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhcgotICAgIGludCB4
ID0gc2Nyb2xsYmFyLT54KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoOwotICAgIGlmIChwYXJ0ID09
IEZvcndhcmRCdXR0b25FbmRQYXJ0KQotICAgICAgICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxi
YXItPnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpIC0gbV90cm91Z2hC
b3JkZXJXaWR0aCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZvcndh
cmRCdXR0b25TdGFydFBhcnQgKGFsdGVybmF0ZSBidXR0b24pCi0gICAgcmV0dXJuIEludFJlY3Qo
eCwgc2Nyb2xsYmFyLT55KCkgKyBtX3Ryb3VnaEJvcmRlcldpZHRoICsgc2l6ZS5oZWlnaHQoKSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJUaGVt
ZUd0azo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGJvb2wpCi17
Ci0gICAgLy8gVGhlIHBhZGRpbmcgYWxvbmcgdGhlIHRodW1iIG1vdmVtZW50IGF4aXMgaW5jbHVk
ZXMgdGhlIHRyb3VnaCBib3JkZXIKLSAgICAvLyBwbHVzIHRoZSBzaXplIG9mIHN0ZXBwZXIgc3Bh
Y2luZyAodGhlIHNwYWNlIGJldHdlZW4gdGhlIHN0ZXBwZXIgYW5kCi0gICAgLy8gdGhlIHBsYWNl
IHdoZXJlIHRoZSB0aHVtYiBzdG9wcykuIFRoZXJlIGlzIG9mdGVuIG5vIHN0ZXBwZXIgc3BhY2lu
Zy4KLSAgICBpbnQgbW92ZW1lbnRBeGlzUGFkZGluZyA9IG1fdHJvdWdoQm9yZGVyV2lkdGggKyBt
X3N0ZXBwZXJTcGFjaW5nOwotCi0gICAgLy8gVGhlIGZhdG5lc3Mgb2YgdGhlIHNjcm9sbGJhciBv
biB0aGUgbm9uLW1vdmVtZW50IGF4aXMuCi0gICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRo
aWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOwotCi0gICAgaW50IHN0YXJ0QnV0dG9u
c09mZnNldCA9IDA7Ci0gICAgaW50IGJ1dHRvbnNXaWR0aCA9IDA7Ci0gICAgaWYgKG1faGFzRm9y
d2FyZEJ1dHRvblN0YXJ0UGFydCkgewotICAgICAgICBzdGFydEJ1dHRvbnNPZmZzZXQgKz0gbV9z
dGVwcGVyU2l6ZTsKLSAgICAgICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7Ci0gICAg
fQotICAgIGlmIChtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpIHsKLSAgICAgICAgc3RhcnRCdXR0
b25zT2Zmc2V0ICs9IG1fc3RlcHBlclNpemU7Ci0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0
ZXBwZXJTaXplOwotICAgIH0KLSAgICBpZiAobV9oYXNCYWNrQnV0dG9uRW5kUGFydCkKLSAgICAg
ICAgYnV0dG9uc1dpZHRoICs9IG1fc3RlcHBlclNpemU7Ci0gICAgaWYgKG1faGFzRm9yd2FyZEJ1
dHRvbkVuZFBhcnQpCi0gICAgICAgIGJ1dHRvbnNXaWR0aCArPSBtX3N0ZXBwZXJTaXplOwotCi0g
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgIC8vIE9uY2UgdGhlIHNjcm9sbGJhciBiZWNvbWVzIHNtYWxsZXIgdGhhbiB0aGUg
bmF0dXJhbCBzaXplIG9mIHRoZQotICAgICAgICAvLyB0d28gYnV0dG9ucywgdGhlIHRyYWNrIGRp
c2FwcGVhcnMuCi0gICAgICAgIGlmIChzY3JvbGxiYXItPndpZHRoKCkgPCAyICogdGhpY2tuZXNz
KQotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
c2Nyb2xsYmFyLT54KCkgKyBtb3ZlbWVudEF4aXNQYWRkaW5nICsgc3RhcnRCdXR0b25zT2Zmc2V0
LCBzY3JvbGxiYXItPnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT53aWR0
aCgpIC0gKDIgKiBtb3ZlbWVudEF4aXNQYWRkaW5nKSAtIGJ1dHRvbnNXaWR0aCwgdGhpY2tuZXNz
KTsKLSAgICB9Ci0KLSAgICBpZiAoc2Nyb2xsYmFyLT5oZWlnaHQoKSA8IDIgKiB0aGlja25lc3Mp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFy
LT54KCksIHNjcm9sbGJhci0+eSgpICsgbW92ZW1lbnRBeGlzUGFkZGluZyArIHN0YXJ0QnV0dG9u
c09mZnNldCwKLSAgICAgICAgICAgICAgICAgICB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0
KCkgLSAoMiAqIG1vdmVtZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoKTsKLX0KLQotSW50
UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dGh1bWJSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3QpCi17Ci0gICAg
SW50UmVjdCB0cmFja1JlY3QgPSBjb25zdHJhaW5UcmFja1JlY3RUb1RyYWNrUGllY2VzKHNjcm9s
bGJhciwgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCk7Ci0gICAgaW50IHRodW1iUG9zID0gdGh1bWJQ
b3NpdGlvbihzY3JvbGxiYXIpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QodHJhY2tSZWN0Lngo
KSArIHRodW1iUG9zLCB0cmFja1JlY3QueSgpICsgKHRyYWNrUmVjdC5oZWlnaHQoKSAtIG1fdGh1
bWJGYXRuZXNzKSAvIDIsIHRodW1iTGVuZ3RoKHNjcm9sbGJhciksIG1fdGh1bWJGYXRuZXNzKTsg
Ci0KLSAgICAvLyBWZXJ0aWNhbFNjcm9sbGJhcgotICAgIHJldHVybiBJbnRSZWN0KHRyYWNrUmVj
dC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSBtX3RodW1iRmF0bmVzcykgLyAyLCB0cmFja1Jl
Y3QueSgpICsgdGh1bWJQb3MsIG1fdGh1bWJGYXRuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIp
KTsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNj
cm9sbGJhckNvbnRyb2xQYXJ0TWFzayBiYXNlZCBvbiB0aGUgZGFtYWdlUmVjdAotICAgIFNjcm9s
bGJhckNvbnRyb2xQYXJ0TWFzayBzY3JvbGxNYXNrID0gTm9QYXJ0OwotCi0gICAgSW50UmVjdCBi
YWNrQnV0dG9uU3RhcnRQYWludFJlY3Q7Ci0gICAgSW50UmVjdCBiYWNrQnV0dG9uRW5kUGFpbnRS
ZWN0OwotICAgIEludFJlY3QgZm9yd2FyZEJ1dHRvblN0YXJ0UGFpbnRSZWN0OwotICAgIEludFJl
Y3QgZm9yd2FyZEJ1dHRvbkVuZFBhaW50UmVjdDsKLSAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxi
YXIpKSB7Ci0gICAgICAgIGJhY2tCdXR0b25TdGFydFBhaW50UmVjdCA9IGJhY2tCdXR0b25SZWN0
KHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0UGFydCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1h
Z2VSZWN0LmludGVyc2VjdHMoYmFja0J1dHRvblN0YXJ0UGFpbnRSZWN0KSkKLSAgICAgICAgICAg
IHNjcm9sbE1hc2sgfD0gQmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICAgICAgYmFja0J1dHRvbkVu
ZFBhaW50UmVjdCA9IGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwgQmFja0J1dHRvbkVuZFBhcnQs
IHRydWUpOwotICAgICAgICBpZiAoZGFtYWdlUmVjdC5pbnRlcnNlY3RzKGJhY2tCdXR0b25FbmRQ
YWludFJlY3QpKQotICAgICAgICAgICAgc2Nyb2xsTWFzayB8PSBCYWNrQnV0dG9uRW5kUGFydDsK
LSAgICAgICAgZm9yd2FyZEJ1dHRvblN0YXJ0UGFpbnRSZWN0ID0gZm9yd2FyZEJ1dHRvblJlY3Qo
c2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LCB0cnVlKTsKLSAgICAgICAgaWYgKGRh
bWFnZVJlY3QuaW50ZXJzZWN0cyhmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QpKQotICAgICAg
ICAgICAgc2Nyb2xsTWFzayB8PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0OwotICAgICAgICBmb3J3
YXJkQnV0dG9uRW5kUGFpbnRSZWN0ID0gZm9yd2FyZEJ1dHRvblJlY3Qoc2Nyb2xsYmFyLCBGb3J3
YXJkQnV0dG9uRW5kUGFydCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2Vj
dHMoZm9yd2FyZEJ1dHRvbkVuZFBhaW50UmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9
IEZvcndhcmRCdXR0b25FbmRQYXJ0OwotICAgIH0KLQotICAgIEludFJlY3QgdHJhY2tQYWludFJl
Y3QgPSB0cmFja1JlY3Qoc2Nyb2xsYmFyLCB0cnVlKTsKLSAgICBpZiAoZGFtYWdlUmVjdC5pbnRl
cnNlY3RzKHRyYWNrUGFpbnRSZWN0KSkKLSAgICAgICAgc2Nyb2xsTWFzayB8PSBUcmFja0JHUGFy
dDsKLQotICAgIGlmIChtX3Ryb3VnaFVuZGVyU3RlcHBlcnMgJiYgKHNjcm9sbE1hc2sgJiBCYWNr
QnV0dG9uU3RhcnRQYXJ0Ci0gICAgICAgICAgICB8fCBzY3JvbGxNYXNrICYgQmFja0J1dHRvbkVu
ZFBhcnQKLSAgICAgICAgICAgIHx8IHNjcm9sbE1hc2sgJiBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
Ci0gICAgICAgICAgICB8fCBzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpKQotICAg
ICAgICBzY3JvbGxNYXNrIHw9IFRyYWNrQkdQYXJ0OwotCi0gICAgYm9vbCB0aHVtYlByZXNlbnQg
PSBoYXNUaHVtYihzY3JvbGxiYXIpOwotICAgIEludFJlY3QgY3VycmVudFRodW1iUmVjdDsKLSAg
ICBpZiAodGh1bWJQcmVzZW50KSB7Ci0gICAgICAgIEludFJlY3QgdHJhY2sgPSB0cmFja1JlY3Qo
c2Nyb2xsYmFyLCBmYWxzZSk7Ci0gICAgICAgIGN1cnJlbnRUaHVtYlJlY3QgPSB0aHVtYlJlY3Qo
c2Nyb2xsYmFyLCB0cmFjayk7Ci0gICAgICAgIGlmIChkYW1hZ2VSZWN0LmludGVyc2VjdHMoY3Vy
cmVudFRodW1iUmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxNYXNrIHw9IFRodW1iUGFydDsKLSAg
ICB9Ci0KLSAgICBTY3JvbGxiYXJDb250cm9sUGFydE1hc2sgYWxsQnV0dG9ucyA9IEJhY2tCdXR0
b25TdGFydFBhcnQgfCBCYWNrQnV0dG9uRW5kUGFydAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfCBGb3J3YXJkQnV0dG9u
RW5kUGFydDsKLSAgICBpZiAoc2Nyb2xsTWFzayAmIFRyYWNrQkdQYXJ0IHx8IHNjcm9sbE1hc2sg
JiBUaHVtYlBhcnQgfHwgc2Nyb2xsTWFzayAmIGFsbEJ1dHRvbnMpCi0gICAgICAgIHBhaW50U2Ny
b2xsYmFyQmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhcik7Ci0gICAgICAgIHBh
aW50VHJhY2tCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCB0cmFja1BhaW50
UmVjdCk7Ci0KLSAgICAvLyBQYWludCB0aGUgYmFjayBhbmQgZm9yd2FyZCBidXR0b25zLgotICAg
IGlmIChzY3JvbGxNYXNrICYgQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgcGFpbnRCdXR0
b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGJhY2tCdXR0b25TdGFydFBhaW50UmVjdCwg
QmFja0J1dHRvblN0YXJ0UGFydCk7Ci0gICAgaWYgKHNjcm9sbE1hc2sgJiBCYWNrQnV0dG9uRW5k
UGFydCkKLSAgICAgICAgcGFpbnRCdXR0b24oZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGJh
Y2tCdXR0b25FbmRQYWludFJlY3QsIEJhY2tCdXR0b25FbmRQYXJ0KTsKLSAgICBpZiAoc2Nyb2xs
TWFzayAmIEZvcndhcmRCdXR0b25TdGFydFBhcnQpCi0gICAgICAgIHBhaW50QnV0dG9uKGdyYXBo
aWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBmb3J3YXJkQnV0dG9uU3RhcnRQYWludFJlY3QsIEZvcndh
cmRCdXR0b25TdGFydFBhcnQpOwotICAgIGlmIChzY3JvbGxNYXNrICYgRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQpCi0gICAgICAgIHBhaW50QnV0dG9uKGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLCBm
b3J3YXJkQnV0dG9uRW5kUGFpbnRSZWN0LCBGb3J3YXJkQnV0dG9uRW5kUGFydCk7Ci0KLSAgICAv
LyBQYWludCB0aGUgdGh1bWIuCi0gICAgaWYgKHNjcm9sbE1hc2sgJiBUaHVtYlBhcnQpCi0gICAg
ICAgIHBhaW50VGh1bWIoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXIsIGN1cnJlbnRUaHVtYlJl
Y3QpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnNo
b3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2ZW50KQotewotICAgIHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSAmJiBldmVu
dC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gTWlkZGxlQnV0
dG9uKTsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MoU2Ny
b2xsYmFyQ29udHJvbFNpemUpCi17Ci0gICAgcmV0dXJuIG1fdGh1bWJGYXRuZXNzICsgKG1fdHJv
dWdoQm9yZGVyV2lkdGggKiAyKTsKLX0KLQotSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUd0azo6YnV0
dG9uU2l6ZShTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVy
biBJbnRTaXplKG1fdGh1bWJGYXRuZXNzLCBtX3N0ZXBwZXJTaXplKTsKLQotICAgIC8vIEhvcml6
b250YWxTY3JvbGxiYXIKLSAgICByZXR1cm4gSW50U2l6ZShtX3N0ZXBwZXJTaXplLCBtX3RodW1i
RmF0bmVzcyk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3Ro
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIG1fbWluVGh1
bWJMZW5ndGg7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Njcm9sbGJhclRoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsYmFyVGhlbWVHdGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTczZGYyODU1
MDFiNTgyNmRjMDU5YjgzYmZjM2Q5YTQxNzBkNGJhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyVGhlbWVHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxiYXJUaGVt
ZUd0a19oCi0jZGVmaW5lIFNjcm9sbGJhclRoZW1lR3RrX2gKLQotI2luY2x1ZGUgIlNjcm9sbGJh
clRoZW1lQ29tcG9zaXRlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xs
YmFyOwotCi1jbGFzcyBTY3JvbGxiYXJUaGVtZUd0ayA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZSB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsYmFyVGhlbWVHdGsoKTsKLSAgICB2aXJ0dWFs
IH5TY3JvbGxiYXJUaGVtZUd0aygpOwotCi0gICAgdmlydHVhbCBib29sIGhhc0J1dHRvbnMoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGhh
c1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGJhY2tC
dXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCk7Ci0g
ICAgdmlydHVhbCBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgU2Nyb2xsYmFyUGFydCwgYm9vbCk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCosIGJvb2wpOwotICAgIEludFJlY3QgdGh1bWJSZWN0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UmVjdCYgdW5jb25zdHJhaW5lZFRyYWNrUmVjdCk7
Ci0gICAgYm9vbCBwYWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxiYXJCYWNr
Z3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0gICAgdm9p
ZCBwYWludFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHBhaW50VGh1bWIoR3JhcGhpY3NDb250
ZXh0KiwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhclRoZW1lQ2xpZW50
KiwgY29uc3QgSW50UmVjdCYsIFNjcm9sbGJhclBhcnQpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNv
bnRyb2xTaXplKTsKLSAgICB2aXJ0dWFsIEludFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXJUaGVt
ZUNsaWVudCopOwotICAgIHZpcnR1YWwgaW50IG1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJU
aGVtZUNsaWVudCopOwotCi0gICAgLy8gVE9ETzogVGhlc2UgYXJlIHRoZSBkZWZhdWx0IEdUSysg
dmFsdWVzLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCBwdWxsIHRoZXNlIGZyb20gdGhlIHRoZW1l
IGl0c2VsZi4KLSAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9sbFRpbWVyRGVsYXko
KSB7IHJldHVybiAwLjIwOyB9Ci0gICAgdmlydHVhbCBkb3VibGUgYXV0b3Njcm9sbFRpbWVyRGVs
YXkoKSB7IHJldHVybiAwLjAyOyB9Ci0gICAgdm9pZCB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsK
LSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygpOwotICAgIHZvaWQgcmVn
aXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0
ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKTsKLQotcHJvdGVjdGVkOgotI2lmbmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEd0a1N0eWxlQ29udGV4dCogbV9jb250ZXh0OwotI2Vu
ZGlmCi0gICAgaW50IG1fdGh1bWJGYXRuZXNzOwotICAgIGludCBtX3Ryb3VnaEJvcmRlcldpZHRo
OwotICAgIGludCBtX3N0ZXBwZXJTaXplOwotICAgIGludCBtX3N0ZXBwZXJTcGFjaW5nOwotICAg
IGludCBtX21pblRodW1iTGVuZ3RoOwotICAgIGdib29sZWFuIG1fdHJvdWdoVW5kZXJTdGVwcGVy
czsKLSAgICBnYm9vbGVhbiBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQ7Ci0gICAgZ2Jvb2xl
YW4gbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydDsKLSAgICBnYm9vbGVhbiBtX2hhc0JhY2tCdXR0
b25TdGFydFBhcnQ7Ci0gICAgZ2Jvb2xlYW4gbV9oYXNCYWNrQnV0dG9uRW5kUGFydDsKLX07Ci0K
LX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2YmI4YTFkMmY3
MWFhODY0ZWE1N2VkMzAzZjEzNjA3MmMxYzQyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFy
VGhlbWVHdGsyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLQotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUd0ay5oIgotI2luY2x1ZGUgIlNjcm9sbFZp
ZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdD
b250ZXh0LmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyB2b2lkIGd0a1N0eWxlU2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0
eWxlKiBwcmV2aW91cywgU2Nyb2xsYmFyVGhlbWVHdGsqIHNjcm9sbGJhclRoZW1lKQotewotICAg
IHNjcm9sbGJhclRoZW1lLT51cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKLX0KLQotU2Nyb2xsYmFy
VGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKLXsKLSAgICB1cGRhdGVUaGVtZVByb3BlcnRp
ZXMoKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHN0YXRpY19jYXN0PFJlbmRlclRoZW1lR3RrKj4o
UmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrSFNjcm9sbGJhcigpLAotICAg
ICAgICAgInN0eWxlLXNldCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIHRoaXMp
OwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQot
ewotICAgIEd0a1dpZGdldCogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsq
PihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtIU2Nyb2xsYmFyKCk7Ci0g
ICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoc2Nyb2xsYmFyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICJzbGlkZXJfd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgInRyb3VnaF9ib3JkZXIiLCAmbV90cm91Z2hCb3JkZXJXaWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAic3RlcHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3VnaFVuZGVyU3Rl
cHBlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwg
Jm1faGFzQmFja0J1dHRvblN0YXJ0UGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaGFz
LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWZvcndhcmQtc3RlcHBlciIsICZtX2hhc0Zv
cndhcmRCdXR0b25TdGFydFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1zZWNv
bmRhcnktYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25FbmRQYXJ0LCBOVUxMKTsK
LSAgICBtX21pblRodW1iTGVuZ3RoID0gZ3RrX3JhbmdlX2dldF9taW5fc2xpZGVyX3NpemUoR1RL
X1JBTkdFKHNjcm9sbGJhcikpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnNGcmFtZVRoaWNrbmVzcygp
OwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0KiBnZXRXaWRnZXRGb3JTY3JvbGxiYXIoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5n
ZXQoKSk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNj
cm9sbGJhciA/IHRoZW1lLT5ndGtWU2Nyb2xsYmFyKCkgOiB0aGVtZS0+Z3RrSFNjcm9sbGJhcigp
OwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRyYWNrQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gUGFpbnQgdGhlIHRyYWNrIGJhY2tncm91bmQu
IElmIHRoZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMgcHJvcGVydHkgaXMgdHJ1ZSwgdGhpcwotICAg
IC8vIHNob3VsZCBiZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBzY3JvbGxiYXIsIGJ1dCBpZiBpcyBm
YWxzZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlCi0gICAgLy8gdHJhY2sgcmVjdC4KLSAgICBJbnRS
ZWN0IGZ1bGxTY3JvbGxiYXJSZWN0KHJlY3QpOwotICAgIGlmIChtX3Ryb3VnaFVuZGVyU3RlcHBl
cnMpCi0gICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwg
c2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7
Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29udGV4dCwgZnVs
bFNjcm9sbGJhclJlY3QpOwotICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGZ1bGxT
Y3JvbGxiYXJSZWN0LnNpemUoKSk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChwYWlu
dFJlY3QsIGdldFdpZGdldEZvclNjcm9sbGJhcihzY3JvbGxiYXIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19JTiwgInRyb3VnaCIp
OwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
KQotewotICAgIEludFJlY3QgZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+
eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdo
dCgpKTsKLQotICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4dChjb250ZXh0
LCBmdWxsU2Nyb2xsYmFyUmVjdCk7Ci0gICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludEJveChmdWxs
U2Nyb2xsYmFyUmVjdCwgZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLCAi
c2Nyb2xsZWRfd2luZG93Iik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VGh1
bWIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ2V0
V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgZ2Jvb2xlYW4gYWN0aXZhdGVTbGlk
ZXI7Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiYWN0aXZhdGUtc2xpZGVyIiwg
JmFjdGl2YXRlU2xpZGVyLCBOVUxMKTsKLQotICAgIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUgPSBH
VEtfU1RBVEVfTk9STUFMOwotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSA9IEdUS19TSEFE
T1dfT1VUOwotICAgIGlmIChhY3RpdmF0ZVNsaWRlciAmJiBzY3JvbGxiYXItPnByZXNzZWRQYXJ0
KCkgPT0gVGh1bWJQYXJ0KSB7Ci0gICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7
Ci0gICAgICAgIHNoYWRvd1R5cGUgPSBHVEtfU0hBRE9XX0lOOwotICAgIH0gZWxzZSBpZiAoc2Ny
b2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCB8fCBzY3JvbGxiYXItPmhvdmVyZWRQ
YXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBzdGF0ZVR5cGUgPSBHVEtfU1RBVEVfUFJFTElH
SFQ7Ci0KLSAgICAvLyBUaGUgYWRqdXN0bWVudCBjb250cm9scyB0aGUgcmVuZGVyaW5nIG9mIHRo
ZSBzY3JvbGxiYXIgdGh1bWIuIElmIGl0J3Mgbm90IHNldAotICAgIC8vIHByb3Blcmx5IHRoZSB0
aGVtZSBtYXkgbm90IGRyYXcgdGhlIHRodW1iIGJvcmRlcnMgcHJvcGVybHkuCi0gICAgR3RrQWRq
dXN0bWVudCogYWRqdXN0bWVudCA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFOR0Uo
d2lkZ2V0KSk7Ci0gICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQsIHNjcm9s
bGJhci0+Y3VycmVudFBvcygpKTsKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfbG93ZXIoYWRqdXN0
bWVudCwgMCk7Ci0gICAgZ3RrX2FkanVzdG1lbnRfc2V0X3VwcGVyKGFkanVzdG1lbnQsIHNjcm9s
bGJhci0+bWF4aW11bSgpKTsKLQotICAgIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gR1RL
X09SSUVOVEFUSU9OX0hPUklaT05UQUw7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBndGtfYWRqdXN0bWVudF9zZXRfcGFn
ZV9zaXplKGFkanVzdG1lbnQsIHJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBvcmllbnRhdGlvbiA9
IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDsKLSAgICB9IGVsc2UKLSAgICAgICAgZ3RrX2FkanVz
dG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGp1c3RtZW50LCByZWN0LndpZHRoKCkpOwotCi0gICAgV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOwotICAgIElu
dFJlY3Qgc2xpZGVyUmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSk7Ci0gICAgd2lkZ2V0Q29u
dGV4dC5ndGtQYWludFNsaWRlcihzbGlkZXJSZWN0LCB3aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93
VHlwZSwgInNsaWRlciIsIG9yaWVudGF0aW9uKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0
azo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNs
aWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQp
Ci17Ci0gICAgLy8gVGhlIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCBpZiB0aGUgdGh1bWIgaXMg
YXMgdGhlIGFwcHJvcHJpYXRlIGV4dHJlbWUuCi0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBl
ID0gR1RLX1NIQURPV19PVVQ7Ci0gICAgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSA9IEdUS19TVEFU
RV9JTlNFTlNJVElWRTsKLSAgICBib29sIHByZXNzZWQgPSAocGFydCA9PSBzY3JvbGxiYXItPnBy
ZXNzZWRQYXJ0KCkpOwotCi0gICAgaWYgKChCYWNrQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYg
c2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAgICAgIHx8IChCYWNrQnV0dG9uRW5kUGFydCA9
PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQotICAgICAgICB8fCAoRm9yd2FyZEJ1
dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxi
YXItPm1heGltdW0oKSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0b25TdGFydFBhcnQgPT0gcGFy
dCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkpIHsK
LSAgICAgICAgc3RhdGVUeXBlID0gR1RLX1NUQVRFX05PUk1BTDsKLSAgICAgICAgaWYgKHByZXNz
ZWQpIHsKLSAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdUS19TVEFURV9BQ1RJVkU7Ci0gICAgICAg
ICAgICBzaGFkb3dUeXBlID0gR1RLX1NIQURPV19JTjsKLSAgICAgICAgfSBlbHNlIGlmIChwYXJ0
ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKLSAgICAgICAgICAgIHN0YXRlVHlwZSA9IEdU
S19TVEFURV9QUkVMSUdIVDsKLSAgICB9Ci0KLSAgICAvLyBUaGVtZXMgZGV0ZXJtaW5lIGhvdyB0
byBkcmF3IHRoZSBidXR0b24gKHdoaWNoIGJ1dHRvbiB0byBkcmF3KSBiYXNlZCBvbiB0aGUgYWxs
b2NhdGlvbgotICAgIC8vIG9mIHRoZSB3aWRnZXQuIFdoZXJlIHRoZSB0YXJnZXQgcmVjdCBpcyBp
biByZWxhdGlvbiB0byB0aGUgdG90YWwgd2lkZ2V0IGFsbG9jYXRpb24KLSAgICAvLyBkZXRlcm1p
bmVzIHRoZSBidXR0b24uCi0gICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCk7Ci0gICAgaW50IGJ1dHRvblNpemUgPSAob3JpZW50YXRp
b24gPT0gVmVydGljYWxTY3JvbGxiYXIpID8gcmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lkdGgoKTsK
LSAgICBpbnQgdG90YWxBbGxvY2F0aW9uID0gYnV0dG9uU2l6ZSAqIDU7IC8vIE9uZSBzcGFjZSBm
b3IgZWFjaCBidXR0b24gYW5kIG9uZSBleHRyYS4KLSAgICBpbnQgYnV0dG9uT2Zmc2V0ID0gMDsK
LSAgICBpZiAoRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9PSBwYXJ0KQotICAgICAgICBidXR0b25P
ZmZzZXQgPSBidXR0b25TaXplOwotICAgIGVsc2UgaWYgKEJhY2tCdXR0b25FbmRQYXJ0ID09IHBh
cnQpCi0gICAgICAgIGJ1dHRvbk9mZnNldCA9IDMgKiBidXR0b25TaXplOwotICAgIGVsc2UgaWYg
KEZvcndhcmRCdXR0b25FbmRQYXJ0ID09IHBhcnQpCi0gICAgICAgIGJ1dHRvbk9mZnNldCA9IDQg
KiBidXR0b25TaXplOwotCi0gICAgLy8gTm93IHdlIHdhbnQgdGhlIGFsbG9jYXRpb24gdG8gYmUg
cmVsYXRpdmUgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcGFpbnRlZCByZWN0LgotICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gZ2V0V2lkZ2V0Rm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0
LCAmYWxsb2NhdGlvbik7Ci0gICAgYWxsb2NhdGlvbi54ID0gYWxsb2NhdGlvbi55ID0gMDsKLSAg
ICBhbGxvY2F0aW9uLndpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIGFsbG9jYXRpb24uaGVpZ2h0
ID0gcmVjdC5oZWlnaHQoKTsKLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9s
bGJhcikgewotICAgICAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHRvdGFsQWxsb2NhdGlvbjsKLSAg
ICAgICAgYWxsb2NhdGlvbi55IC09IGJ1dHRvbk9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBhbGxvY2F0aW9uLndpZHRoID0gdG90YWxBbGxvY2F0aW9uOwotICAgICAgICBhbGxvY2F0aW9u
LnggLT0gYnV0dG9uT2Zmc2V0OwotICAgIH0KLSAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9u
KHdpZGdldCwgJmFsbG9jYXRpb24pOwotCi0gICAgY29uc3QgY2hhciogZGV0YWlsID0gb3JpZW50
YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyAidnNjcm9sbGJhciIgOiAiaHNjcm9sbGJhciI7
Ci0gICAgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3Qp
OwotCi0gICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKLSAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KGJ1dHRvblJlY3QsIHdpZGdldCwgc3RhdGVUeXBl
LCBzaGFkb3dUeXBlLCBkZXRhaWwpOwotCi0gICAgZmxvYXQgYXJyb3dTY2FsaW5nOwotICAgIGd0
a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5n
LCBOVUxMKTsKLSAgICBJbnRTaXplIGFycm93U2l6ZSA9IHJlY3Quc2l6ZSgpOwotICAgIGFycm93
U2l6ZS5zY2FsZShhcnJvd1NjYWxpbmcpOwotICAgIEludFJlY3QgYXJyb3dSZWN0KEludFBvaW50
KGJ1dHRvblJlY3QueCgpICsgKGJ1dHRvblJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgp
KSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC55KCkgKyAo
YnV0dG9uUmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZS5oZWlnaHQoKSkgLyAyKSwKLSAgICAgICAg
ICAgICAgICAgICAgICBhcnJvd1NpemUpOwotICAgIGlmIChwcmVzc2VkKSB7Ci0gICAgICAgIGlu
dCBhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKLSAgICAgICAgZ3RrX3dp
ZGdldF9zdHlsZV9nZXQod2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJy
b3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZ
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgYXJyb3dSZWN0
Lm1vdmUoYXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVudFkpOwotICAgIH0KLQot
ICAgIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUgPSBHVEtfQVJST1dfRE9XTjsKLSAgICBpZiAob3Jp
ZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICAg
ICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1VQOwotICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1df
UklHSFQ7Ci0gICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0g
QmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgICAgIGFycm93VHlwZSA9IEdUS19BUlJPV19M
RUZUOwotICAgIH0KLSAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50QXJyb3coYXJyb3dSZWN0LCB3
aWRnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgYXJyb3dUeXBlLCBkZXRhaWwpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0OWM1NDNmM2RkZjZiMzE1ZWZmYjk4YTc1
OWZmNWIwMDJkNzBjZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3Jv
bGxiYXJUaGVtZUd0ay5oIgotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0KLSNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHdGtXaWRn
ZXQqLCBTY3JvbGxiYXJUaGVtZUd0ayogc2Nyb2xsYmFyVGhlbWUpCi17Ci0gICAgc2Nyb2xsYmFy
VGhlbWUtPnVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotfQotCi1TY3JvbGxiYXJUaGVtZUd0azo6
U2Nyb2xsYmFyVGhlbWVHdGsoKQotICAgIDogbV9jb250ZXh0KHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKS0+Z3RrU2Nyb2xsYmFy
U3R5bGUoKSkKLXsKLSAgICB1cGRhdGVUaGVtZVByb3BlcnRpZXMoKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KG1fY29udGV4dCwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGd0a1N0eWxlQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1l
UHJvcGVydGllcygpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbi1zbGlkZXItbGVuZ3RoIiwg
Jm1fbWluVGh1bWJMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlk
ZXItd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0cm91Z2gtYm9yZGVyIiwgJm1fdHJvdWdoQm9yZGVyV2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzdGVwcGVyLXNpemUiLCAmbV9zdGVwcGVyU2l6ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXItc3BhY2luZyIsICZtX3N0ZXBwZXJT
cGFjaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoLXVuZGVyLXN0
ZXBwZXJzIiwgJm1fdHJvdWdoVW5kZXJTdGVwcGVycywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFja0J1dHRvblN0YXJ0UGFy
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIi
LCAmbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImhhcy1zZWNvbmRhcnktYmFja3dhcmQtc3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25F
bmRQYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzLXNlY29uZGFyeS1m
b3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzRnJhbWVU
aGlja25lc3MoKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRD
bGFzc2VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdU
S19TVFlMRV9DTEFTU19TQ1JPTExCQVIpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCBvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/ICBHVEtfU1RZTEVf
Q0xBU1NfVkVSVElDQUwgOiBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50VHJhY2tCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICAvLyBQYWludCB0aGUgdHJhY2sgYmFja2dyb3VuZC4gSWYgdGhlIHRyb3Vn
aC11bmRlci1zdGVwcGVycyBwcm9wZXJ0eSBpcyB0cnVlLCB0aGlzCi0gICAgLy8gc2hvdWxkIGJl
IHRoZSBmdWxsIHNpemUgb2YgdGhlIHNjcm9sbGJhciwgYnV0IGlmIGlzIGZhbHNlLCBpdCBzaG91
bGQgb25seSBiZSB0aGUKLSAgICAvLyB0cmFjayByZWN0LgotICAgIEludFJlY3QgZnVsbFNjcm9s
bGJhclJlY3QocmVjdCk7Ci0gICAgaWYgKG1fdHJvdWdoVW5kZXJTdGVwcGVycykKLSAgICAgICAg
ZnVsbFNjcm9sbGJhclJlY3QgPSBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnko
KSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKLQotICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVD
b250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSk7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RS
T1VHSCk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQobV9jb250ZXh0LCBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNj
cm9sbGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJSZWN0
LndpZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2Zy
YW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCi0gICAgICAg
ICAgICAgICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1bGxTY3JvbGxiYXJSZWN0Lnko
KSwgZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9sbGJhclJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQpOwotfQotCi12b2lk
IFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFNjcm9sbGJhckJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKLQotICAgIGFwcGx5U2Nyb2xsYmFyU3R5
bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgInNjcm9sbGVkLXdpbmRv
dyIpOwotICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBzY3JvbGxiYXIt
PndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
cmVzdG9yZShtX2NvbnRleHQpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludFRo
dW1iKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZl
KG1fY29udGV4dCk7Ci0KLSAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKTsKLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENs
YXNzZXMobV9jb250ZXh0LCBvcmllbnRhdGlvbik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKG1fY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NMSURFUik7Ci0KLSAgICBndWludCBm
bGFncyA9IDA7Ci0gICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQp
Ci0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICBpZiAoc2Nyb2xs
YmFyLT5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKG1fY29u
dGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGd0a19yZW5k
ZXJfc2xpZGVyKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAotICAgICAgICAg
ICAgICAgICAgICAgIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gR1RLX09SSUVO
VEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOwotCi0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfcmVzdG9yZShtX2NvbnRleHQpOwotfQotCi12b2lkIFNjcm9sbGJhclRo
ZW1lR3RrOjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQg
cGFydCkKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7Ci0KLSAgICBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KTsKLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250ZXh0LCBvcmll
bnRhdGlvbik7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKChCYWNrQnV0dG9uU3Rh
cnRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAgICAgIHx8IChC
YWNrQnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQotICAg
ICAgICB8fCAoRm9yd2FyZEJ1dHRvbkVuZFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJl
bnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0
b25TdGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxi
YXItPm1heGltdW0oKSkpIHsKLSAgICAgICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2Vk
UGFydCgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwotICAg
ICAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCi0gICAgICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICB9IGVsc2UKLSAgICAgICAgZmxh
Z3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X3N0YXRlKG1fY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsK
LQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQsIEdUS19TVFlMRV9D
TEFTU19CVVRUT04pOwotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChtX2NvbnRleHQsIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQsIGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBnZmxvYXQgYXJyb3dTY2FsaW5nOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsICJhcnJvdy1zY2FsaW5nIiwg
JmFycm93U2NhbGluZywgTlVMTCk7Ci0KLSAgICBkb3VibGUgYXJyb3dTaXplID0gc3RkOjptaW4o
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSAqIGFycm93U2NhbGluZzsKLSAgICBGbG9hdFBv
aW50IGFycm93UG9pbnQocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gYXJyb3dTaXplKSAvIDIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBh
cnJvd1NpemUpIC8gMik7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHVEtfU1RBVEVfRkxBR19BQ1RJVkUp
IHsKLSAgICAgICAgZ2ludCBhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsK
LSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteCIsICZhcnJv
d0Rpc3BsYWNlbWVudFgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJy
b3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dEaXNwbGFjZW1lbnRZLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGFycm93UG9pbnQubW92ZShhcnJv
d0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WSk7Ci0gICAgfQotCi0gICAgZ2RvdWJs
ZSBhbmdsZTsKLSAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAg
ICAgICAgYW5nbGUgPSAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZv
cndhcmRCdXR0b25TdGFydFBhcnQpID8gR19QSSA6IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YW5nbGUgPSAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRC
dXR0b25TdGFydFBhcnQpID8gR19QSSAvIDIgOiAzICogKEdfUEkgLyAyKTsKLSAgICB9Ci0KLSAg
ICBndGtfcmVuZGVyX2Fycm93KG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIGFuZ2xlLCBhcnJvd1BvaW50LngoKSwgYXJyb3dQb2ludC55KCksIGFycm93U2l6ZSk7
Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFHVEtfQVBJX1ZFUlNJT05fMgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxMzc3M2U1OGM2MDVjNDA4MTNhOWMwN2I4OTAw
M2Q2MWZkODEwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlYXJj
aFBvcHVwTWVudUd0ay5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1TZWFyY2hQb3B1cE1lbnVHdGs6OlNlYXJjaFBvcHVwTWVudUd0ayhQ
b3B1cE1lbnVDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fcG9wdXAoYWRvcHRSZWYobmV3IFBvcHVw
TWVudUd0ayhjbGllbnQpKSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Qb3B1cE1l
bnUqIFNlYXJjaFBvcHVwTWVudUd0azo6cG9wdXBNZW51KCkKLXsKLSAgICByZXR1cm4gbV9wb3B1
cC5nZXQoKTsKLX0KLQotdm9pZCBTZWFyY2hQb3B1cE1lbnVHdGs6OnNhdmVSZWNlbnRTZWFyY2hl
cyhjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTZWFyY2hQb3B1cE1lbnVHdGs6OmxvYWRSZWNlbnRT
ZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8U3RyaW5nPiYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBTZWFyY2hQb3B1cE1lbnVHdGs6OmVuYWJsZWQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VhcmNoUG9wdXBNZW51R3RrLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1M2M2M2Q3YzJiN2I4NGU0MjYzNTYyNjNhOWQ2Yjky
NDkyMTFlOGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlYXJjaFBvcHVwTWVudUd0ay5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFNlYXJj
aFBvcHVwTWVudUd0a19oCi0jZGVmaW5lIFNlYXJjaFBvcHVwTWVudUd0a19oCi0KLSNpbmNsdWRl
ICJQb3B1cE1lbnVHdGsuaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBTZWFyY2hQb3B1cE1lbnVHdGsgOiBwdWJsaWMgU2VhcmNo
UG9wdXBNZW51IHsKLXB1YmxpYzoKLSAgICBTZWFyY2hQb3B1cE1lbnVHdGsoUG9wdXBNZW51Q2xp
ZW50Kik7Ci0KLSAgICB2aXJ0dWFsIFBvcHVwTWVudSogcG9wdXBNZW51KCk7Ci0gICAgdmlydHVh
bCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFy
Y2hJdGVtcyk7Ci0gICAgdmlydHVhbCBib29sIGVuYWJsZWQoKTsKLQotcHJpdmF0ZToKLSAgICBS
ZWZQdHI8UG9wdXBNZW51R3RrPiBtX3BvcHVwOwotfTsKLQotfQotCi0jZW5kaWYgLy8gU2VhcmNo
UG9wdXBNZW51R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
aGFyZWRCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZEJ1
ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDQwZjI4ZTlkZjcx
ZTRlZWQwZTFhMDEyNmU2NjUwZDM1YzYzNmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZl
ckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLSNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaW5j
bHVkZSA8Z2xpYi5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZVBhdGgpCi17Ci0gICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKGZpbGVQYXRoKTsKLSAgICBnY2hhciogY29udGVudHM7Ci0gICAgZ3NpemUgc2l6ZTsKLSAg
ICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZW5h
bWUuZGF0YSgpLCAmY29udGVudHMsICZzaXplLCAmZXJyb3IpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGZ1bGx5IHJlYWQgY29udGVudHMgb2YgZmlsZSAlcyAtICVzIiwgZmlsZW5h
bWVGb3JEaXNwbGF5KGZpbGVQYXRoKS51dGY4KCkuZGF0YSgpLCBlcnJvci0+bWVzc2FnZSk7Ci0g
ICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNv
bnRlbnRzLCBzaXplKTsKLSAgICBnX2ZyZWUoY29udGVudHMpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkVGltZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0MzFhMzUyZjczM2YwZWIzYTc2OGY5ODIxYTQwMjU2NDMwMzA0ZjYyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TaGFyZWRUaW1lckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCi0KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUg
PGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIGd1aW50IHNoYXJlZFRpbWVyOwotc3RhdGljIHZvaWQgKCpzaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24pKCk7Ci0KLXZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpm
KSgpKQotewotICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiA9IGY7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB0aW1lb3V0X2NiKGdwb2ludGVyKQotewotICAgIGlmIChzaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24pCi0gICAgICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbigpOwotICAgIHJldHVy
biBGQUxTRTsKLX0KLQotdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50
ZXJ2YWwpCi17Ci0gICAgQVNTRVJUKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik7Ci0KLSAgICBn
dWludCBpbnRlcnZhbEluTVMgPSBzdGF0aWNfY2FzdDxndWludD4oaW50ZXJ2YWwgKiAxMDAwKTsK
LQotICAgIHN0b3BTaGFyZWRUaW1lcigpOwotICAgIHNoYXJlZFRpbWVyID0gZ190aW1lb3V0X2Fk
ZF9mdWxsKEdES19QUklPUklUWV9SRURSQVcsIGludGVydmFsSW5NUywgdGltZW91dF9jYiwgMCwg
MCk7Ci19Ci0KLXZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKLXsKLSAgICBpZiAoc2hhcmVkVGltZXIg
PT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gcmVtb3ZlZFNvdXJjZSA9IGdf
c291cmNlX3JlbW92ZShzaGFyZWRUaW1lcik7Ci0gICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkU291
cmNlLCByZW1vdmVkU291cmNlKTsKLSAgICBzaGFyZWRUaW1lciA9IDA7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291bmRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyZjczMTZjYWZkMmVjZWY3YjYxZThhZGYxMjkzNjI2OGE5MjI0YzRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlNvdW5kLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzeXN0ZW1CZWVwKCkKLXsKLSAgICBn
ZGtfYmVlcCgpOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYjM0NDQ5M2Q1YjMxZDhkZDg1MDM5ODkzNjhmYWFiMDM1NGEz
MzkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgot
I2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJETlMuaCIKLSNpbmNsdWRlICJF
ZGl0b3IuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGVFBEaXJlY3RvcnlE
b2N1bWVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
Vmlldy5oIgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0vKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1
bik6ICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXZvaWQgZ2V0U3VwcG9ydGVkS2V5U2l6
ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVN0cmluZyBzaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBT
dHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVybiBTdHJpbmco
KTsgfQotZmxvYXQgdXNlcklkbGVUaW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gRkxU
X01BWDsgfSAvLyByZXR1cm4gYW4gYXJiaXRyYXJpbHkgaGlnaCB1c2VySWRsZVRpbWUgc28gdGhh
dCByZWxlYXNpbmcgcGFnZXMgZnJvbSB0aGUgcGFnZSBjYWNoZSBpc24ndCBwb3N0cG9uZWQKLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRiNjc2MTUwOTBlMTk5ZjdiY2QzNmNiNWJmODIxZjVh
ZTUyNjAxNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudEd0ay5oIgot
Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaWYgT1MoVU5JWCkKLSNpbmNsdWRlIDxzeXMvdXRzbmFt
ZS5oPgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogcGxhdGZvcm1Gb3JV
QVN0cmluZygpCi17Ci0jaWYgUExBVEZPUk0oWDExKQotICAgIHJldHVybiAiWDExIjsKLSNlbGlm
IE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuICIiOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgIHJl
dHVybiAiTWFjaW50b3NoIjsKLSNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19ESVJFQ1RGQikK
LSAgICByZXR1cm4gIkRpcmVjdEZCIjsKLSNlbHNlCi0gICAgcmV0dXJuICJVbmtub3duIjsKLSNl
bmRpZgotfQotCi1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtVmVyc2lvbkZvclVBU3RyaW5nKCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdWFPU1ZlcnNpb24sIChTdHJpbmcoKSkp
OwotICAgIGlmICghdWFPU1ZlcnNpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdWFPU1Zl
cnNpb247Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHVhT1NWZXJzaW9uID0gd2luZG93c1ZlcnNp
b25Gb3JVQVN0cmluZygpOwotI2VsaWYgT1MoREFSV0lOKQotI2lmIENQVShYODYpCi0gICAgdWFP
U1ZlcnNpb24gPSAiSW50ZWwgTWFjIE9TIFgiOwotI2Vsc2UKLSAgICB1YU9TVmVyc2lvbiA9ICJQ
UEMgTWFjIE9TIFgiOwotI2VuZGlmCi0jZWxpZiBPUyhVTklYKQotICAgIHN0cnVjdCB1dHNuYW1l
IG5hbWU7Ci0gICAgaWYgKHVuYW1lKCZuYW1lKSAhPSAtMSkKLSAgICAgICAgdWFPU1ZlcnNpb24g
PSBTdHJpbmc6OmZvcm1hdCgiJXMgJXMiLCBuYW1lLnN5c25hbWUsIG5hbWUubWFjaGluZSk7Ci0g
ICAgZWxzZQotICAgICAgICB1YU9TVmVyc2lvbiA9IFN0cmluZygiVW5rbm93biIpOwotI2Vsc2UK
LSAgICB1YU9TVmVyc2lvbiA9IFN0cmluZygiVW5rbm93biIpOwotI2VuZGlmCi0gICAgcmV0dXJu
IHVhT1NWZXJzaW9uOwotfQotCi1TdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25WZXJzaW9uKQotewot
ICAgIC8vIENyZWF0ZSBhIGRlZmF1bHQgdXNlciBhZ2VudCBzdHJpbmcgd2l0aCBhIGxpYmVyYWwg
aW50ZXJwcmV0YXRpb24gb2YgCi0gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv
ZW4tVVMvZG9jcy9Vc2VyX0FnZW50X1N0cmluZ3NfUmVmZXJlbmNlCi0gICAgLy8KLSAgICAvLyBG
b3JtaW5nIGEgZnVuY3Rpb25hbCB1c2VyIGFnZW50IGlzIHJlYWxseSBkaWZmaWN1bHQuIFdlIG11
c3QgbWVudGlvbiBTYWZhcmksIGJlY2F1c2Ugc29tZQotICAgIC8vIHNpdGVzIGNoZWNrIGZvciB0
aGF0IHdoZW4gZGV0ZWN0aW5nIFdlYktpdCBicm93c2Vycy4gQWRkaXRpb25hbGx5IHNvbWUgc2l0
ZXMgYXNzdW1lIHRoYXQKLSAgICAvLyBicm93c2VycyB0aGF0IGFyZSAiU2FmYXJpIiBidXQgbm90
IHJ1bm5pbmcgb24gT1MgWCBhcmUgdGhlIFNhZmFyaSBpT1MgYnJvd3Nlciwgc28gd2UKLSAgICAv
LyBhbHNvIGNsYWltIHRvIGJlICBDaHJvbWl1bS4gR2V0dGluZyB0aGlzIHdyb25nIGNhbiBjYXVz
ZSBzaXRlcyB0byBsb2FkIHRoZSB3cm9uZyBKYXZhU2NyaXB0LAotICAgIC8vIENTUywgb3IgY3Vz
dG9tIGZvbnRzLiBJbiBzb21lIGNhc2VzIHNpdGVzIHdvbid0IGxvYWQgcmVzb3VyY2VzIGF0IGFs
bC4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IENTdHJpbmcsIHVhVmVyc2lvbiwgKFN0
cmluZzo6Zm9ybWF0KCIlaS4laSIsIFVTRVJfQUdFTlRfR1RLX01BSk9SX1ZFUlNJT04sIFVTRVJf
QUdFTlRfR1RLX01JTk9SX1ZFUlNJT04pLnV0ZjgoKSkpOwotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBzdGF0aWNVQSwgKFN0cmluZzo6Zm9ybWF0KCJNb3ppbGxhLzUuMCAo
JXM7ICVzKSBBcHBsZVdlYktpdC8lcyAoS0hUTUwsIGxpa2UgR2Vja28pICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hy
b21pdW0vMjUuMC4xMzQ5LjIgQ2hyb21lLzI1LjAuMTM0OS4yIFNhZmFyaS8lcyIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGxhdGZvcm1Gb3JVQVN0cmluZygpLCBwbGF0Zm9ybVZlcnNpb25Gb3JVQVN0cmluZygpLnV0Zjgo
KS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWFWZXJzaW9uLmRhdGEoKSwgdWFWZXJzaW9uLmRhdGEoKSkpKTsK
LSAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y1VBOwotCi0gICAgU3RyaW5nIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uID0gYXBwbGljYXRpb25W
ZXJzaW9uOwotICAgIGlmIChmaW5hbEFwcGxpY2F0aW9uVmVyc2lvbi5pc0VtcHR5KCkpCi0gICAg
ICAgIGZpbmFsQXBwbGljYXRpb25WZXJzaW9uID0gdWFWZXJzaW9uLmRhdGEoKTsKLQotICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJXMgJXMvJXMiLCBzdGF0aWNVQS51dGY4KCkuZGF0YSgpLCBh
cHBsaWNhdGlvbk5hbWUudXRmOCgpLmRhdGEoKSwgZmluYWxBcHBsaWNhdGlvblZlcnNpb24udXRm
OCgpLmRhdGEoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2YzE3NTMzZTA3MzA0NTc0YzAyYzlhNjc5MmM1NmE5NTU3MjJhOWZlLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9Vc2VyQWdlbnRHdGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVzZXJB
Z2VudEd0a19oCi0jZGVmaW5lIFVzZXJBZ2VudEd0a19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGlj
YXRpb25OYW1lID0gIiIsIGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25WZXJzaW9uID0gIiIpOwot
Ci19Ci0KLSNlbmRpZiAvLyBVc2VyQWdlbnRHdGtfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9XaWRnZXRHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDNmM2M5
YzdjOWE2ZTJjOWEzNGMwOTFlZTk0YmNiMTM3OGM2ZjM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRn
ZXRHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXaWRn
ZXQuaCIKLQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIkhvc3RXaW5k
b3cuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XaWRnZXQ6OldpZGdldChQbGF0Zm9ybVdp
ZGdldCB3aWRnZXQpCi17Ci0gICAgaW5pdCh3aWRnZXQpOwotfQotCi1XaWRnZXQ6On5XaWRnZXQo
KQotewotICAgIEFTU0VSVCghcGFyZW50KCkpOwotCi0gICAgcmVsZWFzZVBsYXRmb3JtV2lkZ2V0
KCk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCi17Ci19Ci0KLXZv
aWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgU2Nyb2xs
VmlldyogdmlldyA9IHJvb3QoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAg
ICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1cnNvcihjdXJzb3IpOwotfQotCi12b2lkIFdpZGdl
dDo6c2hvdygpCi17Ci0gICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7Ci0KLSAgICBpZiAoaXNQYXJl
bnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93
KHBsYXRmb3JtV2lkZ2V0KCkpOwotfQotCi12b2lkIFdpZGdldDo6aGlkZSgpCi17Ci0gICAgc2V0
U2VsZlZpc2libGUoZmFsc2UpOwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRm
b3JtV2lkZ2V0KCkpCi0gICAgICAgIGd0a193aWRnZXRfaGlkZShwbGF0Zm9ybVdpZGdldCgpKTsK
LX0KLQotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBp
c1NlbGVjdGVkKQotewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU2VlIGlmIHRoZSBwbGF0Zm9ybVdpZGdldCBoYXMgYSB3ZWJraXQtd2lkZ2V0
LWlzLXNlbGVjdGVkIHByb3BlcnR5Ci0gICAgLy8gYW5kIHNldCBpdCBhZnRlcndhcmRzLgotICAg
IEdQYXJhbVNwZWMqIHNwZWMgPSBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5KEdfT0JKRUNU
X0dFVF9DTEFTUyhwbGF0Zm9ybVdpZGdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0LXdpZGdldC1pcy1zZWxlY3RlZCIpOwot
ICAgIGlmICghc3BlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19vYmplY3Rfc2V0KHBsYXRm
b3JtV2lkZ2V0KCksICJ3ZWJraXQtd2lkZ2V0LWlzLXNlbGVjdGVkIiwgaXNTZWxlY3RlZCwgTlVM
TCk7Ci19Ci0KLUludFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAotewotICAgIHJldHVy
biBtX2ZyYW1lOwotfQotCi12b2lkIFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAgZnJhbWVSZWN0c0NoYW5nZWQoKTsK
LX0KLQotdm9pZCBXaWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCi17Ci0gICAgaWYgKCFw
bGF0Zm9ybVdpZGdldCgpKQotICAgICAgICAgcmV0dXJuOwotICAgIGdfb2JqZWN0X3VucmVmKHBs
YXRmb3JtV2lkZ2V0KCkpOwotfQotCi12b2lkIFdpZGdldDo6cmV0YWluUGxhdGZvcm1XaWRnZXQo
KQotewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgIHJldHVybjsKLSAgICBn
X29iamVjdF9yZWZfc2luayhwbGF0Zm9ybVdpZGdldCgpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWY1ZGE1NDY4MzAzODUzNjMxMzcxYzRjN2Vm
MzYzZTcxNGY4MTFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFNlbmNoYSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQu
aCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25p
bmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0
ckNhaXJvLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBHZGtQ
aXhtYXAqIGdTY3JhdGNoQnVmZmVyID0gMDsKLXN0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1ZmZl
cigpCi17Ci0gICAgaWYgKGdTY3JhdGNoQnVmZmVyKQotICAgICAgICBnX29iamVjdF91bnJlZihn
U2NyYXRjaEJ1ZmZlcik7Ci0gICAgZ1NjcmF0Y2hCdWZmZXIgPSAwOwotfQotCi0vLyBXaWRnZXQg
cmVuZGVyaW5nIG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVyIGZvciB0aGUgaW50
ZXJtZWRpYXRlCi0vLyByZW5kZXIuIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcg
dGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEgYnVmZmVyIHdo
aWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi1jbGFzcyBQdXJn
ZVNjcmF0Y2hCdWZmZXJUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewotcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IHB1cmdlU2NyYXRjaEJ1ZmZlcigpOyB9Ci19OwotCi1zdGF0
aWMgdm9pZCBzY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciwgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIs
ICgpKTsKLSAgICBpZiAocHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuaXNBY3RpdmUoKSkKLSAgICAg
ICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3RvcCgpOwotICAgIHB1cmdlU2NyYXRjaEJ1ZmZl
clRpbWVyLnN0YXJ0T25lU2hvdCgyKTsKLX0KLQotV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lk
Z2V0UmVuZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNz
Q29udGV4dCkKLSAgICAsIG1fdGFyZ2V0UmVjdCh0YXJnZXRSZWN0KQotICAgICwgbV9oYWRFcnJv
cihmYWxzZSkKLXsKLSAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7Ci0KLSAgICAv
LyBGYWxsYmFjazogV2UgZmFpbGVkIHRvIGNyZWF0ZSBhbiBSR0JBIGNvbG9ybWFwIGVhcmxpZXIs
IHNvIHdlIGNhbm5vdCBwcm9wZXJseSBwYWludCAKLSAgICAvLyB0byBhIHRlbXBvcmFyeSBzdXJm
YWNlIGFuZCBwcmVzZXJ2ZSB0cmFuc3BhcmVuY3kuIFRvIGVuc3VyZSBkZWNlbnQgd2lkZ2V0IHJl
bmRlcmluZywganVzdAotICAgIC8vIHBhaW50IGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgZHJhd2Fi
bGUuIFRoaXMgd2lsbCBub3QgcmVuZGVyIENTUyByb3RhdGlvbmFsIHRyYW5zZm9ybXMgcHJvcGVy
bHkuCi0gICAgaWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBncmFw
aGljc0NvbnRleHQtPmdka1dpbmRvdygpKSB7Ci0gICAgICAgIG1fdGFyZ2V0ID0gZ3JhcGhpY3ND
b250ZXh0LT5nZGtXaW5kb3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdl
IG5ldmVyIHdhbnQgdG8gY3JlYXRlIGEgc2NyYXRjaCBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIHNp
emUgb2Ygb3VyIHRhcmdldCBHZGtEcmF3YWJsZS4KLSAgICAvLyBUaGlzIHByZXZlbnRzIGdpYW50
IHBpeG1hcCBhbGxvY2F0aW9ucyBmb3IgdmVyeSBsYXJnZSB3aWRnZXRzIGluIHNtYWxsZXIgdmll
d3MuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgY2hlY2sgZm9yIFdl
YktpdDIgYXMgd2VsbC4KLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkgewot
ICAgICAgICBpbnQgbWF4V2lkdGggPSAwLCBtYXhIZWlnaHQgPSAwOwotICAgICAgICBnZXRHZGtE
cmF3YWJsZVNpemUoZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSwgJm1heFdpZHRoLCAmbWF4
SGVpZ2h0KTsKLSAgICAgICAgbV90YXJnZXRSZWN0LnNldFNpemUobV90YXJnZXRSZWN0LnNpemUo
KS5zaHJ1bmtUbyhJbnRTaXplKG1heFdpZHRoLCBtYXhIZWlnaHQpKSk7Ci0gICAgfQotCi0gICAg
Ly8gV2lkZ2V0cyBzb21ldGltZXMgbmVlZCB0byBkcmF3IG91dHNpZGUgdGhlaXIgYm91bmRhcmll
cyBmb3IgdGhpbmdzIHN1Y2ggYXMKLSAgICAvLyBleHRlcmlvciBmb2N1cy4gV2Ugd2FudCB0byBh
bGxvY2F0ZSBhIHNvbWUgZXh0cmEgcGl4ZWxzIGluIG91ciBzdXJmYWNlIGZvciB0aGlzLgotICAg
IHN0YXRpYyBpbnQgZXh0cmFTcGFjZSA9IDE1OwotICAgIG1fdGFyZ2V0UmVjdC5pbmZsYXRlKGV4
dHJhU3BhY2UpOwotCi0gICAgLy8gVGhpcyBvZmZzZXQgd2lsbCBtYXAgYSBwb2ludCBpbiB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHdpZGdldCB0byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlIHBhaW50aW5nIGJ1ZmZlci4KLSAgICBtX3BhaW50T2Zmc2V0ID0gdGFyZ2V0UmVjdC5s
b2NhdGlvbigpIC0gbV90YXJnZXRSZWN0LmxvY2F0aW9uKCk7Ci0KLSAgICBpbnQgd2lkdGggPSBt
X3RhcmdldFJlY3Qud2lkdGgoKSArIChleHRyYVNwYWNlICogMik7Ci0gICAgaW50IGhlaWdodCA9
IG1fdGFyZ2V0UmVjdC5oZWlnaHQoKSArIChleHRyYVNwYWNlICogMik7Ci0gICAgaW50IHNjcmF0
Y2hXaWR0aCA9IDA7Ci0gICAgaW50IHNjcmF0Y2hIZWlnaHQgPSAwOwotICAgIGlmIChnU2NyYXRj
aEJ1ZmZlcikKLSAgICAgICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShnU2NyYXRjaEJ1ZmZlciwgJnNj
cmF0Y2hXaWR0aCwgJnNjcmF0Y2hIZWlnaHQpOwotCi0gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8g
cmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgY3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdo
LgotICAgIGlmICghZ1NjcmF0Y2hCdWZmZXIgfHwgc2NyYXRjaFdpZHRoIDwgd2lkdGggfHwgc2Ny
YXRjaEhlaWdodCA8IGhlaWdodCkgewotICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsKLSAg
ICAgICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93
IHRoZSBidWZmZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMuCi0gICAgICAgIHdpZHRoID0g
KDEgKyAod2lkdGggPj4gNSkpIDw8IDU7Ci0gICAgICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+
PiA1KSkgPDwgNTsKLQotICAgICAgICBnU2NyYXRjaEJ1ZmZlciA9IGdka19waXhtYXBfbmV3KDAs
IHdpZHRoLCBoZWlnaHQsIGdka19jb2xvcm1hcF9nZXRfdmlzdWFsKHRoZW1lLT5tX2NvbG9ybWFw
KS0+ZGVwdGgpOwotICAgICAgICBnZGtfZHJhd2FibGVfc2V0X2NvbG9ybWFwKGdTY3JhdGNoQnVm
ZmVyLCB0aGVtZS0+bV9jb2xvcm1hcCk7Ci0gICAgfQotICAgIG1fdGFyZ2V0ID0gZ1NjcmF0Y2hC
dWZmZXI7Ci0KLSAgICAvLyBDbGVhciB0aGUgc2NyYXRjaCBidWZmZXIuCi0gICAgUmVmUHRyPGNh
aXJvX3Q+IHNjcmF0Y2hCdWZmZXJDb250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShn
U2NyYXRjaEJ1ZmZlcikpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihzY3JhdGNoQnVmZmVyQ29u
dGV4dC5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50KHNjcmF0
Y2hCdWZmZXJDb250ZXh0LmdldCgpKTsKLX0KLQotV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldp
ZGdldFJlbmRlcmluZ0NvbnRleHQoKQotewotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGJsaXQg
YmFjayB0byB0aGUgdGFyZ2V0IGluIHRoZSBmYWxsYmFjayBjYXNlLiBTZWUgYWJvdmUuCi0gICAg
UmVuZGVyVGhlbWVHdGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpOwotICAgIGlmICghdGhlbWUtPm1fdGhlbWVQ
YXJ0c0hhdmVSR0JBQ29sb3JtYXAgJiYgbV9ncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEb24ndCBwYWludCB0aGUgcmVzdWx0cyBiYWNrIGlm
IHRoZXJlIHdhcyBhbiBlcnJvci4KLSAgICBpZiAobV9oYWRFcnJvcikgewotICAgICAgICBzY2hl
ZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6IEl0J3MgdW5jbGVhciBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUgdGhl
IGN1cnJlbnQgc291cmNlIGhlcmUuCi0gICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gbV9ncmFw
aGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIFJlZlB0cjxjYWlyb19w
YXR0ZXJuX3Q+IHByZXZpb3VzU291cmNlKGNhaXJvX2dldF9zb3VyY2UoY2Fpcm9Db250ZXh0KSk7
Ci0KLSAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBnU2NyYXRj
aEJ1ZmZlciwgbV90YXJnZXRSZWN0LngoKSwgbV90YXJnZXRSZWN0LnkoKSk7Ci0gICAgY2Fpcm9f
cmVjdGFuZ2xlKGNhaXJvQ29udGV4dCwgbV90YXJnZXRSZWN0LngoKSwgbV90YXJnZXRSZWN0Lnko
KSwgbV90YXJnZXRSZWN0LndpZHRoKCksIG1fdGFyZ2V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgY2Fp
cm9fZmlsbChjYWlyb0NvbnRleHQpOwotICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm9Db250ZXh0
LCBwcmV2aW91c1NvdXJjZS5nZXQoKSk7Ci0gICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2Uo
KTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVDbGlwUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LCBHZGtSZWN0YW5nbGUqIGNsaXBSZWN0KQotewotICAgIGNsaXBS
ZWN0LT54ID0gbV9wYWludE9mZnNldC53aWR0aCgpICsgcmVjdC54KCk7Ci0gICAgY2xpcFJlY3Qt
PnkgPSBtX3BhaW50T2Zmc2V0LmhlaWdodCgpICsgcmVjdC55KCk7Ci0gICAgY2xpcFJlY3QtPndp
ZHRoID0gbV90YXJnZXRSZWN0LndpZHRoKCk7Ci0gICAgY2xpcFJlY3QtPmhlaWdodCA9IG1fdGFy
Z2V0UmVjdC5oZWlnaHQoKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQ
YWludEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVU
eXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0
YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBjbGlwUmVjdDsKLSAgICBjYWxjdWxhdGVDbGlwUmVj
dChyZWN0LCAmY2xpcFJlY3QpOwotCi0gICAgLy8gU29tZSB3aWRnZXRzIGFsc28gbmVlZCB0aGVp
ciBhbGxvY2F0aW9uIGFkanVzdGVkIHRvIGFjY291bnQgZm9yIGV4dHJhIHNwYWNlLgotICAgIC8v
IFJpZ2h0IG5vdyBvbmx5IHNjcm9sbGJhciBidXR0b25zIGhhdmUgc2lnbmlmaWNhbnQgYWxsb2Nh
dGlvbnMuCi0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0
X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0gICAgYWxsb2NhdGlvbi54ICs9IGNs
aXBSZWN0Lng7Ci0gICAgYWxsb2NhdGlvbi55ICs9IGNsaXBSZWN0Lnk7Ci0gICAgZ3RrX3dpZGdl
dF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLQotICAgIGd0a19wYWludF9i
b3goZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hh
ZG93VHlwZSwgJmNsaXBSZWN0LAotICAgICAgICAgICAgICAgICAgd2lkZ2V0LCBkZXRhaWwsIGNs
aXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0K
LXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRGbGF0Qm94KGNvbnN0IEludFJl
Y3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtT
aGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVj
dGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7
Ci0gICAgZ3RrX3BhaW50X2ZsYXRfYm94KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1f
dGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgd2lkZ2V0LCBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6
Z3RrUGFpbnRGb2N1cyhjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3Rr
U3RhdGVUeXBlIHN0YXRlVHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtSZWN0
YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsK
LSAgICBndGtfcGFpbnRfZm9jdXMoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJn
ZXQsIHN0YXRlVHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgIGRl
dGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludFNsaWRlcihjb25z
dCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlw
ZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBlLCBjb25zdCBnY2hhciogZGV0YWlsLCBHdGtPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAg
Y2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfc2xpZGVy
KGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRv
d1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBj
bGlwUmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIG9yaWVu
dGF0aW9uKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludENoZWNr
KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3Rh
dGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17
Ci0gICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3Qs
ICZjbGlwUmVjdCk7Ci0gICAgZ3RrX3BhaW50X2NoZWNrKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdp
ZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsICZjbGlwUmVjdCwgd2lkZ2V0
LAotICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIGNsaXBSZWN0LngsIGNsaXBSZWN0LnksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29u
dGV4dDo6Z3RrUGFpbnRPcHRpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29u
c3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2Fs
Y3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfb3B0aW9uKGd0
a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5
cGUsICZjbGlwUmVjdCwgd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBjbGlw
UmVjdC54LCBjbGlwUmVjdC55LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi12
b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50U2hhZG93KGNvbnN0IEludFJlY3Qm
IHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFk
b3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFu
Z2xlIGNsaXBSZWN0OwotICAgIGNhbGN1bGF0ZUNsaXBSZWN0KHJlY3QsICZjbGlwUmVjdCk7Ci0g
ICAgZ3RrX3BhaW50X3NoYWRvdyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rhcmdl
dCwgc3RhdGVUeXBlLCBzaGFkb3dUeXBlLCAmY2xpcFJlY3QsIHdpZGdldCwKLSAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbCwgY2xpcFJlY3QueCwgY2xpcFJlY3QueSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWlu
dEFycm93KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5
cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGludCBhcnJvd0RpcmVjdGlv
biwgY29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0g
ICAgY2FsY3VsYXRlQ2xpcFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfYXJy
b3coZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hh
ZG93VHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQsIGRldGFpbCwKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8R3RrQXJyb3dUeXBlPihhcnJvd0RpcmVjdGlvbiksIFRSVUUsIGNsaXBSZWN0
LngsIGNsaXBSZWN0LnksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQg
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRWTGluZShjb25zdCBJbnRSZWN0JiByZWN0
LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgY29uc3QgZ2NoYXIq
IGRldGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7Ci0gICAgY2FsY3VsYXRlQ2xp
cFJlY3QocmVjdCwgJmNsaXBSZWN0KTsKLSAgICBndGtfcGFpbnRfdmxpbmUoZ3RrX3dpZGdldF9n
ZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgJmNsaXBSZWN0LCB3aWRnZXQs
IGRldGFpbCwKLSAgICAgICAgICAgICAgICAgICAgY2xpcFJlY3QueSwgY2xpcFJlY3QueSArIHJl
Y3QuaGVpZ2h0KCksIGNsaXBSZWN0LngpOwotCi19Ci0KLX0KLQotI2VuZGlmIC8vIEdUS19BUElf
VkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFmMmM4YTc3
MWMwZTE2NzMzNzQ4ZGQ2NGY0NGVjYWMwZTBjZjk5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCi0jZGVmaW5lIFdpZGdldFJlbmRl
cmluZ0NvbnRleHRfaAotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLQotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLQotLy8gVXN1YWxseSB0aGlzIGlzIHRvbyBleHBlbnNpdmUgdG8gaGF2ZSBpbiBo
ZWFkZXJzLCBidXQgR3RrU3RhdGVUeXBlIEd0a1NoYWRvd1R5cGUgYXJlCi0vLyBlbnVtcyBhbmQg
Y2Fubm90IGJlIGZvcndhcmQgZGVjbGFyZWQuIFdpZGdldFJlbmRlcmluZ0NvbnRleHQuaCBpcyBj
dXJyZW50bHkgb25seQotLy8gaW5jbHVkZWQgaW4gUmVuZGVyVGhlbWVHdGsyLmNwcCBhbmQgU2Ny
b2xsYmFyVGhlbWVHdGsyLmNwcC4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmVuZGVyVGhlbWVHdGs7
Ci0KLWNsYXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgewotcHVibGljOgotICAgIFdpZGdldFJl
bmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIH5X
aWRnZXRSZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGd0a1BhaW50Qm94KGNvbnN0IElu
dFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdj
aGFyKik7Ci0gICAgdm9pZCBndGtQYWludEZsYXRCb3goY29uc3QgSW50UmVjdCYsIEd0a1dpZGdl
dCosIEd0a1N0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lk
IGd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwg
Y29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50U2xpZGVyKGNvbnN0IEludFJlY3QmLCBH
dGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiwgR3Rr
T3JpZW50YXRpb24pOwotICAgIHZvaWQgZ3RrUGFpbnRDaGVjayhjb25zdCBJbnRSZWN0JiwgR3Rr
V2lkZ2V0KiwgR3RrU3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlLCBjb25zdCBnY2hhciopOwotICAg
IHZvaWQgZ3RrUGFpbnRPcHRpb24oY29uc3QgSW50UmVjdCYsIEd0a1dpZGdldCosIEd0a1N0YXRl
VHlwZSwgR3RrU2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50U2hh
ZG93KGNvbnN0IEludFJlY3QmLCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5
cGUsIGNvbnN0IGdjaGFyKik7Ci0gICAgdm9pZCBndGtQYWludEFycm93KGNvbnN0IEludFJlY3Qm
LCBHdGtXaWRnZXQqLCBHdGtTdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUsIGludCBhcnJvd0RpcmVj
dGlvbiwgY29uc3QgZ2NoYXIqKTsKLSAgICB2b2lkIGd0a1BhaW50VkxpbmUoY29uc3QgSW50UmVj
dCYsIEd0a1dpZGdldCosIEd0a1N0YXRlVHlwZSwgY29uc3QgZ2NoYXIqKTsKLQotcHJpdmF0ZToK
LSAgICB2b2lkIGNhbGN1bGF0ZUNsaXBSZWN0KGNvbnN0IEludFJlY3QmLCBHZGtSZWN0YW5nbGUq
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50UmVj
dCBtX3RhcmdldFJlY3Q7Ci0gICAgSW50U2l6ZSBtX3BhaW50T2Zmc2V0OwotICAgIGJvb2wgbV9o
YWRFcnJvcjsKLSAgICBHZGtEcmF3YWJsZSogbV90YXJnZXQ7Ci0KLX07Ci0KLX0KLQotI2VuZGlm
IC8vIEdUS19BUElfVkVSU0lPTl8yCi0jZW5kaWYgLy8gV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9DcmVkZW50
aWFsQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3Rr
L0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNDIzZmE1ZGVkMjI2ZGViOTdjZTczM2IxN2VkYzE5YmI3Y2Q2OTQ3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oIgotCi0j
ZGVmaW5lIFNFQ1JFVF9XSVRIX1VOU1RBQkxFIDEKLSNkZWZpbmUgU0VDUkVUX0FQSV9TVUJKRUNU
X1RPX0NIQU5HRSAxCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKLSNpbmNs
dWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRl
IDxsaWJzZWNyZXQvc2VjcmV0Lmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DcmVkZW50aWFsQmFja2luZ1N0b3JlJiBjcmVkZW50
aWFsQmFja2luZ1N0b3JlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENyZWRlbnRpYWxC
YWNraW5nU3RvcmUsIGJhY2tpbmdTdG9yZSwgKCkpOwotICAgIHJldHVybiBiYWNraW5nU3RvcmU7
Ci19Ci0KLXN0YXRpYyBHUmVmUHRyPEdIYXNoVGFibGU+IGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJs
ZUZyb21DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwg
Y29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IENyZWRlbnRpYWwoKSkKLXsKLSAgICBTb3Vw
VVJJKiB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7
Ci0gICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3JldF9h
dHRyaWJ1dGVzX2J1aWxkKAotICAgICAgICBTRUNSRVRfU0NIRU1BX0NPTVBBVF9ORVRXT1JLLAot
ICAgICAgICAiZG9tYWluIiwgc291cF9hdXRoX2dldF9yZWFsbShjaGFsbGVuZ2Uuc291cEF1dGgo
KSksCi0gICAgICAgICJzZXJ2ZXIiLCB1cmktPmhvc3QsCi0gICAgICAgICJwcm90b2NvbCIsIHVy
aS0+c2NoZW1lLAotICAgICAgICAiYXV0aHR5cGUiLCBzb3VwX2F1dGhfZ2V0X3NjaGVtZV9uYW1l
KGNoYWxsZW5nZS5zb3VwQXV0aCgpKSwKLSAgICAgICAgInBvcnQiLCB1cmktPnBvcnQsCi0gICAg
ICAgIE5VTEwpKTsKLSAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBhdHRyaWJ1dGVzOwotCi0gICAgZ19oYXNoX3RhYmxlX2luc2VydChhdHRyaWJ1dGVzLmdldCgp
LCBnX3N0cmR1cCgidXNlciIpLCBnX3N0cmR1cChjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0
YSgpKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci19Ci0KLXN0cnVjdCBDcmVkZW50aWFsRm9y
Q2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0YSB7Ci0gICAgQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZTo6Q3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrOwotICAgIHZvaWQq
IGRhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBjcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFk
eUNhbGxiYWNrKFNlY3JldFNlcnZpY2UqIHNlcnZpY2UsIEdBc3luY1Jlc3VsdCogYXN5bmNSZXN1
bHQsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxsYmFj
a0RhdGEpCi17Ci0gICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3JlZGVudGlhbEZvckNoYWxs
ZW5nZUNhbGxiYWNrIGNhbGxiYWNrID0gY2FsbGJhY2tEYXRhLT5jYWxsYmFjazsKLSAgICB2b2lk
KiBkYXRhID0gY2FsbGJhY2tEYXRhLT5kYXRhOwotICAgIGRlbGV0ZSBjYWxsYmFja0RhdGE7Ci0K
LSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR093blB0cjxHTGlzdD4gZWxlbWVudHMo
c2VjcmV0X3NlcnZpY2Vfc2VhcmNoX2ZpbmlzaChzZXJ2aWNlLCBhc3luY1Jlc3VsdCwgJmVycm9y
Lm91dFB0cigpKSk7Ci0gICAgaWYgKGVycm9yIHx8ICFlbGVtZW50cyB8fCAhZWxlbWVudHMtPmRh
dGEpIHsKLSAgICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEdSZWZQdHI8U2VjcmV0SXRlbT4gc2VjcmV0SXRlbSA9IGFkb3B0
R1JlZihzdGF0aWNfY2FzdDxTZWNyZXRJdGVtKj4oZWxlbWVudHMtPmRhdGEpKTsKLSAgICBHUmVm
UHRyPEdIYXNoVGFibGU+IGF0dHJpYnV0ZXMgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0X2F0
dHJpYnV0ZXMoc2VjcmV0SXRlbS5nZXQoKSkpOwotICAgIFN0cmluZyB1c2VyID0gU3RyaW5nOjpm
cm9tVVRGOChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRy
aWJ1dGVzLmdldCgpLCAidXNlciIpKSk7Ci0gICAgaWYgKHVzZXIuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzaXplX3QgbGVuZ3RoOwotICAgIEdSZWZQdHI8U2VjcmV0VmFsdWU+IHNlY3JldFZh
bHVlID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dldF9zZWNyZXQoc2VjcmV0SXRlbS5nZXQoKSkp
OwotICAgIGNvbnN0IGNoYXIqIHBhc3N3b3JkRGF0YSA9IHNlY3JldF92YWx1ZV9nZXQoc2VjcmV0
VmFsdWUuZ2V0KCksICZsZW5ndGgpOwotICAgIFN0cmluZyBwYXNzd29yZCA9IFN0cmluZzo6ZnJv
bVVURjgocGFzc3dvcmREYXRhLCBsZW5ndGgpOwotCi0gICAgY2FsbGJhY2soQ3JlZGVudGlhbCh1
c2VyLCBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KSwgZGF0YSk7Ci19
Ci0KLXZvaWQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Y3JlZGVudGlhbEZvckNoYWxsZW5nZShj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDcmVkZW50aWFsRm9yQ2hh
bGxlbmdlQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIGRhdGEpCi17Ci0gICAgLy8gVGhlIGRlZmF1
bHQgZmxhZyBvbmx5IHJldHVybnMgdGhlIG1vc3QgcmVjZW50IGl0ZW0sIG5vdCBhbGwgb2YgdGhl
bS4KLSAgICBTZWNyZXRTZWFyY2hGbGFncyBzZWFyY2hGbGFncyA9IHN0YXRpY19jYXN0PFNlY3Jl
dFNlYXJjaEZsYWdzPihTRUNSRVRfU0VBUkNIX1VOTE9DSyB8IFNFQ1JFVF9TRUFSQ0hfTE9BRF9T
RUNSRVRTKTsKLSAgICBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0
YSogY2FsbGJhY2tEYXRhID0gbmV3IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2Fs
bGJhY2tEYXRhOwotICAgIGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICBj
YWxsYmFja0RhdGEtPmRhdGEgPSBkYXRhOwotCi0gICAgc2VjcmV0X3NlcnZpY2Vfc2VhcmNoKAot
ICAgICAgICAwLCAvLyBUaGUgZGVmYXVsdCBTZWNyZXRTZXJ2aWNlLgotICAgICAgICBTRUNSRVRf
U0NIRU1BX0NPTVBBVF9ORVRXT1JLLAotICAgICAgICBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVG
cm9tQ2hhbGxlbmdlKGNoYWxsZW5nZSkuZ2V0KCksCi0gICAgICAgIHNlYXJjaEZsYWdzLAotICAg
ICAgICAwLCAvLyBjYW5jZWxsYWJsZQotICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KGNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2spLAot
ICAgICAgICBjYWxsYmFja0RhdGEpOwotfQotCi12b2lkIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6
OnN0b3JlQ3JlZGVudGlhbHNGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKLXsKLSAgICBDU3Ry
aW5nIHV0ZjhQYXNzd29yZCA9IGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCk7Ci0gICAgR1Jl
ZlB0cjxTZWNyZXRWYWx1ZT4gbmV3U2VjcmV0VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X3ZhbHVl
X25ldyh1dGY4UGFzc3dvcmQuZGF0YSgpLCB1dGY4UGFzc3dvcmQubGVuZ3RoKCksICJ0ZXh0L3Bs
YWluIikpOwotCi0gICAgc2VjcmV0X3NlcnZpY2Vfc3RvcmUoCi0gICAgICAgIDAsIC8vIFRoZSBk
ZWZhdWx0IFNlY3JldFNlcnZpY2UuCi0gICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdP
UkssCi0gICAgICAgIGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hhbGxl
bmdlLCBjcmVkZW50aWFsKS5nZXQoKSwKLSAgICAgICAgU0VDUkVUX0NPTExFQ1RJT05fREVGQVVM
VCwKLSAgICAgICAgXygiV2ViS2l0R1RLKyBwYXNzd29yZCIpLAotICAgICAgICBuZXdTZWNyZXRW
YWx1ZS5nZXQoKSwKLSAgICAgICAgMCwgLy8gY2FuY2VsbGFibGUKLSAgICAgICAgMCwgLy8gY2Fs
bGJhY2sKLSAgICAgICAgMCk7IC8vIGRhdGEKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlh
bEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGRh
OWExNTdmYmMxOTZlNjI4NzA0MjJhY2U5ZWZlODk3NDhlZTZkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElHQUxJQSBTLkwuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENyZWRl
bnRpYWxCYWNraW5nU3RvcmVfaAotI2RlZmluZSBDcmVkZW50aWFsQmFja2luZ1N0b3JlX2gKLQot
I2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQotY2xhc3MgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSB7
Ci1XVEZfTUFLRV9OT05DT1BZQUJMRShDcmVkZW50aWFsQmFja2luZ1N0b3JlKTsKLXB1YmxpYzoK
LSAgICBmcmllbmQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9y
ZSgpOwotICAgIHZpcnR1YWwgfkNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKSB7IH0KLQotICAgIHR5
cGVkZWYgdm9pZCAoKkNyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjaykoY29uc3QgQ3JlZGVu
dGlhbCYsIHZvaWQqIGRhdGEpOwotCi0gICAgdm9pZCBjcmVkZW50aWFsRm9yQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ3JlZGVudGlhbEZvckNoYWxsZW5nZUNhbGxi
YWNrLCB2b2lkKiBkYXRhKTsKLSAgICB2b2lkIHN0b3JlQ3JlZGVudGlhbHNGb3JDaGFsbGVuZ2Uo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJik7Ci1wcml2
YXRlOgotICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmUoKSB7IH0KLX07Ci0KLUNyZWRlbnRpYWxC
YWNraW5nU3RvcmUmIGNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQ3JlZGVudGlhbEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVy
bmFsSUNVR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVh
a0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNWU1YTA1ZmE0OTE5NWZiMzBiZjY5ZGVkNTYyZDU0M2I4YjYxMDE4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGNo
YXIqIGN1cnJlbnRTZWFyY2hMb2NhbGVJRCgpCi17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB1c2Ug
c3lzdGVtIGxvY2FsZS4KLSAgICByZXR1cm4gIiI7Ci19Ci0KLWNvbnN0IGNoYXIqIGN1cnJlbnRU
ZXh0QnJlYWtMb2NhbGVJRCgpCi17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB1c2Ugc3lzdGVtIGxv
Y2FsZS4KLSAgICByZXR1cm4gImVuX3VzIjsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5h
bQppbmRleCBlY2I5OWJlYjQwYWYzMDVkYjNjODIxNjgzYTJlOGRmMDBkMjliYzZiLi42NDI4MzZk
N2JiNzM5ZDQzOTZmOGE1ZTIyYjNlMGYyYjcwNzc3N2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmls
ZS5hbQpAQCAtNjIxLDkgKzYyMSw4IEBAIFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0a2V5ZXZlbnRz
X0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGtl
eWV2ZW50c19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFncykKIAogUHJvZ3JhbXNfdW5p
dHRlc3RzX3Rlc3Rjb3B5YW5kcGFzdGVfU09VUkNFUyA9IFNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3Rjb3B5YW5kcGFzdGUuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1Zl
cnNpb25pbmcuYworCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5jCiBQcm9ncmFt
c191bml0dGVzdHNfdGVzdGNvcHlhbmRwYXN0ZV9DRkxBR1MgPSAkKHdlYmtpdF90ZXN0c19jZmxh
Z3MpIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlCiBQcm9ncmFtc191bml0dGVzdHNfdGVzdGNvcHlhbmRwYXN0
ZV9MREFERCA9ICQod2Via2l0X3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Rj
b3B5YW5kcGFzdGVfTERGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2xkZmxhZ3MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9wby9QT1RGSUxFUy5pbiBiL1NvdXJjZS9XZWJLaXQvZ3RrL3Bv
L1BPVEZJTEVTLmluCmluZGV4IGIxNzAwMWE4YjQxZWU4OWRkMmFjNzQ3NDdjMmI1MTQxYTM4NjY2
M2IuLjZiMmI4Y2MzYzQyZTQyY2JjYWY1ZDY1MmI1ZDdkOTY5ZGYwNjVlYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3BvL1BPVEZJTEVTLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3BvL1BPVEZJTEVTLmluCkBAIC0xLDggKzEsOCBAQAogIyBMaXN0IG9mIHNvdXJjZSBmaWxlcyB3
aGljaCBjb250YWluIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgotLi4vLi4vV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRXJyb3JzR3RrLmNwcAotLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
RnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ay5jcHAKLS4uLy4uL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAotLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvTG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKKy4uLy4uL1BsYXRmb3JtL2d0ay9ncmFwaGljcy9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrLmNwcAorLi4vLi4vUGxhdGZvcm0vZ3RrL0Vycm9y
c0d0ay5jcHAKKy4uLy4uL1BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAK
Ky4uLy4uL1BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRH
dGsuY3BwCiB3ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDMxNWRlOWM4M2ViMTNmMWMwMzM3YTUzOTQwMmNjYTU5MTEyYmM4YTYuLjA0YTE2NGQyYzgzZTFj
MDU5ZmI5NjJjMjU4ODAwNDIwMTdlYWNjNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC00Njgs
NiArNDY4LDcgQEAgbGliUGxhdGZvcm1HdGsyX2xhX0NQUEZMQUdTID0gXAogCS1mbm8tc3RyaWN0
LWFsaWFzaW5nIFwKIAkkKENPVkVSQUdFX0NGTEFHUykgXAogCSQoRU5DSEFOVF9DRkxBR1MpIFwK
KwkkKEdBTUVQQURfQ0ZMQUdTKSBcCiAJJChHRU9DTFVFX0NGTEFHUykgXAogCSQoRlJFRVRZUEVf
Q0ZMQUdTKSBcCiAJJChHTElCX0NGTEFHUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgYi9Tb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbAppbmRleCA3MmNmNjNmMjBiMjVm
MzVkZWY4NTJiZWJmYTBlMmQ4OTU3OTQyN2NiLi5iNzgzYTU4ODkwYmRlNDU3YjEyNzA1NzM5ZTVj
NjQ3YjliZDNlZDQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRl
LWZvcndhcmRpbmctaGVhZGVycy5wbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVy
YXRlLWZvcndhcmRpbmctaGVhZGVycy5wbApAQCAtMzYsNyArMzYsNyBAQCB1c2UgRmlsZTo6U3Bl
Yzo6RnVuY3Rpb25zOwogbXkgJHNyY1Jvb3QgPSByZWFscGF0aChGaWxlOjpTcGVjLT5jYXRmaWxl
KGRpcm5hbWUoYWJzX3BhdGgoJDApKSwgIi4uLy4uIikpOwogbXkgJGluY0Zyb21Sb290ID0gYWJz
X3BhdGgoJEFSR1ZbMF0pOwogbXkgQHBsYXRmb3JtUHJlZml4ZXMgPSAoImJsYWNrYmVycnkiLCAi
Y2YiLCAiY2hyb21pdW0iLCAiY3VybCIsICJlZmwiLCAiZ3RrIiwgIm1hYyIsICJxdCIsICJzb3Vw
IiwgInY4IiwgIndpbiIsICJ3eCIpOwotbXkgQGZyYW1ld29ya3MgPSAoICJKYXZhU2NyaXB0Q29y
ZSIsICJXZWJDb3JlIiwgIldlYktpdDIiKTsKK215IEBmcmFtZXdvcmtzID0gKCJKYXZhU2NyaXB0
Q29yZSIsICJQbGF0Zm9ybSIsICJXZWJDb3JlIiwgIldlYktpdDIiKTsKIG15IEBza2lwcGVkUHJl
Zml4ZXM7CiBteSBAZnJhbWV3b3JrSGVhZGVyczsKIG15ICRmcmFtZXdvcms7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3Vw
RXJyb3JzR3RrLmNwcAppbmRleCAwZDNmOWQzZWRkMTVkYmFiMjcyODRiZGZmZDhkMTc2ZTg0MjIz
ZTkzLi45NmI5MWJhMTM0NjljYjI1YjhlNDJlZjRhZDVmNjBmMGNhMzViNDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvZ3RrL0Rvd25sb2Fk
U291cEVycm9yc0d0ay5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJEb3dubG9hZFNvdXBFcnJvcnMuaCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvRXJy
b3JzR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRXJyb3JzR3RrLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUVycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXggOTVkNzZh
YmQwOGI3OTYwMjU2ZTZhOGVjZGNkZDZkMmQzODU1MTU3Ny4uNTViMWJiYTQ3NTBmMzg4MGJjNGE4
NzE1NWE3YzY4OWMxMjZmMDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oCkBAIC0zNiw5ICszNiw5IEBAIE9CSkNfQ0xBU1MgTlNWaWV3Owog
I2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UUtleUV2ZW50PgogI2VsaWYgUExBVEZPUk0o
R1RLKQotI2luY2x1ZGUgPEdPd25QdHJHdGsuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0
aW9uUmVzdWx0cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrSW5wdXRNZXRob2RGaWx0ZXIuaD4K
KyNpbmNsdWRlIDxQbGF0Zm9ybS9Db21wb3NpdGlvblJlc3VsdHMuaD4KKyNpbmNsdWRlIDxQbGF0
Zm9ybS9HT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrSW5wdXRNZXRob2RGaWx0
ZXIuaD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2VsaWYgUExBVEZPUk0o
RUZMKQogI2luY2x1ZGUgPEV2YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2Vi
TW91c2VFdmVudC5oCmluZGV4IGRkZTViMzYyZTNkMjUxZWZjZjYxNTZkZDg1ZTRkNDIwNDk2OTll
OGUuLmQ1ODg4MjJjYjg4MTRiNTAwMWIzNjNlZjU0ZjY5YTZhZWY1ZmE1ZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJNb3VzZUV2ZW50LmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYk1vdXNlRXZlbnQuaApAQCAtMzQsNyArMzQsNyBAQCBP
QkpDX0NMQVNTIE5TVmlldzsKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPHFldmVudC5o
PgogI2VsaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPEdPd25QdHJHdGsuaD4KKyNpbmNsdWRl
IDxQbGF0Zm9ybS9HT3duUHRyR3RrLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVu
dDsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxFdmFzLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL05hdGl2ZVdlYldoZWVsRXZlbnQuaAppbmRleCBmYWU5ZTk2YmUyZDZkNmI2NGE0
YTU4YmNkYzBjOGNjNjA2MTE1NTI2Li45MWU4MGFkYmQ4MjViOWE4MDEyMGM3YzdlMGUwNWVjZjE1
NTQyNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViV2hlZWxF
dmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJXaGVlbEV2ZW50LmgK
QEAgLTM0LDcgKzM0LDcgQEAgT0JKQ19DTEFTUyBOU1ZpZXc7CiAjZWxpZiBQTEFURk9STShRVCkK
ICNpbmNsdWRlIDxxZXZlbnQuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDxHT3du
UHRyR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgogdHlwZWRlZiB1bmlv
biBfR2RrRXZlbnQgR2RrRXZlbnQ7CiAjZWxpZiBQTEFURk9STShFRkwpCiAjaW5jbHVkZSA8RXZh
cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVy
c0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNw
cAppbmRleCAzOTY5ZTBjODY1ZWRlMDIyYmVhNTlhMTZiYjYyODZlMDFhYTg0OWZlLi4wODdlNzk0
OGQ3NzllYWJkYmUzYmY3NzQ0NWVjMmY5ZWJhNDEyNTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApAQCAtMjksMTAgKzI5LDEwIEBACiAj
aW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGF0
YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNs
dWRlIDxQbGF0Zm9ybS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0
YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HdGtWZXJzaW9uaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRD
YWlyby5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggMDg1ODE1YzQyZDQ3N2IxMmVk
Zjk2ZDE1Njg5MjZhOWZmOGFmZTZjNy4uMTIzNDIwODBkOTIyMDQwMDMzNGM1YzIyOTdhOTRiM2Q0
MGQzY2IxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5o
CkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFdlYkV2ZW50RmFjdG9yeV9oCiAKICNpbmNsdWRl
ICJXZWJFdmVudC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+Cisj
aW5jbHVkZSA8UGxhdGZvcm0vQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAKIHR5cGVkZWYgdW5pb24g
X0dka0V2ZW50IEdka0V2ZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggYmY2MTYyNDBhMDFmYmYzODk4MDE3MTI3
OGE4YjY2N2FjYzhhNmU4MS4uM2IxMmMzNmEwOWM2NDA3MWMxMzJlMTRiYmVhYzRjZDcyOTA2NDJh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmNwcApAQCAtMzgsOSArMzgsOSBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBvcHVw
TWVudVByb3h5R3RrLmgiCisjaW5jbHVkZSA8UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Mkd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0
aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA5ZmYyMTRlOTAyNmZlNzI1NDFjMDMzNGNhZWJhZjlk
OTNmOTE5MGZlLi44NDc0MjY4MTQzYjg5MDFlMGQzZmQwOWY5ZjVmMzcyZWY2NjYwZjdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXQyR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXQyR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCisjaW5jbHVkZSA8UGxhdGZvcm0v
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg+CiAjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcAppbmRl
eCBlOGE0ZGM3YzZkZDM1YmI5M2FkMjFmNDY5NmI0ZTdiZDZkNzYxYTc4Li40ZTMzYTA1MTJlYmFh
YjExMTc3NDMwNDJhYTEzNTdmMTU4Mzc0NWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAj
aW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFVSSVJlcXVlc3RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9FcnJvcnNHdGsuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDxnbGliL2dpMThu
LWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcAppbmRleCBkYzQ4YjFjMDEx
YWMwN2QzZDkxMjBmYWYyYTZhYjQ5OGMyYThhMGQwLi4zZDRiYTYwMDU0NDE4ZTcxNGM3M2VhZjMw
MzUzMDkyZjMxMzE0MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRFcnJvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RXJyb3IuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RXJy
b3IuaCIKIAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Vy
cm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0Vycm9yc0d0ay5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRpb24uY3BwCmluZGV4IDA2OGEyOGNkZGM1YjA0YTBj
ZjI1NGVkYWVmODQzOTFkZDQ5ZjQ2NjIuLmNhZTZiZjNiNjhmN2NkM2ZiMzQxNjEzZmI2MmUyNmE1
MGRmMGYwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFByaW50T3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcmludE9wZXJhdGlvbi5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRl
ICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRp
ZXMuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHAKaW5kZXggMGYwOTE3NTU0ZWY3ZDViZjJj
MWU4MDdiYmEzMGY2MGQ1OTk2Yjg4Ni4uNDEzOWQwOWEzZjgyMmExMGI5N2FiYjJlYTk2ZTc5MDMw
MTk2M2JhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VUlDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFVJQ2xpZW50LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZp
ZXdQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGll
cy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggMjMy
MGUxYzNjMWViYmVmMzM4MjI4ZGJiZjQ2MThiZDMzNmY3ZmFmMS4uZjdjYjM2NzUzNTYzODk4YjIy
MTQ1NjNhNGRmN2JkNTY4OTgyZDRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTU2LDkgKzU2LDkgQEAKICNpbmNsdWRl
ICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRp
ZXNQcml2YXRlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRHJhZ0ljb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0Ry
YWdJY29uLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgorI2luY2x1ZGUgPFBs
YXRmb3JtL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4K
ICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcAppbmRleCAyMzQ0Zjg5NGRmMzNlMGQzNzU0YWFmMWE5NDM2MjY0OGEy
MWM1ZmJkLi4wOTkwMWY2ZmY3NzAxYzFlYTc4ZmQ1MTA1ZDIxYWM0MDAzYzU1MGUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCkBAIC00MSwxOCArNDEsMTggQEAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJWaWV3QmFz
ZUlucHV0TWV0aG9kRmlsdGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0NsaXBib2FyZEd0ay5o
PgorI2luY2x1ZGUgPFBsYXRmb3JtL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oPgorI2luY2x1ZGUg
PFBsYXRmb3JtL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9EcmFnSWNvbi5o
PgorI2luY2x1ZGUgPFBsYXRmb3JtL0dPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9H
dGtDbGlja0NvdW50ZXIuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRm
b3JtL0d0a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9QYXN0ZWJvYXJkSGVscGVy
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRHJh
Z0ljb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0d0a0NsaWNrQ291bnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrRHJhZ0FuZERyb3BI
ZWxwZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNpbmNsdWRl
IDxnZGsvZ2RrLmg+CkBAIC02Nyw3ICs2Nyw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkgJiYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLSNpbmNsdWRlIDxXZWJD
b3JlL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaD4KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmll
d0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcAppbmRleCA4Yjg3YzE1MjIwMmE2
MjllYTQ3ZjAxYTQyYmZkZWRiNzE0MGJlNWRhLi40MGE0MDkwMTM5ZjVjNmY0MTlhZGQyOWUwZTY4
ZjZmOTU2MDY1ODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMjMs
OCArMjMsOCBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRl
ICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlIDxQbGF0Zm9ybS9Db21wb3NpdGlvblJlc3VsdHMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0NvbG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlvblJlc3VsdHMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmNwcAppbmRleCA3ZTdlYjAxNjc1ODIxYTVhYjJlM2RhNDJjYzI1ZTYwYWUxNzE4YjlhLi5k
ODBkMjQ0ZjNiMTFlY2M2NjU1MTUxOTkwZjYzYjk1Y2Q0ZGI0NjhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBA
IC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HT3duUHRyR3Rr
Lmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vR093blB0ckd0ay5oPgogCiBXZWJWaWV3VGVzdDo6V2Vi
Vmlld1Rlc3QoKQogICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZf
c2luayh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRNZW51UHJveHlHdGsuY3BwCmluZGV4IGVkMmI0ZGY4
ZjBkYTQ1OTA4ODQzNTgzOWRiNmQzOGNhOWM5NzAwM2YuLjVhZGYyNThkYThhYzQ0MjJiYTQ4N2Nh
MGM0NTBiMDgyMjY0NmI1N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGllcy5oPgog
I2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0
ay5jcHAKaW5kZXggZWJhM2NhYjQyZmU4YTEwNWU2NmM5NjdlYWM4ZTI0ZmM1Mzc1Zjg0Yi4uOWZj
YjE4YTA2YThjYTYxMzE0MzY2NWU0NDU2OWJkNzRmYmM1ZGEwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKQEAgLTMy
LDggKzMyLDggQEAKIAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFBsYXRmb3JtL0d0a1V0aWxpdGll
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcApp
bmRleCBhNDE4MzlhM2ViOTc2NGVkNDczNGFmMmU5NzY4NDc3ZTkwZWYzNDI3Li43OWQwMThiMjFm
MzAyNjhiMThiYmViMGE4Mjc1ZjcxOGIwZGZkOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIldlYlBv
cHVwSXRlbS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8
UGxhdGZvcm0vR3RrVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5
R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3Rr
LmgKaW5kZXggNGIzMzViY2RlNjU0NTkwMGIwNDIzOTc2NWEyYWExMjMzZGY3ZGEzNC4uZTE2NzVk
MWVkMDdmODMzMzczNzM3MTcxNDJiZTM0N2JlM2RjY2QzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuaApAQCAtMjEsNyArMjEs
NyBAQAogI2RlZmluZSBXZWJQb3B1cE1lbnVQcm94eUd0a19oCiAKICNpbmNsdWRlICJXZWJQb3B1
cE1lbnVQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrUG9wdXBNZW51Lmg+CisjaW5jbHVk
ZSA8UGxhdGZvcm0vR3RrUG9wdXBNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDEx
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0
c2NhcGVQbHVnaW5YMTEuY3BwCmluZGV4IGExODQ2ODc4YjMxMDQ2MTRiN2EyNmZjMjdjZWFiNzlh
MWE0Yjk4ZTAuLjkzZDM0NmNkYzQzOTVkYjllNTE2MWFlYWVkOTRiYWQ4YzAyNDdmMGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0
c2NhcGVQbHVnaW5YMTEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwCkBAIC00MSw4ICs0MSw4IEBACiAj
aWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiAjaW5jbHVkZSA8Z3RrL2d0a3guaD4KICNlbmRpZgor
I2luY2x1ZGUgPFBsYXRmb3JtL0d0a1ZlcnNpb25pbmcuaD4KICNpbmNsdWRlIDxnZGsvZ2RreC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2VsaWYgUExBVEZPUk0oRUZM
KSAmJiBkZWZpbmVkKEhBVkVfRUNPUkVfWCkKICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkRyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKaW5kZXggZDgwOGVkNDRiZmExNjhhZjU4
YzgxNTc1MTdkYTdiOThkMjMwMGQyOC4uNjY4OGE4MGYxNzZlMjlhN2VjZTBiNjI4MDU1NjU5ODYw
MmExNjcyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKQEAgLTMwLDcgKzMw
LDcgQEAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Ns
aXBib2FyZEd0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3JtL0NsaXBib2FyZEd0ay5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRv
ckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCmluZGV4IDY3ZmRjMWY0NDRlYWQ2YmE4Y2E3OTE4
ODRmZDU4MTlmODI0ZjBjODEuLjg5MmFjMWEyNzkxMGFjNjA1ODc5ZWFkZGMxOGNhOGJiNTQxMTlk
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMjYsOSArMjYs
OSBAQAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPYmpl
Y3RHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8
UGxhdGZvcm0vUGFzdGVib2FyZEhlbHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRF
dmVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZEhlbHBlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvV2luZG93c0tleWJvYXJkQ29kZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFcnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcAppbmRleCA4Mzc1ZDA2N2FlYjEyZDg5MmFlZmE2
OGU2NmVhNjMzYzk4ODI2M2NjLi41ZDA1YTE2MDNkZGVkYWQ0Y2Q3ZjM4ZDhlYjJjNmJlZjkwZWJk
NmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFcnJvcnNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKIAotI2luY2x1ZGUgPFdlYkNv
cmUvRXJyb3JzR3RrLmg+CisjaW5jbHVkZSA8UGxhdGZvcm0vRXJyb3JzR3RrLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
cXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmlu
ZGV4IDhiMGRiNmVjYzNlMzg0MjA3OWZlZGE5YTQxOWE3Mjk0ZWM5MmYyZDIuLjM2NDg3YjNkNjlk
MGUxODNjN2Q1NDE2MWUzMmE5NmJiODNlOGFlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcApAQCAtMzMsMTEgKzMzLDEx
IEBACiAjaW5jbHVkZSAiV2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgi
CisjaW5jbHVkZSA8UGxhdGZvcm0vUGFzdGVib2FyZEhlbHBlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZEhlbHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgog
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5j
cHAKaW5kZXggMGYwN2Q3NGJjYTVhOGQ2NDRkYTY5MDQ3NzA0MzExNTJlY2E0YWYzMy4uNjFhZWU0
OTJjNDhlZjdlNjA4ZjgyY2I5M2JlY2U0YzM5OWFlYTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlv
bkd0ay5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgorI2luY2x1ZGUgPFBsYXRmb3Jt
L0Vycm9yc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dENhaXJvLmg+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggZTUxNGMxNTBmMmZlOTQ4ODJjYTYxZDIzNTEwNWU5NTUwYjI2MjRkMS4uMGY1N2YzZTYy
Nzc5YjFiNzdiMWQwODBlZWViOGU3MjYxNGZhOGJkMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDEzLTAyLTI0ICBa
YW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBNb3Zl
IEdUSy1zcGVjaWZpYyBwbGF0Zm9ybSBmaWxlcyBmcm9tIFdlYkNvcmUgdG8gUGxhdGZvcm0KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDMzMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06IEFkanVzdCBwYXRocyB0byBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3cg
bG9jYXRlZCBpbiBTb3VyY2UvUGxhdGZvcm0uCisgICAgICAgIEFsc28gZml4IGFuIGluZGVudGF0
aW9uIHByb2JsZW0uIEFsc28gbGluayBEdW1wUmVuZGVyVHJlZSBhZ2FpbnN0IHRoZSBsaWJQbGF0
Zm9ybSBsaWJyYXJ5LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW06IEFk
anVzdCBwYXRocyB0byBmaWxlcyB0aGF0IGFyZSBub3cgbG9jYXRlZCBpbiBTb3VyY2UvUGxhdGZv
cm0uCisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcDog
SW5jbHVkZSB0aGUgR093blB0ckd0ayBoZWFkZXIgdGhyb3VnaCBhIGZvcndhcmRpbmcKKyAgICAg
ICAgaGVhZGVyIHRoYXQncyBub3cgcG9pbnRpbmcgaW50byBTb3VyY2UvUGxhdGZvcm0vZ3RrLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW06IFJlcGxhY2UgdGhlIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayByZWZlcmVuY2Ugd2l0aCBTb3VyY2UvUGxhdGZvcm0v
Z3RrLgorCisyMDEzLTAyLTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4K
KwogICAgICAgICBbR1RLXSBCdWlsZCBsaWJXZWJDb3JlUGxhdGZvcm0ubGEgYXMgbGliUGxhdGZv
cm0ubGEsIGxpYldlYkNvcmVHdGsubGEgYXMgbGliUGxhdGZvcm1HdGsubGEKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDU3OQogCmRpZmYgLS1naXQg
YS9Ub29scy9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IGMwODg2
ZTIwODQ2ZWMzNjE1MTliNWYwMzcyN2E0OTBiYzMzYzdjY2QuLmVlMzliY2Q5NGRmMWFjNjgzNmUy
Y2UxZjdmNzQ1Y2EzNzM2NzNmNTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDksOCArMTA5LDggQEAgUHJvZ3JhbXNfRHVt
cFJlbmRlclRyZWVfQ1BQRkxBR1MgPSBcCiAJLUkkKHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYXRrIFwKIAktSSQoc3JjZGlyKS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jYWlybyBcCiAJLUkk
KHNyY2RpcikvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
UGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ayBcCi0JLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL2pzIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBc
CiAJLUkkKHRvcF9idWlsZGRpcikvU291cmNlL1dlYktpdC9ndGsgXApAQCAtMTI0LDYgKzEyNCw3
IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZMQUdTICs9IFwKIGVuZGlmCiAKIFByb2dy
YW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCisJU291cmNlL1BsYXRmb3JtL2d0ay9HdGtW
ZXJzaW9uaW5nLmMgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmggXAog
CVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBcCiAJVG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVQcmVmaXguaCBcCkBAIC0xNDgsNyArMTQ5LDcg
QEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29scy9EdW1wUmVuZGVy
VHJlZS9jb25maWcuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlD
YWxsYmFja3MuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3NBdGsuY3BwIFwKLSAgICAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyQXRrLmNwcCBcCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyQXRrLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9Q
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9jYWlyby9Q
aXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCBcCkBAIC0xNjcsOCArMTY4LDcgQEAgUHJvZ3JhbXNfRHVt
cFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvU2VsZlNj
cm9sbGluZ1dlYktpdFdlYlZpZXcuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJ
bnB1dENvbnRyb2xsZXIuaCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENv
bnRyb2xsZXIuY3BwIFwKLQlUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvV29ya1F1ZXVlSXRlbUd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtWZXJzaW9uaW5nLmMKKwlU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvV29ya1F1ZXVlSXRlbUd0ay5jcHAKIAogUHJvZ3JhbXNf
RHVtcFJlbmRlclRyZWVfQ1hYRkxBR1MgPSBcCiAJJChnbG9iYWxfY3h4ZmxhZ3MpIFwKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL0dOVW1ha2VmaWxlLmFtCmluZGV4IDRmNWRmY2E4NzQzNTBhNzM0NjFhOTQyZTgzOGU1
ZjFiNGQxZTFhODMuLjE2ZThiMDY3OWJmYjg3YjMwNTcwNTZiZTkyYTk1MDRkM2FiNTRmZjcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvR05VbWFrZWZpbGUuYW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9HTlVtYWtlZmlsZS5hbQpAQCAtOTIsMTAgKzkyLDEwIEBAIFByb2dyYW1z
X1Rlc3RXZWJLaXRBUElfVGVzdEd0a19MREZMQUdTID0gXAogCSQoUHJvZ3JhbXNfVGVzdFdlYktp
dEFQSV9UZXN0V1RGX0xERkxBR1MpCiAKIFByb2dyYW1zX1Rlc3RXZWJLaXRBUElfVGVzdEd0a19T
T1VSQ0VTID0gXAorCVNvdXJjZS9QbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
IFwKKwlTb3VyY2UvUGxhdGZvcm0vZ3RrL2dyYXBoaWNzL0ludFJlY3RHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwIFwKIAlUb29scy9UZXN0
V2ViS2l0QVBJL2NvbmZpZy5oIFwKIAlUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1
dE1ldGhvZEZpbHRlci5jcHAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsv
UGxhdGZvcm1XZWJWaWV3R3RrLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1BsYXRmb3Jt
V2ViVmlld0d0ay5jcHAKaW5kZXggYmE2ZmFiMDQ4NDBjMTI3N2M2ZmIxMzE3N2YxMjI2Njc1Njc0
N2MyMS4uMTM5NmRhOWY5YWNlZWRjZmU2YTk4YjFhZjY5YWU1YWQyZDM4MmU5YSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvUGxhdGZvcm1XZWJWaWV3R3RrLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9QbGF0Zm9ybVdlYlZpZXdHdGsuY3BwCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3Lmgi
CiAKLSNpbmNsdWRlIDxXZWJDb3JlL0dPd25QdHJHdGsuaD4KKyNpbmNsdWRlIDxQbGF0Zm9ybS9H
T3duUHRyR3RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dPd25QdHIuaD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9HTlVtYWtl
ZmlsZS5hbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05VbWFrZWZpbGUuYW0KaW5kZXggMTgx
MjU2OTY3NmEyYzgxNGRjZjhlYzIyZTRlZGZmZTNkMDIwOTZmNC4uZjFmYjMwODUyOGVmYTU2YmNl
NDUxM2RkOThiOTk0NmY3ZmNmZWY1NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxl
LmFtCkBAIC0zOCw3ICszOCw3IEBAIFByb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfU09VUkNFUyA9
IFwKIFByb2dyYW1zX1dlYktpdFRlc3RSdW5uZXJfQ1BQRkxBR1MgPSBcCiAJLWluY2x1ZGUgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyUHJlZml4LmggXAogCS1JJChzcmNk
aXIpL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvU291cmNlL1BsYXRmb3JtL2d0ayBcCiAJLUkk
KHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKIAkkKGdsb2Jh
bF9jcHBmbGFncykgXAogCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwK
</data>

          </attachment>
      

    </bug>

</bugzilla>